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).

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).

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.

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