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.
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.
The space M_k(Gamma_0(N), Z) of weight k modular forms on Gamma_0(N) over Z.
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.
This is the same as ModularForms(G,2) (see below).
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.
> 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)); 6Next 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.
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.
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.
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)
> 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)
The ith basis vector of M.
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).
The modular form associated to the elliptic curve E over Q. (See Section Elliptic Curves.)
> 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