In this section we will construct a matrix group of degree 2 over the
Gaussian rationals. Because the group of all invertible 2×2-matrices over this field is infinite, GAP cannot be sure from the
beginning that our group is finite, even though we know that it is the
quaternion group of order 8, hence finite. To investigate it, we will try
to construct a monomorphism of the matrix group into a permutation group,
which is much nicer to work with. The image of this nice monomorphism
is then isomorphic to our matrix group, and we can perform calculations
in the nice group and lift the results back to the matrix group with the
nice monomorphism. (The imaginary root of -1 is obtained as E(4), a
4th primitive complex root of unity.)
gap> i := E(4);; grp := Group([[i,0],[0,-i]],[[0,1],[-1,0]]);; gap> SetName( grp, "Q8" ); gap> orb := Union( Orbits( grp, [ [1,0], [0,1] ] ) ); [ [ -1, 0 ], [ 0, -1 ], [ 0, 1 ], [ 0, -E(4) ], [ 0, E(4) ], [ 1, 0 ], [ -E(4), 0 ], [ E(4), 0 ] ]The list
orb is the union of orbits under grp which contains a basis
for the two-dimensional row vector space over the rationals. Therefore
the action on orb is faithful on 8 points, and hence grp is finite.
We have made use here of the possibility to call Orbits with a list
that is not closed under the action: it will be replaced by the
closure on which the orbits are then determined (in our case, there is
only one orbit).
gap> hom := ActionHomomorphism( grp, orb );; IsInjective( hom ); true gap> p := Image( hom ); Group( [ (1,7,6,8)(2,5,3,4), (1,2,6,3)(4,8,5,7) ])To demonstrate the technique of nice monomorphisms, we compute the conjugacy classes of the permutation group and lift them back into the matrix group with the monomorphism
hom. Lifting back a conjugacy class
means finding the preimage of the representative and of the centralizer;
the latter is called StabilizerOfExternalSet in GAP (because
conjugacy classes are represented as external sets, see
Section Conjugacy Classes in the reference manual).
gap> pcls := ConjugacyClasses( p );; gcls := [ ];; gap> for pc in pcls do > gc:=ConjugacyClass(grp,PreImagesRepresentative(hom,Representative(pc))); > SetStabilizerOfExternalSet(gc,PreImage(hom, > StabilizerOfExternalSet(pc))); > Add( gcls, gc ); > od; gap> List( gcls, Size ); [ 1, 2, 2, 1, 2 ]All the steps we have made above are automatically performed by GAP if you simply ask for
ConjugacyClasses( grp ), provided that GAP
already knows that grp is finite, e.g., because you asked IsFinite(
grp ) before. The reason for this is that a finite matrix group like
grp is ``handled by a nice monomorphism''. For such groups, GAP uses
the command NiceMonomorphism to construct a monomorphism like hom and
then proceeds as we have done above.
gap> grp := Group([[i,0],[0,-i]],[[0,1],[-1,0]]);; gap> IsFinite( grp ); true gap> IsHandledByNiceMonomorphism( grp ); true gap> hom := NiceMonomorphism( grp ); <action homomorphism> gap> UnderlyingExternalSet( hom ); p := Image( hom ); <xset:[ [ -1, 0 ], [ 0, -1 ], [ 0, 1 ], [ 0, -E(4) ], [ 0, E(4) ], [ 1, 0 ], [ -E(4), 0 ], [ E(4), 0 ] ]> Group([ (1,7,6,8)(2,5,3,4), (1,2,6,3)(4,8,5,7) ]) gap> cc := ConjugacyClasses( grp );; ForAll(cc, x-> x in gcls); true gap> ForAll(gcls, x->x in cc); # cc and gcls are ordered differently true
Nice monomorphisms are not only used for matrix groups, but also for other kinds of groups in which one cannot calculate easily enough. As another example, let us show that the automorphism group of the quaternion group of order 8 is isomorphic to the symmetric group of degree 4 by examining the ``nice object'' associated with that automorphism group.
gap> aut := AutomorphismGroup( p );; NiceMonomorphism(aut);; gap> niceaut := NiceObject( aut ); Group([(1,4,2,3),(1,5,4)(2,6,3),(1,2)(3,4),(3,4)(5,6)]) gap> IsomorphismGroups( niceaut, SymmetricGroup( 4 ) ); [ (1,4,2,3), (1,5,4)(2,6,3), (1,2)(3,4), (3,4)(5,6) ]-> [ (1,4,2,3), (2,3,4), (1,2)(3,4), (1,4)(2,3) ]
The range of a nice monomorphism is in most cases a permutation group,
because nice monomorphisms are mostly action homomorphisms. In some
cases, like in our last example, the group is solvable and you might
prefer a pc group as nice object. You cannot change the nice monomorphism
of the automorphism group (because it is the value of the attribute
NiceMonomorphism), but you can compose it with an isomorphism from the
permutation group to a pc group to obtain your personal nicer
monomorphism. If you reconstruct the automorphism group, you can even
prescribe it this nicer monomorphism as its NiceMonomorphism, because a
newly-constructed group will not yet have a NiceMonomorphism set.
gap> nicer := NiceMonomorphism(aut) * IsomorphismPcGroup(niceaut);; gap> aut2 := GroupByGenerators( GeneratorsOfGroup( aut ) );; gap> SetIsHandledByNiceMonomorphism( aut2, true ); gap> SetNiceMonomorphism( aut2, nicer ); gap> NiceObject( aut2 ); Group([ f1*f2, f2^2*f3, f4, f3 ]) # a pc groupThe star
* denotes composition of mappings from the left to the right,
as we have seen in Section Actions of groups above.
Reconstructing the
automorphism group may of course result in the loss of other information
GAP had already gathered, besides the (not-so-)nice monomorphism.
[Top] [Previous] [Up] [Next] [Index]
GAP 4 manual