In GAP, finitely presented groups are distinguished from group presentations which are GAP objects of their own and which are stored in presentation records. The reason is that very often presentations have to be changed (e.g. simplified) by Tietze transformations, but since in these new generators and relators are introduced, all words in the generators of a finitely presented group would also have to be changed if such a Tietze transformation were applied to the presentation of a finitely presented group. Therefore, in GAP the presentation defining a finitely presented group is never changed; changes are only allowed for group presentations which are not considered to define a particular group.
GAP offers a bundle of commands to perform Tietze transformations on Tietze Transformations). In order to speed up the respective routines, the relators in such a presentation record are not represented by ordinary (abstract) GAP words, but by lists of positive or negative generator numbers which we call Tietze words. indexTietze word
The term ``Tietze record'' will sometimes be used as an alias for ``presentation record''. It occurs, in particular, in certain error messages. indexTietze record
The following two commands can be used to create a presentation record from a finitely presented group or, vice versa, to create a finitely presented group from a presentation.
PresentationFpGroup( G )
PresentationFpGroup( G, printlevel )
PresentationFpGroup
returns a presentation record containing a copy of
the presentation of the given finitely presented group G on the same
set of generators.
The optional printlevel parameter can be used to restrict or to extend the amount of output provided by Tietze transformation commands when being applied to the created presentation record. The default value 1 is designed for interactive use and implies explicit messages to be displayed by most of these commands. A printlevel value of 0 will suppress these messages, whereas a printlevel value of 2 will enforce some additional output.
FpGroupPresentation( P )
FpGroupPresentation
returns a finitely presented group defined by the
presentation in the given presentation record P.
If some presentation record P, say, contains a large presentation, then
it would be nasty to wait for the end of an unintentionally started
printout of all of its components (or, more precisely, of its component
P.tietze
which contains the essential lists). Therefore, whenever
you use the standard print facilities to display a presentation record,
GAP will provide just one line of text containing the number of
generators, the number of relators, and the total length of all relators.
Of course, you may use the RecFields
and PrintRec
commands to display
all components of P.
In addition, you may use the following commands to extract and print different amounts of information from a presentation record.
TzPrintStatus( P )
TzPrintStatus
prints the current state of a presentation record P,
i.e., the number of generators, the number of relators, and the total
length of all relators.
If you are working interactively, you can get the same information by
just typing P;
TzPrintGenerators( P )
TzPrintGenerators( P, list )
TzPrintGenerators
prints the current list of generators of a
presentation record P, providing for each generator its name, the total
number of its occurrences in the relators, and, if that generator is
known to be an involution, an appropriate message.
If a list list has been specified as second argument, then it is expected to be a list of the position numbers of the generators to be printed. list need not be sorted and may contain duplicate elements. The generators are printed in the order in which and as often as their numbers occur in list. Position numbers out of range (with respect to the list of generators) will be ignored.
TzPrintRelators( P )
TzPrintRelators( P, list )
TzPrintRelators
prints the current list of relators of a presentation
record P.
If a list list has been specified as second argument, then it is expected to be a list of the position numbers of the relators to be printed. list need not be sorted and may contain duplicate elements. The relators are printed as Tietze words in the order in which (and as often as) their numbers occur in list. Position numbers out of range (with respect to the list of relators) will be ignored.
TzPrintPresentation( P )
TzPrintPresentation
prints the current lists of generators and relators
and the current state of a presentation record P. In fact, the command
TzPrintPresentation( P )
is an abbreviation of the command sequence
Print( "generators:\n" ); TzPrintGenerators( P ); Print( "relators:\n" ); TzPrintRelators( P ); TzPrintStatus( P );
TzPrint( P )
TzPrint( P, list )
TzPrint
provides a kind of fast print out for a presentation record
P.
Remember that in order to speed up the Tietze transformation routines,
each relator in a presentation record P is internally represented by a
list of positive or negative generator numbers, i.e., each factor of the
proper GAP word is represented by the position number of the
corresponding generator with respect to the current list of generators,
or by the respective negative number, if the factor is the inverse of a
generator which is not known to be an involution. In contrast to the
commands TzPrintRelators
and TzPrintPresentation
described above,
TzPrint
does not convert these lists back to the corresponding GAP
words.
TzPrint
prints the current list of generators, and then for each
relator its length and its internal representation as a list of positive
or negative generator numbers.
If a list list has been specified as second argument, then it is expected to be a list of the position numbers of the relators to be printed. list need not be sorted and may contain duplicate elements. The relators are printed in the order in which and as often as their numbers occur in list. Position numbers out of range (with respect to the list of relators) will be ignored.
There are four more print commands for presentation records which are convenient in the context of the interactive Tietze transformation commands:
TzPrintGeneratorImages( P )
TzPrintLengths( P )
TzPrintPairs( P )
TzPrintPairs( P, n )
TzPrintOptions( P )
Moreover, there are two functions which allow to convert abstract words to Tietze words or Tietze words to abstract words.
TietzeWordAbstractWord( word, generators )
Let generators be a list of abstract generators and word an abstract
word in these generators. The function TietzeWordAbstractWord
returns
the corresponding (reduced) Tietze word.
gap> F := FreeGroup( "a", "b", "c" ); Group( a, b, c ) gap> tzword := TietzeWordAbstractWord( > Comm(F.1,F.2) * (F.3^2 * F.2)^-1, F.generators ); [ -1, -2, 1, -3, -3 ]
AbstractWordTietzeWord( word, generators )
Let generators be a list of abstract generators and word a Tietze
word in these generators. The function AbstractWordTietzeWord
returns
the corresponding abstract word.
gap> AbstractWordTietzeWord( tzword, F.generators ); a^-1*b^-1*a*c^-2
Save( file, P, name )
The function Save
allows to save a presentation and to recover it in a
later GAP session.
Let P be a presentation, and let file and name be strings denoting
a file name and a variable name, respectively. The function Save
generates a new file file and writes P and name to that file in
such a way that a copy of P can be reestablished by just reading the
file with the function Read
. This copy of P will be assigned to a
variable called name.
Warning: It is not guaranteed that the functions Save
and Read
work properly if the presentation record P contains additional, user
defined components. For instance, components involving abstract words
cannot be read in again as soon as the associated generators are not
available any more.
Example.
gap> F2 := FreeGroup( "a", "b" );; gap> G := F2 / [ F2.1^2, F2.2^7, Comm(F2.1,F2.1^F2.2), > Comm(F2.1,F2.1^(F2.2^2))*(F2.1^F2.2)^-1 ]; Group( a, b ) gap> a := G.1;; b := G.2;; gap> P := PresentationFpGroup( G ); << presentation with 2 gens and 4 rels of total length 30 >> gap> TzPrintGenerators( P ); #I 1. a 11 occurrences involution #I 2. b 19 occurrences gap> TzPrintRelators( P ); #I 1. a^2 #I 2. b^7 #I 3. a*b^-1*a*b*a*b^-1*a*b #I 4. a*b^-2*a*b^2*a*b^-2*a*b*a*b gap> TzPrint( P ); #I generators: [ a, b ] #I relators: #I 1. 2 [ 1, 1 ] #I 2. 7 [ 2, 2, 2, 2, 2, 2, 2 ] #I 3. 8 [ 1, -2, 1, 2, 1, -2, 1, 2 ] #I 4. 13 [ 1, -2, -2, 1, 2, 2, 1, -2, -2, 1, 2, 1, 2 ] gap> TzPrintStatus( P ); #I there are 2 generators and 4 relators of total length 30 gap> Save( "checkpoint", P, "P0" ); gap> Read( "checkpoint" ); #I presentation record P0 read from file gap> P0; << presentation with 2 gens and 4 rels of total length 30 >>
GAP 3.4.4