Weierstrass curves
DefinitionCoordinate map of a Weierstrass variable change#✓fully proved
For a variable change \(C = (u, r, s, t)\) over a field \(F\), with \(u \in F^\times\) and \(r, s, t \in F\), the affine coordinate map of \(C\) sends \((x, y) \in F^2\) to \((u^2 x + r,\ u^3 y + u^2 s x + t)\).
def mapAffineCoordinates (C : VariableChange F) (xy : F × F) : F × F :=
(C.u ^ 2 * xy.1 + C.r,
C.u ^ 3 * xy.2 + C.u ^ 2 * C.s * xy.1 + C.t)
DefinitionVariable changes act bijectively on affine coordinates#✓fully proved
For a variable change \(C = (u, r, s, t)\) over a field \(F\), the map \((x, y) \mapsto (u^2 x + r,\ u^3 y + u^2 s x + t)\) is a bijection \(F^2 \to F^2\), whose inverse is the corresponding map of the inverse variable change \(C^{-1}\).
def affineCoordinatesEquiv (C : VariableChange F) : F × F ≃ F × F where
toFun := mapAffineCoordinates C
invFun := mapAffineCoordinates C⁻¹
left_inv := mapAffineCoordinates_inv_apply C
right_inv := mapAffineCoordinates_apply_inv C
def mapAffineCoordinates (C : VariableChange F) (xy : F × F) : F × F :=
(C.u ^ 2 * xy.1 + C.r,
C.u ^ 3 * xy.2 + C.u ^ 2 * C.s * xy.1 + C.t)
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:31
@[simp]
theorem mapAffineCoordinates_inv_apply (C : VariableChange F) (xy : F × F) :
mapAffineCoordinates C⁻¹ (mapAffineCoordinates C xy) = xy
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:48
@[simp]
theorem mapAffineCoordinates_apply_inv (C : VariableChange F) (xy : F × F) :
mapAffineCoordinates C (mapAffineCoordinates C⁻¹ xy) = xy
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:54
Uses 1
TheoremVariable changes transform the Weierstrass equation#✓fully proved
Let \(W\) be a Weierstrass curve over a field \(F\), let \(C = (u, r, s, t)\) be a variable change and let \(C \cdot W\) be the transformed curve. A pair \((x, y) \in F^2\) satisfies the Weierstrass equation of \(C \cdot W\) if and only if \((u^2 x + r,\ u^3 y + u^2 s x + t)\) satisfies the Weierstrass equation of \(W\).
theorem equation_mapAffineCoordinates_iff (C : VariableChange F) (W : WeierstrassCurve F)
(xy : F × F) :
(C • W).toAffine.Equation xy.1 xy.2 ↔
W.toAffine.Equation (mapAffineCoordinates C xy).1
(mapAffineCoordinates C xy).2
def mapAffineCoordinates (C : VariableChange F) (xy : F × F) : F × F :=
(C.u ^ 2 * xy.1 + C.r,
C.u ^ 3 * xy.2 + C.u ^ 2 * C.s * xy.1 + C.t)
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:31
Uses 1 · Used by 1
DefinitionVariable changes biject affine solutions#✓fully proved
Let \(W\) be a Weierstrass curve over a field \(F\), let \(C = (u, r, s, t)\) be a variable change and let \(C \cdot W\) be the transformed curve. The map \((x, y) \mapsto (u^2 x + r,\ u^3 y + u^2 s x + t)\) is a bijection from the solutions \((x, y) \in F^2\) of the Weierstrass equation of \(C \cdot W\) onto the solutions in \(F^2\) of the Weierstrass equation of \(W\); its inverse is the corresponding map of \(C^{-1}\).
WeierstrassCurve.VariableChange.affineEquationEquiv · 16 lines
def affineEquationEquiv (C : VariableChange F) (W : WeierstrassCurve F) :
{xy : F × F // (C • W).toAffine.Equation xy.1 xy.2} ≃
{xy : F × F // W.toAffine.Equation xy.1 xy.2} where
toFun xy :=
⟨mapAffineCoordinates C xy.1,
(equation_mapAffineCoordinates_iff C W xy.1).mp xy.2⟩
invFun xy :=
⟨mapAffineCoordinates C⁻¹ xy.1, by
rw [equation_mapAffineCoordinates_iff]
simpa using xy.2⟩
left_inv xy := by
apply Subtype.ext
exact mapAffineCoordinates_inv_apply C xy.1
right_inv xy := by
apply Subtype.ext
exact mapAffineCoordinates_apply_inv C xy.1
def mapAffineCoordinates (C : VariableChange F) (xy : F × F) : F × F :=
(C.u ^ 2 * xy.1 + C.r,
C.u ^ 3 * xy.2 + C.u ^ 2 * C.s * xy.1 + C.t)
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:31
theorem equation_mapAffineCoordinates_iff (C : VariableChange F) (W : WeierstrassCurve F)
(xy : F × F) :
(C • W).toAffine.Equation xy.1 xy.2 ↔
W.toAffine.Equation (mapAffineCoordinates C xy).1
(mapAffineCoordinates C xy).2
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:67
Uses 2 · Used by 1
DefinitionVariable changes biject rational points#✓fully proved
Let \(W\) be an elliptic Weierstrass curve over a field \(F\), let \(C = (u, r, s, t)\) be a variable change and let \(C \cdot W\) be the transformed curve. There is a bijection from the rational points of \(C \cdot W\) to the rational points of \(W\), where in both cases the point at infinity is included; it sends the point at infinity to the point at infinity and an affine point \((x, y)\) to \((u^2 x + r,\ u^3 y + u^2 s x + t)\).
noncomputable def pointEquiv (C : VariableChange F) (W : WeierstrassCurve F)
[W.IsElliptic] :
(C • W).toAffine.Point ≃ W.toAffine.Point :=
(C • W).toAffine.pointEquiv |>.trans
((affineEquationEquiv C W).optionCongr.trans W.toAffine.pointEquiv.symm)
def affineEquationEquiv (C : VariableChange F) (W : WeierstrassCurve F) :
{xy : F × F // (C • W).toAffine.Equation xy.1 xy.2} ≃
{xy : F × F // W.toAffine.Equation xy.1 xy.2} where
toFun xy :=
⟨mapAffineCoordinates C xy.1,
(equation_mapAffineCoordinates_iff C W xy.1).mp xy.2⟩
invFun xy :=
⟨mapAffineCoordinates C⁻¹ xy.1, by
rw [equation_mapAffineCoordinates_iff]
simpa using xy.2⟩
left_inv xy := by
apply Subtype.ext
⋯
MathlibExt/AlgebraicGeometry/EllipticCurve/VariableChangePoint.lean:88
Uses 1 · Used by 1
TheoremVariable changes preserve the point count#✓fully proved
Let \(W\) be an elliptic Weierstrass curve over a finite field \(F\), let \(C\) be a variable change and let \(C \cdot W\) be the transformed curve. Then \(C \cdot W\) and \(W\) have the same number of rational points.
theorem natCard_point_eq [Finite F] (C : VariableChange F) (W : WeierstrassCurve F)
[W.IsElliptic] :
Nat.card ((C • W).toAffine.Point) = Nat.card W.toAffine.Point
Uses 1 · Used by 1
TheoremThe ideal of a point on a Weierstrass curve is nonzero#✓fully proved
The ideal generated by X - x and Y - y is nonzero.
theorem XYIdeal_ne_bot {R : Type*} [CommRing R] [Nontrivial R] {W : Affine R} (x : R)
(y : R[X]) : XYIdeal W x y ≠ ⊥
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.