Definitions/Def_ModularCurve_TateSlots.lean
Universal Tate point series and Vélu slot sets
Let \mathbb{Z}[[a,b]] = MvPowerSeries (Fin 2) ℤ, variable 0 recording the exponent of a and variable 1 that of b; the intended specialisation has u = a and Tate parameter Q = ab. The series tateUnivX and tateUnivY are given coefficientwise on a monomial a^ib^j: on the diagonal i=j=n they are -2\sigma_1(n) and \sigma_1(n); for i>j they are m and \binom{m}{2} with m=i-j, nonzero only when m\mid j; for j>i they are m and -\binom{m+1}{2} with m=j-i, again only when m \mid j. These are exactly the coefficients of Tate's x(u)=\sum_{n\in\mathbb{Z}}Q^nu/(1-Q^nu)^2-2\sum_{n\ge 1}\sigma_1(n)Q^n and the corresponding y(u). The series tateUnivA4, tateUnivA6 place the one-variable Tate coefficients tateA4, tateA6 on the diagonal, and tateUnivCurve is the Weierstrass curve \langle 1,0,0,\mathtt{tateUnivA4},\mathtt{tateUnivA6}\rangle over \mathbb{Z}[[a,b]].
For a commutative ring K, natural numbers p,j and a unit c of K, slotFamily is the pair (c\,X^{j},\,c^{-1}X^{p-j}) of power series over K, and slotSubst substitutes it into a two-variable integral series, yielding an element of PowerSeries K; so ab\mapsto X^{p} and u\mapsto cX^{j}. The pair nonToricPoint K p c j consists of the Laurent series obtained this way from tateUnivX and tateUnivY. Over a field, toricPoint K p c is the j=0 case written in closed form: constant terms c/(1-c)^2 and c^2/(1-c)^3, and m-th coefficients \sum_{d\mid m,\,p\mid d}(m/d)(c^{m/d}+c^{-m/d})-2[p\mid m]\sigma_1(m/p), respectively \sum_{d\mid m,\,p\mid d}\big(\binom{m/d}{2}c^{m/d}-\binom{m/d+1}{2}c^{-m/d}\big)+[p\mid m]\sigma_1(m/p).
Finally, for a unit \zeta, nonToricSlotSet K p ζ b is the image of \{1,\dots,\lfloor p/2\rfloor\} under k\mapsto nonToricPoint K p (ζ^(b*k)) k, toricSlotSet K p ζ the image under k\mapsto toricPoint K p (ζ^k), and veluSlotSet K p ζ i, for i\in\mathbb{Z}/(p+1)-indexing Fin (p+1), is the toric set when i=0 and nonToricSlotSet K p ζ (i-1) otherwise: p+1 finite sets of at most \lfloor p/2\rfloor points in K((q))^2. The curve tateBase K p is tateLaurent K with q replaced by q^{p} via qExpand, and is registered as elliptic. Accompanying lemmas give the coefficients of the universal series at a^ib^j, the a-invariants of tateUnivCurve, the two components of the points, and membership criteria for the three kinds of slot set.
Relation to Mathlib
Built on Mathlib's WeierstrassCurve, MvPowerSeries.subst and LaurentSeries (Hahn series over \mathbb{Z}); Mathlib has no Tate curve or Tate uniformisation, so the universal series, the substitution families and the point sets are the project's own.
Where it is used
Together these give, over K((q)), the Tate curve with parameter q^p and, for each of the p+1 order-p subgroups of its p-torsion, a set of representatives of the nontrivial points modulo inversion — the shape required as input to Vélu's isogeny formulas. They serve the analysis of degree-p isogenies and of q-expansions at the cusps in the project's treatment of the modular curve X_0.
References
- J. H. Silverman, Advanced Topics in the Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 151, Springer, 1994, Chapter V
- J. Vélu, Isogénies entre courbes elliptiques, C. R. Acad. Sci. Paris Sér. A 273 (1971), 238–241
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 191 lines
- 37 declarations
- used in the statements of 200 theorems and imported by 234 proofs
- imports 1 definition modules
Source file: Definitions/Def_ModularCurve_TateSlots.lean
Imports
Declarations
- def
ModularCurve.tateUnivX - def
ModularCurve.tateUnivY - def
ModularCurve.tateUnivA4 - def
ModularCurve.tateUnivA6 - def
ModularCurve.tateUnivCurve - def
ModularCurve.slotFamily - def
ModularCurve.slotSubst - def
ModularCurve.nonToricPoint - def
ModularCurve.nonToricSlotSet - def
ModularCurve.tateBase - theorem
ModularCurve.nonToricPoint_fst - theorem
ModularCurve.nonToricPoint_snd - theorem
ModularCurve.tateUnivX_apply - theorem
ModularCurve.tateUnivY_apply - theorem
ModularCurve.tateUnivA4_apply - theorem
ModularCurve.tateUnivA6_apply - theorem
ModularCurve.coeff_tateUnivX - theorem
ModularCurve.coeff_tateUnivY - theorem
ModularCurve.coeff_tateUnivA4 - theorem
ModularCurve.coeff_tateUnivA6 - theorem
ModularCurve.tateUnivCurve_a₁ - theorem
ModularCurve.tateUnivCurve_a₂ - theorem
ModularCurve.tateUnivCurve_a₃ - theorem
ModularCurve.tateUnivCurve_a₄ - theorem
ModularCurve.tateUnivCurve_a₆ - theorem
ModularCurve.mem_nonToricSlotSet - instance
ModularCurve.instIsElliptic_tateBase - def
ModularCurve.toricPoint - theorem
ModularCurve.toricPoint_fst - theorem
ModularCurve.toricPoint_snd - def
ModularCurve.toricSlotSet - def
ModularCurve.veluSlotSet - theorem
ModularCurve.veluSlotSet_zero - theorem
ModularCurve.veluSlotSet_succ - theorem
ModularCurve.mem_toricSlotSet - theorem
ModularCurve.mem_veluSlotSet_zero - theorem
ModularCurve.mem_veluSlotSet_succ
Source
import Definitions.Def_ModularCurve_TateFormal import Mathlib.RingTheory.MvPowerSeries.Substitution ↗ set_option autoImplicit false noncomputable section namespace ModularCurve def tateUnivX : MvPowerSeries (Fin 2) ℤ := fun e => if e 0 = e 1 then -2 * ∑ d ∈ (e 1).divisors, (d : ℤ) else if e 1 < e 0 then (if e 0 - e 1 ∣ e 1 then ((e 0 - e 1 : ℕ) : ℤ) else 0) else (if e 1 - e 0 ∣ e 1 then ((e 1 - e 0 : ℕ) : ℤ) else 0) def tateUnivY : MvPowerSeries (Fin 2) ℤ := fun e => if e 0 = e 1 then ∑ d ∈ (e 1).divisors, (d : ℤ) else if e 1 < e 0 then (if e 0 - e 1 ∣ e 1 then ((e 0 - e 1).choose 2 : ℤ) else 0) else (if e 1 - e 0 ∣ e 1 then -(((e 1 - e 0) + 1).choose 2 : ℤ) else 0) def tateUnivA4 : MvPowerSeries (Fin 2) ℤ := fun e => if e 0 = e 1 then PowerSeries.coeff (e 0) tateA4 else 0 def tateUnivA6 : MvPowerSeries (Fin 2) ℤ := fun e => if e 0 = e 1 then PowerSeries.coeff (e 0) tateA6 else 0 def tateUnivCurve : WeierstrassCurve (MvPowerSeries (Fin 2) ℤ) := ⟨1, 0, 0, tateUnivA4, tateUnivA6⟩ def slotFamily (K : Type*) [CommRing K] (p : ℕ) (c : Kˣ) (j : ℕ) : Fin 2 → PowerSeries K := ![PowerSeries.C (c : K) * PowerSeries.X ^ j, PowerSeries.C ((c⁻¹ : Kˣ) : K) * PowerSeries.X ^ (p - j)] def slotSubst (K : Type*) [CommRing K] (p : ℕ) (c : Kˣ) (j : ℕ) (f : MvPowerSeries (Fin 2) ℤ) : PowerSeries K := MvPowerSeries.subst (slotFamily K p c j) f def nonToricPoint (K : Type*) [CommRing K] (p : ℕ) (c : Kˣ) (j : ℕ) : LaurentSeries K × LaurentSeries K := (HahnSeries.ofPowerSeries ℤ K (slotSubst K p c j tateUnivX), HahnSeries.ofPowerSeries ℤ K (slotSubst K p c j tateUnivY)) open scoped Classical in def nonToricSlotSet (K : Type*) [CommRing K] (p : ℕ) (ζ : Kˣ) (b : ℕ) : Finset (LaurentSeries K × LaurentSeries K) := (Finset.Icc 1 (p / 2)).image fun k => nonToricPoint K p (ζ ^ (b * k)) k def tateBase (K : Type*) [CommRing K] (p : ℕ) [NeZero p] : WeierstrassCurve (LaurentSeries K) := (tateLaurent K).map (qExpand K p) @[simp] theorem nonToricPoint_fst (K : Type*) [CommRing K] (p : ℕ) (c : Kˣ) (j : ℕ) : (nonToricPoint K p c j).1 = HahnSeries.ofPowerSeries ℤ K (slotSubst K p c j tateUnivX) := rfl @[simp] theorem nonToricPoint_snd (K : Type*) [CommRing K] (p : ℕ) (c : Kˣ) (j : ℕ) : (nonToricPoint K p c j).2 = HahnSeries.ofPowerSeries ℤ K (slotSubst K p c j tateUnivY) := rfl theorem tateUnivX_apply (e : Fin 2 →₀ ℕ) : MvPowerSeries.coeff e tateUnivX = if e 0 = e 1 then -2 * ∑ d ∈ (e 1).divisors, (d : ℤ) else if e 1 < e 0 then (if e 0 - e 1 ∣ e 1 then ((e 0 - e 1 : ℕ) : ℤ) else 0) else (if e 1 - e 0 ∣ e 1 then ((e 1 - e 0 : ℕ) : ℤ) else 0) := rfl theorem tateUnivY_apply (e : Fin 2 →₀ ℕ) : MvPowerSeries.coeff e tateUnivY = if e 0 = e 1 then ∑ d ∈ (e 1).divisors, (d : ℤ) else if e 1 < e 0 then (if e 0 - e 1 ∣ e 1 then ((e 0 - e 1).choose 2 : ℤ) else 0) else (if e 1 - e 0 ∣ e 1 then -(((e 1 - e 0) + 1).choose 2 : ℤ) else 0) := rfl theorem tateUnivA4_apply (e : Fin 2 →₀ ℕ) : MvPowerSeries.coeff e tateUnivA4 = if e 0 = e 1 then PowerSeries.coeff (e 0) tateA4 else 0 := rfl theorem tateUnivA6_apply (e : Fin 2 →₀ ℕ) : MvPowerSeries.coeff e tateUnivA6 = if e 0 = e 1 then PowerSeries.coeff (e 0) tateA6 else 0 := rfl theorem coeff_tateUnivX (i j : ℕ) : MvPowerSeries.coeff (Finsupp.single 0 i + Finsupp.single 1 j) tateUnivX = if i = j then -2 * ∑ d ∈ j.divisors, (d : ℤ) else if j < i then (if i - j ∣ j then ((i - j : ℕ) : ℤ) else 0) else (if j - i ∣ j then ((j - i : ℕ) : ℤ) else 0) := by rw [tateUnivX_apply] simp [Finsupp.add_apply] theorem coeff_tateUnivY (i j : ℕ) : MvPowerSeries.coeff (Finsupp.single 0 i + Finsupp.single 1 j) tateUnivY = if i = j then ∑ d ∈ j.divisors, (d : ℤ) else if j < i then (if i - j ∣ j then ((i - j).choose 2 : ℤ) else 0) else (if j - i ∣ j then -(((j - i) + 1).choose 2 : ℤ) else 0) := by rw [tateUnivY_apply] simp [Finsupp.add_apply] theorem coeff_tateUnivA4 (i j : ℕ) : MvPowerSeries.coeff (Finsupp.single 0 i + Finsupp.single 1 j) tateUnivA4 = if i = j then PowerSeries.coeff i tateA4 else 0 := by rw [tateUnivA4_apply] simp [Finsupp.add_apply] theorem coeff_tateUnivA6 (i j : ℕ) : MvPowerSeries.coeff (Finsupp.single 0 i + Finsupp.single 1 j) tateUnivA6 = if i = j then PowerSeries.coeff i tateA6 else 0 := by rw [tateUnivA6_apply] simp [Finsupp.add_apply] @[simp] theorem tateUnivCurve_a₁ : tateUnivCurve.a₁ = 1 := rfl @[simp] theorem tateUnivCurve_a₂ : tateUnivCurve.a₂ = 0 := rfl @[simp] theorem tateUnivCurve_a₃ : tateUnivCurve.a₃ = 0 := rfl @[simp] theorem tateUnivCurve_a₄ : tateUnivCurve.a₄ = tateUnivA4 := rfl @[simp] theorem tateUnivCurve_a₆ : tateUnivCurve.a₆ = tateUnivA6 := rfl open scoped Classical in theorem mem_nonToricSlotSet (K : Type*) [CommRing K] (p : ℕ) (ζ : Kˣ) (b : ℕ) (P : LaurentSeries K × LaurentSeries K) : P ∈ nonToricSlotSet K p ζ b ↔ ∃ k ∈ Finset.Icc 1 (p / 2), nonToricPoint K p (ζ ^ (b * k)) k = P := by rw [nonToricSlotSet]; exact Finset.mem_image instance instIsElliptic_tateBase (K : Type*) [CommRing K] (p : ℕ) [NeZero p] : (tateBase K p).IsElliptic := by unfold tateBase; infer_instance def toricPoint (K : Type*) [Field K] (p : ℕ) (c : K) : LaurentSeries K × LaurentSeries K := (HahnSeries.ofPowerSeries ℤ K (PowerSeries.mk fun m => if m = 0 then c / (1 - c) ^ 2 else (∑ d ∈ m.divisors, if p ∣ d then ((m / d : ℕ) : K) * (c ^ (m / d) + c⁻¹ ^ (m / d)) else 0) - 2 * (if p ∣ m then ∑ e ∈ (m / p).divisors, (e : K) else 0)), HahnSeries.ofPowerSeries ℤ K (PowerSeries.mk fun m => if m = 0 then c ^ 2 / (1 - c) ^ 3 else (∑ d ∈ m.divisors, if p ∣ d then ((m / d).choose 2 : K) * c ^ (m / d) - ((m / d + 1).choose 2 : K) * c⁻¹ ^ (m / d) else 0) + (if p ∣ m then ∑ e ∈ (m / p).divisors, (e : K) else 0))) @[simp] theorem toricPoint_fst (K : Type*) [Field K] (p : ℕ) (c : K) : (toricPoint K p c).1 = HahnSeries.ofPowerSeries ℤ K (PowerSeries.mk fun m => if m = 0 then c / (1 - c) ^ 2 else (∑ d ∈ m.divisors, if p ∣ d then ((m / d : ℕ) : K) * (c ^ (m / d) + c⁻¹ ^ (m / d)) else 0) - 2 * (if p ∣ m then ∑ e ∈ (m / p).divisors, (e : K) else 0)) := rfl @[simp] theorem toricPoint_snd (K : Type*) [Field K] (p : ℕ) (c : K) : (toricPoint K p c).2 = HahnSeries.ofPowerSeries ℤ K (PowerSeries.mk fun m => if m = 0 then c ^ 2 / (1 - c) ^ 3 else (∑ d ∈ m.divisors, if p ∣ d then ((m / d).choose 2 : K) * c ^ (m / d) - ((m / d + 1).choose 2 : K) * c⁻¹ ^ (m / d) else 0) + (if p ∣ m then ∑ e ∈ (m / p).divisors, (e : K) else 0)) := rfl open scoped Classical in def toricSlotSet (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) : Finset (LaurentSeries K × LaurentSeries K) := (Finset.Icc 1 (p / 2)).image fun k => toricPoint K p ((ζ : K) ^ k) def veluSlotSet (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) (i : Fin (p + 1)) : Finset (LaurentSeries K × LaurentSeries K) := if (i : ℕ) = 0 then toricSlotSet K p ζ else nonToricSlotSet K p ζ ((i : ℕ) - 1) theorem veluSlotSet_zero (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) : veluSlotSet K p ζ 0 = toricSlotSet K p ζ := by simp [veluSlotSet] theorem veluSlotSet_succ (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) (b : Fin p) : veluSlotSet K p ζ b.succ = nonToricSlotSet K p ζ (b : ℕ) := by simp [veluSlotSet] open scoped Classical in theorem mem_toricSlotSet (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) (P : LaurentSeries K × LaurentSeries K) : P ∈ toricSlotSet K p ζ ↔ ∃ k ∈ Finset.Icc 1 (p / 2), toricPoint K p ((ζ : K) ^ k) = P := by rw [toricSlotSet]; exact Finset.mem_image theorem mem_veluSlotSet_zero (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) (P : LaurentSeries K × LaurentSeries K) : P ∈ veluSlotSet K p ζ 0 ↔ ∃ k ∈ Finset.Icc 1 (p / 2), toricPoint K p ((ζ : K) ^ k) = P := by rw [veluSlotSet_zero]; exact mem_toricSlotSet K p ζ P theorem mem_veluSlotSet_succ (K : Type*) [Field K] (p : ℕ) (ζ : Kˣ) (b : Fin p) (P : LaurentSeries K × LaurentSeries K) : P ∈ veluSlotSet K p ζ b.succ ↔ ∃ k ∈ Finset.Icc 1 (p / 2), nonToricPoint K p (ζ ^ ((b : ℕ) * k)) k = P := by rw [veluSlotSet_succ]; exact mem_nonToricSlotSet K p ζ (b : ℕ) P end ModularCurve end
Statements phrased using this module (200)
- Katz form at Tate(qᵖ) is the base-changed q-expansion
KatzModularForm.toFun_tateBase_eq_qExpand_coeffMap_qExpansion0 below · depth 17 - Mazur's cusp gives a level-p structure on Tate(qᵖ)
ModularCurve.isLevelPStructure_tateBase_cuspData_mazurCusp_of_five_le68 below · depth 17 - Vélu quotient of Tate(qᵖ) by the q-point is Tate(q)
ModularCurve.LevelP.quotientByLine_tateBase_nonToricPoint_fst58 below · depth 18 - Weierstrass equation of the Tate curve with parameter qᵖ
ModularCurve.equation_tateBase_iff0 below · depth 18 - The non-toric slot point lies on the base Tate curve
ModularCurve.equation_tateBase_nonToricPoint37 below · depth 18 - Toric points of Tate(qᵖ) over a commutative ring
ModularCurve.equation_tateBase_tateToricPoint36 below · depth 18 - Vanishing of preΨₚ at the Tate slot points, p≥ 5
ModularCurve.eval_prePsi_tateBase_nonToricPoint_eq_zero_of_five_le40 below · depth 18 - Toric p-torsion points kill preΨₚ on Tate(qᵖ)
ModularCurve.eval_prePsi_tateBase_tateToricPoint_eq_zero_of_five_le38 below · depth 18 - Independence element of toric and slot points is a unit
ModularCurve.isUnit_indepElt_tateBase_tateToricPoint_nonToricPoint2 below · depth 18 - Toric points lie on the Tate curve over K((q))
ModularCurve.toricPoint_equation35 below · depth 18 - Coefficients of the universal Tate x-series after slot substitution
ModularCurve.coeff_slotSubst_tateUnivX0 below · depth 19 - Coefficients of a slot substitution into the universal Tate Y-series
ModularCurve.coeff_slotSubst_tateUnivY0 below · depth 19 - Tate curve modulo order-d toric subgroup has j-invariant j(qᵈ)
ModularCurve.cyclicQuotientJ_tateLaurent_baseChange_eq_jqNModC_of_le_zmultiples131 below · depth 19 - Vanishing of preΨₚ at the Tate slot abscissa
ModularCurve.eval_prePsi_tateBase_nonToricPoint_eq_zero48 below · depth 19 - Toric point of exact order M on the Tate curve
ModularCurve.exists_point_tateLaurent_nsmul_eq_toricPoint_of_isPrimitiveRoot6 below · depth 19 - Non-toric points satisfy the Tate curve equation over K((q))
ModularCurve.nonToricPoint_equation36 below · depth 19 - Pinned multiplication formula for abscissae of Tate slot points
ModularCurve.nonToricPoint_fst_mul_psiSq_eq_phi49 below · depth 19 - Injectivity of the slot substitution at p=2, j=1
ModularCurve.slotSubst_gen_injective0 below · depth 19 - Analytic Tate curve at q=tᵖ equals the formal Tate base
ModularCurve.tateCurve_curve_X_pow_eq_tateBase0 below · depth 19 - Closed form of the Tate x-coordinate at a constant point
ModularCurve.tateCurve_pointX_C_eq_tateToricPoint_fst0 below · depth 19 - Tate parametrisation at u=c t^j: closed form for X
ModularCurve.tateCurve_pointX_C_mul_X_pow_eq_nonToricPoint_fst2 below · depth 19 - Universal Tate series satisfy the Tate Weierstrass equation
ModularCurve.tateUniv_equation35 below · depth 19 - The q^{pM}-coefficient of a toric point's first coordinate
ModularCurve.toricPoint_fst_coeff_mul0 below · depth 19 - Vanishing of q^m-coefficients of the toric x-coordinate for p ∤ m
ModularCurve.toricPoint_fst_coeff_of_not_dvd0 below · depth 19 - Constant term of the toric point's x-coordinate
ModularCurve.toricPoint_fst_coeff_zero0 below · depth 19 - The q^{pM}-coefficient of a toric point's second coordinate
ModularCurve.toricPoint_snd_coeff_mul_eq_sum_divisors0 below · depth 19 - Toric point's second coordinate is supported on multiples of p
ModularCurve.toricPoint_snd_coeff_of_not_dvd0 below · depth 19 - Constant term of the toric point's y-coordinate
ModularCurve.toricPoint_snd_coeff_zero0 below · depth 19 - Vélu quotient of the Tate curve over a non-toric slot set
ModularCurve.veluQuotient_nonToricSlotSet0 below · depth 19 - Chord relation for non-toric Tate slot points
ModularCurve.exists_chordSlope_nonToricPoint16 below · depth 20 - Tangent doubling law at non-toric slot points
ModularCurve.exists_tangentSlope_nonToricPoint16 below · depth 20 - Tangent slope at the non-toric Tate slot point, p=3
ModularCurve.exists_tangentSlope_nonToricPoint_of_eq_three10 below · depth 20 - Vélu μ₂-quotient of the Tate curve: E_{q^m}/⟨ T⟩≅ E_q^{2m}
ModularCurve.exists_variableChange_veluQuotient2_tateLaurent_eq_and_vcXInv_velu2X_toricPoint_eq_of_isPrimitiveRoot49 below · depth 20 - Vélu quotient of the Tate curve by μ_ℓ
ModularCurve.exists_variableChange_veluQuotient_tateLaurent_eq_and_vcXInv_veluX_toricPoint_eq_of_isPrimitiveRoot53 below · depth 20 - Toric Tate points add: P_c+P_d=P_{cd} over F((q))
ModularCurve.toricPoint_add_toricPoint_of_charZero5 below · depth 20 - Tate ordinate at a constant point over F((t))
ModularCurve.tateCurve_pointY_C_eq_tateToricPoint_snd0 below · depth 21 - Vélu 2-quotient of the Tate curve of q^m is that of q^{2m}
ModularCurve.exists_variableChange_veluQuotient2_toricPoint_neg_one_tateLaurent_map_qExpand_eq_map_qExpand_mul_two37 below · depth 22 - Vélu quotient of the Tate curve by toric ℓ-torsion
ModularCurve.exists_variableChange_veluQuotient_toricPoint_tateLaurent_map_qExpand_eq_map_qExpand_mul39 below · depth 22 - Vélu's μ₂-isogeny sends toric point c to c²
ModularCurve.vcXInv_velu2X_and_vcYInv_velu2Y_toricPoint_tateLaurent_map_qExpand_eq_toricPoint_sq13 below · depth 22 - Vélu's μ_ℓ-isogeny sends toric point c to c^ℓ
ModularCurve.vcXInv_veluX_and_vcYInv_veluY_toricPoint_tateLaurent_map_qExpand_eq_toricPoint_pow10 below · depth 22 - Tate-curve toric coordinates lie in the Γ₁(M) q-expansion field
ModularCurve.c4_mul_toricPoint_fst_div_c6_mem_qExpFunctionFieldC_gamma18 below · depth 23 - Vélu quotient of the Tate curve by its toric p-slots
ModularCurve.exists_variableChange_veluQuotient_toricSlotSet0 below · depth 23 - Distribution relation for Tate's X-series under μ_ℓ
ModularCurve.sum_range_toricPoint_fst_sub_sum_Ico_eq_mul_toricPoint_pow_fst_add_C0 below · depth 23 - Distribution relation for Tate's Y-series under μ_ℓ
ModularCurve.sum_range_toricPoint_snd_sub_sum_Ico_eq_mul_toricPoint_pow_snd_add0 below · depth 23 - Toric point at level ap is the qᵃ-expansion
ModularCurve.toricPoint_level_mul0 below · depth 23 - Vélu maps at toric points as μ_ℓ-orbit sums
ModularCurve.veluX_and_veluY_tateLaurent_toricPoint_eq_sum_range_sub_sum_Ico6 below · depth 23 - Integral q-expansions of division-value forms and their toric values
ModularCurve.exists_gamma1_isIntegralQExp_fourier_and_toricPoint_eq_sum4 below · depth 24 - M-torsion of Tate(q^M) and the inertia transvection
ModularCurve.exists_point_tateBase_qTwist_eq_add_of_isPrimitiveRoot47 below · depth 24 - Division-value functions on the Tate curve and diamond permutation
ModularCurve.exists_qExpFunctionFieldC_gammaH_bot_coe_eq_toricPoint_pow_and_diamondPullbackModL_apply_eq8 below · depth 24 - Inertia twist q ↦ ζ q on non-toric Tate points
ModularCurve.qTwist_nonToricPoint_of_pow_eq_one2 below · depth 25 - Additivity of the Tate parametrisation at parameters c q^j
ModularCurve.toricPoint_add_nonToricPoint_of_charZero45 below · depth 25 - Tate ordinate at u = c t^j equals the non-toric slot point
ModularCurve.tateCurve_pointY_C_mul_X_pow_eq_nonToricPoint_snd2 below · depth 26 - Tate point of the Γ₀(M')-rigidified problem and level automorphisms
ModularCurve.FullLevel.exists_pt_forall_isLevelAutAt_map_eq_act_of_exists_ringHom_gamma0Pow_of_tate330 below · depth 29 - No q-torsion and alignment above a supersingular place
ModularCurve.FullLevel.forall_nsmul_eq_zero_and_exists_variableChange_of_over_of_eq_map_classify_rigidDataPow_of_tatePoint2,862 below · depth 29 - Cusp-regular integral level-M' functions lie in the j-chart
ModularCurve.FullLevel.Diamond.coeffEmb_mem_chartAlgFin_of_cuspRegular_of_mem_integers827 below · depth 30 - One moduli place for all rigid-chart points over s
ModularCurve.FullLevel.exists_place_forall_isModuliPlaceOf_of_over_of_eq_map_classify_rigidDataPow_of_tatePoint2,858 below · depth 30 - Level automorphisms act on the Tate datum by γ-relabelling
ModularCurve.FullLevel.exists_variableChange_act_mapRing_eq_relabel_of_isLevelAutAt_of_level_fst_gamma0Pow246 below · depth 30 - Tate raw datum: weight-one twist, cusp levels, j=j(mathsf q^{qℓ})
ModularCurve.FullLevel.exists_variableChange_raw_rigidData_tate_weightOne_level_fst_gamma0Pow286 below · depth 30 - Level automorphisms act on the Tate point by diamond relabelling
ModularCurve.FullLevel.Diamond.exists_pt_forall_isLevelAutAt_map_eq_act_of_exists_ringHom_rigidDataH1Pow_of_tate_pinGamma1350 below · depth 31 - Vanishing q-torsion and line alignment at supersingular places
ModularCurve.FullLevel.Diamond.forall_nsmul_eq_zero_and_exists_variableChange_and_inLine_of_over_of_eq_map_classify_rigidDataH1Pow_of_tatePoint_pinGamma12,852 below · depth 31 - Galois translate of the Tate point relabels its Drinfeld pair
ModularCurve.FullLevel.exists_level_snd_snd_act_mapRing_eq_relabel_gamma0Pow230 below · depth 31 - A unit μ with ⟨μ,0,0,0⟩·τ_*x having the curve of x
ModularCurve.FullLevel.exists_units_curve_act_mapRing_eq_of_isLevelAutAt_gamma0Pow147 below · depth 31 - Minimal primes of the full-level moduli ring are conjugate
ModularCurve.FullLevel.ker_classify_mem_minimalPrimes_and_forall_exists_algEquiv_comap_eq_gamma0Pow2,100 below · depth 31 - Level automorphisms fix the Γ₀-slot at the Tate point
ModularCurve.FullLevel.level_fst_act_mapRing_eq_of_curve_eq_units_of_level_fst_gamma0Pow128 below · depth 31 - Level-ℓ slot of the twisted τ-transport is the γ-relabelling
ModularCurve.FullLevel.level_snd_fst_act_mapRing_eq_relabel_gamma0Pow141 below · depth 31 - Equal floor readings and supersingular fibre force equal Γ₀(M')-class
ModularCurve.FullLevel.moduliPoint_mk_eq_of_forall_apply_qExpand_eq_of_eq_map_classify_rigidDataPow_of_tatePoint2,857 below · depth 31 - Diamond relabelling by Γ₀(M') on `rigidDataH1Pow`
ModularCurve.LevelRelabelling.exists_isModuliRelabelling_rigidDataH1Pow180 below · depth 31 - A rational Γ₀(p^k)-structure on the Tate curve
ModularCurve.exists_isGamma0PowAt_tateBase_and_map_coeffMap_eq_prod_X_sub_C_toricPoint22 below · depth 31 - Inverse-twisted cusp data gives a level-p structure on Tate(qⁿ)
ModularCurve.isLevelPStructure_tateBase_cuspData_neg_of_dvd74 below · depth 31 - Modular forms realising Tate cusp coordinates and c₄,c₆
ModularCurve.FullLevel.AuxLevel.exists_modularForm_mul_qExpansion_eq_cuspPoint_and_slash_conjElemN_eq122 below · depth 32 - Toric generator-kernel coefficients as q-expansions of modular forms
ModularCurve.FullLevel.AuxLevel.exists_modularForm_qExpansion_eq_coeff_toricGenKernel_and_slash_conjElemN_eq4 below · depth 32 - A single moduli place above a supersingular place, H₁ level
ModularCurve.FullLevel.Diamond.exists_place_forall_isModuliPlaceOf_of_over_of_eq_map_classify_rigidDataH1Pow_of_tatePoint_pinGamma12,847 below · depth 32 - Level automorphism at γ⁻¹ realises the diamond relabelling
ModularCurve.FullLevel.Diamond.exists_variableChange_act_mapRing_eq_relabel_of_isLevelAutAt_of_level_fst_rigidDataH1Pow252 below · depth 32 - Tate point of the H₁ moduli problem over K
ModularCurve.FullLevel.Diamond.exists_variableChange_raw_rigidData_tate_weightOne_level_fst_rigidDataH1Pow300 below · depth 32 - Density of the classifying map at the pinned Tate point
ModularCurve.FullLevel.dense_range_classify_of_muTuple_pin_gamma0Pow722 below · depth 32 - Supersingular places read off injectively from Γ₀(M')-classes
ModularCurve.FullLevel.exists_injective_forall_place_eq_of_forall_evalAt_eq_of_eq_map_classify_rigidDataPow_of_tatePoint2,847 below · depth 32 - Toric products as modular forms on Γ_H(N²M)
ModularCurve.FullLevel.exists_modularForm_gammaH_levelH_qExpansion_eq_smul_prod_toricPoint_sub_gamma0Pow4 below · depth 32 - Level automorphisms act on the Tate point as relabelling
ModularCurve.FullLevel.exists_pt_forall_isLevelAutAt_map_eq_act_of_exists_ringHom_gamma0Pow_of_tate_of_algebra_of_isScalarTower332 below · depth 32 - Minimal primes of the full-level moduli ring as relabelling translates
ModularCurve.FullLevel.forall_exists_algEquiv_comap_ker_classify_eq_of_dense_gamma0Pow1,747 below · depth 32 - Kernel of the classifying map at j(q^{qℓ}) is minimal
ModularCurve.FullLevel.ker_classify_mem_minimalPrimes_of_jOf_eq_jqNModC_gamma0Pow104 below · depth 32 - Automorphisms of the Γ₀(M')-fibre datum over a supersingular place
ModularCurve.FullLevel.natCard_variableChange_act_curve_eq_and_level_fst_eq_eq_two_mul_placeWidthChar_of_over_of_eq_map_classify_rigidDataPow_of_tatePoint2,872 below · depth 32 - Level automorphism acts on transported cusp data through γ
ModularCurve.FullLevel.zsmul_toPoint_add_zsmul_toPoint_eq_toPoint_levelAut_of_map_eq_cuspData_of_exists_ringHom140 below · depth 32 - Coefficients of 2yᵥ+xᵥ at Tate cusp points
ModularCurve.coeff_two_mul_cuspPoint_snd_add_fst1 below · depth 32 - Constant term of (xᵥ+1/12)² at Tate cusps
ModularCurve.coeff_zero_cuspPoint_fst_add_inv_twelve_sq1 below · depth 32 - Constant term of 2yᵥ + xᵥ at Tate cusp points
ModularCurve.coeff_zero_two_mul_cuspPoint_snd_add_fst2 below · depth 32 - Weight-two form with Tate abscissa q-expansion X(cqᵇ,q^N)
ModularCurve.exists_modularForm_qExpansion_coeff_eq_coeff_slotSubst_tateUnivX3 below · depth 32 - Tate curve: toric generators give a Γ₀(p^k)-structure
ModularCurve.isGamma0PowAt_tateBase_prod_X_sub_C_toricPoint_fst19 below · depth 32 - Mazur's cusp is a level-p structure on Tate(qᵖ)
ModularCurve.isLevelPStructure_tateBase_cuspData_mazurCusp73 below · depth 32 - Toric points of Tate(q^M) add by multiplying parameters
ModularCurve.toricPoint_add_toricPoint_tateBase_of_charZero7 below · depth 32 - Weight-four forms with Tate cusp and c₄ q-expansions
ModularCurve.FullLevel.AuxLevel.exists_modularForm_weight_four_qExpansion_eq_cuspPoint_sq_and_cFour110 below · depth 33 - A weight-six form with q-expansion c₆ of the Tate curve
ModularCurve.FullLevel.AuxLevel.exists_modularForm_weight_six_qExpansion_eq_cSix_tateBase64 below · depth 33 - Weight-three forms with Tate cusp-point q-expansions
ModularCurve.FullLevel.AuxLevel.exists_modularForm_weight_three_qExpansion_eq_cuspPoint72 below · depth 33 - Transport of twisted Tate torsion coordinates by a level automorphism
ModularCurve.FullLevel.AuxLevel.levelAut_apply_eq_unit_pow_mul_of_coe_eq_cuspPoint_variableChange124 below · depth 33 - Transported μ_{p^k} kernel has coefficients in the level-H₁ field
ModularCurve.FullLevel.Diamond.coeff_kernelVariableChangeDeg_mem_range_of_variableChange_tateToricPoint_fst_mem_range_rigidDataH1Pow58 below · depth 33 - Transport of the Drinfeld Γ(q)-pair is relabelling by γ
ModularCurve.FullLevel.Diamond.exists_level_snd_snd_act_mapRing_eq_relabel_rigidDataH1Pow236 below · depth 33 - Level automorphism rescales the Tate datum by a weight-one unit
ModularCurve.FullLevel.Diamond.exists_units_curve_act_mapRing_eq_of_isLevelAutAt_rigidDataH1Pow151 below · depth 33 - K-rationality of the weight-one twist of Tate(mathsf q^q)
ModularCurve.FullLevel.Diamond.exists_variableChange_weightOne_tateBase_mem_laurentBaseChange_and_cuspData_mem_of_exists_ringHom_pinGamma1114 below · depth 33 - Supersingular specialisations of the H₁ datum have no q-torsion
ModularCurve.FullLevel.Diamond.forall_nsmul_eq_zero_of_over_of_eq_map_classify_rigidDataH1Pow104 below · depth 33 - Γ₀(M')-component fixed by the rescaled level automorphism
ModularCurve.FullLevel.Diamond.level_fst_act_mapRing_eq_of_curve_eq_units_of_level_fst_rigidDataH1Pow14 below · depth 33 - Equal floor readings force equal Γ₀(M')-moduli class
ModularCurve.FullLevel.Diamond.moduliPoint_mk_eq_of_forall_apply_eq_of_eq_map_classify_rigidDataH1Pow_of_tatePoint_pinGamma12,846 below · depth 33 - Diamond action: Γ₁(ℓ_g)-point of the τ-transport is γ₀₀-fold
ModularCurve.FullLevel.Diamond.toPoint_level_snd_fst_act_mapRing_eq_zsmul_toPoint_of_curve_eq_units_rigidDataH1Pow142 below · depth 33 - Minimal primes of the moduli ring dominate the j-line
ModularCurve.FullLevel.comap_adjoin_jZero_eq_bot_of_mem_minimalPrimes_gamma0Pow1,397 below · depth 33 - Weil pairings separate relabelled full-level components
ModularCurve.FullLevel.det_eq_of_ker_classify_act_eq_of_relabel_gamma0Pow281 below · depth 33 - Γ₀(M')-layer lies in fractions of classify-values at the Tate point
ModularCurve.FullLevel.exists_classify_eq_of_coe_eq_qExpand_of_mem_laurentBaseChange_gamma0Pow_tatePoint456 below · depth 33 - Read place is a moduli place of the Frobenius-twisted fibre
ModularCurve.FullLevel.exists_isModuliPlaceOf_map_frobenius_of_forall_evalAt_eq_of_eq_map_classify_rigidDataPow_of_tatePoint2,828 below · depth 33 - Generic rank of the moduli component through a dense point
ModularCurve.FullLevel.finrank_fractionRing_tensorProduct_quotient_ker_classify_eq_of_dense_gamma0Pow346 below · depth 33 - Generic fibre of the full-level moduli ring: reduced, of rank ψ(M')|GL₂(𝔽_ℓ)||GL₂(𝔽_q)|/2
ModularCurve.FullLevel.isReduced_and_finrank_fractionRing_tensorProduct_levelModuliPackageAbs_eq_gamma0Pow301 below · depth 33 - Level automorphism fixing the Tate point's classifying image is trivial
ModularCurve.FullLevel.levelAut_eq_one_of_forall_apply_classify_eq_gamma0Pow_tatePoint312 below · depth 33 - Relabelling cusp data on the Tate curve is linear in (v,w)
ModularCurve.LevelRelabelling.relabel_tateBase_cuspData_eq_cuspData_zsmul_add_zsmul50 below · depth 33 - 2Y+X=DX for the universal Tate coordinates
ModularCurve.coeff_two_mul_tateUnivY_add_tateUnivX0 below · depth 33 - Tate-curve divisibility of the level kernel into `inLineMulPoly`
ModularCurve.dvd_inLineMulPoly_of_map_eq_variableChange_tateBase_tateToricPoint_of_map_eq_kernelVariableChangeDeg19 below · depth 33 - Toric p-torsion points on Tate(qᵖ) kill ψₚ
ModularCurve.eval_prePsi_tateBase_tateToricPoint_eq_zero37 below · depth 33 - Toric ℓ-torsion points give Γ₁(ℓ)-points on the Tate curve
ModularCurve.isGamma1Point_tateBase_tateToricPoint_of_isPrimitiveRoot17 below · depth 33 - Torsion basis at the Tate cusp pair of level q
ModularCurve.torsion_basis_of_map_eq_variableChange_tateBase_cuspData86 below · depth 33 - A level automorphism and a chart element with Tate-slot expansions
ModularCurve.FullLevel.AuxLevel.exists_isLevelAutAt_mem_chartAlgFin_coe_eq_slotSubst_sub_and_apply_eq_laurent2,224 below · depth 34 - Weight-four form with q-expansion c₄ of the Tate curve
ModularCurve.FullLevel.AuxLevel.exists_modularForm_weight_four_qExpansion_eq_c463 below · depth 34 - Level automorphism determined by q-expansion form ratios
ModularCurve.FullLevel.Diamond.apply_eq_of_isLevelAutAt_of_coeffMap_mul_qExpansion_slash_eq0 below · depth 34 - Supersingular places injectively indexed by Γ₀(M')-moduli points
ModularCurve.FullLevel.Diamond.exists_injective_forall_place_eq_of_forall_evalAt_eq_of_eq_map_classify_rigidDataH1Pow_of_tatePoint_pinGamma12,836 below · depth 34 - Modular forms on Γ_{H_1}(q²M') with prescribed toric q-expansions
ModularCurve.FullLevel.Diamond.exists_modularForm_gammaH_qExpansion_eq_smul_prod_toricPoint_sub_rigidDataH1Pow4 below · depth 34 - Tate q-torsion coordinates and c₄,c₆ via forms on Γ_{H_1}
ModularCurve.FullLevel.Diamond.exists_modularForm_mul_qExpansion_eq_cuspPoint_and_slash_conjElemN_eq122 below · depth 34 - Forms on Γ_{H_1}(q²M') realising toric Tate-point coordinates
ModularCurve.FullLevel.Diamond.exists_modularForm_mul_qExpansion_eq_tateToricPoint_and_slash_conjElemN_eq10 below · depth 34 - Toric generator-kernel coefficients as modular forms on Γ_{H_1}
ModularCurve.FullLevel.Diamond.exists_modularForm_qExpansion_eq_coeff_toricGenKernel_and_slash_conjElemN_eq4 below · depth 34 - One rational place reads all admissible functions at H₁ level
ModularCurve.FullLevel.Diamond.exists_place_forall_evalAt_eq_apply_of_eq_map_classify_rigidDataH1Pow864 below · depth 34 - Diamond action on the toric point of the Tate curve
ModularCurve.FullLevel.Diamond.toPoint_levelAut_eq_zsmul_toPoint_of_map_eq_tateToricPoint_rigidDataH1Pow141 below · depth 34 - Level automorphism relabels the Tate cusp pair by γ
ModularCurve.FullLevel.Diamond.zsmul_toPoint_add_zsmul_toPoint_eq_toPoint_levelAut_of_map_eq_cuspData_rigidDataH1Pow146 below · depth 34 - Reading admissible level-M' functions gives a κ_A-embedding
ModularCurve.FullLevel.exists_algHom_modularFunctionFieldFullC_forall_apply_residue_eq_ringHom_of_transcendental_of_tatePoint863 below · depth 34 - Frobenius twist and cyclic-quotient j at a Tate point
ModularCurve.FullLevel.exists_place_curve_reduction_eq_map_frobenius_cyclicQuotientJ_eq_of_levelAut_of_originChart_of_tatePoint2,251 below · depth 34 - Supersingular branch with second Drinfeld section at the origin
ModularCurve.FullLevel.exists_place_ringHom_chartAlgFin_residue_eq_originChart_levelAut_of_forall_nsmul_eq_zero_of_tatePoint2,365 below · depth 34 - Integrality and cusp-regularity of j(qᵈ) for d ∣ M'
ModularCurve.FullLevel.mem_integers_and_cuspRegular_qExpand_jq_of_dvd44 below · depth 34 - No minimal prime of the generic fibre is maximal
ModularCurve.FullLevel.not_isMaximal_of_mem_minimalPrimes_tensorProduct_gamma0Pow230 below · depth 34 - No first-order deformations over a transcendental j-value
ModularCurve.FullLevel.snd_apply_eq_zero_of_apply_jOf_univ_eq_dualNumber_gamma0Pow212 below · depth 34 - Divisor-sum coefficients of (xᵥ+1/12)² at Tate cusp points
ModularCurve.coeff_cuspPoint_fst_add_inv_twelve_sq39 below · depth 34 - Order of the slot-substituted universal Tate x-series
ModularCurve.coeff_slotSubst_tateUnivX_eq_zero_of_lt_min_and_coeff_eq_and_order_eq_min1 below · depth 34 - Twisting the Tate slot parameter by ζ modulo ζ-1
ModularCurve.coeff_slotSubst_tateUnivX_mul_sub_coeff_mem_span_sub_one1 below · depth 34 - Non-toric division values as weight-two forms on Γ₁(n)∩Γ₀(Nn)
ModularCurve.exists_modularForm_gamma1_inf_gamma0_mul_qExpansion_coeff_eq_coeff_slotSubst_tateUnivX3 below · depth 34 - μ_M gives a cyclic M-kernel polynomial on Tate(qⁿ)
ModularCurve.isCyclicKernel_tateBase_prod_X_sub_C_toricPoint_fst15 below · depth 34 - Cusp of Tate(qⁿ) gives a level-ℓ structure when ℓ ∣ n
ModularCurve.isLevelPStructure_tateBase_cuspData_of_dvd74 below · depth 34 - Inverting the Tate parameter negates the point
ModularCurve.nonToricPoint_inv_tsub0 below · depth 34 - Relabelled Drinfeld pair passes through explicit cusp points
ModularCurve.FullLevel.AuxLevel.exists_isSectionThrough_relabel_coe_eq_cuspData_of_dvd179 below · depth 35 - Chart element with toric mathsf q-expansion and level automorphism
ModularCurve.FullLevel.AuxLevelOne.exists_isLevelAutAt_mem_chartAlgFin_coe_eq_tateToricPoint_sub_and_apply_eq_of_isPrimitiveRoot_mul_of_dvd2,195 below · depth 35 - Specialisation of the H₁ chart yields a κ(A)-algebra homomorphism
ModularCurve.FullLevel.Diamond.exists_algHom_forall_apply_residue_eq_apply_of_eq_map_classify_rigidDataH1Pow859 below · depth 35 - Existence of a moduli place for the Frobenius-twisted Γ₀(M')-class
ModularCurve.FullLevel.Diamond.exists_isModuliPlaceOf_map_frobenius_of_forall_evalAt_eq_of_eq_map_classify_rigidDataH1Pow_of_tatePoint_pinGamma12,817 below · depth 35 - Tate Γ₁(ℓ_g) point identifies level automorphisms with relabelling, sub-base edition
ModularCurve.FullLevel.Diamond.exists_pt_forall_isLevelAutAt_map_eq_act_of_exists_ringHom_rigidDataH1Pow_of_tate_pinGamma1_of_isScalarTower352 below · depth 35 - Level automorphism transports level-q cusp coordinates up to μ
ModularCurve.FullLevel.Diamond.levelAut_apply_eq_unit_pow_mul_of_coe_eq_cuspPoint_variableChange130 below · depth 35 - Level automorphism moves toric ℓ_g-torsion coordinates by c↦ c^{γ₀₀}
ModularCurve.FullLevel.Diamond.levelAut_apply_eq_unit_pow_mul_of_coe_eq_tateToricPoint_variableChange130 below · depth 35 - Gauss nonunits lie in the supersingular maximal ideal
ModularCurve.FullLevel.Diamond.mem_of_coe_mem_nonunits_of_isMaximal_of_mem_ssJSet_chartAlgFin2,297 below · depth 35 - Specialisation of j(q^{dℓ'}) as the q-th power of a cyclic-quotient j
ModularCurve.FullLevel.apply_eq_cyclicQuotientJ_pow_of_levelAut_of_originChart_of_forall_nsmul_eq_zero_of_tatePoint2,242 below · depth 35 - Every Ω-point of the full-level moduli ring has a tangent vector
ModularCurve.FullLevel.exists_algHom_dualNumber_fst_eq_snd_ne_zero_gamma0Pow221 below · depth 35 - Weight-four forms with Tate cusp-point and c₄ expansions at level q
ModularCurve.FullLevel.exists_modularForm_gammaH_levelH_weight_four_qExpansion_eq_cuspPoint_sq_and_cFour110 below · depth 35 - Weight-six form with q-expansion c₆ of Tate(q^{ q})
ModularCurve.FullLevel.exists_modularForm_gammaH_levelH_weight_six_qExpansion_eq_cSix_tateBase64 below · depth 35
… and 50 more statements (search for the module name to find them).