Weierstrass equations and the nonsingular condition in Jacobian coordinates #
A point on the projective plane over a commutative ring R
with weights (2, 3, 1)
is an
equivalence class [x : y : z]
of triples (x, y, z) ≠ (0, 0, 0)
of elements in R
such that
(x, y, z) ∼ (x', y', z')
if there is some unit u
in Rˣ
with (x, y, z) = (u²x', u³y', uz')
.
Let W
be a Weierstrass curve over a commutative ring R
with coefficients aᵢ
. A
Jacobian point is a point on the projective plane over R
with weights (2, 3, 1)
satisfying the
(2, 3, 1)
-homogeneous Weierstrass equation W(X, Y, Z) = 0
in Jacobian coordinates, where
W(X, Y, Z) := Y² + a₁XYZ + a₃YZ³ - (X³ + a₂X²Z² + a₄XZ⁴ + a₆Z⁶)
. It is nonsingular if its
partial derivatives W_X(x, y, z)
, W_Y(x, y, z)
, and W_Z(x, y, z)
do not vanish simultaneously.
This file gives an explicit implementation of equivalence classes of triples up to scaling by
weights, and defines polynomials associated to Weierstrass equations and the nonsingular condition
in Jacobian coordinates. The group law on the actual type of nonsingular Jacobian points will be
defined in Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Point.lean
, based on the formulae for
group operations in Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Formula.lean
.
Main definitions #
WeierstrassCurve.Jacobian.PointClass
: the equivalence class of a point representative.WeierstrassCurve.Jacobian.Nonsingular
: the nonsingular condition on a point representative.WeierstrassCurve.Jacobian.NonsingularLift
: the nonsingular condition on a point class.
Main statements #
WeierstrassCurve.Jacobian.polynomial_relation
: Euler's homogeneous function theorem.
Implementation notes #
All definitions and lemmas for Weierstrass curves in Jacobian coordinates live in the namespace
WeierstrassCurve.Jacobian
to distinguish them from those in other coordinates. This is simply an
abbreviation for WeierstrassCurve
that can be converted using WeierstrassCurve.toJacobian
. This
can be converted into WeierstrassCurve.Affine
using WeierstrassCurve.Jacobian.toAffine
.
A point representative is implemented as a term P
of type Fin 3 → R
, which allows for the vector
notation ![x, y, z]
. However, P
is not syntactically equivalent to the expanded vector
![P x, P y, P z]
, so the lemmas fin3_def
and fin3_def_ext
can be used to convert between the
two forms. The equivalence of two point representatives P
and Q
is implemented as an equivalence
of orbits of the action of Rˣ
, or equivalently that there is some unit u
of R
such that
P = u • Q
. However, u • Q
is not syntactically equal to ![u² * Q x, u³ * Q y, u * Q z]
, so the
lemmas smul_fin3
and smul_fin3_ext
can be used to convert between the two forms. Files in
Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian
make extensive use of erw
to get around this.
While erw
is often an indication of a problem, in this case it is self-contained and should not
cause any issues. It would alternatively be possible to add some automation to assist here.
Whenever possible, all changes to documentation and naming of definitions and theorems should be
mirrored in Mathlib/AlgebraicGeometry/EllipticCurve/Projective/Basic.lean
.
References #
J Silverman, The Arithmetic of Elliptic Curves
Tags #
elliptic curve, Jacobian, Weierstrass equation, nonsingular
Jacobian coordinates #
An abbreviation for a Weierstrass curve in Jacobian coordinates.
Equations
Instances For
The conversion from a Weierstrass curve to Jacobian coordinates.
Equations
- W.toJacobian = W
Instances For
The conversion from a Weierstrass curve in Jacobian coordinates to affine coordinates.
Equations
Instances For
The scalar multiplication for a Jacobian point representative on a Weierstrass curve.
Equations
Instances For
The multiplicative action for a Jacobian point representative on a Weierstrass curve.
Instances For
The equivalence setoid for a Jacobian point representative on a Weierstrass curve.
Equations
Instances For
The equivalence class of a Jacobian point representative on a Weierstrass curve.
Equations
Instances For
Weierstrass equations in Jacobian coordinates #
The polynomial W(X, Y, Z) := Y² + a₁XYZ + a₃YZ³ - (X³ + a₂X²Z² + a₄XZ⁴ + a₆Z⁶)
associated to a
Weierstrass curve W
over a ring R
in Jacobian coordinates.
This is represented as a term of type MvPolynomial (Fin 3) R
, where X 0
, X 1
, and X 2
represent X
, Y
, and Z
respectively.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The proposition that a Jacobian point representative (x, y, z)
lies in a Weierstrass curve
W
.
In other words, it satisfies the (2, 3, 1)
-homogeneous Weierstrass equation W(X, Y, Z) = 0
.
Equations
- W'.Equation P = ((MvPolynomial.eval P) W'.polynomial = 0)
Instances For
The nonsingular condition in Jacobian coordinates #
The partial derivative W_X(X, Y, Z)
with respect to X
of the polynomial W(X, Y, Z)
associated to a Weierstrass curve W
in Jacobian coordinates.
Equations
- W'.polynomialX = (MvPolynomial.pderiv 0) W'.polynomial
Instances For
The partial derivative W_Y(X, Y, Z)
with respect to Y
of the polynomial W(X, Y, Z)
associated to a Weierstrass curve W
in Jacobian coordinates.
Equations
- W'.polynomialY = (MvPolynomial.pderiv 1) W'.polynomial
Instances For
The partial derivative W_Z(X, Y, Z)
with respect to Z
of the polynomial W(X, Y, Z)
associated to a Weierstrass curve W
in Jacobian coordinates.
Equations
- W'.polynomialZ = (MvPolynomial.pderiv 2) W'.polynomial
Instances For
Euler's homogeneous function theorem in Jacobian coordinates.
The proposition that a Jacobian point representative (x, y, z)
on a Weierstrass curve W
is
nonsingular.
In other words, either W_X(x, y, z) ≠ 0
, W_Y(x, y, z) ≠ 0
, or W_Z(x, y, z) ≠ 0
.
Note that this definition is only mathematically accurate for fields.
Equations
- W'.Nonsingular P = (W'.Equation P ∧ ((MvPolynomial.eval P) W'.polynomialX ≠ 0 ∨ (MvPolynomial.eval P) W'.polynomialY ≠ 0 ∨ (MvPolynomial.eval P) W'.polynomialZ ≠ 0))
Instances For
The proposition that a Jacobian point class on a Weierstrass curve W
is nonsingular.
If P
is a Jacobian point representative on W
, then W.NonsingularLift ⟦P⟧
is definitionally
equivalent to W.Nonsingular P
.
Note that this definition is only mathematically accurate for fields.
Equations
- W'.NonsingularLift P = Quotient.lift W'.Nonsingular ⋯ P