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
.
Mathematical background #
Let W
be a Weierstrass curve over a commutative ring R
. By strong induction,
preΨₙ
has leading coefficientn / 2
and degree(n² - 4) / 2
ifn
is even,preΨₙ
has leading coefficientn
and degree(n² - 1) / 2
ifn
is odd,ΨSqₙ
has leading coefficientn²
and degreen² - 1
, andΦₙ
has leading coefficient1
and 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 boundd
ofpreΨₙ
.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 boundd
ofΨ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 boundd
ofΦₙ
.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][silverman2009]
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 : ℤ)
: