Definitions/Def_ModularCurve_LevelOneAnnulusSpecializationOrbit.lean
Rational-depth annulus specialization datum at level one
Working over a prime q, a valuation subring A of \overline{\mathbb Q}, a perfect field k of characteristic q with a ring map \mathrm{red}\colon A \to k, modular polynomial data satisfying the Kronecker congruence, integrality hypotheses for the two Hecke embeddings at level 1, a place specialization P and a prolongation tuple R for it, this module introduces the structure AnnulusDatumQ W attached to a finite set W of places of modularFunctionFieldC k 1. Its fields are: a family of intermediate fields K(w) of \overline{\mathbb Q}/\mathbb Q; for each w \in W a term of R.NodeCoordinates (K w) w, i.e. a pair x_w,y_w of node integers over K(w) whose first residue kills x_w and has \operatorname{ord}_w of the residue of y_w equal to 1 (and symmetrically for the second residue at \mathrm{arithFrob}\cdot w); a width function W \to \mathbb N; a rational-valued depth \delta on the places of modularFunctionFieldBar (1 * q) over \overline{\mathbb Q} (this is the one change from AnnulusDatum, whose depth is \mathbb N-valued, and ofAnnulusDatum is the resulting coercion); a cusp place; two uniformiser families unifFst, unifSnd; and three families of units u_0, \lambda, \mu of k.
On such a datum the module defines the chain value \mathrm{chainVal} of a twist vector a (a_Z at d=0, a_{Z'} for d \ge width, a_E(w,d) in between), the two end slopes, and the predicate IsNodeAnnulusPlace V: P.\mathrm{reduceFst}\,V \in W, V neither strict of the first nor of the second kind, and 0 < \delta(V) < \mathrm{width}. Circle degrees are tent-weighted, \mathrm{circleDeg}(D,w,d) = \sum_V D(V)\max(0, 1 - |\delta(V) - d|) over the non-strict V above w in the support of D; the end shares are the numerators of \mathrm{circleDeg} at d = 0 and d = \mathrm{width}\,w when these are integral and 0 otherwise, and the end orders add end slope and end share. IsTwistOf a D asserts that \deg P.\mathrm{fstDiv}\,D and \deg P.\mathrm{sndDiv}\,D are minus the sums of the respective end orders over W, and that for 1 \le d, d+1 \le \mathrm{width}\,w the circle degree equals minus the discrete second difference of \mathrm{chainVal}.
The angular data are: \mathrm{angCoord}, the reduction of V(y_w)\,q^{-\delta(V)} when \delta(V) is integral and that element lies in A, else 0 (with \mathrm{angUnit} its unit version); the depth moment m_w(D) = \sum_V D(V)\delta(V) over the same V; and \mathrm{angFactor}, the reduction of \bigl(\prod_V V(y_w)^{-D(V)}\bigr) q^{m_w(D)} as a unit of k when m_w(D) is integral and that element lies in A with non-zero reduction, and 1 otherwise — so a single residue per node replaces the pointwise product of angular units. The cross terms \mathrm{crossFst}(w',w), \mathrm{crossSnd}(w',w) evaluate unifFst w' at w, resp. unifSnd w' at \mathrm{arithFrob} \cdot w, as units when non-zero. The node unit \mathrm{nodeUnitOf}\,a\,D sends a node pair s with first coordinate w \in W to the additive image of (-1)^{\mathrm{annulusDeg}\,D\,w}\,u_0(w)^{o_2}\lambda_w^{o_1}\mu_w^{-o_2}\,\mathrm{angFactor}_w(D)\prod_{w' \neq w}\mathrm{crossFst}(w',w)^{-o_1(w')}\mathrm{crossSnd}(w',w)^{o_2(w')}, with o_1,o_2 the end orders, and to 1 for pairs whose first coordinate lies outside W. Finally spData a D is the gluing datum whose two divisors are the push-forwards along P.\mathrm{reduceFst}, P.\mathrm{reduceSnd} of the strict parts of D, each corrected at the cusp to degree zero, and whose node component is \mathrm{nodeUnitOf}\,a\,D; sp a D is its class in the glued degree-zero class group \mathrm{GluedPic0} over the node pairs \mathrm{nodePairsOfPlaces}(\mathrm{arithFrobC}\,q\,k\,1)\,W when the datum is admissible, and 0 otherwise.
Relation to Mathlib
The ambient notions of place, divisor, gluing datum and glued degree-zero class group, as well as place specializations, prolongation tuples and node coordinates, are the project's own; Mathlib has no Picard group of a curve with prescribed nodes. Only the standard apparatus of valuation subrings, Laurent series, finitely supported functions and Additive/Units is taken from Mathlib.
Where it is used
The glued degree-zero class group here models the Picard group of the special fibre of X_0(q) at q, two copies of the j-line crossing at the supersingular points, and sp is the specialization of an inertia-invariant divisor class to it. Unlike the pointwise version, the rational depth accommodates divisors that are only stable, not pointwise fixed, under inertia, the individual angular coordinates of a ramified orbit being replaced by the reduction of their product. These specialization maps feed the analysis of the component group and of the Galois action on the q-torsion of J_0(q) used in the level-lowering step.
References
- P. Deligne and M. Rapoport, Les schémas de modules de courbes elliptiques, in: Modular Functions of One Variable II, Lecture Notes in Mathematics 349, Springer, 1973, 143–316
- K. A. Ribet, On modular representations of \mathrm{Gal}(\overline{\mathbb{Q}}/\mathbb{Q}) arising from modular forms, Inventiones Mathematicae 100 (1990), 431–476
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154, §4
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 181 lines
- 31 declarations
- used in the statements of 11 theorems and imported by 12 proofs
- imports 6 definition modules
Source file: Definitions/Def_ModularCurve_LevelOneAnnulusSpecializationOrbit.lean
Imports
Imported by
- no other definition module
Declarations
- structure
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.K - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.coord - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.width - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.depthQ - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.cusp - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.unifFst - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.unifSnd - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.u0 - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.lam - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.mu - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.ofAnnulusDatum - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.chainVal - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.endSlopeFst - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.endSlopeSnd - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.IsNodeAnnulusPlace - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.circleDeg - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.endShareFst - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.endShareSnd - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.endOrderFst - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.endOrderSnd - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.IsTwistOf - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.angCoord - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.angUnit - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.depthMoment - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.angFactor - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.crossFst - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.crossSnd - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.nodeUnitOf - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.spData - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.sp
Source
import Mathlib import Definitions.Def_ModularCurve_LevelOneGlueData import Definitions.Def_AlgebraicCurve_GluedPic0 import Definitions.Def_ModularCurve_NodeDepth import Definitions.Def_ModularCurve_NodeLocalizedPlaces import Definitions.Def_ModularCurve_ProlongationTuple import Definitions.Def_ModularCurve_LevelOneAnnulusSpecialization set_option autoImplicit false noncomputable section open AlgebraicCurve IsLocalRing ModularCurve namespace ModularCurve.PlaceSpecialization variable {q : ℕ} [Fact q.Prime] {A : ValuationSubring (AlgebraicClosure ℚ)} {k : Type*} [Field k] [CharP k q] [PerfectField k] {red : A →+* k} {data : ModularPolynomialData q} {hKr : KroneckerCongruence q data} {hα : HeckeAlphaBarIntegral (AlgebraicClosure ℚ) 1 q} {hβ : HeckeBetaBarIntegral (AlgebraicClosure ℚ) 1 q} (P : PlaceSpecialization A q 1 data hKr k red hα hβ) namespace ProlongationTuple variable {P} (R : ProlongationTuple P) structure AnnulusDatumQ (W : Finset (Place k (modularFunctionFieldC k 1))) where K : Place k (modularFunctionFieldC k 1) → IntermediateField ℚ (AlgebraicClosure ℚ) coord : ∀ w : Place k (modularFunctionFieldC k 1), w ∈ W → R.NodeCoordinates (K w) w width : Place k (modularFunctionFieldC k 1) → ℕ depthQ : Place (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q)) → ℚ cusp : Place k (modularFunctionFieldC k 1) unifFst : Place k (modularFunctionFieldC k 1) → ↥(modularFunctionFieldC k 1) unifSnd : Place k (modularFunctionFieldC k 1) → ↥(modularFunctionFieldC k 1) u0 : Place k (modularFunctionFieldC k 1) → kˣ lam : Place k (modularFunctionFieldC k 1) → kˣ mu : Place k (modularFunctionFieldC k 1) → kˣ variable {R} variable {W : Finset (Place k (modularFunctionFieldC k 1))} (dat : R.AnnulusDatumQ W) namespace AnnulusDatumQ def ofAnnulusDatum (dat₀ : R.AnnulusDatum W) : R.AnnulusDatumQ W where K := dat₀.K coord := dat₀.coord width := dat₀.width depthQ V := dat₀.depth V cusp := dat₀.cusp unifFst := dat₀.unifFst unifSnd := dat₀.unifSnd u0 := dat₀.u0 lam := dat₀.lam mu := dat₀.mu def chainVal (a : TwistVector (k := k) W) (w : Place k (modularFunctionFieldC k 1)) (d : ℕ) : ℤ := if d = 0 then a.aZ else if dat.width w ≤ d then a.aZ' else a.aE w d def endSlopeFst (a : TwistVector (k := k) W) (w : Place k (modularFunctionFieldC k 1)) : ℤ := dat.chainVal a w 1 - dat.chainVal a w 0 def endSlopeSnd (a : TwistVector (k := k) W) (w : Place k (modularFunctionFieldC k 1)) : ℤ := dat.chainVal a w (dat.width w - 1) - dat.chainVal a w (dat.width w) def IsNodeAnnulusPlace (V : Place (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : Prop := P.reduceFst V ∈ W ∧ ¬ P.IsStrictFst V ∧ ¬ P.IsStrictSnd V ∧ 0 < dat.depthQ V ∧ dat.depthQ V < dat.width (P.reduceFst V) open Classical in def circleDeg (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) (w : Place k (modularFunctionFieldC k 1)) (d : ℕ) : ℚ := ∑ V ∈ D.support with (P.reduceFst V = w ∧ ¬ P.IsStrictFst V ∧ ¬ P.IsStrictSnd V), (D V : ℚ) * max 0 (1 - |dat.depthQ V - d|) def endShareFst (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) (w : Place k (modularFunctionFieldC k 1)) : ℤ := if (dat.circleDeg D w 0).den = 1 then (dat.circleDeg D w 0).num else 0 def endShareSnd (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) (w : Place k (modularFunctionFieldC k 1)) : ℤ := if (dat.circleDeg D w (dat.width w)).den = 1 then (dat.circleDeg D w (dat.width w)).num else 0 def endOrderFst (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) (w : Place k (modularFunctionFieldC k 1)) : ℤ := dat.endSlopeFst a w + dat.endShareFst D w def endOrderSnd (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) (w : Place k (modularFunctionFieldC k 1)) : ℤ := dat.endSlopeSnd a w + dat.endShareSnd D w def IsTwistOf (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : Prop := Divisor.degree (P.fstDiv D) = -∑ w ∈ W, dat.endOrderFst a D w ∧ Divisor.degree (P.sndDiv D) = -∑ w ∈ W, dat.endOrderSnd a D w ∧ ∀ w ∈ W, ∀ d : ℕ, 1 ≤ d → d + 1 ≤ dat.width w → dat.circleDeg D w d = -((dat.chainVal a w (d - 1) - 2 * dat.chainVal a w d + dat.chainVal a w (d + 1) : ℤ) : ℚ) open Classical in def angCoord (w : Place k (modularFunctionFieldC k 1)) (hw : w ∈ W) (V : Place (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : k := if h : (dat.depthQ V).den = 1 ∧ V.evalAt ((dat.coord w hw).y : ↥(modularFunctionFieldBar (1 * q))) * ((q : AlgebraicClosure ℚ) ^ (dat.depthQ V).num)⁻¹ ∈ A then red ⟨_, h.2⟩ else 0 open Classical in def angUnit (w : Place k (modularFunctionFieldC k 1)) (hw : w ∈ W) (V : Place (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : kˣ := if h : dat.angCoord w hw V ≠ 0 then Units.mk0 _ h else 1 open Classical in def depthMoment (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) (w : Place k (modularFunctionFieldC k 1)) : ℚ := ∑ V ∈ D.support with (P.reduceFst V = w ∧ ¬ P.IsStrictFst V ∧ ¬ P.IsStrictSnd V), (D V : ℚ) * dat.depthQ V open Classical in def angFactor (w : Place k (modularFunctionFieldC k 1)) (hw : w ∈ W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : kˣ := if h : (dat.depthMoment D w).den = 1 ∧ ∃ hmem : (∏ V ∈ D.support with (P.reduceFst V = w ∧ ¬ P.IsStrictFst V ∧ ¬ P.IsStrictSnd V), V.evalAt ((dat.coord w hw).y : ↥(modularFunctionFieldBar (1 * q))) ^ (-(D V))) * (q : AlgebraicClosure ℚ) ^ (dat.depthMoment D w).num ∈ A, red ⟨_, hmem⟩ ≠ 0 then Units.mk0 (red ⟨_, h.2.choose⟩) h.2.choose_spec else 1 open Classical in def crossFst (w' w : Place k (modularFunctionFieldC k 1)) : kˣ := if h : w.evalAt (dat.unifFst w') ≠ 0 then Units.mk0 _ h else 1 open Classical in def crossSnd (w' w : Place k (modularFunctionFieldC k 1)) : kˣ := if h : (arithFrobC q k 1 • w).evalAt (dat.unifSnd w') ≠ 0 then Units.mk0 _ h else 1 open Classical in def nodeUnitOf (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : ↥(nodePairsOfPlaces (arithFrobC q k 1) W) → Additive kˣ := fun s => let w : Place k (modularFunctionFieldC k 1) := (s : Place k (modularFunctionFieldC k 1) × Place k (modularFunctionFieldC k 1)).1 Additive.ofMul <| if hw : w ∈ W then (-1 : kˣ) ^ (AnnulusDatum.annulusDeg (P := P) D w) * dat.u0 w ^ (dat.endOrderSnd a D w) * dat.lam w ^ (dat.endOrderFst a D w) * (dat.mu w ^ (dat.endOrderSnd a D w))⁻¹ * dat.angFactor w hw D * (∏ w' ∈ W.erase w, (dat.crossFst w' w ^ (dat.endOrderFst a D w'))⁻¹ * dat.crossSnd w' w ^ (dat.endOrderSnd a D w')) else 1 def spData (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : GluingData k (modularFunctionFieldC k 1) (nodePairsOfPlaces (arithFrobC q k 1) W) := (Finsupp.mapDomain P.reduceFst (P.fstDiv D) - Divisor.degree (Finsupp.mapDomain P.reduceFst (P.fstDiv D)) • Finsupp.single dat.cusp 1, Finsupp.mapDomain P.reduceSnd (P.sndDiv D) - Divisor.degree (Finsupp.mapDomain P.reduceSnd (P.sndDiv D)) • Finsupp.single dat.cusp 1, dat.nodeUnitOf a D) open Classical in def sp (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : GluedPic0 k (modularFunctionFieldC k 1) (nodePairsOfPlaces (arithFrobC q k 1) W) := if h : dat.spData a D ∈ GluingData.admissible (nodePairsOfPlaces (arithFrobC q k 1) W) then GluedPic0.mk (nodePairsOfPlaces (arithFrobC q k 1) W) ⟨dat.spData a D, h⟩ else 0 end AnnulusDatumQ end ProlongationTuple end ModularCurve.PlaceSpecialization end
Statements phrased using this module (11)
- Inertia-stable twisted divisor: fixed strict part plus glue-trivial part
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.exists_fixed_strict_add_kernelGood_of_isTwistOf_of_inertiaStable1,636 below · depth 19 - Twisting an inertia-stable divisor by a fixed strict pair
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.exists_int_fixed_strict_pair_isTwistOf_sub_of_inertiaStable458 below · depth 19 - Existence of a full annulus datum at level one
ModularCurve.PlaceSpecialization.ProlongationTuple.exists_annulusDatumQ_laws_levelOne928 below · depth 19 - Inertia-stable node telescoping identity at a supersingular crossing
ModularCurve.PlaceSpecialization.ProlongationTuple.exists_hasValue_residueFst_div_pow_and_residueSnd_div_pow_and_div_eq_angFactor_of_inertiaStable584 below · depth 19 - Inertia-stable divisors have integral circle degrees and depth moments
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.den_circleDeg_eq_one_and_den_depthMoment_eq_one_of_inertiaStable159 below · depth 20 - Glued classes from inertia-fixed strict divisors with zero twist
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.exists_fixed_strict_mk_glueData_eq482 below · depth 20 - Strict representative of an inertia-stable, glued-trivial divisor class
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.exists_isGoodDiv_pic0Mk_eq_of_isTwistOf_of_mk_spData_eq_zero_of_inertiaStable1,623 below · depth 20 - Subtracting a strict twist-zero divisor preserves the twist
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.isTwistOf_sub_and_spData_sub_eq_of_forall_isStrict162 below · depth 20 - Admissibility of the twisted gluing datum at level one
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.spData_mem_admissible385 below · depth 20 - End-order bounds and coupled scalings for an inertia-stable twist
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.exists_endOrder_ineq_and_coupledScalings_hasValue_of_isTwistOf_of_mk_spData_eq_zero_of_inertiaStable1,622 below · depth 21 - Chord bound, rigidity and scaling increment for twisted annulus data
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.exists_chord_le_endOrders_and_rigid_of_isTwistOf_of_inertiaStable1,595 below · depth 22