## 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.