## join_gamma

Work out the product of two generalised Dirac gamma matrices.

Join two fully anti-symmetrised gamma matrix products according to the
expression
\begin{equation}
\Gamma^{b_{1}\dots b_{n}}\Gamma_{a_{1}\dots a_{m}} =
\sum_{p=0}^{\text{min}(n,m)}\ \frac{n! m!}{(n-p)! (m-p)! p!}
\Gamma^{[b_{1}... b_{n-p}}{}_{[a_{p+1}... a_{m}}
\eta^{b_{n-p+1}... b_{n}]}{}_{a_{1}... a_{m-p}]} \, .
\end{equation}
This is the opposite of `split_gamma`

.
Without further arguments, the anti-symmetrisations will be worked out
explicitly (changed from v1). The setting the flag "`expand`" to false instead keeps them implicit. Compare

\Gamma{#}::GammaMatrix(metric=g).
ex:= \Gamma_{m n} \Gamma_{p};
join_gamma(ex, expand=False);

\(\displaystyle{}\Gamma_{m n} \Gamma_{p}\)

\(\displaystyle{}\Gamma_{m n p}+2\Gamma_{m} g_{n p}\)

with

\Gamma{#}::GammaMatrix(metric=g).
ex:= \Gamma_{m n} \Gamma_{p};
join_gamma(ex, expand=True);

\(\displaystyle{}\Gamma_{m n} \Gamma_{p}\)

\(\displaystyle{}\Gamma_{m n p}+\Gamma_{m} g_{n p}-\Gamma_{n} g_{m p}\)

Note that the gamma matrices need to have a metric associated to them
in order for this algorithm to work.

In order to reduce the number of terms somewhat, one can instruct the algorithm
to make use of generalised Kronecker delta symbols in the result;
these symbols are defined as
\begin{equation}
\delta^{r_1}{}_{s_1}{}^{r_2}{}_{s_2}\cdots{}^{r_n}{}_{s_n}
= \delta^{[r_1}{}_{s_1}\delta^{r_2}{}_{s_2}\cdots {}^{r_n]}{}_{s_n}\, .
\end{equation}
Anti-symmetrisation is implied in the set of even-numbered
indices. The use of these symbols is triggered by the "{\tt
use_gendelta}" option,

{m,n,p,q}::Indices(position=fixed).
\Gamma{#}::GammaMatrix(metric=\delta).
ex:=\Gamma_{m n} \Gamma^{p q};
join_gamma(_, use_gendelta=True);

\(\displaystyle{}\Gamma_{m n} \Gamma^{p q}\)

\(\displaystyle{}\Gamma_{m n}\,^{p q}+\Gamma_{m}\,^{q} \delta_{n}\,^{p}-\Gamma_{m}\,^{p} \delta_{n}\,^{q}-\Gamma_{n}\,^{q} \delta_{m}\,^{p}+\Gamma_{n}\,^{p} \delta_{m}\,^{q}+2\delta_{n}\,^{p}\,_{m}\,^{q}\)