Complements on Weierstrass curves #
Facts about the invariants of an elliptic curve, complementing
Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean:
WeierstrassCurve.a₁_ne_zero_or_a₃_ne_zero_of_Δ_ne_zero_of_two_eq_zero: where2 = 0, a curve withΔ ≠ 0hasa₁ ≠ 0ora₃ ≠ 0;WeierstrassCurve.Δ_eq_of_c₄_eq_of_c₆_eq: two equations with the samec-invariants have the same discriminant, wherever1728is a regular element, byWeierstrassCurve.c_relation;WeierstrassCurve.j_eq_1728_iff:j = 1728 ↔ c₆ = 0, the analogue forj = 1728of Mathlib'sWeierstrassCurve.j_eq_zero_iff(j = 0 ↔ c₄ = 0), together with its unreduced companionWeierstrassCurve.j_eq_1728_iff'mirroringWeierstrassCurve.j_eq_zero_iff';WeierstrassCurve.baseChange_c₄_ne_zeroandWeierstrassCurve.baseChange_c₆_ne_zero: the two corollaries of those criteria that sayj ≠ 0andj ≠ 1728survive base change along an injection, in thec₄/c₆form the automorphism criterion consumes.WeierstrassCurve.cusp: the cusp curveY² = X³, its coefficient projections, and the point(1, 1)on it (WeierstrassCurve.equation_cusp_one_one). It depends on nothing beyond a Weierstrass equation, and is the specialization targetTauCeti/AlgebraicGeometry/EllipticCurve/Universal.leanuses to retract the universal ring ontoℤ.
All are stated over a commutative ring, matching the generality of the Mathlib results they
complement. The first two are consumed by the automorphism-group development in
TauCeti/AlgebraicGeometry/EllipticCurve/Aut.lean, the Aut (E, O) milestone of
TauCetiRoadmap/EllipticCurves/README.md §Layer 1; the base-change pair is consumed by the
twist classification in TauCeti/AlgebraicGeometry/EllipticCurve/QuadraticTwist/Basic.lean, which
needs Aut(Eᴸ) = {±1} after base change to a splitting field.
Adapted from the FLT project (ImperialCollegeLondon/FLT,
FLT/Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean at the roadmap's pin
bc2fe8ff7396 (FLT PR #1088), Apache 2.0, by Kevin Buzzard and Claude). Every result here
except the cusp curve is adapted from that file, and all are generalised from FLT's
field-level statements to a commutative ring: the two j-criteria, and the base-change pair
baseChange_c₄_ne_zero /
baseChange_c₆_ne_zero, which FLT states only for a field extension. The cusp curve is not
from FLT: it came with the universal-curve port and is placed here because it needs no universal
machinery.
Where 2 = 0, a curve with nonzero discriminant has a₁ ≠ 0 or a₃ ≠ 0: otherwise
a₁ = a₃ = 0 makes the partial derivative ∂/∂y = 2y + a₁x + a₃ vanish identically, so
Δ = 0.
The discriminant is determined by the c-invariants, wherever 1728 can be cancelled:
WeierstrassCurve.c_relation pins 1728 * Δ down to c₄³ - c₆².
j(E) = 1728 if and only if c₆(E)² = 0, by the relation 1728·Δ = c₄³ - c₆². This is the
analogue for j = 1728 of WeierstrassCurve.j_eq_zero_iff' (j = 0 ↔ c₄³ = 0).
j(E) = 1728 if and only if c₆(E) = 0, by the relation 1728·Δ = c₄³ - c₆². This is the
analogue for j = 1728 of WeierstrassCurve.j_eq_zero_iff (j = 0 ↔ c₄ = 0).
c₄ ≠ 0 survives base change along an injection, since c₄ of the base change is the
image of c₄. Stated on c₄ rather than on j: nothing here needs [IsReduced R] or the
j-criterion — nor even that E be elliptic — and a caller with j ≠ 0 gets the hypothesis from
j_eq_zero_iff.
c₆ ≠ 0 survives base change along an injection. The companion of
baseChange_c₄_ne_zero; a caller with j ≠ 1728 gets the hypothesis from j_eq_1728_iff.
The cusp curve #
The cusp curve Y² = X³ over a commutative ring R.
Equations
- WeierstrassCurve.cusp R = { a₁ := 0, a₂ := 0, a₃ := 0, a₄ := 0, a₆ := 0 }
Instances For
(1, 1) lies on the cusp curve Y² = X³, over any commutative ring.
The case R = ℤ is the one the universal curve uses: specializing along that point is the cheap
route to nonvanishing statements, since ψₙ(1,1) = n, so a universal quantity that vanished would
have to vanish in ℤ. The CharZero Universal.Ring instance in
TauCeti/AlgebraicGeometry/EllipticCurve/Universal.lean is obtained that way.