[GAP Forum] Semidirect Products
Alexander Hulpke
hulpke at math.colostate.edu
Wed Jun 24 22:34:48 BST 2015
Dear Forum, Dear German Combariza,
> On Jun 24, 2015, at 6/24/15 11:06, German Combariza <gcombar at 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: hulpke at 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
Add(rels,MappedWord(i,FG,GI));
od;
for i in RelatorsOfFpGroup(N) do
Add(rels,MappedWord(i,FN,NI));
od;
for i in [1..Length(FG)] do
for j in [1..Length(FN)] do
Add(rels,NI[j]^GI[i]/(
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
More information about the Forum
mailing list