a field-theory motivated approach to computer algebra

## TableauSymmetry

Gives a tensor a generic Young tableau symmetry.
Gives a tensor a generic Young tableau symmetry, as indicated by the arguments. Takes lists of two key-value pairs as arguments, indicating the shape of the Young tableau and the index slots associated to each box in the tableau. The shape argument holds a list of row lengths, so that e.g. shape={3,2} indicates a tableau with 3 boxes in the first row and 2 boxes in the second. To see this in action, consider for instance
R_{a b c d}::TableauSymmetry( shape={2,2}, indices={0,2,1,3} );
$$\displaystyle{}\text{Attached property TableauSymmetry to }R_{a b c d}.$$
which yields the symmetries of the Riemann tensor, that is, the symmetries of a Young tableau with two rows of two boxes each. Note that indices are counted from zero. You can see that this works by showing that the cyclic identity holds, using young_project_tensor,
ex:= R_{a b c d} + R_{a c d b} + R_{a d b c};
$$\displaystyle{}R_{a b c d}+R_{a c d b}+R_{a d b c}$$
young_project_tensor(_);
$$\displaystyle{}0$$
Simple symmetry is imposed by using a tableau with one row, while simple anti-symmetry corresponds to a tableau with one column. See Symmetric and AntiSymmetric for examples. You can also obtain the same result using TableauSymmetry:
g_{a b}::TableauSymmetry(shape={2}, indices={0,1}); A_{a b}::TableauSymmetry(shape={1,1}, indices={0,1}); ex:= g_{b a} + A_{b a}; canonicalise(_);
$$\displaystyle{}\text{Attached property TableauSymmetry to }g_{a b}.$$
$$\displaystyle{}\text{Attached property TableauSymmetry to }A_{a b}.$$
$$\displaystyle{}g_{b a}+A_{b a}$$
g_{b a} + A_{b a}
$$\displaystyle{}g_{a b}-A_{a b}$$
g_{a b}-A_{a b}
The first two lines declare two two-index tensors, $g_{a b}$ symmetric, $A_{a b}$ anti-symmetric, as the last line confirms.