expressions[2] = expression(simpleTensor(gamma5Name, createSimple(null,
setType(matrixType, 0x80000000 | 0),
setType(matrixType, 0))),
Complex.ZERO);
subs[0] = new SubstitutionTransformation(expressions);
expressions = new Expression[2];
//Tr[G_a*G_b*G_c*G_d*G5] = -4*I*e_abcd
ProductBuilder pb = new ProductBuilder(0, 5);
for (int i = 0; i < 4; ++i) {
pb.put(simpleTensor(gammaName,
createSimple(null,
setType(metricType, i),
setType(matrixType, 0x80000000 | i),
setType(matrixType, i + 1))));
}
pb.put(simpleTensor(gamma5Name,
createSimple(null,
setType(matrixType, 0x80000000 | 4),
setType(matrixType, 0))));
expressions[0] = expression(pb.build(),
multiply(Complex.MINUS_ONE, Complex.FOUR, Complex.IMAGE_ONE,
simpleTensor(leviCivitaName, createSimple(null, 0, 1, 2, 3))));
//Chiholm-Kahane identitie:
//G_a*G_b*G_c = g_ab*G_c-g_ac*G_b+g_bc*G_a-I*e_abcd*G5*G^d
Tensor lhs = multiply(
simpleTensor(gammaName, createSimple(null,
setType(metricType, 0),
setType(matrixType, 0x80000000),
setType(matrixType, 1))),
simpleTensor(gammaName, createSimple(null,
setType(metricType, 1),
setType(matrixType, 1 | 0x80000000),
setType(matrixType, 2))),
simpleTensor(gammaName, createSimple(null,
setType(metricType, 2),
setType(matrixType, 2 | 0x80000000),
setType(matrixType, 3)))
);
SumBuilder rhs = new SumBuilder();
Tensor temp;
for (int i = 0; i < 3; ++i) {
temp = multiply(simpleTensor(gammaName,
createSimple(null,
setType(metricType, i),
setType(matrixType, 0x80000000),
setType(matrixType, 3))),
i == 0 ? createMetric(setType(metricType, 1), setType(metricType, 2))
: i == 1 ? createMetric(setType(metricType, 0), setType(metricType, 2))
: createMetric(setType(metricType, 0), setType(metricType, 1)));
rhs.put(i == 1 ? negate(temp) : temp);
}
temp = multiply(Complex.MINUS_ONE, Complex.IMAGE_ONE,
simpleTensor(leviCivitaName, createSimple(null,
setType(metricType, 0),
setType(metricType, 1),
setType(metricType, 2),
setType(metricType, 3))),
simpleTensor(gamma5Name, createSimple(null,
setType(matrixType, 0x80000000),
setType(matrixType, 1))),
simpleTensor(gammaName, createSimple(null,
setType(metricType, 0x80000000 | 3),
setType(matrixType, 1 | 0x80000000),
setType(matrixType, 3))));
rhs.put(temp);
expressions[1] = expression(lhs, rhs.build());
subs[1] = new SubstitutionTransformation(expressions);
cache5.put(key, subs);
return subs;
}