Definitions/Def_ModularForm_HeckeOperator.lean
Hecke operators , on functions on the upper half-plane
The module sets up the weight-k Hecke operators T_p and U_p as operators on arbitrary functions f\colon\mathbb H\to\mathbb C, using Mathlib's weight-k slash action of \mathrm{GL}_2(\mathbb R) (normalisation |\det\gamma|^{k-1}\,\mathrm{denom}(\gamma,\tau)^{-k}). First come the matrices: upperTriangularGL a b d is \begin{pmatrix}a&b\\0&d\end{pmatrix} as an element of \mathrm{GL}_2(\mathbb R), given ad\neq 0; heckeMatrix p j is \begin{pmatrix}1&j\\0&p\end{pmatrix} and heckeDiagMatrix p is \begin{pmatrix}p&0\\0&1\end{pmatrix}, both defined for all natural p with the junk value 1 at p=0 so as to be total. Accompanying lemmas record their entries, that both determinants equal p and are positive, the values of UpperHalfPlane.denom (p, resp. 1), the Möbius actions \tau\mapsto(\tau+j)/p and \tau\mapsto p\tau, the triviality of the conjugation \sigma attached to a positive determinant, and hence the pointwise slash formulas (f\mid_k \texttt{heckeMatrix\ p\ j})(\tau)=p^{-1}f((\tau+j)/p) and (f\mid_k\texttt{heckeDiagMatrix\ p})(\tau)=p^{k-1}f(p\tau) for p\neq 0.
Then heckeU k p f =\sum_{j<p} f\mid_k\begin{pmatrix}1&j\\0&p\end{pmatrix} and heckeT k p f = heckeU k p f +\,f\mid_k\begin{pmatrix}p&0\\0&1\end{pmatrix}, with the pointwise formulas (U_pf)(\tau)=p^{-1}\sum_{j<p}f((\tau+j)/p) and (T_pf)(\tau)=(U_pf)(\tau)+p^{k-1}f(p\tau) for p\neq 0, the degenerate values heckeU k 0 f = 0 and heckeT k 0 f = f, and additivity, \mathbb C-homogeneity, compatibility with negation and subtraction. Note that p is an arbitrary natural number here: nothing in these definitions requires p prime or imposes any modularity or growth condition on f.
Finally the same operators are given on the coefficient side, as operators on sequences a\colon\mathbb N\to\mathbb C: coeffHeckeU p a n = a (n * p) and coeffHeckeT k p a n = a (n * p) + p^{k-1} a (n / p) when p\mid n, the second term being 0 otherwise; these are shown additive and \mathbb C-homogeneous. No theorem in this module links the two sides; the coefficient operators are purely algebraic data.
Relation to Mathlib
Mathlib supplies the upper half-plane, its \mathrm{GL}_2(\mathbb R)-action with UpperHalfPlane.denom, UpperHalfPlane.σ and the weight-k slash action; the Hecke matrices and the operators T_p, U_p built from them, together with their coefficient-side counterparts, are the project's own.
Where it is used
These operators are the input to the notion of a normalised Hecke eigenform used throughout the modularity part of the argument; the coefficient-side versions coeffHeckeT and coeffHeckeU allow eigenform conditions on q-expansion coefficients to be stated without analysis. Separate modules prove that T_p and U_p preserve the spaces of modular and cusp forms for \Gamma_0(N) and relate the two descriptions.
References
- F. Diamond and J. Shurman, A First Course in Modular Forms, Graduate Texts in Mathematics 228, Springer, 2005, §5.2 (Proposition 5.2.2)
- J.-P. Serre, A Course in Arithmetic, Graduate Texts in Mathematics 7, Springer, 1973, Chapter VII
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 205 lines
- 50 declarations
- used in the statements of 143 theorems and imported by 330 proofs
- imports 0 definition modules
Source file: Definitions/Def_ModularForm_HeckeOperator.lean
Imports
- only Mathlib
Declarations
- def
ModularForm.upperTriangularGL - theorem
ModularForm.val_upperTriangularGL - def
ModularForm.heckeMatrix - def
ModularForm.heckeDiagMatrix - theorem
ModularForm.val_heckeMatrix - theorem
ModularForm.val_heckeDiagMatrix - theorem
ModularForm.heckeMatrix_zero - theorem
ModularForm.heckeDiagMatrix_zero - theorem
ModularForm.det_heckeMatrix - theorem
ModularForm.det_heckeDiagMatrix - theorem
ModularForm.det_heckeMatrix_pos - theorem
ModularForm.det_heckeDiagMatrix_pos - theorem
ModularForm.denom_heckeMatrix - theorem
ModularForm.denom_heckeDiagMatrix - theorem
ModularForm.coe_heckeMatrix_smul - theorem
ModularForm.coe_heckeDiagMatrix_smul - theorem
ModularForm.σ_heckeMatrix - theorem
ModularForm.σ_heckeDiagMatrix - theorem
ModularForm.slash_heckeMatrix_apply - theorem
ModularForm.slash_heckeDiagMatrix_apply - def
ModularForm.heckeU - def
ModularForm.heckeT - theorem
ModularForm.heckeU_def - theorem
ModularForm.heckeT_eq_heckeU_add - theorem
ModularForm.heckeT_def - theorem
ModularForm.heckeU_zero_left - theorem
ModularForm.heckeT_zero_left - theorem
ModularForm.heckeU_apply - theorem
ModularForm.heckeT_apply - theorem
ModularForm.heckeU_zero - theorem
ModularForm.heckeT_zero - theorem
ModularForm.heckeU_add - theorem
ModularForm.heckeT_add - theorem
ModularForm.heckeU_smul - theorem
ModularForm.heckeT_smul - theorem
ModularForm.heckeU_neg - theorem
ModularForm.heckeT_neg - theorem
ModularForm.heckeU_sub - theorem
ModularForm.heckeT_sub - def
ModularForm.coeffHeckeT - def
ModularForm.coeffHeckeU - theorem
ModularForm.coeffHeckeT_apply - theorem
ModularForm.coeffHeckeU_apply - theorem
ModularForm.coeffHeckeT_of_dvd - theorem
ModularForm.coeffHeckeT_of_not_dvd - theorem
ModularForm.coeffHeckeT_eq_coeffHeckeU_add - theorem
ModularForm.coeffHeckeT_add - theorem
ModularForm.coeffHeckeT_smul - theorem
ModularForm.coeffHeckeU_add - theorem
ModularForm.coeffHeckeU_smul
Source
import Mathlib.NumberTheory.ModularForms.SlashActions ↗ set_option autoImplicit false noncomputable section open scoped MatrixGroups ModularForm namespace ModularForm def upperTriangularGL (a b d : ℝ) (had : a * d ≠ 0) : GL (Fin 2) ℝ := Matrix.GeneralLinearGroup.mkOfDetNeZero !![a, b; 0, d] (by rwa [Matrix.det_fin_two_of, mul_zero, sub_zero]) @[simp] theorem val_upperTriangularGL (a b d : ℝ) (had : a * d ≠ 0) : ((upperTriangularGL a b d had : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ) = !![a, b; 0, d] := rfl def heckeMatrix (p j : ℕ) : GL (Fin 2) ℝ := if hp : p = 0 then 1 else upperTriangularGL 1 j p (by rw [one_mul]; exact_mod_cast hp) def heckeDiagMatrix (p : ℕ) : GL (Fin 2) ℝ := if hp : p = 0 then 1 else upperTriangularGL p 0 1 (by rw [mul_one]; exact_mod_cast hp) @[simp] theorem val_heckeMatrix {p : ℕ} (hp : p ≠ 0) (j : ℕ) : ((heckeMatrix p j : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ) = !![(1 : ℝ), (j : ℝ); 0, (p : ℝ)] := by simp [heckeMatrix, hp] @[simp] theorem val_heckeDiagMatrix {p : ℕ} (hp : p ≠ 0) : ((heckeDiagMatrix p : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ) = !![(p : ℝ), 0; 0, 1] := by simp [heckeDiagMatrix, hp] @[simp] theorem heckeMatrix_zero (j : ℕ) : heckeMatrix 0 j = 1 := by simp [heckeMatrix] @[simp] theorem heckeDiagMatrix_zero : heckeDiagMatrix 0 = 1 := by simp [heckeDiagMatrix] theorem det_heckeMatrix {p : ℕ} (hp : p ≠ 0) (j : ℕ) : ((heckeMatrix p j).det : ℝ) = p := by rw [Matrix.GeneralLinearGroup.val_det_apply, val_heckeMatrix hp, Matrix.det_fin_two_of] ring theorem det_heckeDiagMatrix {p : ℕ} (hp : p ≠ 0) : ((heckeDiagMatrix p).det : ℝ) = p := by rw [Matrix.GeneralLinearGroup.val_det_apply, val_heckeDiagMatrix hp, Matrix.det_fin_two_of] ring theorem det_heckeMatrix_pos (p j : ℕ) : 0 < ((heckeMatrix p j).det : ℝ) := by rcases eq_or_ne p 0 with rfl | hp · simp · rw [det_heckeMatrix hp]; exact_mod_cast Nat.pos_of_ne_zero hp theorem det_heckeDiagMatrix_pos (p : ℕ) : 0 < ((heckeDiagMatrix p).det : ℝ) := by rcases eq_or_ne p 0 with rfl | hp · simp · rw [det_heckeDiagMatrix hp]; exact_mod_cast Nat.pos_of_ne_zero hp theorem denom_heckeMatrix {p : ℕ} (hp : p ≠ 0) (j : ℕ) (τ : UpperHalfPlane) : UpperHalfPlane.denom (heckeMatrix p j) τ = p := by simp [UpperHalfPlane.denom, val_heckeMatrix hp] theorem denom_heckeDiagMatrix {p : ℕ} (hp : p ≠ 0) (τ : UpperHalfPlane) : UpperHalfPlane.denom (heckeDiagMatrix p) τ = 1 := by simp [UpperHalfPlane.denom, val_heckeDiagMatrix hp] theorem coe_heckeMatrix_smul {p : ℕ} (hp : p ≠ 0) (j : ℕ) (τ : UpperHalfPlane) : ((heckeMatrix p j • τ : UpperHalfPlane) : ℂ) = ((τ : ℂ) + j) / p := by rw [UpperHalfPlane.coe_smul_of_det_pos (det_heckeMatrix_pos p j)] simp [UpperHalfPlane.num, UpperHalfPlane.denom, val_heckeMatrix hp] theorem coe_heckeDiagMatrix_smul {p : ℕ} (hp : p ≠ 0) (τ : UpperHalfPlane) : ((heckeDiagMatrix p • τ : UpperHalfPlane) : ℂ) = (p : ℂ) * (τ : ℂ) := by rw [UpperHalfPlane.coe_smul_of_det_pos (det_heckeDiagMatrix_pos p)] simp [UpperHalfPlane.num, UpperHalfPlane.denom, val_heckeDiagMatrix hp] theorem σ_heckeMatrix (p j : ℕ) : UpperHalfPlane.σ (heckeMatrix p j) = .refl ℝ ℂ := by rw [UpperHalfPlane.σ, if_pos (det_heckeMatrix_pos p j)] theorem σ_heckeDiagMatrix (p : ℕ) : UpperHalfPlane.σ (heckeDiagMatrix p) = .refl ℝ ℂ := by rw [UpperHalfPlane.σ, if_pos (det_heckeDiagMatrix_pos p)] theorem slash_heckeMatrix_apply (k : ℤ) {p : ℕ} (hp : p ≠ 0) (j : ℕ) (f : UpperHalfPlane → ℂ) (τ : UpperHalfPlane) : (f ∣[k] heckeMatrix p j) τ = (p : ℂ)⁻¹ * f (heckeMatrix p j • τ) := by have hp' : (p : ℂ) ≠ 0 := by exact_mod_cast hp rw [ModularForm.slash_apply, σ_heckeMatrix, det_heckeMatrix hp, denom_heckeMatrix hp] simp only [ContinuousAlgEquiv.refl_apply, Nat.abs_cast, Complex.ofReal_natCast] rw [mul_assoc, ← zpow_add₀ hp', show k - 1 + -k = -1 by ring, zpow_neg_one, mul_comm] theorem slash_heckeDiagMatrix_apply (k : ℤ) {p : ℕ} (hp : p ≠ 0) (f : UpperHalfPlane → ℂ) (τ : UpperHalfPlane) : (f ∣[k] heckeDiagMatrix p) τ = (p : ℂ) ^ (k - 1) * f (heckeDiagMatrix p • τ) := by rw [ModularForm.slash_apply, σ_heckeDiagMatrix, det_heckeDiagMatrix hp, denom_heckeDiagMatrix hp] simp only [ContinuousAlgEquiv.refl_apply, Nat.abs_cast, Complex.ofReal_natCast, one_zpow, mul_one] rw [mul_comm] def heckeU (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : UpperHalfPlane → ℂ := ∑ j ∈ Finset.range p, f ∣[k] heckeMatrix p j def heckeT (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : UpperHalfPlane → ℂ := heckeU k p f + f ∣[k] heckeDiagMatrix p theorem heckeU_def (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : heckeU k p f = ∑ j ∈ Finset.range p, f ∣[k] heckeMatrix p j := rfl theorem heckeT_eq_heckeU_add (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : heckeT k p f = heckeU k p f + f ∣[k] heckeDiagMatrix p := rfl theorem heckeT_def (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : heckeT k p f = (∑ j ∈ Finset.range p, f ∣[k] heckeMatrix p j) + f ∣[k] heckeDiagMatrix p := rfl @[simp] theorem heckeU_zero_left (k : ℤ) (f : UpperHalfPlane → ℂ) : heckeU k 0 f = 0 := by simp [heckeU] @[simp] theorem heckeT_zero_left (k : ℤ) (f : UpperHalfPlane → ℂ) : heckeT k 0 f = f := by simp [heckeT] theorem heckeU_apply (k : ℤ) {p : ℕ} (hp : p ≠ 0) (f : UpperHalfPlane → ℂ) (τ : UpperHalfPlane) : heckeU k p f τ = (p : ℂ)⁻¹ * ∑ j ∈ Finset.range p, f (heckeMatrix p j • τ) := by simp only [heckeU, Finset.sum_apply, slash_heckeMatrix_apply k hp, Finset.mul_sum] theorem heckeT_apply (k : ℤ) {p : ℕ} (hp : p ≠ 0) (f : UpperHalfPlane → ℂ) (τ : UpperHalfPlane) : heckeT k p f τ = (p : ℂ)⁻¹ * ∑ j ∈ Finset.range p, f (heckeMatrix p j • τ) + (p : ℂ) ^ (k - 1) * f (heckeDiagMatrix p • τ) := by rw [heckeT, Pi.add_apply, heckeU_apply k hp, slash_heckeDiagMatrix_apply k hp] @[simp] theorem heckeU_zero (k : ℤ) (p : ℕ) : heckeU k p (0 : UpperHalfPlane → ℂ) = 0 := by simp [heckeU] @[simp] theorem heckeT_zero (k : ℤ) (p : ℕ) : heckeT k p (0 : UpperHalfPlane → ℂ) = 0 := by simp [heckeT] theorem heckeU_add (k : ℤ) (p : ℕ) (f g : UpperHalfPlane → ℂ) : heckeU k p (f + g) = heckeU k p f + heckeU k p g := by simp [heckeU, Finset.sum_add_distrib] theorem heckeT_add (k : ℤ) (p : ℕ) (f g : UpperHalfPlane → ℂ) : heckeT k p (f + g) = heckeT k p f + heckeT k p g := by simp only [heckeT, heckeU_add, SlashAction.add_slash] abel theorem heckeU_smul (k : ℤ) (p : ℕ) (c : ℂ) (f : UpperHalfPlane → ℂ) : heckeU k p (c • f) = c • heckeU k p f := by simp only [heckeU, ModularForm.smul_slash, σ_heckeMatrix, ContinuousAlgEquiv.refl_apply, Finset.smul_sum] theorem heckeT_smul (k : ℤ) (p : ℕ) (c : ℂ) (f : UpperHalfPlane → ℂ) : heckeT k p (c • f) = c • heckeT k p f := by rw [heckeT, heckeT, heckeU_smul, ModularForm.smul_slash, σ_heckeDiagMatrix, ContinuousAlgEquiv.refl_apply, smul_add] theorem heckeU_neg (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : heckeU k p (-f) = -heckeU k p f := by simp [heckeU, Finset.sum_neg_distrib] theorem heckeT_neg (k : ℤ) (p : ℕ) (f : UpperHalfPlane → ℂ) : heckeT k p (-f) = -heckeT k p f := by simp only [heckeT, heckeU_neg, SlashAction.neg_slash, neg_add] theorem heckeU_sub (k : ℤ) (p : ℕ) (f g : UpperHalfPlane → ℂ) : heckeU k p (f - g) = heckeU k p f - heckeU k p g := by rw [sub_eq_add_neg, heckeU_add, heckeU_neg, ← sub_eq_add_neg] theorem heckeT_sub (k : ℤ) (p : ℕ) (f g : UpperHalfPlane → ℂ) : heckeT k p (f - g) = heckeT k p f - heckeT k p g := by rw [sub_eq_add_neg, heckeT_add, heckeT_neg, ← sub_eq_add_neg] def coeffHeckeT (k : ℤ) (p : ℕ) (a : ℕ → ℂ) (n : ℕ) : ℂ := a (n * p) + if p ∣ n then (p : ℂ) ^ (k - 1) * a (n / p) else 0 def coeffHeckeU (p : ℕ) (a : ℕ → ℂ) (n : ℕ) : ℂ := a (n * p) theorem coeffHeckeT_apply (k : ℤ) (p : ℕ) (a : ℕ → ℂ) (n : ℕ) : coeffHeckeT k p a n = a (n * p) + if p ∣ n then (p : ℂ) ^ (k - 1) * a (n / p) else 0 := rfl theorem coeffHeckeU_apply (p : ℕ) (a : ℕ → ℂ) (n : ℕ) : coeffHeckeU p a n = a (n * p) := rfl theorem coeffHeckeT_of_dvd (k : ℤ) {p n : ℕ} (h : p ∣ n) (a : ℕ → ℂ) : coeffHeckeT k p a n = a (n * p) + (p : ℂ) ^ (k - 1) * a (n / p) := by rw [coeffHeckeT, if_pos h] theorem coeffHeckeT_of_not_dvd (k : ℤ) {p n : ℕ} (h : ¬ p ∣ n) (a : ℕ → ℂ) : coeffHeckeT k p a n = a (n * p) := by rw [coeffHeckeT, if_neg h, add_zero] theorem coeffHeckeT_eq_coeffHeckeU_add (k : ℤ) (p : ℕ) (a : ℕ → ℂ) (n : ℕ) : coeffHeckeT k p a n = coeffHeckeU p a n + if p ∣ n then (p : ℂ) ^ (k - 1) * a (n / p) else 0 := rfl theorem coeffHeckeT_add (k : ℤ) (p : ℕ) (a b : ℕ → ℂ) : coeffHeckeT k p (a + b) = coeffHeckeT k p a + coeffHeckeT k p b := by funext n simp only [coeffHeckeT, Pi.add_apply] split_ifs <;> ring theorem coeffHeckeT_smul (k : ℤ) (p : ℕ) (c : ℂ) (a : ℕ → ℂ) : coeffHeckeT k p (c • a) = c • coeffHeckeT k p a := by funext n simp only [coeffHeckeT, Pi.smul_apply, smul_eq_mul] split_ifs <;> ring theorem coeffHeckeU_add (p : ℕ) (a b : ℕ → ℂ) : coeffHeckeU p (a + b) = coeffHeckeU p a + coeffHeckeU p b := rfl theorem coeffHeckeU_smul (p : ℕ) (c : ℂ) (a : ℕ → ℂ) : coeffHeckeU p (c • a) = c • coeffHeckeU p a := rfl end ModularForm end
Statements phrased using this module (143)
- Tₚ f is bounded at every cusp
ModularFormClass.isBoundedAt_heckeT0 below · depth 8 - Normalized eigenforms as simultaneous Tₚ, Uₚ eigenfunctions
CuspForm.isNormalizedEigenform_iff_heckeT14 below · depth 9 - Hecke eigen-relations force the nebentypus character
CuspForm.slash_eq_dirichlet_smul_of_qCoeff_hecke_eigen8 below · depth 9 - A simultaneous Hecke eigen-sequence with a₁=0 vanishes
ModularForm.eq_zero_of_coeffHecke_eigen_of_apply_one_eq_zero0 below · depth 9 - A modular form is determined by its q-expansion
ModularFormClass.eq_of_forall_qCoeff_eq0 below · depth 9 - q-expansion coefficients of Tₚ f
ModularFormClass.qCoeff_heckeT0 below · depth 9 - q-coefficients of Uₚ: aₙ(Uₚf)=aₙₚ(f)
ModularFormClass.qCoeff_heckeU0 below · depth 9 - Vanishing of Γ₁(M)-cusp forms invariant under diag(p,1)
CuspForm.eq_zero_of_slash_heckeDiagMatrix_slash_eq_of_mem_Gamma13 below · depth 10 - Tₚ preserves cusp forms on Γ₀(N) for p ∤ N
CuspForm.exists_coe_eq_heckeT3 below · depth 10 - Uₚ preserves cusp forms on Γ₀(N) for p ∣ N
CuspForm.exists_coe_eq_heckeU3 below · depth 10 - Degeneracy map f(τ)↦ f(dτ) from Γ₀(M) to Γ₀(N)
CuspForm.exists_degeneracy_Gamma00 below · depth 10 - Normalised eigenforms via Hecke eigen-equations on q-coefficients
CuspForm.isNormalizedEigenform_iff_coeffHecke2 below · depth 10 - Tₚ preserves the integral lattice of cusp forms
CuspForm.mem_intLattice_of_coe_eq_heckeT3 below · depth 10 - Uₚ preserves the lattice of integral cusp forms
CuspForm.mem_intLattice_of_coe_eq_heckeU3 below · depth 10 - q-expansion of Tₚ on weight-2 cusp forms
CuspForm.qExpansion_heckeTLin2 below · depth 10 - Formal descent data give q-expansions of the Hecke coset polynomial
ModularCurve.PhiGen.PhiGenDescends.hasSum_cosetPoly_coeff10 below · depth 10 - SL₂(ℤ)-invariance of the Hecke coset polynomial at ℓ
ModularCurve.cosetPoly_smul0 below · depth 10 - Weight-2 trace f+U_q(f∣ W_q) is Γ₀(R)-invariant
ModularForm.add_heckeU_alSlash_slash_eq_self_of_mem_Gamma00 below · depth 10 - Atkin–Lehner trace identity for f∣_k W_q
ModularForm.alSlash_add_heckeU_alSlash_alSlash0 below · depth 10 - Atkin–Lehner operator commutes with T_ℓ, ℓ∤ M
ModularForm.alSlash_heckeT_comm0 below · depth 10 - Coefficient operators Tₚ and U_q commute for coprime p,q
ModularForm.coeffHeckeT_coeffHeckeU_comm0 below · depth 10 - Coefficient Hecke operators commute at coprime levels
ModularForm.coeffHeckeT_comm0 below · depth 10 - Commutativity of the coefficient operators Uₚ and U_q
ModularForm.coeffHeckeU_comm0 below · depth 10 - Hecke eigenvalues of a normalised eigen-sequence are its prime coefficients
ModularForm.coeffHecke_eigenvalue_eq_apply_of_apply_one_eq_one0 below · depth 10 - Tₚ with diamond correction preserves Γ₁(N)-invariance
ModularForm.heckeU_add_slash_heckeDiagMatrix_slash_eq_of_mem_Gamma10 below · depth 10 - Vanishing at cusps of f + U_q(f∣_k W_q)
ModularForm.isZeroAt_add_heckeU_alSlash0 below · depth 10 - Holomorphy of f + U_q(f∣_k W_q)
ModularForm.mdifferentiable_add_heckeU_alSlash0 below · depth 10 - Tₚ f = c f tested on q-expansion coefficients
ModularFormClass.heckeT_eq_smul_iff5 below · depth 10 - Commutation of Tₚ and U_q for coprime p,q
ModularFormClass.heckeT_heckeU_comm10 below · depth 10 - Uₚ f = c f iff aₙₚ = c aₙ for all n
ModularFormClass.heckeU_eq_smul_iff5 below · depth 10 - q-expansion of f(dτ): coefficients shift by d
ModularFormClass.qCoeff_comp_heckeDiagMatrix_smul0 below · depth 10 - Uniqueness of q-expansions of periodic holomorphic functions
UpperHalfPlane.eq_of_forall_qCoeff_eq0 below · depth 10 - q-expansion of f(dτ): coefficients shifted by d
UpperHalfPlane.qCoeff_comp_heckeDiagMatrix_smul0 below · depth 10 - q-expansion coefficients of Uₚ f: aₙ(Uₚf)=aₙₚ(f)
UpperHalfPlane.qCoeff_heckeU0 below · depth 10 - Cusp form periodic under all q'^{-j} vanishes
CuspForm.eq_zero_of_forall_vadd_inv_pow_eq0 below · depth 11 - Invariance of y under translations by q'^{-j}
CuspForm.vadd_inv_pow_eq_of_slash_heckeDiagMatrix_invariant1 below · depth 11 - Vanishing of Tₚ f at the cusps of Γ
CuspFormClass.isZeroAt_heckeT0 below · depth 11 - Uₚ f vanishes at every cusp when f is a cusp form
CuspFormClass.isZeroAt_heckeU0 below · depth 11 - Hecke divisor correspondence on a single point of X₀(N)
ModularCurve.ComplexPlaceDictionary.heckeDivBar_single_pt192 below · depth 11 - Γ₀(N)-invariance of Δ(τ)/Δ(Nτ)
ModularCurve.discriminant_div_discriminant_heckeDiagMatrix_smul1 below · depth 11 - q-expansion of Δ(Nτ)/Δ(τ) realised at period one
ModularCurve.hasSum_modularUnitSeries_inv_qParam6 below · depth 11 - q-expansion of Δ(τ)/Δ(Nτ) at the cusp ∞
ModularCurve.hasSum_modularUnitSeries_qParam6 below · depth 11 - q_ℓ-expansion of F(ℓτ) is A(q^{ℓ^2})
ModularCurve.hasSum_qParam_heckeDiagMatrix_smul0 below · depth 11 - Twisted q-expansion at period ℓ under τ↦(τ+b)/ℓ
ModularCurve.hasSum_qParam_heckeMatrix_smul0 below · depth 11 - q-expansion of Ogg's unit at the cusp 0
ModularCurve.hasSum_smul_modularUnitSeries_inv_qParam6 below · depth 11 - q_N-expansion of Ogg's unit at the cusp 0
ModularCurve.hasSum_smul_modularUnitSeries_qParam6 below · depth 11 - Integrality of the coefficient-level Hecke operator Tₚ
ModularForm.coeffHeckeT_int0 below · depth 11 - Integrality of the coefficient operator Uₚ
ModularForm.coeffHeckeU_int0 below · depth 11 - Tₚ preserves Γ₀(N)-invariance for p ∤ N
ModularForm.heckeT_slash_eq_self_of_mem_Gamma00 below · depth 11 - Uₚ preserves weight-k invariance under Γ₀(N)
ModularForm.heckeU_slash_eq_self_of_mem_Gamma00 below · depth 11 - Boundedness at i∞ is preserved by Tₚ
ModularForm.isBoundedAtImInfty_heckeT0 below · depth 11 - Boundedness at i∞ is preserved by Uₚ
ModularForm.isBoundedAtImInfty_heckeU0 below · depth 11 - Holomorphy of Tₚ f for holomorphic f
ModularForm.mdifferentiable_heckeT0 below · depth 11 - Holomorphy of Uₚ f on the upper half-plane
ModularForm.mdifferentiable_heckeU0 below · depth 11 - 1-periodicity of Tₚ f
ModularForm.periodic_heckeT_comp_ofComplex0 below · depth 11 - Uₚ preserves 1-periodicity
ModularForm.periodic_heckeU_comp_ofComplex0 below · depth 11 - Hecke translates Tₚ, T_q commute for coprime p,q
ModularFormClass.heckeT_heckeT_comm6 below · depth 11 - Commutativity of the Hecke operators Uₚ and U_q
ModularFormClass.heckeU_heckeU_comm6 below · depth 11 - q-expansion of Tₚ f is Uₚ + p^{k-1}Vₚ applied to that of f
ModularFormClass.qExpansion_heckeT_eq_heckeT1 below · depth 11 - q-expansion coefficients of Tₚ f
UpperHalfPlane.qCoeff_heckeT0 below · depth 11 - Trace from Γ₀(M) to Γ₀(R) of a cusp form
CuspForm.exists_coe_eq_add_smul_heckeU_alSlash0 below · depth 12 - U_ℓ lowers the level when ℓ² ∣ N
CuspForm.exists_gamma1_div_coe_eq_heckeU_of_dvd_div3 below · depth 12 - Degeneracy map q↦ q^ℓ sends the place of τ to that of ℓτ
ModularCurve.ComplexPlaceDictionary.restrictAlong_pt_heckeBetaBar16 below · depth 12 - Conjugating Γ₀(N) past diag(N,1) with equal denominators
ModularCurve.exists_sl2_heckeDiagMatrix_smul_eq0 below · depth 12 - Vanishing twisted trace forces F∣ W_q = -U_q F
ModularForm.alSlash_eq_neg_heckeU_of_trace_alSlash_eq_zero1 below · depth 12 - q-expansion of Uₚf equals formal Uₚ of the q-expansion
ModularFormClass.qExpansion_heckeU_eq_heckeU1 below · depth 12 - Level lowering by one power of p via Uₚ(gᵖ)
CuspForm.exists_coe_eq_heckeU_pow_and_qCoeff_sub_pow_mem_span5 below · depth 13 - Degeneracy map g(dτ) from level M to level N
CuspForm.exists_degeneracy_gamma1_hasNebentypus1 below · depth 13 - U_ℓ preserves cusp forms on Γ₁(N) when ℓ ∣ N
CuspForm.exists_gamma1_coe_eq_heckeU_of_dvd3 below · depth 13 - Adjointness of Tₚ on a nebentypus component
CuspForm.peterssonOn_hecke_eq_conj_mul_of_hasNebentypus0 below · depth 13 - Degeneracy map f(τ)↦ f(dτ) from Γ₀(M) to Γ₀(N)
ModularForm.exists_degeneracy_Gamma00 below · depth 13 - q-expansion of τ↦ F(Nτ) for level-one F
ModularForm.qExpansion_heckeDiagMatrix_smul_eq_qExpand_of_levelOne3 below · depth 13 - Integrality of q-expansions under the Atkin–Lehner matrix at ℓ
ModularCurve.exists_isIntegralQExp_smul_atkinLehnerSlash_of_even28 below · depth 14 - Tₚ preserves the weight-k nebentypus law on Γ₀(N)
ModularForm.heckeU_add_smul_slash_heckeDiagMatrix_slash_of_mem_Gamma00 below · depth 14 - Uₚ lowers the level from Γ₀(N) to Γ₀(N/p) when p² ∣ N
ModularForm.heckeU_slash_eq_self_of_mem_Gamma0_div0 below · depth 14 - Δ∣₁₂diag(p,1) is a modular form on Γ₀(p)
ModularCurve.exists_modularForm_coe_eq_discriminant_slash_heckeDiagMatrix0 below · depth 15 - T_ℓ acts as 1+ℓ^{k-1} modulo cusp forms
ModularForm.exists_cuspForm_coeffHeckeT_eq_of_modEq_one2 below · depth 15 - Level-p to level-one trace of a modular form
ModularForm.exists_levelOne_coe_eq_zpow_smul_add_heckeU_slash_fricke0 below · depth 15 - Joint vanishing of x+y∣_kdiag(q',1) for cusp forms
CuspForm.eq_zero_of_coe_add_slash_heckeDiagMatrix_eq_zero3 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 - Γ₀(p)-invariance of p E₂(pz)-E₂(z)
ModularCurve.eisensteinTwoSlash_slash_eq_self0 below · depth 16 - q-expansion of pE₂(pτ)-E₂(τ)
ModularCurve.hasSum_eisensteinTwoCoeff_mul_cexp_pow0 below · depth 16 - Boundedness at all cusps of p E₂(pz)-E₂(z)
ModularCurve.isBoundedAtImInfty_eisensteinTwoSlash_slash0 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 - Γ_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 - Hecke operator T_ℓ, ℓ∤ M, on degeneracy images of an eigenform
CuspForm.IsEigenformWith.heckeU_add_smul_slash_heckeDiagMatrix_degeneracy_eq_qCoeff_smul10 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 - Serre's weight p+1 congruence for Uₚ of a weight-2 form
CuspForm.exists_mem_intLattice_weight_succ_qCoeff_congr_heckeU_of_alSlash_integral12 below · depth 17 - Adelic weight-one lift is a Hecke coset eigenfunction
LanglandsTunnell.isHeckeCosetEigenfunctionAt_weightOneLift7 below · depth 17 - Forms with coefficients in K₀ are K₀-combinations of integral forms
ModularCurve.exists_sum_smul_eq_of_qExpansion_coeff_mem52 below · depth 17 - Fricke matrix acts as -Uₚ in weight two
ModularForm.heckeU_add_slash_fricke_eq_zero0 below · depth 17 - Classical Tₚ eigenvalue transfers to the adelic Hecke operator
CuspForm.IsAdelicLiftOfGamma1.isHeckeCosetEigenfunctionAt_productionPinsGeneral_of_heckeU_add_smul_slash_heckeDiagMatrix_eq10 below · depth 18 - Coefficient eigenform relations give the operator identity Uₚ h+ε(p)h|₂diag(p,1)=aₚ h
CuspForm.IsEigenformWith.heckeU_add_smul_slash_heckeDiagMatrix_eq_qCoeff_smul9 below · depth 18 - Mod 3 congruence between U₃ f and a weight-4 form
CuspForm.exists_mem_intLattice_four_qCoeff_congr_heckeU_three_of_alSlash_integral9 below · depth 18 - Adelic Hecke coset sum at p ∤ N in classical terms
HeckeCosets.sum_apply_eq_slash0 below · depth 18 - 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 - Hecke coset sum for the weight-one adelic lift at a good prime
DihedralWeightOne.sum_weightOneLift_mul_padicToAdelic_inv_eq_mul_slash_apply_I_mul_det7 below · depth 19 - Holomorphy is preserved by slashing with diag(d,1)
ModularForm.mdifferentiable_slash_heckeDiagMatrix0 below · depth 19 - Slash by diag(d,1) carries Γ₀(R)-invariance to Γ₀(M)
ModularForm.rescaleSlash_slash_eq_self_of_mem_Gamma00 below · depth 19 - U_q on the degeneracy string of an eigenform
CuspForm.IsEigenformWith.heckeU_degeneracy_of_dvd_level6 below · depth 20 - Atkin–Lehner–Li basis of S_k(M,ε) from primitive forms
CuspForm.exists_isPrimitiveForm_linearIndependent_degeneracy_and_mem_span_of_hasNebentypus64 below · depth 20 - Lower-unipotent coset sum of a primitive form at q ∣ M
CuspForm.IsPrimitiveForm.sum_slash_S_mul_T_zpow_mul_S_inv_apply_eq_of_dvd42 below · depth 21 - Coset sum for the q-old form g(qτ) of a primitive form
CuspForm.IsPrimitiveForm.sum_slash_S_mul_T_zpow_mul_S_inv_comp_heckeDiagMatrix_apply_eq_of_not_dvd42 below · depth 21 - Linear independence of degeneracy images of Hecke eigenforms
CuspForm.linearIndependent_degeneracy_of_isEigenformWith_of_pairwise_qCoeff_ne13 below · depth 21 - Hecke correspondence on a point divisor of X_H(M)
ModularCurve.ComplexPlaceDictionaryOf.heckeDivHBar_single_pt266 below · depth 22 - Fricke conjugate of U_q as a sum over lower-unipotent cosets
UpperHalfPlane.sum_slash_S_mul_T_zpow_mul_S_inv_apply_eq_of_fricke_heckeU0 below · depth 22 - Degeneracy map q↦ q^ℓ on complex place dictionaries
ModularCurve.ComplexPlaceDictionaryOf.restrictAlong_pt_qExpand1 below · depth 23 - Partial Atkin–Lehner automorphism on L·ℚ(X₁(Mp)) with conjugation laws
ModularCurve.XOneP.exists_algEquiv_map_j_eq_qExpand_and_coe_eq_atkinLehnerInvolutionFull_and_diamondConj_and_galoisConj_x1_mul166 below · depth 24 - Atkin–Lehner translate spans ℚ(ζₚ)-combinations of integral forms
ModularCurve.exists_sum_smul_eq_smul_atkinLehnerSlash_gamma1_mul78 below · depth 24 - Generator law conjugates ⟨ d⟩ into ⟨ d'⟩ on X₁(Mp)
ModularCurve.XOneP.algEquiv_diamond_symm_eq_diamond_of_generatorLaw_x1_mul32 below · depth 25 - Partial Atkin–Lehner automorphism of L·ℚ(X₁(Mp)), with generator law
ModularCurve.XOneP.exists_algEquiv_map_j_eq_qExpand_and_coe_eq_atkinLehnerInvolutionFull_and_generatorLaw_x1_mul155 below · depth 25 - Galois conjugate of σ equals σ twisted by a diamond
ModularCurve.XOneP.ringEquiv_algEquiv_symm_eq_algEquiv_diamond_of_generatorLaw_x1_mul44 below · depth 25 - Atkin–Lehner translate at p lies in M_k(Γ₁(Mp))
ModularCurve.exists_modularForm_coe_eq_atkinLehnerSlash_gamma1_mul0 below · depth 25 - Coefficients of (f∣_kγ)(pτ) lie in ℚ(ζₚ)
ModularCurve.qExpansion_coeff_atkinLehnerSlash_mem_adjoin_exp_gamma1_mul41 below · depth 25 - Atkin–Lehner slash at p conjugates diamonds on Γ₁(Mp)
ModularCurve.atkinLehnerSlashFun_slash_eq_slash_atkinLehnerSlashFun_of_upperLeft_gamma1_mul0 below · depth 26 - Galois conjugation of Atkin–Lehner expansions over an abstract cyclotomic field
ModularCurve.exists_apply_eq_qExpansion_coeff_atkinLehnerSlash_and_slash_mul_eq_apply_aut_gamma1_mul26 below · depth 26 - Coefficients of (f|_kγ)(pτ) lie in ℚ(ζₚ), k even
ModularCurve.qExpansion_coeff_atkinLehnerSlash_mem_adjoin_exp_gamma1_mul_of_even23 below · depth 26 - Odd weight: ℚ(ζₚ)-rationality of f∣_kγ at pτ
ModularCurve.qExpansion_coeff_atkinLehnerSlash_mem_adjoin_exp_gamma1_mul_of_odd40 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 - Uₚ f is bounded at every cusp
ModularFormClass.isBoundedAt_heckeU0 below · depth 26 - Existence of an odd-weight integral form with ℚ(ζₚ)-coefficients
ModularCurve.exists_odd_isIntegralQExp_qExpansion_atkinLehnerSlash_coeff_mem_adjoin_exp39 below · depth 27 - Galois conjugation of Atkin–Lehner q-expansions as a diamond operator
ModularCurve.exists_qExpansion_coeff_atkinLehnerSlash_eq_and_slash_mul_eq_apply_gamma1_mul25 below · depth 27 - Exchanging j(q^e) and j(q^{ep}) determines wₚ
ModularCurve.XOneP.coe_apply_coeffEmb_eq_coeffEmb_atkinLehnerInvolutionFull_of_atkinLehnerSlash_p78 below · depth 28 - Slash transport along Wₚ swaps j(q^e) and j(q^{ep})
ModularCurve.XOneP.coe_apply_eq_coeffEmb_qExpand_mul_jq_of_atkinLehnerSlash_p7 below · depth 28 - Atkin–Lehner pull-back at p swaps the degeneracy embeddings
ModularCurve.XOneP.comp_alpha_eq_beta_and_comp_beta_eq_alpha_comp_diamondAutBar_of_atkinLehnerSlash_p1 below · depth 28 - Atkin–Lehner automorphism W_{p²} of the Γ₁(Mp)∩Γ₀(Mp²) function field
ModularCurve.XOneP.exists_algEquiv_laurentBaseChange_x1x0FunctionFieldC_coeffMap_apply_eq_atkinLehnerSlash_sq112 below · depth 28 - Atkin–Lehner automorphism wₚ of ℚ̄(X₁(Mp))
ModularCurve.XOneP.exists_algEquiv_x1FunctionFieldBar_coeffMap_apply_eq_atkinLehnerSlash_p81 below · depth 28 - Atkin–Lehner leg laws: Wα=β⟨ d⟩τ, Wβ=α⟨ d'⟩τ
ModularCurve.XOneP.exists_coprime_apply_heckeAlphaOneBar_eq_heckeBetaOneBar_diamondAutBar_of_atkinLehnerSlash_p_of_atkinLehnerSlash_sq33 below · depth 28 - Odd-weight integral form with ℚ(ζₚ)-rational transform, M ≤ 2
ModularCurve.exists_odd_isIntegralQExp_qExpansion_atkinLehnerSlash_coeff_mem_adjoin_exp_of_le_two35 below · depth 28 - Odd-weight integral form on Γ₁(Mp) with cyclotomic dilated q-coefficients
ModularCurve.exists_odd_isIntegralQExp_qExpansion_atkinLehnerSlash_coeff_mem_adjoin_exp_of_three_le26 below · depth 28 - Atkin–Lehner-type operator induces an automorphism of the q-expansion field
ModularCurve.exists_algEquiv_laurentBaseChange_qExpFunctionFieldC_coeffMap_apply_eq_of_slash_heckeDiagMatrix7 below · depth 29 - Odd-weight integral form with ℚ(ζ₃)-rational twist, 3 ∣ d
ModularCurve.exists_odd_isIntegralQExp_qExpansion_atkinLehnerSlash_coeff_mem_adjoin_exp_of_le_two_three3 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 - Atkin–Lehner slash at p as ℚ(ζₚ)-combination of integral forms
ModularCurve.exists_sum_smul_eq_smul_atkinLehnerSlash_x1x0_gamma0127 below · depth 30 - Atkin–Lehner operator preserves forms on Γ₁(M)∩Γ₀(p)
ModularCurve.exists_modularForm_coe_eq_atkinLehnerSlash_x1x0_gamma00 below · depth 31 - Forms with K₀-rational q-expansions on Γ₁(M)∩Γ₀(p)
ModularCurve.exists_sum_smul_eq_of_qExpansion_coeff_mem_x1x0_gamma0104 below · depth 31 - Stretching Γ(N)-forms by diag(N,1) to Γ_H(N²M')
ModularCurve.FullLevel.AuxLevel.exists_modularForm_gammaH_coe_eq_slash_heckeDiagMatrix63 below · depth 34 - Fricke involution acts on Δ through diag(p,1)
ModularCurve.discriminant_slash_fricke_eq_discriminant_slash_heckeDiagMatrix0 below · depth 37 - Trace to level M/p equals f + Uₚ(f∣ W⁻¹)
SlashInvariantForm.coe_trace_gammaH_eq_add_heckeU_slash_alGL_inv0 below · depth 38