a field-theory motivated approach to computer algebra

## AntiCommuting

Make objects anti-commuting.
Makes components anti-commuting, for example
{A,B}::AntiCommuting; ex:=B A; sort_product(_);
$$\displaystyle{}\text{Attached property AntiCommuting to }\left[A, B\right].$$
$$\displaystyle{}B A$$
$$\displaystyle{}-A B$$
It also works for objects with indices:
{\psi_{m}, \chi}::AntiCommuting. ex:= \psi_{m} \chi \psi_{n}; sort_product(_);
$$\displaystyle{}\psi_{m} \chi \psi_{n}$$
$$\displaystyle{}-\chi \psi_{m} \psi_{n}$$
If you want a pattern like \psi_{m} to anti-commute with itself, you should use the SelfAntiCommuting property instead.
You can think about the difference between SelfAntiCommuting and AntiCommuting in the following way. If A_{m n} is SelfAntiCommuting, it means that for each value of the indices the expression A_{m n} is an operator which anti-commutes with the operator for any other value of the indices. The matrix $A$ is thus a matrix of operator-valued components which mutually anti-commute. On the other hand, if A and B are declared to be AntiCommuting, then these can be viewed as two matrices of commuting components, whose matrix product satisfies $A B = - B A$.
If you attach the AntiCommuting property to an object with an ImplicitIndex property, the commutation property does not refer to the object as a whole, but rather to its components. The logic behind that becomes clear when considering e.g. spinor bilinears,
{\chi, \psi}::Spinor(dimension=10, type=MajoranaWeyl); {\chi, \psi}::AntiCommuting; \bar{#}::DiracBar; \Gamma{#}::GammaMatrix; {\chi, \psi}::SortOrder; ex:=\bar{\psi} \Gamma_{m n p} \chi;
$$\displaystyle{}\text{Attached property Spinor to }\left[\chi, \psi\right].$$
$$\displaystyle{}\text{Attached property AntiCommuting to }\left[\chi, \psi\right].$$
$$\displaystyle{}\text{Attached property DiracBar to }\bar{\#}.$$
$$\displaystyle{}\text{Attached property GammaMatrix to }\Gamma\left(\#\right).$$
$$\displaystyle{}\text{Attached property SortOrder to }\left[\chi, \psi\right].$$
$$\displaystyle{}\bar{\psi} \Gamma_{m n p} \chi$$
sort_product(_);
$$\displaystyle{}\bar{\psi} \Gamma_{m n p} \chi$$
sort_spinors(_);
$$\displaystyle{}\bar{\chi} \Gamma_{m n p} \psi$$
Here sort_product did not act because both the spinors and the gamma matrices have the ImplicitIndex property and there are thus no simple rules for their re-ordering. However, the sort_spinors algorithm did act, and took into account the fact that the components of the spinors are anti-commuting.