Leonard Soicher asked the following question.
I build up a (GAP) presentation P for a finitely presented group G,
by adding generators and relators as necessary to a presentation
which initially has no generators and no relators. While doing so
I store certain words (in a list w) in the generators of the
presentation P constructed so far. No generator of P is deleted
in the process of constructing P. When P is completely constructed,
G:=FpGroupPresentation(P). Now, my question is, how do I obtain the
natural G-images of the words in w?
Internally each presentation keeps a free group of countable infinite rank
and uses the first <n> free generators of this group as presentation
generators, the relators are represented as words in these generators.
`GeneratorsOfPresentation' will always return a list of the currently used
(i.e. the first <n>) generators of the presentation.
Words in these generators are just ordinary words, so one can use
`MappedWord' to map any word in these generators homomorphically into
another group by giving images of the free generators.
Here is an example.
(Probably such an example should be added to the GAP Reference Manual.)
gap> P:= PresentationFpGroup( FreeGroup( 0 ) ); <presentation with 0 gens and 0 rels of total length 0> gap> AddGenerator( P ); #I now the presentation has 1 generators, the new generator is _x1 gap> AddRelator( P, gens^2 ); gap> AddGenerator( P ); #I now the presentation has 2 generators, the new generator is _x2 gap> gens:= GeneratorsOfPresentation( P ); [ _x1, _x2 ] gap> word:= gens*gens; _x1*_x2 gap> AddRelator( P, gens^3 ); gap> AddRelator( P, ( gens * gens )^3 ); gap> g:= FpGroupPresentation( P ); <fp group on the generators [ _x1, _x2 ]> gap> img:= MappedWord( word, gens, GeneratorsOfGroup( g ) ); _x1*_x2 gap> ggens:= GeneratorsOfGroup( g ); [ _x1, _x2 ] gap> ggens = gens; false gap> img in g; true
Thomas Breuer and Alexander Hulpke