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
ϵr1⋯rdϵs1⋯sd=1√|g|εr1⋯rd√|g|εs1⋯sd=sign(g)d!δr1⋯rds1⋯sd,
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).