Welcome to Cadabra Q&A, where you can ask questions and receive answers from other members of the community.
0 votes

The command

$\texttt{K_{i j k}::TableauSymmetry( shape={2,1}, indices={1,2,0} );}$

defines a tensor which is antisymmetric in $i$ and $j$ and satisfies the Bianchi identity. How can I define a tensor which is symmetric in $i$ and $j$ and satisfies the Bianchi identity?

Apparently, $\texttt{cadabra}$ uses the convention "first symmetrise over rows, then antisymmetrise over columns" for filled Young tableaux, whereas I need the opposite convention, i.e."first antisymmetrise over columns, then symmetrise over rows".

in General questions by (330 points)
edited by

1 Answer

+1 vote

At the moment this is baked in, but it wouldn't be difficult (and probably a good idea) to add an option to choose between the two conventions. I will put it on the TODO list, but in case you want to give it a shot yourself (given our email correspondence), here are some pointers.

The actual projector logic used by e.g. young_project sits in core/YoungTab.hh, see

https://github.com/kpeeters/cadabra2/blob/master/core/YoungTab.hh#L793

You would then also need to give TableauSymmetry an extra optional argument to choose between the two conventions. That's done in

https://github.com/kpeeters/cadabra2/blob/master/core/properties/TableauSymmetry.cc#L26

You would then propagate the value of that option to the tableaux stored in the TableauSymmetry.tabs vector.

There is some independent logic in core/algorithms/canonicalise.cc for the signs; that either needs changing as well or simply needs tidying up (canonicalise.cc deduces simple (mono-term) symmetries from tableaux by itself because it does not know how to deal with the more general multi-term (Garnir) symmetries, and I was lazy to abstract that logic and move it into YoungTab.hh).

Just ask if you need more help.

by (65.1k points)

Thanks for the information. I'll have a look.

...