# Database of Finite Symplectic Matrix Groups

Magma includes a database of the maximal finite irreducible subgroups of ${\operatorname{Sp}}_{2n}({\mathbb{Q}})$ for $1\le i \le 11$ up to conjugacy in ${\operatorname{GL}}_{2n}({\mathbb{Q}})$. This collection is due to Markus Kirschmer [[Kirschmer, 2009](../../references.md#cite-kirschmer-symplectic)]. This section defines the interface to that database.

To avoid non-integral entries, the stored matrix groups do not fix the standard skewsymmetric form but some other nondegenerate skewsymmetric form. The example below illustrates how to construct a conjugate matrix group which fixes the standard skewsymmetric form.

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 with a pair of forms. If accessed as a matrix group, the order and base are set on return.

## `SymplecticMatrixGroupDatabase() -> 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 a sequence $S$ of two integral forms such that the automorphism group of $L$ with respect to $S$ equals `Group(DB, i)`. The first form in $S$ is the gram matrix of $L$ and the second form is skewsymmetric. The sequence $S$ is normalized as described in the appendix of [[Kirschmer, 2009](../../references.md#cite-kirschmer-symplectic)] to simplify the recognition of the matrix group.

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

Returns a string which describes the construction of the $i$-th entry of the database $D$.

## `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 a sequence $S$ of forms corresponding to the $i$-th entry of dimension $d$ in the database $D$.

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

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

## `Example: Symplectic (ex-c0dcaf)`

We illustrate accessing the symplectic matrix group database with a group of dimension 16.

```magma
> DB := SymplecticMatrixGroupDatabase();
> NumberOfGroups(DB, 16);
91
> G := Group(DB, 16, 1);
> G : Minimal;
MatrixGroup(16, Integer Ring) of order 2^21 * 3^4 * 5^2

```

The group G does not fix the standard skewsymmetic form. But it can be conjugated to do so.

```magma
> _, S := Lattice(DB, 16, 1);
> T := TransformForm(Matrix(Rationals(), S[2]), "symplectic");
> H := ChangeRing(G, Rationals())^(GL(16,Rationals()) ! T);
> J := SymplecticForm(16, Rationals());
> forall{h: h in Generators(H) | h * J * Transpose(h) eq J};
true

```
