Hi.
I am having trouble using join_gamma() with expand=False and use_gendelta=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 join_gamma() with expand=True and use_gendelta=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);
Thanks in advance.
-Simon