Modular Symbols in MAGMA: A Quick Lesson
by Edray Goins
CREATING DIRICHLET CHARACTERS
=============================
Characters with Rational Values
-------------------------------
To create Dirichlet Characters of level N with rational entries, use
the command "DirichletGroup(N)". For example, to create one of level
9:
> eps := DirichletGroup(9, RationalField());
> eps;
Group of Dirichlet characters of modulus 9 over Rational Field
You can also leave out the condition "RationalField()" since it is the
default:
> eps := DirichletGroup(9);
> eps;
Group of Dirichlet characters of modulus 9 over Rational Field
This group will have one generator, namely "eps.1". We can find out
more information by using the "Conductor" and "Order."
> a := eps.1;
> Conductor(a);
3
> Order(a);
2
Characters with Algebraic Values
--------------------------------
Note that although the group (Z/9Z)^* has order 6, we only want
characters with *rational* entries. Here is how to change the field
of definition to have characters of order 6:
> eps := DirichletGroup(9, CyclotomicField(6));
> a := eps.1;
> Order(a);
6
One can also define Dirichlet Characters when there is more than one
generator. Consider the following example:
> N := 100;
> EulerPhi(N);
40
> eps := DirichletGroup(N, CyclotomicField(40));
> a := eps.1; b := eps.2;
> Conductor(a); Order(a);
4
2
> Conductor(b); Order(b);
25
20
Note that "eps" now gives *two* generators, one of order 2 and the
other of order 20. If you know a priori that (Z/NZ)^* will have more
than one generator, you can write this into the command directly:
> eps := DirichletGroup(100, CyclotomicField(40));
> Order(a); Order(b);
2
20
Characters with Values in Finite Fields
---------------------------------------
You can also define the character over a finite field:
> eps := DirichletGroup(9, GF(7));
> Order(a);
6
MODULAR FORMS WITH CHARACTERS
=========================================
Characteristic Zero Modular Forms with Trivial Nebentype
--------------------------------------------------------
It is rather simple to calculate the space of modular forms of level N
and weight k with trivial nebentype: just use the command
"ModularSymbols(N, k, RatonalField())".
> ModularSymbols(11, 2, RationalField());
Full Modular symbols space of level 11, weight 2, and dimension 3
The default assumes that the coefficients are defined over Q, so you
can leave certain parameters out:
> ModularSymbols(11, 2);
Full Modular symbols space of level 11, weight 2, and dimension 3
Characteristic Zero Modular Forms with Nontrivial Nebentype
-----------------------------------------------------------
Say that we wish to work with modular forms with character "eps",
weight "k", over the rational numbers. We would use the command
"ModularSymbols(eps, k)". Notice how the level and the field of
definition are included in the character in the following example:
> N := 100;
> eps := DirichletGroup( N, CyclotomicField(EulerPhi(N)) );
> Order(a); Order(b);
2
20
> ModularSymbols(a,2);
Full Modular symbols space of level 100, weight 2, character a, and dimension 0
> ModularSymbols(b,2);
Full Modular symbols space of level 100, weight 2, character b, and dimension 0
Now let's consider the nebentype to be the quadratic character mod 5:
> Conductor(b^10); Order(b^10);
5
2
> ModularSymbols(b^10, 2);
Full Modular symbols space of level 100, weight 2, character b^10, and dimension 30
Notice how everything is encoded into the character so it is not
necessary to reenter the level and the field of definition in the
command "ModularSymbols()".
Prime Characteristic Modular Forms with Trivial Nebentype
---------------------------------------------------------
Now we consider working with modular forms over finite fields. If we
don't care about a nebentype, the space is easy to calculate. The
space of modular forms with level N and weight k over a finite field
with q elements is given by the command "ModularSymbols(N, k, GF(q))".
> ModularSymbols(11, 2, GF(5));
Full Modular symbols space of level 11, weight 2, and dimension 3
Prime Characteristic Modular Forms with Trivial Nebentype
---------------------------------------------------------
Here is the most general case when we wish to calculate modular forms
over a finite field. Notice again how everything is encoded into the
character so it is not necessary to reenter the level and the field of
definition in the command "ModularSymbols()".
> eps := DirichletGroup(27, GF(7));
> Order(a^3);
2
> ModularSymbols(a^3, 3);
Full Modular symbols space of level 27, weight 3, character a^3, and dimension 12
CALCULATING IN THE SPACE OF MODULAR FORMS
=========================================
"+1" Subspace
-------------
After computing a full space of modular forms, you can start to cut
out subspaces according to certain rules. For example, to consider
just the "plus" subspace, you just add in this extra information at
the end. Notice the difference between the characteristic zero and
characteristic p cases.
> ModularSymbols(11, 2);
Full Modular symbols space of level 11, weight 2, and dimension 3
> ModularSymbols(11,2, +1);
Full Modular symbols space of level 11, weight 2, and dimension 2
> ModularSymbols(11, 2, GF(5));
Full Modular symbols space of level 11, weight 2, and dimension 3
> ModularSymbols(11, 2, GF(5), +1);
Full Modular symbols space of level 11, weight 2, and dimension 2
> eps := DirichletGroup(27, GF(7));
> ModularSymbols(a, 3);
Full Modular symbols space of level 27, weight 3, character a, and dimension 12
> ModularSymbols(a, 3, +1);
Full Modular symbols space of level 27, weight 3, character a, and dimension 6
Note that in the final example above, you do *not* include information
about the finite field if there is a character involved. Again, the
character encodes all of the necesary information.
Subspaces of Cusp Forms
-----------------------
This command is rather simple: "CuspidalSubspace(M)". Note that you
can view the actual q-expansions of the modular forms by the command
"qExpansionBasis(V, B)" where B-1 is the largest power of q to appear
in the expansion. This command only works after you restrict to the
space of cusp forms -- although there is a corresponding command to
view the Eisenstein series -- and is implemented only for cusp forms
in characteristic zero.
> M := ModularSymbols(11,2,+1);
> V := CuspidalSubspace(M);
> V;
Modular symbols space of level 11, weight 2, and dimension 1
> qExpansionBasis(V, 20);
[
q - 2*q^2 - q^3 + 2*q^4 + q^5 + 2*q^6 - 2*q^7 - 2*q^9 - 2*q^10 + q^11 -
2*q^12 + 4*q^13 + 4*q^14 - q^15 - 4*q^16 - 2*q^17 + 4*q^18 + O(q^20)
]
> eps:=DirichletGroup(3^3);
> M := ModularSymbols(a, 3, +1);
> V := CuspidalSubspace(M);
> V;
Modular symbols space of level 27, weight 3, character a, and dimension 3
> qExpansionBasis(V, 20);
[
q - 5*q^7 + 4*q^10 - 5*q^13 + 4*q^16 - q^19 + O(q^20),
q^2 - q^5 - q^8 - 5*q^11 + 5*q^14 + 6*q^17 + O(q^20),
q^4 - 2*q^7 - q^10 + q^13 + 3*q^16 + 3*q^19 + O(q^20)
]
Subspaces of Predetermined Eigenvalues
--------------------------------------
This "command" is a bit tricky because it involves a series of
commands. Say that we wish to define a subspace cut out by forms with
eigenvalues a_{p1}, a_{p2}, .... First, define the modular space of
interest M consisting of forms of level N, weight k, over a field F.
Second define a polynomial ring R and an ideal I generated by
zeroes , , ... (The ring is defined
simply to specify x as a variable in a polynomial ring.) Third we
compute in the space of forms V with characteristic polynomial at p1
vanishing at x = a_{p1}, etc. Here is an example:
First we define the space of cusp forms:
> F := RationalField();
> eps := DirichletGroup(3^3);
> M := CuspidalSubspace( ModularSymbols(a, 3, +1) );
> qExpansionBasis(M, 20);
[
q - 5*q^7 + 4*q^10 - 5*q^13 + 4*q^16 - q^19 + O(q^20),
q^2 - q^5 - q^8 - 5*q^11 + 5*q^14 + 6*q^17 + O(q^20),
q^4 - 2*q^7 - q^10 + q^13 + 3*q^16 + 3*q^19 + O(q^20)
]
Second we encode the information containing the desired eigenvalues,
which in this case would be a_{2} = 0 and a_{19} = 11:
> R := PolynomialRing(F); I := [<2,x>, <19,x-11>];
Third we compute the space of forms with this information:
> V := Kernel(I,M);
> V;
Modular symbols space of level 27, weight 3, character a, and dimension 1
> qEigenform(V, 20);
q + 4*q^4 - 13*q^7 - q^13 + 16*q^16 + 11*q^19 + O(q^20)
Note that when the dimension of the space is cut down to 1, we can use
the command "qEigenform(V, B)" to find the terms of the q-expansion to
order B.