23.8 Presentation Records

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 )

See Tietze Transformations.

TzPrintLengths( P )

See Tietze Transformations.

TzPrintPairs( P )
TzPrintPairs( P, n )

See Tietze Transformations.

TzPrintOptions( P )

See Tietze Transformations.

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 >> 

Previous Up Top Next
Index

GAP 3.4.4
April 1997