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).
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.
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
:true
.
If a permutation representation for a matrix group m is known it is stored in the following components.
permGroupP
:
permDomain
:gap3-jm