Definitions/Def_CohCarrier_Level.lean
Level subgroups and the Hom carrier with operators
For M : \mathbb{N} and H \le (\mathbb{Z}/M)^\times, gamma0Units is the homomorphism \Gamma_0(M) \to (\mathbb{Z}/M)^\times given by Mathlib's Gamma0Map (reduction of the lower-right entry), made into a unit using that d\cdot a \equiv 1 \pmod M for \gamma \in \Gamma_0(M); GammaH M H is the subgroup of \mathrm{SL}_2(\mathbb{Z}) of those A \in \Gamma_0(M) with gamma0Units M A ∈ H, so GammaH M ⊤ = Gamma0 M, GammaH M H ≤ Gamma0 M, and GammaH M H is normal in \Gamma_0(M) (stated as normality of its subgroupOf). Dually Gamma0Upper ℓ is the subgroup with upper-right entry \equiv 0 \pmod \ell; it is a congruence subgroup, hence of finite index. The carrier is H1 M H A := Additive ↥(GammaH M H) →+ A, i.e. \mathrm{Hom}(\Gamma_H(M), A) for an abelian group A, which is H^1 with trivial coefficients; it inherits an R-module structure when A is one.
The matrix operations conjUpperMat ℓ and conjLowerMat d, conjugation by \mathrm{diag}(\ell,1) in the two directions, send \begin{pmatrix}a&b\\c&d\end{pmatrix} to \begin{pmatrix}a&b/\ell\\ \ell c&d\end{pmatrix} and \begin{pmatrix}a&\ell b\\ c/\ell&d\end{pmatrix}, are multiplicative where defined, and are mutually inverse. From the first, conjL maps \Gamma_H(M) \cap \Gamma^0(\ell) into \Gamma_H(M), and heckeT (\ell \ne 0) is the endomorphism of H1 M H A obtained by restricting a homomorphism along conjL and applying the transfer from this finite-index subgroup; diamondRaw σ, for \sigma \in \Gamma_0(M), is precomposition with conjugation by \sigma. The structure LevelLE M M' H H' d has fields M \mid M', d \mid M'/M, and that reduction ZMod.unitsMap carries H' into H. Given such data, iotaDeg is the injective homomorphism \Gamma_{H'}(M') \to \Gamma_H(M) by conjLowerMat d, whose image has finite index (it contains the image of \Gamma(M'd)); iDeg'/iDegL are restriction along it, additively and R-linearly, and jDeg/jDegL go the other way, transporting \varphi to the image subgroup and applying the additive transfer coresAdd. Auxiliary results make the transfer additive in the character and compatible with scalars.
Relation to Mathlib
Mathlib supplies \Gamma(N), \Gamma_0(N), \Gamma_1(N) and Gamma0Map; the subgroups \Gamma_H(M) and \Gamma^0(\ell) here are the project's own, built from Gamma0Map. coresAdd is the additive repackaging of Mathlib's MonoidHom.transfer via Additive/Multiplicative, together with its additivity and R-linearity, which Mathlib states only multiplicatively.
Where it is used
These subgroups and the Hom carrier \mathrm{Hom}(\Gamma_H(M), A) provide the module on which Hecke and diamond operators act in the level-lowering part of the argument, and the maps iDeg/jDeg between two levels are the degeneracy maps used in Ihara-type statements, here defined without reference to any pairing.
References
- F. Diamond and J. Shurman, A First Course in Modular Forms, Graduate Texts in Mathematics 228, Springer, 2005
- G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, 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.
- 507 lines
- 56 declarations
- used in the statements of 172 theorems and imported by 236 proofs
- imports 0 definition modules
Source file: Definitions/Def_CohCarrier_Level.lean
Imports
- only Mathlib
Declarations
- theorem
CohCarrier.transfer_diff_one - theorem
CohCarrier.transfer_diff_mul - theorem
CohCarrier.transfer_one - theorem
CohCarrier.transfer_mul - theorem
CohCarrier.toMultiplicativeRight_zero - theorem
CohCarrier.toMultiplicativeRight_add - theorem
CohCarrier.toAdditiveLeft_one - theorem
CohCarrier.toAdditiveLeft_mul - def
CohCarrier.coresAdd - theorem
CohCarrier.coresAdd_zero - theorem
CohCarrier.coresAdd_add - theorem
CohCarrier.coresAdd_smul - def
CohCarrier.Gamma0Upper - theorem
CohCarrier.mem_Gamma0Upper - theorem
CohCarrier.Gamma0_d_mul_a - def
CohCarrier.gamma0Units - theorem
CohCarrier.val_gamma0Units - def
CohCarrier.GammaH - theorem
CohCarrier.mem_GammaH_iff - theorem
CohCarrier.GammaH_le_Gamma0 - theorem
CohCarrier.GammaH_top - abbrev
CohCarrier.H1 - def
CohCarrier.conjUpperMat - theorem
CohCarrier.conjUpperMat_mul - theorem
CohCarrier.conjUpperMat_apply_11 - theorem
CohCarrier.conjUpperMat_apply_10 - abbrev
CohCarrier.GammaHUpper - theorem
CohCarrier.dvd_of_mem_GammaHUpper - theorem
CohCarrier.conjUpperMat_mem - def
CohCarrier.conjL - theorem
CohCarrier.Gamma0Upper_isCongruenceSubgroup - instance
CohCarrier.Gamma0Upper_finiteIndex - def
CohCarrier.heckeT - theorem
CohCarrier.GammaH_normal_in_Gamma0 - theorem
CohCarrier.conj_mem_GammaH - def
CohCarrier.conjHom - def
CohCarrier.diamondRaw - def
CohCarrier.conjLowerMat - theorem
CohCarrier.conjLowerMat_mul - structure
CohCarrier.LevelLE - field
CohCarrier.LevelLE.dvd - field
CohCarrier.LevelLE.ddvd - field
CohCarrier.LevelLE.red - theorem
CohCarrier.LevelLE.exists_eq - theorem
CohCarrier.LevelLE.dvd_entry - theorem
CohCarrier.LevelLE.conjLowerMat_mem - def
CohCarrier.iotaDeg - def
CohCarrier.iDeg' - def
CohCarrier.iDegL - theorem
CohCarrier.conjLowerMat_conjUpperMat - theorem
CohCarrier.Gamma_subgroupOf_le_range_iotaDeg - instance
CohCarrier.iotaDeg_range_finiteIndex - theorem
CohCarrier.iotaDeg_injective - def
CohCarrier.pushChar - def
CohCarrier.jDeg - def
CohCarrier.jDegL
Source
import Mathlib.NumberTheory.ModularForms.CongruenceSubgroups ↗ import Mathlib.GroupTheory.Transfer ↗ import Mathlib.Algebra.Module.Hom ↗ import Mathlib.Data.ZMod.Units ↗ import Mathlib.Algebra.BigOperators.GroupWithZero.Action ↗ set_option autoImplicit false open Matrix CongruenceSubgroup Matrix.SpecialLinearGroup open scoped MatrixGroups namespace CohCarrier section TransferAdd variable {G : Type*} [Group G] {K : Subgroup G} {C : Type*} [CommGroup C] open Subgroup Subgroup.leftTransversals in theorem transfer_diff_one [K.FiniteIndex] (S T : K.LeftTransversal) : diff (1 : K →* C) S T = 1 := by simp [diff] open Subgroup Subgroup.leftTransversals in theorem transfer_diff_mul [K.FiniteIndex] (ϕ ψ : K →* C) (S T : K.LeftTransversal) : diff (ϕ * ψ) S T = diff ϕ S T * diff ψ S T := by simp only [diff, MonoidHom.mul_apply, Finset.prod_mul_distrib] theorem transfer_one [K.FiniteIndex] : MonoidHom.transfer (1 : K →* C) = 1 := by ext g rw [MonoidHom.transfer_def _ default, transfer_diff_one] rfl theorem transfer_mul [K.FiniteIndex] (ϕ ψ : K →* C) : MonoidHom.transfer (ϕ * ψ) = MonoidHom.transfer ϕ * MonoidHom.transfer ψ := by ext g rw [MonoidHom.mul_apply, MonoidHom.transfer_def _ default, MonoidHom.transfer_def _ default, MonoidHom.transfer_def _ default, transfer_diff_mul] theorem toMultiplicativeRight_zero {α β : Type*} [MulOneClass α] [AddCommGroup β] : AddMonoidHom.toMultiplicativeRight (0 : Additive α →+ β) = 1 := by ext a simp theorem toMultiplicativeRight_add {α β : Type*} [MulOneClass α] [AddCommGroup β] (φ ψ : Additive α →+ β) : AddMonoidHom.toMultiplicativeRight (φ + ψ) = AddMonoidHom.toMultiplicativeRight φ * AddMonoidHom.toMultiplicativeRight ψ := by ext a simp [ofAdd_add] theorem toAdditiveLeft_one {α β : Type*} [MulOneClass α] [AddCommGroup β] : MonoidHom.toAdditiveLeft (1 : α →* Multiplicative β) = 0 := by ext a simp theorem toAdditiveLeft_mul {α β : Type*} [MulOneClass α] [AddCommGroup β] (f g : α →* Multiplicative β) : MonoidHom.toAdditiveLeft (f * g) = MonoidHom.toAdditiveLeft f + MonoidHom.toAdditiveLeft g := by ext a simp [toAdd_mul] noncomputable def coresAdd (K : Subgroup G) [K.FiniteIndex] {B : Type*} [AddCommGroup B] (φ : Additive ↥K →+ B) : Additive G →+ B := MonoidHom.toAdditiveLeft (MonoidHom.transfer (AddMonoidHom.toMultiplicativeRight φ)) theorem coresAdd_zero (K : Subgroup G) [K.FiniteIndex] {B : Type*} [AddCommGroup B] : coresAdd K (0 : Additive ↥K →+ B) = 0 := by simp only [coresAdd, toMultiplicativeRight_zero, transfer_one, toAdditiveLeft_one] theorem coresAdd_add (K : Subgroup G) [K.FiniteIndex] {B : Type*} [AddCommGroup B] (φ ψ : Additive ↥K →+ B) : coresAdd K (φ + ψ) = coresAdd K φ + coresAdd K ψ := by simp only [coresAdd, toMultiplicativeRight_add, transfer_mul, toAdditiveLeft_mul] theorem coresAdd_smul (K : Subgroup G) [K.FiniteIndex] {R B : Type*} [Semiring R] [AddCommGroup B] [Module R B] (r : R) (φ : Additive ↥K →+ B) : coresAdd K (r • φ) = r • coresAdd K φ := by ext g simp only [coresAdd, MonoidHom.toAdditiveLeft_apply_apply, AddMonoidHom.smul_apply, MonoidHom.transfer_def _ default, Subgroup.leftTransversals.diff, toAdd_prod, AddMonoidHom.toMultiplicativeRight_apply_apply, toAdd_ofAdd, Finset.smul_sum] end TransferAdd section Level variable (M : ℕ) def Gamma0Upper (ℓ : ℕ) : Subgroup SL(2, ℤ) where carrier := { g | (g 0 1 : ZMod ℓ) = 0 } one_mem' := by simp mul_mem' := by intro a b ha hb simp only [Set.mem_setOf_eq] at * have h := (Matrix.two_mul_expl a.1 b.1).2.1 simp only [coe_mul] at * rw [h] simp [ha, hb] inv_mem' := by intro a ha simp only [Set.mem_setOf_eq] at * rw [SL2_inv_expl a] simp only [cons_val_zero, cons_val_one, Int.cast_neg, neg_eq_zero] at * exact ha @[simp] theorem mem_Gamma0Upper {ℓ : ℕ} {A : SL(2, ℤ)} : A ∈ Gamma0Upper ℓ ↔ (A 0 1 : ZMod ℓ) = 0 := Iff.rfl theorem Gamma0_d_mul_a (γ : Gamma0 M) : ((γ.1 1 1 : ℤ) : ZMod M) * ((γ.1 0 0 : ℤ) : ZMod M) = 1 := by have hdet := Matrix.SpecialLinearGroup.det_coe γ.1 rw [Matrix.det_fin_two] at hdet have hc : ((γ.1 1 0 : ℤ) : ZMod M) = 0 := Gamma0_mem.mp γ.2 have h := congrArg (fun z : ℤ => (z : ZMod M)) hdet simp only [Int.cast_sub, Int.cast_mul, Int.cast_one, hc, mul_zero, sub_zero] at h rw [mul_comm] exact h def gamma0Units : Gamma0 M →* (ZMod M)ˣ where toFun γ := { val := Gamma0Map M γ inv := ((γ.1 0 0 : ℤ) : ZMod M) val_inv := Gamma0_d_mul_a M γ inv_val := by rw [mul_comm]; exact Gamma0_d_mul_a M γ } map_one' := by ext; simp map_mul' γ δ := by ext; exact map_mul (Gamma0Map M) γ δ @[simp] theorem val_gamma0Units (γ : Gamma0 M) : (gamma0Units M γ : ZMod M) = Gamma0Map M γ := rfl def GammaH (H : Subgroup (ZMod M)ˣ) : Subgroup SL(2, ℤ) := (H.comap (gamma0Units M)).map (Gamma0 M).subtype variable {M} theorem mem_GammaH_iff {H : Subgroup (ZMod M)ˣ} {A : SL(2, ℤ)} : A ∈ GammaH M H ↔ ∃ hA : A ∈ Gamma0 M, gamma0Units M ⟨A, hA⟩ ∈ H := by constructor · rintro ⟨γ, hγ, rfl⟩ exact ⟨γ.2, hγ⟩ · rintro ⟨hA, h⟩ exact ⟨⟨A, hA⟩, h, rfl⟩ theorem GammaH_le_Gamma0 (H : Subgroup (ZMod M)ˣ) : GammaH M H ≤ Gamma0 M := by intro A hA obtain ⟨hA0, _⟩ := mem_GammaH_iff.mp hA exact hA0 theorem GammaH_top : GammaH M ⊤ = Gamma0 M := by ext A rw [mem_GammaH_iff] exact ⟨fun ⟨h, _⟩ => h, fun h => ⟨h, Subgroup.mem_top _⟩⟩ end Level section Carrier variable (M : ℕ) (H : Subgroup (ZMod M)ˣ) (A : Type*) [AddCommGroup A] abbrev H1 : Type _ := Additive ↥(GammaH M H) →+ A example (R : Type*) [CommRing R] [Module R A] : Module R (H1 M H A) := inferInstance end Carrier section Operators variable (M : ℕ) (H : Subgroup (ZMod M)ˣ) (ℓ : ℕ) def conjUpperMat (A : SL(2, ℤ)) (h : (ℓ : ℤ) ∣ A 0 1) : SL(2, ℤ) := ⟨!![A 0 0, A 0 1 / ℓ; A 1 0 * ℓ, A 1 1], by rw [Matrix.det_fin_two_of] have hdet := Matrix.SpecialLinearGroup.det_coe A rw [Matrix.det_fin_two] at hdet have hbc : A 0 1 / ℓ * (A 1 0 * ℓ) = A 0 1 * A 1 0 := by rw [mul_comm (A 1 0) _, ← mul_assoc, Int.ediv_mul_cancel h] rw [hbc] exact hdet⟩ theorem conjUpperMat_mul (A B : SL(2, ℤ)) (hA : (ℓ : ℤ) ∣ A 0 1) (hB : (ℓ : ℤ) ∣ B 0 1) (hAB : (ℓ : ℤ) ∣ (A * B) 0 1) : conjUpperMat ℓ (A * B) hAB = conjUpperMat ℓ A hA * conjUpperMat ℓ B hB := by have h1 : A 0 1 / ℓ * (B 1 0 * ℓ) = A 0 1 * B 1 0 := by rw [mul_comm (B 1 0) _, ← mul_assoc, Int.ediv_mul_cancel hA] have h2 : (A 0 0 * B 0 1 + A 0 1 * B 1 1) / ℓ = A 0 0 * (B 0 1 / ℓ) + A 0 1 / ℓ * B 1 1 := by rw [Int.add_ediv_of_dvd_right (Dvd.dvd.mul_right hA _), Int.mul_ediv_assoc _ hB, mul_comm (A 0 1) (B 1 1), Int.mul_ediv_assoc _ hA, mul_comm (B 1 1)] have h3 : A 1 0 * ℓ * (B 0 1 / ℓ) = A 1 0 * B 0 1 := by rw [mul_assoc, Int.mul_ediv_cancel' hB] have hmul : ∀ i j, (A * B) i j = A i 0 * B 0 j + A i 1 * B 1 j := fun i j => by simp [Matrix.mul_apply, Fin.sum_univ_two] apply Matrix.SpecialLinearGroup.ext intro i j fin_cases i <;> fin_cases j <;> simp [conjUpperMat, Matrix.mul_apply, Fin.sum_univ_two, hmul, h2] · exact h1.symm · ring · exact h3.symm @[simp] theorem conjUpperMat_apply_11 (A : SL(2, ℤ)) (h : (ℓ : ℤ) ∣ A 0 1) : (conjUpperMat ℓ A h) 1 1 = A 1 1 := by simp [conjUpperMat] @[simp] theorem conjUpperMat_apply_10 (A : SL(2, ℤ)) (h : (ℓ : ℤ) ∣ A 0 1) : (conjUpperMat ℓ A h) 1 0 = A 1 0 * ℓ := by simp [conjUpperMat] abbrev GammaHUpper : Subgroup ↥(GammaH M H) := (Gamma0Upper ℓ).subgroupOf (GammaH M H) theorem dvd_of_mem_GammaHUpper (γ : ↥(GammaHUpper M H ℓ)) : (ℓ : ℤ) ∣ (γ : SL(2, ℤ)) 0 1 := by have h : ((γ : ↥(GammaH M H)) : SL(2, ℤ)) ∈ Gamma0Upper ℓ := Subgroup.mem_subgroupOf.mp γ.2 rw [mem_Gamma0Upper] at h exact (ZMod.intCast_zmod_eq_zero_iff_dvd _ _).mp h theorem conjUpperMat_mem (γ : ↥(GammaHUpper M H ℓ)) : conjUpperMat ℓ (γ : SL(2, ℤ)) (dvd_of_mem_GammaHUpper M H ℓ γ) ∈ GammaH M H := by obtain ⟨hγ0, hγH⟩ := mem_GammaH_iff.mp (γ : ↥(GammaH M H)).2 rw [mem_GammaH_iff] refine ⟨?_, ?_⟩ · rw [Gamma0_mem, conjUpperMat_apply_10, Int.cast_mul, Gamma0_mem.mp hγ0, zero_mul] · convert hγH using 1 ext simp only [val_gamma0Units, Gamma0Map, MonoidHom.coe_mk, OneHom.coe_mk, conjUpperMat_apply_11] def conjL : ↥(GammaHUpper M H ℓ) →* ↥(GammaH M H) where toFun γ := ⟨conjUpperMat ℓ (γ : SL(2, ℤ)) (dvd_of_mem_GammaHUpper M H ℓ γ), conjUpperMat_mem M H ℓ γ⟩ map_one' := by apply Subtype.ext apply Matrix.SpecialLinearGroup.ext intro i j fin_cases i <;> fin_cases j <;> simp [conjUpperMat] map_mul' γ δ := Subtype.ext (conjUpperMat_mul ℓ (γ : SL(2, ℤ)) (δ : SL(2, ℤ)) (dvd_of_mem_GammaHUpper M H ℓ γ) (dvd_of_mem_GammaHUpper M H ℓ δ) (dvd_of_mem_GammaHUpper M H ℓ (γ * δ))) variable (A : Type*) [AddCommGroup A] theorem Gamma0Upper_isCongruenceSubgroup [NeZero ℓ] : IsCongruenceSubgroup (Gamma0Upper ℓ) := by refine ⟨ℓ, NeZero.ne _, fun A hA => ?_⟩ rw [mem_Gamma0Upper] exact (Gamma_mem.mp hA).2.1 instance Gamma0Upper_finiteIndex [NeZero ℓ] : (Gamma0Upper ℓ).FiniteIndex := (Gamma0Upper_isCongruenceSubgroup ℓ).finiteIndex noncomputable def heckeT [NeZero ℓ] : H1 M H A →+ H1 M H A where toFun φ := MonoidHom.toAdditiveLeft (MonoidHom.transfer ((AddMonoidHom.toMultiplicativeRight φ).comp (conjL M H ℓ))) map_zero' := by simp only [toMultiplicativeRight_zero, MonoidHom.one_comp, transfer_one, toAdditiveLeft_one] map_add' φ ψ := by simp only [toMultiplicativeRight_add, MonoidHom.mul_comp, transfer_mul, toAdditiveLeft_mul] theorem GammaH_normal_in_Gamma0 : ((GammaH M H).subgroupOf (Gamma0 M)).Normal := by refine ⟨fun n hn g => ?_⟩ rw [Subgroup.mem_subgroupOf] at hn ⊢ obtain ⟨_, hnH⟩ := mem_GammaH_iff.mp hn rw [mem_GammaH_iff] refine ⟨(g * n * g⁻¹).2, ?_⟩ have e1 : (⟨((g * n * g⁻¹ : ↥(Gamma0 M)) : SL(2, ℤ)), (g * n * g⁻¹).2⟩ : ↥(Gamma0 M)) = g * n * g⁻¹ := Subtype.coe_eta _ _ have e2 : (⟨(n : SL(2, ℤ)), n.2⟩ : ↥(Gamma0 M)) = n := Subtype.coe_eta _ _ rw [e2] at hnH rw [e1, map_mul, map_mul, map_inv, mul_inv_cancel_comm] exact hnH theorem conj_mem_GammaH (σ : Gamma0 M) (γ : ↥(GammaH M H)) : (σ : SL(2, ℤ)) * (γ : SL(2, ℤ)) * (σ : SL(2, ℤ))⁻¹ ∈ GammaH M H := by obtain ⟨hγ0, _⟩ := mem_GammaH_iff.mp γ.2 have hmem : (⟨(γ : SL(2, ℤ)), hγ0⟩ : Gamma0 M) ∈ (GammaH M H).subgroupOf (Gamma0 M) := by rw [Subgroup.mem_subgroupOf]; exact γ.2 have := (GammaH_normal_in_Gamma0 M H).conj_mem _ hmem σ rw [Subgroup.mem_subgroupOf] at this exact this def conjHom (σ : Gamma0 M) : ↥(GammaH M H) →* ↥(GammaH M H) where toFun γ := ⟨(σ : SL(2, ℤ)) * (γ : SL(2, ℤ)) * (σ : SL(2, ℤ))⁻¹, conj_mem_GammaH M H σ γ⟩ map_one' := Subtype.ext (by simp) map_mul' γ δ := Subtype.ext (by simp only [Subgroup.coe_mul] group) def diamondRaw (σ : Gamma0 M) : H1 M H A →+ H1 M H A where toFun φ := φ.comp (MonoidHom.toAdditive (conjHom M H σ)) map_zero' := by ext; rfl map_add' := by intro φ ψ; ext; rfl end Operators section LevelMaps variable (M M' : ℕ) (H : Subgroup (ZMod M)ˣ) (H' : Subgroup (ZMod M')ˣ) (d : ℕ) def conjLowerMat (A : SL(2, ℤ)) (h : (d : ℤ) ∣ A 1 0) : SL(2, ℤ) := ⟨!![A 0 0, A 0 1 * d; A 1 0 / d, A 1 1], by rw [Matrix.det_fin_two_of] have hdet := Matrix.SpecialLinearGroup.det_coe A rw [Matrix.det_fin_two] at hdet have hbc : A 0 1 * d * (A 1 0 / d) = A 0 1 * A 1 0 := by rw [mul_assoc, mul_comm (d : ℤ) _, Int.ediv_mul_cancel h] rw [hbc] exact hdet⟩ theorem conjLowerMat_mul (A B : SL(2, ℤ)) (hA : (d : ℤ) ∣ A 1 0) (hB : (d : ℤ) ∣ B 1 0) (hAB : (d : ℤ) ∣ (A * B) 1 0) : conjLowerMat d (A * B) hAB = conjLowerMat d A hA * conjLowerMat d B hB := by have h1 : A 0 1 * d * (B 1 0 / d) = A 0 1 * B 1 0 := by rw [mul_assoc, Int.mul_ediv_cancel' hB] have h2 : (A 1 0 * B 0 0 + A 1 1 * B 1 0) / d = A 1 0 / d * B 0 0 + A 1 1 * (B 1 0 / d) := by rw [Int.add_ediv_of_dvd_right (Dvd.dvd.mul_left hB _), Int.mul_ediv_assoc _ hB, mul_comm (A 1 0) (B 0 0), Int.mul_ediv_assoc _ hA, mul_comm (B 0 0)] have h3 : A 1 0 / d * (B 0 1 * d) = A 1 0 * B 0 1 := by rw [mul_comm (B 0 1) _, ← mul_assoc, Int.ediv_mul_cancel hA] have hmul : ∀ i j, (A * B) i j = A i 0 * B 0 j + A i 1 * B 1 j := fun i j => by simp [Matrix.mul_apply, Fin.sum_univ_two] apply Matrix.SpecialLinearGroup.ext intro i j fin_cases i <;> fin_cases j <;> simp [conjLowerMat, Matrix.mul_apply, Fin.sum_univ_two, hmul, h2] all_goals first | exact h1.symm | exact h3.symm | ring structure LevelLE : Prop where dvd : M ∣ M' ddvd : d ∣ M' / M red : ∀ u : (ZMod M')ˣ, u ∈ H' → ZMod.unitsMap dvd u ∈ H variable {M M' H H' d} theorem LevelLE.exists_eq (h : LevelLE M M' H H' d) : ∃ e : ℕ, M' = M * (d * e) := by obtain ⟨e, he⟩ := h.ddvd refine ⟨e, ?_⟩ rw [← he, Nat.mul_div_cancel' h.dvd] theorem LevelLE.dvd_entry (h : LevelLE M M' H H' d) (γ : ↥(GammaH M' H')) : (d : ℤ) ∣ (γ : SL(2, ℤ)) 1 0 := by obtain ⟨hγ0, _⟩ := mem_GammaH_iff.mp γ.2 have hM' : ((M' : ℕ) : ℤ) ∣ (γ : SL(2, ℤ)) 1 0 := (ZMod.intCast_zmod_eq_zero_iff_dvd _ _).mp (Gamma0_mem.mp hγ0) obtain ⟨e, he⟩ := h.exists_eq refine dvd_trans ?_ hM' rw [he] push_cast exact Dvd.intro_left ((M : ℤ) * e) (by ring) theorem LevelLE.conjLowerMat_mem [NeZero d] (h : LevelLE M M' H H' d) (γ : ↥(GammaH M' H')) : conjLowerMat d (γ : SL(2, ℤ)) (h.dvd_entry γ) ∈ GammaH M H := by obtain ⟨hγ0, hγH⟩ := mem_GammaH_iff.mp γ.2 have hM' : ((M' : ℕ) : ℤ) ∣ (γ : SL(2, ℤ)) 1 0 := (ZMod.intCast_zmod_eq_zero_iff_dvd _ _).mp (Gamma0_mem.mp hγ0) obtain ⟨e, he⟩ := h.exists_eq obtain ⟨t, ht⟩ := hM' have hd0 : (d : ℤ) ≠ 0 := by exact_mod_cast NeZero.ne d have hquot : (γ : SL(2, ℤ)) 1 0 / (d : ℤ) = (M : ℤ) * (e * t) := by apply Int.ediv_eq_of_eq_mul_right hd0 rw [ht, he] push_cast ring have h0 : conjLowerMat d (γ : SL(2, ℤ)) (h.dvd_entry γ) ∈ Gamma0 M := by rw [Gamma0_mem] show (((!![(γ : SL(2, ℤ)) 0 0, (γ : SL(2, ℤ)) 0 1 * d; (γ : SL(2, ℤ)) 1 0 / d, (γ : SL(2, ℤ)) 1 1] : Matrix (Fin 2) (Fin 2) ℤ) 1 0 : ℤ) : ZMod M) = 0 simp only [Matrix.of_apply, Matrix.cons_val', Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.cons_val_fin_one] rw [hquot] push_cast rw [ZMod.natCast_self, zero_mul] rw [mem_GammaH_iff] refine ⟨h0, ?_⟩ have hred := h.red _ hγH convert hred using 1 all_goals (ext; simp [gamma0Units, Gamma0Map, conjLowerMat, ZMod.unitsMap]) variable (M M' H H' d) def iotaDeg [NeZero d] (h : LevelLE M M' H H' d) : ↥(GammaH M' H') →* ↥(GammaH M H) where toFun γ := ⟨conjLowerMat d (γ : SL(2, ℤ)) (h.dvd_entry γ), h.conjLowerMat_mem γ⟩ map_one' := by apply Subtype.ext apply Matrix.SpecialLinearGroup.ext intro i j fin_cases i <;> fin_cases j <;> simp [conjLowerMat] map_mul' γ δ := Subtype.ext (conjLowerMat_mul d (γ : SL(2, ℤ)) (δ : SL(2, ℤ)) (h.dvd_entry γ) (h.dvd_entry δ) (h.dvd_entry (γ * δ))) variable (A : Type*) [AddCommGroup A] def iDeg' [NeZero d] (h : LevelLE M M' H H' d) : H1 M H A →+ H1 M' H' A where toFun φ := φ.comp (MonoidHom.toAdditive (iotaDeg M M' H H' d h)) map_zero' := by ext; rfl map_add' := by intro φ ψ; ext; rfl def iDegL (R : Type*) [Semiring R] [Module R A] [NeZero d] (h : LevelLE M M' H H' d) : H1 M H A →ₗ[R] H1 M' H' A where toFun φ := φ.comp (MonoidHom.toAdditive (iotaDeg M M' H H' d h)) map_add' := by intro φ ψ; ext; rfl map_smul' := by intro r φ; ext; rfl theorem conjLowerMat_conjUpperMat [NeZero d] (A : SL(2, ℤ)) (hb : (d : ℤ) ∣ A 0 1) (hc : (d : ℤ) ∣ (conjUpperMat d A hb) 1 0) : conjLowerMat d (conjUpperMat d A hb) hc = A := by have hd : (d : ℤ) ≠ 0 := by exact_mod_cast (NeZero.ne d) apply Matrix.SpecialLinearGroup.ext intro i j fin_cases i <;> fin_cases j <;> simp [conjLowerMat, conjUpperMat, Int.ediv_mul_cancel hb, Int.mul_ediv_cancel _ hd] theorem Gamma_subgroupOf_le_range_iotaDeg [NeZero M'] [NeZero d] (h : LevelLE M M' H H' d) : (Gamma (M' * d)).subgroupOf (GammaH M H) ≤ (iotaDeg M M' H H' d h).range := by intro γ hγ rw [Subgroup.mem_subgroupOf, Gamma_mem] at hγ obtain ⟨_, h01, h10, h11⟩ := hγ have hMd : ((M' * d : ℕ) : ℤ) ∣ (γ : SL(2, ℤ)) 0 1 := (ZMod.intCast_zmod_eq_zero_iff_dvd _ _).mp h01 have hMd' : ((M' * d : ℕ) : ℤ) ∣ (γ : SL(2, ℤ)) 1 0 := (ZMod.intCast_zmod_eq_zero_iff_dvd _ _).mp h10 have hb : (d : ℤ) ∣ (γ : SL(2, ℤ)) 0 1 := dvd_trans (by push_cast; exact Dvd.intro_left _ rfl) hMd set A : SL(2, ℤ) := conjUpperMat d (γ : SL(2, ℤ)) hb with hAdef have hA0 : A ∈ Gamma0 M' := by rw [Gamma0_mem] have : A 1 0 = (γ : SL(2, ℤ)) 1 0 * d := by simp [hAdef, conjUpperMat] rw [this, ZMod.intCast_zmod_eq_zero_iff_dvd] exact Dvd.dvd.mul_right (dvd_trans (by push_cast; exact Dvd.intro _ rfl) hMd') _ have hA11 : ((A 1 1 : ℤ) : ZMod M') = 1 := by have hA : A 1 1 = (γ : SL(2, ℤ)) 1 1 := by simp [hAdef, conjUpperMat] rw [hA, ← map_intCast (ZMod.castHom (dvd_mul_right M' d) (ZMod M')), h11, map_one] have hAH : gamma0Units M' ⟨A, hA0⟩ ∈ H' := by have : gamma0Units M' ⟨A, hA0⟩ = 1 := by ext simp only [gamma0Units, MonoidHom.coe_mk, OneHom.coe_mk, Units.val_one, Gamma0Map] exact hA11 rw [this] exact one_mem H' have hc : (d : ℤ) ∣ (conjUpperMat d (γ : SL(2, ℤ)) hb) 1 0 := by rw [conjUpperMat_apply_10]; exact dvd_mul_left _ _ refine ⟨⟨A, mem_GammaH_iff.mpr ⟨hA0, hAH⟩⟩, Subtype.ext ?_⟩ exact conjLowerMat_conjUpperMat d (γ : SL(2, ℤ)) hb hc instance iotaDeg_range_finiteIndex [NeZero M'] [NeZero d] (h : LevelLE M M' H H' d) : ((iotaDeg M M' H H' d h).range).FiniteIndex := by haveI : NeZero (M' * d) := ⟨mul_ne_zero (NeZero.ne M') (NeZero.ne d)⟩ haveI : ((Gamma (M' * d)).subgroupOf (GammaH M H)).FiniteIndex := inferInstance exact Subgroup.finiteIndex_of_le (Gamma_subgroupOf_le_range_iotaDeg M M' H H' d h) theorem iotaDeg_injective [NeZero d] (h : LevelLE M M' H H' d) : Function.Injective (iotaDeg M M' H H' d h) := by intro γ δ hγδ have hmat : conjLowerMat d (γ : SL(2, ℤ)) (h.dvd_entry γ) = conjLowerMat d (δ : SL(2, ℤ)) (h.dvd_entry δ) := congrArg Subtype.val hγδ have e : ∀ i j, (conjLowerMat d (γ : SL(2, ℤ)) (h.dvd_entry γ)) i j = (conjLowerMat d (δ : SL(2, ℤ)) (h.dvd_entry δ)) i j := fun i j => by rw [hmat] have hd : (d : ℤ) ≠ 0 := by exact_mod_cast (NeZero.ne d) apply Subtype.ext apply Matrix.SpecialLinearGroup.ext intro i j fin_cases i <;> fin_cases j · simpa [conjLowerMat] using e 0 0 · have h01 := e 0 1 simp only [conjLowerMat, Matrix.of_apply, Matrix.cons_val', Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.cons_val_fin_one] at h01 exact mul_right_cancel₀ hd h01 · have h10 := e 1 0 simp only [conjLowerMat, Matrix.of_apply, Matrix.cons_val', Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.cons_val_fin_one] at h10 calc (γ : SL(2, ℤ)) 1 0 = d * ((γ : SL(2, ℤ)) 1 0 / d) := (Int.mul_ediv_cancel' (h.dvd_entry γ)).symm _ = d * ((δ : SL(2, ℤ)) 1 0 / d) := by rw [h10] _ = (δ : SL(2, ℤ)) 1 0 := Int.mul_ediv_cancel' (h.dvd_entry δ) · simpa [conjLowerMat] using e 1 1 noncomputable def pushChar [NeZero d] (h : LevelLE M M' H H' d) (φ : H1 M' H' A) : Additive ↥((iotaDeg M M' H H' d h).range) →+ A := φ.comp (MonoidHom.toAdditive ((iotaDeg M M' H H' d h).ofInjective (iotaDeg_injective M M' H H' d h)).symm.toMonoidHom) noncomputable def jDeg [NeZero M'] [NeZero d] (h : LevelLE M M' H H' d) : H1 M' H' A →+ H1 M H A where toFun φ := coresAdd _ (pushChar M M' H H' d A h φ) map_zero' := by have : pushChar M M' H H' d A h 0 = 0 := by ext; rfl rw [this, coresAdd_zero] map_add' φ ψ := by have : pushChar M M' H H' d A h (φ + ψ) = pushChar M M' H H' d A h φ + pushChar M M' H H' d A h ψ := by ext; rfl rw [this, coresAdd_add] noncomputable def jDegL (R : Type*) [Semiring R] [Module R A] [NeZero M'] [NeZero d] (h : LevelLE M M' H H' d) : H1 M' H' A →ₗ[R] H1 M H A where toFun φ := coresAdd _ (pushChar M M' H H' d A h φ) map_add' φ ψ := by have : pushChar M M' H H' d A h (φ + ψ) = pushChar M M' H H' d A h φ + pushChar M M' H H' d A h ψ := by ext; rfl rw [this, coresAdd_add] map_smul' r φ := by have : pushChar M M' H H' d A h (r • φ) = r • pushChar M M' H H' d A h φ := by ext; rfl rw [this, coresAdd_smul] rfl end LevelMaps end CohCarrier
Statements phrased using this module (172)
- Congruence characters of Γ₀(N) are Eisenstein at T_ℓ
CohCarrier.heckeT_eq_smul_of_forall_mem_Gamma_apply_eq_zero6 below · depth 11 - Corestriction of a restricted additive character is [G:K]·φ
CohCarrier.coresAdd_comp_subtype0 below · depth 12 - Congruence characters of Γ₀(N) are Eisenstein at good ℓ
CohCarrier.heckeT_eq_smul_of_forall_mem_Gamma_apply_eq_zero_of_not_dvd3 below · depth 12 - Interchange of U_q with the degeneracy maps ι₁^*,ι_q^*
CohCarrier.heckeT_iDeg_interchange0 below · depth 12 - Degeneracy pullback commutes with T_ℓ at coprime ℓ
CohCarrier.iDeg_heckeT_comm_of_coprime0 below · depth 12 - Index ℓ+1 for Γ_H(M)∩Γ⁰(ℓ)
CohCarrier.index_GammaHUpper_of_prime0 below · depth 12 - Finite generation of Hom(Γ_H(M), A) over a noetherian ring
CohCarrier.H1_moduleFinite0 below · depth 13 - Degeneracy maps and Hecke at q: U_qι₁^*=ι₁^*T_q-ι_q^*⟨ q⟩
CohCarrier.exists_gamma0_heckeT_iDeg_interchange_diamondRaw1 below · depth 13 - Hecke operators at coprime indices commute
CohCarrier.heckeT_comm_of_prime0 below · depth 13 - Naturality of T_ℓ in the coefficient group
CohCarrier.heckeT_comp_coeff0 below · depth 13 - U_qι_q^* = q ι₁^* at level Γ_{H_r}(Nq)
CohCarrier.heckeT_iDeg_q_eq_smul_r0 below · depth 13 - Hecke operator T_ℓ preserves parabolic homomorphisms
CohCarrier.heckeT_mem_parabolicHoms0 below · depth 13 - Hecke T_ℓ acts by ℓ+1 modulo parabolic homomorphisms
CohCarrier.heckeT_sub_smul_mem_parabolicHoms_gammaH_of_modEq_one2 below · depth 13 - Composition of degeneracy pullbacks on H1
CohCarrier.iDeg_comp0 below · depth 13 - Degeneracy pullback commutes with raw diamond operators
CohCarrier.iDeg_diamondRaw_comm0 below · depth 13 - T_ℓ commutes with the degeneracy pullback
CohCarrier.iDeg_heckeT_comm_of_dvd0 below · depth 13 - Degree-one restriction and transfer between Γ_H(M) and Γ₀(M)
CohCarrier.injective_iDeg_one_and_range_eq_of_isUnit_index1 below · depth 13 - Corestriction after degeneracy pullback is multiplication by the index
CohCarrier.jDeg_comp_iDegP_self1 below · depth 13 - Degeneracy pushforward commutes with diamond conjugation
CohCarrier.jDeg_diamondRaw_comm0 below · depth 13 - T_ℓ commutes with the degeneracy trace map
CohCarrier.jDeg_heckeT_comm_flat0 below · depth 13 - U_ℓ commutes with the degeneracy trace map j_d
CohCarrier.jDeg_heckeT_comm_of_dvd_of_coprime0 below · depth 13 - Cross degeneracy composite is an index multiple of T_q
CohCarrier.jDeg_iDeg_cross_eq_index_smul_heckeT0 below · depth 13 - Degeneracy transfer commutes with restriction to Γ_H
CohCarrier.jDeg_iDeg_one_eq_iDeg_one_jDeg_of_comap0 below · depth 13 - Image of parabolic H¹(Γ₀(M)) equals diamond-invariant parabolic part
CohCarrier.mem_map_iDegL_one_parabolicHoms_iff2 below · depth 13 - Diamond automorphisms of the two-chart integral model of X_H(M)
ModularCurve.exists_iso_twoChartIntegralModel_qExpFunctionFieldC_gammaH_diamond5 below · depth 13 - Diamond action of Γ₀(M) on the q-expansion function field
ModularCurve.exists_monoidHom_gamma0_algEquiv_qExpFunctionFieldC_gammaH_of_charZero30 below · depth 13 - Corestriction of a restricted character is [L:K] times corestriction
CohCarrier.coresAdd_comp_inclusion0 below · depth 14 - Diamond operators on Hom(Γ_H(M),V) commute
CohCarrier.diamondRaw_comm0 below · depth 14 - Parabolic homomorphism lattice for Γ₀(N): free of rank 2dim S₂
CohCarrier.exists_basis_parabolicHoms_top_two_mul_finrank578 below · depth 14 - Subgroups between Γ₁(M) and Γ₀(M) are Γ_H(M)
CohCarrier.exists_eq_gammaH_of_gamma1_le_of_le_gamma00 below · depth 14 - Lifting units mod M to Γ₀(M) with ℓ M ∣ c
CohCarrier.exists_gamma0_lift_dvd0 below · depth 14 - Integral Eichler–Shimura: Hecke algebra acting on H¹ₚₐᵣ
CohCarrier.exists_injective_ringHom_heckeAlgebra_moduleEnd_parabolicHoms591 below · depth 14 - Mod p eigensystem on Γ_H(N) occurs in weight two for Γ₀(N)
CohCarrier.exists_isMaximal_heckeAlgebra_mem_of_mem_parabolicHoms_of_isAbsolutelyIrreducible629 below · depth 14 - Parabolic Tₚ-eigenvalue as an integral polynomial in the T_ℓ-eigenvalues
CohCarrier.exists_mvPolynomial_heckeT_eigenvalue_of_mem_parabolicHoms_gammaH_top679 below · depth 14 - Hecke T_ℓ commutes with the raw diamond action
CohCarrier.heckeT_diamondRaw_comm0 below · depth 14 - The transfer Hecke operator T_ℓ preserves parabolic homomorphisms
CohCarrier.isParabolicHom_heckeT_top3 below · depth 14 - Corestriction along degeneracy maps preserves parabolic homomorphisms
CohCarrier.jDegL_mem_parabolicHoms0 below · depth 14 - Twisted descent: a K₁(q)-fixed vector yields a parabolic class on Γ₁(L/q)
CuspForm.IsNormalizedEigenform.exists_H1_diamondRaw_eq_smul_heckeT_eq_smul_of_mem_fixedSubmodule_fnTwist11 below · depth 14 - Weight-two eigenform as non-zero parabolic class for Γ_H(M)
CuspForm.IsNormalizedEigenform.exists_ne_zero_mem_parabolicHoms_gammaH_heckeT_eq_qCoeff_smul590 below · depth 14 - The two transfer Hecke operators agree at H=top
ModularCurve.PDPairing.heckeT0_apply_eq_heckeT_top_apply2 below · depth 14 - Igusa's lower bound for the mod-ℓ q-expansion field
ModularCurve.index_gammaH_le_finrank_adjoin_jqModC_qExpFunctionFieldC_residueField216 below · depth 14 - Degree of the q-expansion field of X_H(M) over that of X₀(M)
ModularCurve.relfinrank_qExpFunctionFieldC_gamma0_gammaH_eq_index_of_charZero236 below · depth 14 - Slashing a Γ_H(N)-form by an element of Γ₀(N)
ModularForm.exists_coe_eq_slash_of_mem_gamma0_gammaH0 below · depth 14 - Integral mod-p parabolic eigenclass at level L/q
WeierstrassCurve.exists_H1_parabolic_not_dvd_diamondRaw_heckeT_congr_apOfModel_level_div_of_forall_linearMap_psCarrier_eq_zero10,743 below · depth 14 - Pushforward along g kills varpi·φ
CohCarrier.coeff_comp_smul_eq_zero0 below · depth 15 - Joint injectivity of the two degeneracy pull-backs in weight two
CohCarrier.eq_zero_of_iDegL_one_add_iDegL_eq_zero_of_mem_parabolicHoms590 below · depth 15 - Integral p-primitive parabolic class lifting a mod p eigenvector
CohCarrier.exists_H1_int_mem_parabolicHoms_not_exists_eq_smul_of_mem_parabolicHoms_of_diamondRaw_eq_of_heckeT_eq_smul10 below · depth 15 - Steinberg-quotient eigensystem at level Nq, or Eisenstein
CohCarrier.exists_diamondRaw_eq_heckeT_eq_smul_gammaH_bot_mul_or_eisenstein_of_isEigensystemH1_of_steinberg_quotient_of_four_le28 below · depth 15 - Hecke-equivariant Eichler–Shimura map into H¹ at H=top
CohCarrier.exists_eichlerShimura_H1_top582 below · depth 15 - Parabolic eigenclasses at level Mp occurring at level M are old
CohCarrier.exists_eq_iDegL_one_add_iDegL_of_mem_parabolicHoms_of_heckeT_eq_smul680 below · depth 15 - Parabolic Hecke eigenclasses and points of the Hecke algebra
CohCarrier.exists_ringHom_heckeAlgebra_and_forall_exists_eigenclass_of_ker_eq594 below · depth 15 - U_q∘ι_q^*=q ι₁^* at level Nq
CohCarrier.heckeT_iDeg_q_eq_smul0 below · depth 15 - T_ℓ acts as ℓ+1 modulo parabolic homomorphisms
CohCarrier.heckeT_sub_smul_mem_parabolicHoms_of_forall_modEq_one5 below · depth 15 - Transfer and coset-sum Hecke operators agree at H=top
CohCarrier.heckeT_top_apply_eq_heckeOperatorHom1 below · depth 15 - Index of Γ_H(M) as product of indices
CohCarrier.index_gammaH_eq_index_gamma0_mul_index0 below · depth 15 - U_ℓ commutes with the level trace map
CohCarrier.jDeg_heckeT_comm_of_dvd0 below · depth 15 - Tₚ on parabolic cohomology lies in the T_ℓ algebra
CohCarrier.mem_adjoin_heckeT_parabolicHoms_gammaH_top_of_finite675 below · depth 15 - Parabolic cohomology is free of rank two over the Hecke algebra
CohCarrier.nonempty_basis_fin_two_parabolicHoms_and_finrank_eigenspace_eq_two683 below · depth 15 - Surjectivity and kernel of the diamond transfer on H¹
CohCarrier.surjective_jDeg_one_and_jDeg_eq_zero_iff_of_four_le7 below · depth 15 - Index of H{±1} bounds the degree of F_H/F₀
ModularCurve.index_le_relfinrank_qExpFunctionFieldC_gamma0_gammaH_of_charZero41 below · depth 15 - Ramified residual representations give no eigenvector in H¹(Γ₀(M),k)
ResidualGaloisRep.eq_zero_of_forall_heckeT_eq_smul_of_not_isUnramifiedAt1,382 below · depth 15 - A non-zero parabolic diamond-fixed eigenclass with curve eigenvalues
WeierstrassCurve.exists_H1_bot_ne_zero_parabolic_of_diamondRaw_eq_of_heckeT_eq_smul76 below · depth 15 - Integral parabolic mod-p eigenclass attached to W at level N
WeierstrassCurve.exists_H1_parabolic_not_dvd_heckeT_congr_apOfModel_of_isEigensystemH1_one96 below · depth 15 - Faithful Hecke action on H¹ₚₐᵣ(Γ₀(N),ℂ) via Eichler–Shimura
CohCarrier.exists_heckeAlgebra_ringHom_parabolicHoms_H1_top583 below · depth 16 - Base change of parabolic cohomology of Γ₁(N), N≥ 4
CohCarrier.exists_linearMap_baseChange_parabolicHoms_gammaH_bot_range_eq_parabolicHoms_of_four_le6 below · depth 16 - Level-raising combination killed by U_q at level Nq²
CohCarrier.heckeT_comb_eq_zero3 below · depth 16 - U_q commutes with the degree-one degeneracy map
CohCarrier.heckeT_iDeg_one_comm_of_dvd0 below · depth 16 - Index ℓ of the upper-triangular subgroup of Γ_H(M)
CohCarrier.index_GammaHUpper_of_dvd0 below · depth 16 - Injectivity of degeneracy restriction when relative index is invertible
CohCarrier.injective_iDeg_one_of_isUnit_relIndex0 below · depth 16 - Transfer-Hecke eigencharacters of Γ₀(N) give eigensystems in H¹
CohCarrier.isEigensystemH1_one_of_heckeT_eq_smul2 below · depth 16 - The nine degeneracy compositions at level Nq²
CohCarrier.jDeg_iDeg_nine_identities_of_prime17 below · depth 16 - Vanishing of H²(Γ₀(M),A) when [(ℤ/M)^× : H] is invertible
CohCarrier.subsingleton_H2_gamma0_of_isUnit_index8 below · depth 16 - Bounded p-denominators of (⟨ d⟩ F)∣ W at 𝔪
CuspForm.exists_forall_qCoeff_alSlash_diamondLinH_p_integral_of_isIntegralQExp36 below · depth 16 - Serre's Eisenstein-trace congruence at level Γ_H(M)
CuspForm.exists_forall_weight_add_mul_qCoeff_congr_gammaH_level_div_of_alSlash_diamondLinH_p_integral16 below · depth 16 - Slashing a cusp form by σ ∈ Γ₀(M) keeps cusp vanishing
CuspFormClass.isZeroAt_slash_of_mem_Gamma01 below · depth 16 - Vanishing at cusps of (f|_kσ)|_kdiag(ℓ,1)
CuspFormClass.isZeroAt_slash_slash_heckeDiagMatrix_of_mem_Gamma01 below · depth 16 - Pairwise commutation of Hecke and diamond operators on H¹
HeckeCohomology.commute_of_forall_eq_heckeH1_cTop_or_eq_heckeH1_conjHom_of_forall_rep_eq_monoidHom_submonoid5 below · depth 16 - Pulling back Hecke eigenvectors in H¹ along a short exact sequence at level Γ_H(N)
HeckeCohomology.exists_eigenvector_H1_of_eigenvector_H1_of_shortExact_gammaH8 below · depth 16 - Shapiro isomorphism for P¹(𝔽_q), with diamond and Hecke compatibility
HeckeCohomology.exists_shapiro_ind_ker_unitsMap_bijective_linear_and_conjHom_eq_diamondRaw_and_heckeH1_eq_heckeT4 below · depth 16 - From a Γ₀(N) eigensystem to a diamond-fixed eigenclass
HeckeEis.exists_ne_zero_map_conjHom_eq_and_heckeH1_gammaH_bot_eq_smul_of_isEigensystemH11 below · depth 16 - Diamond operators act faithfully on reduced q-expansions
ModularCurve.exists_intSeriesC_mul_ne_of_gamma0Units_not_mem3 below · depth 16 - Periods of f∣₂σ and the raw diamond action
ModularCurve.periodMapOf_gammaH_eq_diamondRaw_of_coe_eq_slash4 below · depth 16 - Period map intertwines U_q on forms with cohomological Hecke operator
ModularCurve.periodMapOf_gammaH_eq_heckeT_of_coe_eq_heckeU4 below · depth 16 - Period map intertwines classical T_ℓ with cohomological T_ℓ
ModularCurve.periodMapOf_gammaH_eq_heckeT_of_coe_eq_heckeU_add_slash4 below · depth 16 - Period map commutes with the degeneracy map V_d
ModularCurve.periodMap_rescaleLin_apply3 below · depth 16 - Congruent form with integral q-expansion modulo 𝔪
ModularForm.exists_isIntegralQExp_qCoeff_congr_of_qCoeff_congr_intCast_gammaH105 below · depth 16 - Γ_H(M)-invariance of U_ℓ plus the diamond-twisted term
ModularForm.heckeU_add_slash_slash_eq_self_of_mem_GammaH0 below · depth 16 - U_q preserves weight-k Γ_H(M)-invariance when q ∣ M
ModularForm.heckeU_slash_eq_self_of_mem_GammaH0 below · depth 16 - Parabolic diamond-invariant H¹(Γ₁(N)) class with eigenvalues a_ℓ(W)
WeierstrassCurve.exists_H1_bot_ne_zero_parabolic_diamondRaw_eq_heckeT_eq_smul_of_isEigensystemH1_one84 below · depth 16 - Vanishing of r-old parabolic eigenclasses killed by both trace maps
CohCarrier.eq_zero_of_mem_parabolicHoms_of_jDeg_eq_zero_of_apply_T_sq_ne722 below · depth 17 - Deligne–Serre lifting for Hecke eigenclasses on Γ_H(N)
CohCarrier.exists_complex_heckeT_eigen_reduction_eq_of_mem_span_int5 below · depth 17 - Hecke operator acts by its degree on diamond-invariant classes
CohCarrier.exists_iDeg_eq_heckeT_sub_smul_of_forall_diamondRaw_eq4 below · depth 17 - Hecke eigenvalue systems in parabolic cohomology are cuspidal
CohCarrier.exists_ringHom_heckeAlgebra_apply_smul_eq_heckeT_of_mem_parabolicHoms593 below · depth 17 - T_ℓ acts by ℓ+1 at elements of finite order
CohCarrier.heckeT_top_apply_eq_smul_of_isOfFinOrder2 below · depth 17 - Degeneracy maps from level Nq² have index q(q+1)
CohCarrier.index_range_iotaDeg_of_prime_sq3 below · depth 17 - Coefficient naturality of the degeneracy trace jDeg
CohCarrier.jDeg_comp_coeff0 below · depth 17 - Corner compositions of degeneracy maps at level Nq²
CohCarrier.jDeg_iDeg_corner_of_prime_sq12 below · depth 17 - Homomorphisms killing torsion lie in the integral span
CohCarrier.mem_span_int_of_forall_isOfFinOrder_apply_eq_zero1 below · depth 17 - Vanishing of H²(Γ_H(N), A) for all coefficients
CohCarrier.subsingleton_H2_GammaH6 below · depth 17 - Equivariant Hecke eigenclass attached to a newform of level Nq²
CuspForm.IsNewform.exists_H1_gammaH_dual_ne_zero_equivariant_heckeT_eq_qCoeff_smul_of_isCuspidalOfType43 below · depth 17 - Trace of a cusp form from Γ_H(M) to Γ_{H'}(M/p)
CuspForm.exists_GammaH_coe_eq_add_smul_heckeU_alSlash_diamondLinH6 below · depth 17 - Atkin–Lehner slash preserves cusp forms on Γ_H(M)
CuspForm.exists_GammaH_coe_eq_alSlash6 below · depth 17 - Commutation of two transfer Hecke operators on H¹
HeckeCohomology.commute_heckeH1_cTop_heckeH1_cTop_of_forall_rep_eq_monoidHom_submonoid2 below · depth 17 - Hecke operator at ℓ commutes with a diamond operator
HeckeCohomology.commute_heckeH1_cTop_heckeH1_conjHom_of_forall_rep_eq_monoidHom_submonoid2 below · depth 17 - Diamond operators on H¹(Γ₁(N),X) commute
HeckeCohomology.commute_heckeH1_conjHom_heckeH1_conjHom_of_forall_rep_eq_monoidHom_submonoid1 below · depth 17 - Shapiro isomorphism for P¹(𝔽_q) on Γ₁(N)
HeckeCohomology.exists_shapiro_ind_ker_unitsMap_bijective_and_exists_smul_eq_self_and_forall_cocycles_apply_eq_apply2 below · depth 17 - Evaluation at a fixed point respects diamonds and Hecke operators
HeckeCohomology.map_conjHom_eq_diamondRaw_and_heckeH1_diagElem_eq_heckeT_of_forall_cocycles_apply_eq_apply0 below · depth 17 - Residual H¹ eigensystem at level N from a cuspidal type
HeckeEis.isEigensystemH1_of_H1_gammaH_dual_of_isCuspidalOfType_of_qCoeff_congr47 below · depth 17 - Fricke transform of a rational form on Γ_H(M)
ModularCurve.exists_slash_fricke_eq_sum_smul_of_ratCast_qExpansion34 below · depth 17 - Forms with integral q-expansions span M_k(Γ_H(N))
ModularCurve.exists_sum_smul_eq_of_isIntegralQExp_gammaH103 below · depth 17 - Degree over ℚ̄(j) bounded by degree over k(j)
ModularCurve.finrank_gammaH_le_finrank_gammaH_residueField_of_not_dvd284 below · depth 17 - Weight-four Eisenstein series with partial divisor-sum q-expansions
ModularForm.exists_gamma1_weight_four_isIntegralQExp_partialDivisorSum_slash_eq2 below · depth 17 - Γ_H(M)∩Γ₀(Mℓ)=Γ_{H'}(Mℓ) for H' the unit preimage
CohCarrier.gammaH_inf_gamma0_mul_eq_gammaH_comap_unitsMap0 below · depth 18 - Uᵣ is an involution on r-new classes
CohCarrier.heckeT_heckeT_eq_self_of_jDeg_one_eq_zero_of_jDeg_eq_zero0 below · depth 18 - Composition of degeneracy maps ι_{d_1 d_2} = ι_{d_1}∘ι_{d_2}
CohCarrier.iotaDeg_comp0 below · depth 18 - Hecke-equivariant embedding of coefficient H¹ into Γ_{H_1}(Nq²)-cohomology
HeckeEis.exists_coeffH1_restrict_injective_range_iff_equivariant_heckeT_of_charZero5 below · depth 18 - Base change of the parabolic lattice of Γ₀(N)
CohCarrier.exists_linearMap_baseChange_parabolicHoms_gamma0_range_eq_parabolicHoms_top5 below · depth 19 - Cuspidal K(q)-type of a newform inside H¹(Γ_H(Nq²),ℂ)
CuspForm.IsNewform.exists_linearMap_fixedSubmodule_H1_gammaH_laws_of_isCuspidalOfType36 below · depth 19 - Conjugation by diag(q,1) transports weight-two cusp forms and periods
CuspForm.exists_linearEquiv_gamma_inf_gamma0_gammaH_slash_heckeDiagMatrix_and_periodOf_eq4 below · depth 19 - Genus of X_H(M) unchanged at places above ℓ∤ M
ModularCurve.genusFF_gammaH_residueField_eq_of_not_dvd841 below · depth 19 - Γ₁(N)∩Γ₀(Nℓ)=Γ_H(Nℓ) for H the reduction kernel
CongruenceSubgroup.gamma1_inf_gamma0_mul_eq_gammaH_ker0 below · depth 20 - Nebentypus decomposition of cusp forms for Γ_H(M)
CuspForm.exists_finset_dirichlet_sum_eq_and_independent_of_gammaH0 below · depth 20 - A cusp form for Γ_H(M) is one for Γ₁(M)
CuspForm.exists_gamma1_coe_eq_of_gammaH0 below · depth 20 - Cusp forms with nebentypus trivial on H descend to Γ_H(M)
CuspForm.exists_gammaH_coe_eq_of_hasNebentypus0 below · depth 20 - Bottom rows mod M and cosets of ±Γ_H(M)
CohCarrier.exists_bottomRow_eq_and_torsionOrbit_bottomRow_eq_iff1 below · depth 21 - Projection formula for corestriction and the cup pairing
ModularCurve.CupPairing.mult_mul_pair_coresAdd_eq4 below · depth 21 - Level Γ_H(M) structures on y²+y=x³ in characteristic two
WeierstrassCurve.natCard_torsionOrbit_and_exists_surjective_doubleCoset_of_char_two8 below · depth 21 - Order-M points modulo ± H counted by an index
AddCommGroup.natCard_torsionOrbit_gammaH_eq_index2 below · depth 22 - Primitive vectors parametrise double cosets Γ_H(M)backslashSL₂(ℤ)/⟨ g⟩
CohCarrier.exists_surjective_doubleCoset_gammaH_zpowers_of_addOrderOf_eq1 below · depth 22 - Base change of the q-expansion function field along k ⊆ K
ModularCurve.qExpFunctionFieldC_eq_adjoin_image_coeffMap_qExpFunctionFieldC0 below · depth 23 - Forms on Γ_H(N) separate inequivalent points
ModularForm.exists_gammaH_apply_mul_apply_ne_of_forall_smul_ne17 below · depth 23 - Degree over K(j) of the Γ_H(M) q-expansion field equals [SL₂(ℤ):±Γ_H(M)]
ModularCurve.finrank_adjoin_jqModC_laurentBaseChange_qExpFunctionFieldC_gammaH_eq_index224 below · depth 24 - Forms on Γ_H(N) separate points of one Γ₀(N)-orbit
ModularForm.exists_gammaH_apply_mul_apply_ne_of_forall_smul_ne_of_gamma0_smul_eq15 below · depth 24 - Division values of wp detect Γ_H(N)-orbits
CohCarrier.exists_mem_GammaH_smul_eq_of_forall_sum_weierstrassP_pow_eq7 below · depth 25 - Igusa degree equality for Γ₁(L)≤Γ≤Γ₀(L)
ModularCurve.finrank_adjoin_jqModC_qExpFunctionFieldC_eq_index_of_gamma1_le_of_le_gamma0551 below · depth 25 - H-symmetrisation of a Γ₀(M)-permuted family of Γ₁(M)-forms
ModularForm.exists_gammaH_coe_eq_sum_of_forall_slash_eq1 below · depth 25 - Ogg's unit Δ(q)/Δ(qᵖ): integrality and level Γ_H(M)
ModularCurve.exists_int_coeffMap_eq_modularUnitSeries_and_mem_qExpFunctionFieldC_gammaH_of_dvd39 below · depth 26 - Uniqueness of a reduction map on places of X_H(M)
ModularCurve.placeReduction_unique_of_forall_mapDomain_eq_ord_gammaH_of_not_dvd955 below · depth 26 - Invariance of f∣ W + Uₚ f at level R
ModularForm.alSlash_add_heckeU_slash_eq_self_of_mem_GammaH0 below · depth 26 - A Γ_H(M)-invariant form for Γ₁(M) is modular for Γ_H(M)
ModularForm.exists_gammaH_coe_eq_of_forall_slash_eq0 below · depth 26 - Faithful diamond action on the q-expansion field of X_H(M)
ModularCurve.exists_monoidHom_gamma0_algEquiv_qExpFunctionFieldC_gammaH_apply_eq_one_iff_of_charZero35 below · depth 27 - Relative degree is preserved under extension of constants
ModularCurve.relfinrank_adjoin_image_coeffMap_eq_relfinrank_of_le0 below · depth 27 - j(q^ℓ) in the q-expansion field of Γ_H(N)∩Γ₀(Nℓ)
ModularCurve.qExpand_jqModC_mem_qExpFunctionFieldC_gammaH_inf_gamma0_mul5 below · depth 28 - j(qᵈ) not in the q-expansion function field of Γ_{H'}(N)
ModularCurve.qExpand_jqModC_not_mem_qExpFunctionFieldC_gammaH_of_not_dvd123 below · depth 28 - Atkin–Lehner slash preserves rational q-coefficients in weight 2
CuspForm.exists_ratCast_qCoeff_alSlash_of_forall_qCoeff_ratCast_gammaH204 below · depth 29 - j(qᵈ) not in the mod-ℓ level-Γ₁(N) expansion field
ModularCurve.qExpand_jqModC_not_mem_qExpFunctionFieldC_gammaH_bot_of_charP114 below · depth 29 - j(qᵈ) lies outside the Γ_H(N,bot) q-expansion field
ModularCurve.qExpand_jqModC_not_mem_qExpFunctionFieldC_gammaH_bot_of_charZero9 below · depth 29 - Diamond-twisted level lowering from Γ_H(M) to Γ_{H'}(M/p)
CuspForm.exists_GammaH_coe_eq_diamondLinH_add_smul_heckeU_alSlash6 below · depth 30 - Rational basis of cusp forms on Γ_H(N)
CuspForm.exists_basis_gammaH_qCoeff_mem_range_ratCast45 below · depth 30 - Equality y(qᵈ)=jmath̄(q^N) forces d∣ N
ModularCurve.dvd_of_qExpand_eq_qExpand_jqModC0 below · depth 30
… and 22 more statements (search for the module name to find them).