It behaves as expected; for historical reasons M{#}
means 'M with any arguments or indices, regardless of position'. M^{#}
or M_{#}
is interpreted in the same way. It's used a lot to declare \delta{#}::KroneckerDelta
, in which case you really need it to mean 'both upper and lower indices'.
Perhaps this historical choice was not a particularly good one, but I'm reluctant to change it now. I could potentially make M^{#}
and M_{#}
mean what you thought they would mean, because that should not clash with existing notebooks. Let me think this through a bit more.
For the time being, your only options are to either declare M^{A B}::AntiSymmetric
explicitly (in which case you have to repeat it for any number of indices that you need) or accept that it behaves as in your example.