Definitions/Def_AlgebraicCurve_TwoChartIntegralModel.lean
Two-chart integral model of a -line over a base ring
Fix a commutative ring R, a field F that is an R-algebra, and an element j \in F assumed non-zero. For a subset S \subseteq F, chartAlg R F S is the R-subalgebra of F consisting of the elements integral over \mathrm{Adjoin}_R(S), i.e. the integral closure in F of the R-subalgebra generated by S; it contains \mathrm{Adjoin}_R(S) and hence S, and is monotone in S, with chartIncl the induced injective R-algebra inclusion. Three instances are named: A_{\mathrm{fin}} = chartAlgFin for S = \{j\}, A_{\infty} = chartAlgInf for S = \{j^{-1}\} and A_{\mathrm{mid}} = chartAlgMid for S = \{j, j^{-1}\}, together with the distinguished elements j \in A_{\mathrm{fin}} and j^{-1} \in A_{\infty}. Two arithmetic lemmas (exists_pow_mul_mem_adjoin, exists_pow_mul_mem_chartAlg) show that adjoining s^{-1} to S, for 0 \neq s \in S, only introduces denominators that are powers of s; from these, A_{\mathrm{mid}} is identified as the localisation of A_{\mathrm{fin}} away from j and also as the localisation of A_{\infty} away from j^{-1}, so that the two induced morphisms \operatorname{Spec} A_{\mathrm{mid}} \to \operatorname{Spec} A_{\mathrm{fin}} and \operatorname{Spec} A_{\mathrm{mid}} \to \operatorname{Spec} A_{\infty} are open immersions.
The scheme AlgebraicCurve.TwoChartIntegralModel R F j is defined as the pushout of these two open immersions, with ιFin, ιInf the two canonical morphisms, themselves open immersions, satisfying the gluing identity; their open ranges chartFinOpen, chartInfOpen are affine opens whose join is the whole space (twoChartCover), since every point lies in the image of one of the two. Since the structure maps R \to A_{\mathrm{fin}}, R \to A_{\infty} agree on A_{\mathrm{mid}}, the pushout carries a morphism toBase to \operatorname{Spec} R restricting on each chart to the corresponding Spec of the structure map. Further declarations record the R-algebra maps R[X] \to A_{\mathrm{fin}}, X \mapsto j, and R[X] \to A_{\infty}, X \mapsto j^{-1}; the base change baseChange R F j S along R \to S as a pullback of toBase, with its two projections and the resulting square; the fibre over an ideal I, namely the base change to R/I; and, for an intermediate ring R \to R' \to F, the inclusions \mathrm{chartAlg}_R(S) \subseteq \mathrm{chartAlg}_{R'}(S) as ring maps compatible with structure maps.
Relation to Mathlib
Built directly from Mathlib's integral closure, IsLocalization.Away, affine schemes and pushouts of schemes along locally directed diagrams; the glued two-chart object and its chart algebras are the project's own definitions.
Where it is used
This is the base-generic form of the two-chart model of a j-line inside a field F (the normalisation of the projective j-line in F, chart by chart), specialised in the project to bases such as \mathbb{Z}, \mathbb{Z}[1/N] and \mathbb{Z}_{(\ell)} in the construction of integral models of modular curves and their fibres; no flatness, properness or normality statement is made here.
References
- R. Hartshorne, Algebraic Geometry, Graduate Texts in Mathematics 52, Springer, 1977, Chapter II
- H. Matsumura, Commutative Ring Theory, Cambridge Studies in Advanced Mathematics 8, Cambridge University Press, 1986
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 380 lines
- 67 declarations
- used in the statements of 1,223 theorems and imported by 1,321 proofs
- imports 0 definition modules
Source file: Definitions/Def_AlgebraicCurve_TwoChartIntegralModel.lean
Imports
- only Mathlib
Declarations
- theorem
AlgebraicCurve.TwoChartIntegralModel.j_ne_zero - def
AlgebraicCurve.TwoChartIntegralModel.chartAlg - theorem
AlgebraicCurve.TwoChartIntegralModel.mem_chartAlg_iff - theorem
AlgebraicCurve.TwoChartIntegralModel.adjoin_le_chartAlg - theorem
AlgebraicCurve.TwoChartIntegralModel.subset_chartAlg - theorem
AlgebraicCurve.TwoChartIntegralModel.chartAlg_mono - abbrev
AlgebraicCurve.TwoChartIntegralModel.chartIncl - theorem
AlgebraicCurve.TwoChartIntegralModel.coe_chartIncl - theorem
AlgebraicCurve.TwoChartIntegralModel.chartIncl_injective - theorem
AlgebraicCurve.TwoChartIntegralModel.exists_pow_mul_mem_adjoin - theorem
AlgebraicCurve.TwoChartIntegralModel.exists_pow_mul_mem_chartAlg - theorem
AlgebraicCurve.TwoChartIntegralModel.sFin_subset - theorem
AlgebraicCurve.TwoChartIntegralModel.sInf_subset - abbrev
AlgebraicCurve.TwoChartIntegralModel.chartAlgFin - abbrev
AlgebraicCurve.TwoChartIntegralModel.chartAlgInf - abbrev
AlgebraicCurve.TwoChartIntegralModel.chartAlgMid - def
AlgebraicCurve.TwoChartIntegralModel.jChartFin - def
AlgebraicCurve.TwoChartIntegralModel.jInvChartInf - theorem
AlgebraicCurve.TwoChartIntegralModel.coe_jChartFin - theorem
AlgebraicCurve.TwoChartIntegralModel.coe_jInvChartInf - abbrev
AlgebraicCurve.TwoChartIntegralModel.inclFin - abbrev
AlgebraicCurve.TwoChartIntegralModel.inclInf - theorem
AlgebraicCurve.TwoChartIntegralModel.isUnit_inclFin_jChartFin - theorem
AlgebraicCurve.TwoChartIntegralModel.isUnit_inclInf_jInvChartInf - theorem
AlgebraicCurve.TwoChartIntegralModel.isLocalization_away_inclFin - theorem
AlgebraicCurve.TwoChartIntegralModel.isLocalization_away_inclInf - abbrev
AlgebraicCurve.TwoChartIntegralModel.XFin - abbrev
AlgebraicCurve.TwoChartIntegralModel.XInf - abbrev
AlgebraicCurve.TwoChartIntegralModel.XMid - abbrev
AlgebraicCurve.TwoChartIntegralModel.fFin - abbrev
AlgebraicCurve.TwoChartIntegralModel.fInf - instance
AlgebraicCurve.TwoChartIntegralModel.isOpenImmersion_fFin - instance
AlgebraicCurve.TwoChartIntegralModel.isOpenImmersion_fInf - def
AlgebraicCurve.TwoChartIntegralModel - def
AlgebraicCurve.TwoChartIntegralModel.ιFin - def
AlgebraicCurve.TwoChartIntegralModel.ιInf - theorem
AlgebraicCurve.TwoChartIntegralModel.glue_condition - instance
AlgebraicCurve.TwoChartIntegralModel.isOpenImmersion_ιFin - instance
AlgebraicCurve.TwoChartIntegralModel.isOpenImmersion_ιInf - theorem
AlgebraicCurve.TwoChartIntegralModel.fFin_toBase_eq_fInf_toBase - def
AlgebraicCurve.TwoChartIntegralModel.toBase - theorem
AlgebraicCurve.TwoChartIntegralModel.ιFin_toBase - theorem
AlgebraicCurve.TwoChartIntegralModel.ιInf_toBase - theorem
AlgebraicCurve.TwoChartIntegralModel.mem_range_ιFin_or_mem_range_ιInf - def
AlgebraicCurve.TwoChartIntegralModel.chartFinOpen - def
AlgebraicCurve.TwoChartIntegralModel.chartInfOpen - theorem
AlgebraicCurve.TwoChartIntegralModel.isAffineOpen_chartFinOpen - theorem
AlgebraicCurve.TwoChartIntegralModel.isAffineOpen_chartInfOpen - theorem
AlgebraicCurve.TwoChartIntegralModel.twoChartCover - def
AlgebraicCurve.TwoChartIntegralModel.polynomialToChartFin - def
AlgebraicCurve.TwoChartIntegralModel.polynomialToChartInf - theorem
AlgebraicCurve.TwoChartIntegralModel.polynomialToChartFin_X - theorem
AlgebraicCurve.TwoChartIntegralModel.polynomialToChartInf_X - def
AlgebraicCurve.TwoChartIntegralModel.baseChange - def
AlgebraicCurve.TwoChartIntegralModel.baseChangeι - def
AlgebraicCurve.TwoChartIntegralModel.baseChangeToBase - theorem
AlgebraicCurve.TwoChartIntegralModel.baseChangeι_toBase - abbrev
AlgebraicCurve.TwoChartIntegralModel.fibre - abbrev
AlgebraicCurve.TwoChartIntegralModel.fibreι - abbrev
AlgebraicCurve.TwoChartIntegralModel.fibreToBase - theorem
AlgebraicCurve.TwoChartIntegralModel.fibreι_toBase - theorem
AlgebraicCurve.TwoChartIntegralModel.adjoin_le_adjoin_restrictScalars - theorem
AlgebraicCurve.TwoChartIntegralModel.chartAlg_le_chartAlg - theorem
AlgebraicCurve.TwoChartIntegralModel.chartAlg_le_restrictScalars - def
AlgebraicCurve.TwoChartIntegralModel.chartBaseChange - theorem
AlgebraicCurve.TwoChartIntegralModel.coe_chartBaseChange - theorem
AlgebraicCurve.TwoChartIntegralModel.chartBaseChange_algebraMap
Source
import Mathlib.AlgebraicGeometry.Morphisms.Smooth ↗ import Mathlib.AlgebraicGeometry.Morphisms.Proper ↗ import Mathlib.AlgebraicGeometry.Limits ↗ import Mathlib.RingTheory.DedekindDomain.IntegralClosure ↗ import Mathlib.RingTheory.Localization.Integral ↗ import Mathlib.RingTheory.Polynomial.ScaleRoots ↗ import Mathlib.Algebra.Polynomial.Lifts ↗ set_option autoImplicit false noncomputable section universe u open CategoryTheory CategoryTheory.Limits AlgebraicGeometry Polynomial namespace AlgebraicCurve namespace TwoChartIntegralModel variable (R : Type u) [CommRing R] (F : Type u) [Field F] [Algebra R F] (j : F) [Fact (j ≠ 0)] variable {F} in theorem j_ne_zero : j ≠ 0 := Fact.out def chartAlg (S : Set F) : Subalgebra R F where carrier := {x | IsIntegral (Algebra.adjoin R S) x} mul_mem' ha hb := ha.mul hb one_mem' := isIntegral_one add_mem' ha hb := ha.add hb zero_mem' := isIntegral_zero algebraMap_mem' a := by have : IsIntegral (Algebra.adjoin R S) (algebraMap (Algebra.adjoin R S) F (algebraMap R (Algebra.adjoin R S) a)) := isIntegral_algebraMap simpa [← IsScalarTower.algebraMap_apply] using this theorem mem_chartAlg_iff {S : Set F} {x : F} : x ∈ chartAlg R F S ↔ IsIntegral (Algebra.adjoin R S) x := Iff.rfl theorem adjoin_le_chartAlg (S : Set F) : Algebra.adjoin R S ≤ chartAlg R F S := fun x hx => by rw [mem_chartAlg_iff] exact isIntegral_algebraMap (x := (⟨x, hx⟩ : Algebra.adjoin R S)) theorem subset_chartAlg (S : Set F) : S ⊆ (chartAlg R F S : Set F) := fun _ hx => adjoin_le_chartAlg R F S (Algebra.subset_adjoin hx) theorem chartAlg_mono {S S' : Set F} (h : S ⊆ S') : chartAlg R F S ≤ chartAlg R F S' := by intro x hx rw [mem_chartAlg_iff] at hx ⊢ exact hx.map_of_comp_eq (Subalgebra.inclusion (Algebra.adjoin_mono h)).toRingHom (RingHom.id F) (by ext; rfl) abbrev chartIncl {S S' : Set F} (h : S ⊆ S') : chartAlg R F S →ₐ[R] chartAlg R F S' := Subalgebra.inclusion (chartAlg_mono R F h) theorem coe_chartIncl {S S' : Set F} (h : S ⊆ S') (x : chartAlg R F S) : (chartIncl R F h x : F) = x := Subalgebra.coe_inclusion _ x theorem chartIncl_injective {S S' : Set F} (h : S ⊆ S') : Function.Injective (chartIncl R F h) := Subalgebra.inclusion_injective _ variable {R F j} theorem exists_pow_mul_mem_adjoin {S : Set F} {s : F} (hs : s ∈ S) (hs0 : s ≠ 0) {x : F} (hx : x ∈ Algebra.adjoin R (insert s⁻¹ S)) : ∃ n : ℕ, s ^ n * x ∈ Algebra.adjoin R S := by have hsA : s ∈ Algebra.adjoin R S := Algebra.subset_adjoin hs induction hx using Algebra.adjoin_induction with | mem y hy => rcases hy with rfl | hy · exact ⟨1, by rw [pow_one, mul_inv_cancel₀ hs0]; exact one_mem _⟩ · exact ⟨0, by rw [pow_zero, one_mul]; exact Algebra.subset_adjoin hy⟩ | algebraMap a => exact ⟨0, by rw [pow_zero, one_mul]; exact Subalgebra.algebraMap_mem _ a⟩ | add y z _ _ hy hz => obtain ⟨m, hm⟩ := hy obtain ⟨n, hn⟩ := hz refine ⟨m + n, ?_⟩ have : s ^ (m + n) * (y + z) = s ^ n * (s ^ m * y) + s ^ m * (s ^ n * z) := by ring rw [this] exact add_mem (mul_mem (pow_mem hsA n) hm) (mul_mem (pow_mem hsA m) hn) | mul y z _ _ hy hz => obtain ⟨m, hm⟩ := hy obtain ⟨n, hn⟩ := hz refine ⟨m + n, ?_⟩ have : s ^ (m + n) * (y * z) = (s ^ m * y) * (s ^ n * z) := by ring rw [this] exact mul_mem hm hn theorem exists_pow_mul_mem_chartAlg {S : Set F} {s : F} (hs : s ∈ S) (hs0 : s ≠ 0) {x : F} (hx : x ∈ chartAlg R F (insert s⁻¹ S)) : ∃ n : ℕ, s ^ n * x ∈ chartAlg R F S := by classical obtain ⟨p, hmonic, hroot⟩ := (mem_chartAlg_iff R F).mp hx have hcoeff : ∀ i, ∃ n : ℕ, s ^ n * (p.coeff i : F) ∈ Algebra.adjoin R S := fun i => exists_pow_mul_mem_adjoin hs hs0 (p.coeff i).2 choose n hn using hcoeff set M : ℕ := ∑ i ∈ Finset.range (p.natDegree + 1), n i with hM have hnM : ∀ i ≤ p.natDegree, n i ≤ M := fun i hi => Finset.single_le_sum (f := n) (fun _ _ => Nat.zero_le _) (Finset.mem_range.mpr (Nat.lt_succ_of_le hi)) set q : F[X] := (p.map (algebraMap (Algebra.adjoin R (insert s⁻¹ S)) F)).scaleRoots (s ^ M) with hq have hqmonic : q.Monic := (Polynomial.monic_scaleRoots_iff _).mpr (hmonic.map _) have hqroot : q.eval (s ^ M * x) = 0 := by rw [hq, Polynomial.scaleRoots_eval_mul, Polynomial.eval_map, hroot, mul_zero] have hqcoeff : ∀ i, q.coeff i ∈ Algebra.adjoin R S := by intro i rw [hq, Polynomial.coeff_scaleRoots, Polynomial.coeff_map, hmonic.natDegree_map] by_cases hi : i < p.natDegree · have hle : n i ≤ M * (p.natDegree - i) := by calc n i ≤ M := hnM i hi.le _ = M * 1 := (mul_one M).symm _ ≤ M * (p.natDegree - i) := Nat.mul_le_mul_left M (Nat.one_le_iff_ne_zero.mpr (by omega)) obtain ⟨k, hk⟩ := Nat.exists_eq_add_of_le hle have : (s ^ M) ^ (p.natDegree - i) = s ^ k * s ^ n i := by rw [← pow_mul, hk, pow_add, mul_comm] rw [this, Subalgebra.algebraMap_def, Algebra.algebraMap_self_apply, show (p.coeff i : F) * (s ^ k * s ^ n i) = s ^ k * (s ^ n i * (p.coeff i : F)) by ring] exact mul_mem (pow_mem (Algebra.subset_adjoin hs) k) (hn i) · rcases (not_lt.mp hi).lt_or_eq with hlt | heq · rw [Polynomial.coeff_eq_zero_of_natDegree_lt hlt, map_zero, zero_mul] exact zero_mem _ · rw [← heq, hmonic.coeff_natDegree, map_one, one_mul, Nat.sub_self, pow_zero] exact one_mem _ have hlifts : q ∈ Polynomial.lifts (algebraMap (Algebra.adjoin R S) F) := (Polynomial.lifts_iff_coeff_lifts q).mpr fun i => ⟨⟨q.coeff i, hqcoeff i⟩, rfl⟩ obtain ⟨q', hq'q, -, hq'monic⟩ := Polynomial.lifts_and_natDegree_eq_and_monic hlifts hqmonic refine ⟨M, (mem_chartAlg_iff R F).mpr ⟨q', hq'monic, ?_⟩⟩ rw [Polynomial.eval₂_eq_eval_map, hq'q, hqroot] variable (R F j) omit [Fact (j ≠ 0)] in theorem sFin_subset : ({j} : Set F) ⊆ {j, j⁻¹} := Set.singleton_subset_iff.mpr (Set.mem_insert _ _) omit [Fact (j ≠ 0)] in theorem sInf_subset : ({j⁻¹} : Set F) ⊆ {j, j⁻¹} := Set.singleton_subset_iff.mpr (Set.mem_insert_of_mem _ rfl) abbrev chartAlgFin : Subalgebra R F := chartAlg R F {j} abbrev chartAlgInf : Subalgebra R F := chartAlg R F {j⁻¹} abbrev chartAlgMid : Subalgebra R F := chartAlg R F {j, j⁻¹} def jChartFin : chartAlgFin R F j := ⟨j, subset_chartAlg R F _ rfl⟩ def jInvChartInf : chartAlgInf R F j := ⟨j⁻¹, subset_chartAlg R F _ rfl⟩ omit [Fact (j ≠ 0)] in @[simp] theorem coe_jChartFin : (jChartFin R F j : F) = j := rfl omit [Fact (j ≠ 0)] in @[simp] theorem coe_jInvChartInf : (jInvChartInf R F j : F) = j⁻¹ := rfl abbrev inclFin : chartAlgFin R F j →ₐ[R] chartAlgMid R F j := chartIncl R F (sFin_subset F j) abbrev inclInf : chartAlgInf R F j →ₐ[R] chartAlgMid R F j := chartIncl R F (sInf_subset F j) theorem isUnit_inclFin_jChartFin : IsUnit (inclFin R F j (jChartFin R F j)) := by refine .of_mul_eq_one ⟨j⁻¹, subset_chartAlg R F _ (by simp)⟩ (Subtype.ext ?_) rw [Subalgebra.coe_mul, Subalgebra.coe_one, coe_chartIncl, coe_jChartFin] exact mul_inv_cancel₀ (j_ne_zero j) theorem isUnit_inclInf_jInvChartInf : IsUnit (inclInf R F j (jInvChartInf R F j)) := by refine .of_mul_eq_one ⟨j, subset_chartAlg R F _ (by simp)⟩ (Subtype.ext ?_) rw [Subalgebra.coe_mul, Subalgebra.coe_one, coe_chartIncl, coe_jInvChartInf] exact inv_mul_cancel₀ (j_ne_zero j) theorem isLocalization_away_inclFin : letI := (inclFin R F j).toRingHom.toAlgebra IsLocalization.Away (jChartFin R F j) (chartAlgMid R F j) := by letI := (inclFin R F j).toRingHom.toAlgebra refine (isLocalization_iff _ _).mpr ⟨?_, ?_, ?_⟩ · rintro ⟨_, n, rfl⟩ rw [RingHom.algebraMap_toAlgebra, map_pow] exact (isUnit_inclFin_jChartFin R F j).pow n · intro z have hz : (z : F) ∈ chartAlg R F (insert j⁻¹ {j}) := by rw [show insert j⁻¹ ({j} : Set F) = {j, j⁻¹} from Set.pair_comm _ _] exact z.2 obtain ⟨n, hn⟩ := exists_pow_mul_mem_chartAlg (Set.mem_singleton _) (j_ne_zero j) hz refine ⟨(⟨j ^ n * z, hn⟩, ⟨jChartFin R F j ^ n, n, rfl⟩), Subtype.ext ?_⟩ simp only [RingHom.algebraMap_toAlgebra, map_pow, Subalgebra.coe_mul, Subalgebra.coe_pow, AlgHom.toRingHom_eq_coe, AlgHom.coe_toRingHom, coe_chartIncl, coe_jChartFin] exact mul_comm _ _ · intro x y h refine ⟨1, ?_⟩ rw [RingHom.algebraMap_toAlgebra] at h rw [chartIncl_injective R F _ h] theorem isLocalization_away_inclInf : letI := (inclInf R F j).toRingHom.toAlgebra IsLocalization.Away (jInvChartInf R F j) (chartAlgMid R F j) := by letI := (inclInf R F j).toRingHom.toAlgebra refine (isLocalization_iff _ _).mpr ⟨?_, ?_, ?_⟩ · rintro ⟨_, n, rfl⟩ rw [RingHom.algebraMap_toAlgebra, map_pow] exact (isUnit_inclInf_jInvChartInf R F j).pow n · intro z have hz : (z : F) ∈ chartAlg R F (insert j⁻¹⁻¹ {j⁻¹}) := by rw [inv_inv]; exact z.2 obtain ⟨n, hn⟩ := exists_pow_mul_mem_chartAlg (Set.mem_singleton _) (inv_ne_zero (j_ne_zero j)) hz refine ⟨(⟨j⁻¹ ^ n * z, hn⟩, ⟨jInvChartInf R F j ^ n, n, rfl⟩), Subtype.ext ?_⟩ simp only [RingHom.algebraMap_toAlgebra, map_pow, Subalgebra.coe_mul, Subalgebra.coe_pow, AlgHom.toRingHom_eq_coe, AlgHom.coe_toRingHom, coe_chartIncl, coe_jInvChartInf] exact mul_comm _ _ · intro x y h refine ⟨1, ?_⟩ rw [RingHom.algebraMap_toAlgebra] at h rw [chartIncl_injective R F _ h] abbrev XFin : Scheme.{u} := Spec (CommRingCat.of (chartAlgFin R F j)) abbrev XInf : Scheme.{u} := Spec (CommRingCat.of (chartAlgInf R F j)) abbrev XMid : Scheme.{u} := Spec (CommRingCat.of (chartAlgMid R F j)) abbrev fFin : XMid R F j ⟶ XFin R F j := Spec.map (CommRingCat.ofHom (inclFin R F j).toRingHom) abbrev fInf : XMid R F j ⟶ XInf R F j := Spec.map (CommRingCat.ofHom (inclInf R F j).toRingHom) instance isOpenImmersion_fFin : IsOpenImmersion (fFin R F j) := by letI := (inclFin R F j).toRingHom.toAlgebra haveI := isLocalization_away_inclFin R F j exact IsOpenImmersion.of_isLocalization (jChartFin R F j) instance isOpenImmersion_fInf : IsOpenImmersion (fInf R F j) := by letI := (inclInf R F j).toRingHom.toAlgebra haveI := isLocalization_away_inclInf R F j exact IsOpenImmersion.of_isLocalization (jInvChartInf R F j) def _root_.AlgebraicCurve.TwoChartIntegralModel : Scheme.{u} := pushout (fFin R F j) (fInf R F j) def ιFin : XFin R F j ⟶ AlgebraicCurve.TwoChartIntegralModel R F j := pushout.inl (fFin R F j) (fInf R F j) def ιInf : XInf R F j ⟶ AlgebraicCurve.TwoChartIntegralModel R F j := pushout.inr (fFin R F j) (fInf R F j) theorem glue_condition : fFin R F j ≫ ιFin R F j = fInf R F j ≫ ιInf R F j := pushout.condition instance isOpenImmersion_ιFin : IsOpenImmersion (ιFin R F j) := (Scheme.IsLocallyDirected.openCover (span (fFin R F j) (fInf R F j))).map_prop WalkingSpan.left instance isOpenImmersion_ιInf : IsOpenImmersion (ιInf R F j) := (Scheme.IsLocallyDirected.openCover (span (fFin R F j) (fInf R F j))).map_prop WalkingSpan.right theorem fFin_toBase_eq_fInf_toBase : fFin R F j ≫ Spec.map (CommRingCat.ofHom (algebraMap R (chartAlgFin R F j))) = fInf R F j ≫ Spec.map (CommRingCat.ofHom (algebraMap R (chartAlgInf R F j))) := by have h : (inclFin R F j).toRingHom.comp (algebraMap R (chartAlgFin R F j)) = (inclInf R F j).toRingHom.comp (algebraMap R (chartAlgInf R F j)) := RingHom.ext fun a => ((inclFin R F j).commutes a).trans ((inclInf R F j).commutes a).symm simp only [← Spec.map_comp, ← CommRingCat.ofHom_comp, h] def toBase : AlgebraicCurve.TwoChartIntegralModel R F j ⟶ Spec (CommRingCat.of R) := pushout.desc (Spec.map (CommRingCat.ofHom (algebraMap R (chartAlgFin R F j)))) (Spec.map (CommRingCat.ofHom (algebraMap R (chartAlgInf R F j)))) (fFin_toBase_eq_fInf_toBase R F j) @[reassoc (attr := simp)] theorem ιFin_toBase : ιFin R F j ≫ toBase R F j = Spec.map (CommRingCat.ofHom (algebraMap R (chartAlgFin R F j))) := pushout.inl_desc _ _ _ @[reassoc (attr := simp)] theorem ιInf_toBase : ιInf R F j ≫ toBase R F j = Spec.map (CommRingCat.ofHom (algebraMap R (chartAlgInf R F j))) := pushout.inr_desc _ _ _ theorem mem_range_ιFin_or_mem_range_ιInf (x : AlgebraicCurve.TwoChartIntegralModel R F j) : x ∈ Set.range (ιFin R F j).base ∨ x ∈ Set.range (ιInf R F j).base := by obtain ⟨i, y, hy⟩ := (Scheme.IsLocallyDirected.openCover (span (fFin R F j) (fInf R F j))).exists_eq x rcases i with (_ | _ | _) · have hw : (Scheme.IsLocallyDirected.openCover (span (fFin R F j) (fInf R F j))).f none = fFin R F j ≫ ιFin R F j := (colimit.w (span (fFin R F j) (fInf R F j)) WalkingSpan.Hom.fst).symm refine Or.inl ⟨(fFin R F j).base y, ?_⟩ rw [← hy, hw]; rfl · exact Or.inl ⟨y, hy⟩ · exact Or.inr ⟨y, hy⟩ def chartFinOpen : (AlgebraicCurve.TwoChartIntegralModel R F j).Opens := (ιFin R F j).opensRange def chartInfOpen : (AlgebraicCurve.TwoChartIntegralModel R F j).Opens := (ιInf R F j).opensRange theorem isAffineOpen_chartFinOpen : IsAffineOpen (chartFinOpen R F j) := isAffineOpen_opensRange (ιFin R F j) theorem isAffineOpen_chartInfOpen : IsAffineOpen (chartInfOpen R F j) := isAffineOpen_opensRange (ιInf R F j) theorem twoChartCover : chartFinOpen R F j ⊔ chartInfOpen R F j = ⊤ := by rw [chartFinOpen, chartInfOpen, ← TopologicalSpace.Opens.coe_inj] ext x simpa using mem_range_ιFin_or_mem_range_ιInf R F j x def polynomialToChartFin : Polynomial R →ₐ[R] chartAlgFin R F j := Polynomial.aeval (jChartFin R F j) def polynomialToChartInf : Polynomial R →ₐ[R] chartAlgInf R F j := Polynomial.aeval (jInvChartInf R F j) @[simp] theorem polynomialToChartFin_X : polynomialToChartFin R F j Polynomial.X = jChartFin R F j := Polynomial.aeval_X _ @[simp] theorem polynomialToChartInf_X : polynomialToChartInf R F j Polynomial.X = jInvChartInf R F j := Polynomial.aeval_X _ def baseChange (S : Type u) [CommRing S] [Algebra R S] : Scheme.{u} := pullback (toBase R F j) (Spec.map (CommRingCat.ofHom (algebraMap R S))) def baseChangeι (S : Type u) [CommRing S] [Algebra R S] : baseChange R F j S ⟶ AlgebraicCurve.TwoChartIntegralModel R F j := pullback.fst _ _ def baseChangeToBase (S : Type u) [CommRing S] [Algebra R S] : baseChange R F j S ⟶ Spec (CommRingCat.of S) := pullback.snd _ _ @[reassoc] theorem baseChangeι_toBase (S : Type u) [CommRing S] [Algebra R S] : baseChangeι R F j S ≫ toBase R F j = baseChangeToBase R F j S ≫ Spec.map (CommRingCat.ofHom (algebraMap R S)) := pullback.condition abbrev fibre (I : Ideal R) : Scheme.{u} := baseChange R F j (R ⧸ I) abbrev fibreι (I : Ideal R) : fibre R F j I ⟶ AlgebraicCurve.TwoChartIntegralModel R F j := baseChangeι R F j (R ⧸ I) abbrev fibreToBase (I : Ideal R) : fibre R F j I ⟶ Spec (CommRingCat.of (R ⧸ I)) := baseChangeToBase R F j (R ⧸ I) @[reassoc] theorem fibreι_toBase (I : Ideal R) : fibreι R F j I ≫ toBase R F j = fibreToBase R F j I ≫ Spec.map (CommRingCat.ofHom (Ideal.Quotient.mk I)) := pullback.condition section BaseChange variable (R' : Type u) [CommRing R'] [Algebra R R'] [Algebra R' F] [IsScalarTower R R' F] theorem adjoin_le_adjoin_restrictScalars (S : Set F) : Algebra.adjoin R S ≤ (Algebra.adjoin R' S).restrictScalars R := Algebra.adjoin_le Algebra.subset_adjoin theorem chartAlg_le_chartAlg (S : Set F) : (chartAlg R F S).toSubring ≤ (chartAlg R' F S).toSubring := by intro x hx change IsIntegral (Algebra.adjoin R' S) x have hx' : IsIntegral (Algebra.adjoin R S) x := hx have hle : (Algebra.adjoin R S).toSubring ≤ ((Algebra.adjoin R' S).restrictScalars R).toSubring := fun y hy => adjoin_le_adjoin_restrictScalars R F R' S hy exact hx'.map_of_comp_eq (Subring.inclusion hle) (RingHom.id F) (by ext; rfl) theorem chartAlg_le_restrictScalars (S : Set F) : chartAlg R F S ≤ (chartAlg R' F S).restrictScalars R := fun _ hx => chartAlg_le_chartAlg R F R' S hx def chartBaseChange (S : Set F) : chartAlg R F S →+* chartAlg R' F S := (Subalgebra.inclusion (chartAlg_le_restrictScalars R F R' S)).toRingHom @[simp] theorem coe_chartBaseChange (S : Set F) (x : chartAlg R F S) : (chartBaseChange R F R' S x : F) = x := Subalgebra.coe_inclusion _ x theorem chartBaseChange_algebraMap (S : Set F) (r : R) : chartBaseChange R F R' S (algebraMap R (chartAlg R F S) r) = algebraMap R' (chartAlg R' F S) (algebraMap R R' r) := Subtype.ext (IsScalarTower.algebraMap_apply R R' F r) end BaseChange end TwoChartIntegralModel end AlgebraicCurve end
Statements phrased using this module (1,223)
- Hecke degeneracy pair for the Γ_H model over ℤ₍ₚ₎
ModularCurve.XHDRModelAtP.exists_heckeDegeneracyPair_chartPin_flat283 below · depth 12 - Geometric integrality of the generic fibre of the two-chart model
ModularCurve.geometricallyIntegral_pullback_snd_toBase_twoChartIntegralModel_qExpFunctionFieldC_rat3 below · depth 12 - Finite chart is dense in a fibre without isolated points
AlgebraicCurve.TwoChartIntegralModel.dense_range_chart_pullback_of_not_isOpen_singleton0 below · depth 13 - Functoriality of the two-chart integral model along a finite extension
AlgebraicCurve.TwoChartIntegralModel.exists_hom_isFinite_surjective_chartMap_finite_of_algHom0 below · depth 13 - Affine neighbourhood of a finite set in an open, over an affine base open
AlgebraicCurve.TwoChartIntegralModel.exists_isAffineOpen_le_preimage_forall_mem_of_finset6 below · depth 13 - Retraction of finite-chart algebras yields a closed-immersion section of the fibre
AlgebraicCurve.TwoChartIntegralModel.exists_isClosedImmersion_comp_eq_id_of_retraction4 below · depth 13 - Transport of the two-chart integral model along an R-algebra isomorphism
AlgebraicCurve.TwoChartIntegralModel.exists_iso_of_algEquiv_apply_eq0 below · depth 13 - Comparable two-chart integral models are isomorphic over R
AlgebraicCurve.TwoChartIntegralModel.exists_iso_of_mem_chartAlgFin_of_forall_exists_mul_mem1 below · depth 13 - Automorphism of the two-chart model induced by σ
AlgebraicCurve.TwoChartIntegralModel.exists_iso_toBase_eq_and_iotaFin_comp_eq_of_algEquiv4 below · depth 13 - The two charts form a two-affine open cover with affine overlap
AlgebraicCurve.TwoChartIntegralModel.exists_twoAffineOpenCover_U0_eq_chartFinOpen0 below · depth 13 - Finite type of the two chart rings of the integral model
AlgebraicCurve.TwoChartIntegralModel.finiteType_chartAlgFin_and_chartAlgInf0 below · depth 13 - Finiteness of the two chart rings over R[X]
AlgebraicCurve.TwoChartIntegralModel.finite_polynomial_chartAlgFin_and_chartAlgInf0 below · depth 13 - Flatness of the two-chart integral model over a Dedekind base
AlgebraicCurve.TwoChartIntegralModel.flat_toBase0 below · depth 13 - Two components cover the fibre and are distinct
AlgebraicCurve.TwoChartIntegralModel.forall_mem_range_or_mem_range_comp_and_range_ne_of_minimalPrimes_eq0 below · depth 13 - Pinned automorphisms of the two-chart model: commuting and squaring
AlgebraicCurve.TwoChartIntegralModel.hom_comm_and_hom_comp_hom_eq_of_chartPins1 below · depth 13 - Rigidity of maps from the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.hom_ext_of_iotaFin_comp_eq1 below · depth 13 - The chart ring A_R(S) has fraction field F
AlgebraicCurve.TwoChartIntegralModel.isFractionRing_chartAlg0 below · depth 13 - The two-chart integral model is integral
AlgebraicCurve.TwoChartIntegralModel.isIntegral0 below · depth 13 - Sections over affine opens of the two-chart integral model are integrally closed
AlgebraicCurve.TwoChartIntegralModel.isIntegrallyClosed_sections_of_isAffineOpen4 below · depth 13 - Stalks of the two-chart integral model are integrally closed
AlgebraicCurve.TwoChartIntegralModel.isIntegrallyClosed_stalk2 below · depth 13 - Properness of the two-chart integral model over a Noetherian base
AlgebraicCurve.TwoChartIntegralModel.isProper_toBase0 below · depth 13 - Reduced fibres of a two-chart integral model over ℤ₍ₚ₎
AlgebraicCurve.TwoChartIntegralModel.isReduced_pullback_toBase_of_isReduced_chartAlg_quotient_span_natCast5 below · depth 13 - Two-chart integral model is locally of finite presentation
AlgebraicCurve.TwoChartIntegralModel.locallyOfFinitePresentation_toBase0 below · depth 13 - Image point's place is the restriction along Φ
AlgebraicCurve.TwoChartIntegralModel.pointEquivPlace_eq_restrictAlong_of_chartPin0 below · depth 13 - Characteristic-zero base changes of the two-chart model are smooth curves
AlgebraicCurve.TwoChartIntegralModel.smoothOfRelativeDimension_one_pullback_snd_toBase_of_charZero1 below · depth 13 - Constant term as ℤ₍ₚ₎-point of the pole chart
ModularCurve.exists_algHom_chartAlgInf_ratLocalizedAt_apply_eq_coeff_zero0 below · depth 13 - Chart functions of the two-chart model have ℤ₍ₚ₎-integral q-expansions
ModularCurve.exists_coeffMap_eq_coe_of_mem_chartAlg_twoChartIntegralModel_qExpFunctionFieldC2 below · depth 13 - Geometric generic fibre of the two-chart integral model
ModularCurve.exists_curveModel_iso_genericFibre_galoisCompat_chartPin_twoChartIntegralModel4 below · depth 13 - Special fibre of the two-chart integral model of X(Γ) at p ∤ M
ModularCurve.exists_curveModel_iso_pullback_toBase_twoChartIntegralModel_qExpFunctionFieldC_readChart_of_not_dvd896 below · depth 13 - Finite surjective morphism of two-chart integral models for Γ≤Γ'
ModularCurve.exists_hom_twoChartIntegralModel_qExpFunctionFieldC_pinned_of_le127 below · depth 13 - Diamond automorphisms of the two-chart integral model of X_H(M)
ModularCurve.exists_iso_twoChartIntegralModel_qExpFunctionFieldC_gammaH_diamond5 below · depth 13 - Finite type of the two chart algebras over ℤ₍ₚ₎
ModularCurve.finiteType_chartAlgFin_and_chartAlgInf_twoChartIntegralModel_qExpFunctionFieldC124 below · depth 13 - Igusa irreducibility: characteristic-p fibres of the two-chart model
ModularCurve.isIntegral_pullback_toBase_twoChartIntegralModel_qExpFunctionFieldC_of_charP322 below · depth 13 - Characteristic-zero fibres of the two-chart integral model are integral
ModularCurve.isIntegral_pullback_toBase_twoChartIntegralModel_qExpFunctionFieldC_of_charZero2 below · depth 13 - Igusa good reduction for the two-chart ℤ₍ₚ₎-model of X(Γ)
ModularCurve.isProper_and_smooth_and_geometricallyIntegral_twoChartIntegralModel_qExpFunctionFieldC_of_not_dvd931 below · depth 13 - Mutual integrality of j(q) and j(qᵖ) on two-chart models
ModularCurve.mem_chartAlgFin_and_forall_mem_chartAlgInf_exists_mul_mem_of_coe_eq_coeffEmb_jq_qExpand85 below · depth 13 - No isolated points on characteristic-p fibres of the two-chart model
ModularCurve.not_isOpen_singleton_pullback_toBase_twoChartIntegralModel_qExpFunctionFieldC_of_charP140 below · depth 13 - Localisation of the base commutes with chart algebras
AlgebraicCurve.TwoChartIntegralModel.exists_algEquiv_tensor_chartAlg0 below · depth 14 - Functoriality and finiteness of the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.exists_hom_isFinite_surjective_of_algHom0 below · depth 14 - Comparison morphism between two-chart integral models
AlgebraicCurve.TwoChartIntegralModel.exists_hom_of_mem_chartAlgFin_of_forall_pow_mul_mem0 below · depth 14 - Finite sets of points of the two-chart integral model lie in an affine open
AlgebraicCurve.TwoChartIntegralModel.exists_isAffineOpen_forall_mem_of_finset3 below · depth 14 - Base change of a two-chart integral model is the glued curve
AlgebraicCurve.TwoChartIntegralModel.exists_iso_glued_pullback_toBase_of_algEquiv_chartAlg_chartRing0 below · depth 14 - Pole chart of j' lies in a unipotent localisation of A_∞(j)
AlgebraicCurve.TwoChartIntegralModel.forall_mem_chartAlgInf_exists_one_add_mul_and_mul_mem0 below · depth 14 - Reduction of chart rings at a Gauss-type place stays a domain
AlgebraicCurve.TwoChartIntegralModel.isDomain_tensorProduct_chartAlg_of_finrank_le_finrank_adjoin_range14 below · depth 14 - Integrality of a base change of the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.isIntegral_pullback_toBase_of_isDomain_tensorProduct_chartAlg0 below · depth 14 - Chart rings of the two-chart model are integrally closed
AlgebraicCurve.TwoChartIntegralModel.isIntegrallyClosed_chartAlg1 below · depth 14 - Two-chart integral model is locally of finite type
AlgebraicCurve.TwoChartIntegralModel.locallyOfFiniteType_toBase0 below · depth 14 - Minimal primes over varpi are the centres of two branch rings
AlgebraicCurve.TwoChartIntegralModel.mem_minimalPrimes_span_iff_of_valuationSubring_pair6 below · depth 14 - Fibrewise smoothness criterion for a two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.smoothOfRelativeDimension_one_toBase_ratLocalizedAt_of_forall_pullback_snd1 below · depth 14 - Igusa scheme as base change of the two-chart ℤ-model
ModularCurve.IgusaScheme.exists_isPullback_twoChartIntegralModel_int_and_iso_pullback_and_iotaFin_comp_eq7 below · depth 14 - Smoothness of characteristic-zero fibres of the integral model
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_snd_toBase_int_of_charZero128 below · depth 14 - Igusa reduction of the two chart rings, packaged
ModularCurve.exists_algEquiv_residueField_tensor_chartAlg_twoChartIntegralModel_qExpFunctionFieldC_chartRing890 below · depth 14 - Base change to ℚ̄ of both j-charts
ModularCurve.exists_algEquiv_tensor_chartAlg_chartRing_laurentBaseChange1 below · depth 14 - Existence of a Deligne–Rapoport model package with q-expansion pin
ModularCurve.exists_dRModelPackage_ffPin1,050 below · depth 14 - Generic fibre of the two-chart integral model, with Galois compatibility
ModularCurve.exists_genericFibreIso_twoChartIntegralModel_chartPin_and_galoisCompat0 below · depth 14 - Geometric integrality of the rational fibre of the two-chart model
ModularCurve.geometricallyIntegral_baseChangeToBase_twoChartIntegralModel_rat853 below · depth 14 - Good-reduction Néron identity component of J₀(p) from the Deligne–Rapoport model
ModularCurve.nonempty_jZeroNeronIdentityComponentGood_of_dRModelPackage_of_ffPin3,335 below · depth 14 - The cusp coordinate t=j(qᵖ)/jᵖ at the prime p
ModularCurve.qExpand_jq_div_pow_mem_chartAlgInf_and_coeff_zero_and_mem_nonunits_gauss79 below · depth 14 - Smoothness of the characteristic-p fibre of the two-chart model
ModularCurve.smoothOfRelativeDimension_one_pullback_snd_toBase_twoChartIntegralModel_qExpFunctionFieldC_of_charP915 below · depth 14 - Zariski connectedness for the two-chart integral model over ℤ_{(ℓ)}
AlgebraicCurve.TwoChartIntegralModel.connectedSpace_pullback_toBase_specMap_ratLocalizedAt5 below · depth 15 - Two-chart integral model and localisation of the base
AlgebraicCurve.TwoChartIntegralModel.exists_isPullback_toBase_of_isLocalization4 below · depth 15 - Base change of the two-chart integral model along a localisation
AlgebraicCurve.TwoChartIntegralModel.exists_iso_baseChange_baseChange_of_isLocalization4 below · depth 15 - DVRs from minimal primes of varpi in the finite chart
AlgebraicCurve.TwoChartIntegralModel.exists_valuationSubring_of_mem_minimalPrimes_chartAlgFin4 below · depth 15 - Integrality of (1+j⁻¹a)j'⁻¹ gives the two-chart visibility condition
AlgebraicCurve.TwoChartIntegralModel.forall_mem_chartAlgInf_exists_one_add_mul_and_mul_mem_of_isIntegral_mul1 below · depth 15 - Branch valuation rings as localisations of the finite chart
AlgebraicCurve.TwoChartIntegralModel.le_and_height_eq_one_and_exists_div_of_valuationSubring_of_transcendental4 below · depth 15 - varpi generates the maximal ideal at minimal primes of (varpi)
AlgebraicCurve.TwoChartIntegralModel.map_span_eq_maximalIdeal_localization_atPrime_of_forall_valuationSubring_mul_inv_mem6 below · depth 15 - Integrality of j at a place forces the finite chart
AlgebraicCurve.TwoChartIntegralModel.mem_range_iotaFin_of_ffEquiv_symm_germ_mem_placeOfPoint0 below · depth 15 - Section of the two-chart integral model from an algebra map
AlgebraicCurve.TwoChartIntegralModel.nonempty_schemeHomOver_id_toBase_of_algHom0 below · depth 15 - Smoothness over k of the two-chart model read off the charts
AlgebraicCurve.TwoChartIntegralModel.smoothOfRelativeDimension_pullback_snd_toBase_of_tensor_charts0 below · depth 15 - Chart ring modulo varpi at a unique Gauss valuation
AlgebraicCurve.TwoChartIntegralModel.span_singleton_isPrime_and_mem_iff_mem_nonunits_of_valuationSubring8 below · depth 15 - Igusa chart algebras as localisations with unchanged reduction mod ℓ
ModularCurve.IgusaScheme.chartAlg_eq_and_mem_iff_and_exists_ringEquiv_quotient_span_natCast2 below · depth 15 - Constant term gives a ℤ-point of the pole chart
ModularCurve.IgusaScheme.exists_algHom_int_chartAlgInf_eq_coeff_zero1 below · depth 15 - Finite type of the two integral chart algebras over ℤ
ModularCurve.IgusaScheme.finiteType_int_chartAlgFin_and_chartAlgInf119 below · depth 15 - Integrality of the k-fibre of the two-chart model
ModularCurve.IgusaScheme.isIntegral_pullback_toBase_int_of_isUnit_natCast854 below · depth 15 - Properness over ℤ of the two-chart integral model
ModularCurve.IgusaScheme.isProper_toBase_int121 below · depth 15 - Igusa scheme as two-chart integral model over ℤ_{(ℓ)}
ModularCurve.IgusaScheme.nonempty_iso_twoChartIntegralModel0 below · depth 15 - Smooth fibres in characteristic ℓ ∤ N of the integral model
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_snd_toBase_int_of_charP834 below · depth 15 - Transport of fibrewise smoothness from the Igusa scheme to the ℤ-model
ModularCurve.IgusaScheme.smoothOfRelativeDimension_one_pullback_snd_toBase_int_of_pullback_snd_igusaTo6 below · depth 15 - Smoothness of the integral model of X₀(p) over ℤ[1/p]
ModularCurve.IgusaScheme.smooth_pullback_snd_toBase_int_localizationAway839 below · depth 15 - Smoothness of the integral model after inverting N
ModularCurve.IgusaScheme.smooth_pullback_snd_toBase_int_of_isUnit_natCast838 below · depth 15 - Chart rings over ℚ̄ lie in the mathbb Z₍ₚ₎-span
ModularCurve.chartRing_laurentBaseChange_le_span_coeffEmb_chartAlg0 below · depth 15 - Igusa reduction: finite chart of the Kroneckerian model
ModularCurve.exists_algEquiv_residueField_tensor_chartAlgFin_twoChartIntegralModel_qExpFunctionFieldC_chartRing888 below · depth 15 - Igusa's theorem, pole chart: reduction of 𝒪_∞
ModularCurve.exists_algEquiv_residueField_tensor_chartAlgInf_twoChartIntegralModel_qExpFunctionFieldC_chartRing888 below · depth 15 - A component map on inertia invariants of J₀(p)
ModularCurve.exists_componentHom_extension_of_dRModelPackage_of_abelJacobi_of_ffPin2,509 below · depth 15 - Mutual pole-chart visibility for j and jₚ
ModularCurve.forall_mem_chartAlgInf_jFull_exists_mul_mem_and_symm_of_coe_eq_qExpand85 below · depth 15 - Igusa good reduction: regular one-dimensional charts at p ∤ M
ModularCurve.isRegularLocalRing_localization_tensor_chartAlg_twoChartIntegralModel_qExpFunctionFieldC_of_charP913 below · depth 15 - Integrality of Ogg's unit and p¹²u⁻¹ over ℤ[j]
ModularCurve.modularUnitSeries_mem_chartAlgFin_int94 below · depth 15 - Chart base change commutes with chart inclusions
AlgebraicCurve.TwoChartIntegralModel.chartIncl_comp_chartBaseChange0 below · depth 16 - Chart rings localise with the base ring
AlgebraicCurve.TwoChartIntegralModel.isLocalization_chartAlg0 below · depth 16 - Finite chart of the two-chart model localises on the base
AlgebraicCurve.TwoChartIntegralModel.isPullback_chartFin1 below · depth 16 - The pole chart base-changes along a localisation
AlgebraicCurve.TwoChartIntegralModel.isPullback_chartInf1 below · depth 16 - Uniqueness of the valuation above an integral special fibre
AlgebraicCurve.TwoChartIntegralModel.valuationSubring_eq_of_isPrime_span_of_forall_aeval_mem4 below · depth 16 - Both branches of X₀(p) mod p are affine lines
ModularCurve.DRModel.exists_ringEquiv_quotient_chartAlgFin_polynomial_of_valuationSubring_pair62 below · depth 16 - Ogg's unit on the ∞-component is the supersingular polynomial
ModularCurve.DRModel.map_ringEquiv_quotient_chartAlgFin_modularUnit_eq_prod_ssJSet260 below · depth 16 - Minimal primes over p are the two branch centres
ModularCurve.DRModel.mem_minimalPrimes_chartAlgFin_iff_of_valuationSubring_pair123 below · depth 16 - Minimal primes of p in the pole chart ring are branch centres
ModularCurve.DRModel.mem_minimalPrimes_chartAlgInf_iff_of_valuationSubring_pair123 below · depth 16 - Constant term of q-expansions as an R-point of the pole chart
ModularCurve.IgusaScheme.exists_algHom_chartAlgInf_algebraMap_eq_coeff_zero0 below · depth 16 - Igusa scheme as base change of the integral two-chart model
ModularCurve.IgusaScheme.exists_isPullback_twoChartIntegralModel_int_and_iso_pullback7 below · depth 16 - Generic fibre of the Igusa scheme as rational two-chart model
ModularCurve.IgusaScheme.exists_iso_pullback_igusaTo_rat_twoChartIntegralModel_and_iotaFin10 below · depth 16 - Geometric connectedness over ℤ of the two-chart model of X₀(N)
ModularCurve.IgusaScheme.geometricallyConnected_toBase_int137 below · depth 16 - Base change to a place above p preserves normality of both charts
ModularCurve.exists_algHom_tensor_chartAlg_twoChartIntegralModel_qExpFunctionFieldC_injective_isIntegrallyClosed324 below · depth 16 - Geometric integrality of the two-chart model over ℤ[1/N]
ModularCurve.geometricallyIntegral_baseChangeToBase_twoChartIntegralModel_away853 below · depth 16 - Finite chart of a base-changed two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.exists_isOpenImmersion_spec_tensor_chartAlgFin0 below · depth 17 - Special fibre of X₀(p) on the finite chart
ModularCurve.DRModel.exists_minimalPrimes_pair_and_ringEquiv_quotient_polynomial143 below · depth 17 - Kronecker congruence pins j ≡ jₚ^{ p} on the second branch
ModularCurve.DRModel.jFull_sub_pow_mem_nonunits_of_valuationSubring_pair58 below · depth 17 - Ogg's unit detects the ∞-component mod p
ModularCurve.DRModelPackage.exists_coordinate_forall_mem_range_compInf_and_not_mem_range_compZero280 below · depth 17 - Geometric connectedness passes from the Igusa scheme to the ℤ-model
ModularCurve.IgusaScheme.geometricallyConnected_pullback_snd_toBase_int_of_pullback_snd_igusaTo6 below · depth 17 - Automorphisms with σ(j)=j(qᵖ) fix the j-chart, move the Gauss ring
ModularCurve.chartAlgFin_iff_and_comap_ne_and_aeval_mem_comap_of_algEquiv_map_j_eq_qExpand44 below · depth 17 - Integral norm relation for g of Ogg's modular unit
ModularCurve.exists_int_poly_natDegree_aeval_jFull_eq_mul_aeval_modularUnitSeries270 below · depth 17 - Ogg's unit and the two minimal primes over p
ModularCurve.HpoolLevelRing.exists_minimalPrimes_pair_modularUnitSeries222 below · depth 18 - Characteristic-p fibre dictionary for the modular unit
ModularCurve.HpoolLevelRing.exists_pFibre_dictionary353 below · depth 18 - Leading coefficient of the norm of g at Ogg's unit
ModularCurve.exists_leadingCoeff_eq_mul_pow_of_aeval_jFull_eq_norm_aeval_modularUnitSeries269 below · depth 18 - Degree of the ℚ(j)-norm of g at Ogg's unit
ModularCurve.natDegree_eq_mul_of_aeval_jFull_eq_norm_aeval_modularUnitSeries222 below · depth 18 - Points off the finite chart are poles of j
AlgebraicCurve.TwoChartIntegralModel.exists_jInvChartInf_mem_and_iotaInf_eq_of_not_mem_range_iotaFin0 below · depth 19 - Pole-chart points in the finite chart: criterion via 1/j
AlgebraicCurve.TwoChartIntegralModel.iotaInf_mem_range_iotaFin_iff0 below · depth 19 - Norms to ℚ(j) are integer polynomials in j
ModularCurve.exists_aeval_jFull_eq_norm_of_mem_chartAlgFin119 below · depth 19 - Geometric generic fibre of the two-chart integral model
ModularCurve.exists_curveModel_genericFibre_twoChartIntegralModel_iso_and_galoisCompat5 below · depth 19 - Function field of the base-changed two-chart model is generated by finite chart and base
AlgebraicCurve.TwoChartIntegralModel.subfieldClosure_range_germToFunctionField_union_range_eq_top0 below · depth 21 - Places determined by centres on a two-chart model
AlgebraicCurve.CurveModel.pointEquivPlace_eq_of_forall_sub_algebraMap_mem_nonunits_of_twoChartIntegralModel0 below · depth 22 - Semilinear Γ-action on the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.exists_hom_comp_toBase_eq_and_iotaFin_comp_eq_of_mulSemiringAction_of_smul_eq0 below · depth 22 - Stalks of the base-changed two-chart model over the finite chart
AlgebraicCurve.TwoChartIntegralModel.exists_stalk_iso_localization_tensor_chartAlgFin0 below · depth 22 - Geometric integrality of the two-chart model's generic fibre
AlgebraicCurve.TwoChartIntegralModel.geometricallyIntegral_baseChange_toBase_of_intermediateField_laurentSeries1 below · depth 22 - Germs of j and j⁻¹ multiply to 1
AlgebraicCurve.TwoChartIntegralModel.germToFunctionField_jChartFin_mul_germToFunctionField_jInvChartInf0 below · depth 22 - Characteristic-zero fibres of the two-chart model are reduced
AlgebraicCurve.TwoChartIntegralModel.isReduced_pullback_toBase_of_charZero0 below · depth 22 - Generic-fibre regularity of the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.isRegularLocalRing_stalk_of_asIdeal_eq_bot2 below · depth 22 - Dimension two at a crossing of the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.ringKrullDim_stalk_eq_two_of_not_subsingleton_minimalPrimes1 below · depth 22 - The two two-chart models of the j-line agree over Spec A
ModularCurve.TwoChart.exists_iso_twoChartIntegralModel_hom_comp_toBase_eq_modelTo0 below · depth 22 - Two-chart model over A versus integral model over ℤ₍ₚ₎
ModularCurve.TwoChart.exists_iso_twoChartIntegralModel_ratLocalizedAt_of_isCyclotomicExtension2 below · depth 22 - Level-p automorphism with σ(j)=j(qᵖ) moving the Gauss ring
ModularCurve.XOneP.exists_algEquiv_map_j_eq_qExpand_and_chartAlgFin_iff_and_comap_ne_x1_mul123 below · depth 22 - Geometric special fibre of the two-chart model: two components
ModularCurve.XOneP.exists_isClosedImmersion_pair_specialFibre_twoChartIntegralModel_x1_mul2,872 below · depth 22 - Crossing equation uv=varpi at singular points of the special fibre
ModularCurve.XOneP.exists_mul_eq_and_maximalIdeal_eq_span_pair_of_not_isRegularLocalRing_fibre_twoChartIntegralModel_x1_mul2,856 below · depth 22 - Smoothness over the base at one-branch points of the special fibre
ModularCurve.XOneP.exists_opens_smooth_comp_toBase_of_subsingleton_minimalPrimes_fibre_twoChartIntegralModel_x1_mul1,734 below · depth 22 - Chart functions read in a component of the special fibre
ModularCurve.XOneP.exists_valuationSubring_algEquiv_fractionRing_tensorProduct_apply_germ_eq_of_curveModel_component_twoChartModel_x1_mul23 below · depth 22 - Euler characteristic of the special fibre equals 1-g(X₁(Mp))
ModularCurve.XOneP.finrank_H0_sub_finrank_H1_sectionsOf_specialFibre_eq_one_sub_genusFF_twoChartIntegralModel_x1_mul337 below · depth 22 - Uniformiser germ in mathfrak m_z² at singular points of the special fibre
ModularCurve.XOneP.germ_mem_maximalIdeal_sq_of_not_isRegularLocalRing_fibre_twoChartIntegralModel_x1_mul2,857 below · depth 22 - Components of the special fibre meet in a finite reduced scheme
ModularCurve.XOneP.isReduced_and_card_pos_pullback_of_isClosedImmersion_pair_specialFibre_twoChartIntegralModel_x1_mul2,861 below · depth 22 - Reducedness of the mod p fibre of the two-chart model of X₁(Mp)
ModularCurve.XOneP.isReduced_pullback_toBase_twoChartIntegralModel_x1_mul1,186 below · depth 22 - Component meeting the cusp ∞ has Gauss valuation ring
ModularCurve.XOneP.valuationSubring_eq_gauss_of_ringEquiv_stalk_germ_eq_of_section_eq_comp_iotaInf_twoChartModel_x1_mul1,745 below · depth 22 - Models of X₁(M) over ℚ̄ and k, with place reduction
ModularCurve.exists_curveModels_twoChartIntegralModel_x1FunctionField_chartCentre_isLaurentPlaceReduction_of_ringHom945 below · depth 22 - Properness of the two-chart integral j-model over A
ModularCurve.isProper_toBase_twoChartIntegralModel_of_eq_laurentBaseChange8 below · depth 22 - Closed immersion of a glued two-chart curve into a base change
AlgebraicCurve.TwoChartIntegralModel.exists_isClosedImmersion_glued_pullback_of_surjective0 below · depth 23 - Finiteness of crossing points in the special fibre
AlgebraicCurve.TwoChartIntegralModel.finite_setOf_not_subsingleton_minimalPrimes_span_germ2 below · depth 23 - Reducedness of the geometric special fibre of a two-chart model
AlgebraicCurve.TwoChartIntegralModel.isReduced_pullback_toBase_of_forall_map_span_eq_maximalIdeal11 below · depth 23 - Generic fibre of the j-finite chart is regular of dimension one
AlgebraicCurve.TwoChartIntegralModel.isRegularLocalRing_localization_fractionRing_tensor_chartAlgFin0 below · depth 23 - Regularity of the pole chart over the fraction field
AlgebraicCurve.TwoChartIntegralModel.isRegularLocalRing_localization_fractionRing_tensor_chartAlgInf0 below · depth 23 - Stalk dimension bound for the two-chart integral model
AlgebraicCurve.TwoChartIntegralModel.ringKrullDim_stalk_le_ringKrullDim_add_one3 below · depth 23 - Igusa function field inside the Gauss reductions of both charts
ModularCurve.XOneP.coe_mem_adjoin_gaussReductions_chartAlg_igusaFunctionFieldX1C_x1_mul1,181 below · depth 23 - Uniqueness of the minimal special-fibre point over a valuation point
ModularCurve.XOneP.eq_of_forall_specializes_imp_eq_of_ringEquiv_stalk_of_fst_eq_twoChartModel_x1_mul1,184 below · depth 23 - Partial Atkin–Lehner automorphism at p of L·ℚ(X₁(Mp))
ModularCurve.XOneP.exists_algEquiv_map_j_eq_qExpand_and_chartAlgFin_iff_and_comap_ne_and_coe_eq_atkinLehnerInvolutionFull_and_diamondConj_and_galoisConj_x1_mul172 below · depth 23 - Étale entry of Uₚ on good generators of J_E
ModularCurve.XOneP.exists_coprime_algEquiv_finset_addMonoidHom_proj_snd_heckeGenOne_eq_symm_frob_smul_and_proj_snd_diamondGen_eq_smul_of_pic0Mk_single_sub_single_snd_specialFibre_twoChartModel_x1_mul_of_atkinLehner_of_diamondConj3,174 below · depth 23
… and 1,073 more statements (search for the module name to find them).