## untrace

Take objects out of traces

When a trace contains objects which do not carry any implicit indices on which the
trace acts, the `untrace`

algorithm can be used to take them out of the
trace. This is similar to the way in which `unwrap`

takes objects out of
derivatives when they do not depend on the object with respect to which the derivative
is taken.Unless you declare objects to have a

`ImplicitIndex`

property, they will be taken out. The minimal example does not specify these indices, e.g.{A,B}::ImplicitIndex.
tr{#}::Trace.
ex:= tr( q A B );
untrace(_);

\(\displaystyle{}tr\left(q A B\right)\)

tr(q A B)

\(\displaystyle{}q tr\left(A B\right)\)

q tr(A B)

In the declaration of a trace, it is possible to indicate over which indices the trace is being taken.

{a,b,c}::Indices(spinor).
{m,n,p}::Indices(vector).
C::ImplicitIndex(C_{a b}).
D::ImplicitIndex(D_{a b}).
E::ImplicitIndex(E^{m n}).
Tr{#}::Trace(indices=spinor).

ex:= Tr( C D E );

\(\displaystyle{}Tr\left(C D E\right)\)

Tr(C D E)

untrace(_);

\(\displaystyle{}E Tr\left(C D\right)\)

E Tr(C D)

Note how, even though $E$ has implicit indices, it has been moved out of the trace, as the
latter is declared to be a trace over spinor indices, not vector indices.