Congruence subgroups \(\Gamma_0(N)\) of \(\mathrm{GL}_{2}(\mathbb{F}_{q}[T])\).

By definition, it is the subgroup of matrices whose bottom left coefficient is divislble by \(N\).

AUTHORS:

  • Cécile Armana, Xavier Caruso (2026-02): initial version

class sage.modular.drinfeld_modform.congroup_gamma0.Gamma0Element(parent, elt)[source]

Bases: MultiplicativeGroupElement

An element in a congruence subgroup.

is_one()[source]

Return whether this matrix is the identity matrix.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: G = Gamma0(T^4 + 2*T + 3)
sage: g = G.an_element()
sage: g
[4*T^4 + 3*T + 3 4*T^4 + 3*T + 2]
[  T^4 + 2*T + 3   T^4 + 2*T + 4]
sage: g.is_one()
False
sage: h = g * g^(-1)
sage: h.is_one()
True
level()[source]

Return the level of the congruence subgroup in which this element lives.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: G = Gamma0(T^4 + 2*T + 3)
sage: g = G.an_element()
sage: g.level()
T^4 + 2*T + 3
class sage.modular.drinfeld_modform.congroup_gamma0.Gamma0_drinfeld(base, level)[source]

Bases: Group, UniqueRepresentation

A congruence subgroup.

Element[source]

alias of Gamma0Element

base_ring()[source]

Return the base ring of this congruence subgroup.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: Gamma0(T^4 + 2*T + 3).base_ring()
Univariate Polynomial Ring in T over Finite Field of size 5
genus()[source]

” Return the genus of this congruence subgroup, i.e. the genus of the attached Drinfeld modular curve.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: Gamma0(T - 1).genus()
0
sage: Gamma0(T^3 + 1).genus()
5
sage: Gamma0(T^5 - 3*T^4 + 1).genus()
155

If the level \(N\) is irreducible, the formula simplifies as follows:

sage: def genus_irr(N):
....:     q = N.base_ring().cardinality()
....:     d = N.degree()
....:     if is_even(d):
....:          g = (q^d - q^2) / (q^2 - 1)
....:     else:
....:          g = (q^d - q) / (q^2 - 1)
....:     return g

sage: N = T^6 + T^4 + 4*T^3 + T^2 + 2
sage: N.is_irreducible()
True
sage: Gamma0(N).genus() == genus_irr(N)
True

sage: N = T^7 + 3*T + 3
sage: N.is_irreducible()
True
sage: Gamma0(N).genus() == genus_irr(N)
True

REFERENCE:

[Gek2001], Theorem 8.1

index()[source]

Return the index of this congruence subgroup as a subgroup of \(\mathrm{GL}_{2}(A)\) (where \(A\) is the base ring).

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: Gamma0(T^4 - 3*T^2 + 1).index()
900

If the level \(N\) is irreducible, the index is \(1 + q^{\mathrm{deg}(N)}\). We check it on an example below:

sage: N = T^4 + 4*T^2 + 4*T + 2
sage: N.is_irreducible()
True
sage: q = A.base_ring().cardinality()
sage: Gamma0(N).index() == 1 + q^4
True
level()[source]

Return the level of this congruence subgroup.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: Gamma0(T^4 + 2*T + 3).level()
T^4 + 2*T + 3
matrix_space()[source]

Return the matrix space of this congruence subgroup.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: Gamma0(T^4 + 2*T + 3).matrix_space()
Full MatrixSpace of 2 by 2 dense matrices over Univariate Polynomial
Ring in T over Finite Field of size 5
ncusps()[source]

Return the number of cusps of this congruence subgroup, i.e. the number of cusps of the attached Drinfeld modular curve.

EXAMPLES:

sage: A.<T> = GF(5)[]
sage: Gamma0(T - 1).ncusps()
2
sage: Gamma0(T^3 + 1).ncusps()
4
sage: Gamma0(T^7 - 3*T^4 + 1).ncusps()
8

If the level \(N\) is irreducible, the number of cusps is \(2\). We check it below:

sage: N = T^6 + T^4 + 4*T^3 + T^2 + 2
sage: N.is_irreducible()
True
sage: Gamma0(N).ncusps() == 2
True
sage: N = T^7 + 3*T + 3
sage: N.is_irreducible()
True
sage: Gamma0(N).ncusps() == 2
True

REFERENCE:

[Gek2001], Proposition 6.7

class sage.modular.drinfeld_modform.congroup_gamma0.InclusionIntoMatrixSpace(parent)[source]

Bases: Map

Inclusion of a congruence subgroup into the corresponding matrix space.