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;