[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Creation Functions

Subsections

Ambient Spaces

The following are used for creating spaces of modular forms. Each of the following can be replaced by CuspForms to obtain the subspace of cusp forms instead.

ModularForms(N) : RngIntElt -> ModFrm
The space M_2(Gamma_0(N), Z) of modular forms on Gamma_0(N) of weight 2. See the documentation for ModularForms(N,k) below, with k=2.
ModularForms(N, k) : RngIntElt, RngIntElt -> ModFrm
The space M_k(Gamma_0(N), Z) of weight k modular forms on Gamma_0(N) over Z.
ModularForms(chars, k) : [GrpDrchElt], RngIntElt -> ModFrm
The space M_k( chars), which is the direct sum of the spaces M_k(Gamma_1(N))(e) as e runs over all characters Galois-conjugate to some character in chars.
ModularForms(G) : -> ModFrm
This is the same as ModularForms(G,2) (see below).
ModularForms(G, k) : -> ModFrm
The space M_k(G, Z), where G is a congruence subgroup. The groups Gamma_0(N) and Gamma_1(N) are currently supported, and can be created using the commands Gamma0(N) and Gamma1(N), respectively.

Example ModFrm_Creation-Space (H97E3)

In this example, we illustrate each of the above constructors in turn. First we create M_2(Gamma_0(65)).

> M := ModularForms(65); M;
Space of modular forms on Gamma_0(65) of weight 2 and dimension 8 over
Integer Ring.
> Dimension(M);
8
> Basis(CuspidalSubspace(M));
[
    q + q^5 + 2*q^6 + q^7 + O(q^8),
    q^2 + 2*q^5 + 3*q^6 + 2*q^7 + O(q^8),
    q^3 + 2*q^5 + 2*q^6 + 2*q^7 + O(q^8),
    q^4 + 2*q^5 + 3*q^6 + 3*q^7 + O(q^8),
    3*q^5 + 5*q^6 + 2*q^7 + O(q^8)
]
Next we create M_4(Gamma_0(8)).

> M := ModularForms(8,4); M;
Space of modular forms on Gamma_0(8) of weight 4 and dimension 5 over 
Integer Ring.
> Dimension(M);
5
> Basis(CuspidalSubspace(M));
[
    q - 4*q^3 - 2*q^5 + 24*q^7 + O(q^8)
]

Now we create the space M_3(N, varepsilon), where varepsilon is a character of level 20, conductor 5 and order 4.

> G := DirichletGroup(20,CyclotomicField(EulerPhi(20)));
> chars := Elements(G); #chars;
8
> [Conductor(eps) : eps in chars];
[ 1, 4, 5, 20, 5, 20, 5, 20 ]
> eps := chars[3];
> IsEven(eps);          
false
> M := ModularForms([eps],3); M;
Space of modular forms on Gamma_1(20) with character all conjugates of
[$.2], weight 3, and dimension 12 over Integer Ring.
> Dimension(EisensteinSubspace(M));
6
> Dimension(CuspidalSubspace(M));
6
Next we create the direct sum of the spaces M_k(20, varepsilon) as varepsilon varies over the four mod 20 characters of order at most 2, for k=2 and 3.

> G := DirichletGroup(20, RationalField());   // (Z/20Z)^* --> Q^*
> chars := Elements(G); #chars;
4
> M := ModularForms(chars,2); M;
Space of modular forms on Gamma_1(20) with characters all
conjugates of [1, .1, .2, .1 *.2], weight 2, and dimension 12
over Integer Ring.
> M := ModularForms(chars,3); M;
Space of modular forms on Gamma_1(20) with characters all
conjugates of [1, .1, .2, .1 *.2], weight 3, and dimension 16
over Integer Ring.
Now we create the spaces M_k(Gamma_1(20)) for k=2, 3.

> ModularForms(Gamma1(20)); 
Space of modular forms on Gamma_1(20) of weight 2 and dimension 22 
over Integer Ring.
> ModularForms(Gamma1(20),3); 
Space of modular forms on Gamma_1(20) of weight 3 and dimension 34 
over Integer Ring.
We can also create the subspace of cuspforms directly:

> CuspForms(Gamma1(20)); 
Space of modular forms on Gamma_1(20) of weight 2 and dimension 3
over Integer Ring.
> CuspForms(Gamma1(20),3);
Space of modular forms on Gamma_1(20) of weight 3 and dimension 14 
over Integer Ring.

Base Extension

If M is a space of modular formS created using one of the constructors in Section Ambient Spaces, then the base ring of M is Z. Thus we can base extend M to any ring R. The examples below illustrate some simple applications of BaseExtend.

BaseExtend(M, R) : ModFrm, Rng -> ModFrm, Map
The base extension of the space M of modular forms to the ring R and the induced map from M to BaseExtend(M,R). The only requirement on R is that there is a natural coercion map from the base ring of M to R. For example, when BaseRing(M) is the integers, any ring R is allowed.
BaseExtend(M, phi) : ModFrm, Map -> ModFrm, Map
The base extension of the space M of modular forms to the ring R using the map phi : BaseRing(M) -> R, and the induced map from M to BaseExtend(M,R)

Example ModFrm_BaseExtend (H97E4)

We first illustrate an Eisenstein series in M_(12)(1) that is congruent to 1 modulo 3.

> M<q> := EisensteinSubspace(ModularForms(1,12));
> E12 := M.1; E12 + O(q^4);
691 + 65520*q + 134250480*q^2 + 11606736960*q^3 + O(q^4)
> M3<q3> := BaseExtend(M,GF(3));
> Dimension(M3);
1
> M3.1+O(q3^20);
1 + O(q3^20)
This congruence can be proved by noting that the coefficient of q^n in the q-expansion of E_(12)/65520, for any n >= 1, is an eigenvalue of a Hecke operator, hence an integer, and that 65520 is divisible by 3. Because E_(12) is defined over Z the command "E12Q/65520" would result in an error, so we first base extend to Q.

> MQ, phi := BaseExtend(M,RationalField());
> E12Q := phi(E12);   
> E12Q/65520;
691/65520 + q + 2049*q^2 + 177148*q^3 + 4196353*q^4 + 48828126*q^5 + 
362976252*q^6 + 1977326744*q^7 + O(q^8)

It is possible to base extend to almost any silly commutative ring.

> M := ModularForms(11,2);
> R := PolynomialRing(GF(17),3);
> MR<q> := BaseExtend(M,R); MR;
Space of modular forms on Gamma_0(11) of weight 2 and dimension 2 over
Polynomial ring of rank 3 over GF(17)
Lexicographical Order
Variables: $.1, $.2, $.3.
> f := MR.1;  f + O(q^5);
1 + 12*q^2 + 12*q^3 + 12*q^4 + O(q^5)
> f*(R.1+3*R.2) + O(q^4);
$.1 + 3*$.2 + (12*$.1 + 2*$.2)*q^2 + (12*$.1 + 2*$.2)*q^3 + O(q^4)

Elements

M . i : ModFrm, RngIntElt -> ModFrmElt
The ith basis vector of M.
M ! f : ModFrm, . -> ModFrmElt
The coercion of f into M. Here f can be a modular form, a power series with absolute precision, or something that can be coerced into RSpace(M).
ModularForm(E) : CrvEll -> ModFrm
The modular form associated to the elliptic curve E over Q. (See Section Elliptic Curves.)

Example ModFrm_CreationElements (H97E5)

> M := ModularForms(Gamma0(11),2);
> M.1;
1 + 12*q^2 + 12*q^3 + 12*q^4 + 12*q^5 + 24*q^6 + 24*q^7 + O(q^8)
> M.2;
q - 2*q^2 - q^3 + 2*q^4 + q^5 + 2*q^6 - 2*q^7 + O(q^8)
> R<q> := PowerSeriesRing(Integers());
> f := M!(1 + q + 10*q^2 + O(q^3));
> f;
1 + q + 10*q^2 + 11*q^3 + 14*q^4 + 13*q^5 + 26*q^6 + 22*q^7 + O(q^8)
> Eltseq(f);
[ 1, 1 ]
Eltseq gives f as a linear combination of M.1 and M.2. Next we coerce f into M_2(Gamma_0(22)).

> M22 := ModularForms(Gamma0(22),2);
> g := M22!f; g;
1 + q + 10*q^2 + 11*q^3 + 14*q^4 + 13*q^5 + 26*q^6 + 22*q^7 + O(q^8)
> Eltseq(g);
[ 1, 1, 10, 11, 14 ]
The elliptic curve E below defines an element of M_2(Gamma_0(11)).

> E := EllipticCurve([ 0, -1, 1, -10, -20 ]);
> Conductor(E);
11
> f := ModularForm(E);
> f;
q - 2*q^2 - q^3 + 2*q^4 + q^5 + 2*q^6 - 2*q^7 + O(q^8)
> f + M.1;
1 + q + 10*q^2 + 11*q^3 + 14*q^4 + 13*q^5 + 26*q^6 + 22*q^7 + O(q^8)
Note, however, that the ambient space of the parent of f is not equal to M, despite the fact that both are isomorphic to M_2(Gamma_0(11)). This is because they were created independently. The above operations are defined because there is a canonical way to coerce f into M using its q-expansion.

> f in M;
false
> AmbientSpace(Parent(f)) eq M;
false


 [Next][Prev] [Right] [Left] [Up] [Index] [Root]