Definitions/Def_ModularCurve_FullLevelJacobian.lean
Full-level- modular Jacobian with Galois, Hecke and operators
Throughout, q is a prime and M' a natural number. The level group levelH q M' is the kernel of the reduction map (\mathbb Z/q^2M')^\times \to (\mathbb Z/q)^\times, i.e. the units congruent to 1 mod q; fieldBar is the corresponding base-changed function field xHFunctionFieldBar (q^2*M') (levelH q M') inside the Laurent series over \overline{\mathbb Q}, and jacComp is the associated divisor class group JH (q^2*M') (levelH q M'). The index type Idx q is the set of primitive q-th roots of unity in \overline{\mathbb Q}; it is finite, carries the action of \mathrm{Gal}(\overline{\mathbb Q}/\mathbb Q) by evaluation, and Idx.pow d raises \zeta to the exponent given by the representative of d \in (\mathbb Z/q)^\times in \{0,\dots,q-1\}. The carrier Jac q M' is the type of functions \mathrm{Idx}(q) \to jacComp, with pointwise addition, components read off by Jac.eval; Jac.mapIdx T s is the endomorphism x \mapsto (\zeta \mapsto T_\zeta(x(s\zeta))) for a family of additive endomorphisms T and a self-map s of the index set.
On this carrier: galJac sends \sigma to x \mapsto (\zeta \mapsto \sigma\cdot x(\sigma^{-1}\zeta)), combining the semilinear Galois action on each component with the permutation of components. conjElem γ is the real matrix \begin{pmatrix} a & b/q \\ qc & d\end{pmatrix} attached to \gamma=\begin{pmatrix}a&b\\c&d\end{pmatrix}\in \mathrm{SL}_2(\mathbb Z), i.e. the conjugate of \gamma by \mathrm{diag}(1,q), of determinant 1. The predicate IsLevelAutBar q M' ζ γ τ says of a \overline{\mathbb Q}-algebra automorphism \tau of fieldBar: for every weight k, all modular forms f,g for \Gamma_H(q^2M') with integral q-expansions p_f,p_g and p_g \neq 0 as a rational series, and every ring embedding \iota : \overline{\mathbb Q}\to\mathbb C with \iota(\zeta)=e^{2\pi i/q}, the \iota-image of \tau applied to the class of p_f/p_g, multiplied by the q-expansion of g|_k\,\mathrm{conjElem}(\gamma), equals the q-expansion of f|_k\,\mathrm{conjElem}(\gamma). levelAutBar ζ γ is a choice of such \tau when one exists and the identity otherwise; levelOp ζ γ transports it to an additive endomorphism of jacComp via the semilinear automorphism action, and equals the identity when no such \tau exists. LevelAutInputs asserts existence of such \tau for all \zeta and all \gamma \in \Gamma_0(M').
The \mathrm{GL}_2(\mathbb Z/q)-side: redQ is entrywise reduction \mathrm{SL}_2(\mathbb Z)\to \mathrm{GL}_2(\mathbb Z/q), diagOneElem d is \mathrm{diag}(1,d), slJac γ acts on the \zeta-component by levelOp ζ γ⁻¹ without moving components, and diagJac d permutes components by \zeta \mapsto \zeta^{d^{-1}}. GL2Laws asserts the existence of a monoid homomorphism \mathrm{GL}_2(\mathbb Z/q)\to \mathrm{End}(\mathrm{Jac}) matching slJac on reductions of elements of \Gamma_0(M') and diagJac on the elements \mathrm{diag}(1,d); gl2Jac is such a homomorphism if one exists and trivial otherwise. For a prime \ell \nmid qM', heckeGenJac ℓ applies on each component the inverse diamond operator at the class of \ell in (\mathbb Z/q^2M')^\times composed after heckeOperatorHAlong … ℓ, while shifting components by \zeta\mapsto\zeta^{\ell^{-1}}; it is 0 when \ell is not prime or divides qM'. Under HeckeGenCommute (pairwise commutation of these operators) heckeJacAux is the induced \mathbb Z-algebra map from HeckeAlg =\mathbb Z[X_\ell : \ell \text{ prime}] into the commutative subalgebra they generate, and heckeJac is the resulting ring homomorphism to \mathrm{End}(\mathrm{Jac}); failing commutation, heckeJac sends each generator to 0, acting by the constant term. Finally tateEnd is the ring homomorphism from \mathrm{End}(\mathrm{Jac}) to \mathbb Z_\lambda-linear endomorphisms of the \lambda-adic Tate module TateModule lam (Jac q M'), and tateGal, tateHecke, tateGL2 are the compositions with galJac, heckeJac, gl2Jac, each acting termwise on the sequences presenting the Tate module.
Relation to Mathlib
Mathlib supplies the ambient ingredients used here (primitive roots, ZMod.unitsMap, modular forms with the slash action, Laurent series, matrix groups); the modular function fields, their divisor class groups, the diamond and Hecke operators, the abstract Hecke ring HeckeAlg and the Tate module are the project's own notions.
Where it is used
The full level-q Jacobian assembled here is the module on which the Galois group, the Hecke ring and \mathrm{GL}_2(\mathbb F_q) act simultaneously, as needed for the analysis of the representation at q in the level-lowering step; the imported notion of a representation cuspidal of a given type is what this action is tested against.
References
- K. A. Ribet, On modular representations of \mathrm{Gal}(\overline{\mathbb{Q}}/\mathbb{Q}) arising from modular forms, Inventiones Mathematicae 100 (1990), 431–476
- G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, Publications of the Mathematical Society of Japan 11, Princeton University Press, 1971
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 422 lines
- 75 declarations
- used in the statements of 875 theorems and imported by 898 proofs
- imports 3 definition modules
Source file: Definitions/Def_ModularCurve_FullLevelJacobian.lean
Declarations
- theorem
ModularCurve.FullLevel.dvd_sq_mul - def
ModularCurve.FullLevel.levelH - theorem
ModularCurve.FullLevel.mem_levelH_iff - abbrev
ModularCurve.FullLevel.fieldBar - abbrev
ModularCurve.FullLevel.jacComp - def
ModularCurve.FullLevel.Idx - def
ModularCurve.FullLevel.Idx.val - theorem
ModularCurve.FullLevel.Idx.ext - theorem
ModularCurve.FullLevel.Idx.isPrimitiveRoot - def
ModularCurve.FullLevel.Idx.mk - theorem
ModularCurve.FullLevel.Idx.val_mk - theorem
ModularCurve.FullLevel.Idx.val_smul - def
ModularCurve.FullLevel.Idx.pow - theorem
ModularCurve.FullLevel.Idx.val_pow - def
ModularCurve.FullLevel.Jac - def
ModularCurve.FullLevel.Jac.eval - def
ModularCurve.FullLevel.Jac.mk - theorem
ModularCurve.FullLevel.Jac.eval_mk - theorem
ModularCurve.FullLevel.Jac.ext - theorem
ModularCurve.FullLevel.Jac.eval_add - theorem
ModularCurve.FullLevel.Jac.eval_zero - theorem
ModularCurve.FullLevel.Jac.eval_neg - theorem
ModularCurve.FullLevel.Jac.eval_sub - theorem
ModularCurve.FullLevel.Jac.eval_zsmul - theorem
ModularCurve.FullLevel.Jac.eval_nsmul - def
ModularCurve.FullLevel.Jac.mapIdx - theorem
ModularCurve.FullLevel.Jac.mapIdx_eval - def
ModularCurve.FullLevel.galJac - theorem
ModularCurve.FullLevel.galJac_eval - def
ModularCurve.FullLevel.conjElem - def
ModularCurve.FullLevel.IsLevelAutBar - def
ModularCurve.FullLevel.levelAutBar - theorem
ModularCurve.FullLevel.isLevelAutBar_levelAutBar - theorem
ModularCurve.FullLevel.levelAutBar_of_not - def
ModularCurve.FullLevel.levelOp - theorem
ModularCurve.FullLevel.levelOp_apply - theorem
ModularCurve.FullLevel.levelOp_of_not - def
ModularCurve.FullLevel.LevelAutInputs - def
ModularCurve.FullLevel.redQ - def
ModularCurve.FullLevel.diagOneElem - theorem
ModularCurve.FullLevel.coe_diagOneElem - def
ModularCurve.FullLevel.slJac - theorem
ModularCurve.FullLevel.slJac_eval - def
ModularCurve.FullLevel.diagJac - theorem
ModularCurve.FullLevel.diagJac_eval - def
ModularCurve.FullLevel.GL2Laws - def
ModularCurve.FullLevel.gl2Jac - theorem
ModularCurve.FullLevel.gl2Jac_redQ - theorem
ModularCurve.FullLevel.gl2Jac_diagOneElem - theorem
ModularCurve.FullLevel.gl2Jac_of_not - def
ModularCurve.FullLevel.heckeGenJac - theorem
ModularCurve.FullLevel.heckeGenJac_of_dvd - theorem
ModularCurve.FullLevel.heckeGenJac_of_not_prime - theorem
ModularCurve.FullLevel.heckeGenJac_eval - def
ModularCurve.FullLevel.HeckeGenCommute - theorem
ModularCurve.FullLevel.isMulCommutative_adjoin_heckeGenJac - def
ModularCurve.FullLevel.heckeJacAux - theorem
ModularCurve.FullLevel.heckeJacAux_heckeGen - def
ModularCurve.FullLevel.heckeJac - theorem
ModularCurve.FullLevel.heckeJac_heckeGen - theorem
ModularCurve.FullLevel.heckeJac_heckeGen_of_not - theorem
ModularCurve.FullLevel.heckeJac_heckeGen_of_dvd - def
ModularCurve.FullLevel.tateEnd - theorem
ModularCurve.FullLevel.tateEnd_apply_coe - def
ModularCurve.FullLevel.tateGal - def
ModularCurve.FullLevel.tateHecke - def
ModularCurve.FullLevel.tateGL2 - theorem
ModularCurve.FullLevel.tateGal_apply_coe - theorem
ModularCurve.FullLevel.tateHecke_apply_coe - theorem
ModularCurve.FullLevel.tateGL2_apply_coe - theorem
ModularCurve.FullLevel.tateHecke_heckeGen_of_dvd
Source
import Definitions.Def_ModularCurve_XHOperators import Definitions.Def_CuspidalType_IsCuspidalOfType import Definitions.Def_HeckeGalois_EichlerShimura set_option autoImplicit false noncomputable section open UpperHalfPlane IntermediateField HahnSeries AlgebraicCurve CongruenceSubgroup open scoped MatrixGroups ModularForm namespace ModularCurve.FullLevel section Level variable (q M' : ℕ) theorem dvd_sq_mul : q ∣ q ^ 2 * M' := Dvd.dvd.mul_right (dvd_pow_self q two_ne_zero) M' def levelH : Subgroup (ZMod (q ^ 2 * M'))ˣ := (ZMod.unitsMap (dvd_sq_mul q M')).ker theorem mem_levelH_iff (u : (ZMod (q ^ 2 * M'))ˣ) : u ∈ levelH q M' ↔ ZMod.unitsMap (dvd_sq_mul q M') u = 1 := MonoidHom.mem_ker abbrev fieldBar : IntermediateField (AlgebraicClosure ℚ) (LaurentSeries (AlgebraicClosure ℚ)) := xHFunctionFieldBar (q ^ 2 * M') (levelH q M') abbrev jacComp : Type := JH (q ^ 2 * M') (levelH q M') end Level section Idx variable (q : ℕ) def Idx : Type := ↥(primitiveRoots q (AlgebraicClosure ℚ)) instance : Fintype (Idx q) := inferInstanceAs (Fintype ↥(primitiveRoots q (AlgebraicClosure ℚ))) instance : DecidableEq (Idx q) := Classical.decEq _ variable {q} def Idx.val (ζ : Idx q) : AlgebraicClosure ℚ := (ζ : ↥(primitiveRoots q (AlgebraicClosure ℚ))).1 theorem Idx.ext {ζ ζ' : Idx q} (h : ζ.val = ζ'.val) : ζ = ζ' := Subtype.ext h variable [Fact q.Prime] theorem Idx.isPrimitiveRoot (ζ : Idx q) : IsPrimitiveRoot ζ.val q := (mem_primitiveRoots (Fact.out : q.Prime).pos).1 (ζ : ↥(primitiveRoots q (AlgebraicClosure ℚ))).2 def Idx.mk (z : AlgebraicClosure ℚ) (hz : IsPrimitiveRoot z q) : Idx q := ⟨z, (mem_primitiveRoots (Fact.out : q.Prime).pos).2 hz⟩ @[simp] theorem Idx.val_mk (z : AlgebraicClosure ℚ) (hz : IsPrimitiveRoot z q) : (Idx.mk z hz).val = z := rfl instance : MulAction (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) (Idx q) where smul σ ζ := Idx.mk (σ ζ.val) (ζ.isPrimitiveRoot.map_of_injective σ.injective) one_smul _ := Idx.ext rfl mul_smul _ _ _ := Idx.ext rfl @[simp] theorem Idx.val_smul (σ : AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) (ζ : Idx q) : (σ • ζ).val = σ ζ.val := rfl def Idx.pow (d : (ZMod q)ˣ) (ζ : Idx q) : Idx q := Idx.mk (ζ.val ^ (d : ZMod q).val) (ζ.isPrimitiveRoot.pow_of_coprime _ (ZMod.val_coe_unit_coprime d)) @[simp] theorem Idx.val_pow (d : (ZMod q)ˣ) (ζ : Idx q) : (ζ.pow d).val = ζ.val ^ (d : ZMod q).val := rfl end Idx section Carrier variable (q : ℕ) (M' : ℕ) def Jac : Type := Idx q → jacComp q M' instance : AddCommGroup (Jac q M') := inferInstanceAs (AddCommGroup (Idx q → jacComp q M')) variable {q M'} def Jac.eval (x : Jac q M') (ζ : Idx q) : jacComp q M' := (id x : Idx q → jacComp q M') ζ def Jac.mk (f : Idx q → jacComp q M') : Jac q M' := (id f : Jac q M') @[simp] theorem Jac.eval_mk (f : Idx q → jacComp q M') (ζ : Idx q) : (Jac.mk f).eval ζ = f ζ := rfl theorem Jac.ext {x y : Jac q M'} (h : ∀ ζ, x.eval ζ = y.eval ζ) : x = y := funext h @[simp] theorem Jac.eval_add (x y : Jac q M') (ζ : Idx q) : (x + y).eval ζ = x.eval ζ + y.eval ζ := rfl @[simp] theorem Jac.eval_zero (ζ : Idx q) : (0 : Jac q M').eval ζ = 0 := rfl @[simp] theorem Jac.eval_neg (x : Jac q M') (ζ : Idx q) : (-x).eval ζ = -x.eval ζ := rfl @[simp] theorem Jac.eval_sub (x y : Jac q M') (ζ : Idx q) : (x - y).eval ζ = x.eval ζ - y.eval ζ := rfl @[simp] theorem Jac.eval_zsmul (n : ℤ) (x : Jac q M') (ζ : Idx q) : (n • x).eval ζ = n • x.eval ζ := rfl @[simp] theorem Jac.eval_nsmul (n : ℕ) (x : Jac q M') (ζ : Idx q) : (n • x).eval ζ = n • x.eval ζ := rfl def Jac.mapIdx (T : Idx q → (jacComp q M' →+ jacComp q M')) (s : Idx q → Idx q) : Jac q M' →+ Jac q M' where toFun x := Jac.mk fun ζ => T ζ (x.eval (s ζ)) map_zero' := Jac.ext fun ζ => by simp only [Jac.eval_mk, Jac.eval_zero, map_zero] map_add' x y := Jac.ext fun ζ => by simp only [Jac.eval_mk, Jac.eval_add, map_add] @[simp] theorem Jac.mapIdx_eval (T : Idx q → (jacComp q M' →+ jacComp q M')) (s : Idx q → Idx q) (x : Jac q M') (ζ : Idx q) : (Jac.mapIdx T s x).eval ζ = T ζ (x.eval (s ζ)) := rfl end Carrier section Galois variable (q : ℕ) [Fact q.Prime] (M' : ℕ) local notation "Gal" => (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) def galJac : Gal →* AddMonoid.End (Jac q M') where toFun σ := { toFun := fun x => Jac.mk fun ζ => σ • x.eval (σ⁻¹ • ζ) map_zero' := Jac.ext fun ζ => by simp only [Jac.eval_mk, Jac.eval_zero] exact smul_zero (A := jacComp q M') σ map_add' := fun x y => Jac.ext fun ζ => by simp only [Jac.eval_mk, Jac.eval_add] exact smul_add (A := jacComp q M') σ _ _ } map_one' := by refine AddMonoidHom.ext fun x => Jac.ext fun ζ => ?_ show (1 : Gal) • x.eval ((1 : Gal)⁻¹ • ζ) = x.eval ζ rw [inv_one, one_smul, one_smul] map_mul' σ τ := by refine AddMonoidHom.ext fun x => Jac.ext fun ζ => ?_ show (σ * τ) • x.eval ((σ * τ)⁻¹ • ζ) = σ • (τ • x.eval (τ⁻¹ • (σ⁻¹ • ζ))) rw [mul_smul, mul_inv_rev, mul_smul] theorem galJac_eval (σ : Gal) (x : Jac q M') (ζ : Idx q) : (galJac q M' σ x).eval ζ = σ • x.eval (σ⁻¹ • ζ) := rfl end Galois section LevelAut variable (q : ℕ) [Fact q.Prime] (M' : ℕ) def conjElem (γ : SL(2, ℤ)) : GL (Fin 2) ℝ := Matrix.GeneralLinearGroup.mkOfDetNeZero !![((γ 0 0 : ℤ) : ℝ), ((γ 0 1 : ℤ) : ℝ) / q; (q : ℝ) * ((γ 1 0 : ℤ) : ℝ), ((γ 1 1 : ℤ) : ℝ)] (by have hq : (q : ℝ) ≠ 0 := by exact_mod_cast (Fact.out : q.Prime).ne_zero have hdet : ((γ 0 0 : ℤ) : ℝ) * ((γ 1 1 : ℤ) : ℝ) - ((γ 0 1 : ℤ) : ℝ) * ((γ 1 0 : ℤ) : ℝ) = 1 := by have h := Matrix.SpecialLinearGroup.det_coe γ rw [Matrix.det_fin_two] at h exact_mod_cast h rw [Matrix.det_fin_two_of] have : ((γ 0 0 : ℤ) : ℝ) * ((γ 1 1 : ℤ) : ℝ) - ((γ 0 1 : ℤ) : ℝ) / q * ((q : ℝ) * ((γ 1 0 : ℤ) : ℝ)) = ((γ 0 0 : ℤ) : ℝ) * ((γ 1 1 : ℤ) : ℝ) - ((γ 0 1 : ℤ) : ℝ) * ((γ 1 0 : ℤ) : ℝ) := by field_simp rw [this, hdet] exact one_ne_zero) def IsLevelAutBar (ζ : Idx q) (γ : SL(2, ℤ)) (τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M') : Prop := ∀ (k : ℤ) (f g : ModularForm (CohCarrier.GammaH (q ^ 2 * M') (levelH q M') : Subgroup (GL (Fin 2) ℝ)) k) (pf pg : PowerSeries ℤ) (hf : IsIntegralQExp f pf) (hg : IsIntegralQExp g pg) (hg0 : intSeriesC ℚ pg ≠ 0) (ι : AlgebraicClosure ℚ →+* ℂ), ι ζ.val = Complex.exp (2 * Real.pi * Complex.I / q) → coeffMap ι ((τ ⟨coeffEmb (AlgebraicClosure ℚ) (intSeriesC ℚ pf / intSeriesC ℚ pg), coeffEmb_mem_laurentBaseChange (AlgebraicClosure ℚ) (div_mem_qExpFunctionFieldC f g hf hg hg0)⟩ : fieldBar q M') : LaurentSeries (AlgebraicClosure ℚ)) * HahnSeries.ofPowerSeries ℤ ℂ (qExpansion 1 (⇑g ∣[k] conjElem q γ)) = HahnSeries.ofPowerSeries ℤ ℂ (qExpansion 1 (⇑f ∣[k] conjElem q γ)) def levelAutBar (ζ : Idx q) (γ : SL(2, ℤ)) : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M' := haveI := Classical.dec (∃ τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M', IsLevelAutBar q M' ζ γ τ) if h : ∃ τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M', IsLevelAutBar q M' ζ γ τ then h.choose else AlgEquiv.refl variable {q M'} theorem isLevelAutBar_levelAutBar {ζ : Idx q} {γ : SL(2, ℤ)} (h : ∃ τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M', IsLevelAutBar q M' ζ γ τ) : IsLevelAutBar q M' ζ γ (levelAutBar q M' ζ γ) := by rw [levelAutBar, dif_pos h] exact h.choose_spec theorem levelAutBar_of_not {ζ : Idx q} {γ : SL(2, ℤ)} (h : ¬ ∃ τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M', IsLevelAutBar q M' ζ γ τ) : levelAutBar q M' ζ γ = AlgEquiv.refl := by rw [levelAutBar, dif_neg h] variable (q M') def levelOp (ζ : Idx q) (γ : SL(2, ℤ)) : jacComp q M' →+ jacComp q M' := DistribSMul.toAddMonoidHom (jacComp q M') (SemilinearAut.ofAlgAut (levelAutBar q M' ζ γ)) theorem levelOp_apply (ζ : Idx q) (γ : SL(2, ℤ)) (x : jacComp q M') : levelOp q M' ζ γ x = SemilinearAut.ofAlgAut (levelAutBar q M' ζ γ) • x := rfl variable {q M'} in theorem levelOp_of_not {ζ : Idx q} {γ : SL(2, ℤ)} (h : ¬ ∃ τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M', IsLevelAutBar q M' ζ γ τ) (x : jacComp q M') : levelOp q M' ζ γ x = x := by rw [levelOp_apply, levelAutBar_of_not h] have : SemilinearAut.ofAlgAut (AlgEquiv.refl : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M') = 1 := map_one _ rw [this, one_smul] def LevelAutInputs : Prop := ∀ (ζ : Idx q) (γ : SL(2, ℤ)), γ ∈ Gamma0 M' → ∃ τ : fieldBar q M' ≃ₐ[AlgebraicClosure ℚ] fieldBar q M', IsLevelAutBar q M' ζ γ τ end LevelAut section Operators variable (q : ℕ) [Fact q.Prime] (M' : ℕ) def redQ : SL(2, ℤ) →* CuspidalType.GL2 q := (Matrix.SpecialLinearGroup.toGL.comp (Matrix.SpecialLinearGroup.map (Int.castRingHom (ZMod q)))) def diagOneElem (d : (ZMod q)ˣ) : CuspidalType.GL2 q := Matrix.GeneralLinearGroup.mkOfDetNeZero !![1, 0; 0, (d : ZMod q)] (by rw [Matrix.det_fin_two_of]; simp [d.ne_zero]) @[simp] theorem coe_diagOneElem (d : (ZMod q)ˣ) : ((diagOneElem q d : CuspidalType.GL2 q) : Matrix (Fin 2) (Fin 2) (ZMod q)) = !![1, 0; 0, (d : ZMod q)] := rfl def slJac (γ : SL(2, ℤ)) : Jac q M' →+ Jac q M' := Jac.mapIdx (fun ζ => levelOp q M' ζ γ⁻¹) id @[simp] theorem slJac_eval (γ : SL(2, ℤ)) (x : Jac q M') (ζ : Idx q) : (slJac q M' γ x).eval ζ = levelOp q M' ζ γ⁻¹ (x.eval ζ) := rfl def diagJac (d : (ZMod q)ˣ) : Jac q M' →+ Jac q M' := Jac.mapIdx (fun _ => AddMonoidHom.id _) (Idx.pow d⁻¹) @[simp] theorem diagJac_eval (d : (ZMod q)ˣ) (x : Jac q M') (ζ : Idx q) : (diagJac q M' d x).eval ζ = x.eval (ζ.pow d⁻¹) := rfl def GL2Laws : Prop := ∃ G : CuspidalType.GL2 q →* AddMonoid.End (Jac q M'), (∀ γ : SL(2, ℤ), γ ∈ Gamma0 M' → G (redQ q γ) = slJac q M' γ) ∧ ∀ d : (ZMod q)ˣ, G (diagOneElem q d) = diagJac q M' d def gl2Jac : CuspidalType.GL2 q →* AddMonoid.End (Jac q M') := haveI := Classical.dec (GL2Laws q M') if h : GL2Laws q M' then h.choose else 1 variable {q M'} theorem gl2Jac_redQ (h : GL2Laws q M') (γ : SL(2, ℤ)) (hγ : γ ∈ Gamma0 M') : gl2Jac q M' (redQ q γ) = slJac q M' γ := by rw [gl2Jac, dif_pos h] exact h.choose_spec.1 γ hγ theorem gl2Jac_diagOneElem (h : GL2Laws q M') (d : (ZMod q)ˣ) : gl2Jac q M' (diagOneElem q d) = diagJac q M' d := by rw [gl2Jac, dif_pos h] exact h.choose_spec.2 d theorem gl2Jac_of_not (h : ¬ GL2Laws q M') : gl2Jac q M' = 1 := by rw [gl2Jac, dif_neg h] variable (q M') def heckeGenJac (ℓ : ℕ) : AddMonoid.End (Jac q M') := haveI := Classical.dec (ℓ.Prime ∧ ¬ ℓ ∣ q * M') if h : ℓ.Prime ∧ ¬ ℓ ∣ q * M' then haveI : NeZero ℓ := ⟨h.1.ne_zero⟩ have hq : ℓ.Coprime q := (Nat.Prime.coprime_iff_not_dvd h.1).2 fun hd => h.2 (hd.mul_right M') have hqM : ℓ.Coprime (q ^ 2 * M') := by refine Nat.Coprime.mul_right (Nat.Coprime.pow_right 2 hq) ?_ exact (Nat.Prime.coprime_iff_not_dvd h.1).2 fun hd => h.2 (hd.mul_left q) (Jac.mapIdx (fun _ => (diamondHBar (q ^ 2 * M') (levelH q M') (ZMod.unitOfCoprime ℓ hqM)⁻¹).comp (heckeOperatorHAlong (AlgebraicClosure ℚ) (q ^ 2 * M') (levelH q M') ℓ)) (Idx.pow (ZMod.unitOfCoprime ℓ hq)⁻¹) : Jac q M' →+ Jac q M') else 0 variable {q M'} theorem heckeGenJac_of_dvd {ℓ : ℕ} (h : ℓ ∣ q * M') : heckeGenJac q M' ℓ = 0 := by rw [heckeGenJac, dif_neg (fun h' => h'.2 h)] theorem heckeGenJac_of_not_prime {ℓ : ℕ} (h : ¬ ℓ.Prime) : heckeGenJac q M' ℓ = 0 := by rw [heckeGenJac, dif_neg (fun h' => h h'.1)] theorem heckeGenJac_eval {ℓ : ℕ} (hℓ : ℓ.Prime) (hℓqM : ¬ ℓ ∣ q * M') (hq : ℓ.Coprime q) (hqM : ℓ.Coprime (q ^ 2 * M')) (x : Jac q M') (ζ : Idx q) : (heckeGenJac q M' ℓ x).eval ζ = diamondHBar (q ^ 2 * M') (levelH q M') (ZMod.unitOfCoprime ℓ hqM)⁻¹ (haveI : NeZero ℓ := ⟨hℓ.ne_zero⟩; heckeOperatorHAlong (AlgebraicClosure ℚ) (q ^ 2 * M') (levelH q M') ℓ (x.eval (ζ.pow (ZMod.unitOfCoprime ℓ hq)⁻¹))) := by rw [heckeGenJac, dif_pos ⟨hℓ, hℓqM⟩] rfl variable (q M') def HeckeGenCommute : Prop := ∀ ℓ ℓ' : Nat.Primes, heckeGenJac q M' ℓ * heckeGenJac q M' ℓ' = heckeGenJac q M' ℓ' * heckeGenJac q M' ℓ variable {q M'} theorem isMulCommutative_adjoin_heckeGenJac (h : HeckeGenCommute q M') : IsMulCommutative (Algebra.adjoin ℤ (Set.range fun ℓ : Nat.Primes => heckeGenJac q M' ℓ)) := Algebra.isMulCommutative_adjoin ℤ (by rintro _ ⟨ℓ, rfl⟩ _ ⟨ℓ', rfl⟩ exact h ℓ ℓ') open scoped IsMulCommutative in def heckeJacAux (h : HeckeGenCommute q M') : HeckeAlg →ₐ[ℤ] (Algebra.adjoin ℤ (Set.range fun ℓ : Nat.Primes => heckeGenJac q M' ℓ) : Subalgebra ℤ (AddMonoid.End (Jac q M'))) := haveI := isMulCommutative_adjoin_heckeGenJac h MvPolynomial.aeval fun ℓ => (⟨heckeGenJac q M' ℓ, Algebra.subset_adjoin (Set.mem_range_self ℓ)⟩ : Algebra.adjoin ℤ (Set.range fun ℓ : Nat.Primes => heckeGenJac q M' ℓ)) open scoped IsMulCommutative in theorem heckeJacAux_heckeGen (h : HeckeGenCommute q M') (ℓ : Nat.Primes) : (heckeJacAux h (heckeGen ℓ) : AddMonoid.End (Jac q M')) = heckeGenJac q M' ℓ := by haveI := isMulCommutative_adjoin_heckeGenJac h rw [heckeJacAux, heckeGen, MvPolynomial.aeval_X] variable (q M') def heckeJac : HeckeAlg →+* AddMonoid.End (Jac q M') := haveI := Classical.dec (HeckeGenCommute q M') if h : HeckeGenCommute q M' then ((Algebra.adjoin ℤ (Set.range fun ℓ : Nat.Primes => heckeGenJac q M' ℓ)).val.comp (heckeJacAux h)).toRingHom else (Int.castRingHom (AddMonoid.End (Jac q M'))).comp (MvPolynomial.eval₂Hom (Int.castRingHom ℤ) (0 : Nat.Primes → ℤ)) variable {q M'} theorem heckeJac_heckeGen (h : HeckeGenCommute q M') (ℓ : Nat.Primes) : heckeJac q M' (heckeGen ℓ) = heckeGenJac q M' ℓ := by rw [heckeJac, dif_pos h] exact heckeJacAux_heckeGen h ℓ theorem heckeJac_heckeGen_of_not (h : ¬ HeckeGenCommute q M') (ℓ : Nat.Primes) : heckeJac q M' (heckeGen ℓ) = 0 := by rw [heckeJac, dif_neg h, heckeGen, RingHom.comp_apply, MvPolynomial.eval₂Hom_zero_apply, MvPolynomial.constantCoeff_X, map_zero, map_zero] theorem heckeJac_heckeGen_of_dvd (ℓ : Nat.Primes) (hℓ : (ℓ : ℕ) ∣ q * M') : heckeJac q M' (heckeGen ℓ) = 0 := by by_cases h : HeckeGenCommute q M' · rw [heckeJac_heckeGen h, heckeGenJac_of_dvd hℓ] · exact heckeJac_heckeGen_of_not h ℓ end Operators section Tate variable (q : ℕ) [Fact q.Prime] (M' : ℕ) (lam : ℕ) [Fact lam.Prime] local notation "Gal" => (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) example : DistribMulAction (AddMonoid.End (Jac q M')) (Jac q M') := inferInstance def tateEnd : AddMonoid.End (Jac q M') →+* Module.End ℤ_[lam] (TateModule lam (Jac q M')) where toFun := TateModule.rep lam (Jac q M') (AddMonoid.End (Jac q M')) map_one' := map_one _ map_mul' f g := map_mul _ f g map_zero' := LinearMap.ext fun _ => Subtype.ext (funext fun _ => rfl) map_add' _ _ := LinearMap.ext fun _ => Subtype.ext (funext fun _ => rfl) omit [Fact q.Prime] in theorem tateEnd_apply_coe (f : AddMonoid.End (Jac q M')) (x : TateModule lam (Jac q M')) (n : ℕ) : ((tateEnd q M' lam f x : TateModule lam (Jac q M')) : ℕ → Jac q M') n = f ((x : ℕ → Jac q M') n) := rfl def tateGal : Gal →* Module.End ℤ_[lam] (TateModule lam (Jac q M')) := (tateEnd q M' lam).toMonoidHom.comp (galJac q M') def tateHecke : HeckeAlg →+* Module.End ℤ_[lam] (TateModule lam (Jac q M')) := (tateEnd q M' lam).comp (heckeJac q M') def tateGL2 : CuspidalType.GL2 q →* Module.End ℤ_[lam] (TateModule lam (Jac q M')) := (tateEnd q M' lam).toMonoidHom.comp (gl2Jac q M') theorem tateGal_apply_coe (σ : Gal) (x : TateModule lam (Jac q M')) (n : ℕ) : ((tateGal q M' lam σ x : TateModule lam (Jac q M')) : ℕ → Jac q M') n = galJac q M' σ ((x : ℕ → Jac q M') n) := rfl theorem tateHecke_apply_coe (t : HeckeAlg) (x : TateModule lam (Jac q M')) (n : ℕ) : ((tateHecke q M' lam t x : TateModule lam (Jac q M')) : ℕ → Jac q M') n = heckeJac q M' t ((x : ℕ → Jac q M') n) := rfl theorem tateGL2_apply_coe (g : CuspidalType.GL2 q) (x : TateModule lam (Jac q M')) (n : ℕ) : ((tateGL2 q M' lam g x : TateModule lam (Jac q M')) : ℕ → Jac q M') n = gl2Jac q M' g ((x : ℕ → Jac q M') n) := rfl theorem tateHecke_heckeGen_of_dvd (ℓ : Nat.Primes) (hℓ : (ℓ : ℕ) ∣ q * M') : tateHecke q M' lam (heckeGen ℓ) = 0 := by rw [tateHecke, RingHom.comp_apply, heckeJac_heckeGen_of_dvd ℓ hℓ, map_zero] end Tate end ModularCurve.FullLevel end
Statements phrased using this module (875)
- Full-level Tate datum: newform eigenspaces and Drinfeld specialisation
FullLevelTate.exists_datum_forall_exists_eigenIsoHom_ne_bot_and_exists_drinfeldSpecialization_of_levelAutInputs6,588 below · depth 16 - GL₂ generator laws on Jac(q,M') when q∤ M'
ModularCurve.FullLevel.gl2Laws_of_not_dvd34 below · depth 16 - Hecke generators on the full-level Jacobian commute
ModularCurve.FullLevel.heckeGenCommute278 below · depth 16 - Existence of level automorphisms when q ∤ M'
ModularCurve.FullLevel.levelAutInputs_of_not_dvd31 below · depth 16 - Inertia at ℓ ∤ qM'λ acts trivially on T_λ(Jac)
ModularCurve.FullLevel.tateGal_eq_one_of_mem_inertiaSubgroupIn974 below · depth 16 - Galois and GL₂(ℤ/q) actions commute on the Tate module
ModularCurve.FullLevel.tateGal_mul_tateGL2_comm32 below · depth 16 - Hecke and GL₂(mathbb F_q) actions commute on the Tate module
ModularCurve.FullLevel.tateHecke_mul_tateGL2_comm86 below · depth 16 - Hecke and Galois operators commute on the Tate module
ModularCurve.FullLevel.tateHecke_mul_tateGal_comm11 below · depth 16 - Drinfeld specialisation of the full level-q Tate module
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_comp_eq_zero_imp_of_levelAutInputs6,297 below · depth 17 - Scalars act by inverse diamond and squared component shift
ModularCurve.FullLevel.eval_gl2Jac_scalarElem_eq_diamondHBar_inv_eval_pow67 below · depth 17 - Level automorphisms lift to the Hecke top curve
ModularCurve.FullLevel.exists_algEquiv_intertwinesAlong_heckeAlphaHBar_heckeBetaHBar_levelAutBar33 below · depth 17 - Finite freeness and base-changed actions on T_λ(Jac(q,M'))
ModularCurve.FullLevel.exists_galoisRep_isAdicContinuous_heckeRep_gl2Rep_baseChange_tateModule_jac303 below · depth 17 - Cuspidal type of a newform in the full-level Tate module
ModularCurve.FullLevel.exists_ringHom_heckeGen_eq_and_exists_ne_zero_comm_baseChange_tateModule_jac790 below · depth 17 - Integral form of Shimura reciprocity for γ^sharp-slashing
ModularCurve.FullLevel.exists_smul_slash_conjElem_eq_sum_exp_pow_smul_of_mem_Gamma030 below · depth 17 - Level automorphisms compose contravariantly: τ_{αβ}=τ_β∘τ_α
ModularCurve.FullLevel.levelAutBar_mul32 below · depth 17 - Level automorphisms under diagonal conjugation modulo q
ModularCurve.FullLevel.levelAutBar_pow_inv_eq_levelAutBar_of_diag_conj32 below · depth 17 - Eichler–Shimura relation with scalar diamond at full level q
ModularCurve.FullLevel.tateGal_mul_tateGal_sub_tateHecke_mul_tateGal_add_smul_tateGL2_scalarElem_eq_zero1,028 below · depth 17 - The q=3 case of the full-level Drinfeld specialisation
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_comp_eq_zero_imp_of_levelAutInputs_of_eq_three5,086 below · depth 18 - Full-level Tate specialisation onto Drinfeld curves: the case q=2
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_comp_eq_zero_imp_of_levelAutInputs_of_eq_two5,072 below · depth 18 - Drinfeld-curve specialisation of the full-level Tate module, q≥ 5
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_comp_eq_zero_imp_of_levelAutInputs_of_five_le5,300 below · depth 18 - Newform K(q)-invariants embed into the dual Tate module
ModularCurve.FullLevel.exists_injective_dual_baseChange_tateModule_jac_of_isNewform_of_range_eq_span613 below · depth 18 - Shimura reciprocity for f∣_kγ^sharp at full level
ModularCurve.FullLevel.exists_ratCast_slash_conjElem_eq_sum_exp_pow_smul_of_mem_Gamma019 below · depth 18 - Hecke action on full-level components of an adelic newform
CuspForm.IsAdelicLiftOf.heckeTLinH_eq_qCoeff_smul_of_components_of_isNewform19 below · depth 19 - Base change of joint injectivity on the rational Tate module
FullLevelTate.eq_zero_of_forall_sum_baseChange_apply_eq_zero_of_baseChange_apply_eq_zero0 below · depth 19 - Drinfeld-curve specialisation of the full-level-3 Tate module
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_eq_zero_of_eq_three5,081 below · depth 19 - Drinfeld-curve specialisation at q=2 of the full-level Tate module
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_eq_zero_of_eq_two5,067 below · depth 19 - Drinfeld specialisation of the full-level Tate module, q ≥ 5
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_eq_zero_of_five_le5,295 below · depth 19 - Base change of an equivariant comparison map to K
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_of_comp_baseChange_eq0 below · depth 19 - Cusp forms embed in the dual complexified Tate module of J_H
ModularCurve.FullLevel.exists_injective_cuspForm_dual_baseChange_tateModule_jacComp_comm529 below · depth 19 - Periods intertwine slashing by α with conjugation by α
ModularCurve.periodMapOf_gammaH_eq_comp_of_coe_eq_slash2 below · depth 19 - Full-level Hecke sum transports to T_ℓ on Γ_H(q²M')
CuspForm.sum_slash_map_inv_slash_heckeDiagMatrix_eq_coe_heckeTLinH6 below · depth 20 - Existence of a full-level Tate datum with Drinfeld specialisation
FullLevelTate.exists_datum_forall_exists_eigenIsoHom_ne_bot_and_exists_drinfeldSpecialization_of_levelAutInputs_of_ne_two_of_cast_eq_neg_one6,323 below · depth 20 - Drinfeld specialisation of the full-level-3 Tate module, q=3
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_eq_zero_of_eq_three_of_dvd5,072 below · depth 20 - Drinfeld specialisation of the full-level-2 Tate module
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_eq_zero_of_eq_two_of_dvd5,058 below · depth 20 - Equivariant injection of λ-adic Tate modules for M' ∣ M''
ModularCurve.FullLevel.exists_injective_linearMap_tateModule_jac_comp_tateGal_eq_and_comp_tateGL2_eq_of_dvd68 below · depth 20 - Level-M' q-expansion field inside the full-level field
ModularCurve.FullLevel.laurentBaseChange_gamma0_le_fieldBar0 below · depth 20 - Tate module of J_H(q²M') versus period lattice, with level automorphisms
ModularCurve.exists_linearEquiv_tateModule_jH_padicInt_tensor_periodLatticeOf_levelAut528 below · depth 20 - Drinfeld specialisation of the full-level Tate module, case q≡-1
FullLevelTate.exists_linearMap_tateProd_comp_baseChange_eq_and_comp_eq_zero_imp_of_levelAutInputs_of_ne_two_of_cast_eq_neg_one6,032 below · depth 21 - Compatibility of level automorphisms under divisibility of levels
ModularCurve.FullLevel.coe_levelAutBar_apply_eq_coe_levelAutBar_apply_of_dvd_of_coe_eq0 below · depth 21 - Analytic uniformisation of J_H(q²M') with level automorphisms
ModularCurve.exists_injective_addMonoidHom_jH_quotient_periodLatticeOf_levelAut520 below · depth 21 - Equivariance of the Drinfeld specialisation from two generating cases
FullLevelTate.comp_baseChange_mul_eq_tateProdRep_comp_of_det_eq_one_of_diagOneElem0 below · depth 22 - Inertia of tame value α sends ζ to ζ^{N(α)}
ModularCurve.FullLevel.Idx.smul_eq_pow_of_tameCharacter_eq_of_algebraMap_eq_pow_succ0 below · depth 22 - Tame inertia with trivial character commutes with ℚ̄-level automorphisms
ModularCurve.FullLevel.arithmeticGalois_mul_ofAlgAut_levelAutBar_of_tameCharacter_eq_one40 below · depth 22 - Tate module of the full-level Jacobian splits over its components
ModularCurve.FullLevel.exists_linearEquiv_tateModule_jac_pi_tateGal_slJac_diagJac0 below · depth 22 - The q-scaled j-expansion is regular where j is
ModularCurve.FullLevel.ord_nonneg_of_ord_jBar_nonneg_of_coe_eq_jqNModC40 below · depth 22 - Galois covariance of the full-level automorphisms τ_{ζ,γ}
ModularCurve.FullLevel.arithmeticGalois_mul_ofAlgAut_levelAutBar_inv_smul32 below · depth 23 - Level automorphism acts by Q ↦ Q^{q^2} when q ∣ a
ModularCurve.FullLevel.coe_levelAutBar_apply_eq_qExpand_sq_of_dvd_of_mem_laurentBaseChange_gamma035 below · depth 23 - Unipotent γ acts on q-expansions as the ζᵇ-twist
ModularCurve.FullLevel.coe_levelAutBar_apply_eq_qTwist_of_redQ_eq_unipotent32 below · depth 23 - Level automorphism with q ∣ δ₀₀ moves the Gauss ring
ModularCurve.FullLevel.comap_levelAutBar_ne_of_dvd50 below · depth 23 - Level automorphism acts by root-of-unity twist when q∤ a
ModularCurve.FullLevel.exists_coe_levelAutBar_apply_eq_qTwist_of_not_dvd_of_mem_laurentBaseChange_gamma038 below · depth 23 - Integral functions independent over the level-M' field
ModularCurve.FullLevel.exists_family_liftIndep_gamma01,039 below · depth 23 - Transitivity of Γ₀(M') on P¹(𝔽_q) via reduction mod q
ModularCurve.FullLevel.exists_mem_gamma0_redQ_inv_smul_eq1 below · depth 23 - Residue of a q^q-expanded Γ₀(qM') function is q^q-expanded
ModularCurve.FullLevel.exists_mem_qExpFunctionFieldC_gamma0_and_residue_eq_qExpand_of_coe_eq_qExpand134 below · depth 23 - Genus of the full level-q curve over X₀(M')
ModularCurve.FullLevel.genusFF_fieldBar_eq414 below · depth 23 - Level automorphisms fix q-expansion images from Γ₀(qM')
ModularCurve.FullLevel.levelAutBar_apply_eq_self_of_coe_eq_qExpand34 below · depth 23 - Substitution t ↦ t^q carries the Γ₀(qM') field into `fieldBar`
ModularCurve.FullLevel.qExpand_coe_mem_fieldBar_of_mem34 below · depth 23 - Relative degree at most q(q-1)/2 over the q-expanded Γ₀(qM) field
ModularCurve.FullLevel.relfinrank_adjoin_qExpand_image_laurentBaseChange_gamma0_fieldBar_le261 below · depth 23 - Finiteness of the full-level field over the q-scaled Γ₀(qM) field
ModularCurve.FullLevel.relfinrank_adjoin_qExpand_image_laurentBaseChange_gamma0_fieldBar_ne_zero261 below · depth 23 - Residues of Gauss-integral level-M' functions give F_κ(Γ₀(M'))
ModularCurve.FullLevel.residue_mem_qExpFunctionFieldC_gamma0_and_surj6 below · depth 23 - Level automorphism with q ∣ a sends j to j(q^{q^2})
ModularCurve.FullLevel.coe_levelAutBar_apply_eq_qExpand_sq_jqModC_of_dvd43 below · depth 24 - At full level q=3, an antipodal level automorphism moves the Gauss ring
ModularCurve.FullLevel.comap_levelAutBar_ne_of_dvd_of_eq_three50 below · depth 24 - A level automorphism at q=2 moves the Gauss ring
ModularCurve.FullLevel.comap_levelAutBar_ne_of_dvd_of_eq_two50 below · depth 24 - Level-automorphism invariants are Γ₀(M')-expansions in q^q
ModularCurve.FullLevel.exists_coe_eq_qExpand_of_forall_levelAutBar_apply_eq1,104 below · depth 24 - A unit of the full-level field reducing to E₄E₆/Δ
ModularCurve.FullLevel.exists_fieldBar_mul_intSeriesC_eq_and_reduction_eisensteinRatio8 below · depth 24 - Level automorphisms over Γ₀(M') form a finite group
ModularCurve.FullLevel.exists_finite_subgroup_forall_levelAutBar_mem34 below · depth 24 - Genus of the full level-3 modular function field
ModularCurve.FullLevel.genusFF_fieldBar_eq_of_eq_three413 below · depth 24 - Genus of the full level-2 curve over X₀(M')
ModularCurve.FullLevel.genusFF_fieldBar_eq_of_eq_two555 below · depth 24 - Characteristic-2 genus of the Γ_H(4M') q-expansion field
ModularCurve.FullLevel.genusFF_xHFunctionFieldC_levelH_eq_of_eq_two872 below · depth 24 - Igusa level field as a degree (q-1)/2 Kummer extension
ModularCurve.FullLevel.isKummerGenerator_eisensteinRatio_and_igusaFunctionField_eq_xHFunctionFieldC_levelH1,085 below · depth 24 - Level automorphism fixes the Γ₀(M') subfield when q∣ b
ModularCurve.FullLevel.levelAutBar_apply_eq_self_of_dvd_of_coe_mem_laurentBaseChange_gamma035 below · depth 24 - Relative degree bound ≤ q(q-1)/2 at q=3
ModularCurve.FullLevel.relfinrank_adjoin_qExpand_image_laurentBaseChange_gamma0_fieldBar_le_of_eq_three261 below · depth 24 - Degree at most 2 at q=2 over the q-expanded Γ₀-field
ModularCurve.FullLevel.relfinrank_adjoin_qExpand_image_laurentBaseChange_gamma0_fieldBar_le_of_eq_two261 below · depth 24 - Index of ±Γ_H(q²M') for H the kernel mod q
ModularCurve.FullLevel.two_mul_index_gammaH_levelH_sup_zpowers_neg_one_eq5 below · depth 24 - Cusp count for Γ_H(q²M') with H=ker to (ℤ/q)^×
ModularCurve.FullLevel.two_mul_natCard_doubleCoset_gammaH_levelH_zpowers_T_eq8 below · depth 24 - Degree of the full-level field over scaled Γ₀(M') functions
ModularCurve.FullLevel.adjoin_qExpand_image_le_fieldBar_and_relfinrank_pos_and_le263 below · depth 25 - Fixed field of the level automorphisms for q = 3
ModularCurve.FullLevel.exists_coe_eq_qExpand_of_forall_levelAutBar_apply_eq_of_eq_three387 below · depth 25 - Fixed elements are q-rescaled Γ₀(M') functions (q=2)
ModularCurve.FullLevel.exists_coe_eq_qExpand_of_forall_levelAutBar_apply_eq_of_eq_two387 below · depth 25 - Level automorphisms fix level-Γ₀(M') functions read in q^q
ModularCurve.FullLevel.levelAutBar_apply_eq_self_of_coe_eq_qExpand_of_mem_laurentBaseChange_gamma034 below · depth 25 - Lower bound q(q²-1)≤ 2|G| for level automorphism groups
ModularCurve.FullLevel.mul_card_ge_of_forall_levelAutBar_mem1,100 below · depth 25 - In characteristic 3, the Igusa-level q-expansion field is κ(X₀(M'))
ModularCurve.FullLevel.xHFunctionFieldC_levelH_eq_modularFunctionFieldC_of_eq_three369 below · depth 25 - At q=2 the level-4M' q-expansion field descends to level M'
ModularCurve.FullLevel.xHFunctionFieldC_levelH_eq_modularFunctionFieldC_of_eq_two314 below · depth 25 - Full level 2: Γ_H(4M') field equals level-M' modular field
ModularCurve.FullLevel.xHFunctionFieldC_levelH_eq_modularFunctionFieldC_of_liesOverPrime_of_eq_two299 below · depth 25 - Full-level field over the q-scaled Γ₀(M') field: inclusion and degree bound, q=3
ModularCurve.FullLevel.adjoin_qExpand_image_le_fieldBar_and_relfinrank_pos_and_le_of_eq_three263 below · depth 26 - Full-level field over q-scaled Γ₀(M') field: q=2
ModularCurve.FullLevel.adjoin_qExpand_image_le_fieldBar_and_relfinrank_pos_and_le_of_eq_two263 below · depth 26 - Lower bound q(q²-1)≤ 2|G| for level automorphisms, q=3
ModularCurve.FullLevel.mul_card_ge_of_forall_levelAutBar_mem_of_eq_three383 below · depth 26 - Order bound q(q²-1)≤|G| for level automorphisms at q=2
ModularCurve.FullLevel.mul_card_ge_of_forall_levelAutBar_mem_of_eq_two383 below · depth 26 - Level field of the full-level model is a function field in j
ModularCurve.FullLevel.transcendental_and_finiteDimensional_adjoin_levelField126 below · depth 26 - Supersingular chart with q+1 ends and linked inertia
ModularCurve.FullLevel.AuxLevel.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_chartAlgFin_igusaSep_deckSep_linkedScalars_linkedInertia_of_tame3,449 below · depth 27 - Level automorphisms act transitively on the supersingular chart fibre
ModularCurve.FullLevel.exists_isLevelAutAt_map_chartAlgFin_eq_of_over_of_over_of_not_dvd2,870 below · depth 27 - Supersingular closed point of the j-chart above a given place
ModularCurve.FullLevel.exists_isMaximal_chartAlgFin_mem_ssJSet_over_of_ssPlaces354 below · depth 27 - Coefficientwise transport of the level field K₁· F₀
ModularCurve.FullLevel.exists_ringEquiv_laurentBaseChange_levelField_coe_eq_coeffMap0 below · depth 27 - Level descent of the rigid supersingular chart, linked inertia
ModularCurve.FullLevel.exists_supersingularDVR_affineChart_poles_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_linkedInertia_of_rigidChart3,152 below · depth 27 - Level-automorphism translates of j are Gauss units
ModularCurve.FullLevel.isUnit_levelAutBar_jBar_sub_algebraMap_of_gauss46 below · depth 27 - j(mathsf q^ℓ) lies in the level-(qℓ)²M' field and is integral over A[j(mathsf q)]
ModularCurve.FullLevel.qExpand_coeffEmb_jq_mem_and_mem_chartAlgFin_laurentBaseChange_xHFunctionField188 below · depth 27 - Rigid-chart decomposition order equals 2 placeWidthChar
ModularCurve.FullLevel.rigidChart_decompositionOrder_eq_two_mul_placeWidthChar_of_decompositionUnique_linkedScalars2,909 below · depth 27 - Level automorphisms for Γ₀(M') form a finite subgroup
ModularCurve.FullLevel.AuxLevel.exists_finite_subgroup_forall_mem_iff_exists_isLevelAutAt_of_exists_ringHom63 below · depth 28 - Level automorphisms over L for γ∈Γ₀(M')
ModularCurve.FullLevel.AuxLevel.exists_isLevelAutAt_of_mem_gamma0_of_exists_ringHom30 below · depth 28 - A G-invariant chart element avoiding all Igusa valuation rings
ModularCurve.FullLevel.AuxLevel.exists_mem_invariants_forall_igusaValuation_not_mem_of_rigidChart_framed258 below · depth 28 - Invariant element avoiding every valuation ring over another supersingular place
ModularCurve.FullLevel.AuxLevel.exists_mem_invariants_forall_valuationSubring_over_not_mem_of_rigidChart_framed2,878 below · depth 28 - Level and tame-inertia laws on the invariant chart
ModularCurve.FullLevel.AuxLevel.exists_quotField_ringHom_invariants_levelLaw_inertiaLaw_linkedInertia_of_rigidChart_framed262 below · depth 28 - Completed stalk at a supersingular point as Drinfeld chart
ModularCurve.FullLevel.AuxLevel.exists_ringEquiv_adicCompletion_stalk_drinfeldChart_of_mem_ssJSet_of_pow_eq_mul_moduliHasse_of_isAlgClosed3,198 below · depth 28 - Supersingular affine chart with ends and linked tame inertia
ModularCurve.FullLevel.AuxLevel.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_inertia_chartAlgFin_of_stalk_drinfeldChart_moduliHasse_igusaSep_deckSep_linkedScalars_linkedInertia794 below · depth 28 - Tame inertia on the completed Drinfeld chart, general constants
ModularCurve.FullLevel.AuxLevel.inertia_drinfeldChart_semilinear_linearPart_tameCharacter_diagOneElem_of_levelAut_linearPart_of_pow_eq_mul_of_isAlgClosed3,229 below · depth 28 - Level automorphisms over Γ₀(M'): uniqueness, composition, triviality
ModularCurve.FullLevel.AuxLevel.isLevelAutAt_unique_mul_one_of_exists_ringHom63 below · depth 28 - Level automorphisms of Γ₀(M') normalise G and preserve K₀
ModularCurve.FullLevel.AuxLevel.mul_mul_inv_mem_and_map_fixedField_of_isLevelAutAt_gamma064 below · depth 28 - Descended chart and supersingular valuation ring as G-invariants
ModularCurve.FullLevel.AuxLevel.supersingularDVR_affineChart_invariants_of_rigidChart_framed922 below · depth 28 - Supersingular chart with q+1 ends, Drinfeld quotient, tame inertia
ModularCurve.FullLevel.AuxLevelOne.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_chartAlgFin_igusaSep_deckSep_linkedScalars_linkedInertia_of_tame_of_dvd3,434 below · depth 28 - Level automorphisms matching two ideals over a supersingular place (q=3)
ModularCurve.FullLevel.Diamond.exists_isLevelAutAt_map_chartAlgFin_eq_of_over_of_over_of_not_dvd_of_eq_three_of_dvd2,861 below · depth 28 - Level automorphism carrying one chart point to another, q=2
ModularCurve.FullLevel.Diamond.exists_isLevelAutAt_map_chartAlgFin_eq_of_over_of_over_of_not_dvd_of_eq_two_of_dvd2,861 below · depth 28 - Supersingular closed point on the j-chart, diamond frame, q=3
ModularCurve.FullLevel.Diamond.exists_isMaximal_chartAlgFin_mem_ssJSet_over_of_ssPlaces_of_eq_three_of_dvd29 below · depth 28 - Supersingular maximal ideal of the j-chart at q=2
ModularCurve.FullLevel.Diamond.exists_isMaximal_chartAlgFin_mem_ssJSet_over_of_ssPlaces_of_eq_two_of_dvd29 below · depth 28 - Level descent of the rigid Γ_{H_1} chart at q=3
ModularCurve.FullLevel.Diamond.exists_supersingularDVR_affineChart_poles_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_linkedInertia_of_rigidChart_of_eq_three_of_dvd3,146 below · depth 28 - Level descent of the rigid chart at q = 2
ModularCurve.FullLevel.Diamond.exists_supersingularDVR_affineChart_poles_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_linkedInertia_of_rigidChart_of_eq_two_of_dvd3,148 below · depth 28 - Rigid-chart rotation order equals place width at q=2
ModularCurve.FullLevel.Diamond.rigidChart_decompositionOrder_eq_placeWidthChar_of_decompositionUnique_linkedScalars_of_eq_two_of_dvd2,899 below · depth 28 - Rigid-chart decomposition order is twice the place width (q=3)
ModularCurve.FullLevel.Diamond.rigidChart_decompositionOrder_eq_two_mul_placeWidthChar_of_decompositionUnique_linkedScalars_of_eq_three_of_dvd2,899 below · depth 28 - Descended fixed field of the rigid level model equals F₀
ModularCurve.FullLevel.exists_algEquiv_fixedField_levelField_coeffMap_eq_qExpand_framed77 below · depth 28 - Chart-pole and other-pole clauses transported to the level field
ModularCurve.FullLevel.exists_chartPole_otherPole_levelField_of_fixedField_of_algEquiv_framed276 below · depth 28 - Changing the primitive root twists a level automorphism by diag(1,d)
ModularCurve.FullLevel.exists_isLevelAutAt_conj_of_isLevelAutAt_of_isPrimitiveRoot21 below · depth 28 - A maximal ideal of the j-chart lying over a supersingular place
ModularCurve.FullLevel.exists_isMaximal_chartAlgFin_over_of_ssPlaces87 below · depth 28 - Nodes of the rigid model descended to K_ℓ^G
ModularCurve.FullLevel.exists_moduliHasse_commonChart_nodes_igusaSep_deckSep_linkedScalars_fixedField_of_rigidChart_ends1,290 below · depth 28 - Transport of the node block along the level-field identification
ModularCurve.FullLevel.exists_moduliHasse_commonChart_nodes_igusaSep_levelField_of_nodes_fixedField_of_algEquiv_framed276 below · depth 28 - Smoothness of the full-level integral model on the Igusa branch
ModularCurve.FullLevel.exists_opens_smooth_comp_toBase_of_forall_mem_nonunits_gauss_of_forall_not_mem_ssJSet_twoChartIntegralModel_xH_of_isAlgebraic1,851 below · depth 28 - Special-fibre points of the rigid chart as level structures
ModularCurve.FullLevel.exists_ssFibreDictionary_chartAlgFin_rigidDataPow2,868 below · depth 28 - Level automorphisms preserve the j-finite chart algebra
ModularCurve.FullLevel.map_mem_chartAlgFin_of_isLevelAutAt_of_mem_Gamma085 below · depth 28 - Decomposition order at a supersingular point equals #Aut(E,C)
ModularCurve.FullLevel.rigidChart_decompositionOrder_eq_natCard_rationalAut_of_moduliPlace_of_decompositionUnique_linkedScalars2,907 below · depth 28 - Drinfeld special fibre and level action on the blow-up chart
ModularCurve.FullLevel.AuxLevel.blowupChart_drinfeldFibre_levelAut_decomposition_linkedScalars_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_moduliHasse181 below · depth 29 - Tame inertia on the exceptional Drinfeld fibre
ModularCurve.FullLevel.AuxLevel.blowupChart_drinfeldFibre_levelAut_linkedScalars_inertia_of_decomposition_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart_inertia183 below · depth 29 - Weighted blow-up chart C[J/varpiₜ] and its exceptional valuation ring
ModularCurve.FullLevel.AuxLevel.exists_blowupChart_eq_adjoin_exceptionalValuation_of_drinfeldChartWitness_of_stalk_drinfeldChart_moduliHasse189 below · depth 29 - Base change of the j-chart along the cyclotomic constants
ModularCurve.FullLevel.AuxLevel.exists_chartAlgFin_tensorProduct_ringEquiv_of_cyclotomicConstants_of_isAlgClosed2,268 below · depth 29 - Ends of the blown-up supersingular chart: cyclic decomposition and crossings
ModularCurve.FullLevel.AuxLevel.exists_cyclicDecomposition_ends_moduliHasse_igusaSepTranslate_commonChart_cover_blowupChart_linked_of_eq_adjoin_of_drinfeldChartWitness758 below · depth 29 - Poles of the blow-up chart along Igusa and off-orbit valuations
ModularCurve.FullLevel.AuxLevel.exists_mem_blowupChart_not_mem_igusaValuation_orbitPole_of_eq_adjoin_of_drinfeldChartWitness_of_stalk_drinfeldChart269 below · depth 29 - Descended supersingular chart reduces to a quotient Drinfeld curve
ModularCurve.FullLevel.AuxLevel.exists_quotField_ringHom_invariants_of_rigidChart_framed259 below · depth 29 - Base change of a cyclotomic Drinfeld chart witness
ModularCurve.FullLevel.AuxLevel.exists_ringEquiv_adicCompletion_stalk_drinfeldChart_baseChange_of_cyclotomicWitness_of_isAlgClosed248 below · depth 29 - Drinfeld chart for the completed stalk, with level and inertia riders
ModularCurve.FullLevel.AuxLevel.exists_ringEquiv_adicCompletion_stalk_drinfeldChart_levelAut_linearPart_inertia_of_mem_ssJSet_of_pow_eq_mul_of_isAlgClosed3,194 below · depth 29 - Drinfeld local chart at a supersingular point, full level
ModularCurve.FullLevel.AuxLevel.exists_ringEquiv_adicCompletion_stalk_drinfeldChart_of_mem_ssJSet_twoChartIntegralModel3,137 below · depth 29 - Initial form of the moduli j-invariant on Drinfeld charts
ModularCurve.FullLevel.AuxLevel.exists_sub_const_eq_mk_of_mem_pow_isUnit_homogeneous_drinfeldChart_of_ringEquiv_adicCompletion_stalk2,298 below · depth 29 - Finiteness of the Γ(q)∩Γ₀(M') level-automorphism group
ModularCurve.FullLevel.AuxLevel.finite_and_natCard_dvd_of_eq_closure_isLevelAutAt_gamma65 below · depth 29 - Formal smoothness of the descended chart B₀ over A∩ k₀
ModularCurve.FullLevel.AuxLevel.formallySmooth_invariants_of_rigidChart_framed321 below · depth 29 - Transport of the semilinear tame-inertia law between Drinfeld charts
ModularCurve.FullLevel.AuxLevel.inertia_drinfeldChart_semilinear_linearPart_transport_of_levelAut_linearPart_of_pow_eq_mul_of_isAlgClosed3,209 below · depth 29 - Supersingular fibre points of the two-chart model are maximal
ModularCurve.FullLevel.AuxLevel.isMaximal_asIdeal_and_algebraMap_mem_of_mem_ssJSet_of_exists_ringHom8 below · depth 29 - Drinfeld chart for the completed supersingular stalk
ModularCurve.FullLevel.AuxLevelOne.exists_ringEquiv_adicCompletion_stalk_drinfeldChart_of_mem_ssJSet_of_pow_eq_mul_moduliHasse_of_isPrimitiveRoot_mul_of_dvd3,185 below · depth 29 - Supersingular chart with Drinfeld ends, decomposition and inertia
ModularCurve.FullLevel.AuxLevelOne.exists_supersingularAffineChart_ends_moduliHasse_commonChart_orbitPoles_inertia_chartAlgFin_of_stalk_drinfeldChart_moduliHasse_igusaSep_deckSep_linkedScalars_linkedInertia_of_dvd622 below · depth 29 - Tame inertia on the Drinfeld chart: semilinear, linear part ctcdotdiag(1,d^{-q})
ModularCurve.FullLevel.AuxLevelOne.inertia_drinfeldChart_semilinear_linearPart_tameCharacter_diagOneElem_of_levelAut_linearPart_of_pow_eq_mul_of_isPrimitiveRoot_mul_of_dvd3,216 below · depth 29 - Invariant chart element outside every Igusa valuation ring, q=3
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_igusaValuation_not_mem_of_rigidChart_linkedScalars_of_eq_three_of_dvd34 below · depth 29 - Invariant chart element in no Igusa valuation ring of K₀
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_igusaValuation_not_mem_of_rigidChart_linkedScalars_of_eq_two_of_dvd34 below · depth 29 - Invariant element avoiding valuation rings over the other supersingular places
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_valuationSubring_over_not_mem_of_rigidChart_linkedScalars_of_eq_three_of_dvd2,869 below · depth 29 - Invariant function with poles over the other supersingular places
ModularCurve.FullLevel.Diamond.AuxLevel.exists_mem_invariants_forall_valuationSubring_over_not_mem_of_rigidChart_linkedScalars_of_eq_two_of_dvd2,869 below · depth 29 - Drinfeld reduction of the invariant chart at q=3, Γ₁(ℓ_g) frame
ModularCurve.FullLevel.Diamond.AuxLevel.exists_quotField_ringHom_invariants_levelLaw_inertiaLaw_linkedInertia_of_rigidChart_of_eq_three_of_dvd46 below · depth 29 - Level and tame-inertia laws on the invariant chart at q=2
ModularCurve.FullLevel.Diamond.AuxLevel.exists_quotField_ringHom_invariants_levelLaw_inertiaLaw_linkedInertia_of_rigidChart_of_eq_two_of_dvd47 below · depth 29 - Descent of the rigid chart to the fixed field K₀ at q=3
ModularCurve.FullLevel.Diamond.AuxLevel.supersingularDVR_affineChart_invariants_of_rigidChart_linkedScalars_of_eq_three_of_dvd895 below · depth 29
… and 725 more statements (search for the module name to find them).