If a permutation group has a stabilizer chain, this is stored as a
recursive structure. This structure is itself a record S and it has
(1) components that provide information about one level G(i) of the
stabilizer chain (which we call the ``current stabilizer'') and (2) a
component stabilizer that holds another such record, namely the
stabilizer chain of the next stabilizer G(i+1). This gives a
recursive structure where the ``outermost'' record representing the
``topmost'' stabilizer is bound to the group record component stabChain
and has the components explained below.
Note: Since the structure is recursive, never print a stabilizer chain!
(Unless you want to exercise the scrolling capabilities of your terminal.)
identity
labels identity, for reasons explained below under
translabels.
Note that GAP tries to arrange things so that the labels
components are identical (i.e., the same GAP object)
in every stabilizer of the chain;
thus the labels of a stabilizer do not necessarily all lie
in the this stabilizer (but see genlabels below).
genlabels labels component. The labels addressed in this way
form a generating set for the current stabilizer. If the
genlabels component is empty, the rest of the stabilizer chain
represents the trivial subgroup, and can be ignored, e.g., when
calculating the size.
generators labels{ genlabels }.
orbit
translabels labels{
genlabels }, starting from the base point.
The directed edge from the point i to the point j = i g
in the Schreier tree is represented by
labels[ translabels[j] ] = g in the stabilizer chain
(note that i can be reconstructed as jg-1
from this information).
The entries in the translabels component are thus just integers
giving the positions of the appropriate labels in the labels
component.
The base point itself (i.e., the root of the Schreier tree)
corresponds to the entry 1 in translabels.
This makes it possible to assign
transversal{ orbit } := labels{ translabels{ orbit } }
(see sublist!assignment in the Reference Manual
and transversal below).
The translabels component pays off handsomely in the stabilizer
chain conjugation (see Generalized Conjugation Technique
in ``Extending GAP'').
transversal transversal[j] = labels[ translabels[j] ]
(the base point itself has entry ()). To look up an entry in
this list is faster than to evaluate the expression on the right
hand side, and since this operation appears most often in
permutation group code (e.g., in the function
InverseRepresentative below), the speed-up is really worth this
extra record component.
stabilizer labels, identity, genlabels, generators,
orbit, translabels, transversal (and possibly
stabilizer). This record is bound to the stabilizer component
of the current stabilizer. The last member of a stabilizer chain
is recognized by the fact that it has no stabilizer component
bound.
stabilizer components.
gap> g:=Group((1,2,3,4),(1,2));;
gap> StabChain(g);
rec(
labels := [ (), (3,4), (2,4,3), (1,4)(2,3), (1,2)(3,4) ],
genlabels := [ 2, 3, 4, 5 ],
generators := [ (3,4), (2,4,3), (1,4)(2,3), (1,2)(3,4) ],
identity := (),
relativeOrders := [ 2, 3, 2, 2 ],
stabilizer := rec(
labels := [ (), (3,4), (2,4,3), (1,4)(2,3), (1,2)(3,4) ],
genlabels := [ 2, 3 ],
generators := [ (3,4), (2,4,3) ],
identity := (),
stabilizer := rec(
labels := [ (), (3,4), (2,4,3), (1,4)(2,3), (1,2)(3,4) ],
genlabels := [ 2 ],
generators := [ (3,4) ],
identity := (),
stabilizer := rec(
labels := [ (), (3,4), (2,4,3), (1,4)(2,3), (1,2)(3,4) ],
genlabels := [ ],
generators := [ ],
identity := () ),
orbit := [ 3, 4 ],
translabels := [ ,, 1, 2 ],
transversal := [ ,, (), (3,4) ] ),
orbit := [ 2, 3, 4 ],
translabels := [ , 1, 3, 3 ],
transversal := [ , (), (2,4,3), (2,4,3) ] ),
orbit := [ 1, 2, 4, 3 ],
translabels := [ 1, 5, 4, 4 ],
transversal := [ (), (1,2)(3,4), (1,4)(2,3), (1,4)(2,3) ])
gap> BaseOfGroup(g);
[ 1, 2, 3 ]
gap> StabChainOptions(g);
rec(
random := 1000 )
gap> DefaultStabChainOptions;
rec(
reduced := true,
random := 1000,
tryPcgs := true )
[Top] [Previous] [Up] [Next] [Index]
GAP 4 manual