> < ^ Date: Thu, 17 Jun 1999 10:12:41 +0200 (CEST)
> < ^ From: Thomas Breuer <Thomas.Breuer@Math.RWTH-Aachen.DE >
> < ^ Subject: Re: About Semidirects products

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


> < [top]