Dear GAP forum,
dear Dr Abdollahi,
in your query to the Gap Forum you ask for a GAP function which
expands the expression (x_1...x_n)^k into a product of left-normed
commutators. Currently there is not function in GAP 4 for that
purpose.
The classic result for expanding (x_1...x_n)^k into a product of
commutators is the Hall-Petrescu formula. One could write a simple
programme based on Phillip Hall's collection (collection to the left)
process to expand that expression. However, the commutators appearing
in collection to the left are not left-normed, for example,
[x_2,x_1,x_1,[x_2,x_1]] might appear.
There is a different approach along the following lines. Note that
this approach will give you the expansion of (x_1...x_n)^k modulo a
certain weight and the left-normed commutators will not involve
inverses of generators.
The Nilpotent Quotient Programme can compute a bases consisting of
left-normed commutators for the free nilpotent group of rank n and
class c for reasonable values of k and c. In that group it is
possible to calculate the normal form of (x_1...x_n)^k for any k and
read of the left-normed commutators in that normal form.
The following example uses the packages `polycyclic' and `nq' which
are available from the following web sites:
http://www.mathematik.tu-darmstadt.de/~nickel/polycyclic/
http://www.mathematik.tu-darmstadt.de/~nickel/nq.html
It also needs code to recover the definition of each generator in
terms of left-normed commutators which is also available from
http://www.mathematik.tu-darmstadt.de/~nickel/nq.html
For any any questions you are welcome to contact me.
gap> RequirePackage("nq"); true gap> Read("recoverdef.g"); gap> G := NilpotentQuotient( FreeGroup(3), 4 ); Pcp-group with orders [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] gap> w := (G.1*G.2*G.3)^2; g1^2*g2^2*g3^2*g4*g5*g6*g8*g10^3*g11*g12^-2*g14*g19^-2*g20^2*g21^2*g23^2*g 26^-6*g27^-6*g28^4*g30^5 gap> defs := RecoverDefinitions( Collector(G) ); [ ,,, [ 2, 1 ], [ 3, 1 ], [ 3, 2 ], [ 4, 1 ], [ 4, 2 ], [ 5, 1 ], [ 5, 2 ], [ 5, 3 ], [ 6, 1 ], [ 6, 2 ], [ 6, 3 ], [ 7, 1 ], [ 7, 2 ], [ 8, 2 ], [ 9, 1 ], [ 9, 2 ], [ 10, 1 ], [ 10, 2 ], [ 9, 3 ], [ 11, 2 ], [ 11, 3 ], [ 12, 1 ], [ 12, 2 ], [ 12, 3 ], [ 13, 1 ], [ 13, 2 ], [ 14, 1 ], [ 13, 3 ], [ 14, 3 ] ] gap> Exponents( w ); [ 2, 2, 2, 1, 1, 1, 0, 1, 0, 3, 1, -2, 0, 1, 0, 0, 0, 0, -2, 2, 2, 0, 2, 0, 0, -6, -6, 4, 0, 5, 0, 0 ] gap> Length( last ); 32 gap> List( [1..32], g->TraceBackDefinition( defs, g ) ); [ [ 1 ], [ 2 ], [ 3 ], [ 2, 1 ], [ 3, 1 ], [ 3, 2 ], [ 2, 1, 1 ], [ 2, 1, 2 ], [ 3, 1, 1 ], [ 3, 1, 2 ], [ 3, 1, 3 ], [ 3, 2, 1 ], [ 3, 2, 2 ], [ 3, 2, 3 ], [ 2, 1, 1, 1 ], [ 2, 1, 1, 2 ], [ 2, 1, 2, 2 ], [ 3, 1, 1, 1 ], [ 3, 1, 1, 2 ], [ 3, 1, 2, 1 ], [ 3, 1, 2, 2 ], [ 3, 1, 1, 3 ], [ 3, 1, 3, 2 ], [ 3, 1, 3, 3 ], [ 3, 2, 1, 1 ], [ 3, 2, 1, 2 ], [ 3, 2, 1, 3 ], [ 3, 2, 2, 1 ], [ 3, 2, 2, 2 ], [ 3, 2, 3, 1 ], [ 3, 2, 2, 3 ], [ 3, 2, 3, 3 ] ] gap>
Now the exponents of w correspond to the left-normed commutators, e.g., the commutator
[3,2,3,1] has the exponent 5.
I hope this is useful to you. If you have further questions, you are welcome to
contact me.
With kind regards,
Werner Nickel.
-- Dr (AUS) Werner Nickel Mathematics with Computer Science Room: S2 15/423 Fachbereich Mathematik, AG 2 Tel: +49 6151 163487 TU Darmstadt Fax: +49 6151 166535 Schlossgartenstr. 7 Email: nickel@mathematik.tu-darmstadt.de D-64289 Darmstadt --