If you have a tensor (anti)symmetric in only a subset of its indices, you need to use TableauSymmetry
. In your case,
f^{a}_{b c}::TableauSymmetry(shape={1,1}, indices={1,2});
after which
ex:= f^{a}_{b c} + f^{a}_{c b};
canonicalise(_);
yields zero. The arguments to TableauSymmetry
mean that indices 1 and 2 of the 'f' tensor (counting starts from 0) should have the Young tableau symmetry given by a diagram with one column and two rows. That's an anti-symmetric tensor.
I am considering adding options to Symmetric
and AntiSymmetric
to make this more user-friendly (i.e. avoid having to use TableauSymmetry
in simple situations such as yours). Will post a comment here when that is ready.
As for your second question, use the unwrap
algorithm. Here's an example:
\partial{#}::PartialDerivative.
F{#}::Depends(\partial).
A{#}::Depends(\partial).
ex:=\int{ f^{a}_{b c} f_{a d e} \partial_{\mu}{A^{b c}_{\nu}} F^{d e \mu \nu}}{x};
then
integrate_by_parts(_, $A^{b c}_{\nu}$);
unwrap(_);
produces the answer you want, without derivatives hitting the structure constants.
(note: handling dependencies and integration variables is still a bit messy and will be cleaned
up at some point in the near future).