# Automatic simplification of antisymmetric tensor contractions

I'm currently using a function LC[m,n,r,s] to denote the Levi-Civita symbol $$\varepsilon^{\mu\nu\rho\sigma}$$ with abstract tensor indices (together with the rules in this post). I also have objects such as V[label,-a] for e.g. $$V_{i,\mu}$$ or Pol[i,-a] etc which denote vectors.

Is there a slick way I can ensure that LC contracted with any two objects that are the same is zero?

e.g. LC[a,b,c,d]V[i,-a]V[i,-c] = 0

Ideally, this would happen when using e.g. Simplify[] but could just be a seperate function...

• Can you include definitions for LC V and Pol please? Commented Nov 1, 2022 at 14:31
• They don't have definitions as functions, they are supposed to remain abstract. I mostly just change their formatting using e.g. Format[LC]:=..., then apply rules as necessary. Incidentally, I want to be able to contract LC with any object, regardless of its definition, and it be zero by the anti-symmetric property of the Levi-Civita symbol. Commented Nov 1, 2022 at 15:47
• What does it mean for two objects to be the same? eg V[i,-a] and V[i,-c] Commented Nov 1, 2022 at 15:52
• a and c are indices (and i just a label), so this would be $V^{(i)}_a V^{(i)}_c$ in component form. In general, $\varepsilon^{abcd}V^{(i)}_a V^{(i)}_c = 0$, whereas $\varepsilon^{abcd}V^{(i)}_a V^{(j)}_c \neq 0$. Commented Nov 1, 2022 at 16:10

LC[___,a_,___,b_,___]*(h_)[x___,-a_,y___]*(h_)[x___,-b_,y___] -> 0

LCKill[f_]:= f/.LC[ind1_,ind2_,ind3_]V[iinda_,sinda_]V[iindb_,sindb_]V[iindc_,sindc_]/;!DuplicateFreeQ[{ind1^2,ind2^2,ind3^2,sinda^2,sindb^2,sindc^2}]:>If[!DuplicateFreeQ[{iinda,iindb,iindc}],0,1]*LC[ind1,ind2,ind3]V[iinda,sinda]V[iindb,sindb]V[iindc,sindc]