Definitions/Def_WeierstrassCurve_VeluOrderTwoShortNF.lean
Order-two Vélu quotient in short normal form
Throughout, R is a commutative ring and W a Weierstrass curve over R satisfying Mathlib's IsShortNF, i.e. a_1 = a_2 = a_3 = 0, so that W is y^2 = x^3 + a_4 x + a_6. The module specialises the order-two Vélu data of the project to this presentation. Since the general definitions read \mathrm{veluGx}(x,y) = 3x^2 + 2a_2 x + a_4 - a_1 y and \mathrm{veluGy}(x,y) = -(2y + a_1 x + a_3), one obtains \mathrm{veluGx}(x,y) = 3x^2 + a_4 for all x,y and \mathrm{veluGy}(x,0) = 0; and since \mathrm{velu2QuadDisc}(x_0) = b_2^2 - 8 b_2 x_0 - 48 x_0^2 - 32 b_4, with b_2 = 0 and b_4 = 2a_4 this becomes -16\,(3x_0^2 + 4a_4). A further lemma records that a point of the form (e,0) satisfies the affine Weierstrass equation of W exactly when e^3 + a_4 e + a_6 = 0, and an instance records that any curve presented as \langle 0,0,0,a,b\rangle is in short normal form.
The second half treats the curve \mathrm{veluQuotient2}(x_0,y_0), defined in general by keeping a_1, a_2, a_3 and setting a_4' = a_4 - 5\,\mathrm{veluGx}(x_0,y_0), a_6' = a_6 - b_2\,\mathrm{veluGx}(x_0,y_0) - 7 x_0\,\mathrm{veluGx}(x_0,y_0). An instance shows this quotient is again in short normal form, and the coefficients at a point (e,0) are computed: a_4' = -(15e^2 + 4a_4) and a_6' = a_6 - 21e^3 - 7 a_4 e. The final theorem packages these as an equality of Weierstrass curves, \mathrm{veluQuotient2}(e,0) = \langle 0,0,0,\,-(15e^2+4a_4),\;a_6 - 21e^3 - 7a_4 e\rangle . No hypothesis that (e,0) lies on W, or that e is a root of the cubic, is imposed for these identities: they are polynomial identities in e and the coefficients of W.
Relation to Mathlib
IsShortNF, the coefficients a_i, b_i and the affine equation are Mathlib's; the Vélu data veluGx, veluGy, velu2QuadDisc and the order-two quotient curve veluQuotient2 are the project's own definitions, Mathlib having no Vélu isogeny formulas.
Where it is used
These explicit short-form formulas describe the quotient of a short Weierstrass curve by the subgroup generated by a two-torsion point (e,0), the input for the treatment of 2-isogenies of the curves occurring in the Frey curve analysis.
References
- J. Vélu, Isogénies entre courbes elliptiques, C. R. Acad. Sci. Paris Sér. A-B 273 (1971), 238–241
- J. H. Silverman, The Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 106, Springer, 1986
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 68 lines
- 9 declarations
- used in the statements of 0 theorems and imported by 1 proofs
- imports 1 definition modules
Source file: Definitions/Def_WeierstrassCurve_VeluOrderTwoShortNF.lean
Imported by
- no other definition module
Declarations
- lemma
WeierstrassCurve.veluGx_of_isShortNF - lemma
WeierstrassCurve.veluGy_zero_of_isShortNF - lemma
WeierstrassCurve.velu2QuadDisc_of_isShortNF - lemma
WeierstrassCurve.equation_zero_iff_of_isShortNF - instance
WeierstrassCurve.instIsShortNFMk - instance
WeierstrassCurve.veluQuotient2_isShortNF - lemma
WeierstrassCurve.veluQuotient2_a₄_of_isShortNF - lemma
WeierstrassCurve.veluQuotient2_a₆_of_isShortNF - theorem
WeierstrassCurve.veluQuotient2_eq_of_isShortNF
Source
import Mathlib import Definitions.Def_WeierstrassCurve_VeluOrderTwo set_option autoImplicit false namespace WeierstrassCurve section KernelData variable {R : Type*} [CommRing R] (W : WeierstrassCurve R) [W.IsShortNF] lemma veluGx_of_isShortNF (x y : R) : W.veluGx x y = 3 * x ^ 2 + W.a₄ := by simp only [veluGx, a₁_of_isShortNF, a₂_of_isShortNF] ring lemma veluGy_zero_of_isShortNF (x : R) : W.veluGy x 0 = 0 := by simp only [veluGy, a₁_of_isShortNF, a₃_of_isShortNF] ring lemma velu2QuadDisc_of_isShortNF (x : R) : W.velu2QuadDisc x = -16 * (3 * x ^ 2 + 4 * W.a₄) := by simp only [velu2QuadDisc, b₂_of_isShortNF, b₄_of_isShortNF] ring lemma equation_zero_iff_of_isShortNF (e : R) : W.toAffine.Equation e 0 ↔ e ^ 3 + W.a₄ * e + W.a₆ = 0 := by rw [Affine.equation_iff] constructor <;> intro h <;> linear_combination -h - e ^ 2 * a₂_of_isShortNF W instance instIsShortNFMk (a b : R) : (WeierstrassCurve.mk 0 0 0 a b).IsShortNF := ⟨rfl, rfl, rfl⟩ end KernelData section ShortQuotient variable {R : Type*} [CommRing R] (W : WeierstrassCurve R) [W.IsShortNF] instance veluQuotient2_isShortNF (x₀ y₀ : R) : (W.veluQuotient2 x₀ y₀).IsShortNF where a₁ := a₁_of_isShortNF W a₂ := a₂_of_isShortNF W a₃ := a₃_of_isShortNF W lemma veluQuotient2_a₄_of_isShortNF (e : R) : (W.veluQuotient2 e 0).a₄ = -(15 * e ^ 2 + 4 * W.a₄) := by rw [veluQuotient2_a₄, veluGx_of_isShortNF] ring lemma veluQuotient2_a₆_of_isShortNF (e : R) : (W.veluQuotient2 e 0).a₆ = W.a₆ - 21 * e ^ 3 - 7 * W.a₄ * e := by rw [veluQuotient2_a₆, veluGx_of_isShortNF, b₂_of_isShortNF] ring theorem veluQuotient2_eq_of_isShortNF (e : R) : W.veluQuotient2 e 0 = ⟨0, 0, 0, -(15 * e ^ 2 + 4 * W.a₄), W.a₆ - 21 * e ^ 3 - 7 * W.a₄ * e⟩ := by ext · exact a₁_of_isShortNF W · exact a₂_of_isShortNF W · exact a₃_of_isShortNF W · exact veluQuotient2_a₄_of_isShortNF W e · exact veluQuotient2_a₆_of_isShortNF W e end ShortQuotient end WeierstrassCurve
Statements phrased using this module (0)
No statement module imports it directly (it is used through other definition modules or by proofs).