Automorphisms of an elliptic curve with j ∉ {0, 1728} #
Let E be an elliptic curve over a field K. Over a field, isomorphisms of Weierstrass curves
are exactly the admissible changes of variables WeierstrassCurve.VariableChange K, acting via
•; the automorphisms of E are therefore the C : VariableChange K with C • E = E. This file
proves the classical fact (Silverman, The Arithmetic of Elliptic Curves, III.10) that if
j(E) ∉ {0, 1728} then the only automorphisms of E are ±1, uniformly in the characteristic.
Main definitions and statements #
WeierstrassCurve.eq_one_or_eq_negVariableChange_of_smul_eq: ifj(E) ∉ {0, 1728}then anyC : VariableChange KwithC • E = Eequals1ornegVariableChange E.WeierstrassCurve.eq_one_or_eq_negVariableChange_map: the same dichotomy for the image ofEunder any injective ring map, with thej-hypotheses still read onEitself.WeierstrassCurve.autGroup E: the automorphism group ofE, as the stabiliser ofEunder the action ofVariableChange K. It is anabbrev, so Mathlib'sMulAction.stabilizerAPI applies to it unchanged.WeierstrassCurve.autGroupMulEquiv: forj(E) ∉ {0, 1728}, the isomorphismautGroup E ≃* Multiplicative (ZMod 2), obtained from Mathlib'szmodMulEquivOfGeneratorwithnegVariableChange Eas the generator.
Implementation notes #
The proof is broken into pieces. j ∉ {0, 1728} is equivalent to c₄ ≠ 0 and c₆ ≠ 0
(j_eq_zero_iff and j_eq_1728_iff). From the transformation laws of c₄ and c₆
one gets u² = 1 (u_eq_one_or_eq_neg_one), which reduces everything to the case u = 1. There
r = 0 follows from the transformation laws of b₄, b₆, b₈ (r_eq_zero_of_u_eq_one), and
then s, t are read off from those of a₁, a₂, a₃, a₄
(eq_one_or_eq_negVariableChange_of_u_eq_one, where the negVariableChange value can occur only
in characteristic 2).
This is the Aut (E, O) milestone of TauCetiRoadmap/EllipticCurves/README.md §Layer 1 (in its
equation-level form over the ground field), which §Layer 5's twist classification quantifies
over: for j ∉ {0, 1728} the pointed twists are exactly the quadratic twists because this group
is {±1}.
Adapted from the FLT project (ImperialCollegeLondon/FLT,
FLT/Mathlib/AlgebraicGeometry/EllipticCurve/Aut.lean at the roadmap's pin bc2fe8ff7396,
FLT PR #1088, Apache 2.0). That file's own header reads Authors: Michael Stoll, Claude, and it
has not been touched in FLT since bc2fe8ff7396, so the pin and the working clone
(d18b563029f3, a later Mathlib bump) agree on it verbatim. Following this repository's
convention for adapted material, the upstream authorship is credited here rather than in the
copyright header.
Aut(E) = {±1} for j ∉ {0, 1728} #
Throughout, C • E = E is an automorphism of E; the nonvanishing of c₄ and c₆ encodes
j ∉ {0, 1728}.
If c₄ ≠ 0 and c₆ ≠ 0 then the only admissible changes of variables fixing E are 1
and negVariableChange E.
The classification is a statement about an integral domain, not a field: the argument is
cancellation and zero-product reasoning throughout. It is obtained here from the field case by
base change to the fraction field, where every hypothesis and conclusion transfers along the
injection — c₄, c₆ by map_c₄/map_c₆, the fixing equation by
VariableChange.map_variableChange, and the conclusion back down by
VariableChange.map_injective.
If j(E) ∉ {0, 1728} then the only admissible changes of variables fixing E are 1 and
negVariableChange E; that is, Aut(E) = {±1}.
Aut(E.map f) = {±1} when j(E) ∉ {0, 1728}: the dichotomy survives any injective change
of base ring. The hypotheses stay on E over the source ring, since j of the image is the image
of j (map_j), so an injective f carries both away from 0 and from 1728. Only the target
has to be a domain; the source needs no more than a commutative ring. Applies to a base change
through E.baseChange B = E.map (algebraMap A B).
The automorphism group #
The automorphism group of a Weierstrass curve W: the admissible changes of variables
fixing W, i.e. the stabiliser of W under the action of VariableChange R. This is an
abbrev rather than a def so that Mathlib's MulAction.stabilizer API applies to it
unchanged — in particular the simp lemma MulAction.mem_stabilizer_iff, which is the
membership normal form C ∈ W.autGroup ↔ C • W = W.
Equations
Instances For
Aut(E) ≅ ℤ/2 for j(E) ∉ {0, 1728}. The automorphism group of E is {±1}, so it is
isomorphic to Multiplicative (ZMod 2): it has exactly two elements — 1 and
negVariableChange E (eq_one_or_eq_negVariableChange_of_smul_eq), distinct by
negVariableChange_ne_one. The isomorphism sends negVariableChange E to
Multiplicative.ofAdd 1 (autGroupMulEquiv_apply_negVariableChange), its inverse sending
Multiplicative.ofAdd 1 back (autGroupMulEquiv_symm_apply_ofAdd_one).
Equations
- E.autGroupMulEquiv hj₀ hj₁₇₂₈ = (zmodMulEquivOfGenerator ⋯ ⋯).symm
Instances For
The inverse of autGroupMulEquiv sends Multiplicative.ofAdd 1 to the negation
automorphism: it is zmodMulEquivOfGenerator for that generator.
autGroupMulEquiv sends the negation automorphism to Multiplicative.ofAdd 1.