|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Andrew Yang. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Andrew Yang, Christian Merten |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.AlgebraicGeometry.AlgClosed.Basic |
| 9 | +public import Mathlib.AlgebraicGeometry.Geometrically.Integral |
| 10 | +public import Mathlib.AlgebraicGeometry.ZariskisMainTheorem |
| 11 | +public import Mathlib.CategoryTheory.Monoidal.Cartesian.Grp_ |
| 12 | + |
| 13 | +/-! |
| 14 | +# Abelian varieties |
| 15 | +
|
| 16 | +## Main results |
| 17 | +- `AlgebraicGeometry.isCommMonObj_of_isProper_of_geometricallyIntegral`: |
| 18 | + A proper geometrically integral group scheme over a field is commutative. |
| 19 | +
|
| 20 | +-/ |
| 21 | + |
| 22 | +@[expose] public section |
| 23 | + |
| 24 | +open CategoryTheory Limits |
| 25 | + |
| 26 | +namespace AlgebraicGeometry |
| 27 | + |
| 28 | +universe u |
| 29 | + |
| 30 | +variable {K : Type u} [Field K] {X : Scheme.{u}} |
| 31 | + |
| 32 | +open MonoidalCategory CartesianMonoidalCategory MonObj |
| 33 | + |
| 34 | +instance (G : Over (Spec (.of K))) [GrpObj G] : IsClosedImmersion η[G].left := |
| 35 | + isClosedImmersion_of_comp_eq_id (Y := Spec (.of K)) G.hom η[G].left (by simp) |
| 36 | + |
| 37 | +theorem isCommMonObj_of_isProper_of_isIntegral_tensorObj_of_isAlgClosed [IsAlgClosed K] |
| 38 | + (G : Over (Spec (.of K))) [IsProper G.hom] [IsIntegral (G ⊗ G).left] [GrpObj G] : |
| 39 | + IsCommMonObj G := by |
| 40 | + let S := Spec (.of K) |
| 41 | + let point : S := IsLocalRing.closedPoint K |
| 42 | + have hpoint : IsClosed {point} := isClosed_discrete _ |
| 43 | + have : Nonempty G.left := ⟨η[G].left point⟩ |
| 44 | + have : IsProper (G ⊗ G).hom := by dsimp; infer_instance |
| 45 | + have : JacobsonSpace (G ⊗ G).left := LocallyOfFiniteType.jacobsonSpace (Y := Spec _) (G ⊗ G).hom |
| 46 | + have : Surjective G.hom := ⟨Function.surjective_to_subsingleton (α := G.left) (β := Spec _) _⟩ |
| 47 | + have : IsProper (fst G G).left := by dsimp; infer_instance |
| 48 | + have : Surjective (fst G G).left := by dsimp; infer_instance |
| 49 | + have : IsProper ((GrpObj.commutator G).left ≫ G.hom) := by rw [Over.w]; infer_instance |
| 50 | + have : IsClosedImmersion ((lift η[G] η[G]).left ≫ (fst G G).left) := by |
| 51 | + simpa using inferInstanceAs (IsClosedImmersion η[G].left) |
| 52 | + have : IsClosedImmersion (lift η[G] η[G]).left := .of_comp _ (g := (fst G G).left) |
| 53 | + let γ : G ⊗ G ⟶ G ⊗ G := lift (fst _ _) (GrpObj.commutator _) |
| 54 | + have : IsProper (γ.left ≫ (fst G G).left) := by simpa [γ] |
| 55 | + have : IsProper γ.left := .of_comp _ (fst G G).left |
| 56 | + -- It suffices to check that `γ : (x, y) ↦ x * y * x⁻¹ * y⁻¹` is constantly `1`. |
| 57 | + rw [isCommMonObj_iff_commutator_eq_toUnit_η] |
| 58 | + ext1 |
| 59 | + have H : γ.left '' ((fst G G).left ⁻¹' {η[G].left point}) ⊆ {(lift η[G] η[G]).left point} := by |
| 60 | + rw [Set.image_subset_iff, ← Set.diff_eq_empty, ← Set.not_nonempty_iff_eq_empty] |
| 61 | + intro H |
| 62 | + obtain ⟨c₀, ⟨hc₁, hc₂⟩, hc₃⟩ := nonempty_inter_closedPoints H <| by |
| 63 | + rw [Set.diff_eq_compl_inter, ← Set.image_singleton, ← Set.image_singleton]; |
| 64 | + refine (IsOpen.isLocallyClosed ?_).inter (IsClosed.isLocallyClosed ?_) |
| 65 | + · exact (((lift η[G] η[G]).left.isClosedMap _ hpoint).preimage γ.left.continuous).isOpen_compl |
| 66 | + · exact (η[G].left.isClosedMap _ hpoint).preimage (fst G G).left.continuous |
| 67 | + obtain ⟨⟨c, hc⟩, e⟩ := (pointEquivClosedPoint (G ⊗ G).hom).surjective ⟨c₀, hc₃⟩ |
| 68 | + obtain rfl : c point = c₀ := congr(($e).1) |
| 69 | + let fc : 𝟙_ (Over S) ⟶ 𝟙_ (Over S) ⊗ G := lift (𝟙 _) (Over.homMk c hc ≫ snd G G) |
| 70 | + have : c ≫ pullback.fst G.hom G.hom = η[G].left := |
| 71 | + ext_of_apply_closedPoint_eq G.hom (by simpa) (by simp) (by simpa) |
| 72 | + have H₁ : c = fc.left ≫ (η[G] ▷ G).left := by dsimp; ext <;> simp [fc, S, this] |
| 73 | + have H₂ : fc ≫ η ▷ G ≫ γ = lift η η := by ext1 <;> simp [fc, γ, S] |
| 74 | + exact hc₂ <| by simp [H₁, H₂, ← Scheme.Hom.comp_apply, Category.assoc, ← Over.comp_left] |
| 75 | + -- Since the image of `y ↦ γ(e, y)` is finite, by Zariski Main, there exists an open |
| 76 | + -- `1 ∈ U ⊆ G` such that `γ ∣_ U` factors through a finite scheme over `U`. |
| 77 | + obtain ⟨U, hηU, H⟩ := exists_finite_imageι_comp_morphismRestrict_of_finite_image_preimage |
| 78 | + γ.left (fst G G).left (η[G].left point) (by |
| 79 | + dsimp [-Scheme.Hom.comp_base, γ] |
| 80 | + simp only [pullback.lift_fst] |
| 81 | + exact (Set.finite_singleton _).subset H) |
| 82 | + have H (x : U) : ((pullback.fst G.hom G.hom) ⁻¹' {x.1} ∩ Set.range ⇑γ.left).Finite := by |
| 83 | + refine ((((γ.left.imageι ≫ (fst G G).left) ∣_ U).finite_preimage_singleton x).image |
| 84 | + (Scheme.Opens.ι _ ≫ γ.left.imageι)).subset ?_ |
| 85 | + have : U.ι ⁻¹' {x.1} = {x} := by ext; simp |
| 86 | + rw [← this, ← Set.preimage_comp, ← TopCat.coe_comp, ← Scheme.Hom.comp_base, |
| 87 | + morphismRestrict_ι, ← Category.assoc, Scheme.Hom.comp_base (_ ≫ _) (fst G G).left, |
| 88 | + TopCat.coe_comp, Set.preimage_comp, Set.image_preimage_eq_inter_range] |
| 89 | + simp only [Scheme.Hom.comp_base, TopCat.coe_comp, Set.range_comp, Scheme.Opens.range_ι] |
| 90 | + dsimp |
| 91 | + rw [Set.image_preimage_eq_inter_range, Scheme.IdealSheafData.range_subschemeι, |
| 92 | + Scheme.Hom.support_ker, ← Set.inter_assoc, ← Set.preimage_inter, |
| 93 | + Set.singleton_inter_of_mem x.2, IsClosed.closure_eq |
| 94 | + (by exact γ.left.isClosedMap.isClosed_range)] |
| 95 | + -- It suffices to check set-theoretic equality on closed points of `U ×[k] G`. |
| 96 | + refine ext_of_apply_eq G.hom _ |
| 97 | + ((fst G G).left ⁻¹ᵁ U).isOpen.isLocallyClosed |
| 98 | + (((fst G G).left ⁻¹ᵁ U).isOpen.dense ?_) ?_ ?_ |
| 99 | + · exact .preimage ⟨_, hηU⟩ (fst G G).left.surjective |
| 100 | + · intro y hyU hy |
| 101 | + have hx : IsClosed {(fst G G).left y} := by simpa using (fst G G).left.isClosedMap _ hy |
| 102 | + let x : 𝟙_ _ ⟶ G := Over.homMk (pointOfClosedPoint G.hom _ hx) (by simp) |
| 103 | + let xe : (G ⊗ G).left := (fst G G ≫ (ρ_ _).inv ≫ G ◁ η[G]).left y |
| 104 | + have : γ.left y = xe := by |
| 105 | + -- By the choice of `U`, the set `γ({y} ×[k] G)` is finite and hence, by irreducibility, |
| 106 | + -- a singleton. |
| 107 | + refine subsingleton_image_closure_of_finite_of_isPreirreducible |
| 108 | + (hx.preimage (fst G G).left.continuous).isLocallyClosed ?_ γ.left.continuous |
| 109 | + γ.left.isClosedMap ((H ⟨_, hyU⟩).subset (Set.image_subset_iff.mpr fun _ ↦ by |
| 110 | + simp [← Scheme.Hom.comp_apply, -Scheme.Hom.comp_base, γ])) ?_ ?_ |
| 111 | + · let α : G ⊗ G ⟶ G ⊗ G := toUnit _ ≫ x ⊗ₘ 𝟙 _ |
| 112 | + convert ((IrreducibleSpace.isIrreducible_univ _).image α.left |
| 113 | + α.left.continuous.continuousOn).isPreirreducible |
| 114 | + rw [Over.tensorHom_left] |
| 115 | + simp [Set.range_comp, Scheme.Pullback.range_map, x] |
| 116 | + · exact ⟨y, subset_closure (by simp), rfl⟩ |
| 117 | + · refine ⟨xe, subset_closure ?_, ?_⟩ |
| 118 | + · simp [xe, ← Scheme.Hom.comp_apply, - Scheme.Hom.comp_base] |
| 119 | + · simp only [xe, γ, ← Scheme.Hom.comp_apply, ← Over.comp_left] |
| 120 | + congr 6; ext <;> simp |
| 121 | + convert congr((snd G G).left $this) using 1 |
| 122 | + · simp [γ, ← Scheme.Hom.comp_apply] |
| 123 | + · simp [xe, ← Scheme.Hom.comp_apply, - Scheme.Hom.comp_base] |
| 124 | + · simp |
| 125 | + |
| 126 | +/-- A proper geometrically integral group scheme over a field is commutative. -/ |
| 127 | +@[stacks 0BFD] |
| 128 | +theorem isCommMonObj_of_isProper_of_geometricallyIntegral |
| 129 | + (G : Over (Spec (.of K))) [IsProper G.hom] [GeometricallyIntegral G.hom] [GrpObj G] : |
| 130 | + IsCommMonObj G := by |
| 131 | + let f := Spec.map (CommRingCat.ofHom <| algebraMap K (AlgebraicClosure K)) |
| 132 | + let G' := (Over.pullback f).obj G |
| 133 | + have : IsProper G'.hom := by dsimp [G']; infer_instance |
| 134 | + have : IsIntegral (G' ⊗ G').left := by dsimp [G']; infer_instance |
| 135 | + let : GrpObj G' := Functor.grpObjObj |
| 136 | + have := isCommMonObj_of_isProper_of_isIntegral_tensorObj_of_isAlgClosed G' |
| 137 | + rw [isCommMonObj_iff_commutator_eq_toUnit_η] at this ⊢ |
| 138 | + apply (Over.pullback f).map_injective |
| 139 | + rw [← cancel_epi (Functor.Monoidal.μIso (Over.pullback f) G G).hom] |
| 140 | + dsimp [GrpObj.commutator] at this ⊢ |
| 141 | + simpa only [Functor.map_mul, one_eq_one, comp_one, Functor.map_one, Functor.map_inv', |
| 142 | + comp_mul, GrpObj.comp_inv, Functor.Monoidal.μ_fst, Functor.Monoidal.μ_snd] |
| 143 | + |
| 144 | +end AlgebraicGeometry |
0 commit comments