> < ^ Date: Fri, 04 Feb 1994 09:13:00 -0800
> < ^ From: John R. Neil <neil@alamo.mth.pdx.edu >
> < ^ Subject: Re: a question about fp groups

In message <9402011809.AA09333@medved.bowdoin.edu> you write:
>Dear Gap-forum,
>
>If I have a group with three generators
>
>gap> g := FreeGroup(3,"g");
>
>and the relations
>
>gap> g.relators := [g.1*g.2*g.3];
>
>and I simplify the presentation
>
>gap> h := SimplifiedFpGroup(g);
>
>then GAP tells me that there are two generators, and no relations.
>
>gap> h.generators;
>[ g.1, g.2 ]
>
>gap> h.relators;
>[ IdWord ]
>
>I have four questions:
> 1) How can I find an expression for the generator
> g.3 in terms of g.1 and g.2? (In practice, there might be 20 relators;
> this is just a simple example.)

The transformation which GAP has made in this case is the obvious one:

```g.1*g.2*g.3 = 1 => g.3 = (g.1*g.2)^-1
```

After it makes this assumption, it no longer needs either g.3 or the relator.
Thus, you have taken a 3 generator group with 1 relator and turned it into
the free group on 2 generators.

2) How can I tell if an expression is the identity? e.g. g.1*g.2*g.3
(Well, this is the word problem, so can I control the time
that GAP devotes to this question - i.e. if more than 30
seconds, then return "unknown".)

I think you made this problem much harder than it needed to be.

3) Similarly, can I ask for Size(g) to return "unknown" if it has
to spend more than 30 seconds on it (or perhaps 10M of memory

A free group is going to be of infinite order so you would expect the
error response you got in number 4 below.

4) I asked for the size of h, and got the following. Is this a bug
or a feature?

```gap> g := FreeGroup(3,"g");
Group( g.1, g.2, g.3 )

gap> g.relators := [g.1*g.2*g.3];
[ g.1*g.2*g.3 ]

gap> h := SimplifiedFpGroup(g);
Group( g.1, g.2 )
```

gap> Size(h);
Error, Subword: illegal <from> value at
while LengthWord( rel ^ Subword( rel, 1, 1 ) ) < LengthWord( rel ) ... in
RelatorRepresentatives( G.relators ) called from
RelsSortedByStartGen( G, table ) called from
AugmentedCosetTableMtc( G, H, 1, "_x" ) called from
D.operations.Size( D ) called from
Size( h ) called from
main loop
brk>

thanks, steve

```=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
John Neil                                        e-mail:  neil@math.mth.pdx.edu
Director of Computer Labs and UNIX System Administrator
Portland State University Mathematics Department
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
```

> < [top]