a field-theory motivated approach to computer algebra

## sort_product

Sort factors in a product
Sort factors in a product, taking into account any SortOrder properties. Also takes into account commutativity properties, such as SelfCommuting. If no sort order is given, it first does a lexographical sort based on the name of the factor, and if two names are identical, does a sort based on the number of children and (if this number is equal) a lexographical comparison of the names of the children. Symbols starting with a backslash (greek letters etc.) get sorted to the right of roman letters. The simplest sort is illustrated below,
ex := C B A D; sort_product(_);
$$\displaystyle{}C B A D$$
$$\displaystyle{}A B C D$$
We can declare the objects to be anti-commuting, which then leads to
{A, B, C, D}::AntiCommuting. ex := C B A D; sort_product(_);
$$\displaystyle{}C B A D$$
$$\displaystyle{}-A B C D$$
For indexed objects, the anti-commutativity of components is indicated using the SelfAntiCommuting property,
\psi_{m}::SelfAntiCommuting. ex := \psi_{n} \psi_{m} \psi_{p}; sort_product(_);
$$\displaystyle{}\psi_{n} \psi_{m} \psi_{p}$$
$$\displaystyle{}-\psi_{m} \psi_{n} \psi_{p}$$
Finally, the lexographical sort order can be overridden by using the SortOrder property,
{D, C, B, A}::SortOrder. {A, B, C, D}::AntiCommuting. ex := C B A D; sort_product(_);
$$\displaystyle{}C B A D$$
$$\displaystyle{}-D C B A$$