feynlag.pheno.lorentz.reduce_projectors¶
- feynlag.pheno.lorentz.reduce_projectors(expr, chirality, n_free_indices=0, n_momenta=2)[source]¶
Reduce a chiral chain to a γ₅-free trace times a scalar factor.
P_{L,R} = (1 ∓ γ₅)/2, and SymPy’s tensor engine has no γ₅ at all. The reduction used here is exact algebra up to one dropped term:projectors are moved to one end with
P_{L,R} γ^μ = γ^μ P_{R,L},P² = Pcollapses repeats andP_L P_R = 0kills mixed chains (classified upstream byclassify_gamma()),a single remaining projector gives
Tr[X P_{L,R}] = ½ Tr[X] ∓ ½ Tr[X γ₅].
The
Tr[X γ₅]term is a totally antisymmetric ε tensor. It vanishes identically for a 1→2 decay: ε needs four independent four-vectors, but a two-body final state supplies only two independent momenta (P = p₁ + p₂is not independent), and any leftover free index is contracted with a polarization sum that is symmetric in its two indices. So the ε term is dropped — but only after checking that precondition.- Parameters:
expr – the γ₅-free chain (the projector is carried in
chirality, not insideexpr).chirality –
'L','R'orNone.n_free_indices – uncontracted Lorentz indices that will meet a symmetric polarization sum.
n_momenta – independent momenta in the process (2 for a 1→2 decay).
- Returns:
(expr, factor)— traceexprand multiply byfactor.- Raises:
NotImplementedError – if the ε term is not provably zero. This is a hard guard, not a comment: a later 1→3 or 2→2 extension fails loudly here instead of silently returning a wrong number.