For an invariantly L-presented group G, our algorithm computes a nilpotent presentation for G/gammac+1(G) by computing a weighted nilpotent quotient system for G/G' and extending it inductively to a weighted nilpotent quotient system for G/gammac+1(G).
In the NQL package, a weighted nilpotent quotient system is a record containing the following entries:
FromTheLeftCollector
of the nilpotent quotient represented by this
quotient system.
Definitions
A weighted nilpotent quotient system of an invariantly L-presented group can be computed with the following functions.
InitQuotientSystem(
LpGroup ) O
computes a weighted nilpotent quotient system for the abelian quotient of the L-presented group LpGroup.
ExtendQuotientSystem(
QS ) F
extends the weighted nilpotent quotient system QS for a class-c quotient of an invariantly L-presented group to a weighted nilpotent quotient system of its class-c+1 quotient.
gap> G := ExamplesOfLPresentations( 1 ); <L-presented group on the generators [ a, b, c, d ]> gap> Q := InitQuotientSystem( G ); rec( Lpres := <L-presented group on the generators [ a, b, c, d ]>, Pccol := <<from the left collector with 3 generators>>, Imgs := [ 1, [ 2, 1, 3, 1 ], 2, 3 ], Epimorphism := [ a, b, c, d ] -> [ g1, g2*g3, g2, g3 ], Weights := [ 1, 1, 1 ], Definitions := [ 1, 3, 4 ] ) gap> ExtendQuotientSystem( Q ); rec( Lpres := <L-presented group on the generators [ a, b, c, d ]>, Pccol := <<from the left collector with 5 generators>>, Imgs := [ 1, [ 2, 1, 3, 1 ], 2, 3 ], Definitions := [ 1, 3, 4, [ 2, 1 ], [ 3, 1 ] ], Weights := [ 1, 1, 1, 2, 2 ], Epimorphism := [ a, b, c, d ] -> [ g1, g2*g3, g2, g3 ] )
To avoid repeated extensions of a weighted nilpotent quotient system the largest known quotient system is stored as an attribute of the invariantly L-presented group. For non-invariantly L-presented groups (or groups which are not known to be invariantly L-presented) the known epimorphisms onto the nilpotent quotients are stored as an attribute.
NilpotentQuotientSystem(
LpGroup ) A
stores the largest known weighted nilpotent quotient system of an invariantly L-presented group.
gap> G := ExamplesOfLPresentations( 1 );; gap> NilpotentQuotient( G, 5 ); Pcp-group with orders [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] gap> NilpotentQuotientSystem( G ); rec( Lpres := <L-presented group on the generators [ a, b, c, d ]>, Pccol := <<from the left collector with 10 generators>>, Imgs := [ 1, [ 2, 1, 3, 1 ], 2, 3 ], Definitions := [ 1, 3, 4, [ 2, 1 ], [ 3, 1 ], [ 4, 2 ], [ 4, 3 ], [ 7, 1 ], [ 8, 2 ], [ 8, 3 ] ], Weights := [ 1, 1, 1, 2, 2, 3, 3, 4, 5, 5 ], Epimorphism := [ a, b, c, d ] -> [ g1, g2*g3, g2, g3 ] ) gap> NilpotencyClassOfGroup( PcpGroupByCollectorNC( last.Pccol ) ); 5
NilpotentQuotients(
LpGroup ) A
stores all known epimorphisms onto the nilpotent quotients of LpGroup.
The nilpotent quotients are accessible by the operation Range
.
gap> G:=ExamplesOfLPresentations( 3 );; gap> HasIsInvariantLPresentation( G ); false gap> NilpotentQuotient( G, 3 ); Pcp-group with orders [ 0, 2, 2, 2 ] gap> NilpotentQuotients( G ); [ [ a, t, u ] -> [ g2, g1, g2 ], [ a, t, u ] -> [ g2, g1, g2 ], [ a, t, u ] -> [ g2, g1, g2 ] ] gap> Range( last[2] ); Pcp-group with orders [ 0, 2, 2 ]The underlying invariant L-presentation has stored its largest weighted nilpotent quotient system as an attribute.
gap> NilpotentQuotientSystem( UnderlyingInvariantLPresentation( G ) ); rec( Lpres := <L-presented group on the generators [ a, t, u ]>, Pccol := <<from the left collector with 9 generators>>, Imgs := [ 1, 2, 3 ], Definitions := [ 1, 2, 3, [ 2, 1 ], [ 3, 2 ], [ 4, 1 ], [ 4, 2 ], [ 5, 2 ], [ 5, 3 ] ], Weights := [ 1, 1, 1, 2, 2, 3, 3, 3, 3 ], Epimorphism := [ a, t, u ] -> [ g1, g2, g3 ] )
To get some information about the progress of the algorithm,
one can use the info class InfoNQL
.
InfoNQL
is the info class of the NQL-package. If the info-level is 1, the info-class gives further information on the progress of the nilpotent quotient algorithm for L-presented groups. The info-level 2 also includes some information on the runtime of our algorithm while the info-level 3 is mainly used for debugging-purposes. An example of such a session for the Grigorchuk group is shown below:
gap> SetInfoLevel( InfoNQL, 1 );; gap> G:=ExamplesOfLPresentations( 1 ); #I The Grigorchuk group on 4 generators <L-presented group on the generators [ a, b, c, d ]> gap> NilpotentQuotient( G, 3 ); #I Class 1: 3 generators with relative orders: [ 2, 2, 2 ] #I Class 2: 2 generators with relative orders: [ 2, 2 ] #I Class 3: 2 generators with relative orders: [ 2, 2 ] Pcp-group with orders [ 2, 2, 2, 2, 2, 2, 2 ] gap> SetInfoLevel( InfoNQL, 2 ); gap> NilpotentQuotient( G, 5 ); #I Time spent for spinning algo: 0:00:00.004 #I Class 4: 1 generators with relative orders: [ 2 ] #I Runtime for this step 0:00:00.028 #I Time spent for spinning algo: 0:00:00.008 #I Class 5: 2 generators with relative orders: [ 2, 2 ] #I Runtime for this step 0:00:00.036 Pcp-group with orders [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
InfoNQL_MAX_GENS
this global variable sets the limit of generators whose relative order
will be shown on each step of the nilpotent quotient algorithm, if the
info-level of InfoNQL
is positive.
NQL manual