Processing math: 100%
Cadabra
a field-theory motivated approach to computer algebra

epsilon_to_delta

Replace a product of two epsilon tensors with a generalised delta
Replace a product of two epsilon tensors with a generalised delta according to the expression ϵr1rdϵs1sd=1|g|εr1rd|g|εs1sd=sign(g)d!δr1rds1sd,
where sign(g) denotes the signature of the metric g used to raise/lower the indices (see EpsilonTensor for conventions on the epsilon tensor). When the indices are not ocurring up/down as in this expression, and the index position is not free, metric objects will be generated instead. Here is an example:
{a,b,c,d}::Indices. {a,b,c,d}::Integer(1..3). \delta{#}::KroneckerDelta. \epsilon_{a b c}::EpsilonTensor(delta=\delta). ex:=\epsilon_{a b c} \epsilon_{a b d};
ϵabcϵabd
epsilon_to_delta(_);
2δcd
Remember that if the result is a generalised delta, you can expand it in terms of normal deltas using expand_delta,
ex:=\epsilon_{a b c} \epsilon_{a d e}; epsilon_to_delta(_); expand_delta(_);
ϵabcϵade
2δbdce
δbdδceδcdδbe
In order for this algorithm to work, you need to make sure that the epsilon symbols in your expression are declared as EpsilonTensor and that these declarations involve a specification of the delta and/or metric symbols.
As you can see from this example, contracted indices inside the generalised delta are automatically eliminated, as the algorithm reduce_gendelta is called automatically; if you do not want this use the optional argument reduce=False.
ex:=\epsilon_{a b c} \epsilon_{a b d}; epsilon_to_delta(_, reduce=False);
ϵabcϵabd
6δaabbcd
Note that the results typically depend on the signature of the space-time, which can be introduced through the optional metric argument of the EpsilonTensor property. Compare the two examples below:
{a,b,c,d}::Indices. {a,b,c,d}::Integer(1..3). \delta{#}::KroneckerDelta. \epsilon_{a b c}::EpsilonTensor(delta=\delta, metric=g_{a b}). g_{a b}::Metric(signature=-1). ex:=\epsilon_{a b c} \epsilon_{a b c};
ϵabcϵabc
epsilon_to_delta(_);
6
g_{a b}::Metric(signature=+1). ex:=\epsilon_{a b c} \epsilon_{a b c}; epsilon_to_delta(_);
ϵabcϵabc
6
Note that you need to specify the full symbol for the metric, including the indices, whereas the Kronecker delta argument only requires the name without the indices (because a contraction can generate generalised Kronecker delta symbols with any number of indices).
Copyright © 2001-2024 Kasper Peeters
Questions? info@cadabra.science