Documentation

TauCeti.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Omega

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 #

Main results #

References #

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_φ.

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

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
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.

    @[simp]
    theorem WeierstrassCurve.ψc_zero {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) :
    W.ψc 0 = 2

    ψc at 0 is 2.

    @[simp]
    theorem WeierstrassCurve.ψc_one {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) :
    W.ψc 1 = W.ψ₂

    ψc at 1 is ψ₂, matching ψ 1 * ψc 1 = ψ 2.

    @[simp]

    ψc at 2 is preΨ₄, matching ψ 2 * ψc 2 = ψ 4.

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

    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.

      theorem WeierstrassCurve.ω_spec {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) (n : ℤ) :
      2 * W.ω n + Polynomial.CC W.a₁ * W.φ n * W.ψ n + Polynomial.CC W.a₃ * W.ψ n ^ 3 = W.ψc n

      The defining identity of ω: 2 ω n + a₁ φ n ψ n + a₃ (ψ n)³ = ψc n.

      theorem WeierstrassCurve.two_mul_ω {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) (n : ℤ) :
      2 * W.ω n = W.ψc n - Polynomial.CC W.a₁ * W.φ n * W.ψ n - Polynomial.CC W.a₃ * W.ψ n ^ 3

      ω_spec solved for 2 ω n.

      theorem WeierstrassCurve.ψ_mul_ψc {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) (n : ℤ) :
      W.ψ n * W.ψc n = W.ψ (2 * n)

      ψ n * ψc n = ψ (2n): the complement identity ψc is named for.

      @[simp]
      theorem WeierstrassCurve.ω_zero {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) :
      W.ω 0 = 1

      ω at 0 is 1, matching ψ 0 = 0 and φ 0 = 1.

      @[simp]

      ω at 1 is Y, matching ψ 1 = 1 and φ 1 = X: the point 1 • (X, Y) is (X, Y) itself.

      @[simp]
      theorem WeierstrassCurve.ψc_neg {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) (n : ℤ) :
      W.ψc (-n) = W.ψc n

      ψc is an even family.

      @[simp]
      theorem WeierstrassCurve.map_ψc {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] (W : WeierstrassCurve R) (f : R →+* S) (n : ℤ) :

      ψc is natural in the coefficient ring.

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

      ω is natural in the coefficient ring.

      @[simp]
      theorem WeierstrassCurve.ω_neg {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) (n : ℤ) :
      W.ω (-n) = W.ω n + Polynomial.CC W.a₁ * W.φ n * W.ψ n + Polynomial.CC W.a₃ * W.ψ n ^ 3

      The parity rule for ω, @[simp] like its ψ/φ/ψc counterparts: without it the negative index has no elimination route at all.

      theorem WeierstrassCurve.baseChange_ψc {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) {S : Type u_3} [CommRing S] [Algebra R S] {A : Type u_4} [CommRing A] [Algebra R A] [Algebra S A] [IsScalarTower R S A] {B : Type u_5} [CommRing B] [Algebra R B] [Algebra S B] [IsScalarTower R S B] (f : A →ₐ[S] B) (n : ℤ) :

      ψc commutes with base change across an algebra homomorphism, in the form of Mathlib's baseChange_ψ.

      theorem WeierstrassCurve.baseChange_ω {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) {S : Type u_3} [CommRing S] [Algebra R S] {A : Type u_4} [CommRing A] [Algebra R A] [Algebra S A] [IsScalarTower R S A] {B : Type u_5} [CommRing B] [Algebra R B] [Algebra S B] [IsScalarTower R S B] (f : A →ₐ[S] B) (n : ℤ) :

      ω commutes with base change across an algebra homomorphism, in the form of Mathlib's baseChange_φ.