Coefficients Inconsistency with expand=False in join_gamma()

+1 vote

Hi.

I am having trouble using joingamma() with expand=False and usegendelta=True. I am using these conditions to reduce the number of terms resulting from gamma arithmetic (particularly in a function calculating various gamma products), but in certain situations in which symmetrizations/generalized deltas contract out, the coefficients seem incorrect, and inconsistent with the coefficients given by joingamma() with expand=True and usegendelta=False (i.e., the default conditions). For example, the code below with the default conditions (and the usual post_process() in the documentation)

ex := \Gamma_{a b} \Gamma^{b d};
converge(ex):
join_gamma(ex)
distribute(ex)
ex;

gives

-Γ_{a}^{b} Γ^{d}_{b}
9Γ_{a}^{d} + 10δ_{a}^{d}

but

ex := \Gamma_{a b} \Gamma^{b d};
converge(ex):
join_gamma(ex, expand=False, use_gendelta=True)
distribute(ex)
ex;
expand_delta(ex);

gives

-Γ_{a}^{b} Γ^{d}_{b}
-4Γ_{a}^{d} + 2δ_{a}^{d b}_{b}
-4Γ_{a}^{d} + 10δ_{a}^{d}

Setting expand=True resolves the issue (but will obviously not reduce terms in the other products handled by my function), as in the code below,

ex := \Gamma_{a b} \Gamma^{b d};
converge(ex):
join_gamma(ex, use_gendelta=True)
distribute(ex)
ex;
expand_delta(ex);

which gives

-Γ_{a}^{b} Γ^{d}_{b}
9Γ_{a}^{d} + 2δ_{a}^{d b}_{b}
9Γ_{a}^{d} + 10δ_{a}^{d}

It seems as though the implicit (anti)symmetrization given with expand=False is not being recognized by the next loop of join_gamma(). Am I making a mistake in handling implicit symmetrization in Cadabra? Is there a way to avoid this coefficient inconsistency while still using expand=False more or less indiscriminately?

The full code for the above tests is shown below.

{a,b,c,d,e}::Indices(vector);
{a,b,c,d,e}::Integer(0..11-1);
\Gamma_{#}::GammaMatrix(metric=\delta);
\delta{#}::KroneckerDelta

def post_process(ex):
sort_product(ex)
eliminate_kronecker(ex)
canonicalise(ex)
collect_terms(ex)

print('\ntest 1')
ex := \Gamma_{a b} \Gamma^{b d};
converge(ex):
join_gamma(ex)
distribute(ex)
ex;

print('\ntest 2')
ex := \Gamma_{a b} \Gamma^{b d};
converge(ex):
join_gamma(ex, expand=False, use_gendelta=True)
distribute(ex)
ex;
expand_delta(ex);

print('\ntest 3')
ex := \Gamma_{a b} \Gamma^{b d};
converge(ex):
join_gamma(ex, use_gendelta=True)
distribute(ex)
ex;
expand_delta(ex);

-Simon