Documentation

TauCeti.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Invariant

The invariant polynomial of a Weierstrass curve #

This file defines the polynomial

WeierstrassCurve.invar = 6 X² + b₂ X + b₄

and proves the division-polynomial identities that pin it down, together with the one identity connecting φ and ψ to IsEllipticNet.invarDenom. They are the first stage of the ω family of division polynomials, which gives the Y coordinate of scalar multiplication in Jacobian coordinates.

Throughout, ψ is Mathlib's division-polynomial sequence WeierstrassCurve.ψ, and nothing here uses or asserts that it is an elliptic net or an elliptic sequence. IsEllipticNet.invarNum and IsEllipticNet.invarDenom are defined for an arbitrary sequence — invarDenom W s n is W (n + s) * W n * W (n - s) — so applying invarDenom to ψ is the use of a formula, not an ellipticity hypothesis; the namespace is where those formulas live, not a claim about ψ.

The name invar records where the polynomial comes from, and that origin is motivation rather than anything established below: for a sequence that is an elliptic net, and over a field where the relevant denominators are nonzero, invarNum/invarDenom is independent of the index — that is the cancellation of IsEllipticNet.invarNum_mul_invarDenom — and its value modulo the Weierstrass polynomial is 6 X² + b₂ X + b₄. Neither the hypothesis nor that conclusion is proved here, and over a CommRing the quotient need not exist at all. What this file proves are the polynomial identities listed below.

Main definitions #

Main results #

What is deliberately not here #

WeierstrassCurve.ω itself and its API — ω_spec, ω_def, two_mul_ω, ψc, ψc_def, ψ_mul_ψc, ω_zero, ω_one, ψc_neg, map_ψc, map_ω, ω_neg — are not in this file; they live in DivisionPolynomial/Omega.lean. ω is defined through reducedInvarDenom and complEDS₂Aux, so it belongs above the reduced-invariant layer rather than beside these identities. Every input ω_spec consumes exists by name — the source's chain redInvar_normEDS ← invar₂_normEDS ← invar_normEDS ← net_normEDS has landed in full as reducedInvarNum_eq_reducedInvarDenom_mul (EllipticDivisibilitySequence/ReducedInvariant.lean) ← IsEllipticNet.invarNum_normEDS_one_mul_eq_invarDenom_mul ← invarNum_mul_invarDenom ← isEllipticNet_normEDS. Nothing in this file depends on any of it.

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 invar, C_Ψ₃_eq (here C_Ψ₃, matching Mathlib's C_Ψ₂Sq), preΨ₄_add_Ψ₂Sq_sq, preΨ₄_add_ψ₂_pow_four and φ_mul_ψ. 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.

Two adaptations, neither of them a choice:

The statement of φ_mul_ψ was checked against Mathlib's φ rather than assumed: Mathlib defines φ n = C X * ψ n ^ 2 - ψ (n + 1) * ψ (n - 1), so φ n * ψ n is C X * ψ n ^ 3 - ψ (n + 1) * ψ n * ψ (n - 1), and that subtrahend is exactly IsEllipticNet.invarDenom ψ 1 n.

noncomputable def WeierstrassCurve.invar {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) :

The polynomial 6 X² + b₂ X + b₄ of a Weierstrass curve. What ties it to the division polynomials is preΨ₄_add_Ψ₂Sq_sq below, preΨ₄ + Ψ₂Sq ^ 2 = invar * Ψ₃. The name records the classical invariant of an elliptic net, whose index-independence is not what is proved here; see the module docstring.

Equations
Instances For

    The defining formula for invar. The definition body is not exposed, so this equation lemma is how a consumer computes with it. Not @[simp]: the point of naming the polynomial is that preΨ₄_add_Ψ₂Sq_sq can be stated over it, which unfolding everywhere would defeat.

    Ψ₃ expressed through the partial derivatives of the Weierstrass polynomial.

    The identity that pins invar down: preΨ₄ + Ψ₂Sq ^ 2 = invar * Ψ₃. The certificate is the b-relation 4 * b₈ = b₂ * b₆ - b₄ ^ 2.

    The bivariate form of preΨ₄_add_Ψ₂Sq_sq. Passing to R[X][Y] costs a multiple of the Weierstrass polynomial: ψ₂ ^ 2 and C Ψ₂Sq differ by 4 * Affine.polynomial W, and the factor 8 here comes from expanding the square of that difference.

    The bivariate identity in the coordinate ring, where the multiple of the Weierstrass polynomial vanishes: consumers working modulo the curve equation read the identity in this form.

    The division polynomials meet the invariant denominator: φ n * ψ n is X ψ(n)³ less IsEllipticNet.invarDenom ψ 1 n, which is ψ(n+1) ψ(n) ψ(n-1). That denominator is a formula in an arbitrary sequence, so this is an identity between division polynomials and uses no ellipticity of ψ. It is the step through which the elliptic-net formulas reach the curve.

    @[simp]
    theorem WeierstrassCurve.map_invar {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) {S : Type u_2} [CommRing S] (f : R →+* S) :

    invar commutes with mapping the coefficients along a ring homomorphism.

    theorem WeierstrassCurve.baseChange_invar {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) {S : Type u_2} [CommRing S] [Algebra R S] {A : Type u_3} [CommRing A] [Algebra R A] [Algebra S A] [IsScalarTower R S A] {B : Type u_4} [CommRing B] [Algebra R B] [Algebra S B] [IsScalarTower R S B] (g : A →ₐ[S] B) :

    invar commutes with base change along an algebra homomorphism between extensions.