> < ^ Date: Mon, 28 Oct 1996 08:49:05 +0100
> < ^ From: Alexander Hulpke <hulpke@math.colostate.edu >
< ^ Subject: Re: PermGroup

Dear GAP-Forum,

> I was trying to turn the following group into a permutation group:
> gap> f := FreeGroup(4);;
> gap> r := [ f.1^2, f.2^2,
[...]
> gap> g := f/r;;
> gap> PermGroup(g);
> Error, List Element: <list>[1025] must have a value at
[...]
> WHY DOES THIS HAPPEN ?

The function that gets invoked by 'PermGroup' is the standard routine to
convert a group to a permutation group. It simply takes the right regular
representation. To get this representation, elements have to be compared.

This is impossible in general for finitely presented groups, as elements are
only given by representatives in the free group. The comparison will always
take place in the free group, it will yield 'true' only, if the
representatives in the free group for both elements are actually the same.
See the chapter on 'Finitely Presented Groups' for a more elaborate
explanation of the problems arising in this context.

In the case of the 'PermGroup' routine, products are formed by
multiplication which seem not to lie in the group (as the representative of
the product in the free group might differ from the elements
given in the list of element representatives).
Obviously the routine cannot cope with such cases.

As a coset enumeration has already taken place to obtain a list of elements,
one should use the result of this coset enumerations to get a permutation
representation.

You might be interested how to achieve this in GAP:
Specify a subgroup for coset enumeration (if you want to
ensure that the representation is faithful you might take the trivial
subgroup) and use the command 'OperationCosetsFpGroup' to get the
permutation representation on the cosets. The manual will tell you more.

If you don't care about the degree of the representations involved and if
you insist on using 'PermGroup' for conversion, you have to install a
function like the following one (which ought to become a standard function
in the next version) before calling 'PermGroup'.

Note, however, that there is no advantage over the method outlined above
in using this function, it just calls 'OperationCosetsFpGroups' to get the
action on the cosets of the trivial subgroup.

FpGroupOps.PermGroup:=function(G)
local P;
P:=OperationCosetsFpGroup(G,TrivialSubgroup(G));
P.bijection:=InverseMapping(OperationHomomorphism(G,P));
return P;
end;

Best,

Alexander Hulpke

> < [top]