Documentation

TauCeti.NumberTheory.ModularForms.ModularSymbols.Hecke.Composition

Composing the Hecke operators on modular symbols #

ModularSymbols/Hecke/Basic.lean attaches to a double coset Γ₁' δ Γ₂' = ⊔ᵥ Γ₁' aᵥ (with Γᵢ' = Γᵢ.map (mapGL ℚ) the images of subgroups of SL(2, ℤ)) the Hecke operator T_D : 𝕄_w(Γ₂; R) → 𝕄_w(Γ₁; R), [x] ↦ ∑ᵥ [aᵥ · x], on the modules of modular symbols. This file computes the composite of two such operators: it is the sum over the products of the two families of representatives,

T_{D₁} (T_{D₂} [x]) = ∑_{i, j} [(aᵢ bⱼ) · x],

the multiplicative half of Shimura's §3.4 transposed from functions on ℍ to the coinvariants. It is the symbol-side counterpart of HeckeSlash/Composition.lean, and the two files share the set-level bookkeeping of the products aᵢ bⱼ, none of which mentions either action: which right cosets they cover (DoubleCoset.doubleCoset_mul_doubleCoset_eq_iUnion_rightCosets), how often each is met (HeckeRing.GL2.pairCoset and HeckeRing.GL2.card_pairs_pairCoset_rightCoset_eq_multiplicity, HeckeRing/GL2/PairCoset.lean), and how a family naming each right coset m times is counted (DoubleCoset.card_filter_eq_of_rightCosetRep_smul_eq).

Three forms of the composition law are recorded, in increasing generality of the conclusion. Over arbitrary representatives (heckeSymbol_heckeSymbol_mk_eq_sum_of_rightCosets), the composite is the double sum above for any two families naming the right cosets once each; here the action is a left action, so the products appear as aᵢ bⱼ with the representative of the operator applied second on the left, and — unlike the slash sums — no invariance hypothesis is needed, because the coinvariants have absorbed it. As a single operator (heckeSymbol_comp_heckeSymbol_eq_heckeSymbol): when the product set Γ₁' δ₁ Γ₂' · Γ₂' δ₂ Γ₃' is one double coset and the products meet each of its right cosets exactly once, the composite is the operator of that coset. Multiplicity-weighted (heckeSymbol_comp_heckeSymbol_eq_sum_nsmul): in general the composite is ∑_D m(D₁, D₂; D) • T_D over the double cosets the products land in, the coefficient being Shimura's multiplicity in the right-coset-indexed form DoubleCoset.multiplicity Γ₃' Γ₂' Γ₁' δ₂⁻¹ δ₁⁻¹ δ₃⁻¹ — the same coefficient, with the same caveat about its relation to the Hecke ring's structure constants, as on the form side.

At level Γ₁(N) the single-coset criterion is applied to the upper-triangular representatives !![1, j; 0, n]: at indices n, m supported on the level (every prime factor dividing N) they multiply into the representatives at n m, so T_{n m} = T_n T_m on 𝕄_w(Γ₁(N); R) (heckeTSymbol_mul_of_primeFactors_subset), such operators commute, and T_{n^r} = T_n ^ r. This is the first piece of the commutativity of the Hecke action on symbols, which the passage from the period pairing to the integrality of Hecke eigenvalues needs: the transpose of a composite reverses its order, so the operators being transported must commute among themselves.

Main results #

References #

Families meeting each right coset equally often #

theorem TauCeti.ModularSymbols.sum_mk_symbolIntRep_eq_nsmul_heckeSymbol_mk {R : Type u_1} [CommRing R] {w : ℕ} (Γ₁ Γ₂ : Subgroup (Matrix.SpecialLinearGroup (Fin 2) ℤ)) {Δ : Submonoid (GL (Fin 2) ℚ)} (D : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (hD : ↑(Quotient.out D) ∈ HeckeRing.GLn.intEntries 2) [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (↑(Quotient.out D))⁻¹)] {ι : Type u_2} [Fintype ι] (a : ι → GL (Fin 2) ℚ) (m : ℕ) (hmem : ∀ (i : ι), a i ∈ DoubleCoset.doubleCoset ↑(Quotient.out D) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (hcard : ∀ x ∈ DoubleCoset.doubleCoset ↑(Quotient.out D) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂), Nat.card { i : ι // MulOpposite.op (a i) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) = MulOpposite.op x • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) } = m) (x : TensorProduct R ↥(degreeZero R) ↥(MvPolynomial.homogeneousSubmodule (Fin 2) R w)) :

A family meeting each right coset of the double coset m times sums to m times the Hecke operator. If the matrices aᵢ lie in Γ₁' D.out Γ₂' — so that they are integral, HeckeRing.GLn.mem_intEntries_of_mem_doubleCoset — and, for every x there, exactly m of them generate the right coset Γ₁' x, then ∑ᵢ [aᵢ · x] = m • T_D [x].

Covering is not a hypothesis: a right coset named by no member forces m = 0, and then both sides vanish. This is the shape in which the products aᵢ bⱼ of two families of representatives arrive once they are grouped by the double coset they lie in.

The composite of two Hecke operators #

theorem TauCeti.ModularSymbols.heckeSymbol_heckeSymbol_mk {R : Type u_1} [CommRing R] {w : ℕ} (Γ₁ Γ₂ Γ₃ : Subgroup (Matrix.SpecialLinearGroup (Fin 2) ℤ)) {Δ : Submonoid (GL (Fin 2) ℚ)} (D₁ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (D₂ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃)) (hD₁ : ↑(Quotient.out D₁) ∈ HeckeRing.GLn.intEntries 2) (hD₂ : ↑(Quotient.out D₂) ∈ HeckeRing.GLn.intEntries 2) [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (↑(Quotient.out D₁))⁻¹)] [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (↑(Quotient.out D₂))⁻¹)] (x : TensorProduct R ↥(degreeZero R) ↥(MvPolynomial.homogeneousSubmodule (Fin 2) R w)) :

The composite of two Hecke operators on the class of x, over the representatives they are defined with: T_{D₁} (T_{D₂} [x]) = ∑_{v, u} [(aᵥ b_u) · x], the sum over the products of the chosen right-coset representatives of D₁ and of D₂.

theorem TauCeti.ModularSymbols.heckeSymbol_heckeSymbol_mk_eq_sum_of_rightCosets {R : Type u_1} [CommRing R] {w : ℕ} (Γ₁ Γ₂ Γ₃ : Subgroup (Matrix.SpecialLinearGroup (Fin 2) ℤ)) {Δ : Submonoid (GL (Fin 2) ℚ)} (D₁ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (D₂ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃)) (hD₁ : ↑(Quotient.out D₁) ∈ HeckeRing.GLn.intEntries 2) (hD₂ : ↑(Quotient.out D₂) ∈ HeckeRing.GLn.intEntries 2) [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (↑(Quotient.out D₁))⁻¹)] [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (↑(Quotient.out D₂))⁻¹)] {ι : Type u_2} {κ : Type u_3} (a : ι → GL (Fin 2) ℚ) (b : κ → GL (Fin 2) ℚ) (hcover₁ : DoubleCoset.doubleCoset ↑(Quotient.out D₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) = ⋃ (i : ι), MulOpposite.op (a i) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁)) (hinj₁ : Function.Injective fun (i : ι) => MulOpposite.op (a i) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁)) (hcover₂ : DoubleCoset.doubleCoset ↑(Quotient.out D₂) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) = ⋃ (j : κ), MulOpposite.op (b j) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (hinj₂ : Function.Injective fun (j : κ) => MulOpposite.op (b j) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) [Fintype ι] [Fintype κ] (x : TensorProduct R ↥(degreeZero R) ↥(MvPolynomial.homogeneousSubmodule (Fin 2) R w)) :
(heckeSymbol Γ₁ Γ₂ D₁ hD₁) ((heckeSymbol Γ₂ Γ₃ D₂ hD₂) ((Representation.Coinvariants.mk (MonoidHom.comp (symbolRep R w) Γ₃.subtype)) x)) = ∑ i : ι, ∑ j : κ, (Representation.Coinvariants.mk (MonoidHom.comp (symbolRep R w) Γ₁.subtype)) (((symbolIntRep R w) ⟨a i * b j, ⋯⟩) x)

The composite of two Hecke operators, over arbitrary representatives. For any families (aᵢ), (bⱼ) naming the right cosets of Γ₁' δ₁ Γ₂' and of Γ₂' δ₂ Γ₃' once each — such matrices are integral, HeckeRing.GLn.mem_intEntries_of_cover —

T_{D₁} (T_{D₂} [x]) = ∑_{i, j} [(aᵢ bⱼ) · x].

This is Shimura's computation in §3.4 on the way to Proposition 3.37, on the symbol side. No invariance hypothesis appears, in contrast to the slash sums: the classes in the coinvariants are already invariant, which is what heckeSymbol_mk_eq_sum_of_rightCosets records.

theorem TauCeti.ModularSymbols.heckeSymbol_comp_heckeSymbol_eq_heckeSymbol {R : Type u_1} [CommRing R] {w : ℕ} (Γ₁ Γ₂ Γ₃ : Subgroup (Matrix.SpecialLinearGroup (Fin 2) ℤ)) {Δ : Submonoid (GL (Fin 2) ℚ)} (D₁ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (D₂ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃)) (hD₁ : ↑(Quotient.out D₁) ∈ HeckeRing.GLn.intEntries 2) (hD₂ : ↑(Quotient.out D₂) ∈ HeckeRing.GLn.intEntries 2) [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (↑(Quotient.out D₁))⁻¹)] [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) (↑(Quotient.out D₂))⁻¹)] {ι : Type u_2} {κ : Type u_3} (a : ι → GL (Fin 2) ℚ) (b : κ → GL (Fin 2) ℚ) (hcover₁ : DoubleCoset.doubleCoset ↑(Quotient.out D₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) = ⋃ (i : ι), MulOpposite.op (a i) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁)) (hinj₁ : Function.Injective fun (i : ι) => MulOpposite.op (a i) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁)) (hcover₂ : DoubleCoset.doubleCoset ↑(Quotient.out D₂) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) = ⋃ (j : κ), MulOpposite.op (b j) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) (hinj₂ : Function.Injective fun (j : κ) => MulOpposite.op (b j) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂)) [Finite ι] [Finite κ] (D₃ : HeckeCoset Δ (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃)) [Finite (DoubleCoset.DecompQuotient (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) (Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) (↑(Quotient.out D₃))⁻¹)] (hmul : DoubleCoset.doubleCoset ↑(Quotient.out D₃) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃) = DoubleCoset.doubleCoset ↑(Quotient.out D₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) * DoubleCoset.doubleCoset ↑(Quotient.out D₂) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₂) ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₃)) (hinj₃ : Function.Injective fun (p : ι × κ) => MulOpposite.op (a p.1 * b p.2) • ↑(Subgroup.map (Matrix.SpecialLinearGroup.mapGL ℚ) Γ₁)) :
heckeSymbol Γ₁ Γ₂ D₁ hD₁ ∘ₗ heckeSymbol Γ₂ Γ₃ D₂ hD₂ = heckeSymbol Γ₁ Γ₃ D₃ ⋯

The composite is the Hecke operator of a single double coset, when the product set Γ₁' δ₁ Γ₂' · Γ₂' δ₂ Γ₃' is that coset and the products aᵢ bⱼ meet each of its right cosets exactly once: T_{D₁} ∘ T_{D₂} = T_{D₃}.

The hypotheses are those of HeckeRing.GL2.heckeSlashSum_heckeSlashSum_eq_heckeSlashSum: hmul says that the product set is the single coset D₃, and hinj₃ that the products have no right-coset collisions. The covering half of what heckeSymbol_mk_eq_sum_of_rightCosets needs is automatic, by DoubleCoset.doubleCoset_mul_doubleCoset_eq_iUnion_rightCosets, and so is the integrality of D₃.out: it lies in the product of two double cosets of integral matrices (HeckeRing.GLn.mem_intEntries_of_mem_doubleCoset_mul_doubleCoset).

The multiplicity-weighted composition law #

The multiplicity-weighted composition law. For double cosets D₁, D₂ of integral matrices, the composite of the two Hecke operators is the sum, over the double cosets D met by the products aᵥ b_u of the representatives, of Shimura's multiplicity times the operator of D:

T_{D₁} ∘ T_{D₂} = ∑_D m(D₁, D₂; D) • T_D.

The sum runs over the attached finset of output cosets, each D carrying its membership, from which mem_intEntries_of_mem_image_pairCoset derives the integrality of D.out that T_D needs: only the two input cosets are assumed integral, not the monoid Δ.

heckeSymbol_comp_heckeSymbol_eq_heckeSymbol is the special case where the products meet a single double coset and meet each of its right cosets exactly once. The coefficient is DoubleCoset.multiplicity Γ₃' Γ₂' Γ₁' δ₂⁻¹ δ₁⁻¹ δ₃⁻¹, exactly as for the slash sums (HeckeRing.GL2.heckeSlashSum_heckeSlashSum_eq_sum_nsmul), and for the same reason: the sums are indexed by right cosets.

No finiteness is assumed beyond the two input Hecke triples; the finiteness of each output coset's own decomposition comes from the composite triple IsHeckeTriple Δ Γ₁' Γ₃', which IsHeckeTriple.trans derives from the two given ones.

The Hecke operators T_n at indices supported on the level #

@[simp]
theorem TauCeti.ModularSymbols.heckeTSymbol_mul_of_primeFactors_subset {R : Type u_1} [CommRing R] {w : ℕ} (N : ℕ) [NeZero N] {n m : ℕ} [NeZero n] [NeZero m] (hn : n.primeFactors ⊆ N.primeFactors) (hm : m.primeFactors ⊆ N.primeFactors) :
heckeTSymbol R w N (n * m) = heckeTSymbol R w N n * heckeTSymbol R w N m

The Hecke operators on modular symbols at indices supported on the level multiply: T_{n m} = T_n ∘ T_m on 𝕄_w(Γ₁(N); R) when every prime factor of n and of m divides N.

At such indices the double coset of diag(1, n) is the union of the n upper-triangular right cosets Γ₁(N) · !![1, j; 0, n], and HeckeRing.GL2.upperTriRep_mul_upperTriRep matches the pairs of representatives with the representatives at index n · m bijectively. Nothing here is a coprimality statement: the identity holds whether or not n and m are coprime.

The Hecke operators on modular symbols at indices supported on the level commute. Both orders compute the operator at the product index.

@[simp]
theorem TauCeti.ModularSymbols.heckeTSymbol_pow_of_primeFactors_subset {R : Type u_1} [CommRing R] {w : ℕ} (N : ℕ) [NeZero N] {n : ℕ} [NeZero n] (hn : n.primeFactors ⊆ N.primeFactors) (r : ℕ) :
heckeTSymbol R w N (n ^ r) = heckeTSymbol R w N n ^ r

T_{n^r} = T_n ^ r on modular symbols, at an index supported on the level.