# Re: [GAP Forum] Semidirect Products

Dear Forum, Dear German Combariza,

> On Jun 24, 2015, at 6/24/15 11:06, German Combariza <gcom...@hotmail.com>
> wrote:
>
> Good day,
> I am trying to do a semidirect product of groups in GAP without any luck. I
> will appreciate if some body can show me a way to do it.
>
> The product is between the groups:
>
> G := CyclicGroup(4);
> N := FreeAbelianGroup(6);
>
> Via the homomorphism:
>
> hom := GroupHomomorphismByImages(N, N, [N.1, N.2,N.3,N.4,N.5,N.6], [N.1^-1,
> N.2^-1,N.4^-1,N.3,N.6^-1,N.5]);

First, the syntax actually requires a homomorphism from G into the group
containing hom:

gap> gen:=SmallGeneratingSet(G)[1];
f1
gap> Order(gen);
4
gap> auhom:=GroupHomomorphismByImages(G,Group(hom),[gen],[hom]);

[ f1 ] -> [ [ f1, f2, f3, f4, f5, f6 ] -> [ f1^-1, f2^-1, f4^-1, f3, f6^-1, f5
] ]

Then, GAP currently has no method for semidirect products with f.p. groups. The
appended code provides such a method such that the standard call:

gap> SemidirectProduct(G,auhom,N);
<fp group on the generators [ F1, F2, f1, f2, f3, f4, f5, f6 ]>

works.

Regards,

Alexander Hulpke

-- Colorado State University, Department of Mathematics,
Weber Building, 1874 Campus Delivery, Fort Collins, CO 80523-1874, USA
email: hul...@math.colostate.edu, Phone: ++1-970-4914288
http://www.math.colostate.edu/~hulpke

## code starts here

SemidirectFp:=function( G, aut, N )
local Go,No,giso,niso,FG,GP,FN,NP,F,GI,NI,rels,i,j,P;
Go:=G;
No:=N;
if not IsFpGroup(G) then
giso:=IsomorphismFpGroup(G);
else
giso:=IdentityMapping(G);
fi;
if not IsFpGroup(N) then
niso:=IsomorphismFpGroup(N);
else
niso:=IdentityMapping(N);
fi;
G:=Image(giso,G);
N:=Image(niso,N);

FG:=FreeGeneratorsOfFpGroup(G);
GP:=List(GeneratorsOfGroup(G),x->PreImagesRepresentative(giso,x));
FN:=FreeGeneratorsOfFpGroup(N);
NP:=List(GeneratorsOfGroup(N),x->PreImagesRepresentative(niso,x));

F:=FreeGroup(List(Concatenation(FG,FN),String));
GI:=GeneratorsOfGroup(F){[1..Length(FG)]};
NI:=GeneratorsOfGroup(F){[Length(FG)+1..Length(GeneratorsOfGroup(F))]};

rels:=[];
for i in RelatorsOfFpGroup(G) do
od;
for i in RelatorsOfFpGroup(N) do
od;
for i in [1..Length(FG)] do
for j in [1..Length(FN)] do

MappedWord(UnderlyingElement(Image(niso,Image(Image(aut,GP[i]),NP[j]))),FN,NI)
));
od;
od;
P:=F/rels;
GI:=GeneratorsOfGroup(P){[1..Length(FG)]};
NI:=GeneratorsOfGroup(P){[Length(FG)+1..Length(GeneratorsOfGroup(P))]};
# set the embeddings and projections
i:=rec(groups:=[Go,No],
embeddings:=[GroupHomomorphismByImagesNC(Go,P,GP,GI),
GroupHomomorphismByImagesNC(No,P,NP,NI)],
projections:=GroupHomomorphismByImagesNC(P,Go,
Concatenation(GI,NI),
Concatenation(GP,List(NI,x->One(Go))))  );
SetSemidirectProductInfo(P,i);
return P;
end;

InstallMethod( SemidirectProduct,"fp with group",true,
[ IsSubgroupFpGroup, IsGroupHomomorphism, IsGroup ], 0, SemidirectFp);

InstallMethod( SemidirectProduct,"group with fp",true,
[ IsGroup, IsGroupHomomorphism, IsSubgroupFpGroup ], 0, SemidirectFp);

## code ends here

_______________________________________________
Forum mailing list
Forum@mail.gap-system.org
http://mail.gap-system.org/mailman/listinfo/forum