# Eigenspace Decomposition and Eigenforms

## `Decomposition(M, B): ModFrmAlg, RngIntElt -> [ ModTupFld ], BoolElt`

## `Decomposition(M): ModFrmAlg -> [ ModTupFld ]`

```magma
UseLLL   : BoolElt                      Default: true
UseAuto  : BoolElt                      Default: true
LowMemory: BoolElt                      Default: false
ThetaPrec: RngIntElt                    Default: 25
Proof    : BoolElt                      Default: true
Force    : BoolElt                      Default: false
```

Given a space $M$ of algebraic modular forms, this decomposes $M$ into subspaces that are irreducible modules under the action of the Hecke operators $T_{P,k}$ with $\hbox{Nm}(P)^k \le B$. It will also return a boolean specifiying if all modules are proven to be irreducible. If $B$ is not specified and the characteristic of the coefficient ring is $0$, returns a complete decopmosition into irreducible modules. If $B$ is not specified and the characteristic is positive, decomposes according to the first few primes.

## `HeckeEigenforms(M): ModFrmAlg -> [ ModFrmAlgElt ]`

```magma
UseAuto  : BoolElt                      Default: true
LowMemory: BoolElt                      Default: false
ThetaPrec: RngIntElt                    Default: 25
```

This is a list containing a representative eigenform from each Galois orbit, equivalently an irreducible Hecke module. Parameters are as in `HeckeOperator`.

## `EisensteinSeries(M): ModFrmAlg -> [ ModFrmAlgElt ]`

The Eisenstein series of $M$ which are eigenforms for the Hecke algebra.

## `Eigenvectors(M, D): ModFrmAlg, [ ModTupFld ] -> List, BoolElt`

A list of vectors which are eigenvectors for the Hecke algebra of $M$, given the decomposition of $M$ as a sum of Hecke modules given by $D$. If they were all irreducible, the second return value is `true`.

## `HeckeEigenform(M, data): ModFrmAlg, Tup -> ModFrmAlgElt`

An eigenform $f$ of $M$ with the associated data, which is a tuple $(v, b, A, c)$, where $v$ is a vector in the undelrying vector space, which is an eigenvector for the Hecke algebra, $b$ is a boolean, set to `true` if $f$ is an eigenform, $A$ is a list of eigenvalues, given as a tuple $(k, p, a)$, where $k = (k_i)$, $p = (p_i)$ is an array such that $p_i$ is an array of generators for the corresponding ideals $P_i$, and $a = (a_{m,n})$ is an array such that $a_{m,n}$ is the eigenvalue for $T_{P_m, k_n}$.

## `HeckeEigenvalue(f, P): ModFrmAlgElt, RngOrdIdl -> FldElt`

## `HeckeEigenvalue(f, P): ModFrmAlgElt, RngInt -> FldElt`

## `HeckeEigenvalue(f, P): ModFrmAlgElt, RngIntElt -> FldElt`

```magma
k: RngIntElt                    Default: 1
```

The eigenvalue of the Hecke operator $T_{P,k}$ acting on the eigenform $f$ (which should be an algebraic modular form constructed using `HeckeEigenforms`).

## `HeckeEigenvalues(f, P): ModFrmAlgElt, RngOrdIdl -> [ FldElt ]`

## `HeckeEigenvalues(f, P): ModFrmAlgElt, RngInt -> [ FldElt ]`

## `HeckeEigenvalues(f, P): ModFrmAlgElt, RngIntElt -> [ FldElt ]`

The sequence of eigenvalues of eigenvalues for the Hecke operators $T_{P,k}$ acting on the eigenform $f$ for all $k$. (which should be an algebraic modular form constructed using `HeckeEigenforms`).

## `HeckeEigensystems(M, k): ModFrmAlg, RngIntElt -> List, [ RngOrdIdl ]`

## `HeckeEigensystems(M, k): ModFrmAlg, RngIntElt -> List, [ RngInt ]`

A list of pairs consisting of an eigenform and its eigenvalues for the operator $T_{P,k}$, one for each of the primes $P$ for which an eigenvalue has been computed, as well as a list of the associated prime ideals.

## `DisplayHeckeEigensystem(f): ModFrmAlgElt`

```magma
Precision: RngIntElt                    Default: 0
```

Displays a formatted list of Hecke eigenvalues of the eigenform $f$ with respect to the operators $T_{P,k}$ for all $P$ with ${\operatorname{N}}(P) \le n$ where $n$ is given by `Precision`. If `Precision` is $0$, displays all Hecke eigenvalues that have been computed so far. `Precision` can also be a sequence of prime ideals, and then the Hecke eigensystems displayed will be for these prime ideals.

## `HeckeEigensystem(f, k): ModFrmAlgElt, RngIntElt -> [ FldElt ], [ RngOrdIdl ]`

## `HeckeEigensystem(f, k): ModFrmAlgElt, RngIntElt -> [ FldElt ], [ RngInt ]`

## `HeckeEigensystem(f): ModFrmAlgElt -> [ FldElt ], [ RngOrdIdl ]`

## `HeckeEigensystem(f): ModFrmAlgElt -> [ FldElt ], [ RngInt ]`

```magma
Precision: RngIntElt                    Default: 0
UseAuto  : BoolElt                      Default: true
UseLLL   : BoolElt                      Default: true
LowMemory: BoolElt                      Default: false
ThetaPrec: RngIntElt                    Default: 25
```

Hecke eigenvalues of the eigenform $f$ with respect to the operators $T_{P,k}$ for all $P$ with ${\operatorname{N}}(P) \le n$ where $n$ is given by `Precision`, as well as the sequence of primes $P$. If `Precision` is $0$, displays all Hecke eigenvalues that have been computed so far. `Precision` can also be a sequence of prime ideals, and then the Hecke eigensystems displayed will be for these prime ideals. The other parameters are as in `HeckeOperator`.

## `LPolynomial(f, P, d): ModFrmAlgElt, RngOrdIdl, RngIntElt -> RngSerPowElt`

## `LPolynomial(f, P, d): ModFrmAlgElt, RngInt, RngIntElt -> RngSerPowElt`

## `LPolynomial(f, P, d): ModFrmAlgElt, RngIntElt, RngIntElt -> RngSerPowElt`

## `LPolynomial(f, P): ModFrmAlgElt, RngOrdIdl -> RngUPolElt`

## `LPolynomial(f, P): ModFrmAlgElt, RngInt -> RngUPolElt`

## `LPolynomial(f, P): ModFrmAlgElt, RngIntElt -> RngUPolElt`

```magma
UseAuto  : BoolElt                      Default: true
LowMemory: BoolElt                      Default: false
ThetaPrec: RngIntElt                    Default: 25
Satake   : = BoolElt                    Default: false
```

The $L$-polynomial of $f$ at the prime $P$ up to precision $x^d$. Currently only implemented for good primes. For orthogonal modular forms over quinary quadratic spaces, also implemented for bad primes. The parameters `UseAuto`, `LowMemory` and `ThetaPrec` are for computing the Hecke operators, as in `HeckeOperator`. If `Satake` is `true`, uses a general implementation of the Satake polynomial.

## `LPolynomials(f): ModFrmAlgElt -> [ RngUPolElt ]`

```magma
Precision: RngIntElt                    Default: 0
UseAuto  : BoolElt                      Default: true
LowMemory: BoolElt                      Default: false
ThetaPrec: RngIntElt                    Default: 25
```

The $L$-polynomials of $f$ at the primes $P$, such that ${\operatorname{N}}(P) \le n$, where $n$ is given by `Precision`. If `Precision` is $0$, returns those for which all the Hecke eigenvalues for $T_{P,k}$ have been computed. The parameters `UseAuto`, `LowMemory` and `ThetaPrec` are used as input for `HeckeOperator`.

## `SatakePolynomialUnramified(M): ModFrmAlg -> RngUPolElt`

```magma
Split: BoolElt                    Default: false
```

The generic Satake polynomial at an unramified good prime for $M$. `Split` determines whether this is a split or inert prime.

## `SatakePolynomial(f, p): ModFrmAlgElt, RngIntElt -> RngSerPowElt`

## `SatakePolynomial(f, p): ModFrmAlgElt, RngIntElt -> RngUPolElt`

```magma
d: RngIntElt                    Default: Infinity()
```

The Satake polynomial of $f$ at the (good) prime $p$, up to precision $d$.

## `SatakePolynomialBallot(r, a): RngIntElt, RngIntElt -> RngUPolElt`

The Satake polynomial of an orthogonal group with split rank $r$, and anisotropic rank $a$, using ballot sequences, based on [[Murphy, 1999](../../references.md#cite-murphy)].

## `Example: Eigenform Examples (ex-f209ed)`

We compute the eigenforms corresponding to the genus of ternary lattices of half-discriminant $11$, and find there are only two - an Eisenstein series and a cusp form, which comes from the elliptic cusp form of level $11$ over ${\mathbb{Q}}$.

```magma
> Q := Matrix([[2,0,1],[0,2,0],[1,0,6]]);
> M := OrthogonalModularForms(Q);
> Dimension(M);
2
> time fs := HeckeEigenforms(M);
Time: 0.010
> fs;
[
Eisenstein eigenform given in coordinates by
(1 1),
Cuspidal eigenform given in coordinates by
(   1 -2/3)
]

```

We look at the first few eigenvalues of the cuspidal eigenform.

```magma
> evs, Ps := HeckeEigensystem(fs[2], 1 : Precision := 100);
> evs;
[ -2, -1, 1, -2, 0, 4, -2, 0, -1, 0, 7, 3, -8, -6, 8, -6, 5, 12, -7, -3, 4, -10,
-6, 15, -7 ]

```

Happily, they agree with the eigenvalues of the elliptic cusp form of level $11$ over ${\mathbb{Q}}$:

```magma
> fQ := Newforms(CuspForms(11))[1][1];
> ps := [Norm(P) : P in Ps];
> assert &and[Coefficient(fQ,ps[i]) eq evs[i] : i in [1..#ps] | ps[i] ne 11];

```
