Definitions/Def_ModularCurve_CharLSpecialFibreLevelNDictionary.lean
Centres of places on the level- geometric modular curve
Throughout, K is a field, N\ge 1, and the ambient field is the intermediate field \mathrm{modularFunctionFieldC}\,K\,N = K(\bar j,\bar j_N) of the Laurent series field K((q)), generated by the q-expansion \bar j = q^{-1}+\dots of the j-invariant with coefficients reduced into K and by its N-fold substitution \bar j_N = \bar j(q^N). The two generators are packaged as elements jGeomGen K N and jNGeomGen K N of that field, and transcendental_jqNModC records that \bar j_N is transcendental over K, whence neither generator differs from a constant by zero. A ring homomorphism evalAtJGeom K evaluates integral one-variable polynomials at \bar j, and evalModularPair x y Φ evaluates a two-variable integral polynomial Φ (an element of \mathbb{Z}[X][Y]) at a pair (x,y) of elements of any commutative ring, compatibly with ring homomorphisms. For a modular-polynomial packet data : ModularPolynomialData N, whose polynomial data.Φ comes with the vanishing of its value at the pair of rational q-expansions, the module derives the same vanishing over \mathbb{Z}, over K, and in K(\bar j,\bar j_N).
The central definition is IsCentreOf K N (a,b) w for a place w of K(\bar j,\bar j_N) over K (a proper valuation subring containing K whose ring is principal, hence a discrete valuation ring) and a pair (a,b)\in K\times K: it asserts \operatorname{ord}_w(\bar j-a)>0 and \operatorname{ord}_w(\bar j_N-b)>0, where \operatorname{ord} is the normalised valuation. The weaker predicate IsAffineGeomPlace K N w asks only that both generators lie in the valuation subring. From a centre one obtains: both generators are w-integral; a and b are the residue-field evaluations w.\mathrm{evalAt} of the generators, so a centre is unique and distinct centres force distinct places; the residues of the generators are the images of a and b; and (a,b) satisfies the modular equation, \mathrm{evalModularPair}\,a\,b\,data.Φ=0 for every packet. For K of characteristic \ell prime, given data : ModularPolynomialData ℓ and a Kronecker-congruence hypothesis KroneckerCongruence ℓ data, the endomorphism frobeniusGeomLevel sends \bar j-a^\ell to (\bar j-a)^\ell and likewise for \bar j_N, and consequently IsCentreOf.frobOnPlacesGeomLevel: if (a,b) is a centre of w then (a^\ell,b^\ell) is a centre of the place frobOnPlacesGeomLevel K N data hKr w. Finally, exists_isCentreOf_of_isRational shows that a place with residue field K at which both generators are integral has the centre (w.\mathrm{evalAt}\,\bar j,\;w.\mathrm{evalAt}\,\bar j_N); the converse construction, producing a place from a prescribed solution of the modular equation, is not asserted.
Relation to Mathlib
Mathlib has no notion of the centre of a place on a modular curve; IsCentreOf, IsAffineGeomPlace and evalModularPair are the project's own, formulated for the project's AlgebraicCurve.Place structure and its ord and evalAt. The underlying Laurent series, valuation subrings, discrete valuation rings and residue fields are Mathlib's.
Where it is used
These notions provide the dictionary between places of the characteristic-\ell function field K(\bar j,\bar j_N) and points of the reduced modular equation \Phi_N=0, together with the compatibility of that dictionary with the \ell-power Frobenius. They are the geometric input on the special fibre used in the Eichler–Shimura style analysis of Hecke and Frobenius actions that underlies level lowering.
References
- S. Lang, Elliptic Functions, 2nd edition, Graduate Texts in Mathematics 112, Springer, 1987
- G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, Princeton University Press, 1971
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 404 lines
- 41 declarations
- used in the statements of 49 theorems and imported by 123 proofs
- imports 4 definition modules, and the statements of 3 theorems
Source file: Definitions/Def_ModularCurve_CharLSpecialFibreLevelNDictionary.lean
Imports
Def_ModularCurve_QAdicPlaceModDef_ModularCurve_CharLFrobeniusGeomLevelDef_ModularCurve_SpecializeModuliDef_AlgebraicCurve_PlaceEvaluation
Theorems imported by this definition module
Declarations
- theorem
AlgebraicCurve.Place.mk_mem_maximalIdeal_of_ord_pos - def
ModularCurve.evalAtJGeom - theorem
ModularCurve.evalAtJGeom_X - theorem
ModularCurve.laurentMap_comp_evalAtJInt_geom - theorem
ModularCurve.laurentMap_jqIntN_geom - theorem
ModularCurve.ModularPolynomialData.eval_int_eq_zero - theorem
ModularCurve.eval_int_eq_zero_geom - def
ModularCurve.jGeomGen - def
ModularCurve.jNGeomGen - theorem
ModularCurve.coe_jGeomGen - theorem
ModularCurve.coe_jNGeomGen - theorem
ModularCurve.jNGeomGen_one - theorem
ModularCurve.transcendental_jqNModC - theorem
ModularCurve.jGeomGen_sub_algebraMap_ne_zero - theorem
ModularCurve.jNGeomGen_sub_algebraMap_ne_zero - def
ModularCurve.evalModularPair - theorem
ModularCurve.map_evalModularPair - theorem
ModularCurve.evalModularPair_jq_eq_zero - theorem
ModularCurve.evalModularPair_jGeomGen_eq_zero - def
ModularCurve.IsCentreOf - theorem
ModularCurve.IsCentreOf.jGeomGen_mem - theorem
ModularCurve.IsCentreOf.jNGeomGen_mem - theorem
ModularCurve.IsCentreOf.evalAt_jGeomGen - theorem
ModularCurve.IsCentreOf.evalAt_jNGeomGen - theorem
ModularCurve.IsCentreOf.eq - theorem
ModularCurve.IsCentreOf.ne_of_ne - theorem
ModularCurve.IsCentreOf.mk_sub_mem_maximalIdeal_fst - theorem
ModularCurve.IsCentreOf.mk_sub_mem_maximalIdeal_snd - theorem
ModularCurve.IsCentreOf.residue_jGeomGen - theorem
ModularCurve.IsCentreOf.residue_jNGeomGen - theorem
ModularCurve.evalModularPair_mk_eq_zero - theorem
ModularCurve.IsCentreOf.modularEquation - theorem
ModularCurve.frobeniusGeomLevel_jGeomGen_sub_pow - theorem
ModularCurve.frobeniusGeomLevel_jNGeomGen_sub_pow - theorem
ModularCurve.ord_pow_prime - theorem
ModularCurve.pos_of_mul_pos_left' - theorem
ModularCurve.IsCentreOf.frobOnPlacesGeomLevel - def
ModularCurve.IsAffineGeomPlace - theorem
ModularCurve.IsCentreOf.isAffineGeomPlace - theorem
ModularCurve.ord_sub_evalAt_pos_of_isRational - theorem
ModularCurve.exists_isCentreOf_of_isRational
Source
import Mathlib import Definitions.Def_ModularCurve_QAdicPlaceMod import Definitions.Def_ModularCurve_CharLFrobeniusGeomLevel import Definitions.Def_ModularCurve_SpecializeModuli import Definitions.Def_AlgebraicCurve_PlaceEvaluation import Theorems.Thm_AlgebraicCurve_Place_evalAt_congr import Theorems.Thm_AlgebraicCurve_Place_evalAt_ne_zero import Theorems.Thm_AlgebraicCurve_Place_evalAt_algebraMap set_option autoImplicit false set_option synthInstance.maxHeartbeats 400000 set_option maxHeartbeats 800000 namespace AlgebraicCurve.Place open IsDedekindDomain WithZero IsLocalRing variable {K F : Type*} [Field K] [Field F] [Algebra K F] (v : Place K F) theorem mk_mem_maximalIdeal_of_ord_pos {f : F} (hf : f ∈ v.toValuationSubring) (h : 0 < v.ord f) : (⟨f, hf⟩ : v.toValuationSubring) ∈ IsLocalRing.maximalIdeal v.toValuationSubring := by rcases eq_or_ne f 0 with rfl | hf0 · exact Submodule.zero_mem _ rw [v.mem_maximalIdeal_iff_adicValuation_lt_one] have hne : v.adicValuation f ≠ 0 := v.adicValuation_ne_zero hf0 rw [← exp_log hne, show (1 : ℤᵐ⁰) = exp 0 from rfl, exp_lt_exp] have : v.ord f = -log (v.adicValuation f) := rfl omega end AlgebraicCurve.Place noncomputable section open AlgebraicCurve Polynomial namespace ModularCurve variable (K : Type*) [Field K] in def evalAtJGeom : Polynomial ℤ →+* LaurentSeries K := Polynomial.eval₂RingHom (Int.castRingHom (LaurentSeries K)) (jqModC K) variable (K : Type*) [Field K] in theorem evalAtJGeom_X : evalAtJGeom K Polynomial.X = jqModC K := Polynomial.eval₂_X _ _ variable (K : Type*) [Field K] in theorem laurentMap_comp_evalAtJInt_geom : (laurentMap (Int.castRingHom K)).comp evalAtJInt = evalAtJGeom K := by refine Polynomial.ringHom_ext' (Subsingleton.elim _ _) ?_ rw [RingHom.comp_apply, evalAtJInt_X, evalAtJGeom_X, jqModC, jqInt, map_mul, laurentMap_single, laurentMap_ofPowerSeries, map_one] variable (K : Type*) [Field K] in theorem laurentMap_jqIntN_geom (N : ℕ) [NeZero N] : laurentMap (Int.castRingHom K) (jqIntN N) = jqNModC K N := by rw [jqIntN, laurentMap_qExpand, jqNModC, jqModC, jqInt, map_mul, laurentMap_single, laurentMap_ofPowerSeries, map_one] variable {N : ℕ} [NeZero N] in theorem ModularPolynomialData.eval_int_eq_zero (data : ModularPolynomialData N) : data.Φ.eval₂ evalAtJInt (jqIntN N) = 0 := by refine laurentMap_injective (f := Int.castRingHom ℚ) Int.cast_injective ?_ rw [map_zero, Polynomial.hom_eval₂, laurentMap_comp_evalAtJInt, laurentMap_jqIntN] exact data.eval_eq_zero variable (K : Type*) [Field K] {N : ℕ} [NeZero N] in theorem eval_int_eq_zero_geom (data : ModularPolynomialData N) : data.Φ.eval₂ (evalAtJGeom K) (jqNModC K N) = 0 := by have h := congrArg (laurentMap (Int.castRingHom K)) data.eval_int_eq_zero rwa [map_zero, Polynomial.hom_eval₂, laurentMap_comp_evalAtJInt_geom, laurentMap_jqIntN_geom] at h section Generators variable (K : Type*) [Field K] (N : ℕ) [NeZero N] def jGeomGen : modularFunctionFieldC K N := ⟨jqModC K, jqModC_mem K N⟩ def jNGeomGen : modularFunctionFieldC K N := ⟨jqNModC K N, jqNModC_mem K N⟩ @[simp] theorem coe_jGeomGen : ((jGeomGen K N : modularFunctionFieldC K N) : LaurentSeries K) = jqModC K := rfl @[simp] theorem coe_jNGeomGen : ((jNGeomGen K N : modularFunctionFieldC K N) : LaurentSeries K) = jqNModC K N := rfl theorem jNGeomGen_one : jNGeomGen K 1 = jGeomGen K 1 := Subtype.ext (jqNModC_one K) theorem transcendental_jqNModC : Transcendental K (jqNModC K N) := by refine transcendental_iff.mpr fun p hp => ?_ refine transcendental_iff.mp (transcendental_jqModC K) p ?_ refine qExpand_injective N ?_ rw [map_zero] calc qExpand K N (Polynomial.aeval (jqModC K) p) = qExpandAlgC K N (Polynomial.aeval (jqModC K) p) := rfl _ = Polynomial.aeval (qExpandAlgC K N (jqModC K)) p := (Polynomial.aeval_algHom_apply _ _ _).symm _ = Polynomial.aeval (jqNModC K N) p := rfl _ = 0 := hp theorem jGeomGen_sub_algebraMap_ne_zero (a : K) : jGeomGen K N - algebraMap K (modularFunctionFieldC K N) a ≠ 0 := by rw [sub_ne_zero] intro h have hcoe : jqModC K = algebraMap K (LaurentSeries K) a := by have := congrArg (fun z : modularFunctionFieldC K N => (z : LaurentSeries K)) h simpa using this exact transcendental_jqModC K (hcoe ▸ isAlgebraic_algebraMap a) theorem jNGeomGen_sub_algebraMap_ne_zero (a : K) : jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) a ≠ 0 := by rw [sub_ne_zero] intro h have hcoe : jqNModC K N = algebraMap K (LaurentSeries K) a := by have := congrArg (fun z : modularFunctionFieldC K N => (z : LaurentSeries K)) h simpa using this exact transcendental_jqNModC K N (hcoe ▸ isAlgebraic_algebraMap a) end Generators section Evaluation variable {R S : Type*} [CommRing R] [CommRing S] def evalModularPair (x y : R) (Φ : Polynomial (Polynomial ℤ)) : R := Φ.eval₂ (Polynomial.eval₂RingHom (Int.castRingHom R) x) y theorem map_evalModularPair (φ : R →+* S) (x y : R) (Φ : Polynomial (Polynomial ℤ)) : φ (evalModularPair x y Φ) = evalModularPair (φ x) (φ y) Φ := by unfold evalModularPair rw [Polynomial.hom_eval₂] congr 1 refine Polynomial.ringHom_ext' (Subsingleton.elim _ _) ?_ simp only [RingHom.comp_apply, coe_eval₂RingHom, eval₂_X] theorem evalModularPair_jq_eq_zero (K : Type*) [Field K] {N : ℕ} [NeZero N] (data : ModularPolynomialData N) : evalModularPair (jqModC K) (jqNModC K N) data.Φ = 0 := eval_int_eq_zero_geom K data theorem evalModularPair_jGeomGen_eq_zero (K : Type*) [Field K] (N : ℕ) [NeZero N] (data : ModularPolynomialData N) : evalModularPair (jGeomGen K N) (jNGeomGen K N) data.Φ = 0 := by have hval := map_evalModularPair (modularFunctionFieldC K N).val.toRingHom (jGeomGen K N) (jNGeomGen K N) data.Φ have hgen : (modularFunctionFieldC K N).val.toRingHom (jGeomGen K N) = jqModC K := rfl have hgenN : (modularFunctionFieldC K N).val.toRingHom (jNGeomGen K N) = jqNModC K N := rfl rw [hgen, hgenN, evalModularPair_jq_eq_zero K data] at hval exact (map_eq_zero_iff _ (modularFunctionFieldC K N).val.toRingHom.injective).mp hval end Evaluation section Centre variable (K : Type*) [Field K] (N : ℕ) [NeZero N] def IsCentreOf (c : K × K) (w : Place K (modularFunctionFieldC K N)) : Prop := 0 < w.ord (jGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.1) ∧ 0 < w.ord (jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.2) variable {K N} variable {c : K × K} {w : Place K (modularFunctionFieldC K N)} theorem IsCentreOf.jGeomGen_mem (h : IsCentreOf K N c w) : jGeomGen K N ∈ w.toValuationSubring := by have hmem : jGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.1 ∈ w.toValuationSubring := w.mem_of_ord_nonneg (jGeomGen_sub_algebraMap_ne_zero K N c.1) h.1.le have := add_mem hmem (w.algebraMap_mem' c.1) rwa [sub_add_cancel] at this theorem IsCentreOf.jNGeomGen_mem (h : IsCentreOf K N c w) : jNGeomGen K N ∈ w.toValuationSubring := by have hmem : jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.2 ∈ w.toValuationSubring := w.mem_of_ord_nonneg (jNGeomGen_sub_algebraMap_ne_zero K N c.2) h.2.le have := add_mem hmem (w.algebraMap_mem' c.2) rwa [sub_add_cancel] at this theorem IsCentreOf.evalAt_jGeomGen (h : IsCentreOf K N c w) : w.evalAt (jGeomGen K N) = c.1 := by have hcongr := w.evalAt_congr h.jGeomGen_mem (w.algebraMap_mem' c.1) (Or.inr h.1) rw [hcongr, w.evalAt_algebraMap] theorem IsCentreOf.evalAt_jNGeomGen (h : IsCentreOf K N c w) : w.evalAt (jNGeomGen K N) = c.2 := by have hcongr := w.evalAt_congr h.jNGeomGen_mem (w.algebraMap_mem' c.2) (Or.inr h.2) rw [hcongr, w.evalAt_algebraMap] theorem IsCentreOf.eq {c' : K × K} (h : IsCentreOf K N c w) (h' : IsCentreOf K N c' w) : c = c' := by have h1 : c.1 = c'.1 := by rw [← h.evalAt_jGeomGen, h'.evalAt_jGeomGen] have h2 : c.2 = c'.2 := by rw [← h.evalAt_jNGeomGen, h'.evalAt_jNGeomGen] exact Prod.ext h1 h2 theorem IsCentreOf.ne_of_ne {c' : K × K} {w' : Place K (modularFunctionFieldC K N)} (h : IsCentreOf K N c w) (h' : IsCentreOf K N c' w') (hcc : c ≠ c') : w ≠ w' := by rintro rfl exact hcc (h.eq h') theorem IsCentreOf.mk_sub_mem_maximalIdeal_fst (h : IsCentreOf K N c w) : (⟨jGeomGen K N, h.jGeomGen_mem⟩ : w.toValuationSubring) - algebraMap K w.toValuationSubring c.1 ∈ IsLocalRing.maximalIdeal w.toValuationSubring := by have hsub : ((⟨jGeomGen K N, h.jGeomGen_mem⟩ : w.toValuationSubring) - algebraMap K w.toValuationSubring c.1 : w.toValuationSubring) = ⟨jGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.1, sub_mem h.jGeomGen_mem (w.algebraMap_mem' c.1)⟩ := by refine Subtype.ext ?_ show jGeomGen K N - (algebraMap K w.toValuationSubring c.1 : modularFunctionFieldC K N) = jGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.1 rw [Place.coe_algebraMap] rw [hsub] exact w.mk_mem_maximalIdeal_of_ord_pos _ h.1 theorem IsCentreOf.mk_sub_mem_maximalIdeal_snd (h : IsCentreOf K N c w) : (⟨jNGeomGen K N, h.jNGeomGen_mem⟩ : w.toValuationSubring) - algebraMap K w.toValuationSubring c.2 ∈ IsLocalRing.maximalIdeal w.toValuationSubring := by have hsub : ((⟨jNGeomGen K N, h.jNGeomGen_mem⟩ : w.toValuationSubring) - algebraMap K w.toValuationSubring c.2 : w.toValuationSubring) = ⟨jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.2, sub_mem h.jNGeomGen_mem (w.algebraMap_mem' c.2)⟩ := by refine Subtype.ext ?_ show jNGeomGen K N - (algebraMap K w.toValuationSubring c.2 : modularFunctionFieldC K N) = jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) c.2 rw [Place.coe_algebraMap] rw [hsub] exact w.mk_mem_maximalIdeal_of_ord_pos _ h.2 theorem IsCentreOf.residue_jGeomGen (h : IsCentreOf K N c w) : IsLocalRing.residue w.toValuationSubring ⟨jGeomGen K N, h.jGeomGen_mem⟩ = algebraMap K w.ResidueField c.1 := by rw [← sub_eq_zero, IsScalarTower.algebraMap_apply K w.toValuationSubring w.ResidueField, IsLocalRing.ResidueField.algebraMap_eq, ← map_sub] exact (IsLocalRing.residue_eq_zero_iff _).mpr h.mk_sub_mem_maximalIdeal_fst theorem IsCentreOf.residue_jNGeomGen (h : IsCentreOf K N c w) : IsLocalRing.residue w.toValuationSubring ⟨jNGeomGen K N, h.jNGeomGen_mem⟩ = algebraMap K w.ResidueField c.2 := by rw [← sub_eq_zero, IsScalarTower.algebraMap_apply K w.toValuationSubring w.ResidueField, IsLocalRing.ResidueField.algebraMap_eq, ← map_sub] exact (IsLocalRing.residue_eq_zero_iff _).mpr h.mk_sub_mem_maximalIdeal_snd end Centre section ModularEquation variable {K : Type*} [Field K] {N : ℕ} [NeZero N] variable {c : K × K} {w : Place K (modularFunctionFieldC K N)} theorem evalModularPair_mk_eq_zero (data : ModularPolynomialData N) (hJ : jGeomGen K N ∈ w.toValuationSubring) (hJN : jNGeomGen K N ∈ w.toValuationSubring) : evalModularPair (⟨jGeomGen K N, hJ⟩ : w.toValuationSubring) ⟨jNGeomGen K N, hJN⟩ data.Φ = 0 := by have hval := map_evalModularPair (SubringClass.subtype w.toValuationSubring) (⟨jGeomGen K N, hJ⟩ : w.toValuationSubring) ⟨jNGeomGen K N, hJN⟩ data.Φ have hgen : SubringClass.subtype w.toValuationSubring (⟨jGeomGen K N, hJ⟩ : w.toValuationSubring) = jGeomGen K N := rfl have hgenN : SubringClass.subtype w.toValuationSubring (⟨jNGeomGen K N, hJN⟩ : w.toValuationSubring) = jNGeomGen K N := rfl rw [hgen, hgenN, evalModularPair_jGeomGen_eq_zero K N data] at hval exact (map_eq_zero_iff (SubringClass.subtype w.toValuationSubring) Subtype.val_injective).mp hval theorem IsCentreOf.modularEquation (data : ModularPolynomialData N) (h : IsCentreOf K N c w) : evalModularPair c.1 c.2 data.Φ = 0 := by have hres := congrArg (IsLocalRing.residue w.toValuationSubring) (evalModularPair_mk_eq_zero data h.jGeomGen_mem h.jNGeomGen_mem) rw [map_zero, map_evalModularPair, h.residue_jGeomGen, h.residue_jNGeomGen, ← map_evalModularPair] at hres exact (map_eq_zero_iff _ (algebraMap K w.ResidueField).injective).mp hres end ModularEquation section Frobenius variable (K : Type*) [Field K] (N : ℕ) [NeZero N] variable {ℓ : ℕ} [Fact ℓ.Prime] [CharP K ℓ] variable (data : ModularPolynomialData ℓ) (hKr : KroneckerCongruence ℓ data) theorem frobeniusGeomLevel_jGeomGen_sub_pow (a : K) : frobeniusGeomLevel K N data hKr (jGeomGen K N - algebraMap K (modularFunctionFieldC K N) (a ^ ℓ)) = (jGeomGen K N - algebraMap K (modularFunctionFieldC K N) a) ^ ℓ := by haveI : CharP (LaurentSeries K) ℓ := charP_laurentSeries K have hj : frobeniusGeomLevel K N data hKr (jGeomGen K N) = jGeomGen K N ^ ℓ := frobeniusGeomLevel_jq K N data hKr rw [map_sub, AlgHom.commutes, hj, map_pow] refine Subtype.ext ?_ push_cast rw [sub_pow_char] theorem frobeniusGeomLevel_jNGeomGen_sub_pow (b : K) : frobeniusGeomLevel K N data hKr (jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) (b ^ ℓ)) = (jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) b) ^ ℓ := by haveI : CharP (LaurentSeries K) ℓ := charP_laurentSeries K have hj : frobeniusGeomLevel K N data hKr (jNGeomGen K N) = jNGeomGen K N ^ ℓ := frobeniusGeomLevel_jqN K N data hKr rw [map_sub, AlgHom.commutes, hj, map_pow] refine Subtype.ext ?_ push_cast rw [sub_pow_char] variable {K N} omit [Fact ℓ.Prime] [CharP K ℓ] in private theorem ord_pow_prime (w : Place K (modularFunctionFieldC K N)) (g : modularFunctionFieldC K N) : w.ord (g ^ ℓ) = (ℓ : ℤ) * w.ord g := by rw [show g ^ ℓ = g ^ ((ℓ : ℕ) : ℤ) from (zpow_natCast g ℓ).symm, w.ord_zpow] private theorem pos_of_mul_pos_left' {e x : ℤ} (h : 0 < e * x) (he : 0 < e) : 0 < x := by rcases lt_trichotomy x 0 with hx | hx | hx · exact absurd h (not_lt.mpr (mul_nonpos_iff.mpr (Or.inl ⟨he.le, hx.le⟩))) · subst hx; simp at h · exact hx theorem IsCentreOf.frobOnPlacesGeomLevel {c : K × K} {w : Place K (modularFunctionFieldC K N)} (h : IsCentreOf K N c w) : IsCentreOf K N (c.1 ^ ℓ, c.2 ^ ℓ) (frobOnPlacesGeomLevel K N data hKr w) := by obtain ⟨e, he, -, hord⟩ := exists_ramification_frobenius K N data hKr w have hℓ : 0 < (ℓ : ℤ) := by exact_mod_cast (Fact.out : ℓ.Prime).pos constructor · have hkey := hord (jGeomGen K N - algebraMap K (modularFunctionFieldC K N) (c.1 ^ ℓ)) rw [frobeniusGeomLevel_jGeomGen_sub_pow K N data hKr c.1, ord_pow_prime] at hkey refine pos_of_mul_pos_left' (e := (e : ℤ)) ?_ (by exact_mod_cast he) rw [← hkey] exact mul_pos hℓ h.1 · have hkey := hord (jNGeomGen K N - algebraMap K (modularFunctionFieldC K N) (c.2 ^ ℓ)) rw [frobeniusGeomLevel_jNGeomGen_sub_pow K N data hKr c.2, ord_pow_prime] at hkey refine pos_of_mul_pos_left' (e := (e : ℤ)) ?_ (by exact_mod_cast he) rw [← hkey] exact mul_pos hℓ h.2 end Frobenius section Existence variable {K : Type*} [Field K] {N : ℕ} [NeZero N] def IsAffineGeomPlace (K : Type*) [Field K] (N : ℕ) [NeZero N] (w : Place K (modularFunctionFieldC K N)) : Prop := jGeomGen K N ∈ w.toValuationSubring ∧ jNGeomGen K N ∈ w.toValuationSubring theorem IsCentreOf.isAffineGeomPlace {c : K × K} {w : Place K (modularFunctionFieldC K N)} (h : IsCentreOf K N c w) : IsAffineGeomPlace K N w := ⟨h.jGeomGen_mem, h.jNGeomGen_mem⟩ theorem ord_sub_evalAt_pos_of_isRational {w : Place K (modularFunctionFieldC K N)} (hrat : w.IsRational) {f : modularFunctionFieldC K N} (hf : f ∈ w.toValuationSubring) (hne : f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f) ≠ 0) : 0 < w.ord (f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f)) := by have hmem : f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f) ∈ w.toValuationSubring := sub_mem hf (w.algebraMap_mem' _) rcases eq_or_ne (w.ord (f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f))) 0 with h0 | h0 · exfalso refine w.evalAt_ne_zero hrat hne h0 ?_ have hres : algebraMap K w.ResidueField (w.evalAt (f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f))) = 0 := by rw [w.algebraMap_evalAt hrat hmem] have hcoe : (⟨f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f), hmem⟩ : w.toValuationSubring) = ⟨f, hf⟩ - algebraMap K w.toValuationSubring (w.evalAt f) := by refine Subtype.ext ?_ show f - algebraMap K (modularFunctionFieldC K N) (w.evalAt f) = f - (algebraMap K w.toValuationSubring (w.evalAt f) : modularFunctionFieldC K N) rw [Place.coe_algebraMap] rw [hcoe, map_sub, sub_eq_zero, ← w.algebraMap_evalAt hrat hf, IsScalarTower.algebraMap_apply K w.toValuationSubring w.ResidueField, IsLocalRing.ResidueField.algebraMap_eq] exact (map_eq_zero_iff _ (algebraMap K w.ResidueField).injective).mp hres · have hnonneg := w.ord_nonneg_of_mem hmem omega theorem exists_isCentreOf_of_isRational {w : Place K (modularFunctionFieldC K N)} (hrat : w.IsRational) (haff : IsAffineGeomPlace K N w) : IsCentreOf K N (w.evalAt (jGeomGen K N), w.evalAt (jNGeomGen K N)) w := ⟨ord_sub_evalAt_pos_of_isRational hrat haff.1 (jGeomGen_sub_algebraMap_ne_zero K N _), ord_sub_evalAt_pos_of_isRational hrat haff.2 (jNGeomGen_sub_algebraMap_ne_zero K N _)⟩ end Existence end ModularCurve
Statements phrased using this module (49)
- Inertia-fixed strict points in general position over the special fibre
ModularCurve.PlaceSpecialization.exists_isStrictFst_isStrictSnd_general_position_disjoint_forall_inertia_smul_eq469 below · depth 13 - Finiteness of zeros of j - a on the level-N modular function field
ModularCurve.finite_setOf_ord_jGeomGen_sub_pos116 below · depth 13 - Affine geometric places are stable under the Frobenius map
ModularCurve.isAffineGeomPlace_frobOnPlacesGeomLevel0 below · depth 13 - Orders of jmath̄ - a sum to ψ(N)
ModularCurve.sum_ord_jGeomGen_sub_eq_dedekindPsi161 below · depth 13 - Transcendence of j(q^N) over the constants
ModularCurve.transcendental_jqNModC0 below · depth 13 - Almost all affine places of the level-N fibre are smooth
ModularCurve.exists_finset_forall_isCentreOf_unique_ord_eq_one146 below · depth 14 - Every place is affine or a pole of ̄ j
ModularCurve.isAffineGeomPlace_or_ord_jGeomGen_lt_zero72 below · depth 14 - Places over a centre from the roots of Φ_N
ModularCurve.exists_map_roots_places_of_card_roots_eq_dedekindPsi_univ278 below · depth 15 - Cyclic N-subgroups parametrise places and moduli points over j(E₀)
ModularCurve.exists_orbitMap_places_moduliPoint_arithFrobC_compat_univ332 below · depth 15 - Geometric j is a uniformiser where j ≠ 0, 1728
ModularCurve.ord_jGeomGen_sub_algebraMap_eq_one_of_evalAt_eq358 below · depth 15 - Trace preserves pole-order bounds at a place
AlgebraicCurve.Place.neg_le_ord_trace_of_forall_le_ord2 below · depth 16 - Strict trace bound along places over a fixed place
AlgebraicCurve.Place.trace_eq_zero_or_neg_add_one_le_ord_trace_of_forall_le_ord0 below · depth 16 - Unique centre with uniformiser gives partial_YΦ̄_N(c)≠ 0
ModularCurve.derivative_evalEval_ne_zero_of_isCentreOf_unique_of_ord_jGeomGen_sub_eq_one144 below · depth 16 - Nonvanishing of partialⱼΦ̄_N at a unique centre with uniformiser
ModularCurve.derivative_swapBivar_evalEval_ne_zero_of_isCentreOf_unique_of_ord_jNGeomGen_sub_eq_one164 below · depth 16 - Level-N and level-q modular equations among j,j_N,j_q,j_{Nq}
ModularCurve.evalModularPair_jFun_jNFun_jQFun_jNQFun_eq_zero0 below · depth 16 - Places of X₀(M), X₀(Ms) and the two degeneracy laws
ModularCurve.exists_orbitMap_cyclicAddSubgroup_places_restrictAlong_heckeAlphaC_heckeBetaC_eq437 below · depth 16 - Vanishing of leadₓᵃ of a trace at supersingular places
ModularCurve.lead_trace_eq_zero_of_forall_le_ord366 below · depth 16 - Pole order of jmath̄ at a place is nonzero in K
ModularCurve.natAbs_ord_jGeomGen_cast_ne_zero_of_ord_neg126 below · depth 16 - Order bound for β(d)h^m on the α-fibre of an index place
ModularCurve.neg_mul_poleOrder_add_one_le_ord_heckeBetaC_mul_pow366 below · depth 16 - Floor bound for β(d)h^m along a supersingular fibre
ModularCurve.neg_mul_poleOrder_le_ord_heckeBetaC_mul_pow366 below · depth 16 - ̃ j - a is a uniformiser when q ≤ 3
ModularCurve.ord_jGeomGen_sub_algebraMap_eq_one_of_evalAt_eq_of_le_three351 below · depth 16 - q-expansion of the weight-2m trace Hecke operator
ModularCurve.qexpOfWeight_trace_heckeBetaC_mul_pow_eq_heckePS_of_eq_smul_map132 below · depth 16 - Trace at a place: Tr(g)(x)=sum_{y∣ x}e(y∣ x) g(y)
AlgebraicCurve.Place.mem_and_evalAt_trace_eq_sum_ramificationIndexAlong_smul_evalAt9 below · depth 17 - Pinned strict reductions of a Jacobi-inversion divisor at level N
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumLevel.mapDomain_fstDiv_eq_and_mapDomain_sndDiv_eq_of_mk_spData_eq_zero_of_pin1,485 below · depth 17 - Tameness of cusp pole orders on the ℓ-degeneracy roof
ModularCurve.cast_natAbs_ord_heckeAlphaC_ne_zero_and_heckeBetaC_of_ord_neg127 below · depth 17 - Riemann–Roch bound for the cuspidal weight-2m floor divisor
ModularCurve.ell_le_dimFormulaCusp_of_forall_eq_weightFloor_sub733 below · depth 17 - Common width along both degeneracy legs of the ℓ-roof
ModularCurve.exists_ramificationIndexAlong_mul_eq_placeWidth_restrictAlong_heckeAlphaC_heckeBetaC859 below · depth 17 - Hasse invariant intertwines the two Hecke operators at ℓ
ModularCurve.hasse_smul_traceAlong_smul_pullbackAlong_smul_D_jGeomGen_eq155 below · depth 17 - Integral closure of k[jmath̄] in the level-N fibre field
ModularCurve.isDedekindDomain_integralClosure_adjoin_jGeomGen_of_separable0 below · depth 17 - Supersingular order bound for the Hecke difference on the roof
ModularCurve.neg_mul_add_one_le_ord_pow_mul_heckeBetaC_mul_pow_sub_of_mem_ssPlaces966 below · depth 17 - Poles of j(q) and j(q^ℓ) agree at every place
ModularCurve.ord_heckeAlphaC_jGeomGen_neg_iff_ord_heckeBetaC_jGeomGen_neg42 below · depth 17 - Order of the Hecke multiplier at a tame place
ModularCurve.ord_heckeMultiplier_eq17 below · depth 17 - Order of the Hecke multiplier at a pole of α^*j
ModularCurve.ord_heckeMultiplier_eq_of_ord_neg_of_eq_smul_map451 below · depth 17 - Supersingularity along the two legs of the ℓ-roof
ModularCurve.restrictAlong_heckeAlphaC_mem_ssPlaces_iff_restrictAlong_heckeBetaC_mem_ssPlaces859 below · depth 17 - Ring maps out of K(̃ j,̃ j_N) are determined by generators
ModularCurve.ringHom_ext_of_apply_jGeomGen_eq_of_apply_jNGeomGen_eq0 below · depth 17 - j-generator of the level-N function field is the q-expansion j(q)
ModularCurve.jGeomGen_eq_mk_jqModC0 below · depth 18 - Order of the Hecke multiplier at a pole of j
ModularCurve.ord_heckeMultiplier_eq_of_ord_neg102 below · depth 18 - Order zero of the Hecke multiplier away from j=0,1728
ModularCurve.ord_heckeMultiplier_eq_zero_of_evalAt_ne380 below · depth 18 - Order of vanishing of ̄ j at supersingular places in characteristic 3
ModularCurve.ord_jGeomGen_eq_three_or_eq_six_of_exists_prime_dvd_mod_three_eq_two_of_isAlgClosed385 below · depth 18 - Row form of Hecke compatibility for the supersingular residue pairing
ModularCurve.ssResiduePairing_ssHeckeFun_eq_comp_traceAlong891 below · depth 18 - Weight-zero cuspidal integrality forces vanishing
ModularCurve.eq_zero_of_isModPCuspFormFn_zero165 below · depth 19 - j(mathsf q)-a is a uniformiser on the ℓ-degeneracy roof
ModularCurve.ord_heckeAlphaC_jGeomGen_sub_algebraMap_eq_one360 below · depth 19 - j(q^ℓ) - a' is a uniformiser at generic places of the roof
ModularCurve.ord_heckeBetaC_jGeomGen_sub_algebraMap_eq_one363 below · depth 19 - Hecke compatibility of the supersingular residue pairing
ModularCurve.sum_kaehlerResidueTerm_liftFun_ssHeckeFun_eq890 below · depth 19 - Integrality of the modular equation over ℤ((q))
ModularCurve.ModularPolynomialData.eval_int_eq_zero0 below · depth 20 - Places of j-order exactly 3 and 6 in characteristic 3
ModularCurve.ncard_setOf_ord_jGeomGen_eq_three_and_eq_six_of_exists_prime_dvd_mod_three_eq_two402 below · depth 23 - Gauss residue fields at the floor: X₁(M) and j(q),j(q^M)
ModularCurve.XOneGammaZeroP.exists_ringEquiv_residueField_gauss_x1FunctionFieldC_and_modularFunctionFieldC_x1x0_gamma01,041 below · depth 28 - Factorisation of a supersingular attachment through the Gauss residue field
ModularCurve.XZeroPM.exists_ringHom_residueField_gauss_comp_residue_eq_of_ringEquiv_modularFunctionFieldC_gamma0_mul345 below · depth 28 - Transport of the q-expansion fields of X₀(M), X₁(M) along τ
ModularCurve.exists_ringHom_modularFunctionFieldC_x1FunctionFieldC_coe_eq_coeffMap_of_forall_exists_pow_eq0 below · depth 28