On Sun, 21 Nov 2010, Michel Talon wrote:
< Edwin Woollett wrote:
<
< > I view the jacobi identity as a way to re-express
< > a particular simplification. If different
< > simplification schemes reduce the starting
< > expression down to series to the
< > general form:
< >
< > expr1 = a1*comm(a,b)+a2*comm(b,c) +....
< > expr2 = b1*comm(a,b) + b2*comm(b,c) + ....
< >
< > then, if one asks whether the
< > results are equivalent, one should make use somehow
< > of the jacobi identity to try to work expr1 into
< > expr2, and if one cannot, then the results of the
< > simplification are not consisten.
< >
< >
< > ted
<
< In fact the computations you want to do are really computations in the
< enveloping algebra of a Lie algebra and express the commutator using
< structure constants of the Lie algebra.
<
< A basis of enveloping algebra is given by ordered monomials A_1^{n_1]
< A_2^{n_2}.... where A_1, A_2, ... is a basis of the Lie algebra with a
< chosen order. This is the Poincar? Birkhoff Witt theorem.
< To get any monomial in this form one
< has to commute disordered terms such as A_2 A_1 in the form
< A_1A_2+[A_2,A_1] and express the commutator using the structure constants.
<
< Of course if one goes this way, that is working in an algebra where
< [A,B]=AB-BA, then the Jacobi identity is a triviality which doesn't even
< need checking.
<
< As i said last time, if you are working in a particular representation of
< the Lie algebra and thus of the enveloping algebra, there are further
< relations. For example a nxn matrix necessarily obeys a degree n polynomial
< equation, the characteristic polynomial vanishes when plugging the matrix in
< it. More simply, the Pauli matrices are of square 1, the gamma matrices of
< square 1 or-1, and so on.
<
< Anyways these are the relations that have to be implemented in a rules based
< system for doing the computations you mentioned.
A while ago I wrote a Lie Algebra package for myself. I thought about
using rules, but opted against this for a number of reasons. I also
opted against using . and *, since they are overused, and I wanted to
use them as synonyms for 'tensor (product) and 'stensor (symmetric
tensor product) -- and who wants to see the expansion of an
anti-symmetric tensor in terms of . ?
A screen dump follows, but let me preface it with comments:
A few note-worthy features:
- the Lie algebra is defined in terms of generators and relations
- the relations can be passed as such, or as a function
- most 'classical' Lie algebras are already coded
- multiple Lie algebra can be instantiated at once, so one can
do thinks like define homomorphisms, etc.
- one can do computations with the induced representation on the
tensor algebra.
- calculations with Lax representations, hamiltonian systems on
the dual space, etc. are easy to implement.
A thought:
- to properly implement simplification (not expansion), one needs
a good way of doing this in a non-commutative, finitely-generated algebra.
I am entirely innocent of this type of thing.
Leo
Here's a screen-dump of a demo file:
(%i2) batch("lie-algebra.dem");
read and interpret file: /home/work/maxima/scripts/lie-algebra.dem
(%i3) load("lie-algebra.mac")
(%o3) "lie-algebra.mac"
(%i4) check_la_package()
so3 test: All tests passed.
Heisenberg test: All tests passed.
generators-relations test: All tests passed.
bsl(S,3) test: All tests passed.
(%o4) done
(%i5) "Create the Heisenberg Lie algebra:"
(%i6) tsl(Heisenberg,3)
(%i7) "The basis:"
(%i8) basis(Heisenberg)
(%o8) [e[2,1],e[3,1],e[3,2]]
(%i9) "Commutator relations:"
(%i10) outermap(ad,basis(Heisenberg),basis(Heisenberg))
(%o10) [[0,0,-e[3,1]],[0,0,0],[e[3,1],0,0]]
(%i11) "The derivative of a tensor:"
(%i12) T:stensor(e[2,1],c*e[3,1]+a*e[2,1],e[3,2]+e[2,1])
(%i13) drep(e[3,2],T)
(%o13)
'stensor(e[3,1],e[3,1],e[3,2])*c+2*'stensor(e[2,1],e[3,1],e[3,1])*c
+2*'stensor(e[2,1],e[3,1],e[3,2])*a
+3*'stensor(e[2,1],e[2,1],e[3,1])*a
(%i14) "The derivative of a tensor by a tensor:"
(%i15) S:tensor(e[2,1],e[3,2])
(%i16) drep(S,T)
(%o16) ('stensor(e[3,1],e[3,2],'tensor(e[2,1],e[3,2]))
+'stensor(e[2,1],e[3,2],'tensor(e[2,1],e[3,2]))
+'stensor(e[2,1],e[3,1],'tensor(e[2,1],e[3,2])))
*c
+(2*'stensor(e[2,1],e[3,1],'tensor(e[2,1],e[3,2]))
+'stensor(e[2,1],e[2,1],'tensor(e[2,1],e[3,2])))
*c
+(2*'stensor(e[2,1],e[3,2],'tensor(e[2,1],e[3,2]))
+'stensor(e[2,1],e[2,1],'tensor(e[2,1],e[3,2])))
*a+3*'stensor(e[2,1],e[2,1],'tensor(e[2,1],e[3,2]))*a
(%i17) "Create a Lie Algebra using generators and relations:"
(%i18) generators_relations(H,[[x,y] = z],[z])
(%o18) H
(%i19) basis(H)
(%o19) [x,y,z]
(%i20) "Set the dual basis of H:"
(%i21) set_dual_basis(H,basis(H))
(%i22) dual_basis(H)
(%o22) [%_x,%_y,%_z]
(%i23) "The action of the dual basis:"
(%i24) outermap(ip,dual_basis(H),basis(H))
(%o24) [[1,0,0],[0,1,0],[0,0,1]]
(%i25) "The co-adjoint action:"
(%i26) outermap(co_ad,basis(H),dual_basis(H))
(%o26) [[0,0,%_y],[0,0,-%_x],[0,0,0]]
(%i27) "z is a Casimir: "
(%i28) outermap(drep,basis(H),[z])
(%o28) [[0],[0],[0]]
(%i29) "The derivative of a dual tensor:"
(%i30) S:tensor(%_x,%_y,%_z)
(%i31) outermap(drep,basis(H),[S])
(%o31) [['tensor(%_x,%_y,%_y)],[-'tensor(%_x,%_y,%_x)],[0]]
(%i32) T:atensor(%_x,%_y,%_z)
(%i33) outermap(drep,basis(H),[T])
(%o33) [['atensor(%_x,%_y,%_y)],[-'atensor(%_x,%_y,%_x)],[0]]
(%i34) ev(%,nouns)
(%o34) [['atensor(%_x,%_y,%_y)],[-'atensor(%_x,%_y,%_x)],[0]]
(this should be zero, I think this is a known bug where nary
trashes other properties, like antisymmetric)
(%i35) "Create a Lie Algebra using generators and relations:"
(%i36) generators_relations(so3,[[x,y] = z,[y,z] = x,[z,x] = y])
(%o36) so3
(%i37) basis(so3)
(%o37) [x,y,z]
(%i38) "Set the dual basis of so3:"
(%i39) set_dual_basis(so3,basis(so3))
(%i40) dual_basis(so3)
(%o40) [%_x,%_y,%_z]
(%i41) "The action of the dual basis:"
(%i42) outermap(ip,dual_basis(so3),basis(so3))
(%o42) [[1,0,0],[0,1,0],[0,0,1]]
(%i43) "The co-adjoint action:"
(%i44) outermap(co_ad,basis(so3),dual_basis(so3))
(%o44) [[0,-%_z,%_y],[%_z,0,-%_x],[-%_y,%_x,0]]
(%i45) "x^2+y^2+z^2 is a Casimir: "
(%i46)
outermap(drep,basis(so3),[stensor(z,z)+stensor(y,y)+stensor(x,x)])
(%o46) [[0],[0],[0]]
(%i47) 'done
(%o47) done
(%o47) "/home/work/maxima/scripts/lie-algebra.dem"
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.