Subspaces

The following functions compute the cuspidal, Eisenstein, and new subspaces.

ZeroSubspace(M): ModFrm -> ModFrm

The trivial subspace of the space of modular forms \(M\).

CuspidalSubspace(M): ModFrm -> ModFrm

The subspace of forms \(f\) in \(M\) such that the constant term of the Fourier expansion of \(f\) at every cusp is \(0\).

EisensteinSubspace(M): ModFrm -> ModFrm

The Eisenstein subspace of the space of modular forms \(M\).

EisensteinProjection(f): ModFrmElt -> ModFrmElt
CuspidalProjection(f): ModFrmElt -> ModFrmElt

The projection of a given modular form to the EisensteinSubspace or to the CuspidalSubspace. The sum of the two projections equals the original form (after coercion).

The base ring of the given form must contain the rationals.

NewSubspace(M): ModFrm -> ModFrm

The new subspace of the space of modular forms \(M\).

DihedralSubspace(M): ModFrm -> ModFrm

For a space \(M\) of weight \(1\) forms, this returns the subspace spanned by the cusp forms attached to dihedral Galois representations.

Example: q-Expansion Bases of Subspaces (ex-fd9fb5)

Run in calculator (opens in a new tab)

We compute a basis of \(q\)-expansions for each of the above subspace of \(M_2(\Gamma_0(33))\).

> M := ModularForms(Gamma0(33),2); M;
Space of modular forms on Gamma_0(33) of weight 2 and dimension 6 over
Integer Ring.
> Basis(M);
[
    1 + O(q^8),
    q - q^5 + 2*q^7 + O(q^8),
    q^2 + 2*q^7 + O(q^8),
    q^3 + O(q^8),
    q^4 + q^5 + O(q^8),
    q^6 + O(q^8)
]
> Basis(CuspidalSubspace(M));
[
    q - q^5 - 2*q^6 + 2*q^7 + O(q^8),
    q^2 - q^4 - q^5 - q^6 + 2*q^7 + O(q^8),
    q^3 - 2*q^6 + O(q^8)
]
> Basis(EisensteinSubspace(M));
[
    1 + O(q^8),
    q + 3*q^2 + 7*q^4 + 6*q^5 + 8*q^7 + O(q^8),
    q^3 + 3*q^6 + O(q^8)
]
> Basis(NewSubspace(M));
[
    q + q^2 - q^3 - q^4 - 2*q^5 - q^6 + 4*q^7 + O(q^8)
]
> Basis(NewSubspace(EisensteinSubspace(M)));
[]
> Basis(NewSubspace(CuspidalSubspace(M)));
[
    q + q^2 - q^3 - q^4 - 2*q^5 - q^6 + 4*q^7 + O(q^8)
]
> ZeroSubspace(M);
Space of modular forms on Gamma_0(33) of weight 2 and dimension 0 over
Integer Ring.
> MQ := BaseChange(M, Rationals()); SetPrecision(MQ, 20);
> b := Basis(MQ); b[5];
q^4 + q^5 + 2*q^8 - q^9 + 2*q^10 + 2*q^11 - q^12 + 2*q^13 +
 2*q^14 - q^15 + 3*q^16 + 2*q^17 - 2*q^18 + 2*q^19 + O(q^20)
> CuspidalProjection(b[5]);
-1/10*q - 3/10*q^2 + 1/10*q^3 + 3/10*q^4 + 2/5*q^5 + 3/10*q^6 - 4/5*q^7
+ 1/2*q^8 - 3/10*q^9 + 1/5*q^10 - 1/10*q^11 - 3/10*q^12 + 3/5*q^13 -
2/5*q^14 - 2/5*q^15 - 1/10*q^16 + 1/5*q^17 + 1/10*q^18 + O(q^20)
> EisensteinProjection(b[5]);
1/10*q + 3/10*q^2 - 1/10*q^3 + 7/10*q^4 + 3/5*q^5 - 3/10*q^6 + 4/5*q^7
+ 3/2*q^8 - 7/10*q^9 + 9/5*q^10 + 21/10*q^11 - 7/10*q^12 + 7/5*q^13 +
12/5*q^14 - 3/5*q^15 + 31/10*q^16 + 9/5*q^17 - 21/10*q^18 + 2*q^19 +
O(q^20)
> MQ! $1 + MQ! $2;  // Add the previous two answers, inside MQ
q^4 + q^5 + 2*q^8 - q^9 + 2*q^10 + 2*q^11 - q^12 + 2*q^13 +
 2*q^14 - q^15 + 3*q^16 + 2*q^17 - 2*q^18 + 2*q^19 + O(q^20)

The two projections sum to the original form.

Run in calculator (opens in a new tab)