Congruence subgroups: the pair Γ₁(N) ⊴ Γ₀(N), the index of Γ₀(pᵏ), and the level #
Foundational results about the pair Γ₁(N) ≤ Γ₀(N) beyond Mathlib's
Mathlib.NumberTheory.ModularForms.CongruenceSubgroups: Γ₀(N) normalizes Γ₁(N) (also
after mapping to GL₂(S), over any commutative ring S), the ratio of two Γ₀(N)-elements
with equal lower-right entry lies in Γ₁(N), the lower-right-entry map Γ₀(N) →* (ZMod N)ˣ
is surjective, and the
location of -I: it always lies in Γ₀(N), with lower-right entry the unit -1, and it
lies in Γ₁(N) exactly when N ∣ 2; and every power of the translation matrix T lies in
Γ₁(N), at every level. The file then computes the index of Γ₀ at
prime-power levels — the degree count of Shimura, Theorem 3.24 — which lives here because it
is congruence-subgroup arithmetic consumed by, but independent of, the Hecke-ring layer.
A final section records how the principal congruence subgroups compose with the arithmetic
of the level: Γ is antitone in the level like the other two families, it sits inside those
two at the same level along the chain Γ(N) ≤ Γ₁(N) ≤ Γ₀(N), and the join of two
of them is the principal congruence subgroup of the gcd, Γ(gcd a b) = Γ(a) ⊔ Γ(b). That
identity is Shimura's Lemma 3.28; it is the Chinese remainder theorem for SL₂, and it is
what lets a Hecke operator at level ab be analysed one prime at a time.
Ported from the AINTLIB LeanModularForms project
(LeanModularForms/HeckeRIngs/GL2/Gamma1Pair.lean, for the index section
LeanModularForms/HeckeRIngs/GL2/CongruenceIndex.lean, for the level-antitonicity
lemmas LeanModularForms/HeckeRIngs/GL2/LevelEmbed.lean, and for the gcd decomposition
LeanModularForms/HeckeRIngs/GLn/CongruenceHecke/Foundation.lean, all Chris Birkbeck,
https://github.com/CBirkbeck/AINTLIB/tree/main/projects/LeanModularForms), extracted from
TauCeti/NumberTheory/ModularForms/DiamondOperators.lean as congruence-subgroup
infrastructure independent of the diamond operators.
Main results #
CongruenceSubgroup.Gamma1_le_Gamma1_of_dvd,CongruenceSubgroup.Gamma0_le_Gamma0_of_dvd,CongruenceSubgroup.Gamma_le_Gamma_of_dvd: all three families are antitone in the level,Γ(N) ≤ Γ(M)wheneverM ∣ N.CongruenceSubgroup.Gamma_le_Gamma1,CongruenceSubgroup.Gamma_le_Gamma0: at a fixed level the three families are nested,Γ(N) ≤ Γ₁(N) ≤ Γ₀(N).CongruenceSubgroup.mem_Gamma0_iff_dvd:Γ₀(N)membership read as the integer divisibility(N : ℤ) ∣ A 1 0rather than as aZMod Ncongruence, for a proof that wants to name the quotient. Valid at every level,N = 0included.CongruenceSubgroup.mem_Gamma1_iff:Γ₁(N)is cut out insideΓ₀(N)by the single congruenced ≡ 1.CongruenceSubgroup.mem_Gamma1_iff_dvd_lowerRow:Γ₁(N)membership read as the two integer divisibilities(N : ℤ) ∣ cand(N : ℤ) ∣ d - 1on the lower row, theΓ₁counterpart ofmem_Gamma0_iff_dvd.CongruenceSubgroup.isUnit_intCast_apply_zero_zero_of_mem_Gamma0: aΓ₀(N)matrix has unit upper-left entry moduloN.CongruenceSubgroup.intCast_apply_zero_zero_mul_apply_one_one_of_mem_Gamma0: modulo its level, aΓ₀(N)matrix has mutually inverse diagonal entries.CongruenceSubgroup.intCast_apply_zero_zero_add_natCast_mul_apply_one_zero_of_mem_Gamma0andCongruenceSubgroup.isUnit_intCast_apply_zero_zero_add_natCast_mul_apply_one_zero_of_mem_Gamma0: shearing the first column by a natural-number multiple of the lower-left entry changes nothing modulo the level, so the sheared entry is a unit too.CongruenceSubgroup.mem_Gamma1_iff_toHomUnits_eq_one: insideΓ₀(N),Γ₁(N)is the kernel of the unit-valued lower-right entry.CongruenceSubgroup.Gamma0_normalizes_Gamma1andCongruenceSubgroup.Gamma0_le_normalizer_Gamma1: conjugation byΓ₀(N)preservesΓ₁(N).CongruenceSubgroup.Gamma1_map_le_Gamma0_map: the inclusionΓ₁(N) ≤ Γ₀(N)after mapping toGL₂(ℝ).CongruenceSubgroup.Gamma1_map_le_Gamma1_map_of_dvd: the antitonicityΓ₁(N) ≤ Γ₁(M)forM ∣ N, after mapping toGL₂(ℝ).CongruenceSubgroup.mapGL_mem_normalizer_Gamma1_mapandCongruenceSubgroup.Gamma1_map_inv_conjAct_eq:(Gamma1 N).map (mapGL S)is invariant under conjugation byΓ₀(N)elements inGL₂(S), over any commutative ringS, stated as normalizer membership and — overℝ— as a pointwise conjugation.CongruenceSubgroup.conjAct_mapGL_mul_smul_Gamma1is the corresponding level-transfer rule after multiplying an arbitrary real matrix on the left.CongruenceSubgroup.Gamma0Map_toHomUnits_surjective: every unit ofZMod Nis the lower-right entry of a matrix inΓ₀(N)(via strong approximation forSL₂).CongruenceSubgroup.exists_mem_Gamma_map_intCast_zmod_eq: strong approximation along a coprime level — for coprimedandd',Γ(d')still surjects ontoSL₂(ℤ/dℤ).CongruenceSubgroup.gamma0Twist: an explicitΓ₀(N)element whose lower-right entry is any natural number coprime toN.CongruenceSubgroup.gamma0TwistOfUnitandCongruenceSubgroup.Gamma0Map_toHomUnits_gamma0TwistOfUnit: the Bézout twist taken at a representative of a unituis aΓ₀(N)element whose nebentypus label is exactlyu— the constructive counterpart ofGamma0Map_toHomUnits_surjective, which gives no control over the entries. Its bottom row is(N, (u : ZMod N).val), byCongruenceSubgroup.gamma0TwistOfUnit_apply_one_zeroandCongruenceSubgroup.gamma0TwistOfUnit_apply_one_one.CongruenceSubgroup.neg_one_mem_Gamma0andCongruenceSubgroup.Gamma0Map_toHomUnits_negOne:-I ∈ Γ₀(N), with lower-right entry the unit-1;CongruenceSubgroup.neg_one_mem_Gamma1_iff:-I ∈ Γ₁(N) ↔ N ∣ 2.CongruenceSubgroup.withCenter_le_Gamma0: adjoining the centre ofSL₂(ℤ)to a subgroup ofΓ₀(N)keeps it insideΓ₀(N), sinceΓ₀(N)already contains-I.CongruenceSubgroup.Gamma0_prime_index:[SL₂(ℤ) : Γ₀(p)] = p + 1for primep.CongruenceSubgroup.Gamma0_relIndex_pow_succ:[Γ₀(pᵏ) : Γ₀(p^(k+1))] = pfor0 < pand0 < k.CongruenceSubgroup.Gamma0_prime_power_index:[SL₂(ℤ) : Γ₀(pᵏ)] = p^(k-1) * (p + 1)for primepandk ≥ 1.CongruenceSubgroup.Gamma_gcd_eq_sup:Γ(gcd a b) = Γ(a) ⊔ Γ(b)— Shimura's Lemma 3.28, the Chinese remainder theorem forSL₂.CongruenceSubgroup.intCast_mul_apply_one_zero_eq_zero_of_mem_Gamma0_divandCongruenceSubgroup.intCast_apply_one_one_eq_of_mem_Gamma0_of_eq: entry congruences for elements ofΓ₀, the shapes the descent factorisations produce.CongruenceSubgroup.Gamma_lcm_eq_inf:Γ(lcm a b) = Γ(a) ⊓ Γ(b), with the coprime caseCongruenceSubgroup.Gamma_mul_eq_inf_of_coprime.
References #
- G. Shimura, Introduction to the arithmetic theory of automorphic functions, Lemma 3.28 and Theorem 3.24.
Γ is antitone in the level: if M ∣ N then Γ(N) ≤ Γ(M). Reduction modulo M factors
through reduction modulo N, so a matrix congruent to the identity modulo N is congruent to
the identity modulo M. CongruenceSubgroup.Gamma1_le_Gamma1_of_dvd and
CongruenceSubgroup.Gamma0_le_Gamma0_of_dvd are the corresponding statements for the other
two families.
Γ₀(N) membership as an integer divisibility. CongruenceSubgroup.Gamma0_mem states it
as a congruence in ZMod N; this is the same fact with the congruence already discharged into
(N : ℤ) ∣ A 1 0, which is the form a proof needs whenever it wants to name the quotient.
It holds at every level, N = 0 included, where both sides say A 1 0 = 0.
Γ₁(N) is the fibre of Gamma0Map over 1. A matrix lies in Γ₁(N) exactly when it
lies in Γ₀(N) and its lower-right entry is 1 modulo N; the congruence a ≡ 1 that
CongruenceSubgroup.Gamma1_mem also asks for is then forced by the determinant. This is the
form in which membership is checked whenever a construction produces a Γ₀(N) matrix and
controls only its lower-right entry.
Γ₁(N) membership is exactly two divisibilities on the lower row, (N : ℤ) ∣ c and
(N : ℤ) ∣ d - 1: mem_Gamma1_iff with both conditions read in ℤ, as mem_Gamma0_iff_dvd reads
Gamma0_mem. The congruence a ≡ 1 is forced by the determinant, so it is omitted. Integer
divisibilities are the form an explicitly constructed matrix has; mem_Gamma1_of_dvd_lowerRow is
the unbundled mpr.
Γ₁(N) membership from two divisibilities on the lower row, the mpr direction of
mem_Gamma1_iff_dvd_lowerRow with the conjunction unbundled — the shape a construction that has
just built an explicit matrix wants to apply. When the two divisibilities arrive as one conjunction,
pass it to mem_Gamma1_iff_dvd_lowerRow.mpr directly rather than destructuring it.
The diagonal entries of a Γ₀(M) matrix are mutually inverse modulo M: the determinant
identity ad - bc = 1 with the bc term killed by M ∣ c. It refines
CongruenceSubgroup.isUnit_intCast_apply_zero_zero_of_mem_Gamma0 by naming the inverse.
The upper-left entry of a Γ₀(N) matrix is a unit modulo N: the determinant is one
and the lower-left entry vanishes modulo N, so ad ≡ 1.
The first column of a Γ₀(N) matrix collapses under a natural-number shear:
a + j c ≡ a modulo N for every j : ℕ, because c ≡ 0. Stated with the casts already
distributed, since that — not the cast of the sum — is the simp normal form.
The sheared entry is still a unit, for every j : ℕ: it is the upper-left entry modulo
N, which isUnit_intCast_apply_zero_zero_of_mem_Gamma0 knows to be a unit.
Γ₀(N) lies in the normaliser of Γ₁(N): the statement of Gamma0_normalizes_Gamma1 in
the form the coset combinatorics of the Petersson product consumes.
The inclusion Γ₁(N) ≤ Γ₀(N), transported to GL₂(ℝ).
The antitonicity Γ₁(N) ≤ Γ₁(M) for M ∣ N, transported to GL₂(ℝ). This is the
inclusion along which a form of level M is read as a form of level N.
Γ₀(N) normalizes Γ₁(N) after mapping to GL₂(S), for any commutative ring S.
This is Gamma0_normalizes_Gamma1 transported along the monoid homomorphism mapGL S: the
conjugate of an integral witness is again one.
The ring is arbitrary because both rings occur: the slash action of a modular form lives over
ℝ, while the Hecke triples of Γ₀(N) and Γ₁(N) live over ℚ.
(Gamma1 N).map (mapGL ℝ) is invariant under conjugation by Gamma0 N elements
in GL₂(ℝ): the pointwise-conjugation form of mapGL_mem_normalizer_Gamma1_map.
Left multiplication by an element of Γ₀(N) does not change the conjugated real
Γ₁(N)-level.
Two Γ₀(N) elements have the same lower-right entry exactly when their ratio lies in
Γ₁(N). The mpr direction is mul_inv_mem_Gamma1_of_Gamma0Map_eq; the converse reads the
membership back through Gamma1_mem', which says that Gamma0Map N is trivial on Γ₁(N).
The value of Mathlib's Gamma0Map: the lower-right entry of the matrix, reduced mod N.
Gamma0Map is a bare MonoidHom.mk, so this holds definitionally; naming it keeps that one
definitional step out of the simp sets that consume it, and gives downstream files a lemma to
rewrite with instead of unfolding the definition.
An element of Γ₀(N) lies in Γ₁(N) exactly when its diamond label is 1:
mem_Gamma1_iff read through the unit-valued lower-right entry (Gamma0Map N).toHomUnits.
(Gamma0Map N).toHomUnits is surjective: every unit u ∈ (ZMod N)ˣ is realized as the
lower-right entry of some g ∈ Gamma0 N, by strong approximation for SL₂.
A Bézout matrix with bottom row (N, p), for p coprime to N.
Equations
- CongruenceSubgroup.gamma0Twist N p h = ⋯.choose
Instances For
The lower-left entry of the Bézout twist is N.
The lower-right entry of the Bézout twist is p.
The Bézout twist lies in Γ₀(N).
The unit-valued lower-right entry of the Bézout twist is the residue class of p.
The Bézout twist at a representative of a unit: gamma0Twist at p = (u : ZMod N).val.
Its bottom row is (N, (u : ZMod N).val), which is what gamma0TwistOfUnit_apply_one_zero and
gamma0TwistOfUnit_apply_one_one record.
Equations
Instances For
The lower-left entry of the Bézout twist at a unit is N.
The lower-right entry of the Bézout twist at a unit is the chosen representative of u.
The Bézout twist at a unit lies in Γ₀(N).
The Bézout twist at a representative of u lifts u. The nebentypus reads the
lower-right entry, and there that entry is (u : ZMod N).val.
This is the constructive form of Gamma0Map_toHomUnits_surjective: that lemma produces some
preimage of u, whereas this one names an explicit matrix whose bottom row is (N, u.val), which
is what an argument comparing the entries of two lifts needs.
-I lies in Γ₀(N): its lower-left entry is 0.
Adjoining the centre keeps a subgroup of Γ₀(N) inside Γ₀(N). The central factor is
absorbed: the centre of SL₂(ℤ) is {±I}, and -I already lies in Γ₀(N).
Γ.withCenter is the enlargement that makes "this subgroup contains -I" true, which matters
because Γ₁(N) does not contain -I once N ∤ 2; this lemma says the enlargement is free as
far as Γ₀(N) is concerned.
-I ∈ Γ₀(N), packaged as an element of the subgroup. It is the representative through
which the diamond operator at -1 is computed.
Equations
- CongruenceSubgroup.Gamma0.negOne N = ⟨-1, ⋯⟩
Instances For
The lower-right entry of -I ∈ Γ₀(N) is -1.
The unit-valued lower-right entry of -I ∈ Γ₀(N) is the unit -1.
Every power of the translation matrix lies in Γ₁(N), at every level. Tⁿ has diagonal
(1, 1) and vanishing lower-left entry, so the three congruences of Gamma1_mem hold with no
condition on n or N. (In particular the width of the cusp ∞ for Γ₁(N) is 1.)
The index of Γ₀(pᵏ) #
The coset representatives of Γ₀(p) in SL₂(ℤ) are TʲS for 0 ≤ j < p together with the
identity, giving [SL₂(ℤ) : Γ₀(p)] = p + 1; the relative index of Γ₀(p^(k+1)) in Γ₀(pᵏ)
is p via lower-unitriangular representatives, and the tower multiplies to
[SL₂(ℤ) : Γ₀(pᵏ)] = p^(k-1)(p + 1) for prime p and k ≥ 1 — the degree count of
Shimura, Theorem 3.24.
The Chinese-remainder decomposition Γ(gcd a b) = Γ(a) ⊔ Γ(b) #
Shimura, Lemma 3.28. Γ(gcd a b) = Γ(a) ⊔ Γ(b): the join of two principal congruence
subgroups is the principal congruence subgroup of the gcd.
The inclusion ⊇ is antitonicity. For ⊆, lift γ ∈ Γ(gcd a b) entrywise: its entries agree
with the identity's modulo gcd a b, so the Chinese remainder theorem supplies a matrix M
congruent to 1 modulo a and to γ modulo b. Strong approximation
(map_intCast_zmod_surjective) realises M mod lcm a b by an actual β ∈ SL₂(ℤ), and then
β ∈ Γ(a) while β⁻¹γ ∈ Γ(b), so γ = β · (β⁻¹γ).
Strong approximation along a coprime level. For coprime d and d', the principal
congruence subgroup Γ(d') still surjects onto SL₂(ℤ/dℤ): imposing a congruence condition at
d' costs nothing at d.
Entry congruences in Γ₀ #
The level hypothesis of the factorisation at a divided level. For δ ∈ Γ₀(N / p) with
p ∣ N, N = p (N / p) divides p δ₁₀, because N / p ∣ δ₁₀.
The entry equation reads as a congruence at any level where c vanishes. If a
factorisation gives α 1 1 = δ 1 1 - δ 1 0 * k, then modulo a level M with δ ∈ Γ₀(M) the
lower-right entry of α is that of δ.
Γ(a b) = Γ(a) ⊓ Γ(b) for coprime a and b: Gamma_lcm_eq_inf at coprime levels.