Definitions/Def_WeierstrassCurve_OddOrderSummingSet.lean
Coordinate extraction and Vélu summing sets for Weierstrass curves
Two definitions are made, both in the WeierstrassCurve namespace and both stated for an arbitrary Weierstrass curve rather than for a curve known to be elliptic.
First, for a commutative ring R and an affine Weierstrass curve W over R, WeierstrassCurve.Affine.Point.coordsOrZero is the total map W.\mathrm{Point} \to R \times R defined by cases on the inductive type of points: the point at infinity is sent to the pair (0,0), and a point Point.some x y h (an affine point with nonsingularity witness h) is sent to (x,y). Thus it extracts affine coordinates, with (0,0) as a junk value at infinity; in particular it is not injective in general, since it cannot distinguish infinity from an affine point with coordinates (0,0). The two accompanying lemmas coordsOrZero_zero and coordsOrZero_some record these two defining equations.
Second, for a field F with decidable equality and W a Weierstrass curve over F, WeierstrassCurve.oddOrderSummingSet W Q n, for a point Q of the affine curve W.\mathrm{toAffine} and n : \mathbb{N}, is the finite subset of F \times F obtained as the image of the interval Finset.Icc 1 n under k \mapsto (k \bullet Q).\mathrm{coordsOrZero}, where k \bullet Q is the \mathbb{N}-multiple of Q in the group of points. So it is the set of coordinate pairs of Q, 2Q, \dots, nQ. Nothing in the definition requires that Q have order 2n+1, or that the multiples kQ be affine: if some kQ is the point at infinity, the pair (0,0) enters the set. The name records the intended use, where Q has exact odd order 2n+1 and the set is a half-system S with \langle Q\rangle\setminus\{O\} = S \sqcup (-S). The lemma mem_oddOrderSummingSet restates membership: P lies in the set iff there is k with 1 \le k \le n and (k \bullet Q).\mathrm{coordsOrZero} = P.
Relation to Mathlib
Builds on Mathlib's WeierstrassCurve, WeierstrassCurve.Affine.Point and the group structure on points; Mathlib has no coordinate-extraction map with a junk value at infinity and no Vélu-style summing set, so both definitions here are the project's own.
Where it is used
The summing set is the format in which the data of a cyclic kernel is presented to the Vélu-type quotient constructions used in the isogeny part of the development; the module is imported very widely in the tree.
References
- J. Vélu, Isogénies entre courbes elliptiques, Comptes Rendus de l'Académie des Sciences de Paris, Série A, 273 (1971), 238–241
- J. H. Silverman, The Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 106, Springer, 2nd ed., 2009
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 35 lines
- 5 declarations
- used in the statements of 69 theorems and imported by 92 proofs
- imports 0 definition modules
Source file: Definitions/Def_WeierstrassCurve_OddOrderSummingSet.lean
Imports
- only Mathlib
Declarations
- def
WeierstrassCurve.Affine.Point.coordsOrZero - lemma
WeierstrassCurve.Affine.Point.coordsOrZero_zero - lemma
WeierstrassCurve.Affine.Point.coordsOrZero_some - def
WeierstrassCurve.oddOrderSummingSet - lemma
WeierstrassCurve.mem_oddOrderSummingSet
Source
import Mathlib namespace WeierstrassCurve namespace Affine.Point variable {R : Type*} [CommRing R] {W : Affine R} def coordsOrZero : W.Point → R × R | .zero => (0, 0) | .some x y _ => (x, y) @[simp] lemma coordsOrZero_zero : ((.zero : W.Point)).coordsOrZero = (0, 0) := rfl @[simp] lemma coordsOrZero_some {x y : R} (h : W.Nonsingular x y) : (Point.some x y h).coordsOrZero = (x, y) := rfl end Affine.Point section SummingSet variable {F : Type*} [Field F] [DecidableEq F] (W : WeierstrassCurve F) def oddOrderSummingSet (Q : W.toAffine.Point) (n : ℕ) : Finset (F × F) := (Finset.Icc 1 n).image fun k => (k • Q).coordsOrZero lemma mem_oddOrderSummingSet {Q : W.toAffine.Point} {n : ℕ} {P : F × F} : P ∈ W.oddOrderSummingSet Q n ↔ ∃ k, 1 ≤ k ∧ k ≤ n ∧ (k • Q).coordsOrZero = P := by simp only [oddOrderSummingSet, Finset.mem_image, Finset.mem_Icc] exact ⟨fun ⟨k, ⟨h1, h2⟩, h3⟩ => ⟨k, h1, h2, h3⟩, fun ⟨k, h1, h2, h3⟩ => ⟨k, ⟨h1, h2⟩, h3⟩⟩ end SummingSet end WeierstrassCurve
Statements phrased using this module (69)
- Rational moduli place on X₀(p) at a Vélu quotient
ModularCurve.moduliPointExists_jQuotVelu_of_mult_two323 below · depth 7 - Tate cusp criterion for the Vélu p-isogeny quotient
ModularCurve.tateCuspCriterion_jQuotVelu24 below · depth 7 - Multiplicative primes q≠ p persist for the rescaled Vélu quotient
WeierstrassCurve.dvd_discriminant_not_dvd_c4_integral_veluQuotient_rescale29 below · depth 7 - Integral rescaling of the Vélu quotient by a Galois-stable subgroup
WeierstrassCurve.exists_integral_veluQuotient_rescale_of_galois_stable16 below · depth 7 - Vélu isogeny with kernel ⟨ Q⟩ over ℚ̄
WeierstrassCurve.exists_veluPointHom_oddOrderSummingSet_algebraicClosure55 below · depth 7 - Zero-component transport along the Vélu coordinate map
WeierstrassCurve.inZeroComponentAt_veluCoord_iff_of_multiplicative28 below · depth 7 - Modular polynomial vanishes at j(W) and j(W/⟨ Q⟩)
ModularCurve.modularPolynomial_eval_jInt_jQuotVelu_eq_zero101 below · depth 8 - Simple root of Φₚ at the Vélu quotient j-invariant
ModularCurve.modularPolynomial_rootMultiplicity_jQuotVelu_eq_one239 below · depth 8 - Vélu quotient isogeny via places, odd order case
WeierstrassCurve.exists_veluFunctionFieldHom_restrictAlong_placeOfPoint_eq50 below · depth 8 - Galois-stable Vélu quotient descends to ℚ
WeierstrassCurve.exists_veluQuotient_descent_of_smul_mem_zmultiples0 below · depth 8 - Vélu c₄ is a non-unit for formal-group p-torsion
WeierstrassCurve.valuation_c4_add_veluTSum_lt_one_of_formal_kernel9 below · depth 8 - Valuation of the Vélu u-product over ⟨ Q⟩ at a multiplicative place
WeierstrassCurve.valuation_prod_veluU_oddOrderSummingSet_of_multiplicative19 below · depth 8 - Vélu quotient has unit c₄ at a multiplicative prime
WeierstrassCurve.valuation_veluQuotient_oddOrderSummingSet_c4_of_multiplicative10 below · depth 8 - Vélu quotient by an odd cyclic kernel has nonzero discriminant
WeierstrassCurve.veluQuotient_oddOrderSummingSet_discriminant_ne_zero3 below · depth 8 - Vélu discriminant identity for odd-order kernels
WeierstrassCurve.veluQuotient_oddOrderSummingSet_discriminant_prod_veluU_pow0 below · depth 8 - Forward modular equation for odd Vélu quotients
ModularCurve.ModularPolynomialData.isRoot_map_j_veluQuotient_j_of_addOrderOf_eq96 below · depth 9 - Vélu quotient preserves roots of Ψ₂² for odd cyclic kernels
WeierstrassCurve.eval_psi2Sq_veluQuotient_veluX_eq_zero_of_eval_psi2Sq_eq_zero1 below · depth 9 - Vélu quotient of a nodal cubic by an odd-order point
WeierstrassCurve.veluQuotient_oddOrderSummingSet_c4_c6_discriminant_of_nodal1 below · depth 9 - Injectivity of Vélu's abscissa map on ψ₂²-roots
WeierstrassCurve.veluX_oddOrderSummingSet_injOn_psi2Sq_roots0 below · depth 9 - Vélu's formulas land on the quotient curve (odd order)
WeierstrassCurve.velu_map_equation_of_oddOrderSummingSet0 below · depth 9 - Vélu function-field embedding with point map of kernel ⟨ Q⟩
WeierstrassCurve.exists_veluFunctionFieldHom_pointMapOfPushforward_ker_eq_zmultiples51 below · depth 10 - Vélu quotient j-invariant is a root of Φ₂ₙ₊₁(j(W), · )
ModularCurve.ModularPolynomialData.isRoot_map_j_veluQuotient_j_of_addOrderOf_eq_of_isAlgClosed95 below · depth 11 - Equal j of Vélu quotients forces equal cyclic subgroups
WeierstrassCurve.zmultiples_eq_of_veluQuotient_j_eq_of_forall_pointEnd_eq_zsmul70 below · depth 11 - Odd cyclic subgroups determined by the Vélu quotient's j
WeierstrassCurve.zmultiples_eq_of_veluQuotient_j_eq_of_transcendental185 below · depth 12 - Equal j of Vélu quotients forces equal cyclic subgroups
WeierstrassCurve.zmultiples_eq_of_veluQuotient_j_eq_of_forall_isogenyEndDatum_exists_int70 below · depth 13 - Full-kernel Vélu quotient: pushforward point map has kernel ℤQ
WeierstrassCurve.exists_functionFieldHom_fullKernelQuotient_pointMapOfPushforward_ker_eq_zmultiples81 below · depth 15 - Nonvanishing discriminant of Vélu's odd cyclic quotient
WeierstrassCurve.veluQuotient_oddOrderSummingSet_discriminant_ne_zero_of_addOrderOf_eq1 below · depth 15 - Every root of Φ_ℓ(j(W),Y) is a Vélu quotient j-invariant
ModularCurve.ModularPolynomialData.exists_veluQuotient_j_eq_of_mem_roots_fibrePoly208 below · depth 16 - Modular equation of odd prime level via Vélu quotients
ModularCurve.ModularPolynomialData.fibrePoly_j_eq_prod_veluQuotient_j204 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 - 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 - Vélu pushforward point map has kernel ℤQ
WeierstrassCurve.exists_veluFunctionFieldHom_pointMapOfPushforward_ker_eq_zmultiples_of_oddOrder51 below · depth 16 - Vélu isogeny as a point homomorphism over a field
WeierstrassCurve.exists_veluPointHom_oddOrderSummingSet57 below · depth 16 - Vélu's isogeny for a cyclic kernel of odd order
WeierstrassCurve.exists_veluPointHom_oddOrderSummingSet_of_addOrderOf_eq_two_mul_add_one61 below · depth 16 - Surjectivity of Vélu maps over an algebraically closed field
WeierstrassCurve.veluPointHom_surjective_of_isAlgClosed1 below · depth 16 - Modular equation as Vélu product at transcendental j
ModularCurve.ModularPolynomialData.fibrePoly_j_eq_prod_veluQuotient_j_of_transcendental_of_isAlgClosed196 below · depth 17 - Second degeneracy map on moduli places via Vélu's odd-order model
ModularCurve.moduliPlace_restrictAlong_qExpand_veluQuotient92 below · depth 17 - Vélu's explicit 2-isogeny equals the translate-sum map
WeierstrassCurve.coordsOrZero_veluPointMap20 below · depth 17 - Integral model of a Vélu quotient compatible with reduction
WeierstrassCurve.exists_map_eq_veluQuotient_and_map_residue_eq_veluQuotient_reduceHom0 below · depth 17 - Vélu function-field extension for an odd cyclic kernel
WeierstrassCurve.exists_veluFunctionFieldHom_restrictAlong_placeOfPoint_eq_of_isAlgClosed50 below · depth 17 - Vélu isogeny with kernel ⟨ Q⟩ over algebraically closed F
WeierstrassCurve.exists_veluPointHom_oddOrderSummingSet_of_isAlgClosed55 below · depth 17 - Descent of the Vélu point homomorphism along a field homomorphism
WeierstrassCurve.exists_veluPointHom_oddOrderSummingSet_of_ringHom0 below · depth 17 - Multiples of a point of odd prime order form an odd Vélu set
WeierstrassCurve.isOddVeluSet_oddOrderSummingSet0 below · depth 17 - Vélu's quotient map is rational and universal
WeierstrassCurve.veluPointHom_mem_rationalHomSet_and_exists_mem_rationalHomSet_comp_eq6 below · depth 17 - Modular equation at transcendental j as product over Vélu quotients
ModularCurve.ModularPolynomialData.fibrePoly_j_eq_prod_veluQuotient_j_of_transcendental195 below · depth 18 - Enumeration of the ℓ+1 cyclic kernels with nonsingular Vélu quotients
WeierstrassCurve.exists_enum_cyclicKernels_veluQuotient_discriminant_ne_zero11 below · depth 18 - Vélu's maps for an odd-order point in reduced rational form
WeierstrassCurve.exists_veluX_eq_div_and_veluY_eq_div_of_addOrderOf_eq0 below · depth 18 - Vélu's map lands on the quotient curve, odd cyclic kernel
WeierstrassCurve.velu_map_equation_of_oddOrderSummingSet_of_isAlgClosed0 below · depth 18 - Vélu's x-only quotient equals the summing-set quotient
ModularCurve.LevelP.quotientByLine_eq_veluQuotient_oddOrderSummingSet2 below · depth 19 - 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 - 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 - Reduction commutes with Vélu's abscissa map off the kernel
WeierstrassCurve.veluX_mem_and_residue_veluX_eq_of_forall_fst_ne_residue0 below · depth 22 - Reduction commutes with Vélu's ordinate map, odd order
WeierstrassCurve.veluY_mem_and_residue_veluY_eq_of_forall_fst_ne_residue0 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 - Lifting a kernel polynomial of odd order along reduction
WeierstrassCurve.exists_reduceHom_eq_and_map_eq_kernelPolynomial_oddOrderSummingSet7 below · depth 23 - Legendre cross-difference of a non-isotrivial family and its Kohel quotient
WeierstrassCurve.map_legendreCross_kohelQuotient_ne_zero_of_map_j_ne_C181 below · depth 24 - Level-three moduli of E and E/h differ modulo π
WeierstrassCurve.map_levelThreeModulus_kohelQuotient_sub_ne_zero_of_map_j_ne_C181 below · depth 24 - Vélu quotient of odd non-square order has different j
WeierstrassCurve.apply_j_ne_apply_j_of_j_map_eq_veluQuotient_j_of_ne_C168 below · depth 25 - A cyclic generator-kernel polynomial splits over ⟨ Q⟩
WeierstrassCurve.IsCyclicGenKernel.eq_prod_X_sub_C_coordsOrZero_nsmul8 below · depth 32 - Generator-kernel polynomials have a root of exact order p^k
WeierstrassCurve.IsCyclicGenKernel.exists_addOrderOf_eq_and_isRoot13 below · depth 32 - Generator independence of the half-system x-coordinate polynomial
WeierstrassCurve.prod_X_sub_C_coordsOrZero_nsmul_eq_of_zmultiples_eq8 below · depth 32 - Cyclic generator-kernel polynomial of a point of order p^k
WeierstrassCurve.isCyclicGenKernel_prod_X_sub_C_coordsOrZero_nsmul_of_addOrderOf_eq_pow8 below · depth 33 - Order-two point gives a degree-one kernel polynomial
WeierstrassCurve.isTwoKernel_X_sub_C_coordsOrZero_of_addOrderOf_eq_two1 below · depth 33 - Two-kernel polynomials are X-x(Q) with Q of order 2
WeierstrassCurve.IsTwoKernel.exists_addOrderOf_eq_two_and_eq_X_sub_C0 below · depth 35 - Kernel polynomial of a rational point of odd prime order
WeierstrassCurve.isCyclicKernel_kernelPolynomial_oddOrderSummingSet6 below · depth 35 - Cyclic subgroups of order p^k match Γ₀-kernel polynomials
ModularCurve.exists_equiv_addSubgroup_isAddCyclic_isGamma0PowAt_of_isAlgClosed22 below · depth 36