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>