# Perfect Forms and Normalizers

## `PerfectForms(G): GrpMat[RngInt] -> SeqEnum`

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

A positive definite symmetric $G$-invariant form $F$ is called $G$-perfect if for every nonzero symmetric $G$-invariant form $F'$ there exists some shortest vector $x$ of $F$ such that $F'x^{tr}x$ has nonzero trace.

The normalizer of the Bravais group of $G$ in ${\operatorname{GL}}_n({\mathbb{Z}})$ acts on the set of integral $G$-perfect forms whose entries have GCD $1$ and the number of orbits is finite. This function returns a sequence of representatives of these orbits.

If `Limit` is set to a positive integer $m$, then the algorithm stops after $m$ orbits have been enumerated.

## `NormalizerGLZ(G): GrpMat[RngInt] -> GrpMat[RngInt]`

## `CentralizerGLZ(G): GrpMat[RngInt] -> GrpMat[RngInt]`

```magma
IsBravais: BoolElt                    Default: false
```

Given a finite subgroup $G$ of ${\operatorname{GL}}_n({\mathbb{Z}})$, returns the normalizer or centralizer of $G$ in ${\operatorname{GL}}_n({\mathbb{Z}})$.

If $G$ is known to be equal to its Bravais group, one can set `IsBravais` to `true` to speed up the computation.

The algorithm employed is a variation of Opgenorth’s normalizer algorithm [[Opgenorth, 2001](../../references.md#cite-opgenorth)].
