Documentation

Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree

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,

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 #

References #

[J Silverman, The Arithmetic of Elliptic Curves][silverman2009]

Tags #

elliptic curve, division polynomial, torsion point

@[simp]
@[simp]
@[simp]
theorem WeierstrassCurve.coeff_preΨ' {R : Type u} [CommRing R] (W : WeierstrassCurve R) (n : ) :
(W.preΨ' n).coeff ((n ^ 2 - if Even n then 4 else 1) / 2) = ↑(if Even n then n / 2 else n)
theorem WeierstrassCurve.coeff_preΨ'_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (h : n 0) :
(W.preΨ' n).coeff ((n ^ 2 - if Even n then 4 else 1) / 2) 0
@[simp]
theorem WeierstrassCurve.natDegree_preΨ' {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (h : n 0) :
(W.preΨ' n).natDegree = (n ^ 2 - if Even n then 4 else 1) / 2
theorem WeierstrassCurve.natDegree_preΨ'_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (hn : 2 < n) (h : n 0) :
@[simp]
theorem WeierstrassCurve.leadingCoeff_preΨ' {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (h : n 0) :
(W.preΨ' n).leadingCoeff = ↑(if Even n then n / 2 else n)
theorem WeierstrassCurve.preΨ'_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] {n : } (h : n 0) :
W.preΨ' n 0
@[simp]
theorem WeierstrassCurve.coeff_preΨ {R : Type u} [CommRing R] (W : WeierstrassCurve R) (n : ) :
(W.preΨ n).coeff ((n.natAbs ^ 2 - if Even n then 4 else 1) / 2) = ↑(if Even n then n / 2 else n)
theorem WeierstrassCurve.coeff_preΨ_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (h : n 0) :
(W.preΨ n).coeff ((n.natAbs ^ 2 - if Even n then 4 else 1) / 2) 0
@[simp]
theorem WeierstrassCurve.natDegree_preΨ {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (h : n 0) :
(W.preΨ n).natDegree = (n.natAbs ^ 2 - if Even n then 4 else 1) / 2
theorem WeierstrassCurve.natDegree_preΨ_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (hn : 2 < n.natAbs) (h : n 0) :
0 < (W.preΨ n).natDegree
@[simp]
theorem WeierstrassCurve.leadingCoeff_preΨ {R : Type u} [CommRing R] (W : WeierstrassCurve R) {n : } (h : n 0) :
(W.preΨ n).leadingCoeff = ↑(if Even n then n / 2 else n)
theorem WeierstrassCurve.preΨ_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] {n : } (h : n 0) :
W.preΨ n 0
@[simp]
theorem WeierstrassCurve.coeff_ΨSq {R : Type u} [CommRing R] (W : WeierstrassCurve R) (n : ) :
(W.ΨSq n).coeff (n.natAbs ^ 2 - 1) = n ^ 2
theorem WeierstrassCurve.coeff_ΨSq_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : } (h : n 0) :
(W.ΨSq n).coeff (n.natAbs ^ 2 - 1) 0
@[simp]
theorem WeierstrassCurve.natDegree_ΨSq {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : } (h : n 0) :
(W.ΨSq n).natDegree = n.natAbs ^ 2 - 1
theorem WeierstrassCurve.natDegree_ΨSq_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : } (hn : 1 < n.natAbs) (h : n 0) :
0 < (W.ΨSq n).natDegree
@[simp]
theorem WeierstrassCurve.leadingCoeff_ΨSq {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : } (h : n 0) :
(W.ΨSq n).leadingCoeff = n ^ 2
theorem WeierstrassCurve.ΨSq_ne_zero {R : Type u} [CommRing R] (W : WeierstrassCurve R) [NoZeroDivisors R] {n : } (h : n 0) :
W.ΨSq n 0
@[simp]
theorem WeierstrassCurve.coeff_Φ {R : Type u} [CommRing R] (W : WeierstrassCurve R) (n : ) :
(W.Φ n).coeff (n.natAbs ^ 2) = 1
@[simp]
theorem WeierstrassCurve.natDegree_Φ_pos {R : Type u} [CommRing R] (W : WeierstrassCurve R) [Nontrivial R] {n : } (hn : n 0) :
0 < (W.Φ n).natDegree
@[simp]