FW: How to do Lie Algebras in Mathematica...
- To: mathgroup at smc.vnet.net
- Subject: [mg20789] FW: [mg20751] How to do Lie Algebras in Mathematica...
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Thu, 11 Nov 1999 00:22:56 -0500
- Sender: owner-wri-mathgroup at wolfram.com
I would like to add a few corrections and improvements to my Lie algebra code before. First, a bug correction. My previous code will not expand expressions of the form: Bracket[X,Y+Z] where only one of the arguments has the head Plus. This is easily fixed by replacing the line: Bracket[X_Plus, Y_Plus] := Block[{Bracket}, Distribute[Bracket[X, Y]]] by the following two: Bracket[X_Plus, Y_] := Block[{Bracket}, Distribute[Bracket[X, Y]]]; Bracket[X_, Y_Plus] := Block[{Bracket}, Distribute[Bracket[X, Y]]]; Secondly, for some purposes it may be better not to add the Jacobi-Identity. For example, we migh want to test if the bracket defined on the generators of a vector space satisifes the Jacobi identity. To do so we of course should not make the Jacobi identity into a rule for Bracket. Let's see ho wall this works in a simple case: In[1]:= 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_, y_] /; Sort[{x, y}] =!= {x, y} := -Bracket[Apply[Sequence, Sort[{x, y}]]]; Bracket[X_, X_] = 0; In[7]:= Bracket[e, h] = 2e; Bracket[f, h] = -2f; Bracket[e, f] = h; Next, we define scalars m,n,p,q,r,s,t,u,v to be Numeric: In[8]:= NumericQ[m] = True; NumericQ[n] = True; NumericQ[p] = True; NumericQ[q] = True; NumericQ[r] = True; NumericQ[s] = True; NumericQ[t] = True; NumericQ[u] = True; NumericQ[v] = True; We consider three general elements in the vector space generated by e,f,h: In[9]:= x = m*e + n*h + p*f; y = q*e + r*h + s*f; z = t*e + u*h + v*f; Now we can check if the Jacobi identity holds: In[10]:= Bracket[Bracket[x, y], z] + Bracket[Bracket[y, z], x] + Bracket[Bracket[z, x], y] Out[10]= 0 So the elements e,f,h with the Bracket defined as above do indeed generate a Lie algebra. -- Andrzej Kozlowski Toyama International University JAPAN http://sigma.tuins.ac.jp > From: Andrzej Kozlowski <andrzej at tuins.ac.jp> To: mathgroup at smc.vnet.net > Date: Thu, 11 Nov 1999 01:23:05 +0900 > To: <melih at ks.uiuc.edu>, <mathgroup at smc.vnet.net> > Subject: [mg20789] FW: [mg20751] How to do Lie Algebras in Mathematica... > > Here is one quick attempt. We simply define a Lie algebra axiomatically > using a bracket operation just as one would do in an introductory math > course on the subject: > > > First we want the bracket to be bi-linear: > > In[1]:= > Bracket[X_Plus, Y_Plus] := Block[{Bracket}, Distribute[Bracket[X, Y]]] > > In[2]:= > Bracket[a_?NumericQ*X_, Z_] := a*Bracket[X, Z] > > In[3]:= > Bracket[Z_, a_?NumericQ*X_] := a*Bracket[Z, X] > > > next anti-commutativity > > In[3]:= > Bracket[X_, X_] = 0; > > In[4]:= > Bracket[x_, y_] /; > Sort[{x, y}] =!= {x, y} := -Bracket[Apply[Sequence, Sort[{x, y}]]] > > Finally the Jacobi identity: > > > In[5]:= > Bracket /: > Bracket[Bracket[x_, y_], z_] + Bracket[Bracket[y_, z_], x_] + > Bracket[Bracket[z_, x_], y_] = 0; > > (This is not a minimal system of axioms but seems convenient in this case) > > Now we only need to define the Bracket on generators, e.g. > > In[6]:= > Bracket[e, h] = 2e; Bracket[f, h] = -2f; Bracket[e, f] = h; > > And we can now do Lie algebra computations like: > > In[7]:= > Bracket[3f + 2h, 5e - f + 11h] > Out[7]= > -20 e - 70 f - 15 h > > > -- > Andrzej Kozlowski > Toyama International University > JAPAN > http://sigma.tuins.ac.jp > > > > > >> From: Melih Sener <melih at ks.uiuc.edu> To: mathgroup at smc.vnet.net >> Organization: TBG/Beckman Institute >> Date: Wed, 10 Nov 1999 00:17:57 -0500 >> To: mathgroup at smc.vnet.net >> Subject: [mg20789] [mg20751] How to do Lie Algebras in Mathematica... >> >> >> Hi... >> >> Lets say I want to generate the Lie Algebra [of say su(3)] >> on Mathematica without going to explicitly >> constucting matrices for the generators... >> >> So I want Mathematica to "learn" relations like: >> >> [G_ij , G_kl] = (something)*G_mn >> >> and I want to define a "commutator product" [A , B] >> which is distributive, linear etc. >> >> So that I can produce expressions for things like >> [a*G_12+b*G_23, c*G_33+d*G_13] in an easy way... >> [ "Distribute" is useful... but I don't know how to >> make mathematica learn to factor coefficents of generators >> outside the commutator...] >> >> What is the best way to do this? >> >> Thanks, >> >> Melih >> > >