# 37 Matrix Groups

A matrix group is a group of invertable square matrices (see chapter Matrices). In GAP3 you can define matrix groups of matrices over each of the fields that GAP3 supports, i.e., the rationals, cyclotomic extensions of the rationals, and finite fields (see chapters Rationals, Cyclotomics, and Finite Fields).

You define a matrix group in GAP3 by calling `Group` (see Group) passing the generating matrices as arguments.

```    gap> m1 := [ [ Z(3)^0, Z(3)^0,   Z(3) ],
>            [   Z(3), 0*Z(3),   Z(3) ],
>            [ 0*Z(3),   Z(3), 0*Z(3) ] ];;
gap> m2 := [ [   Z(3),   Z(3), Z(3)^0 ],
>            [   Z(3), 0*Z(3),   Z(3) ],
>            [ Z(3)^0, 0*Z(3),   Z(3) ] ];;
gap> m := Group( m1, m2 );
Group( [ [ Z(3)^0, Z(3)^0, Z(3) ], [ Z(3), 0*Z(3), Z(3) ],
[ 0*Z(3), Z(3), 0*Z(3) ] ],
[ [ Z(3), Z(3), Z(3)^0 ], [ Z(3), 0*Z(3), Z(3) ],
[ Z(3)^0, 0*Z(3), Z(3) ] ] )```

However, currently GAP3 can only compute with finite matrix groups. Also computations with large matrix groups are not done very efficiently. We hope to improve this situation in the future, but currently you should be careful not to try too large matrix groups.

Because matrix groups are just a special case of domains all the set theoretic functions such as `Size` and `Intersection` are applicable to matrix groups (see chapter Domains and Set Functions for Matrix Groups).

Also matrix groups are of course groups, so all the group functions such as `Centralizer` and `DerivedSeries` are applicable to matrix groups (see chapter Groups and Group Functions for Matrix Groups).

## 37.1 Set Functions for Matrix Groups

As already mentioned in the introduction of this chapter matrix groups are domains. All set theoretic functions such as `Size` and `Intersections` are thus applicable to matrix groups. This section describes how these functions are implemented for matrix groups. Functions not mentioned here either inherit the default group methods described in Set Functions for Groups or the default method mentioned in the respective sections.

To compute with a matrix group m, GAP3 computes the operation of the matrix group on the underlying vector space (more precisely the union of the orbits of the parent of m on the standard basis vectors). Then it works with the thus defined permutation group p, which is of course isomorphic to m, and finally translates the results back into the matrix group.

`obj in m`

To test if an object obj lies in a matrix group m, GAP3 first tests whether obj is a invertable square matrix of the same dimensions as the matrices of m. If it is, GAP3 tests whether obj permutes the vectors in the union of the orbits of m on the standard basis vectors. If it does, GAP3 takes this permutation and tests whether it lies in p.

`Size( m )`

To compute the size of the matrix group m, GAP3 computes the size of the isomorphic permutation group p.

`Intersection( m1, m2 )`

To compute the intersection of two subgroups m1 and m2 with a common parent matrix group m, GAP3 intersects the images of the corresponding permutation subgroups p1 and p2 of p. Then it translates the generators of the intersection of the permutation subgroups back to matrices. The intersection of m1 and m2 is the subgroup of m generated by those matrices. If m1 and m2 do not have a common parent group, or if only one of them is a matrix group and the other is a set of matrices, the default method is used (see Intersection).

## 37.2 Group Functions for Matrix Groups

As already mentioned in the introduction of this chapter matrix groups are after all group. All group functions such as `Centralizer` and `DerivedSeries` are thus applicable to matrix groups. This section describes how these functions are implemented for matrix groups. Functions not mentioned here either inherit the default group methods described in the respective sections.

To compute with a matrix group m, GAP3 computes the operation of the matrix group on the underlying vector space (more precisely, if the vector space is small enough, it enumerates the space and acts on the whole space. Otherwise it takes the union of the orbits of the parent of m on the standard basis vectors). Then it works with the thus defined permutation group p, which is of course isomorphic to m, and finally translates the results back into the matrix group.

`Centralizer( m, u )`
`Normalizer( m, u )`
`SylowSubgroup( m, p )`
`ConjugacyClasses( m )`

This functions all work by solving the problem in the permutation group p and translating the result back.

`PermGroup( m )`

This function simply returns the permutation group defined above.

`Stabilizer( m, v )`

The stabilizer of a vector v that lies in the union of the orbits of the parent of m on the standard basis vectors is computed by finding the stabilizer of the corresponding point in the permutation group p and translating this back. Other stabilizers are computed with the default method (see Stabilizer).

`RepresentativeOperation( m, v1, v2 )`

If v1 and v2 are vectors that both lie in the union of the orbits of the parent group of m on the standard basis vectors, `RepresentativeOperation` finds a permutation in p that takes the point corresponding to v1 to the point corresponding to v2. If no such permutation exists, it returns `false`. Otherwise it translates the permutation back to a matrix.

`RepresentativeOperation( m, m1, m2 )`

If m1 and m2 are matrices in m, `RepresentativeOperation` finds a permutation in p that conjugates the permutation corresponding to m1 to the permutation corresponding to m2. If no such permutation exists, it returns `false`. Otherwise it translates the permutation back to a matrix.

## 37.3 Matrix Group Records

A group is represented by a record that contains information about the group. A matrix group record contains the following components in addition to those described in section Group Records.

`isMatGroup`:

always `true`.

If a permutation representation for a matrix group m is known it is stored in the following components.

`permGroupP`:

contains the permutation group representation of m.

`permDomain`:

contains the union of the orbits of the parent of m on the standard basis vectors.

gap3-jm
02 Dec 2021