Re: Re: Nested Commutators
- To: mathgroup at smc.vnet.net
- Subject: [mg58172] Re: [mg58149] Re: Nested Commutators
- From: Andrzej Kozlowski <andrzej at akikoz.net>
- Date: Tue, 21 Jun 2005 06:02:45 -0400 (EDT)
- References: <200506181008.GAA08906@smc.vnet.net><d938pg$80n$1@smc.vnet.net> <200506200921.FAA26300@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 20 Jun 2005, at 18:21, Shug Boabby wrote:
> thanks andrzej, this does seem helpful... i have bookmarked it and am
> reading it now. am i to understand that i should be using **
> instead of
> . to do the noncommutative multiplication?
>
> could you please give me a demo of your functions for the above
> algebra
> and also showing the simplification of undefined nested commutators.
> the simplification of nested commutators using the jacobi
> identities is
> quite important.
>
>
First note that I use the fucntion name Bracket[X,Y] where others use
Commutator[X,Y] or Comm[X,Y] etc. I am used to thinking of the Lie
algebra operation as the Bracket (corresponding to Times) while the
result of the operation is a commutator (corresponding to product).
For your algebra the definitions:
Bracket[A, B] = B;
Bracket[A, C] = C;
Bracket[B, C] = D;
Bracket[_, _] = 0;
immediately give:
Bracket[A,Bracket[A,Bracket[A,B]]]
B
=
Bracket[A,Bracket[B,C]]
0
As for using the Jacobi identities for undefined nested commutator:
the functions I wrote for Melih do not do that as they were intended
for a different purpose, namely computing Casimir matrices for Lie
algebra defined by specifying the action of the bracket on
generators. One possible way to change this is would be to define the
Bracket in the "undefined" cases by means of NonCommuativeMultiply:
Bracket[X_, Y_] := X ** Y - Y ** X;
But doing this with my will cause an infinite loop because they are
written so as to try convert Y**X to X**Y-Bracket[X,Y]. But you coudl
try usign just these definitions:
Bracket[0, X_] := 0
Bracket[X_Plus, Y_] := Block[{Bracket}, Distribute[Bracket[X, Y]]];
Bracket[X_, Y_Plus] := Block[{Bracket}, Distribute[Bracket[X, Y]]];
Bracket[a_?NumericQ*X_, Z_] := a*Bracket[X, Z];
Bracket[Z_, a_?NumericQ*X_] := a*Bracket[Z, X];
Bracket[X_Symbol, Y_Symbol] /;
Not[OrderedQ[{X, Y}]] := -Bracket[Apply[Sequence, Sort[{X, Y}]]];
Bracket[X_, X_] = 0;
Bracket[Z_Symbol, X_ ** Y_] := X ** Bracket[Z, Y] + Bracket[Z, X] ** Y;
Unprotect[NonCommutativeMultiply];
x_ ** (a_?NumericQ*y_) := a*(x ** y);
(a_?NumericQ*x_) ** y_ := a*(x ** y);
NonCommutativeMultiply[X_Plus, Y_] :=
Block[{NonCommutativeMultiply},
Distribute[NonCommutativeMultiply[X, Y]]];
NonCommutativeMultiply[X_, Y_Plus] :=
Block[{NonCommutativeMultiply},
Distribute[NonCommutativeMultiply[X, Y]]];
0 ** X_ = 0;
X_ ** 0 = 0;
Protect[NonCommutativeMultiply];
Now defining:
Bracket[A, B] = B;
Bracket[A, C] = C;
Bracket[B, C] = D;
Bracket[A, D] = 0;
Bracket[B, D] = 0;
Bracket[C, D] = 0
Bracket[X_, Y_] := X ** Y - Y ** X;
will give
Bracket[A,Bracket[A,Bracket[A,B]]]
B
Bracket[A,Bracket[B,C]]
0
But also:
Bracket[Bracket[X,Y],Z]+Bracket[Bracket[Y,Z],X]+Bracket[Bracket[Z,X],Y]
0
Of course this may not be what you want because other expressions in
terms of undefined brackets will now all be converted to expression
in terms of NonCommutativeMultiply. However, the basic idea is quite
flexible and can be adapted to many purposes and probably also to yours.
I hope you will find this of some help.
Andrzej Kozlowski
Chiba, Japan
- References:
- Nested Commutators
- From: "Shug Boabby" <Shug.Boabby@gmail.com>
- Re: Nested Commutators
- From: "Shug Boabby" <Shug.Boabby@gmail.com>
- Nested Commutators