Modular forms¶
One of ‘s computational specialities is (the very technical field of) modular forms and can do a lot more than is even suggested in this very brief introduction.
Cusp forms¶
How do you compute the dimension of a space of cusp forms using Sage?
To compute the dimension of the space of cusp forms for Gamma use
the command dimension_cusp_forms
. Here is an example from
section “Modular forms” in the Tutorial:
sage: dimension_cusp_forms(Gamma0(11),2)
1
sage: dimension_cusp_forms(Gamma0(1),12)
1
sage: dimension_cusp_forms(Gamma1(389),2)
6112
Related commands: dimension_new__cusp_forms_gamma0
(for
dimensions of newforms), dimension_modular_forms
(for modular
forms), and dimension_eis
(for Eisenstein series). The syntax is
similar - see the Reference Manual for examples.
In future versions of Sage, more related commands will be added.
Coset representatives¶
The explicit representation of fundamental domains of arithmetic quotients H/Γ can be determined from the cosets of Γ in SL2(Z). How are these cosets computed in Sage?
Here is an example of computing the coset representatives of SL2(Z)/Γ0(11):
sage: G = Gamma0(11); G
Congruence Subgroup Gamma0(11)
sage: list(G.coset_reps())
[
[1 0] [ 0 -1] [1 0] [ 0 -1] [ 0 -1] [ 0 -1] [ 0 -1] [ 0 -1]
[0 1], [ 1 0], [1 1], [ 1 2], [ 1 3], [ 1 4], [ 1 5], [ 1 6],
[ 0 -1] [ 0 -1] [ 0 -1] [ 0 -1]
[ 1 7], [ 1 8], [ 1 9], [ 1 10]
]
Modular symbols and Hecke operators¶
Next we illustrate computation of Hecke operators on a space of modular symbols of level 1 and weight 12.
sage: M = ModularSymbols(1,12)
sage: M.basis()
([X^8*Y^2,(0,0)], [X^9*Y,(0,0)], [X^10,(0,0)])
sage: t2 = M.T(2)
sage: f = t2.charpoly('x'); f
x^3 - 2001*x^2 - 97776*x - 1180224
sage: factor(f)
(x - 2049) * (x + 24)^2
sage: M.T(11).charpoly('x').factor()
(x - 285311670612) * (x - 534612)^2
Here t2
represents the Hecke operator T2 on the space
of Full Modular Symbols for Γ0(1) of weight
12 with sign 0 and dimension 3 over
Q.
sage: M = ModularSymbols(Gamma1(6),3,sign=0)
sage: M
Modular Symbols space of dimension 4 for Gamma_1(6) of weight 3 with sign 0
over Rational Field
sage: M.basis()
([X,(0,5)], [X,(3,5)], [X,(4,5)], [X,(5,5)])
sage: M._compute_hecke_matrix_prime(2).charpoly()
x^4 - 17*x^2 + 16
sage: M.integral_structure()
Free module of degree 4 and rank 4 over Integer Ring
Echelon basis matrix:
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
See the section on modular forms in the Tutorial or the Reference Manual for more examples.
Genus formulas¶
Sage can compute the genus of X0(N), X1(N), and related curves. Here are some examples of the syntax:
sage: dimension_cusp_forms(Gamma0(22))
2
sage: dimension_cusp_forms(Gamma0(30))
3
sage: dimension_cusp_forms(Gamma1(30))
9
See the code for computing dimensions of spaces of modular forms
(in sage/modular/dims.py
) or the paper by Oesterlé and Cohen {CO}
for some details.