rtest4: in tests for SF bug #2905, invert case of all-upper and all-lower symbols...
[maxima.git] / share / tensor / spinor.dem
blob3b7f42312ae4c26fa19b5a0be29b04ed8765ebd2
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License as
4  * published by the Free Software Foundation; either version 2 of
5  * the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be
8  * useful, but WITHOUT ANY WARRANTY; without even the implied
9  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10  * PURPOSE.  See the GNU General Public License for more details.
11  *
12  * Spinor algebra
13  */
15 if get('itensor,'version)=false then load(itensor);
16 ("We are working with a spinor base, which is two dimensional")$
17 dim:2;
18 ("The epsilon-spinor is antisymmetric and contracts to the Kronecker-delta")$
19 defcon(e);
20 defcon(e,e,kdelta);
21 remsym(e,2,0);
22 remsym(e,0,2);
23 decsym(e,2,0,[anti(all)],[]);
24 decsym(e,0,2,[],[anti(all)]);
26 ("Verifying the epsilon-spinor's properties")$
27 ishow(e([A,B],[])*e([],[B,C]))$
28 ishow(contract(%))$
29 ishow(e([A,B],[])*e([],[C,B]))$
30 ishow(contract(%))$
31 ishow(contract(e([A],[A])))$
32 %,kdelta;
34 ("h is a spinor representing, for instance, a Lorentz transform")$
35 defcon(h,h,kdelta);
36 h([A,B],[])*h([],[A,B]),noeval$
37 ishow(%)$
38 ishow(LHS:contract(%))$
40 ("We split h into symmetric and antisymmetric parts:")$
41 decsym(f,2,0,[sym(all)],[]);
42 decsym(f,0,2,[],[sym(all)]);
43 remcomps(h);
44 components(h([A,B],[]),a*e([A,B],[])+f([A,B],[]));
46 ("Now we compute the upper-index components of h")$
47 ishow(contract(h([A,B],[])*e([],[A,D])))$
48 ishow(contract(expand(%)))$
49 ishow(contract(%*e([],[C,B])))$
50 ishow(contract(expand(%)))$
51 components(h([],[C,D]),%);
53 ("We can now contract h with itself and evaluate")$
54 ishow(h([A,B],[])*h([],[A,B]))$
55 ishow(RHS:contract(expand(%)))$
57 /* NB: I believe Penrose&Rindler p172 contains a sign error here */
59 ("And get a simple identity for Lorentz transforms in a spinor base:")$
60 ishow(ev(distrib((LHS=RHS)/2)))$
62 /* End of demo -- comment line needed by MAXIMA to resume demo menu */