Definitions/Def_ModularCurve_LevelNormalForm.lean
Normal form for a Weierstrass curve with level data
Over a commutative ring T, the predicate ModularCurve.IsNormalForm takes a natural number \ell, a Weierstrass curve W over T (with coefficients a_1,\dots,a_6) and a quadruple D = (x_P, y_P, x_Q, y_Q) of elements of T (the project's LevelPData, the coordinates of two affine points), and asserts a list of equations on these data, split according to whether \ell equals 3. For \ell = 3 it asserts a_2 = 0, a_4 = 0, a_6 = 0, x_P = 0, y_P = 0 and x_Q = y_Q. For every \ell \neq 3 it asserts a_4 = 0, a_6 = 0, a_2 = a_3, x_P = 0 and y_P = 0; thus in the second case the curve is y^2 + a_1xy + a_3y = x^3 + a_3x^2 with the first point at the affine origin, the shape of the Tate normal form, while in the case \ell = 3 the curve is y^2 + a_1xy + a_3y = x^3 with the first point at the origin and the second on the line x = y. It is a condition on a chosen Weierstrass presentation together with chosen coordinates, not on an isomorphism class, and it imposes nothing beyond these equations: neither invertibility of the discriminant nor the condition IsLevelPStructure on D is required. Two rewriting lemmas record the two branches of the definition explicitly, and ModularCurve.IsNormalForm.map states that the predicate is preserved by base change along a ring homomorphism f : T \to T', applied to the coefficients of W and to the four coordinates of D.
Relation to Mathlib
WeierstrassCurve and its base change WeierstrassCurve.map are Mathlib's; the level data D and the normal-form predicate are the project's own, Mathlib having no notion of Tate or Deuring normal form.
Where it is used
The predicate selects a distinguished Weierstrass presentation in each orbit of the change-of-variables action on pairs (Weierstrass curve, level-\ell data), so that the moduli problem of level-\ell structures can be handled in explicit Weierstrass coordinates; this underlies the Katz-style level-\ell modular forms of the accompanying definitions.
References
- N. M. Katz and B. Mazur, Arithmetic Moduli of Elliptic Curves, Annals of Mathematics Studies 108, Princeton University Press, 1985
- J. H. Silverman, The Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 106, Springer, 1986, Chapter III
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 35 lines
- 4 declarations
- used in the statements of 2 theorems and imported by 7 proofs
- imports 1 definition modules
Source file: Definitions/Def_ModularCurve_LevelNormalForm.lean
Imports
Imported by
- no other definition module
Declarations
- def
ModularCurve.IsNormalForm - theorem
ModularCurve.isNormalForm_of_ne_three - theorem
ModularCurve.isNormalForm_three - theorem
ModularCurve.IsNormalForm.map
Source
import Mathlib import Definitions.Def_ModularCurve_KatzLevelP set_option autoImplicit false universe u namespace ModularCurve def IsNormalForm {T : Type u} [CommRing T] (ℓ : ℕ) (W : WeierstrassCurve T) (D : LevelPData T) : Prop := if ℓ = 3 then W.a₂ = 0 ∧ W.a₄ = 0 ∧ W.a₆ = 0 ∧ D.xP = 0 ∧ D.yP = 0 ∧ D.xQ = D.yQ else W.a₄ = 0 ∧ W.a₆ = 0 ∧ W.a₂ = W.a₃ ∧ D.xP = 0 ∧ D.yP = 0 theorem isNormalForm_of_ne_three {T : Type u} [CommRing T] {ℓ : ℕ} (hℓ : ℓ ≠ 3) (W : WeierstrassCurve T) (D : LevelPData T) : IsNormalForm ℓ W D ↔ W.a₄ = 0 ∧ W.a₆ = 0 ∧ W.a₂ = W.a₃ ∧ D.xP = 0 ∧ D.yP = 0 := by simp [IsNormalForm, hℓ] theorem isNormalForm_three {T : Type u} [CommRing T] (W : WeierstrassCurve T) (D : LevelPData T) : IsNormalForm 3 W D ↔ W.a₂ = 0 ∧ W.a₄ = 0 ∧ W.a₆ = 0 ∧ D.xP = 0 ∧ D.yP = 0 ∧ D.xQ = D.yQ := by simp [IsNormalForm] theorem IsNormalForm.map {T T' : Type u} [CommRing T] [CommRing T'] {ℓ : ℕ} {W : WeierstrassCurve T} {D : LevelPData T} (h : IsNormalForm ℓ W D) (f : T →+* T') : IsNormalForm ℓ (W.map f) (D.map f) := by unfold IsNormalForm at h ⊢ split_ifs at h ⊢ with h3 · obtain ⟨h1, h2, h3', h4, h5, h6⟩ := h simp [WeierstrassCurve.map, LevelPData.map, h1, h2, h3', h4, h5, h6] · obtain ⟨h1, h2, h3', h4, h5⟩ := h simp [WeierstrassCurve.map, LevelPData.map, h1, h2, h3', h4, h5] end ModularCurve