Definitions/Def_ModularCurve_LevelOneAnnulusSpecialization.lean
Level-one annulus specialisation of divisor classes
Fix a prime q, a valuation subring A of \overline{\mathbb{Q}}, a perfect field k of characteristic q with a ring homomorphism \mathrm{red}:A\to k, modular polynomial data with its Kronecker congruence, integrality of the two Hecke branches, a level-one place specialisation P and a prolongation tuple R for it. For a finite set W of places of the level-one geometric modular function field \mathrm{modularFunctionFieldC}\,k\,1, an AnnulusDatum over W packages: an intermediate field K(w)\subseteq\overline{\mathbb{Q}} and, for w\in W, a choice of node coordinates R.NodeCoordinates (K w) w (a pair x,y of node integers over K(w) with x killed by the first residue map and a uniformiser for the second, and symmetrically for y); a width function on places of the level-one field; a depth function on places of \mathrm{modularFunctionFieldBar}(1\cdot q); a distinguished place cusp; two uniformiser assignments unifFst, unifSnd; and three k^\times-valued functions u0, lam, mu. A TwistVector consists of integers aZ, aZ' and a family aE indexed by places and naturals; chainVal reads it as a function on the chain over w, equal to aZ at index 0, to aZ' at all indices \ge the width, and to aE w d in between, and endSlopeFst, endSlopeSnd are its two boundary differences (the index width w - 1 being truncated natural subtraction). IsNodeAnnulusPlace says that a place V above lies over a member of W, is fixed by the inertia subgroup of A acting through arithmetic Galois, and has depth strictly between 0 and the width. annulusDeg and circleDeg sum the coefficients of a divisor D over places lying over w that are neither strictly first nor strictly second type, the latter also restricting to a fixed depth. IsTwistOf a D asserts that \deg P.\mathrm{fstDiv}\,D and \deg P.\mathrm{sndDiv}\,D are the negatives of the summed end slopes, and that for 1\le d, d+1\le\mathrm{width}\,w the circle degree equals minus the second difference of chainVal: the twist vector is a discrete potential for the annulus degrees. The angular coordinate angCoord is the image under \mathrm{red} of V(y_w)\cdot q^{-\mathrm{depth}\,V} when that element lies in A, and 0 otherwise; angUnit turns it into a unit (or 1); crossFst w' w and crossSnd w' w are the evaluations of unifFst w' at w and of unifSnd w' at the Frobenius translate \mathrm{arithFrobC}\cdot w, again as units or 1. The node unit nodeUnitOf a D attaches to a node pair with first entry w\in W the product (-1)^{\mathrm{annulusDeg}}u_0(w)^{n_2}\lambda_w^{n_1}\mu_w^{-n_2}\prod_{V/w}\mathrm{angUnit}(V)^{-D(V)}\prod_{w'\ne w}\mathrm{crossFst}(w',w)^{-n_1(w')}\mathrm{crossSnd}(w',w)^{n_2(w')}, with n_1,n_2 the end slopes, and 1 otherwise. Finally spData a D is the gluing datum whose two divisors are the pushforwards of P.\mathrm{fstDiv}\,D and P.\mathrm{sndDiv}\,D along P.\mathrm{reduceFst}, P.\mathrm{reduceSnd}, each corrected by subtracting its degree times the cusp, and whose node component is nodeUnitOf a D; sp a D is the class of this datum in the glued degree-zero Picard group when the datum is admissible, and 0 otherwise.
Relation to Mathlib
Mathlib has no notion of gluing data or of the glued degree-zero Picard group of two curves identified along pairs of places; GluingData, GluedPic0, Place, Divisor and the prolongation and place-specialisation structures are the project's own, Mathlib contributing the ambient machinery (Finsupp.mapDomain, Additive, Units, valuation subrings, AlgebraicClosure ℚ).
Where it is used
These data give the explicit candidate value of a specialisation map on inertia-invariant degree-zero classes of the modular curve of level q in terms of the reduction of its two branches glued at the supersingular places, refining the cruder gluing datum of the level-one glue data module by the contributions of places supported on the annuli over the nodes and by the cusp correction that forces degree zero. The twist vector records the discrete potential whose existence reflects the vanishing of the component class, so that a class may be pushed into the glued Picard group.
References
- M. Raynaud, Spécialisation du foncteur de Picard, Publications Mathématiques de l'IHÉS 38 (1970), 27–76
- 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
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 143 lines
- 29 declarations
- used in the statements of 3 theorems and imported by 5 proofs
- imports 5 definition modules
Source file: Definitions/Def_ModularCurve_LevelOneAnnulusSpecialization.lean
Imports
Declarations
- structure
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.K - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.coord - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.width - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.depth - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.cusp - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.unifFst - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.unifSnd - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.u0 - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.lam - field
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.mu - structure
ModularCurve.PlaceSpecialization.ProlongationTuple.TwistVector - field
ModularCurve.PlaceSpecialization.ProlongationTuple.TwistVector.aZ - field
ModularCurve.PlaceSpecialization.ProlongationTuple.TwistVector.aZ' - field
ModularCurve.PlaceSpecialization.ProlongationTuple.TwistVector.aE - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.chainVal - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.endSlopeFst - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.endSlopeSnd - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.IsNodeAnnulusPlace - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.annulusDeg - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.circleDeg - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.IsTwistOf - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.angCoord - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.angUnit - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.crossFst - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.crossSnd - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.nodeUnitOf - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.spData - def
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.sp
Source
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 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 AnnulusDatum (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) → ℕ depth : 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ˣ structure TwistVector (W : Finset (Place k (modularFunctionFieldC k 1))) where aZ : ℤ aZ' : ℤ aE : Place k (modularFunctionFieldC k 1) → ℕ → ℤ variable {R} variable {W : Finset (Place k (modularFunctionFieldC k 1))} (dat : R.AnnulusDatum W) namespace AnnulusDatum 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 ∧ (∀ σ ∈ A.inertiaSubgroupIn ℚ, arithmeticGalois (modularFunctionFieldFull (1 * q)) σ • V = V) ∧ 0 < dat.depth V ∧ dat.depth V < dat.width (P.reduceFst V) open Classical in def annulusDeg (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 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 ∧ dat.depth V = d ∧ ¬ P.IsStrictFst V ∧ ¬ P.IsStrictSnd V), D V def IsTwistOf (a : TwistVector (k := k) W) (D : Divisor (AlgebraicClosure ℚ) ↥(modularFunctionFieldBar (1 * q))) : Prop := Divisor.degree (P.fstDiv D) = -∑ w ∈ W, dat.endSlopeFst a w ∧ Divisor.degree (P.sndDiv D) = -∑ w ∈ W, dat.endSlopeSnd a 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 : V.evalAt ((dat.coord w hw).y : ↥(modularFunctionFieldBar (1 * q))) * ((q : AlgebraicClosure ℚ) ^ dat.depth V)⁻¹ ∈ A then red ⟨_, h⟩ 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 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ˣ) ^ (annulusDeg (P := P) D w) * dat.u0 w ^ (dat.endSlopeSnd a w) * dat.lam w ^ (dat.endSlopeFst a w) * (dat.mu w ^ (dat.endSlopeSnd a w))⁻¹ * (∏ V ∈ D.support with (P.reduceFst V = w ∧ ¬ P.IsStrictFst V ∧ ¬ P.IsStrictSnd V), dat.angUnit w hw V ^ (-(D V))) * (∏ w' ∈ W.erase w, (dat.crossFst w' w ^ (dat.endSlopeFst a w'))⁻¹ * dat.crossSnd w' w ^ (dat.endSlopeSnd a 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 AnnulusDatum end ProlongationTuple end ModularCurve.PlaceSpecialization end
Statements phrased using this module (3)
- 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 - Admissibility of the twisted gluing datum at level one
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatumQ.spData_mem_admissible385 below · depth 20 - Coefficient-field enlargement of a supersingular node package
ModularCurve.PlaceSpecialization.ProlongationTuple.AnnulusDatum.exists_nodePackage_over835 below · depth 22