Definitions/Def_CuspForm_TwoCuspLattice.lean
Two-cusp integral lattice in cusp forms and its reduction
Fix M\ge 1, a subgroup H\le(\mathbb{Z}/M)^\times, a weight k\in\mathbb{Z}, a natural number p, a subring A\subseteq\mathbb{C} and an ideal I\subseteq A, and write S_k(\Gamma_H(M)) for Mathlib's CuspForm space for the group \Gamma_H(M)=\{\gamma\in\Gamma_0(M):\gamma_{11}\bmod M\in H\}. First, heckeGenH S k assembles the operators indexed by the inductive generator type Gen M S: the constructor T ℓ (with \ell prime, \ell\notin S, \ell\nmid M) goes to heckeTLinH, U q (q prime, q\mid M) to heckeULinH, and dia d to diamondLinH; each of these is the corresponding slash-operator construction when the relevant stability predicate (StableT, StableU, StableD) holds and the zero map otherwise. heckeRingH M H k is the subring of \mathrm{End}_{\mathbb{C}}S_k(\Gamma_H(M)) generated by the image of this family for S=\emptyset; every heckeGenH S k g lies in it.
Second, twoCuspIntegralSet M H k p A is the set of f such that for all t\in heckeRingH M H k, all Atkin–Lehner data W for (M,p) (data R,a,b with M=pR and pa-Rb=1) and all n, both the n-th q-expansion coefficient of tf and that of (tf)\mid_k W lie in A. It contains 0 and is stable under heckeRingH; twoCuspLattice M H k p A is its A-span L, again Hecke-stable, and twoCuspEnd t is the induced A-linear endomorphism of L, unital and multiplicative in t.
Third, TwoCuspForms M H k p A I is the quotient L/IL, with its A- and A/I-module structures and scalar towers, the reduction map twoCuspReduce (surjective, with kernel IL), the induced A/I-linear operators twoCuspEndMod, their specialisations twoCuspGenMod at generators, and, for \chi: Gen M S \to A/I, the A/I-submodule twoCuspEigenspace I S χ of \omega with g\,\omega=\chi(g)\,\omega for every generator g.
Relation to Mathlib
Mathlib supplies the space CuspForm and q-expansions; the Hecke and diamond operators on \Gamma_H(M), the Atkin–Lehner data, the two-cusp integrality condition, the lattice and its reduction modulo an ideal are the project's own notions.
Where it is used
The lattice L is the integral structure on weight-two cusp forms cut out by integrality of the expansions at the two cusps \infty and w_p\infty, which is the form in which integral differentials on a semistable model with two-component special fibre at a prime exactly dividing the level are handled; the quotients L/IL and their simultaneous Hecke eigenspaces are the mod-I spaces on which the level-lowering part of the argument operates.
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
- N. M. Katz and B. Mazur, Arithmetic Moduli of Elliptic Curves, Annals of Mathematics Studies 108, Princeton University Press, 1985
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 226 lines
- 36 declarations
- used in the statements of 21 theorems and imported by 26 proofs
- imports 4 definition modules
Source file: Definitions/Def_CuspForm_TwoCuspLattice.lean
Imports
Imported by
Declarations
- def
CuspForm.heckeGenH - theorem
CuspForm.heckeGenH_T - theorem
CuspForm.heckeGenH_U - theorem
CuspForm.heckeGenH_dia - def
CuspForm.heckeRingH - theorem
CuspForm.heckeGenH_mem_heckeRingH - def
CuspForm.twoCuspIntegralSet - theorem
CuspForm.mem_twoCuspIntegralSet_iff - theorem
CuspForm.zero_mem_twoCuspIntegralSet - theorem
CuspForm.heckeRingH_apply_mem_twoCuspIntegralSet - def
CuspForm.twoCuspLattice - theorem
CuspForm.twoCuspIntegralSet_subset_twoCuspLattice - theorem
CuspForm.heckeRingH_apply_mem_twoCuspLattice - def
CuspForm.twoCuspEnd - theorem
CuspForm.coe_twoCuspEnd_apply - theorem
CuspForm.twoCuspEnd_one - theorem
CuspForm.twoCuspEnd_mul - def
CuspForm.TwoCuspForms - instance
CuspForm.instAddCommGroupTwoCuspForms - instance
CuspForm.instModuleTwoCuspForms - instance
CuspForm.instModuleQuotientTwoCuspForms - instance
CuspForm.instIsScalarTowerSelfTwoCuspForms - instance
CuspForm.instIsScalarTowerTwoCuspForms - def
CuspForm.twoCuspReduce - theorem
CuspForm.twoCuspReduce_surjective - theorem
CuspForm.ker_twoCuspReduce - theorem
CuspForm.twoCuspReduce_eq_zero_iff - theorem
CuspForm.mk_smul_twoCuspReduce - def
CuspForm.twoCuspEndModAux - def
CuspForm.twoCuspEndMod - theorem
CuspForm.twoCuspEndMod_reduce - theorem
CuspForm.twoCuspEndMod_comp_reduce - def
CuspForm.twoCuspGenMod - theorem
CuspForm.twoCuspGenMod_reduce - def
CuspForm.twoCuspEigenspace - theorem
CuspForm.mem_twoCuspEigenspace_iff
Source
import Mathlib import Definitions.Def_CohCarrier_Inst import Definitions.Def_CuspForm_HeckeOperatorFormsGammaH import Definitions.Def_ModularForm_AtkinLehnerDatum import Definitions.Def_FLTPrelim_Modularity set_option autoImplicit false noncomputable section open scoped MatrixGroups ModularForm open CongruenceSubgroup CohCarrier namespace CuspForm section HeckeRing variable {M : ℕ} [NeZero M] {H : Subgroup (ZMod M)ˣ} def heckeGenH (S : Set ℕ) (k : ℤ) : Gen M S → (CuspForm (GammaH M H) k →ₗ[ℂ] CuspForm (GammaH M H) k) | .T _ hℓ _ hℓM => heckeTLinH k hℓ hℓM | .U q _ _ => heckeULinH k q | .dia d => diamondLinH k d @[simp] theorem heckeGenH_T (S : Set ℕ) (k : ℤ) (ℓ : ℕ) (hℓ : ℓ.Prime) (hℓS : ℓ ∉ S) (hℓM : ¬ ℓ ∣ M) : heckeGenH (H := H) S k (.T ℓ hℓ hℓS hℓM) = heckeTLinH k hℓ hℓM := rfl @[simp] theorem heckeGenH_U (S : Set ℕ) (k : ℤ) (q : ℕ) (hq : q.Prime) (hqM : q ∣ M) : heckeGenH (H := H) S k (.U q hq hqM) = heckeULinH k q := rfl @[simp] theorem heckeGenH_dia (S : Set ℕ) (k : ℤ) (d : (ZMod M)ˣ) : heckeGenH (H := H) S k (.dia d) = diamondLinH k d := rfl variable (M H) in def heckeRingH (k : ℤ) : Subring (CuspForm (GammaH M H) k →ₗ[ℂ] CuspForm (GammaH M H) k) := Subring.closure (Set.range (heckeGenH (H := H) (∅ : Set ℕ) k)) theorem heckeGenH_mem_heckeRingH (S : Set ℕ) (k : ℤ) (g : Gen M S) : heckeGenH (H := H) S k g ∈ heckeRingH M H k := by refine Subring.subset_closure ?_ cases g with | T ℓ hℓ hℓS hℓM => exact ⟨.T ℓ hℓ (Set.notMem_empty ℓ) hℓM, rfl⟩ | U q hq hqM => exact ⟨.U q hq hqM, rfl⟩ | dia d => exact ⟨.dia d, rfl⟩ end HeckeRing section Lattice variable (M : ℕ) [NeZero M] (H : Subgroup (ZMod M)ˣ) (k : ℤ) (p : ℕ) (A : Subring ℂ) def twoCuspIntegralSet : Set (CuspForm (GammaH M H) k) := {f | ∀ t ∈ heckeRingH M H k, ∀ (W : ModularForm.AtkinLehnerDatum M p) (n : ℕ), ModularFormClass.qCoeff (⇑(t f)) n ∈ A ∧ ModularFormClass.qCoeff (ModularForm.alSlash W k ⇑(t f)) n ∈ A} variable {M H k p A} in theorem mem_twoCuspIntegralSet_iff (f : CuspForm (GammaH M H) k) : f ∈ twoCuspIntegralSet M H k p A ↔ ∀ t ∈ heckeRingH M H k, ∀ (W : ModularForm.AtkinLehnerDatum M p) (n : ℕ), ModularFormClass.qCoeff (⇑(t f)) n ∈ A ∧ ModularFormClass.qCoeff (ModularForm.alSlash W k ⇑(t f)) n ∈ A := Iff.rfl theorem zero_mem_twoCuspIntegralSet : (0 : CuspForm (GammaH M H) k) ∈ twoCuspIntegralSet M H k p A := by intro t _ W n have h0 : ModularFormClass.qCoeff (0 : UpperHalfPlane → ℂ) n = 0 := by simp [ModularFormClass.qCoeff, UpperHalfPlane.qExpansion_zero] have hW : ModularForm.alSlash W k (0 : UpperHalfPlane → ℂ) = 0 := by rw [ModularForm.alSlash_def]; exact SlashAction.zero_slash k _ refine ⟨?_, ?_⟩ · rw [map_zero, CuspForm.coe_zero, h0]; exact A.zero_mem · rw [map_zero, CuspForm.coe_zero, hW, h0]; exact A.zero_mem variable {M H k p A} in theorem heckeRingH_apply_mem_twoCuspIntegralSet {t : CuspForm (GammaH M H) k →ₗ[ℂ] CuspForm (GammaH M H) k} (ht : t ∈ heckeRingH M H k) {f : CuspForm (GammaH M H) k} (hf : f ∈ twoCuspIntegralSet M H k p A) : t f ∈ twoCuspIntegralSet M H k p A := by intro t' ht' W n have hmul : t' * t ∈ heckeRingH M H k := (heckeRingH M H k).mul_mem ht' ht exact hf (t' * t) hmul W n def twoCuspLattice : Submodule A (CuspForm (GammaH M H) k) := Submodule.span A (twoCuspIntegralSet M H k p A) theorem twoCuspIntegralSet_subset_twoCuspLattice : twoCuspIntegralSet M H k p A ⊆ (twoCuspLattice M H k p A : Set (CuspForm (GammaH M H) k)) := Submodule.subset_span variable {M H k p A} in theorem heckeRingH_apply_mem_twoCuspLattice {t : CuspForm (GammaH M H) k →ₗ[ℂ] CuspForm (GammaH M H) k} (ht : t ∈ heckeRingH M H k) {f : CuspForm (GammaH M H) k} (hf : f ∈ twoCuspLattice M H k p A) : t f ∈ twoCuspLattice M H k p A := by induction hf using Submodule.span_induction with | mem x hx => exact Submodule.subset_span (heckeRingH_apply_mem_twoCuspIntegralSet ht hx) | zero => rw [map_zero]; exact Submodule.zero_mem _ | add x y _ _ hx hy => rw [map_add]; exact Submodule.add_mem _ hx hy | smul a x _ hx => rw [show t (a • x) = a • t x from by rw [Subring.smul_def, Subring.smul_def, LinearMap.map_smul]] exact Submodule.smul_mem _ a hx variable {M H k p A} in def twoCuspEnd (t : heckeRingH M H k) : twoCuspLattice M H k p A →ₗ[A] twoCuspLattice M H k p A where toFun x := ⟨(t : CuspForm (GammaH M H) k →ₗ[ℂ] _) x, heckeRingH_apply_mem_twoCuspLattice t.2 x.2⟩ map_add' x y := Subtype.ext (by simp) map_smul' a x := Subtype.ext (by simp only [Submodule.coe_smul, RingHom.id_apply, Subring.smul_def, LinearMap.map_smul]) @[simp] theorem coe_twoCuspEnd_apply (t : heckeRingH M H k) (x : twoCuspLattice M H k p A) : ((twoCuspEnd t x : twoCuspLattice M H k p A) : CuspForm (GammaH M H) k) = (t : CuspForm (GammaH M H) k →ₗ[ℂ] _) x := rfl theorem twoCuspEnd_one : twoCuspEnd (p := p) (A := A) (1 : heckeRingH M H k) = LinearMap.id := LinearMap.ext fun _ => Subtype.ext rfl theorem twoCuspEnd_mul (t t' : heckeRingH M H k) : twoCuspEnd (p := p) (A := A) (t * t') = twoCuspEnd t ∘ₗ twoCuspEnd t' := LinearMap.ext fun _ => Subtype.ext rfl end Lattice section Reduction variable (M : ℕ) [NeZero M] (H : Subgroup (ZMod M)ˣ) (k : ℤ) (p : ℕ) (A : Subring ℂ) (I : Ideal A) def TwoCuspForms : Type := twoCuspLattice M H k p A ⧸ (I • ⊤ : Submodule A (twoCuspLattice M H k p A)) instance instAddCommGroupTwoCuspForms : AddCommGroup (TwoCuspForms M H k p A I) := inferInstanceAs (AddCommGroup (twoCuspLattice M H k p A ⧸ (I • ⊤ : Submodule A (twoCuspLattice M H k p A)))) instance instModuleTwoCuspForms : Module A (TwoCuspForms M H k p A I) := inferInstanceAs (Module A (twoCuspLattice M H k p A ⧸ (I • ⊤ : Submodule A (twoCuspLattice M H k p A)))) instance instModuleQuotientTwoCuspForms : Module (A ⧸ I) (TwoCuspForms M H k p A I) := (Module.isTorsionBySet_quotient_ideal_smul (twoCuspLattice M H k p A) I).module instance instIsScalarTowerSelfTwoCuspForms : IsScalarTower A A (TwoCuspForms M H k p A I) := inferInstanceAs (IsScalarTower A A (twoCuspLattice M H k p A ⧸ (I • ⊤ : Submodule A (twoCuspLattice M H k p A)))) instance instIsScalarTowerTwoCuspForms : IsScalarTower A (A ⧸ I) (TwoCuspForms M H k p A I) := ⟨fun a b x => by obtain ⟨c, rfl⟩ := Ideal.Quotient.mk_surjective b change (a * c) • x = a • (c • x) exact mul_smul a c x⟩ variable {M H k p A} in def twoCuspReduce : twoCuspLattice M H k p A →ₗ[A] TwoCuspForms M H k p A I := (I • ⊤ : Submodule A (twoCuspLattice M H k p A)).mkQ theorem twoCuspReduce_surjective : Function.Surjective (twoCuspReduce (M := M) (H := H) (k := k) (p := p) (A := A) I) := Submodule.mkQ_surjective _ theorem ker_twoCuspReduce : LinearMap.ker (twoCuspReduce (M := M) (H := H) (k := k) (p := p) (A := A) I) = (I • ⊤ : Submodule A (twoCuspLattice M H k p A)) := Submodule.ker_mkQ _ theorem twoCuspReduce_eq_zero_iff (x : twoCuspLattice M H k p A) : twoCuspReduce I x = 0 ↔ x ∈ (I • ⊤ : Submodule A (twoCuspLattice M H k p A)) := Submodule.Quotient.mk_eq_zero _ theorem mk_smul_twoCuspReduce (a : A) (x : twoCuspLattice M H k p A) : (Ideal.Quotient.mk I a) • twoCuspReduce I x = twoCuspReduce I (a • x) := rfl variable {M H k p A} in def twoCuspEndModAux (t : heckeRingH M H k) : TwoCuspForms M H k p A I →ₗ[A] TwoCuspForms M H k p A I := Submodule.mapQ (I • ⊤ : Submodule A (twoCuspLattice M H k p A)) (I • ⊤ : Submodule A (twoCuspLattice M H k p A)) (twoCuspEnd t) (by rw [← Submodule.map_le_iff_le_comap, Submodule.map_smul''] exact Submodule.smul_mono le_rfl le_top) variable {M H k p A} in def twoCuspEndMod (t : heckeRingH M H k) : TwoCuspForms M H k p A I →ₗ[A ⧸ I] TwoCuspForms M H k p A I := LinearMap.extendScalarsOfSurjective Ideal.Quotient.mk_surjective (twoCuspEndModAux I t) @[simp] theorem twoCuspEndMod_reduce (t : heckeRingH M H k) (x : twoCuspLattice M H k p A) : twoCuspEndMod I t (twoCuspReduce I x) = twoCuspReduce I (twoCuspEnd t x) := rfl theorem twoCuspEndMod_comp_reduce (t : heckeRingH M H k) : (twoCuspEndMod (p := p) (A := A) I t).restrictScalars A ∘ₗ twoCuspReduce I = twoCuspReduce I ∘ₗ twoCuspEnd t := rfl variable {M H k p A} in def twoCuspGenMod (S : Set ℕ) (g : Gen M S) : TwoCuspForms M H k p A I →ₗ[A ⧸ I] TwoCuspForms M H k p A I := twoCuspEndMod I ⟨heckeGenH S k g, heckeGenH_mem_heckeRingH S k g⟩ theorem twoCuspGenMod_reduce (S : Set ℕ) (g : Gen M S) (x : twoCuspLattice M H k p A) : twoCuspGenMod I S g (twoCuspReduce I x) = twoCuspReduce I (twoCuspEnd ⟨heckeGenH S k g, heckeGenH_mem_heckeRingH S k g⟩ x) := rfl variable {M H k p A} in def twoCuspEigenspace (S : Set ℕ) (χ : Gen M S → A ⧸ I) : Submodule (A ⧸ I) (TwoCuspForms M H k p A I) where carrier := {ω | ∀ g : Gen M S, twoCuspGenMod I S g ω = χ g • ω} zero_mem' g := by rw [map_zero, smul_zero] add_mem' {x y} hx hy g := by rw [map_add, hx g, hy g, smul_add] smul_mem' c {x} hx g := by rw [LinearMap.map_smul, hx g, smul_comm] variable {M H k p A} in theorem mem_twoCuspEigenspace_iff (S : Set ℕ) (χ : Gen M S → A ⧸ I) (ω : TwoCuspForms M H k p A I) : ω ∈ twoCuspEigenspace I S χ ↔ ∀ g : Gen M S, twoCuspGenMod I S g ω = χ g • ω := Iff.rfl end Reduction end CuspForm end
Statements phrased using this module (21)
- Multiplicity one for ordinary two-cusp eigenspaces mod π
CuspForm.exists_ne_zero_and_smul_add_smul_eq_zero_of_mem_twoCuspEigenspace_of_apply_U_ne_zero16 below · depth 25 - Completing a mod-π Hecke eigensystem away from S
CuspForm.exists_twoCuspEigenspace_two_le_twoCuspEigenspace_empty_of_finset1,250 below · depth 25 - Ordinary multiplicative submodule dual to mod-p two-cusp eigenspace
ModularCurve.exists_linearMap_bijOn_semilinearMaps_multiplicativeSubmodule_tateModule_jH_twoCuspEigenspace_of_ordinary_of_mem_infSubgroup4,749 below · depth 25 - Eichler–Shimura p-adic Galois lattice for the weight-two Hecke ring
CuspForm.exists_padicGaloisModule_heckeRingH_two_frobenius_relation1,228 below · depth 26 - Mod-p two-cusp forms dual to the multiplicative part
ModularCurve.exists_linearMap_injective_range_eq_dual_multiplicativeSubmodule_tateModule_jH_twoCuspForms_of_ordinary_of_mem_infSubgroup4,747 below · depth 26 - Hecke algebra of TₚJ_H acting on reduced two-cusp forms
ModularCurve.exists_ringHom_moduleEnd_twoCuspForms_apply_eq_twoCuspGenMod529 below · depth 26 - Two-cusp lattice at p ‖ M has a coefficient-independent basis
CuspForm.exists_linearIndependent_forall_twoCuspLattice_eq_span206 below · depth 28 - Two-cusp q-expansion principle mod p in weight two
CuspForm.exists_mem_twoCuspLattice_eq_smul_of_forall_qCoeff_eq_mul_of_forall_qCoeff_alSlash_eq_mul1,319 below · depth 29 - Atkin–Lehner congruence aₙ((Uₚy)∣ W)≡ -aₙ(⟨ d⟩ y)(mod p)
CuspForm.exists_qCoeff_alSlash_heckeULinH_add_qCoeff_diamondLinH_eq_mul_of_mem_twoCuspLattice205 below · depth 29 - Forms with integral Hecke translates span S₂(Γ_H(M))
CuspForm.span_setOf_forall_heckeRingH_qCoeff_intCast_eq_top196 below · depth 29 - Atkin–Lehner operator intertwines diamond operators on Γ_H(M)
CuspForm.exists_alSlash_diamondLinH_eq_diamondLinH_alSlash3 below · depth 30 - Diamond-twisted integrality implies membership in the two-cusp integral set
CuspForm.mem_twoCuspIntegralSet_of_forall_qCoeff_diamondLinH_mem93 below · depth 30 - Independence of the Atkin–Lehner slash on Γ_H(M)
ModularForm.alSlash_eq_alSlash_of_gammaH0 below · depth 30 - Hecke generators preserve two-cusp integrality of diamond twists
CuspForm.forall_qCoeff_diamondLinH_heckeGenH_mem_of_forall_qCoeff_diamondLinH_mem92 below · depth 31 - Atkin–Lehner twist of T_ℓ on Γ_H(M)-invariant functions
ModularForm.heckeU_add_slash_alSlash_eq_alSlash_heckeU_add_slash_of_not_dvd0 below · depth 33 - Atkin–Lehner conjugation turns U_{q'} into its transpose
ModularForm.heckeU_alSlash_eq_alSlash_sum_slash_transpose_of_dvd_div0 below · depth 33 - Transpose of U_q preserves the two-cusp rational set
CuspForm.mem_twoCuspIntegralSet_range_of_coe_eq_sum_slash_transpose_of_mem_twoCuspIntegralSet_range243 below · depth 35 - Two-cusp A-integrality from its diamond translates
CuspForm.mem_twoCuspIntegralSet_two_of_forall_qCoeff_diamondLinH_mem_and_qCoeff_alSlash_diamondLinH_mem92 below · depth 35 - Rationality of the q-expansion of T_ℓ g at infinity
CuspForm.qCoeff_heckeU_add_slash_mem_range_of_forall_qCoeff_mem_range31 below · depth 36 - Slashing by Γ₀(M) preserves rational q-expansions
CuspForm.qCoeff_slash_mem_range_of_mem_Gamma0_of_forall_qCoeff_mem_range19 below · depth 36 - Transposed Uᵣ preserves rationality of q-coefficients
CuspForm.qCoeff_sum_slash_heckeDiagMatrix_mul_transpose_mem_range_of_forall_qCoeff_mem_range38 below · depth 36