# Other Functions for Nilpotent Matrix Groups

## `RecogniseAbelian(G): GrpMat -> GrpGPC, Map, Map`

Given a completely reducible abelian matrix group $G$ defined over $Q$ or a number field, return an isomorphic polycyclic copy $P$, a map from $G$ to $P$, and a map from $P$ to $G$. It uses an algorithm of Biasse and Fieker [[Biasse and Fieker, 2012](../../references.md#cite-fieker)] to work with irreducible abelian groups defined over number fields.

## `SylowSystem(G : parameters): GrpMat[FldFin] -> []`

```magma
Verify: BoolElt                    Default: false
```

Given a nilpotent matrix group $G$ over a finite field, this function constructs one Sylow $p$-subgroup for each prime $p$ dividing $|G|$ using the algorithm of [[Detinko and Flannery, 2006](../../references.md#cite-large)]. If the optional parameter `Verify` is set to `true`, then we first verify that $G$ is nilpotent.

The next two functions were developed and implemented by Tobias Rossmann.

## `IsIrreducibleFiniteNilpotent(G : parameters): GrpMat -> BoolElt, Any`

```magma
DecideOnly: BoolElt                    Default: false
Verify    : BoolElt                    Default: false
```

Let $G$ be a finite nilpotent matrix group over $K$, where $K$ is a number field or a rational function field over a number field. The function returns `true` if $G$ is irreducible or `false` and a proper submodule of `GModule(G)`. The construction of a submodule can be suppressed by setting `DecideOnly` to `true`. If the optional parameter `Verify` is set to `true`, then the function checks if $G$ is nilpotent and finite. The algorithm used for irreducibility testing is described in [Ros10a].

## `IsPrimitiveFiniteNilpotent(G : parameters): GrpMat -> BoolElt, Any`

```magma
DecideOnly: BoolElt                    Default: false
Verify    : BoolElt                    Default: false
```

Let $G$ be an irreducible finite nilpotent matrix group over $K$, where $K$ is a number field or a rational function field over a number field. The function returns `true` if $G$ is primitive, or `false` and a system of imprimitivity for $G$ given as a sequence of subspaces of `RSpace(G)`. The construction of a system of imprimitivity can be suppressed by setting `DecideOnly` to `true`. If the optional parameter `Verify` is set to `true`, then the function checks if $G$ is nilpotent and finite. The algorithm used for primitivity testing is described in [Ros10b].
