The omega family of division polynomials #
ω n is the bivariate polynomial that the scalar-multiplication development identifies as the
second (Jacobian) coordinate of multiplication by n on a Weierstrass curve — that
identification belongs there, not here, and is not yet in the library. This file supplies the
polynomial itself, completing the (φ, ψ) pair of Mathlib's division-polynomial API: it defines
ω and the 2-complement ψc of ψ, and proves the defining identity
2 ω n + a₁ φ n ψ n + a₃ (ψ n)³ = ψc n,
which pins down 2 ω n in general and ω itself wherever 2 is a nonzerodivisor — the
equation lemma ω_def is the unconditional handle. Alongside: the value lemmas ω_zero and
ω_one, the parity rules ω_neg and ψc_neg, the complement identity ψ n * ψc n = ψ (2n),
and naturality in the coefficient ring for both families.
Main definitions #
WeierstrassCurve.ψc: the complement ofψ ninψ (2n).WeierstrassCurve.ω: theωfamily of division polynomials.
Main results #
WeierstrassCurve.ω_spec:2 ω n + a₁ φ n ψ n + a₃ (ψ n)³ = ψc n.WeierstrassCurve.ω_def: the defining formula, as an equation lemma — the unexposed body's handle for consumers, and the only one that determinesωwhere2is a zero divisor.WeierstrassCurve.ψ_mul_ψc:ψ n * ψc n = ψ (2n).WeierstrassCurve.ω_neg:ω (-n) = ω n + a₁ φ n ψ n + a₃ (ψ n)³, proved over the universal curve — where2is a nonzerodivisor — and specialised.WeierstrassCurve.map_ψc,.map_ω,.baseChange_ψc,.baseChange_ω: naturality in the coefficient ring, in both the ring-hom and the algebra-tower form of theψ/φsiblings.
References #
J. Silverman, The Arithmetic of Elliptic Curves, Exercise 3.7, which defines the
(ψ, φ, ω)triple for a general Weierstrass equationy² + a₁xy + a₃y = x³ + a₂x² + a₄x + a₆(the short form is offered there only as an optional simplification), and whose part (d),[m]P = (φₘ/ψₘ², ωₘ/ψₘ³), is what makesωaY-coordinate numerator and fixes the normalisation ofωtaken here. Part (d) has no Lean statement anywhere in this library yet:DivisionPolynomial/ZSMul.leandefinessmulY nasωₙ/ψₙ³, but identifying that rational function with theY-coordinate ofn • Premains to be proved.The exercise's own recurrence fixes a different normalisation, and the two part company off the short form. Its printed
4y ωₘ = ψₘ₋₁² ψₘ₊₂ + ψₘ₋₂ ψₘ₊₁²is corrected by Silverman's errata (the entryPages 105-106, Exercise 3.7ofmath.brown.edu/johsilve/AEC/AECErrata2013.pdf) to2 (2y + a₁x + a₃) ωₘ = ψₘ₋₁² ψₘ₊₂ - ψₘ₋₂ ψₘ₊₁²; asψ_mul_ψcreads that right-hand side asψ₂ ψcₘ, andψ₂ = 2y + a₁x + a₃, the corrected recurrence says2 ωₘ = ψcₘ, soω₁is(2y + a₁x + a₃)/2. Part (d) instead forcesω₁ = y, which is whatω_onerecords; the two normalisations agree exactly whena₁ = a₃ = 0.ω_specbelow is the part-(d) one, its extraa₁ φₘ ψₘ + a₃ ψₘ³being precisely that discrepancy.
Provenance #
Ported from J. Xu and D. K. Angdinata's LutzNagell/DivisionPolynomialOmega.lean in AINTLIB
(github.com/CBirkbeck/AINTLIB, Apache-2.0, main at
1c1c74664e40071c2c2165bc55ca2616a67ccd6b), declarations ψc, ω, ω_spec, two_mul_ω,
ψc_spec (here ψ_mul_ψc, naming its left-hand side), ω_zero, ω_one, ψc_neg,
map_ω, universal_ω_neg and ω_neg. That file's header reads
Authors: Junyan Xu, David Kurniadi Angdinata; following this repository's convention for
adapted material the upstream authorship is credited here rather than in the copyright
header. The invariant-polynomial half of that source file is already in
DivisionPolynomial/Invariant.lean; this file is the ω half, unblocked by
reducedInvarNum_eq_reducedInvarDenom_mul (ReducedInvariant.lean), the port of the
source's redInvar_normEDS. Its isEllSequence_ψ is ported separately, in
DivisionPolynomial/NormEDS.lean, which needs none of the reduced-invariant theory.
The specification realised here and the well-definedness argument behind ω_neg are both
stated in the module docstring of pinned Mathlib's
Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean (D. K. Angdinata):
ωₙ := (ψ₂ₙ / ψₙ - ψₙ(a₁φₙ + a₃ψₙ²)) / 2, with 2 dividing that difference in the
characteristic-zero universal ring and ωₙ its image under the universal morphism. This file
discharges that docstring's TODO: the bivariate polynomials ωₙ. The remaining declarations
with no source counterpart are the equation lemmas ψc_def and ω_def (the module system
keeps both bodies unexposed, so each needs a named handle), the value lemmas ψc_zero,
ψc_one and ψc_two (the complEDS₂ values read at the curve's parameters), map_ψc, and
the two baseChange_* forms, which follow Mathlib's sibling baseChange_ψ/baseChange_φ.
The complement of ψ n in ψ (2n): the parameter-level complEDS₂ at the curve's
division-polynomial parameters. ψ_mul_ψc below is the identity it is named for.
Equations
- W.ψc = complEDS₂ W.ψ₂ (Polynomial.C W.Ψ₃) (Polynomial.C W.preΨ₄)
Instances For
The defining formula for ψc, at the level of functions. The definition body is not
exposed, so this equation lemma is how a consumer in another module computes with it.
ψc at 0 is 2.
The ω family of division polynomials: ω n gives the second coordinate in Jacobian
coordinates of scalar multiplication by n.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The defining formula for ω. The definition body is not exposed, so this equation lemma is
how a consumer in another module computes with it: ω_spec fixes only 2 * W.ω n, which
determines nothing where 2 is a zero divisor. Deliberately not @[simp], for ψc_def's
reason.
ω at 0 is 1, matching ψ 0 = 0 and φ 0 = 1.
ω at 1 is Y, matching ψ 1 = 1 and φ 1 = X: the point 1 • (X, Y) is (X, Y)
itself.
ψc is natural in the coefficient ring.
ω is natural in the coefficient ring.
The parity rule for ω, @[simp] like its ψ/φ/ψc counterparts: without it the
negative index has no elimination route at all.
ψc commutes with base change across an algebra homomorphism, in the form of Mathlib's
baseChange_ψ.
ω commutes with base change across an algebra homomorphism, in the form of Mathlib's
baseChange_φ.