[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