> < ^ Date: Mon, 15 Apr 2002 09:28:23 +0200
> < ^ From: Werner Nickel <nickel@mathematik.tu-darmstadt.de >
< ^ Subject: Re: Corrected Question

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

> < [top]