Nonsingular points and the group law in projective coordinates #
Let W be a Weierstrass curve over a field F. The nonsingular projective points of W can be
endowed with an group law, which is uniquely determined by the formulae in
Mathlib/AlgebraicGeometry/EllipticCurve/Projective/Formula.lean and follows from an equivalence
with the nonsingular points W⟮F⟯ in affine coordinates.
This file defines the group law on nonsingular projective points.
Main definitions #
WeierstrassCurve.Projective.neg: the negation of a point representative.WeierstrassCurve.Projective.negMap: the negation of a point class.WeierstrassCurve.Projective.add: the addition of two point representatives.WeierstrassCurve.Projective.addMap: the addition of two point classes.WeierstrassCurve.Projective.Point: a nonsingular projective point.WeierstrassCurve.Projective.Point.neg: the negation of a nonsingular projective point.WeierstrassCurve.Projective.Point.add: the addition of two nonsingular projective points.WeierstrassCurve.Projective.Point.toAffineAddEquiv: the equivalence between the type of nonsingular projective points with the type of nonsingular pointsW⟮F⟯in affine coordinates.
Main statements #
WeierstrassCurve.Projective.nonsingular_neg: negation preserves the nonsingular condition.WeierstrassCurve.Projective.nonsingular_add: addition preserves the nonsingular condition.WeierstrassCurve.Projective.Point.instAddCommGroup: the type of nonsingular projective points forms an abelian group under addition.
Implementation notes #
Note that W(X, Y, Z) and its partial derivatives are independent of the point representative, and
the nonsingularity condition already implies (x, y, z) ≠ (0, 0, 0), so a nonsingular projective
point on W can be given by [x : y : z] and the nonsingular condition on any representative.
A nonsingular projective point representative can be converted to a nonsingular point in affine
coordinates using WeiestrassCurve.Projective.Point.toAffine, which lifts to a map on nonsingular
projective points using WeiestrassCurve.Projective.Point.toAffineLift. Conversely, a nonsingular
point in affine coordinates can be converted to a nonsingular projective point using
WeierstrassCurve.Projective.Point.fromAffine or WeierstrassCurve.Affine.Point.toProjective.
Whenever possible, all changes to documentation and naming of definitions and theorems should be
mirrored in Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian/Point.lean.
References #
[J Silverman, The Arithmetic of Elliptic Curves][silverman2009]
Tags #
elliptic curve, projective, point, group law
Negation on projective point representatives #
The negation of a projective point class on a Weierstrass curve W.
If P is a projective point representative on W, then W.negMap ⟦P⟧ is definitionally equivalent
to W.neg P.
Equations
- W'.negMap P = Quotient.map W'.neg ⋯ P
Instances For
Addition on projective point representatives #
The addition of two projective point classes on a Weierstrass curve W.
If P and Q are two projective point representatives on W, then W.addMap ⟦P⟧ ⟦Q⟧ is
definitionally equivalent to W.add P Q.
Equations
- W'.addMap P Q = Quotient.map₂ W'.add ⋯ P Q
Instances For
Nonsingular projective points #
A nonsingular projective point on a Weierstrass curve W.
- point : PointClass R
The projective point class underlying a nonsingular projective point on
W. - nonsingular : W'.NonsingularLift self.point
The nonsingular condition underlying a nonsingular projective point on
W.
Instances For
The natural map from a nonsingular point on a Weierstrass curve in affine coordinates to its corresponding nonsingular projective point.
Equations
- WeierstrassCurve.Projective.Point.fromAffine WeierstrassCurve.Affine.Point.zero = 0
- WeierstrassCurve.Projective.Point.fromAffine (WeierstrassCurve.Affine.Point.some h) = { point := ⟦![x_1, y, 1]⟧, nonsingular := ⋯ }
Instances For
Alias of WeierstrassCurve.Projective.Point.fromAffine_some_ne_zero.
The negation of a nonsingular projective point on a Weierstrass curve W.
Given a nonsingular projective point P on W, use -P instead of neg P.
Instances For
The addition of two nonsingular projective points on a Weierstrass curve W.
Given two nonsingular projective points P and Q on W, use P + Q instead of add P Q.
Instances For
Equivalence between projective and affine coordinates #
The natural map from a nonsingular projective point representative on a Weierstrass curve to its corresponding nonsingular point in affine coordinates.
Equations
- WeierstrassCurve.Projective.Point.toAffine W P = if hP : W.Nonsingular P ∧ P 2 ≠ 0 then WeierstrassCurve.Affine.Point.some ⋯ else 0
Instances For
The natural map from a nonsingular projective point on a Weierstrass curve W to its
corresponding nonsingular point in affine coordinates.
If hP is the nonsingular condition underlying a nonsingular projective point P on W, then
toAffineLift ⟨hP⟩ is definitionally equivalent to toAffine W P.
Equations
- P.toAffineLift = Quotient.lift (fun (x : Fin 3 → F) => WeierstrassCurve.Projective.Point.toAffine W x) ⋯ P.point
Instances For
The addition-preserving equivalence between the type of nonsingular projective points on a
Weierstrass curve W and the type of nonsingular points W⟮F⟯ in affine coordinates.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Maps and base changes #
An abbreviation for WeierstrassCurve.Projective.Point.fromAffine for dot notation.