Dear GAP Forum,
Olivier Cormier asked
how to compute the semidirect product of G by H where G and H are any 2
groups, without knowing the action of G on H?
(My aim is to compute it when G is the extraspecial group of order 5^3
and exponent 5 and H is SL(2,5)).
Without specifying the action of G on H,
in general ``the'' semidirect product is not unique.
For example, one can always form the direct product.
In the example mentioned,
I suspect the desired action of G on H is the natural
symplectic one.
There are several ways to construct the group in question.
1. One can write down this action explicitly,
and use the `SemidirectProduct' function of GAP
for constructing the group.
(The computations with the elements of the group obtained this way
are very time-comsuming,
so this variant cannot really be recommended.)
2. An alternative is to use the library of perfect groups in GAP.
3. A third possibility is the construction of the semidirect
product as a group of 4 by 4 matrices over the field with
5 elements.
Here is GAP code for these three constructions.
ad 1.:
# Create the groups G and H. gap> g:= SP( 2, 5 ); SL(2,5) gap> e:= ExtraspecialGroup( 5^3, "+" ); Group( e1, e2, e3 ) # Interpret the generating matrices of G as automorphisms of H. gap> g.1; [ [ Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^3 ] ] gap> List( last, IntVecFFE ); [ [ 2, 0 ], [ 0, 3 ] ] ap> g.2; [ [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, 0*Z(5) ] ] gap> List( last, IntVecFFE ); [ [ 4, 1 ], [ 4, 0 ] ] gap> hom1:= GroupHomomorphismByImages( e, e, e.generators, > [ e.1^2, e.2^3, e.3 ] ); GroupHomomorphismByImages( Group( e1, e2, e3 ), Group( e1, e2, e3 ), [ e1, e2, e3 ], [ e1^2, e2^3, e3 ] ) gap> hom2:= GroupHomomorphismByImages( e, e, e.generators, > [ e.1^4*e.2^4, e.1, e.3 ] ); GroupHomomorphismByImages( Group( e1, e2, e3 ), Group( e1, e2, e3 ), [ e1, e2, e3 ], [ e1^4*e2^4, e1, e3 ] )# Check that we really constructed homomorphisms.
gap> IsMapping( hom1 );
true
gap> IsMapping( hom2 );
true# (Now we may use this action to construct the semidirect product
# explicitly.)
ad 2.:
# We are looking for perfect groups of order 5^3 |SL(2,5)|. gap> 5^3 * 120; 15000 gap> DisplayInformationPerfectGroups( 15000 ); #I Perfect group 15000.1: A5 2^1 x 5^3 #I centre = 2 size = 2^3*3*5^4 orbit sizes = 24 + 30 #I Holt-Plesken class 3 (3,1) #I Perfect group 15000.2: A5 2^1 x N 5^3 #I centre = 2 size = 2^3*3*5^4 orbit sizes = 24 + 30 #I Holt-Plesken class 3 (3,2) #I Perfect group 15000.3: A5 2^1 5^2 C 5^1 #I centre = 5 size = 2^3*3*5^4 orbit size = 125 #I Holt-Plesken class 3 (3,3)# This means that there are three perfect groups of order 15000,
# the first two with abelian normal subgroup of order 5^3,
# the third with an extraspecial normal subgroup of order 5^3.
# (So we see that the group in question is in fact uniqe
# up to isomorphism.)
# We can access the group as follows.
gap> g:= PerfectGroup( 15000, 3 );
PerfectGroup(15000,3)# Let us check that it is in fact a split extension. # This group is given via a finite presentation. # In this case, the normal subgroup of order 5^3 and a complement # can be read off easily. # (This is due to the way how the library was constructed.) gap> g.generators; [ a, b, y, z, d ] gap> g.relators; [ a^4, b^3, a*b*a*b*a*b*a*b*a*b, a^2*b^-1*a^2*b, y^5, z^5, d^5, y^-1*d^-1*y*d, z^-1*d^-1*z*d, y^-1*z^-1*y*z*d^-1, a^-1*y*a*z^-1*d^-2, a^-1*z*a*y, a^-1*d*a*d^-1, b^-1*y*b*z, b^-1*z*b*z*y^-1, b^-1*d*b*d^-1 ] gap> s:= Subgroup( g, [ g.1, g.2 ] );; gap> Size( s ); 120 gap> n:= Subgroup( g, [ g.3, g.4, g.5 ] );; gap> IsNormal( g, n ); true gap> Size( n ); 125 gap> IsAbelian( n ); false# For further computations, a permutation group might be better suited.
gap> pg:= PermGroup( g );
PermGroup(PerfectGroup(15000,3))
ad 3.:
# Embed SL(2,5) in SL(4,5) gap> g:= SL(2,5);; gap> mat1:= IdentityMat( 4, GF(5) );; gap> mat2:= IdentityMat( 4, GF(5) );; gap> mat1{ [ 2, 3 ] }{ [ 2, 3 ] }:= g.1;; gap> mat2{ [ 2, 3 ] }{ [ 2, 3 ] }:= g.2;; # Add a suitable element in the extraspecial group. gap> mat3:= IdentityMat( 4, GF(5) );; gap> mat3[2][1]:= Z(5)^0;; gap> mat3[4][3]:= Z(5)^0;; # Form the group gap> g:= Group( mat1, mat2, mat3 );; gap> Size( g ); 15000 # Check that everything worked. gap> n:= NormalClosure( g, Subgroup( g, [ mat3 ] ) );; gap> Size( n ); 125 gap> IsAbelian( n ); false gap> Exponent( n ); 5 gap> c:= Subgroup( g, [ mat1, mat2 ] );; gap> Size( Intersection( c, n ) ); 1# Again, for further computations,
# a permutation group may be more suitable.
gap> pg:= PermGroup( g );;