Division polynomials of Weierstrass curves #
This file computes the leading terms of certain polynomials associated to division polynomials of
Weierstrass curves defined in
Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean.
Mathematical background #
Let W be a Weierstrass curve over a commutative ring R. By strong induction,
preΨₙhas leading coefficientn / 2and degree(n² - 4) / 2ifnis even,preΨₙhas leading coefficientnand degree(n² - 1) / 2ifnis odd,ΨSqₙhas leading coefficientn²and degreen² - 1, andΦₙhas leading coefficient1and degreen².
In particular, when R is an integral domain of characteristic different from n, the univariate
polynomials preΨₙ, ΨSqₙ, and Φₙ all have their expected leading terms.
Main statements #
WeierstrassCurve.natDegree_preΨ_le: the degree bounddofpreΨₙ.WeierstrassCurve.coeff_preΨ: thed-th coefficient ofpreΨₙ.WeierstrassCurve.natDegree_preΨ: the degree ofpreΨₙwhenn ≠ 0.WeierstrassCurve.leadingCoeff_preΨ: the leading coefficient ofpreΨₙwhenn ≠ 0.WeierstrassCurve.natDegree_ΨSq_le: the degree bounddofΨSqₙ.WeierstrassCurve.coeff_ΨSq: thed-th coefficient ofΨSqₙ.WeierstrassCurve.natDegree_ΨSq: the degree ofΨSqₙwhenn ≠ 0.WeierstrassCurve.leadingCoeff_ΨSq: the leading coefficient ofΨSqₙwhenn ≠ 0.WeierstrassCurve.natDegree_Φ_le: the degree bounddofΦₙ.WeierstrassCurve.coeff_Φ: thed-th coefficient ofΦₙ.WeierstrassCurve.natDegree_Φ: the degree ofΦₙwhenn ≠ 0.WeierstrassCurve.leadingCoeff_Φ: the leading coefficient ofΦₙwhenn ≠ 0.
References #
J Silverman, The Arithmetic of Elliptic Curves
Tags #
elliptic curve, division polynomial, torsion point
@[simp]
theorem WeierstrassCurve.coeff_Ψ₂Sq_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 4 ≠ 0) :
@[simp]
theorem WeierstrassCurve.natDegree_Ψ₂Sq {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 4 ≠ 0) :
theorem WeierstrassCurve.natDegree_Ψ₂Sq_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 4 ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_Ψ₂Sq {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 4 ≠ 0) :
theorem WeierstrassCurve.Ψ₂Sq_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 4 ≠ 0) :
@[simp]
theorem WeierstrassCurve.coeff_Ψ₃_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 3 ≠ 0) :
@[simp]
theorem WeierstrassCurve.natDegree_Ψ₃ {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 3 ≠ 0) :
theorem WeierstrassCurve.natDegree_Ψ₃_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 3 ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_Ψ₃ {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 3 ≠ 0) :
theorem WeierstrassCurve.Ψ₃_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 3 ≠ 0) :
@[simp]
theorem WeierstrassCurve.coeff_preΨ₄_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 2 ≠ 0) :
@[simp]
theorem WeierstrassCurve.natDegree_preΨ₄ {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 2 ≠ 0) :
theorem WeierstrassCurve.natDegree_preΨ₄_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 2 ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_preΨ₄ {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 2 ≠ 0) :
theorem WeierstrassCurve.preΨ₄_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) (h : 2 ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_preΨ' {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : ℕ} (h : ↑n ≠ 0) :
theorem WeierstrassCurve.preΨ'_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] {n : ℕ} (h : ↑n ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_preΨ {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : ℤ} (h : ↑n ≠ 0) :
theorem WeierstrassCurve.preΨ_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] {n : ℤ} (h : ↑n ≠ 0) :
theorem WeierstrassCurve.coeff_ΨSq_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : ℤ} (h : ↑n ≠ 0) :
@[simp]
theorem WeierstrassCurve.natDegree_ΨSq {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : ℤ} (h : ↑n ≠ 0) :
theorem WeierstrassCurve.natDegree_ΨSq_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : ℤ} (hn : 1 < n.natAbs) (h : ↑n ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_ΨSq {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : ℤ} (h : ↑n ≠ 0) :
theorem WeierstrassCurve.ΨSq_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : ℤ} (h : ↑n ≠ 0) :
theorem WeierstrassCurve.coeff_Φ_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] (n : ℤ) :
@[simp]
theorem WeierstrassCurve.natDegree_Φ {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] (n : ℤ) :
theorem WeierstrassCurve.natDegree_Φ_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] {n : ℤ} (hn : n ≠ 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_Φ {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] (n : ℤ) :
theorem WeierstrassCurve.Φ_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] (n : ℤ) :