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.