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

I have three examples

(I) Combine automatically assumes object commuting. ex:=(A^a)^\alpha (B^b)_{\alpha}; combine(ex);

gives, (B^b A^a). How did it know they are commuting?

(II) If I explicitly tell A^a and B^b AntiCommute then i.e.

{A^a,B^b}::AntiCommuting; ex:=(A^a)^\alpha (B^b)_{\alpha}; combine(ex);

Gives (-B^b A^a). This is technically correct, but, would prefer it still gives (A^a B^b).

(III) This one is perhaps even more serious?

{A^a,B^b}::NonCommuting; ex:=(A^a)^\alpha (B^b)_{\alpha}; combine(ex);

still gives, (B^b A^a). It fails to understand that I told A^a and B^b should not be commuted.

I think all of the problems will go away once it just gives (A^a B^b) as the answer in all the cases. Please have a look. Thanks

in Bug reports by (560 points)

1 Answer

0 votes

I can confirm the behaviour of your code.

Just a comment: It seems that combine privilege the position of the indices (lower like a covariant and upper like contravariant) over the property of the objects.

cadabra_combine

by (13.6k points)
...