I have created my groups in GAP using permutation groups, I have constructed the direct product, the automorphism group of $Z_2 \times Z_2$
Is there a reason why you're constructing them as permutation groups specifically? GAP allows you to construct these groups directly:
gap> C2 := CyclicGroup( 2 );;
gap> K := DirectProduct( C2, C2 );;
gap> Aut := AutomorphismGroup( K );;
now I am stuck on the homomorphism from $D_6$ onto the automorphism of $Z_2 \times Z_2$
Normally, you would use the GroupHomomorphismByImages
command. For example, the following gives a homomorphism from D6
onto Aut
.
gap> List(Aut);
[ [ f1, f2 ] -> [ f1, f2 ], [ f1, f2 ] -> [ f2, f1*f2 ], [ f1, f2 ] -> [ f1*f2, f1 ], [ f1, f2 ] -> [ f1, f1*f2 ],
[ f1, f2 ] -> [ f2, f1 ], [ f1, f2 ] -> [ f1*f2, f2 ] ]
gap> alpha := GroupHomomorphismByImages( D6, Aut, [ D6.1, D6.2*D6.3^2 ], [ List(Aut)[6], List(Aut)[2] ] );
[ f1, f2*f3^2 ] -> [ [ f1, f2 ] -> [ f1*f2, f2 ], [ f1, f2 ] -> [ f2, f1*f2 ] ]
Since you're working with (very) small groups, you could also use AllHomomorphisms
or AllHomomorphismClasses
to get all group homomorphisms from D6
to Aut
(in the latter case up to inner automorphisms), and then filter that list.
gap> Homs := AllHomomorphismClasses( D6, Aut );;
gap> Filt := Filtered( Homs, IsSurjective );
[ [ f1, f2*f3^2 ] -> [ [ f1, f2 ] -> [ f1*f2, f2 ], Pcgs([ f1, f2 ]) -> [ f2, f1*f2 ] ] ]
gap> alpha := Filt[1];;
Finally, you can construct your group using SemidirectProduct
:
gap> G := SemidirectProduct( D6, alpha, K );
<pc group of size 48 with 5 generators>
Note that if you're going to work with wallpaper groups, it may be worth checking out the crystcat
package for GAP. From your question, I'm guessing you are working with wallpaper groups where you "take the lattice group modulo 2", so to speak. You could use the crystcat
and polycyclic
packages to do this construction.
crystcat
allows you to access all crystallographic groups of dimensions 2, 3 and 4, using SpaceGroupIT
and SpaceGroupBBNWZ
. These are given as matrix groups, but we can convert them a polycyclic presentation using IsomorphismPcpGroup
:
gap> S := SpaceGroupIT( 2, 17 );;
gap> P := Image( IsomorphismPcpGroup( S ) );
Pcp-group with orders [ 2, 2, 3, 0, 0 ]
Then we quotient out most of the lattice group:
gap> F := FittingSubgroup( P );;
gap> N := Subgroup( P, [ F.1^2, F.2^2 ] );;
gap> H := FactorGroup( P, N );
Pcp-group with orders [ 2, 2, 3, 2, 2 ]
Finally, you can confirm G
and H
are indeed the same group by checking if there exists an isomorphism between them:
gap> IsomorphismGroups( G, H );
[ f1, f2, f3, f4, f5 ] -> [ g1*g2*g3*g4*g5, g2*g3^2*g5, g3*g4*g5, g5, g4*g5 ]
Note: if you do prefer to work with permutation groups, you could always use IsomorphismPermGroup
and SmallerDegreePermutationRepresentation
. The former gives an isomorphism to a subgroup of some symmetric group (in this case $S_{42}$), the latter gives an isomorphism to a subgroup of a symmetric group of lower degree (in this case $S_8$):
gap> iso1 := IsomorphismPermGroup( G );;
gap> iso2 := SmallerDegreePermutationRepresentation( Image( iso1 ) );;
gap> iso := iso1*iso2;
[ f1, f2, f3, f4, f5 ] -> [ (2,7)(3,8), (1,2,3,5,8,7)(4,6), (1,3,8)(2,5,7), (1,3)(2,6)(4,8)(5,7),
(1,4)(2,7)(3,8)(5,6) ]
In this case, we have that D6
and K
are the following subgroups:
gap> Image( Embedding( G, 1 )*iso );
Group([ (2,7)(3,8), (1,2,3,5,8,7)(4,6), (1,3,8)(2,5,7) ])
gap> Image( Embedding( G, 2 )*iso );
Group([ (1,3)(2,6)(4,8)(5,7), (1,4)(2,7)(3,8)(5,6) ])