|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Joël Riou. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Christian Merten, Joël Riou |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.AlgebraicGeometry.Fiber |
| 9 | +public import Mathlib.AlgebraicGeometry.Sites.AffineEtale |
| 10 | +public import Mathlib.CategoryTheory.Functor.TypeValuedFlat |
| 11 | +public import Mathlib.CategoryTheory.Limits.Elements |
| 12 | +public import Mathlib.CategoryTheory.Sites.Point.Conservative |
| 13 | + |
| 14 | +public import Mathlib.FieldTheory.SeparableClosure |
| 15 | + |
| 16 | +/-! |
| 17 | +
|
| 18 | +# Points of the étale site |
| 19 | +
|
| 20 | +In this file, we show that a morphism `Spec (.of Ω) ⟶ S` where `Ω` is |
| 21 | +a separably closed field defines a point on the small étale site of `S`. |
| 22 | +We show that these points form a conservative family. |
| 23 | +
|
| 24 | +-/ |
| 25 | + |
| 26 | +@[expose] public section |
| 27 | + |
| 28 | +universe u |
| 29 | + |
| 30 | +open CategoryTheory Opposite |
| 31 | + |
| 32 | +namespace AlgebraicGeometry.Scheme |
| 33 | + |
| 34 | +variable {S : Scheme.{u}} {Ω : Type u} [Field Ω] [IsSepClosed Ω] |
| 35 | + (s : Spec (.of Ω) ⟶ S) |
| 36 | + |
| 37 | +lemma exists_fac_of_etale_of_isSepClosed {X S : Scheme.{u}} (f : X ⟶ S) [Etale f] |
| 38 | + {Ω : Type u} [Field Ω] [IsSepClosed Ω] (s : Spec (.of Ω) ⟶ S) |
| 39 | + (x : X) (hx : f x = s default) : |
| 40 | + ∃ (l : Spec (.of Ω) ⟶ X), l ≫ f = s ∧ l default = x := by |
| 41 | + obtain ⟨⟨s, a⟩, rfl⟩ := (SpecToEquivOfField Ω S).symm.surjective s |
| 42 | + obtain rfl : f x = s := by simp [hx, SpecToEquivOfField] |
| 43 | + let m := (f.residueFieldMap x).hom |
| 44 | + dsimp at m |
| 45 | + algebraize [m, a.hom] |
| 46 | + let b : X.residueField x →ₐ[S.residueField (f x)] Ω := |
| 47 | + IsSepClosed.lift |
| 48 | + have : f.residueFieldMap x ≫ CommRingCat.ofHom b.toRingHom = a := by |
| 49 | + ext1; exact b.comp_algebraMap |
| 50 | + refine ⟨Spec.map (CommRingCat.ofHom b.toRingHom) ≫ X.fromSpecResidueField x, ?_, ?_⟩ |
| 51 | + · simp [SpecToEquivOfField, ← this] |
| 52 | + rfl |
| 53 | + · dsimp |
| 54 | + apply fromSpecResidueField_apply |
| 55 | + |
| 56 | +instance : IsCofiltered (Etale.forget S ⋙ coyoneda.obj (op (Over.mk s))).Elements := |
| 57 | + Functor.isCofiltered_elements _ |
| 58 | + |
| 59 | +set_option backward.defeqAttrib.useBackward true in |
| 60 | +/-- A morphism `s : Spec (.of Ω) ⟶ S` where `Ω` is a separably closed field |
| 61 | +defines a point for the small étale site of `S`. -/ |
| 62 | +@[simps] |
| 63 | +noncomputable def pointSmallEtale : (smallEtaleTopology S).Point where |
| 64 | + fiber := Etale.forget S ⋙ coyoneda.obj (op (Over.mk s)) |
| 65 | + initiallySmall := |
| 66 | + initiallySmall_of_essentiallySmall_weakly_initial_objectProperty |
| 67 | + (Functor.Elements.precomp (AffineEtale.Spec S) |
| 68 | + (Etale.forget S ⋙ coyoneda.obj (op (Over.mk s)))).essImage (by |
| 69 | + rintro ⟨X, x⟩ |
| 70 | + cases X with | _ Y f |
| 71 | + obtain ⟨y, hy, rfl⟩ := Over.homMk_surjective x |
| 72 | + dsimp at y hy |
| 73 | + obtain ⟨R, j, _, y', rfl⟩ : ∃ (R : CommRingCat) (j : Spec (.of R) ⟶ Y) |
| 74 | + (_ : IsOpenImmersion j) (y' : _ ⟶ _), y' ≫ j = y := by |
| 75 | + obtain ⟨R, j, _, hj, _⟩ := exists_affine_mem_range_and_range_subset |
| 76 | + (x := y.base default) (U := ⊤) (by simp) |
| 77 | + refine ⟨R, j, inferInstance, _, IsOpenImmersion.lift_fac j y ?_⟩ |
| 78 | + rintro _ ⟨a, rfl⟩ |
| 79 | + rwa [Subsingleton.elim a default] |
| 80 | + exact ⟨_, |
| 81 | + ⟨Functor.elementsMk _ (AffineEtale.mk (j ≫ f)) (Over.homMk y'), ⟨Iso.refl _⟩⟩, |
| 82 | + ⟨⟨MorphismProperty.Over.homMk j rfl (by simp), by cat_disch⟩⟩⟩) |
| 83 | + jointly_surjective {X} R hR φ := by |
| 84 | + cases X with | _ X f |
| 85 | + obtain ⟨φ : Spec (.of Ω) ⟶ X, rfl : φ ≫ f = s, rfl⟩ := Over.homMk_surjective φ |
| 86 | + obtain ⟨𝒰, h, _, le⟩ := (mem_smallGrothendieckTopology _ _).1 hR |
| 87 | + obtain ⟨i, y, hy⟩ := 𝒰.exists_eq (φ default) |
| 88 | + obtain ⟨l, hl₁, hl₂⟩ := exists_fac_of_etale_of_isSepClosed (𝒰.f i) φ _ hy |
| 89 | + have : 𝒰.f i ≫ f = 𝒰.X i ↘ S := HomIsOver.comp_over (f := 𝒰.f i) (S := S) |
| 90 | + exact ⟨(𝒰.X i).asOverProp S inferInstance, |
| 91 | + MorphismProperty.Over.homMk (𝒰.f i), le _ _ ⟨i⟩, Over.homMk l, by cat_disch⟩ |
| 92 | + |
| 93 | +variable {s₀ : S} (hs₀ : s default = s₀) |
| 94 | + |
| 95 | +/-- Given a morphism `s : Spec (.of Ω) ⟶ S` with image `s₀ : S` where `Ω` is a |
| 96 | +separably closed field, this is the canonical map |
| 97 | +`(pointSmallEtale s).fiber.obj X ⟶ X.hom ⁻¹' {s₀}` for `X : S.Etale`. -/ |
| 98 | +@[simps] |
| 99 | +noncomputable def pointSmallEtaleFiberObjToPreimage {X : S.Etale} |
| 100 | + (t : (pointSmallEtale s).fiber.obj X) : |
| 101 | + X.hom ⁻¹' {s₀} := |
| 102 | + ⟨t.left (default : Spec (.of Ω)), by |
| 103 | + have := (Over.w t).symm |
| 104 | + cat_disch⟩ |
| 105 | + |
| 106 | +set_option backward.isDefEq.respectTransparency false in |
| 107 | +instance {Y X : Scheme.{u}} (f : Y ⟶ X) [Etale f] (x : X) : |
| 108 | + Etale (f.fiberToSpecResidueField x) := by |
| 109 | + dsimp [Hom.fiberToSpecResidueField] |
| 110 | + infer_instance |
| 111 | + |
| 112 | +set_option backward.isDefEq.respectTransparency false in |
| 113 | +lemma pointSmallEtaleFiberObjToPreimage_surjective (X : S.Etale) : |
| 114 | + Function.Surjective (pointSmallEtaleFiberObjToPreimage s hs₀ (X := X)) := by |
| 115 | + intro y |
| 116 | + obtain ⟨y, rfl⟩ := (X.hom.fiberHomeo s₀).surjective y |
| 117 | + obtain ⟨⟨t, a⟩, rfl⟩ := (Scheme.SpecToEquivOfField Ω _).symm.surjective s |
| 118 | + obtain rfl : t = s₀ := by simp [SpecToEquivOfField, ← hs₀] |
| 119 | + obtain ⟨l, hl, rfl⟩ := exists_fac_of_etale_of_isSepClosed |
| 120 | + (X.hom.fiberToSpecResidueField _) (Spec.map a) y (by subsingleton) |
| 121 | + refine ⟨Over.homMk (l ≫ X.hom.fiberι t) ?_, rfl⟩ |
| 122 | + simp [X.hom.fiber_fac, reassoc_of% hl] |
| 123 | + rfl |
| 124 | + |
| 125 | +set_option backward.isDefEq.respectTransparency false in |
| 126 | +lemma isConservative_pointSmallEtale |
| 127 | + {ι : Type*} {S : Scheme.{u}} |
| 128 | + {Ω : ι → Type u} [∀ i, Field (Ω i)] [∀ i, IsSepClosed (Ω i)] |
| 129 | + (s : ∀ i, Spec (.of (Ω i)) ⟶ S) |
| 130 | + (hs : ⋃ i, Set.range (s i) = .univ) : |
| 131 | + (ObjectProperty.ofObj (fun i ↦ pointSmallEtale (s i))).IsConservativeFamilyOfPoints := |
| 132 | + .mk' (fun X R hR ↦ by |
| 133 | + obtain ⟨α, T, f, rfl⟩ := R.exists_eq_ofArrows |
| 134 | + rw [ofArrows_mem_smallEtaleTopology_iff] |
| 135 | + ext x |
| 136 | + simp only [Set.mem_iUnion, Set.mem_range, Set.mem_univ, iff_true] |
| 137 | + obtain ⟨i, hi⟩ : ∃ i, s i default = X.hom x := by |
| 138 | + have := Set.mem_univ (X.hom x) |
| 139 | + simp only [← hs, Functor.id_obj, Set.mem_iUnion, Set.mem_range] at this |
| 140 | + obtain ⟨i, y, hy⟩ := this |
| 141 | + obtain rfl := Subsingleton.elim y default |
| 142 | + exact ⟨i, hy⟩ |
| 143 | + obtain ⟨x', hx'⟩ := pointSmallEtaleFiberObjToPreimage_surjective (s i) hi X ⟨x, by simp⟩ |
| 144 | + rw [Subtype.ext_iff] at hx' |
| 145 | + simp only [Functor.id_obj, pointSmallEtaleFiberObjToPreimage_coe, Etale.forget_obj_left] at hx' |
| 146 | + subst hx' |
| 147 | + obtain ⟨W, g, ⟨Z, p, _, ⟨a⟩, rfl⟩, y, rfl⟩ := hR ⟨_, ⟨i⟩⟩ x' |
| 148 | + exact ⟨a, (pointSmallEtaleFiberObjToPreimage (s i) hi (y ≫ p.hom)).1, rfl⟩) |
| 149 | + |
| 150 | +lemma isConservativeFamilyOfPoints_pointSmallEtale' (S : Scheme.{u}) : |
| 151 | + (ObjectProperty.ofObj (fun (s : S) ↦ pointSmallEtale |
| 152 | + ((SpecToEquivOfField (SeparableClosure (S.residueField s)) _).2 |
| 153 | + ⟨s, CommRingCat.ofHom |
| 154 | + (algebraMap (S.residueField s) _)⟩))).IsConservativeFamilyOfPoints := |
| 155 | + isConservative_pointSmallEtale _ (by |
| 156 | + ext s |
| 157 | + simp only [Equiv.invFun_as_coe, Set.mem_iUnion, Set.mem_range, Set.mem_univ, iff_true] |
| 158 | + exact ⟨s, default, by simp [SpecToEquivOfField]⟩) |
| 159 | + |
| 160 | +instance : GrothendieckTopology.HasEnoughPoints.{u} (smallEtaleTopology S) where |
| 161 | + exists_objectProperty := |
| 162 | + ⟨_, inferInstance, isConservativeFamilyOfPoints_pointSmallEtale' S⟩ |
| 163 | + |
| 164 | +end AlgebraicGeometry.Scheme |
0 commit comments