# Database of Integral Maximal Finite Matrix Groups

Magma includes a database of representatives of the ${\operatorname{GL}}(n, {\mathbb{Z}})$-conjugacy classes of irreducible maximal finite subgroups of ${\operatorname{GL}}(n, {\mathbb{Z}})$ for $n<=11$ and $n \in \{13,17,19,23\}$. This section defines the interface to that database.

For $n < 10$ the groups have been described in [[Plesken and Pohst, 1977](../../references.md#cite-pleskenpohst-glnz-i-ii), [Plesken and Pohst, 1980](../../references.md#cite-pleskenpohst-glnz-iii-v)]. The groups of dimension $10$ can be found in [[Souvignier, 1994](../../references.md#cite-souvignier-gl8z-gl10z)]. In the cases $n>10$ prime, the representatives have been constructed using the descriptions given in [[Plesken, 1985](../../references.md#cite-plesken-circulants)].

A particular entry of the database can be specified in one of two ways. Firstly, a number in the range 1 to the size of the database can be given. Alternatively, the desired dimension can be provided, together with a number in the range 1 to the number of entries of that dimension.

Each entry can be accessed either as a matrix group or as a lattice. If accessed as a matrix group, the order and base are set on return. If as a lattice, the automorphism group is set.

## `IntegralMatrixGroupDatabase() -> DB`

This function returns a database object which contains information about the database.

## `LargestDimension(D): DB -> RngIntElt`

Returns the largest dimension of any entry stored in the database. It is an error to refer to larger dimensions in the database.

## `# D: DB -> RngIntElt`

## `NumberOfGroups(D): DB -> RngIntElt`

## `NumberOfLattices(D): DB -> RngIntElt`

Returns the number of entries stored in the database.

## `NumberOfGroups(D, d): DB, RngIntElt -> RngIntElt`

## `NumberOfLattices(D, d): DB, RngIntElt -> RngIntElt`

Returns the number of entries stored in the database of dimension $d$.

## `Group(D, i): DB, RngIntElt -> GrpMat`

Returns the $i$-th entry from the database $D$ as a matrix group.

## `Lattice(D, i): DB, RngIntElt -> Lat, SeqEnum`

Returns a lattice $L$ and sequence of additional forms $F$ fixed by the $i$-th group in the database $D$.

## `Construction(D, i): DB, RngIntElt -> MonStgElt, SeqEnum`

Returns a string $S$ which describes the construction of the $i$-th group $G$ in the database $D$.

If the $G$-invariant lattice is well known, $S$ equals the name of this lattice. If the Degree $d$ of $G$ is a prime, $G$ usually can be chosen to fix the form $a_0 I_d + a_1 (z+z^{-1}) + ... + a_k (z^k+z^{-1})$ with $k = (d-1)/2$ and some $a_i \in {\mathbb{Z}}$ where $z$ denotes the permutation matrix of some $d$-cycle in ${\mathbb{Z}}^{d \times d}$ (see [[Plesken, 1985](../../references.md#cite-plesken-circulants)]). In this case, $S$ equals $[a_0, a_1, a_2, ...]$. In all other cases, $S$ describes the isomorphism type of $G$.

The second return value gives the numbers of all groups of degree $d$ in the `Rational Matrix Group Database` which contain a ${\operatorname{GL}}(d, {\mathbb{Q}})$-conjugate copy of $G$.

## `Group(D, d, i): DB, RngIntElt, RngIntElt -> GrpMat`

Returns the $i$-th entry of dimension $d$ in the database $D$ as a matrix group.

## `Lattice(D, d, i): DB, RngIntElt, RngIntElt -> Lat, SeqEnum`

Returns a lattice $L$ and sequence of additional forms $F$ fixed by the $i$-th group of dimension $d$ in the database $D$.

## `Construction(D, d, i): DB, RngIntElt, RngIntElt -> MonStgElt, SeqEnum`

Returns a string and integer which describe the construction of the $i$-th entry of dimension $d$ in the database $D$.

## `Example: Integral (ex-2e0f58)`

```magma
> D:= IntegralMatrixGroupDatabase();
> #D;
222
> G:= Group(D, 8, 7); Construction(D, 8, 7);
A8* [ 3 ]

```

So $G$ is the automorphism group of the dual of the root lattice $A_8$ and it is conjugate to a subgroup of the third entry of dimension $8$ in the `RationalMatrixgroupDatabase`. We find an explicit embedding $T$ of $G$ into that group.

```magma
> DQ:= RationalMatrixGroupDatabase();
> H:= Group(DQ, 8, 3); L:= Lattice(DQ, 8, 3);
> F:= PositiveDefiniteForm(G);
> for s in Sublattices(G) do
>   B:= BasisMatrix(s);
>   FF:= B * F * Transpose(B);
>   ok, T:= IsIsometric(LatticeWithGram(FF div GCD(Eltseq(FF))), L);
>   if ok then break; end if;
> end for;
> assert ok;
> T:= Matrix(Rationals(), T*B);
> [Matrix(Integers(), T*Matrix(G.i)*T^-1) in H : i in [1..Ngens(G)]];
[ true, true ]

```
