> < ^ Date: Wed, 27 Apr 1994 21:09:00 +0000 (GMT)
> < ^ From: Chris Wensley <c.d.wensley@bangor.ac.uk >
^ Subject: Re: keeping track of the eliminations

Further to last week's messages, here is a brief report on my attempts
to edit the library file "fptietze.g" to keep track of eliminations.

Two new functions have been added:

TzInitRemember   adds extra components  T.genslist & T.remember
                 to the TietzeRecord.  They are initialised as
                 copies of  T.generators .
                 T.genslist  records all generators used: none deleted,
                 T.remember  records words used to eliminate generators.

TzRememberGen is called by the TzElim.. functions and replaces every
occurrence in T.remember of the generator being
eliminated by the corresponding word.

The following functions in fptietze.g have been modified as appropriate:

AddGenerator, TzNewGenerator, PresentationFpGroup,
TzEliminateGen, TzEliminateGen1, TzEliminateGens,
TzHandleLength1Or2Relators

I had to initialise the two new components within PresentationFpGroup
becuase this function calls TzHandleLength1Or2Relators while it is
creating the presentation. If I were using the PresentationSubgroup
function, then that would require modification as well.

The Log file listing below illustrates the results of these modifications
using a rather contrived example.
                                        Chris Wensley,  Bangor
==========================================================================

f := FreeGroup(6, "f");;
relQ := [ f.1^4, f.4^3, (f.1*f.4)^2, f.2^8,
          f.2*f.1*f.2, f.6*f.4*f.1, f.5*f.6*f.2, f.2*f.3*f.4 ];;
Q := f / relQ;;
P := PresentationFpGroup( Q,2 );
#I  there are 6 generators and 8 relators of total length 31
#> Initialising:  T.genslist = T.remember =
[ f.1, f.2, f.3, f.4, f.5, f.6 ]
gap> TzEliminate(P);
#I  eliminating f.5 = f.2^-1*f.6^-1
#I  there are 5 generators and 7 relators of total length 28
gap> P.remember;
[ f.1, f.2, f.3, f.4, f.2^-1*f.6^-1, f.6 ]
gap> TzEliminate(P);
#I  eliminating f.6 = f.1^-1*f.4^-1
#I  there are 4 generators and 6 relators of total length 25
gap> P.remember;
[ f.1, f.2, f.3, f.4, f.2^-1*f.4*f.1, f.1^-1*f.4^-1 ]
gap> TzGo(P);
#I  there are 4 generators and 6 relators of total length 21
#I  there are 4 generators and 5 relators of total length 17
#I  eliminating f.3 = f.2^-1*f.4^-1
#I  eliminating f.1 = f.2^-2
#I  there are 2 generators and 3 relators of total length 17
gap> P.remember;
[ f.2^-2, f.2, f.2^-1*f.4^-1, f.4, f.2^-1*f.4*f.2^-2, f.2^2*f.4^-1 ]
gap> TzPrintRelators(P);
#I  1. f.4^3
#I  2. f.2^-2*f.4*f.2^-2*f.4
#I  3. f.2^8
gap> TzSubstitute(P);
#I  substituting new generator _x7 defined by f.2*f.4^-1
#I  eliminating _x7 = f.2*f.4^-1
gap> TzSubstitute(P,1,2);
#I  substituting new generator _x8 defined by f.2*f.4^-1
#I  eliminating f.4 = _x8^-1*f.2
#I  there are 2 generators and 3 relators of total length 18
gap> P.genslist;
[ f.1, f.2, f.3, f.4, f.5, f.6, _x7, _x8 ]
gap> P.remember;
[ f.2^-2, f.2, f.2^-2*_x8, _x8^-1*f.2, f.2^-1*_x8^-1*f.2^-1, f.2*_x8, _x8,
  _x8 ]
gap> P.generators;
[ f.2, _x8 ]
gap> TzPrint(P);
#I  generators: [ f.2, _x8 ]
#I  relators:
#I  1.  4  [ -1, -2, -1, -2 ]
#I  2.  6  [ -2, 1, -2, 1, -2, 1 ]
#I  3.  8  [ 1, 1, 1, 1, 1, 1, 1, 1 ]
gap> quit;

> < [top]