40.4 Dimensions of spaces of modular forms

Module: sage.modular.dims

Dimensions of spaces of modular forms

Author Log:

ACKNOWLEDGEMENT: The dimension formulas and implementations in this module grew out of a program that Bruce Kaskel wrote (around 1996) in PARI, which Kevin Buzzard subsequently extended. I (William Stein) then implemented it in C++ for Hecke. I also implemented it in Magma. Also, the functions for dimensions of spaces with nontrivial character are based on a paper (that has no proofs) by Cohen and Oesterle (Springer Lecture notes in math, volume 627, pages 69-78). The formulas for $ \Gamma_H(N)$ were found and implemented by Jordi Quer.

The formulas here are more complete than in Hecke or Magma.

Currently the input to each function below is an integer and either a Dirichlet character $ \varepsilon $ or a congruence subgroup, which must be either $ \Gamma_0(N)$ or $ \Gamma_1(N)$ . If the input is a Dirichlet character $ \varepsilon $ , the dimensions are for subspaces of $ M_k(\Gamma_1(N), \varepsilon )$ , where $ N$ is the modulus of $ \varepsilon $ .

Module-level Functions

CO_delta( r, p, N, eps)

This is used as an intermediate value in computations related to the paper of Cohen-Oesterle.

Input:

r
- positive integer
p
- a prime
N
- positive integer
$ \epsilon$
- character

Output: element of the base ring of the character

sage: G.<eps> = DirichletGroup(7)
sage: sage.modular.dims.CO_delta(1,5,7,eps^3)
2

CO_nu( r, p, N, eps)

This is used as an intermediate value in computations related to the paper of Cohen-Oesterle.

Input:

r
- positive integer
p
- a prime
N
- positive integer
eps
- character

Output: element of the base ring of the character

sage: G.<eps> = DirichletGroup(7)
sage: G.<eps> = DirichletGroup(7)
sage: sage.modular.dims.CO_nu(1,7,7,eps)
-1

CohenOesterle( eps, k)

Compute the Cohen-Oesterle function associate to eps, $ k$ . This is a summand in the formula for the dimension of the space of cusp forms of weight $ 2$ with character $ \epsilon$ .

Input:

eps
- Dirichlet character
k
- integer

Output: element of the base ring of eps.

sage: G.<eps> = DirichletGroup(7)
sage: sage.modular.dims.CohenOesterle(eps, 2)
-2/3
sage: sage.modular.dims.CohenOesterle(eps, 4)
-1

S0( n, k)

Return the dimension of the space of level $ n$ weight $ k$ cuspforms on $ \Gamma_0(n)$ .

Input:

n
- an integer
k
- an integer

Output: Integer

sage: sage.modular.dims.S0(11,2)
1
sage: a = sage.modular.dims.S0(1,2); a
0
sage: type(a)
<type 'sage.rings.integer.Integer'>
sage: sage.modular.dims.S0(5,0)
0
sage: sage.modular.dims.S0(20,1)
0
sage: sage.modular.dims.S0(20,4)
6

S1( n, k)

Return the dimension of the space of level $ n$ weight $ k$ cuspforms on $ \Gamma_1(n)$ .

Input:

n
- an integer
k
- an integer

Output: Integer

sage: sage.modular.dims.S1(11,2)
1
sage: a = sage.modular.dims.S1(13,2); a
2
sage: type(a)
<type 'sage.rings.integer.Integer'>
sage: sage.modular.dims.S1(20,4)
26

c0( n)

Return the number of cusps of the modular curve $ X_0(n)$ .

Input:

n
- an integer
Output: Integer

sage: [sage.modular.dims.c0(n) for n in [1..19]]
[1, 2, 2, 3, 2, 4, 2, 4, 4, 4, 2, 6, 2, 4, 4, 6, 2, 8, 2]
sage: [sage.modular.dims.c0(n) for n in prime_range(2,100)]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

c1( n)

Return value of $ c_1(n)$ , which is the number of cusps on the modular curve $ X_1(n)$ .

sage: [sage.modular.dims.c1(n) for n in prime_range(2,100)]
[2, 2, 4, 6, 10, 12, 16, 18, 22, 28, 30, 36, 40, 42, 46, 52, 58, 60, 66,
70, 72, 78, 82, 88, 96]

dimension_cusp_forms( X, [k=2])

The dimension of the space of cusp forms for the given congruence subgroup or Dirichlet character.

Input:

X
- congruence subgroup or Dirichlet character or integer
k
- weight (integer)

sage: dimension_cusp_forms(5,4)
1

sage: dimension_cusp_forms(Gamma0(11),2)
1
sage: dimension_cusp_forms(Gamma1(13),2)
2

sage: dimension_cusp_forms(DirichletGroup(13).0^2,2)
1
sage: dimension_cusp_forms(DirichletGroup(13).0,3)
1

sage: dimension_cusp_forms(Gamma0(11),2)
1
sage: dimension_cusp_forms(Gamma0(11),0)
0
sage: dimension_cusp_forms(Gamma0(1),12)
1
sage: dimension_cusp_forms(Gamma0(1),2)
0
sage: dimension_cusp_forms(Gamma0(1),4)
0

sage: dimension_cusp_forms(Gamma0(389),2)
32
sage: dimension_cusp_forms(Gamma0(389),4)
97
sage: dimension_cusp_forms(Gamma0(2005),2)
199
sage: dimension_cusp_forms(Gamma0(11),1)
0

sage: dimension_cusp_forms(Gamma1(11),2)
1
sage: dimension_cusp_forms(Gamma1(1),12)
1
sage: dimension_cusp_forms(Gamma1(1),2)
0
sage: dimension_cusp_forms(Gamma1(1),4)
0

sage: dimension_cusp_forms(Gamma1(389),2)
6112
sage: dimension_cusp_forms(Gamma1(389),4)
18721
sage: dimension_cusp_forms(Gamma1(2005),2)
159201

sage: dimension_cusp_forms(Gamma1(11),1)
Traceback (most recent call last):
...
NotImplementedError: computation of dimensions of spaces of weight 1
modular forms not implemented in general.

sage: e = DirichletGroup(13).0
sage: e.order()
12
sage: dimension_cusp_forms(e,2)
0
sage: dimension_cusp_forms(e^2,2)
1

dimension_cusp_forms_H( G, k)

Return the dimension of the space of weight $ k$ cusp forms for the group $ G = \Gamma_H$ .

Input:

G
- a congruence subgroup GammaH
k
- an integer
Output: Integer

sage: sage.modular.dims.dimension_cusp_forms_H(GammaH(33,[2]),2)
5
sage: sage.modular.dims.dimension_cusp_forms_H(GammaH(33,[2]),3)
0
sage: sage.modular.dims.dimension_cusp_forms_H(GammaH(33,[2,5]),2)
3

dimension_cusp_forms_eps( eps, [k=2])

The dimension of the space of cusp forms of weight $ k$ and character $ \epsilon$ .

Input:

$ \epsilon$
- a Dirichlet character
k
- integer, a weight $ \geq 2$ .

Output:
integer
- the dimension

sage: G.<eps> = DirichletGroup(9)
sage: [sage.modular.dims.dimension_cusp_forms_eps(eps, k) for k in [2..10]]
[0, 1, 0, 3, 0, 5, 0, 7, 0]
sage: [sage.modular.dims.dimension_cusp_forms_eps(eps^2, k) for k in [2..10]]
[0, 0, 2, 0, 4, 0, 6, 0, 8]

dimension_cusp_forms_fromH( chi, k)

Compute the dimension of the space of cusp forms of weight $ k$ and character $ \chi$ using formulas for dimensions for congruence subgroups $ \Gamma_H(N)$ instead of the formulas of Cohen-Oesterle.

Input:

chi
- Dirichlet character
k
- integer (weight)

Output: Integer

sage: K = CyclotomicField(3)
sage: eps = DirichletGroup(7*43,K).0^2

The following two calculations use different algorithms.

sage: dimension_cusp_forms(eps,2)
28
sage: sage.modular.dims.dimension_cusp_forms_fromH(eps,2)
28

dimension_cusp_forms_gamma0( N, [k=2])

The dimension of the space $ S_k(\Gamma_0(N))$ of cusp forms.

Input:

N
- integer (the level)
k
- integer (the weight)

Output:
Integer
- the dimension

sage: sage.modular.dims.dimension_cusp_forms_gamma0(23,2)
2
sage: sage.modular.dims.dimension_cusp_forms_gamma0(1,24)
2
sage: sage.modular.dims.dimension_cusp_forms_gamma0(11,3)
0
sage: sage.modular.dims.dimension_cusp_forms_gamma0(11,-1)
0

dimension_cusp_forms_gamma1( N, [k=2])

The dimension of the space $ S_k(\Gamma_1(N))$ of cusp forms.

Input:

N
- integer
k
- integer

Output:
integer
- the dimension

sage: sage.modular.dims.dimension_cusp_forms_gamma1(23,2)
12
sage: sage.modular.dims.dimension_cusp_forms_gamma1(1,24)
2
sage: sage.modular.dims.dimension_cusp_forms_gamma1(11,-1)
0
sage: sage.modular.dims.dimension_cusp_forms_gamma1(11,0)
0

dimension_eis( X, [k=2])

The dimension of the space of eisenstein series for the given congruence subgroup.

Input:

X
- congruence subgroup or Dirichlet character or integer
k
- weight (integer)

sage: dimension_eis(5,4)
2

sage: dimension_eis(Gamma0(11),2)
1
sage: dimension_eis(Gamma1(13),2)
11
sage: dimension_eis(Gamma1(2006),2)
3711

sage: e = DirichletGroup(13).0
sage: e.order()
12
sage: dimension_eis(e,2)
0
sage: dimension_eis(e^2,2)
2

sage: e = DirichletGroup(13).0
sage: e.order()
12
sage: dimension_eis(e,2)
0
sage: dimension_eis(e^2,2)
2
sage: dimension_eis(e,13)
2

sage: G = DirichletGroup(20)
sage: dimension_eis(G.0,3)
4
sage: dimension_eis(G.1,3)
6
sage: dimension_eis(G.1^2,2)
6

sage: G = DirichletGroup(200)
sage: e = prod(G.gens(), G(1))
sage: e.conductor()
200
sage: dimension_eis(e,2)
4

sage: dimension_modular_forms(Gamma1(4), 11)
6

dimension_eis_H( G, k)

Return the dimension of the space of weight $ k$ Eisenstein series for the group $ G = \Gamma_H$ .

Input:

G
- a congruence subgroup GammaH
k
- an integer
Output: Integer

sage: sage.modular.dims.dimension_eis_H(GammaH(33,[2]),2)
7
sage: sage.modular.dims.dimension_eis_H(GammaH(33,[2]),3)
0
sage: sage.modular.dims.dimension_eis_H(GammaH(33,[2,5]),2)
3

dimension_eis_eps( eps, [k=2])

The dimension of the space of eisenstein series of weight $ k$ and character $ \varepsilon $ .

Input:

eps
- a Dirichlet character
k
- integer, a weight >= 2.

Output:
integer
- the dimension

sage: G.<eps> = DirichletGroup(9)
sage: [sage.modular.dims.dimension_eis_eps(eps, k) for k in [2..10]]
[0, 2, 0, 2, 0, 2, 0, 2, 0]
sage: [sage.modular.dims.dimension_eis_eps(eps^2, k) for k in [2..10]]
[2, 0, 2, 0, 2, 0, 2, 0, 2]

dimension_modular_forms( X, [k=2])

The dimension of the space of cusp forms for the given congruence subgroup (either $ \Gamma_0(N)$ , $ \Gamma_1(N)$ , or $ \Gamma_H(N)$ ) or Dirichlet character.

Input:

X
- congruence subgroup or Dirichlet character
k
- weight (integer)

sage: dimension_modular_forms(Gamma0(11),2)
2
sage: dimension_modular_forms(Gamma0(11),0)
1
sage: dimension_modular_forms(Gamma1(13),2)
13

sage: e = DirichletGroup(20).1
sage: dimension_modular_forms(e,3)
9
sage: dimension_cusp_forms(e,3)
3
sage: dimension_eis(e,3)
6
sage: dimension_modular_forms(11,2)
2

dimension_modular_forms_fromH( chi, k)

Compute the dimension of the space of modular forms of weight $ k$ and character $ \chi$ using formulas for dimensions for congruence subgroups $ \Gamma_H(N)$ instead of the formulas of Cohen-Oesterle.

Input:

chi
- Dirichlet character
k
- integer (weight)

Output: Integer

sage: K = CyclotomicField(3)
sage: eps = DirichletGroup(7*43,K).0^2
sage: dimension_modular_forms(eps,2)
32
sage: sage.modular.dims.dimension_modular_forms_fromH(eps,2)
32

dimension_new_cusp_forms( X, [k=2], [p=0])

Return the dimension of the new (or $ p$ -new) subspace of cusp forms for the character or group $ X$ .

Input:

X
- integer, congruence subgroup or Dirichlet character
k
- weight (integer)
p
- 0 or a prime

sage: dimension_new_cusp_forms(100,2)
1

sage: dimension_new_cusp_forms(Gamma0(100),2)
1
sage: dimension_new_cusp_forms(Gamma0(100),4)
5

sage: dimension_new_cusp_forms(Gamma1(100),2)
141
sage: dimension_new_cusp_forms(Gamma1(100),4)
463

sage: dimension_new_cusp_forms(DirichletGroup(100).1^2,2)
2
sage: dimension_new_cusp_forms(DirichletGroup(100).1^2,4)
8

sage: sum(dimension_new_cusp_forms(e,3) for e in DirichletGroup(30))
12
sage: dimension_new_cusp_forms(Gamma1(30),3)
12

dimension_new_cusp_forms_H( G, k, [p=0])

Return the dimension of the space of new (or $ p$ -new) weight $ k$ cusp forms for $ G$ .

Input:

G
- group of the form Gamma_H(N)
k
- an integer at least 2 (the weight)
p
- integer (default: 0); if nonzero, compute the $ p$ -new subspace.

Output: Integer

sage: from sage.modular.dims import *    
sage: dimension_new_cusp_forms_H(GammaH(33,[2]), 2)
3

dimension_new_cusp_forms_eps( eps, [k=2], [p=0])

Dimension of the new subspace (or $ p$ -new subspace) of cusp forms of weight $ k$ and character $ \epsilon$ .

Input:

eps
- a Dirichlet character
k
- an integer (ddefault: 2)
p
- a prime (default: 0); just the $ p$ -new subspace if given

Output: Integer

sage: G = DirichletGroup(9)
sage: eps = G.0^3
sage: eps.conductor()
3
sage: [sage.modular.dims.dimension_new_cusp_forms_eps(eps, k) for k in [2..10]]
[0, 0, 0, 2, 0, 2, 0, 2, 0]
sage: [sage.modular.dims.dimension_cusp_forms_eps(eps, k) for k in [2..10]]
[0, 0, 0, 2, 0, 4, 0, 6, 0]
sage: [sage.modular.dims.dimension_new_cusp_forms_eps(eps, k, 3) for k in [2..10]]
[0, 0, 0, 2, 0, 2, 0, 2, 0]

Double check using modular symbols (independent calculation):

sage: [ModularSymbols(eps,k,sign=1).cuspidal_subspace().new_subspace().dimension()  for k in [2..10]]
[0, 0, 0, 2, 0, 2, 0, 2, 0]
sage: [ModularSymbols(eps,k,sign=1).cuspidal_subspace().new_subspace(3).dimension()  for k in [2..10]]
[0, 0, 0, 2, 0, 2, 0, 2, 0]

Another example at level 33:

sage: G = DirichletGroup(33)
sage: eps = G.1
sage: eps.conductor()
11
sage: [sage.modular.dims.dimension_new_cusp_forms_eps(G.1, k) for k in [2..4]]
[0, 4, 0]
sage: [sage.modular.dims.dimension_new_cusp_forms_eps(G.1^2, k) for k in [2..4]]
[2, 0, 6]
sage: [sage.modular.dims.dimension_new_cusp_forms_eps(G.1^2, k, 3) for k in [2..4]]
[2, 0, 6]

dimension_new_cusp_forms_gamma0( N, [k=2], [p=0])

Dimension of the $ p$ -new subspace of $ S_k(\Gamma_0(N))$ . If $ p=0$ , dimension of the new subspace.

Input:

N
- a positive integer
k
- an integer
p
- a prime number

Output: Integer

sage: sage.modular.dims.dimension_new_cusp_forms_gamma0(100, 2, 5)
5

Independently compute the dimension 5 above:

sage: m = ModularSymbols(100, 2,sign=1).cuspidal_subspace()
sage: m.new_subspace(5)
Modular Symbols subspace of dimension 5 of Modular Symbols space of
dimension 18 for Gamma_0(100) of weight 2 with sign 1 over Rational Field

dimension_new_cusp_forms_gamma1( N, [k=2], [p=0])

Return the dimension of the $ p$ -new subspace of $ S_k(\Gamma_1(N))$ . If $ p=0$ , return the dimension of the new subspace.

Input:

N
- a positive integer
k
- an integer
p
- a prime number

Output: Integer

sage: sage.modular.dims.dimension_new_cusp_forms_gamma1(4*25, 2, 5)
225

dimension_new_cusp_forms_group( group, [k=2], [p=0])

Return the dimension of the new space of cusp forms for the congruence subgroup group. If $ p$ is given, return the $ p$ -new subspace.

Input:

group
- a congruence subgroup
k
- an integer (default: 2)
p
- a prime (default: 0); just the $ p$ -new subspace if given

Output: Integer

sage: sage.modular.dims.dimension_new_cusp_forms_group(Gamma0(33),2)
1
sage: sage.modular.dims.dimension_new_cusp_forms_group(Gamma0(33),2,3)
1
sage: sage.modular.dims.dimension_new_cusp_forms_group(Gamma0(33),2,11)
3
sage: sage.modular.dims.dimension_new_cusp_forms_group(Gamma1(33),2)
19
sage: sage.modular.dims.dimension_new_cusp_forms_group(Gamma1(33),2,11)
21
sage: sage.modular.dims.dimension_new_cusp_forms_group(GammaH(33,[1,2]),2)
3

eisen( p)

Return the Eisenstein number $ n$ which is the numerator of $ (p-1)/12$ .

Input:

p
- a prime

Output: Integer

sage: [(p,sage.modular.dims.eisen(p)) for p in prime_range(24)]
[(2, 1), (3, 1), (5, 1), (7, 1), (11, 5), (13, 1), (17, 4), (19, 3), (23,
11)]

g0( n)

Return the genus of the modular curve $ X_0(n)$ .

Input:

n
- an integer
Output: Integer

sage: [sage.modular.dims.g0(n) for n in [1..23]]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 2, 2]
sage: [n for n in [1..200] if sage.modular.dims.g0(n) == 1]
[11, 14, 15, 17, 19, 20, 21, 24, 27, 32, 36, 49]

g1( n)

Return the genus of the modular curve $ X_1(n)$ .

sage: [sage.modular.dims.g1(n) for n in prime_range(2,100)]
[0, 0, 0, 0, 1, 2, 5, 7, 12, 22, 26, 40, 51, 57, 70, 92, 117, 126, 155,
176, 187, 222, 247, 287, 345]

gH( N, H)

Return the genus of the curve $ X_H(N)$ .

Input:

N
- an integer
H
- list of elements in $ \mathbf{Z}$ of a subgroup of $ (\mathbf{Z}/N\mathbf{Z})^*$
Output: Integer

sage: sage.modular.dims.gH(33, GammaH(33,[2])._list_of_elements_in_H())
5
sage: sage.modular.dims.gH(7, GammaH(7,[2])._list_of_elements_in_H())
0
sage: sage.modular.dims.gH(23, [1..22])
2
sage: sage.modular.dims.g0(23)
2
sage: sage.modular.dims.gH(23, [1])
12
sage: sage.modular.dims.g1(23)
12

Author: Jordi Quer

genus_H( H)

Return the genus of the modular curve $ X_H(N)$ , where $ H$ is a congruence subgroup of the form $ \Gamma_H(N)$ .

Input:

H
- a congruence subgroup $ \Gamma_H(N)$
Output: Integer

sage: sage.modular.dims.genus_H(GammaH(33,[2]))
5

Author: Jordi Quer

idxG0( N)

Return the index $ [\SL _2(\mathbf{Z}):\Gamma_0(N)]$ of $ \Gamma_0(N)$ in $ \SL _2(\mathbf{Z})$ .

Input:

N
- a positive integer

Output: Integer

sage: [sage.modular.dims.idxG0(N) for N in [1..10]]
[1, 3, 4, 6, 6, 12, 8, 12, 12, 18]
sage: type(sage.modular.dims.idxG0(15))
<type 'sage.rings.integer.Integer'>

idxG1( N)

The index $ [\SL _2(\mathbf{Z}):\Gamma_1(N)]$ of $ \Gamma_1(N)$ in $ \SL _2(\mathbf{Z})$ .

Input:

N
- a positive integer

Output: Integer

sage: [sage.modular.dims.idxG1(N) for N in [1..10]]
[1, 3, 8, 12, 24, 24, 48, 48, 72, 72]

lambda3( k)

Return 0 if $ k$ is odd, 4 if $ k$ is divisible by 4, and -4 if $ k$ is even but not divisible by 4.

This is used for computations of the Cohen-Oesterle formulas.

Input:

k
- an integer
Output: Integer

sage: [sage.modular.dims.lambda3(k) for k in [0..10]]
[4, 0, -4, 4, 0, -4, 4, 0, -4, 4, 0]

lambda4( k)

Return 0 if $ k$ is odd, 3 if $ k$ is divisible by 4, and -3 if $ k$ is even but not divisible by 4.

This is used for computations of the Cohen-Oesterle formulas.

Input:

k
- an integer
Output: Integer

sage: [sage.modular.dims.lambda4(k) for k in [0..10]]
[3, 0, -3, 0, 3, 0, -3, 0, 3, 0, -3]

mu0( n)

Return value of the combinatorial function

$\displaystyle \mu_0(n) = \prod_{p^r\vert n} (p+1)p^{r-1},
$

where the product is over the maximal prime power divisors of $ n$ .

Input:

n
- an integer

Output: Integer

sage: [sage.modular.dims.mu0(n) for n in [1..19]]
[1, 3, 4, 6, 6, 12, 8, 12, 12, 18, 12, 24, 14, 24, 24, 24, 18, 36, 20]

mu1( n)

Return value of the combinatorial function $ \mu_1(n)$ , where for $ n = 1,2$ , $ \mu_1(n) = \mu_0(n)$ , and for $ n > 2$ ,

$\displaystyle \mu_{1}(n) = \frac{\phi(n) \cdot \mu_0(n)}{2}.
$

Input:

n
- an integer
Output: Integer

sage: [sage.modular.dims.mu1(n) for n in [1..16]]
[1, 3, 4, 6, 12, 12, 24, 24, 36, 36, 60, 48, 84, 72, 96, 96]

mu20( n)

Return value of the arithmetic function $ \mu_{2,0}(n)$ , where $ \mu_{2,0}(n) = 0$ if $ n$ is divisible by 4, and

$\displaystyle \mu_{2,0}(n) = \prod_{p\vert n} \left(1 + \left(\frac{-4}{p}\right)\right)
$

otherwise.

Input:

n
- an integer
Output: Integer

sage: [sage.modular.dims.mu20(n) for n in [1..19]]
[1, 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0]

mu21( n)

Return value of $ \mu_{2,1}(n)$ . By definition, this equals $ \mu_{2,0}(n)$ for $ n<4$ and equals 0 otherwise.

sage: [sage.modular.dims.mu21(n) for n in [1..16]]
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

mu30( n)

Return value of the arithmetic function $ \mu_{3,0}(n)$ , where $ \mu_{3,0}(n) = 0$ if $ n$ is divisible by 2 or 9, and

$\displaystyle \mu_{3,0}(n) = \prod_{p\vert n} \left(1 + \left(\frac{-3}{p}\right)\right)
$

otherwise.

Input:

n
- an integer
Output: Integer

sage: [sage.modular.dims.mu30(n) for n in [1..19]]
[1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2]

mu31( n)

Return value of $ \mu_{3,1}(n)$ . By definition, this equals $ \mu_{3,0}(n)$ for $ n<4$ and equals 0 otherwise.

sage: [sage.modular.dims.mu31(n) for n in [1..10]]
[1, 0, 1, 0, 0, 0, 0, 0, 0, 0]

muH( N, H)

Return the degree of the covering map $ X_H(N) \rightarrow X_0(1)$ .

Input:

N
- an integer
H
- list of elements in $ \mathbf{Z}$ of a subgroup of $ (\mathbf{Z}/N\mathbf{Z})^*$

Output: Integer

sage: sage.modular.dims.muH(33, GammaH(33,[2])._list_of_elements_in_H())
96

Author: Jordi Quer

mumu( N)

Return 0 if any cube divides $ N$ . Otherwise return $ (-2)^v$ where $ v$ is the number of primes that exactly divide $ N$ .

This is similar to the Moebius function.

Input:

N
- an integer at least 1
Output: Integer

sage: sage.modular.dims.mumu(27)
0
sage: sage.modular.dims.mumu(6*25)
4
sage: sage.modular.dims.mumu(7*9*25)
-2
sage: sage.modular.dims.mumu(9*25)
1

nu2H( N, H)

Number of elliptic points of order 2 for the group $ \Gamma_H(N)$

Input:

N
- an integer
H
- list of elements in $ \mathbf{Z}$ of a subgroup of $ (\mathbf{Z}/N\mathbf{Z})^*$

Output: Integer

sage: sage.modular.dims.nu2H(33, GammaH(33,[2])._list_of_elements_in_H())
0
sage: sage.modular.dims.nu2H(5, GammaH(5,[2])._list_of_elements_in_H())
2

Author: Jordi Quer

nu3H( N, H)

Number of elliptic points of order 3 for the group $ \Gamma_H(N)$

Input:

N
- an integer
H
- list of elements in $ \mathbf{Z}$ of a subgroup of $ (\mathbf{Z}/N\mathbf{Z})^*$

Output: Integer

sage: sage.modular.dims.nu3H(33, GammaH(33,[2])._list_of_elements_in_H())
0
sage: sage.modular.dims.nu3H(7, GammaH(7,[2])._list_of_elements_in_H())
2

Author: Jordi Quer

nuinfH( N, H)

Number of cusps for the group $ \Gamma_H(N)$

Input:

N
- an integer
H
- list of elements in $ \mathbf{Z}$ of a subgroup of $ (\mathbf{Z}/N\mathbf{Z})^*$

Output: Integer

sage: sage.modular.dims.nuinfH(33, GammaH(33,[2])._list_of_elements_in_H())
8

Author: Jordi Quer

nuinfHreg( N, H)

Number of regular cusps for the group $ \Gamma_H(N)$

Input:

N
- an integer
H
- list of elements in $ \mathbf{Z}$ of a subgroup of $ (\mathbf{Z}/N\mathbf{Z})^*$
Output: Integer

sage: sage.modular.dims.nuinfHreg(33, GammaH(33,[2])._list_of_elements_in_H())
0
sage: sage.modular.dims.nuinfHreg(7, GammaH(7,[2])._list_of_elements_in_H())
2

Author: Jordi Quer

sturm_bound( level, [weight=2])

Returns the Sturm bound for modular forms with given level and weight.

Input:

level
- an integer or a congruence subgroup
weight
- an integer $ \geq 2$ (default: 2)

sage: sturm_bound(11,2)
2
sage: sturm_bound(389,2)
65
sage: sturm_bound(1,12)
1
sage: sturm_bound(100,2)
30
sage: sturm_bound(1,36)
3    
sage: sturm_bound(11)
2
sage: sturm_bound(Gamma0(11))
2
sage: sturm_bound(Gamma0(13))
3
sage: sturm_bound(Gamma0(16))
4
sage: sturm_bound(GammaH(16,[13]))
8
sage: sturm_bound(GammaH(16,[15]))
16
sage: sturm_bound(Gamma1(16))
32
sage: sturm_bound(Gamma1(13))
36
sage: sturm_bound(Gamma1(13),5)
72

FURTHER DETAILS: This function returns a positive integer $ n$ such that the Hecke operators $ T_1,\ldots, T_n$ acting on cusp forms generate the Hecke algebra as a $ \mathbf{Z}$ -module when the character is trivial or quadratic. Otherwise, $ T_1,\ldots, T_n$ generate the Hecke algebra at least as a $ \mathbf{Z}[\varepsilon ]$ -module, where $ \mathbf{Z}[\varepsilon ]$ is the ring generated by the values of the Dirichlet character $ \varepsilon $ . Alternatively, this is a bound such that if two cusp forms associated to this space of modular symbols are congruent modulo $ (\lambda, q^n)$ , then they are congruent modulo $ \lambda$ .

REFERENCES: See the Agashe-Stein appendix to Lario and Schoof, Some computations with Hecke rings and deformation rings, Experimental Math., 11 (2002), no. 2, 303-311. This result originated in the paper Sturm, On the congruence of modular forms, Springer LNM 1240, 275-280, 1987.

REMARK: Kevin Buzzard pointed out to me (William Stein) in Fall 2002 that the above bound is fine for $ \Gamma_1(N)$ with character, as one sees by taking a power of $ f$ . More precisely, if $ f
\equiv 0 \pmod{p}$ for first $ s$ coefficients, then $ f^r \equiv 0
\pmod{p}$ for first $ sr$ coefficents. Since the weight of $ f^r$ is $ r\cdot k(f)$ , it follows that if $ s \geq b$ , where $ b$ is the Sturm bound for $ \Gamma_0(N)$ at weight $ k(f)$ , then $ f^r$ has valuation large enough to be forced to be 0 at $ r*k(f)$ by Sturm bound (which is valid if we choose $ r$ correctly). Thus $ f
\equiv 0 \pmod{p}$ . Conclusion: For $ \Gamma_1(N)$ with fixed character, the Sturm bound is exactly the same as for $ \Gamma_0(N)$ .

A key point is that we are finding $ \mathbf{Z}[\varepsilon ]$ generators for the Hecke algebra here, not $ \mathbf{Z}$ -generators. So if one wants generators for the Hecke algebra over $ \mathbf{Z}$ , this bound must be suitably modified (and I'm not sure what the modification is).

Author: William Stein

See About this document... for information on suggesting changes.