Grassmann Calculus / Indexed Objects / Simplify
- To: mathgroup at smc.vnet.net
- Subject: [mg60763] Grassmann Calculus / Indexed Objects / Simplify
- From: Robert Schoefbeck <schoefbeck at hep.itp.tuwien.ac.at>
- Date: Wed, 28 Sep 2005 01:40:59 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hello all, I want to implement superspace calculations in a mathematica package. I define (code below) grassmannian theta-variables with upper and lower, dotted and undotted indices. Having declared (anti)- commutativity with DeclareOdd i use myTimes to handle multiplications of Superfields. Dummy indices are generated by use of Unique[]. All this multiplication stuff works pretty well but looking at the one but last output i have the problem that contractions with different dummies are not recognized as equal. My questions are: Is there a way to tell mathematica to keep the information that indices are equal but forgetting about the name of the dummy? I'd also like to pull indices with metrics, something like e[a,b]theta[b]=theta[a] How should i implement the defining relations for index pulling (i have vector, and chiral/antichiral spinor indices, color indices and so on) such that 1) Simplify can handle them? any help is welcome, does maybe someone have a sample application of how to handle indices? i'd also appreciate any comment on the code. robert schoefbeck short description: OddPQ tests whether an object has odd parity or not mytimes handles ,multiplications CSF[phi,lambda,F] ... chiral superfield defined by component fields (lambda is odd) ACSF ... antichiral Superfield Code: Notebook[{ Cell[BoxData[ \(\(Clear[myTimes];\)\)], "Input"], Cell[BoxData[ \(\(\(Clear[DeclareOdd, OddPQ, myTimes]\[IndentingNewLine] \(DeclareOdd[ var__] := \(\((OddPQ[#] = True)\) &\) /@ {var};\)\[IndentingNewLine] \(\(DeclareEven[ var__] := \(\((OddPQ[#] = False)\) &\) /@ {var};\)\(\[IndentingNewLine]\) \)\)\( (*OddPQ[myTimes[x__]] := Mod[Count[OddPQ /@ {x}, True], 2] \[Equal] 1*) \)\)\)], "Input"], Cell[BoxData[ \(\(DeclareOdd[\[Theta][\[Alpha]_], \[Theta]b[\[Alpha]_]];\)\)], \ "Input"], Cell[BoxData[ \(\(OddPQ[x_?NumericQ] := False;\)\)], "Input"], Cell[BoxData[ \(\(DeclareOdd[\[Theta][\[Alpha]_], \[Theta]b[\[Alpha]_]];\)\)], \ "Input"], Cell["rearranging of elementary Odd variables", "Text"], Cell[BoxData[{ \(myTimes[a___, x_, b___, x_, c___] /; OddPQ[x] := 0\), "\[IndentingNewLine]", \(myTimes[x___] /; \((And @@ \(OddPQ /@ {x}\))\) && Not[OrderedQ[{x}]] := Signature[{x}]*myTimes[Sequence @@ Sort[{x}]]\)}], "Input"], Cell["linearity", "Text"], Cell[BoxData[ \(myTimes[x___, y_Plus, z___] := \(myTimes[x, #, z] &\) /@ y\)], "Input"], Cell[BoxData[ \(myTimes[x___, y_Times, z___] := myTimes[x, Apply[Sequence, y], z]\)], "Input"], Cell[BoxData[ \(myTimes[x___, y_myTimes, z___] := myTimes[x, Apply[Sequence, y], z]\)], "Input"], Cell["a single expression in mytimes whose head is not myTimes", \ "Text"], Cell[BoxData[ \(myTimes[a_] /; Head[a] =!= Times := a\)], "Input"], Cell["\<\ after linearity downvalues: myTimes\[Rule]Times if possible\ \>", "Text"], Cell[BoxData[ \(myTimes[a_, b_] /; \(! OddPQ[a]\) || \(! OddPQ[b]\) := a*b\)], "Input"], Cell[BoxData[ \(\(myTimes[] = 1;\)\)], "Input"], Cell["\<\ split off avars in myTimes (corrected version: Length[coms>0])\ \>", "Text"], Cell[BoxData[ \(myTimes[vars__] /; Length[{vars}] > 2 := Module[{vl = {vars}, antis, coms, exponents}, antis = Select[vl, OddPQ]; \[IndentingNewLine]coms = Complement[vl, antis]; \[IndentingNewLine]exponents = \(Count[ vl, #] &\) /@ coms; \[IndentingNewLine]Inner[Power, coms, exponents, Times]*Apply[myTimes, antis] /; Length[coms] > 0]\)], "Input"], Cell["4-dim chiral thetas", "Text"], Cell[BoxData[ \(myTimes[ x___] /; \((Length[{x}] > 2 && Max\ [\(Count[{x}, #[_]] &\) /@ Union[Select[{x}, OddPQ] /. f_[_] \[RuleDelayed] f]] > 2)\) := 0\)], "Input"], Cell["END", "Text"], Cell[BoxData[ \(\(DeclareOdd[\[Theta][_], \[Theta]b[_]];\)\)], "Input"], Cell[BoxData[{ \(\(Format[\[Theta]b[ Index[\[Alpha]_, down]]] := \[Theta]\&_\_\[Alpha]\& . ;\)\), "\ \[IndentingNewLine]", \(\(Format[\[Theta]b[ Index[\[Alpha]_, up]]] := \[Theta]\&_\^\[Alpha]\& . ;\)\)}], "Input"], Cell[BoxData[{ \(\(Format[\[Theta][ Index[\[Alpha]_, down]]] := \[Theta]\_\[Alpha];\)\), \ "\[IndentingNewLine]", \(\(Format[\[Theta][ Index[\[Alpha]_, up]]] := \[Theta]\^\[Alpha];\)\)}], "Input"], Cell[BoxData[ \(Format[myConjugate[x_]] := x\&_\)], "Input"], Cell[BoxData[{ \(\(Clear[CSF];\)\), "\[IndentingNewLine]", \(\(\(CSF[0, 0, F_Symbol] := Module[{ad1, au1}, indid1 = Unique[\[Alpha]]; ad1 = Index[indid1, down]; au1 = Index[indid1, up]; \[IndentingNewLine]F\ myTimes[\[Theta][ ad1], \[Theta][au1]]]\)\(\[IndentingNewLine]\) \)\)}], "Input"], Cell[BoxData[ \(\(CSF[\[Phi]_Symbol, \[Lambda]_Symbol, F_Symbol] := Module[{ad1, ad2, au1, au2, indid1, indid2}, indid1 = Unique[\[Alpha]]; indid2 = Unique[\[Alpha]]; ad1 = Index[indid1, down]; au1 = Index[indid1, up]; ad2 = Index[indid2, down]; au2 = Index[indid2, up]; \[IndentingNewLine]DeclareOdd[\[Lambda][_]]; \ \[IndentingNewLine]DeclareEven[\[Phi]]; \[IndentingNewLine]Format[\ \[Lambda][Index[\[Alpha]_, down]]] := \[Lambda]\_\[Alpha]; \ \[IndentingNewLine]Format[\[Lambda][ Index[\[Alpha]_, up]]] := \[Lambda]\^\[Alpha]; \[IndentingNewLine]\ \[Phi] + Sqrt[2] myTimes[\[Theta][au1], \[Lambda][ad1]] + F\ myTimes[\[Theta][au2], \[Theta][ ad2]]];\)\)], "Input"], Cell[BoxData[ \(\(ACSF[\[Phi]_Symbol, \[Lambda]_Symbol, F_Symbol] := Module[{ad1, ad2, au1, au2, indid1, indid2}, indid1 = Unique[\[Alpha]]; indid2 = Unique[\[Alpha]]; au1 = Index[indid1, up]; ad1 = Index[indid1, down]; au2 = Index[indid2, up]; ad2 = Index[indid2, down]; \[IndentingNewLine]DeclareOdd[\[Lambda][_]]; \ \[IndentingNewLine]DeclareEven[\[Phi]]; \ \[IndentingNewLine]Format[\(myConjugate[\[Lambda]]\)[ Index[\[Alpha]_, down]]] := \[Lambda]\&_\_\[Alpha]\& . ; \ \[IndentingNewLine]Format[\(myConjugate[\[Lambda]]\)[ Index[\[Alpha]_, up]]] := \[Lambda]\&_\^\[Alpha]\& . ; \ \[IndentingNewLine]myConjugate[\[Phi]] + Sqrt[2] myTimes[\[Theta]b[ad1], \(myConjugate[\[Lambda]]\)[ au1]] + myConjugate[ F]\ myTimes[\[Theta]b[ad2], \[Theta]b[ au2]]];\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(CSF[\[Phi], \[Lambda], F]\)], "Input"], Cell[BoxData[ FormBox[ RowBox[{"\[Phi]", "+", RowBox[{\(\@2\), " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$792\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$792\), "TraditionalForm"]}], ")"}]}], "-", RowBox[{"F", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\_\[Alpha]$793\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$793\), "TraditionalForm"]}], ")"}]}]}], TraditionalForm]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(myTimes[CSF[\[Phi], \[Lambda], F], CSF[\[Phi], \[Lambda], F]]\)], "Input"], Cell[BoxData[ FormBox[ RowBox[{\(\[Phi]\^2\), "+", RowBox[{\(\@2\), " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$795\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$795\), "TraditionalForm"]}], ")"}], " ", "\[Phi]"}], "-", RowBox[{"F", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\_\[Alpha]$796\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$796\), "TraditionalForm"]}], ")"}], " ", "\[Phi]"}], "+", RowBox[{\(\@2\), " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$798\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$798\), "TraditionalForm"]}], ")"}], " ", "\[Phi]"}], "-", RowBox[{"F", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\_\[Alpha]$799\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$799\), "TraditionalForm"]}], ")"}], " ", "\[Phi]"}], "-", RowBox[{"2", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$795\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$798\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$795\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$798\), "TraditionalForm"]}], ")"}]}]}], TraditionalForm]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(myTimes[ACSF[\[Phi], \[Lambda], F], CSF[\[Phi], \[Lambda], F]]\)], "Input"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[Phi]", " ", FormBox[\(\[Phi]\&_\), "TraditionalForm"]}], "+", RowBox[{\(\@2\), " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$816\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$816\), "TraditionalForm"]}], ")"}], " ", FormBox[\(\[Phi]\&_\), "TraditionalForm"]}], "-", RowBox[{"F", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\_\[Alpha]$817\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$817\), "TraditionalForm"]}], ")"}], " ", FormBox[\(\[Phi]\&_\), "TraditionalForm"]}], "+", RowBox[{"\[Phi]", " ", FormBox[\(F\&_\), "TraditionalForm"], " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\&_\_\(\[Alpha]$814\& . \)\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\^\(\[Alpha]$814\& . \)\), "TraditionalForm"]}], ")"}]}], "+", RowBox[{\(\@2\), " ", FormBox[\(F\&_\), "TraditionalForm"], " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$816\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\_\(\[Alpha]$814\& . \)\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\^\(\[Alpha]$814\& . \)\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$816\), "TraditionalForm"]}], ")"}]}], "-", RowBox[{"F", " ", FormBox[\(F\&_\), "TraditionalForm"], " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\_\[Alpha]$817\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$817\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\_\(\[Alpha]$814\& . \)\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\^\(\[Alpha]$814\& . \)\), "TraditionalForm"]}], ")"}]}], "-", RowBox[{"2", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\^\[Alpha]$816\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\_\(\[Alpha]$813\& . \)\), "TraditionalForm"], ",", FormBox[\(\[Lambda]\_\[Alpha]$816\), "TraditionalForm"]}], ")"}], " ", FormBox[\(\[Lambda]\&_\^\(\[Alpha]$813\& . \)\), "TraditionalForm"]}], "-", RowBox[{\(\@2\), " ", "F", " ", RowBox[{"myTimes", "(", RowBox[{ FormBox[\(\[Theta]\_\[Alpha]$817\), "TraditionalForm"], ",", FormBox[\(\[Theta]\^\[Alpha]$817\), "TraditionalForm"], ",", FormBox[\(\[Theta]\&_\_\(\[Alpha]$813\& . \)\), "TraditionalForm"]}], ")"}], " ", FormBox[\(\[Lambda]\&_\^\(\[Alpha]$813\& . \)\), "TraditionalForm"]}], "+", RowBox[{\(\@2\), " ", "\[Phi]", " ", FormBox[\(\[Theta]\&_\_\(\[Alpha]$813\& . \)\), "TraditionalForm"], " ", FormBox[\(\[Lambda]\&_\^\(\[Alpha]$813\& . \)\), "TraditionalForm"]}]}], TraditionalForm]], "Output"] }, Open ]] } ]
- Follow-Ups:
- Re: Grassmann Calculus / Indexed Objects / Simplify
- From: "Carl K. Woll" <carl@woll2woll.com>
- Re: Grassmann Calculus / Indexed Objects / Simplify