Tim Hsu writes:
I've been trying to set up a calculation using AugmentedCosetTableRrs.
Now, when you have the statementaug := AugmentedCosetTableRrs(G,ct,2,"_q");
(ct is the coset table for a subgroup S in G),
aug.primaryGeneratorWords contains descriptions of the primary
generators of S in terms of words in the generators of G. According
to the GAP manual, aug.tree, (in some form) contains a description of
the secondary generators of S in terms of the primary relators, so in
theory, you should be able to obtain the secondary generators of S in
terms of words in G. Could someone tell me how to get this from the
tree?
Whenever you call the command
aug := AugmentedCosetTableRrs( G, ct, 2, string );
it will return a record with a component "aug.tree" which is a list
of length 5. (Note that the structure represented by that list is not
a tree in mathematical sense; the name has historical reasons.) The
entries of this list are
tree[1] = tree1 (a list of length treelength),
tree[2] = tree2 (a list of length treelength),
tree[3] = treelength = total number of all generators,
tree[4] = numgens = number of primary generators,
tree[5] = type = 2.
The two lists "tree1" and "tree2" are in parallel to the list "gen",
say, of all generators which is ordered such that gen[1] to gen[numgens]
are the primary generators whereas gen[numgens+1] to gen[treelength]
are the secondary generators.
Each of the secondary generators has originally been defined as a
product of two preceding generators (with respect to that list) or
their inverses. The purpose of the tree is to save these definitions.
For numgens < i <= treelength, we have
gen[i] = factor(tree1[i]) * factor(tree2[i])
where
factor(j) = gen[j] for j > 0, factor(j) = gen[-j]^-1 for j < 0.
You may use the tree to recursively express each secondary generator
as a word in the preceding ones and finally in the primary generators,
but I would like to warn you of the fact that the length of these words
tends to become very huge so that they soon may get unhandable.
My next question is, do RewriteSubgroupRelators,
PresentationAugmentedCosetTable, TzGo, or FpGroupPresentation change
the ordering of the generators in any way, other than eliminating
generators? Thanks very much.
I think that none of these commands will reorder the list of subgroup
generators by swapping any pair of generators. This answer is to the
best of my recollection, but as it is long ago that I wrote the programs
I would not like to swear on it. If you want to be absolutely sure,
please check the code which for such purposes is given in full source.
Moreover, I would not like to guarantee this for all future. We may at
some time have reasons to change this. This is, in fact, the reason
why no guarantee of this kind has been made in the manual.
What frequently happens in the present program, is that the subgroup
generators are internally renumbered after elimination processes in order
to get rid of the gaps in the numbering. The names of the generators
are not changed by this process.
Example:
gap> F := FreeGroup( "a", "b" );; gap> a := F.1;; b := F.2;; gap> G := F / [ a^2, b^4, (a*b)^7, Comm(a,b)^5, (a*b*a*b^2*a*b^-1)^3 ];; gap> H := Subgroup ( G, [ G.1^G.2, G.2^(G.1*G.2^-1*G.1) ] );; gap> T := PresentationSubgroupRrs( G, H ); << presentation with 5 gens and 12 rels of total length 64 >> gap> TzPrintGenerators( T ); #I 1. _x1 11 occurrences involution #I 2. _x2 12 occurrences involution #I 3. _x3 16 occurrences involution #I 4. _x4 11 occurrences #I 5. _x5 14 occurrences involution gap> TzGo( T ); #I there are 3 generators and 8 relators of total length 94 gap> TzPrintGenerators( T ); #I 1. _x2 26 occurrences involution #I 2. _x4 43 occurrences #I 3. _x5 25 occurrences involution
If you have questions about still more technical details, please feel
free to ask, but perhaps we should then discuss this privately, not
in the forum.
Volkmar Felsch (Aachen)