- epsilon*epsilon contractions work
- dirac_slash(a, D) now constructs a special kind of clifford object (printed
as "a\") instead of creating a "a.symbol42*gamma~symbol42" product. This
helps avoiding problems when doing something like
ex prop = (dirac_slash(p, D) - m * dirac_ONE());
ex I = prop * dirac_slash(l, D) * prop;
where the same dummy index would be used for both p-slash in I. Now it's
perfectly safe to do this. Dummy indices are only created when taking
traces or contracting indices. A nice side-effect of this is that "a\*a\"
immediately gets simplified to a^2.
- The "contraction of symmetric and antisymmetric objects is zero" rule
in simplify_indexed() has been generalized. Now expressions like
"epsilon.i.j.k*A.j*A.k" also get simplified to zero (what GiNaC does is
to assert dummy index exchange symmetry).