Documentation

TauCeti.NumberTheory.ModularForms.HeckeSlash.UpperTri.Invariance

Equivariance of the upper-triangular Hecke sum at level-supported indices #

UpperTri/Sum.lean defines heckeSlashUpperTri k p f = ∑_{b < p} f ∣[k] !![1, b; 0, p], and UpperTri/Periodic.lean shows it preserves invariance under the single matrix T. That is far short of an operator: to act on M_k(Γ₁(N)) the sum has to preserve invariance under the whole group. This file proves the basic case when p divides the level, then obtains every index supported on the level by composing those basic sums.

The permutation #

Write γ = !![a, b; c, d] ∈ Γ₀(N), so N ∣ c and hence p ∣ c. Then

!![1, j; 0, p] · γ = !![a + jc, b + jd; pc, pd],

and one asks for a factorisation γ' · !![1, j'; 0, p] with γ' ∈ Γ₀(N). Matching entries forces γ' = !![a + jc, b'; pc, d - cj'] and p b' = b + jd - (a + jc) j', so j' must solve

(a + jc) j' ≡ b + jd (mod p).

That has a unique solution in [0, p) exactly when a + jc is invertible modulo p, and upperTriShift p γ j is it. On Γ₀(p) invertibility is automatic and uniform in j: p ∣ c collapses a + jc to a, and the determinant identity ad - bc = 1 reduces to ad ≡ 1 (mod p), exhibiting d as the inverse of a, so the solution takes the closed form

j' = d b + j d² mod p.

It is a bijection of Fin p there, because d² is again invertible modulo p. Slashing therefore permutes the summands, and the sum is unchanged up to the scalar by which γ' acts on f.

The map is defined by the general formula rather than the closed one because the closed form is false off Γ₀(p): when p ∤ c the entry a + jc varies with j and can vanish, and then the congruence has no solution at all. The definition and the general factorisation HeckeRing.GL2.exists_mem_Gamma0_upperTriRep_mul_of_isUnit, both imported from TauCeti/NumberTheory/HeckeRing/GL2/Gamma0/UpperTriFactorization.lean, are stated at exactly the offsets where it does — those with a + jc invertible.

Two facts make that scalar behave. The new lower-right entry is d - c j' ≡ d (mod N), so γ' has the same Gamma0Map value as γ; and if γ ∈ Γ₁(N) then γ' ∈ Γ₁(N). So the hypothesis on f is only ever used at matrices congruent to γ in the relevant sense, which is what lets the nebentypus version below carry a fixed character.

⚠ p ∣ N is essential to the direct permutation argument, not a convenience. The general level-supported theorem below instead composes sums at prime divisors of N. When p is prime and p ∤ N, the classical double coset has one further left coset, represented by !![p, 0; 0, 1] up to a Γ₀(N) twist, and the sum over the upper-triangular representatives alone is not invariant.

Where the factorisation lives #

The offset map HeckeRing.GL2.upperTriShift and the coset factorisation it feeds — exists_mem_Gamma0_upperTriRep_mul and its two variants — are statements about matrices and congruence subgroups, with no slash action in them, and live in NumberTheory/HeckeRing/GL2/Gamma0/UpperTriFactorization.lean. This file imports them and supplies the analytic half.

Main results #

References #

The generality of the offset map follows the descent formalisation in the AINTLIB LeanModularForms project (LeanModularForms/StrongMultiplicityOne/DescentCosets.lean, Chris Birkbeck, commit 2baa76f742bdb4fb8ee323fabba41203bd390e08, Apache-2.0, https://github.com/CBirkbeck/AINTLIB/tree/main/projects/LeanModularForms), whose descend_exists_fin_isUnit_mul_eq and descendCosetList_action_upper_tri_extra solve the same congruence at each call site. No code is adapted from it.

The upper-triangular sum is Γ₀(N)-equivariant at p ∣ N. The hypothesis is imposed only at matrices of Γ₀(N) with the same lower-right entry modulo N as γ, which is all the factorisation ever produces; the scalar u is left free so that the two corollaries below — Γ₁(N)-invariance and nebentypus transport — are both instances.

The upper-triangular sum preserves Γ₁(N)-invariance at p ∣ N — the invariance that turns it into an operator on M_k(Γ₁(N)).

The upper-triangular sum preserves the nebentypus at p ∣ N: if f transforms under Γ₀(N) by the character χ, so does heckeSlashUpperTri k p f. This is the function-level statement behind the fact that the operator preserves M_k(N, χ).

The upper-triangular sum preserves the nebentypus at every index supported on the level. If f transforms under Γ₀(N) by the character χ, so does heckeSlashUpperTri k n f.

The divisor case above does not apply directly at n = q ^ 2, since Γ₀(N) need not lie in Γ₀(q ^ 2). Instead the index is peeled apart one prime at a time, and the composition law for upper-triangular sums reduces to the divisor case.