Lecture March 2, 2016: Modular Symbols
William Stein
Let's compute something, then understand how that computation actually works.
1. Motivation
Quick Exercise:
Choose a composite integer between and .
Compute the space of modular forms of level :
M = ModularForms(N)
Compute the cuspidal_subpace of
M
.Compute the new subspace of the cuspidal subspace.
Compute a list of the newforms, up to the action of in using
M.newforms(names='a')
; verify that the sum of the degrees of the newforms equals the dimension of the new subspace.
Goal for today: give you a more detailed understanding of what happened in the above computation.
How to compute another module that acts on.
How to find, inside , a submodule on which acts in the same way it acts on .
A little sense for how to do the linear algebra on to find the systems of eigenvalues.
2. Computing modular symbols
Quick Exercise: For the integer you chose above, compute M=ModularSymbols(N)
. Compute also M.basis()
and M.hecke_matrix(p)
for some primes p. Also compute the factored characteristic polynomials of some of these Hecke operators.
How is the dimension of related to the dimensiona of in your example?
3. How modular symbols work
(See http://wstein.org/books/modform/modform/weight_two.html#modular-symbols)
To compute ModularSymbols(N)
:
Make a list of representative elements of . Note that there is a bijection between and right cosets of in .
Writes down the relations and , where S=[0,-1;1,0] and T=[1,-1;1,0]. For example, if , then . Yep, very explicit and simple.
There is a natural isomorphism between and the vector space on the 's modulo the above relations. The bijection sends to the class of the path from to , where is a matrix with bottom row congruent mod to .
Computing the quotient of a vector space by (sparse) relations is a standard operation in (sparse) linear algebra. Put the relations as the rows of a matrix; put matrix in reduced row echelon form, and you get canonical minimal relations so that the quotient vector space is identical. Done.
There are many important tricks. For example, you should have noticed in the above exercise that most of the charpoly factors are squares, and the dimension of the space of modular symbols is roughly twice that of the space of modular forms.
There's an involution * on induced by . In terms of , we have .
ModularSymbols(N,sign=1)
is just what you get by computing modulo the additional relations , which has roughly have the dimension.
Quick exercise redo: Do everything above, but with M=ModularSymbols(N,sign=1)
instead.
Exercise: Take one Hecke matrix , compute the factored charpoly, take an irreducible factor of it that appears with multiplicity 1, and compute . This is a vector subspace of the space on which the Hecke operator matrices are acting. Restrict each additional Hecke operator to that subspace, and compute its charpoly on it. That's how you get systems of eigenvalues.
Here's a very depressing aside from this morning: [sage-support] Speed of new_subspace()...