Definitions/Def_ModularCurve_TatePoint.lean
Near curves over Hahn series, Tate-point Vélu slots, moduli dictionary
Two families of objects are fixed. Over the field H of Hahn series with rational exponents and coefficients in \bar{\mathbb Q} (written Qbar), jNear j₀ is the element j_0 + s (constant term j_0 plus the monomial of exponent 1 with coefficient 1) and nearCurve j₀ is Mathlib's ofJ at that value, an elliptic curve over H; nearCurve_j records that its j-invariant is j_0+s and nearCurve_j_transcendental that this is transcendental over \bar{\mathbb Q}, since an element of H algebraic over an algebraically closed coefficient field would be a constant. For a Weierstrass curve E over H, CycSubH E N is the type of additive subgroups of the affine point group E(H) of the form \mathbb Z g with g of additive order exactly N, and RootsAt data jv is the type of roots y \in H of the one-variable polynomial obtained from the bivariate \Phi of data by substituting jv for the inner variable. ModuliDictionary p data asserts: for every elliptic E/H with j(E) transcendental over \bar{\mathbb Q} there is a bijection e from RootsAt data E.j to CycSubH E p such that each root r admits a finite set S of pairs which is an odd Vélu set for E (points on the affine equation, \mathrm{gy}\neq 0, injective x-coordinates), whose members lie in the subgroup e(r), and whose Vélu quotient is elliptic with j-invariant r.
At the Tate point, over a field K that is a \mathbb Q-algebra, with p prime and \zeta \in K^\times: basePoint K p is the formal Tate curve over K((q)) with q replaced by q^p, and for a family veluSlotSet of p+1 finite sets of pairs indexed by Fin (p+1), slotQuotient is the corresponding Vélu quotient of basePoint. Under the hypothesis that each slot quotient is elliptic, W4Conclusions data is a Prop-valued structure whose fields assert: each slot set is an odd Vélu set; for b : \mathrm{Fin}\,p the \zeta^b-twist of the Tate curve has j-invariant PhiGen.conj p ζ b.succ; the q \mapsto q^{p^2} specialisation has j-invariant PhiGen.conj p ζ 0; the b-th successor slot quotient equals that twisted Tate curve; the image of \Phi under the composite of evalAtJ, q\mapsto q^p and the coefficient embedding into K((q)) factors as \prod_i (X - j(\mathrm{slotQuotient}\,i)); and the p+1 slot j-invariants are pairwise distinct. W3Proper asserts that each slot set has exactly (p-1)/2 elements and consists of positive multiples k\cdot g of a single point g of additive order p on basePoint K p.
Relation to Mathlib
HahnSeries, AlgebraicClosure, Transcendental, WeierstrassCurve.ofJ and the affine point group law are Mathlib's; the Vélu notions used here (veluQuotient, veluGy, IsOddVeluSet) and the modular-polynomial data type are the project's own.
Where it is used
These declarations fix the common vocabulary in which the level-p moduli correspondence is both produced and consumed: the theorems supplying the p+1 cyclic subgroups of order p on the formal Tate curve, and the theorems deducing the dictionary between roots of the modular polynomial at a j-value and cyclic p-subgroups, used in the modular-curve input to the argument.
References
- J. Vélu, Isogénies entre courbes elliptiques, C. R. Acad. Sci. Paris Sér. A 273 (1971), 238–241
- J. H. Silverman, Advanced Topics in the Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 151, Springer, 1994, Chapter V
- S. Lang, Elliptic Functions, 2nd edition, Graduate Texts in Mathematics 112, Springer, 1987, Chapter 5
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 112 lines
- 20 declarations
- used in the statements of 7 theorems and imported by 12 proofs
- imports 3 definition modules
Source file: Definitions/Def_ModularCurve_TatePoint.lean
Declarations
- abbrev
ModularCurve.TatePoint.Qbar - abbrev
ModularCurve.TatePoint.H - def
ModularCurve.TatePoint.jNear - def
ModularCurve.TatePoint.nearCurve - instance
ModularCurve.TatePoint.instIsElliptic_nearCurve - def
ModularCurve.TatePoint.CycSubH - def
ModularCurve.TatePoint.RootsAt - theorem
ModularCurve.TatePoint.nearCurve_j - theorem
ModularCurve.TatePoint.nearCurve_j_transcendental - def
ModularCurve.TatePoint.basePoint - def
ModularCurve.TatePoint.slotQuotient - structure
ModularCurve.TatePoint.W4Conclusions - field
ModularCurve.TatePoint.W4Conclusions.oddVeluSet - field
ModularCurve.TatePoint.W4Conclusions.slotCurve_succ - field
ModularCurve.TatePoint.W4Conclusions.slotCurve_zero - field
ModularCurve.TatePoint.W4Conclusions.nonToric - field
ModularCurve.TatePoint.W4Conclusions.dictionary - field
ModularCurve.TatePoint.W4Conclusions.distinct - def
ModularCurve.TatePoint.W3Proper - def
ModularCurve.TatePoint.ModuliDictionary
Source
import Definitions.Def_ModularCurve_TateFormal import Definitions.Def_ModularCurve_PhiGen import Definitions.Def_WeierstrassCurve_VeluQuotientMap set_option autoImplicit false noncomputable section open ModularCurve WeierstrassCurve Polynomial namespace ModularCurve.TatePoint abbrev Qbar : Type := AlgebraicClosure ℚ abbrev H : Type := HahnSeries ℚ Qbar def jNear (j₀ : Qbar) : H := HahnSeries.C j₀ + HahnSeries.single (1 : ℚ) (1 : Qbar) open scoped Classical in def nearCurve (j₀ : Qbar) : WeierstrassCurve H := WeierstrassCurve.ofJ (jNear j₀) open scoped Classical in instance instIsElliptic_nearCurve (j₀ : Qbar) : (nearCurve j₀).IsElliptic := by unfold nearCurve; infer_instance open scoped Classical in def CycSubH (E : WeierstrassCurve H) (N : ℕ) : Type := {G : AddSubgroup E.toAffine.Point // ∃ g : E.toAffine.Point, addOrderOf g = N ∧ G = AddSubgroup.zmultiples g} def RootsAt {p : ℕ} [NeZero p] (data : ModularPolynomialData p) (jv : H) : Type := {y : H // (data.Φ.map (Polynomial.eval₂RingHom (Int.castRingHom H) jv)).IsRoot y} open scoped Classical in theorem nearCurve_j (j₀ : Qbar) : (nearCurve j₀).j = jNear j₀ := WeierstrassCurve.ofJ_j (jNear j₀) theorem nearCurve_j_transcendental (j₀ : Qbar) : Transcendental Qbar (nearCurve j₀).j := by rw [nearCurve_j] intro halg have hdeg := IsAlgClosed.degree_eq_one_of_irreducible Qbar (minpoly.irreducible halg.isIntegral) obtain ⟨c, hc⟩ := minpoly.mem_range_of_degree_eq_one Qbar _ hdeg have hC : algebraMap Qbar H c = HahnSeries.C c := by rw [HahnSeries.algebraMap_apply', PowerSeries.algebraMap_eq, HahnSeries.ofPowerSeries_C] rw [hC] at hc have h1 := congrArg (fun x : H => x.coeff (1 : ℚ)) hc simp only [jNear, HahnSeries.C_apply, HahnSeries.coeff_add, HahnSeries.coeff_single_same, HahnSeries.coeff_single_of_ne (one_ne_zero : (1 : ℚ) ≠ 0), zero_add] at h1 exact zero_ne_one h1 section TatePoint variable (K : Type) [Field K] [Algebra ℚ K] variable (p : ℕ) [Fact (Nat.Prime p)] [NeZero p] (ζ : Kˣ) def basePoint : WeierstrassCurve (LaurentSeries K) := (tateLaurent K).map (qExpand K p) variable (veluSlotSet : Fin (p + 1) → Finset (LaurentSeries K × LaurentSeries K)) def slotQuotient (i : Fin (p + 1)) : WeierstrassCurve (LaurentSeries K) := (basePoint K p).veluQuotient (veluSlotSet i) variable (instQ : ∀ i, (slotQuotient K p veluSlotSet i).IsElliptic) structure W4Conclusions (data : ModularPolynomialData p) : Prop where oddVeluSet : ∀ i, (basePoint K p).IsOddVeluSet (veluSlotSet i) slotCurve_succ : ∀ b : Fin p, ((tateLaurent K).map (qTwist (ζ ^ (b : ℕ)))).j = PhiGen.conj p ζ b.succ slotCurve_zero : ((tateLaurent K).map (qExpand K (p * p))).j = PhiGen.conj p ζ 0 nonToric : ∀ b : Fin p, slotQuotient K p veluSlotSet b.succ = (tateLaurent K).map (qTwist (ζ ^ (b : ℕ))) dictionary : data.Φ.map (((coeffEmb K).comp (qExpand ℚ p)).comp evalAtJ) = ∏ i : Fin (p + 1), (X - C (@WeierstrassCurve.j _ _ (slotQuotient K p veluSlotSet i) (instQ i))) distinct : Function.Injective fun i : Fin (p + 1) => @WeierstrassCurve.j _ _ (slotQuotient K p veluSlotSet i) (instQ i) open scoped Classical in def W3Proper : Prop := ∀ i, (veluSlotSet i).card = (p - 1) / 2 ∧ ∃ g : (basePoint K p).toAffine.Point, addOrderOf g = p ∧ ∀ P ∈ veluSlotSet i, ∃ (k : ℕ) (h : (basePoint K p).toAffine.Nonsingular P.1 P.2), 0 < k ∧ (k • g : (basePoint K p).toAffine.Point) = WeierstrassCurve.Affine.Point.some P.1 P.2 h end TatePoint open scoped Classical in def ModuliDictionary (p : ℕ) [NeZero p] (data : ModularPolynomialData p) : Prop := ∀ (E : WeierstrassCurve H) [E.IsElliptic], Transcendental Qbar E.j → Nonempty {e : RootsAt data E.j ≃ CycSubH E p // ∀ r : RootsAt data E.j, ∃ S : Finset (H × H), E.IsOddVeluSet S ∧ (∀ P ∈ S, ∃ h : E.toAffine.Nonsingular P.1 P.2, WeierstrassCurve.Affine.Point.some P.1 P.2 h ∈ (e r).1) ∧ ∃ hQ : (E.veluQuotient S).IsElliptic, @WeierstrassCurve.j H _ (E.veluQuotient S) hQ = r.1} end ModularCurve.TatePoint end
Statements phrased using this module (7)
- Reduction is an isomorphism on p-torsion
ModularCurve.B3.exists_torsionBy_reduction_addEquiv5 below · depth 12 - Special fibre of the good model is ofJ j₀ up to coordinate change
ModularCurve.B3.exists_variableChange_specialFibre_goodModel9 below · depth 12 - Good model at generic j₀: integrality, unit Δ, special fibre
ModularCurve.B3.goodModel_generic_spec0 below · depth 12 - Unit discriminant gives an elliptic special fibre
ModularCurve.B3.isElliptic_specialFibre9 below · depth 12 - Ellipticity of the special fibre of the good model
ModularCurve.B3.isElliptic_specialFibre_goodModel0 below · depth 12 - The near-curve is the explicit model at j₀+s
ModularCurve.B3.nearCurve_eq_ofJNe0Or17280 below · depth 12 - Normalised embeddings at j₀ versus roots of Φ_N(j₀+t,Y)
ModularCurve.exists_emb_equiv_rootsAt167 below · depth 12