a field theory motivated approach to computer algebra

# RiemannTensor

Make an object a Riemann curvature tensor.
Gives an object the symmetry properties of a Riemann tensor. This has implications for various simplification algorithms such as canonicalise or young_project_tensor. The following is an example which makes use of the Ricci identity.
R_{m n p q}::RiemannTensor; A^{m n p}::AntiSymmetric; ex:= A^{m n p} R_{m n p q};
$$\displaystyle{}\text{Attached property TableauSymmetry to }R_{m n p q}.$$
$$\displaystyle{}\text{Attached property AntiSymmetric to }A^{m n p}.$$
$$\displaystyle{}A^{m n p} R_{m n p q}$$
young_project_tensor(_, modulo_monoterm=True);
$$\displaystyle{}A^{m n p} \left(\frac{2}{3}R_{m n p q} - \frac{1}{3}R_{m q n p}+\frac{1}{3}R_{m p n q}\right)$$
distribute(_);
$$\displaystyle{}\frac{2}{3}A^{m n p} R_{m n p q} - \frac{1}{3}A^{m n p} R_{m q n p}+\frac{1}{3}A^{m n p} R_{m p n q}$$
canonicalise(_);
$$\displaystyle{}0$$