> < ^ Date: Wed, 28 Jul 1999 18:05:31 +0100 (BST)
> < ^ From: Alexander Hulpke <hulpke@math.colostate.edu >
< ^ Subject: Re: Representation Groups

Dear GAP-Forum,

Olivier Cormier asked:

> I'm interested in representation groups of a finite group G.
> Is there a function available in GAP which computes such groups?
There is no function available in GAP to compute a representation group.

If not, how can we compute them?

I append a GAP 4 version of a function originally written by Werner Nickel,
which can be used to compute one representation group.

> Moreover, if one representation group D of G is computed, is it possible
> to obtain all the non isomorphic representation groups of G from the
> knowledge of D?
To get all different such groups one would have to compute not one
complement but all. However as the essential part of the code below is not
mine, I'm not sure how to acchieve this.

I hope this is at least of some help,

Alexander Hulpke

##############################################################################
##
##  darstgr4.g                                                  Werner Nickel
##
##  This file contains a function for computing a finite presentation of a
##  representation group (Darstellungsgruppe) of a finitely presented group.
##  Adapted by ahulpke to GAP4, 26-jul-99.
##

##############################################################################
##
#O  DarstellungsgruppeEpimorphism(<G>)
##
##  returns an epimorphism <epi> from a group <D> onto <G>. The group <D> is
##  one (of possibly several) Darstellungsgruppe (or Schur cover) of <G>.
##  The group <D> can be obtained as the `Source' of <epi>.
DeclareOperation( "DarstellungsgruppeEpimorphism", [IsGroup] );

## Take a finite presentation F/R for a group G and compute a presentation
## of one of G's representation groups (Darstellungsgruppen, Schur covers).
## This is done by assembling a presentation for F/[R,F] and then finding a
## generating set for a complement C/[R,F] for the intersection of R and
## [F,F] in R/[R,F].
##
## No attempt is made to reduce the number of generators in the
## presentation. This can be done using the Tietze routines from the GAP
## library.
DarstellungsgruppeFP := function( G )
local g, i, m, n, r, D, I, M, M2,fgens,rels,gens,Drels;

fgens:=FreeGeneratorsOfFpGroup(G);
rels:=RelatorsOfFpGroup(G);
n := Length( fgens );
m := Length( rels );

D := FreeGroup( n+m );
gens:=GeneratorsOfGroup(D);
Drels := [];
for i in [1..m] do
  r := rels[i];
  Add(Drels, MappedWord( r, fgens, gens{[1..n]} ) / gens[n+i] );   
od;
for g in gens{[1..n]} do
  for r in gens{[n+1..n+m]} do
    Add( Drels, Comm( r, g ) );
  od;
od;

M := [];
for r in rels do
  Add( M, List( fgens, g->ExponentSumWord( r, g ) ) );
od;

M{[1..m]}{[n+1..n+m]} := IdentityMat(m);
M := HermiteNormalFormIntegerMat( M );
M:=Filtered(M,i->not IsZero(i));

r := 1; i := 1;
while r <= m and i <= n do
  while i <= n and M[r][i] = 0 do
    i := i+1;
  od;
  if i <= n then  r := r+1; fi;
od;
r := r-1;

if r > 0 then
  M2 := M{[1..r]}{[n+1..n+m]};
  M2 := HermiteNormalFormIntegerMat( M2 );
  M2:=Filtered(M2,i->not IsZero(i));
  for i in [1..Length(M2)] do
    Add(Drels,LinearCombinationPcgs(gens{[n+1..n+m]},M2[i]));
  od;
fi;
  # make the group
  D:=D/Drels;
  return D;
end;

InstallMethod(DarstellungsgruppeEpimorphism,"via fp group",true,[IsGroup],0,
function(G)
local iso,hom,F,D,p,gens,Fgens,Dgens;
iso:=IsomorphismFpGroup(G);
F:=ImagesSource(iso);
Fgens:=GeneratorsOfGroup(F);
D:=DarstellungsgruppeFP(F);
Dgens:=GeneratorsOfGroup(D);

# simplify the fp group
p:=PresentationFpGroup(D);
TzInitGeneratorImages(p);
TzOptions(p).printLevel:=0;
TzGoGo(p);
D:=FpGroupPresentation(p);
gens:=TzPreImagesNewGens(p);
Dgens:=List(gens,i->MappedWord(i,Dgens,
Concatenation(Fgens,List([1..(Length(Dgens)-Length(Fgens))],
j->One(F)))));

hom:=GroupHomomorphismByImagesNC(D,G,gens,
List(Dgens,i->PreImagesRepresentative(iso,i)));
Dgens:=TzImagesOldGens(p);
Dgens:=List(Dgens{[Length(Fgens)+1..Length(Dgens)]},
i->MappedWord(i,p!.generators,GeneratorsOfGroup(D)));
SetKernelOfMultiplicativeGeneralMapping(hom,SubgroupNC(D,Dgens));

  return hom; 
end);

#end


> < [top]