## decompose_product

Decompose a product of tensors by using Young projectors.

Decompose a product of tensors by writing it out in terms of
irreducible Young tableau representations, discarding the ones which
vanish in the indicated dimension, and putting the results back
together again. This algorithm can thus be used to equate terms which
are identical only in certain dimensions.
If there are no dimension-dependent identities playing a role in the
product, then `decompose_product`

returns the original
expression,{ m, n, p, q }::Indices(vector);
{ m, n, p, q }::Integer(1..4);
{ A_{m n p}, B_{m n p} }::AntiSymmetric;
ex:= A_{m n p} B_{m n q} - A_{m n q} B_{m n p};

\(\displaystyle{}\text{Attached property Indices(position=free) to }\left\{m, \mmlToken{mo}[linebreak="goodbreak"]{} n, \mmlToken{mo}[linebreak="goodbreak"]{} p, \mmlToken{mo}[linebreak="goodbreak"]{} q\right\}.\)

\(\displaystyle{}\text{Attached property Integer to }\left\{m, \mmlToken{mo}[linebreak="goodbreak"]{} n, \mmlToken{mo}[linebreak="goodbreak"]{} p, \mmlToken{mo}[linebreak="goodbreak"]{} q\right\}.\)

\(\displaystyle{}\text{Attached property AntiSymmetric to }\left\{A_{m n p}, \mmlToken{mo}[linebreak="goodbreak"]{} B_{m n p}\right\}.\)

\(\displaystyle{}A_{m n p} B_{m n q}-A_{m n q} B_{m n p}\)

decompose_product(_)
canonicalise(_);

\(\displaystyle{}A_{p m n} B_{q m n}-A_{q m n} B_{p m n}\)

However, in the present example, a Schouten identity makes the
expression vanish identically in three dimensions,

{ m, n, p, q }::Integer(1..3);
ex:=A_{m n p} B_{m n q} - A_{m n q} B_{m n p};
decompose_product(ex)
canonicalise(ex);

\(\displaystyle{}\text{Attached property Integer to }\left\{m, \mmlToken{mo}[linebreak="goodbreak"]{} n, \mmlToken{mo}[linebreak="goodbreak"]{} p, \mmlToken{mo}[linebreak="goodbreak"]{} q\right\}.\)

\(\displaystyle{}A_{m n p} B_{m n q}-A_{m n q} B_{m n p}\)

\(\displaystyle{}0\)

Note that

`decompose_product`

is unfortunately
computationally expensive, and is therefore not practical for large
dimensions.