# Semidirect product in GAP (Wallpaper groups)

I am fairly new to GAP and I am having difficulties using the semidirect product method. I am trying to use this as I am working with wallpaper groups. In my example, I am trying to figure out : $$D_6 \ltimes (Z_2 \times Z_2)$$ with $$D_6$$ the dihedral group of order 12 and $$Z_2$$ isomorphic to $$C_2$$, the cyclic group of order 2.

The semidirect product is defined by the group operation (Golubitsky, 1988): $$(\sigma_1, p_1)(\sigma_2, p_2) = (\sigma_1\sigma_2, \sigma_1p_2+p_1)$$.

With $$\sigma_1 \in D_6$$, $$\sigma_2 \in D_6$$ and $$(p_1, p_2) \in Z_2 \times Z_2$$.

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$$ but now I am stuck on the homomorphism from $$D6$$ onto the automorphism of $$Z_2 \times Z_2$$. I don't understand how to create it for in order to use it for the direct product.

I hope this is clear enough, please tell me if you need me to rephrase my question or if anything is missing.

Thank you so much for your time.

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), List(Aut) ] );
[ 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;;


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