Fermat's Last Theorem in Lean 4

← all definition modules

Definitions/Def_WeierstrassCurve_VeluOrderTwoShortNF.lean

definition module

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

  1. J. Vélu, Isogénies entre courbes elliptiques, C. R. Acad. Sci. Paris Sér. A-B 273 (1971), 238–241
  2. 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.

Source file: Definitions/Def_WeierstrassCurve_VeluOrderTwoShortNF.lean

Imports

Imported by

  • no other definition module

Declarations

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).