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