Definitions/Def_WeierstrassCurve_VariableChangePointEquiv.lean
Point bijection induced by a Weierstrass variable change
Let K be a field, W an affine Weierstrass curve over K with coefficients a_1,a_2,a_3,a_4,a_6, and C=(u,r,s,t) a variable change over K (so u \in K^\times), acting on Weierstrass curves by Mathlib's scalar action C \bullet W. The module first defines the four coordinate formulas \mathtt{vcX}\,C\,x' = u^2 x' + r, \mathtt{vcY}\,C\,x'\,y' = u^3 y' + u^2 s x' + t and their inverses \mathtt{vcXInv}\,C\,x = u^{-2}(x-r), \mathtt{vcYInv}\,C\,x\,y = u^{-3}\bigl(y - t - s(x-r)\bigr), together with the four lemmas saying that the two pairs are mutually inverse on K \times K.
The transport statements rest on three polynomial identities: substituting (\mathtt{vcX}, \mathtt{vcY}) into the Weierstrass polynomial of W multiplies the Weierstrass polynomial of C \bullet W by u^6; the combination of the x-partial of W with s times the y-partial scales by u^4 to the x-partial of C \bullet W; and the y-partial scales by u^3. Since these powers of u are nonzero, one obtains equation_variableChange_iff: (x',y') satisfies the Weierstrass equation of C \bullet W exactly when (\mathtt{vcX}\,C\,x', \mathtt{vcY}\,C\,x'\,y') satisfies that of W; and nonsingular_variableChange_iff, the same equivalence for Mathlib's Nonsingular predicate (equation together with non-vanishing of at least one partial derivative).
From these, the maps Point.vcFun and Point.vcInvFun send the point at infinity to the point at infinity and act on affine points by the coordinate formulas; they are mutually inverse, giving Point.variableChangeEquiv : (C \bullet W).toAffine.Point ≃ W.Point. Finally Point.equivOfVariableChangeEq records the same bijection V(K) \simeq W(K) whenever C \bullet W = V for some Weierstrass curve V. Both are bijections of sets only; no compatibility with the group laws is asserted.
Relation to Mathlib
Built entirely on Mathlib's WeierstrassCurve.VariableChange, its action on Weierstrass curves, and WeierstrassCurve.Affine.Point with its Equation/Nonsingular predicates; it supplies the explicit substitution formulas and the resulting bijection of point sets, stopping short of an additive isomorphism.
Where it is used
The bijection is what makes point counts on a Weierstrass curve depend only on its isomorphism class of models, and hence makes the traces of Frobenius a_q attached to an elliptic curve independent of the chosen Weierstrass presentation; this invariance is used throughout the passage from Frey curves to their Galois representations.
References
- J. H. Silverman, The Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 106, Springer, 1986, Ch. III §1
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 161 lines
- 25 declarations
- used in the statements of 90 theorems and imported by 165 proofs
- imports 0 definition modules
Source file: Definitions/Def_WeierstrassCurve_VariableChangePointEquiv.lean
Imports
- only Mathlib
Declarations
- def
WeierstrassCurve.Affine.vcX - def
WeierstrassCurve.Affine.vcY - def
WeierstrassCurve.Affine.vcXInv - def
WeierstrassCurve.Affine.vcYInv - lemma
WeierstrassCurve.Affine.u_ne_zero - lemma
WeierstrassCurve.Affine.u_pow_ne_zero - lemma
WeierstrassCurve.Affine.vcX_vcXInv - lemma
WeierstrassCurve.Affine.vcY_vcYInv - lemma
WeierstrassCurve.Affine.vcXInv_vcX - lemma
WeierstrassCurve.Affine.vcYInv_vcY - lemma
WeierstrassCurve.Affine.equation_aux - lemma
WeierstrassCurve.Affine.partialX_aux - lemma
WeierstrassCurve.Affine.partialY_aux - lemma
WeierstrassCurve.Affine.equation_variableChange_iff - lemma
WeierstrassCurve.Affine.partials_zero_iff - lemma
WeierstrassCurve.Affine.nonsingular_variableChange_iff - def
WeierstrassCurve.Affine.Point.vcFun - def
WeierstrassCurve.Affine.Point.vcInvFun - lemma
WeierstrassCurve.Affine.Point.vcFun_zero - lemma
WeierstrassCurve.Affine.Point.vcInvFun_zero - lemma
WeierstrassCurve.Affine.Point.some_eq_some - lemma
WeierstrassCurve.Affine.Point.vcFun_leftInverse - lemma
WeierstrassCurve.Affine.Point.vcFun_rightInverse - def
WeierstrassCurve.Affine.Point.variableChangeEquiv - def
WeierstrassCurve.Affine.Point.equivOfVariableChangeEq
Source
import Mathlib.AlgebraicGeometry.EllipticCurve.Affine.Point ↗ import Mathlib.AlgebraicGeometry.EllipticCurve.VariableChange ↗ set_option autoImplicit false namespace WeierstrassCurve.Affine variable {K : Type*} [Field K] section Formulas variable (C : VariableChange K) (W : WeierstrassCurve.Affine K) def vcX (x' : K) : K := (C.u : K) ^ 2 * x' + C.r def vcY (x' y' : K) : K := (C.u : K) ^ 3 * y' + (C.u : K) ^ 2 * C.s * x' + C.t def vcXInv (x : K) : K := ((C.u⁻¹ : Kˣ) : K) ^ 2 * (x - C.r) def vcYInv (x y : K) : K := ((C.u⁻¹ : Kˣ) : K) ^ 3 * (y - C.t - C.s * (x - C.r)) variable {C W} private lemma u_ne_zero : (C.u : K) ≠ 0 := C.u.ne_zero private lemma u_pow_ne_zero (n : ℕ) : ((C.u : K)) ^ n ≠ 0 := pow_ne_zero n C.u.ne_zero @[simp] lemma vcX_vcXInv (x : K) : vcX C (vcXInv C x) = x := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcX, vcXInv, Units.val_inv_eq_inv_val]; field_simp; ring @[simp] lemma vcY_vcYInv (x y : K) : vcY C (vcXInv C x) (vcYInv C x y) = y := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcY, vcXInv, vcYInv, Units.val_inv_eq_inv_val]; field_simp; ring @[simp] lemma vcXInv_vcX (x' : K) : vcXInv C (vcX C x') = x' := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcX, vcXInv, Units.val_inv_eq_inv_val]; field_simp; ring @[simp] lemma vcYInv_vcY (x' y' : K) : vcYInv C (vcX C x') (vcY C x' y') = y' := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcX, vcY, vcYInv, Units.val_inv_eq_inv_val]; field_simp; ring private lemma equation_aux (x' y' : K) : vcY C x' y' ^ 2 + W.a₁ * vcX C x' * vcY C x' y' + W.a₃ * vcY C x' y' - (vcX C x' ^ 3 + W.a₂ * vcX C x' ^ 2 + W.a₄ * vcX C x' + W.a₆) = (C.u : K) ^ 6 * (y' ^ 2 + (C • W).a₁ * x' * y' + (C • W).a₃ * y' - (x' ^ 3 + (C • W).a₂ * x' ^ 2 + (C • W).a₄ * x' + (C • W).a₆)) := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcX, vcY, variableChange_a₁, variableChange_a₂, variableChange_a₃, variableChange_a₄, variableChange_a₆, Units.val_inv_eq_inv_val] field_simp; ring private lemma partialX_aux (x' y' : K) : W.a₁ * vcY C x' y' - (3 * vcX C x' ^ 2 + 2 * W.a₂ * vcX C x' + W.a₄) + C.s * (2 * vcY C x' y' + W.a₁ * vcX C x' + W.a₃) = (C.u : K) ^ 4 * ((C • W).a₁ * y' - (3 * x' ^ 2 + 2 * (C • W).a₂ * x' + (C • W).a₄)) := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcX, vcY, variableChange_a₁, variableChange_a₂, variableChange_a₄, Units.val_inv_eq_inv_val] field_simp; ring private lemma partialY_aux (x' y' : K) : 2 * vcY C x' y' + W.a₁ * vcX C x' + W.a₃ = (C.u : K) ^ 3 * (2 * y' + (C • W).a₁ * x' + (C • W).a₃) := by have hu : (C.u : K) ≠ 0 := u_ne_zero simp only [vcX, vcY, variableChange_a₁, variableChange_a₃, Units.val_inv_eq_inv_val] field_simp; ring lemma equation_variableChange_iff (x' y' : K) : (C • W).toAffine.Equation x' y' ↔ W.Equation (vcX C x') (vcY C x' y') := by rw [equation_iff', equation_iff', equation_aux x' y', mul_eq_zero, or_iff_right (u_pow_ne_zero 6)] private lemma partials_zero_iff (x' y' : K) : ((C • W).a₁ * y' - (3 * x' ^ 2 + 2 * (C • W).a₂ * x' + (C • W).a₄) = 0 ∧ 2 * y' + (C • W).a₁ * x' + (C • W).a₃ = 0) ↔ (W.a₁ * vcY C x' y' - (3 * vcX C x' ^ 2 + 2 * W.a₂ * vcX C x' + W.a₄) = 0 ∧ 2 * vcY C x' y' + W.a₁ * vcX C x' + W.a₃ = 0) := by constructor · rintro ⟨hX', hY'⟩ have hY : 2 * vcY C x' y' + W.a₁ * vcX C x' + W.a₃ = 0 := by rw [partialY_aux x' y', hY', mul_zero] refine ⟨?_, hY⟩ have hX := partialX_aux (C := C) (W := W) x' y' rw [hX', mul_zero, hY, mul_zero, add_zero] at hX exact hX · rintro ⟨hX, hY⟩ have hY' : 2 * y' + (C • W).a₁ * x' + (C • W).a₃ = 0 := by have h := partialY_aux (C := C) (W := W) x' y' rw [hY] at h exact (mul_eq_zero.mp h.symm).resolve_left (u_pow_ne_zero 3) refine ⟨?_, hY'⟩ have h := partialX_aux (C := C) (W := W) x' y' rw [hX, hY, mul_zero, add_zero] at h exact (mul_eq_zero.mp h.symm).resolve_left (u_pow_ne_zero 4) lemma nonsingular_variableChange_iff (x' y' : K) : (C • W).toAffine.Nonsingular x' y' ↔ W.Nonsingular (vcX C x') (vcY C x' y') := by rw [nonsingular_iff', nonsingular_iff', equation_variableChange_iff x' y'] refine and_congr_right fun _ => not_iff_not.mp ?_ push_neg exact partials_zero_iff x' y' end Formulas section PointEquiv variable [DecidableEq K] (C : VariableChange K) (W : WeierstrassCurve.Affine K) namespace Point def vcFun : (C • W).toAffine.Point → W.Point | 0 => 0 | .some x' y' h => .some (vcX C x') (vcY C x' y') ((nonsingular_variableChange_iff x' y').mp h) def vcInvFun : W.Point → (C • W).toAffine.Point | 0 => 0 | .some x y h => .some (vcXInv C x) (vcYInv C x y) ((nonsingular_variableChange_iff (vcXInv C x) (vcYInv C x y)).mpr (by rwa [vcX_vcXInv, vcY_vcYInv])) variable {C W} @[simp] lemma vcFun_zero : vcFun C W 0 = 0 := rfl @[simp] lemma vcInvFun_zero : vcInvFun C W 0 = 0 := rfl private lemma some_eq_some {W' : WeierstrassCurve.Affine K} {x₁ y₁ x₂ y₂ : K} (hx : x₁ = x₂) (hy : y₁ = y₂) {h₁ : W'.Nonsingular x₁ y₁} {h₂ : W'.Nonsingular x₂ y₂} : Point.some x₁ y₁ h₁ = Point.some x₂ y₂ h₂ := by subst hx hy; rfl lemma vcFun_leftInverse : Function.LeftInverse (vcInvFun C W) (vcFun C W) := by rintro (_ | ⟨x', y', h⟩) · rfl · simp only [vcFun, vcInvFun] exact some_eq_some (vcXInv_vcX x') (vcYInv_vcY x' y') lemma vcFun_rightInverse : Function.RightInverse (vcInvFun C W) (vcFun C W) := by rintro (_ | ⟨x, y, h⟩) · rfl · simp only [vcFun, vcInvFun] exact some_eq_some (vcX_vcXInv x) (vcY_vcYInv x y) variable (C W) in noncomputable def variableChangeEquiv : (C • W).toAffine.Point ≃ W.Point := ⟨vcFun C W, vcInvFun C W, vcFun_leftInverse, vcFun_rightInverse⟩ noncomputable def equivOfVariableChangeEq {V : WeierstrassCurve.Affine K} (h : C • W = V) : V.Point ≃ W.Point := by subst h; exact variableChangeEquiv C W end Point end PointEquiv end WeierstrassCurve.Affine
Statements phrased using this module (90)
- Additivity of the variable-change map on points
WeierstrassCurve.Affine.Point.vcInvFun_add0 below · depth 12 - Cyclic N-subgroups of y²=x³+B stable under [ω]
WeierstrassCurve.natCard_isAddCyclic_addSubgroup_card_eq_fixed_vcInvFun_eq_nuThree14 below · depth 12 - Cyclic N-subgroups of y²=x³+Ax stable under [i]
WeierstrassCurve.natCard_isAddCyclic_addSubgroup_card_eq_fixed_vcInvFun_eq_nuTwo12 below · depth 12 - [ω] acts non-scalarly on p-torsion of y²=x³+B
WeierstrassCurve.exists_addOrderOf_eq_and_vcInvFun_ne_nsmul_of_pow_three_eq_one8 below · depth 13 - Non-scalar action of [i] on p-torsion of y²=x³+Ax
WeierstrassCurve.exists_addOrderOf_eq_and_vcInvFun_ne_nsmul_of_sq_eq_neg_one8 below · depth 13 - Places over j=j₀ as cyclic N-subgroups of E₀
ModularCurve.exists_orbitMap_cyclicAddSubgroup_places_modularFunctionFieldFullC332 below · depth 14 - Sign-twisted point isomorphism W(ℚ̄ₚ)≅ E_{q_T}(ℚ̄ₚ)
WeierstrassCurve.exists_addEquiv_point_tateCurve_signTwist_of_variableChange_galois_signBehavior1 below · depth 14 - Fibres of an orbit map on cyclic N-subgroups divide the j-width
WeierstrassCurve.natCard_fibre_dvd_jWidth_of_variableChange_orbitMap8 below · depth 14 - Equivariant reduction of ofJ(t) at a place over j₀
ModularCurve.exists_equivariant_torsion_reduction_ofJ45 below · depth 15 - Automorphisms of y² = x³ - x in characteristic 3
WeierstrassCurve.exists_addMonoidHom_i_tau_vcInvFun_of_char_three1 below · depth 15 - [ω]-stable cyclic N-subgroups of y²+y=x³ in characteristic 2
WeierstrassCurve.natCard_isAddCyclic_addSubgroup_card_eq_fixed_vcInvFun_eq_nuThree_of_char_two6 below · depth 15 - Cyclic N-subgroups of y²=x³+B stable under [ω]
WeierstrassCurve.natCard_isAddCyclic_addSubgroup_card_eq_fixed_vcInvFun_eq_nuThree_of_ne_zero12 below · depth 15 - Counting [i]-stable cyclic N-subgroups of y²+y=x³ in characteristic 2
WeierstrassCurve.natCard_isAddCyclic_addSubgroup_card_eq_fixed_vcInvFun_eq_nuTwo_of_char_two6 below · depth 15 - Cyclic N-subgroups of y²=x³+Ax stable under [i]
WeierstrassCurve.natCard_isAddCyclic_addSubgroup_card_eq_fixed_vcInvFun_eq_nuTwo_of_ne_zero10 below · depth 15 - Frobenius-semilinear level-N model of the generic elliptic curve
ModularCurve.exists_frobeniusSemilinear_torsionModel_ofJ_univ312 below · depth 16 - Places of X₀(M), X₀(Ms) and the two degeneracy laws
ModularCurve.exists_orbitMap_cyclicAddSubgroup_places_restrictAlong_heckeAlphaC_heckeBetaC_eq437 below · depth 16 - A variable change is determined by its map on points
WeierstrassCurve.Affine.variableChange_eq_of_forall_equivOfVariableChangeEq_eq0 below · depth 16 - Inertia-equivariant good reduction of a Weierstrass model
WeierstrassCurve.exists_inertia_equivariant_reduction_of_variableChange_eq_map1 below · depth 16 - Endomorphism with β²-sβ+2=0 is Vélu's 2-isogeny
WeierstrassCurve.exists_variableChange_smul_eq_veluQuotient2_forall_apply_eq_of_comp_self_add_two_smul_eq_smul38 below · depth 16 - Deuring's first step: β equals Vélu's quotient map up to coordinate change
WeierstrassCurve.exists_variableChange_smul_eq_veluQuotient_forall_apply_eq_of_comp_self_add_smul_eq_smul88 below · depth 16 - Even-order Vélu quotient factors through an order-two step
WeierstrassCurve.fullKernelHom_eq_veluPointMap2_comp_of_stage_last79 below · depth 16 - Orbit map on X₀(N): j_N-values and dual ramification
ModularCurve.exists_orbitMap_cyclicAddSubgroup_places_evalAt_jqNModC_eq_and_ord_sub_eq_natCard397 below · depth 17 - Fibres and ramification of j at moduli places of X₀(N)
ModularCurve.moduliPlace_orbitClauses394 below · depth 17 - Vélu's double full-kernel quotient is multiplication by N
WeierstrassCurve.exists_variableChange_eq_fullKernelQuotient_fullKernelQuotient_comp_eq_smul122 below · depth 17 - Invertible rational homomorphisms arise from variable changes
WeierstrassCurve.exists_variableChange_forall_eq_equivOfVariableChangeEq_of_comp_eq_id2 below · depth 17 - Universality of the ℓ-isogeny quotient with level structure
WeierstrassCurve.exists_variableChange_heq_vcInvFun_iff_exists_dualPair14 below · depth 17 - Equinumerous variable-change stabilisers along a Vélu cyclic isogeny
WeierstrassCurve.natCard_variableChange_stabilizer_eq_of_fullKernelQuotient124 below · depth 17 - Equivariant torsion reduction: j of the Vélu quotient and ramification
ModularCurve.exists_equivariant_torsion_reduction_ofJ_evalAt_fullKernelQuotient_j_ord_mul_natCard389 below · depth 18 - Equivariant reduction of torsion for the generic curve over the j-line
ModularCurve.exists_equivariant_torsion_reduction_ofJ_forall_place_reduceHom45 below · depth 18 - Isomorphism of function fields matching 𝒪 is a variable change
WeierstrassCurve.Affine.exists_variableChange_forall_restrictAlong_placeOfPoint_eq_of_algEquiv10 below · depth 18 - Invariance of the cyclic quotient j-invariant under coordinate change
WeierstrassCurve.cyclicQuotientJ_variableChange_eq1 below · depth 18 - Lifting a variable change of the reduced model
WeierstrassCurve.exists_map_residue_eq_and_reduceHom_comp_eq_of_variableChange_smul_eq0 below · depth 18 - Variable change as mutually inverse rational homomorphisms
WeierstrassCurve.exists_mem_rationalHomSet_apply_eq_equivOfVariableChangeEq1 below · depth 18 - Double Vélu 2-quotient composes to multiplication by 2
WeierstrassCurve.exists_variableChange_eq_veluQuotient2_veluQuotient2_comp_eq_two_smul1 below · depth 18 - Dual of a Vélu 2-isogeny: double quotient equals doubling
WeierstrassCurve.exists_variableChange_eq_veluQuotient2_veluQuotient2_comp_eq_two_smul_of_two_ne_zero1 below · depth 18 - Deuring's lifting theorem for curves with an endomorphism
WeierstrassCurve.exists_variableChange_smul_eq_and_reduceHom_comp_eq_comp_reduceHom_of_mem_rationalHomSet313 below · depth 18 - Covariance of Vélu's full-kernel quotient under coordinate changes
WeierstrassCurve.fullKernelQuotient_variableChange_vcInvFun1 below · depth 18 - Vélu's isogeny commutes with a change of Weierstrass coordinates
WeierstrassCurve.heq_fullKernelHom_vcInvFun2 below · depth 18 - Ramification of X₀(N) over the j-line, intrinsic form
ModularCurve.ord_mul_natCard_stabilizer_zmultiples_reduceHom_eq_ramificationIndexAlong_mul_natCard_stabilizer320 below · depth 19 - Ramification over the j(q^N)-line for a good model
ModularCurve.ord_sub_mul_natCard_stabilizer_zmultiples_reduceHom_eq_ramificationIndexAlong_mul_natCard_stabilizer_fullKernelQuotient386 below · depth 19 - Inertia-equivariant reduction map on a good integral model
WeierstrassCurve.exists_inertia_equivariant_reduceHom_of_variableChange_eq_map1 below · depth 19 - Variable changes between good-reduction Weierstrass models are integral
WeierstrassCurve.exists_variableChange_map_eq_and_reduceHom_vcFun_eq0 below · depth 19 - Deuring lifting for an endomorphism with order maximal at p
WeierstrassCurve.exists_variableChange_smul_eq_and_reduceHom_comp_eq_comp_reduceHom_of_comp_self_add_smul_eq_smul311 below · depth 19 - Vélu μ₂-quotient of the Tate curve: E_{q^m}/⟨ T⟩≅ E_q^{2m}
ModularCurve.exists_variableChange_veluQuotient2_tateLaurent_eq_and_vcXInv_velu2X_toricPoint_eq_of_isPrimitiveRoot49 below · depth 20 - Vélu quotient of the Tate curve by μ_ℓ
ModularCurve.exists_variableChange_veluQuotient_tateLaurent_eq_and_vcXInv_veluX_toricPoint_eq_of_isPrimitiveRoot53 below · depth 20 - Igusa ramification formula via equivariant torsion reduction
ModularCurve.ord_mul_natCard_stabilizer_eq_ramificationIndexAlong_mul_of_equivariant_torsion_reduction302 below · depth 20 - Deuring lifting over the Witt disc
WeierstrassCurve.exists_valuationSubring_residueField_equiv_and_reduceHom_comp_eq_of_isAlgClosed_of_comp_self_add_smul_eq_smul246 below · depth 20 - Algebraisation over ℚ̄ of a lifted endomorphism
WeierstrassCurve.exists_valuationSubring_variableChange_smul_eq_and_ratPointHom_reduceHom_comp_eq_of_isAlgebraic_j8 below · depth 20 - Halving a lift of an endomorphism at a place above 2
WeierstrassCurve.exists_variableChange_smul_eq_and_reduceHom_comp_eq_of_exists_reduceHom_comp_eq_two_smul_of_charP_two156 below · depth 20 - Stabiliser orders agree for a cyclic subgroup and its Vélu dual
WeierstrassCurve.natCard_stabilizer_zmultiples_eq_natCard_stabilizer_zmultiples_fullKernelQuotient127 below · depth 20 - Places over j₀ on X_H(M) as ± H-orbits of M-torsion
ModularCurve.exists_orbitMap_torsionOrbit_places_qExpFunctionFieldC_gammaH576 below · depth 21 - Order-four automorphism on the M-torsion when j=1728
WeierstrassCurve.exists_j_eq_1728_torsion_basis_heq_vcInvFun_of_order_four10 below · depth 21 - An order-three automorphism acting regularly on E₀[M]
WeierstrassCurve.exists_j_eq_zero_torsion_basis_heq_vcInvFun_of_order_three14 below · depth 21 - Removing a Frobenius twist from a lifting statement at a place
WeierstrassCurve.exists_reduceHom_comp_eq_of_exists_reduceHom_comp_eq_map_iterateFrobenius4 below · depth 21 - Rational endomorphism subring is invariant under variable change
WeierstrassCurve.exists_ringEquiv_rationalEndSubring_apply_eq_of_variableChange_smul_eq0 below · depth 21 - Deuring lifting in residue characteristic two, three-torsion form
WeierstrassCurve.exists_valuationSubring_lift_variableChange_veluQuotient_reduceHom_eq_of_three_smul_mem_zmultiples_of_two_eq_zero207 below · depth 21 - Deuring lift compatible with Vélu quotient on two-torsion test points
WeierstrassCurve.exists_valuationSubring_lift_variableChange_veluQuotient_reduceHom_eq_of_two_smul_mem_zmultiples203 below · depth 21 - Level Γ_H(M) structures on y²+y=x³ in characteristic two
WeierstrassCurve.natCard_torsionOrbit_and_exists_surjective_doubleCoset_of_char_two8 below · depth 21 - Vélu's μ₂-isogeny sends toric point c to c²
ModularCurve.vcXInv_velu2X_and_vcYInv_velu2Y_toricPoint_tateLaurent_map_qExpand_eq_toricPoint_sq13 below · depth 22 - Vélu's μ_ℓ-isogeny sends toric point c to c^ℓ
ModularCurve.vcXInv_veluX_and_vcYInv_veluY_toricPoint_tateLaurent_map_qExpand_eq_toricPoint_pow10 below · depth 22 - Automorphisms [ω], [i] of y²+y=x³ in characteristic two
WeierstrassCurve.exists_addMonoidHom_vcInvFun_pow_heq_and_forall_exists_ne_smul_of_char_two4 below · depth 22 - Deuring lift with level-three marking and Vélu quotient
WeierstrassCurve.exists_valuationSubring_lift_variableChange_veluQuotient_apply_threeTorsion_eq_of_smul_eq_veluQuotient191 below · depth 22 - Deuring lift marked by a cyclic subgroup and two 2-torsion points
WeierstrassCurve.exists_valuationSubring_lift_variableChange_veluQuotient_apply_twoTorsion_eq_of_smul_eq_veluQuotient188 below · depth 22 - Deuring's marked deformation over a formal disc, level three
WeierstrassCurve.exists_powerSeries_deformation_kohelQuotient_threeTorsion_levelThreeModulus_of_smul_eq_veluQuotient187 below · depth 23 - Marked lift with Legendre cross vanishing only at T=0
WeierstrassCurve.exists_powerSeries_deformation_kohelQuotient_twoTorsion_legendreCross_of_smul_eq_veluQuotient185 below · depth 23 - Canonical Deuring normal form at a three-torsion point
WeierstrassCurve.exists_variableChange_eq_deuringCurve_of_three_smul_eq_zero0 below · depth 23 - Legendre modulus determines a curve with ordered 2-torsion pair
WeierstrassCurve.exists_variableChange_of_legendreLambda_eq0 below · depth 23 - Level-three modulus determines a marked curve up to isomorphism
WeierstrassCurve.exists_variableChange_of_levelThreeModulus_eq0 below · depth 23 - Size of the automorphism orbit of a ± point of order M
WeierstrassCurve.natCard_torsionOrbit_bot_variableChange_eq_jWidthChar16 below · depth 24 - Composition law for point transport along variable changes
WeierstrassCurve.Affine.Point.vcInvFun_mul_heq0 below · depth 25 - The identity variable change transports each point to itself
WeierstrassCurve.Affine.Point.vcInvFun_one_heq0 below · depth 25 - Rigidity of ± P level structures for M ≥ 4
WeierstrassCurve.natCard_stabilizer_torsionOrbit_bot_eq_two5 below · depth 25 - A model automorphism ≠ ± 1 fixes at most three points
WeierstrassCurve.card_le_three_of_forall_heq_vcInvFun0 below · depth 26 - Diamond-equivariant modular description of a fibre of j
ModularCurve.exists_orbitMap_torsionOrbit_places_qExpFunctionFieldC_gammaH_smul_eq576 below · depth 29 - Trace relation for the scalar by which an automorphism acts on an M-torsion point
WeierstrassCurve.exists_trace_of_equivOfVariableChangeEq_symm_apply_eq_val_smul24 below · depth 29 - Automorphisms of an elliptic curve satisfy a quadratic relation on points
WeierstrassCurve.exists_int_transport_comp_sub_smul_add_eq_zero22 below · depth 30 - Quadratic relation on points for automorphisms with j=1728
WeierstrassCurve.exists_int_transport_comp_sub_smul_add_eq_zero_of_j_eq_1728_of_two_ne_zero4 below · depth 31 - Quadratic relation on points for automorphisms of j=0 in characteristic 3
WeierstrassCurve.exists_int_transport_comp_sub_smul_add_eq_zero_of_j_eq_zero_of_charP_three5 below · depth 31 - Automorphisms of the j=0 curve in characteristic 2 satisfy a quadratic
WeierstrassCurve.exists_int_transport_comp_sub_smul_add_eq_zero_of_j_eq_zero_of_charP_two9 below · depth 31 - Quadratic relation on points for automorphisms with j=0
WeierstrassCurve.exists_int_transport_comp_sub_smul_add_eq_zero_of_j_eq_zero_of_two_ne_zero4 below · depth 31 - Automorphisms of a Weierstrass model with two-element stabiliser act as pmid
WeierstrassCurve.exists_int_transport_comp_sub_smul_add_eq_zero_of_natCard_stabilizer_eq_two2 below · depth 31 - Point transport intertwines an automorphism with its conjugate
WeierstrassCurve.equivOfVariableChangeEq_symm_conj_vcInvFun1 below · depth 32 - Automorphisms of y²+y=x³ in characteristic 2
WeierstrassCurve.exists_addMonoidHom_omega_i_j_vcInvFun_of_char_two1 below · depth 32 - Kernel tuple fixed iff the cyclic subgroup is preserved
ModularCurve.forall_kernelVariableChangeDeg_eq_iff_image_equivOfVariableChangeEq_zmultiples_eq17 below · depth 34 - Variable changes fixing W match invertible rational automorphisms
WeierstrassCurve.natCard_variableChange_smul_eq_subtype_eq_natCard_rationalAut_subtype5 below · depth 34 - Transport of the cut-out condition under a variable change
WeierstrassCurve.Affine.Point.cutOut_smul_of_cutOut_vcFun1 below · depth 36 - j-invariant of cyclic quotients of a base-changed Tate curve
ModularCurve.cyclicQuotientJ_smul_tateBase_baseChange_zmultiples_eq_algebraMap_jqNModC132 below · depth 38 - Tate-curve point of order M' cut out by kernel polynomials
ModularCurve.exists_point_smul_tateBase_baseChange_cutOut_muTuple_of_isPrimitiveRoot9 below · depth 38 - Quotient j-invariant of the width-w Tate curve
ModularCurve.cyclicQuotientJ_smul_tateBase_baseChange_zmultiples_eq_algebraMap_jqNModC_width132 below · depth 40 - Order-M' toric point on a twisted Tate curve of width w
ModularCurve.exists_point_smul_tateBase_baseChange_cutOut_muTuple_of_isPrimitiveRoot_width9 below · depth 40