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