> < ^ Date: Mon, 03 Mar 1997 13:44:31 +0100
> < ^ From: Derek Holt <dfh@maths.warwick.ac.uk >
> < ^ Subject: Re: GAP question

William Banks wrote:

I am trying to use GAP to study a certain finite (finitely presented)
group. To make the question simple, suppose I want to consider a
free group with 1 generator X and 1 relation: X*X = 1.

This group has two elements: IdWord & X .

Given an element, such as X*X*X*X*X*X*X, how can I make the GAP program
reveal to me which of two elements, IdWord or X, this is?

Thanks,
Bill

A (not completely satisfactory) solution to this problem has been posted by
Richard Rossmanith, which involves setting up a two-way homomorphism
between your group and an isomorphic regular permutation group.

There is an alternative solution, which does more or less exactly what you
want, but it involves using the external package "kbmag". So, you would
first need to get this package, compile it (it contains `C' source code)
and install it properly. It should work reasonably well if your group is
not too big.

Here is an example using a slightly less simple example than you did!

```gap> RequirePackage("kbmag");
gap> G:=FreeGroup("x","y");; x:=G.1;; y:=G.2;;
gap> G.relators:=[x^2,y^3,(x*y)^4];;
gap> R:=FpGroupToRWS(G);
#This builds a "rewriting system", which kbmag can works with
rec(
isRWS := true,
generatorOrder := [x,y,y^-1],
inverses := [x,y^-1,y],
ordering := "shortlex",
equations := [
[y^2,y^-1],
[x*y*x*y,y^-1*x*y^-1*x]
]
)
KB(R);  #This runs the external `C' programs to complete the rewriting system.
#System is confluent.
#Halting with 11 equations.
true
#Now you can do what you want.
gap> SizeRWS(R);
24
gap> EnumerateRWS(R,0,10);
[ IdWord, x, x*y, x*y*x, x*y*x*y, x*y*x*y^-1, x*y*x*y^-1*x, x*y*x*y^-1*x*y,
x*y^-1, x*y^-1*x, x*y^-1*x*y, x*y^-1*x*y*x, x*y^-1*x*y^-1, y, y*x, y*x*y,
y*x*y^-1, y*x*y^-1*x, y*x*y^-1*x*y, y^-1, y^-1*x, y^-1*x*y, y^-1*x*y*x,
y^-1*x*y^-1 ]
#This gives the complete list of reduced words for the group elements
#of lengths betwwen 0 and 4 (which gives the whole group here).
gap> ReduceWordRWS(R,y^5);
y^-1
gap> ReduceWordRWS(R,y^2*x*y*x*y^2*x*(y^-1)^2);
x*y^-1*x*y*x
```

There is a slightly confusing "feature" here. The generators of a rewriting
system are monoid generators of the group - in this case x, y and y^-1.
This means that (currently) you have to specify your word as a word in
these, and so you have to put (y^-1)^2 rather than y^-2. Sorry about that!

Derek Holt.

> < [top]