DiracSimplify
DiracSimplify[exp]
simplifies products of Dirac matrices
in exp
and expands noncommutative products. The
simplifications are done by applying Contract
,
DiracEquation
, DiracTrick
,
SpinorChainTrick
and SirlinSimplify
. All γ5, γ6 and γ7 are moved to the right. The order of
the other Dirac matrices is not changed, unless the option DiracOrder is
set to True
.
See also
Overview, Contract, DiracEquation, DiracSigmaExplicit, DiracSubstitute5, DiracSubstitute67, DiracGamma, DiracGammaExpand, DiracOrder, DiracTrace, DiracTraceEvaluate, DiracTrick, FCDiracIsolate, SirlinSimplify, SpinorChainTrick, SpinorChainEvaluate, ToDiracGamma67.
Examples
Simplify a 4-dimensional Dirac matrix chain with a dummy Lorentz
index
GA[\[Mu], \[Nu], \[Mu]]
DiracSimplify[%]
γˉμ.γˉν.γˉμ
−2γˉν
Another common simplification concerns Dirac matrices contracted to
the same 4-vector
GS[p] . GS[p]
DiracSimplify[%]
(γˉ⋅p).(γˉ⋅p)
p2
Unlike DiracTrick
, DiracSimplify
also
carries out noncommutative expansions
GS[a + b] . GS[p] . GS[c + d] . GS[p]
DiracSimplify[%]
(γˉ⋅(a+b)).(γˉ⋅p).(γˉ⋅(c+d)).(γˉ⋅p)
2(c⋅p)(γˉ⋅a).(γˉ⋅p)−p2(γˉ⋅a).(γˉ⋅c)+2(d⋅p)(γˉ⋅a).(γˉ⋅p)−p2(γˉ⋅a).(γˉ⋅d)+2(c⋅p)(γˉ⋅b).(γˉ⋅p)−p2(γˉ⋅b).(γˉ⋅c)+2(d⋅p)(γˉ⋅b).(γˉ⋅p)−p2(γˉ⋅b).(γˉ⋅d)
DiracTrick[GS[a + b] . GS[p] . GS[c + d] . GS[p]]
2(γˉ⋅(a+b)).(γˉ⋅p)((c+d)⋅p)−p2(γˉ⋅(a+b)).(γˉ⋅(c+d))
Some of those expansions can be inhibited via the option
Expanding
.
DiracSimplify[GS[a + b] . GS[p] . GS[c + d] . GS[p], Expanding -> False]
−p2(γˉ⋅a+γˉ⋅b).(γˉ⋅c+γˉ⋅d)+2(c⋅p)(γˉ⋅a+γˉ⋅b).(γˉ⋅p)+2(d⋅p)(γˉ⋅a+γˉ⋅b).(γˉ⋅p)
The matrix chain may also live in D
dimensions
GAD[\[Mu], \[Nu], \[Mu]]
DiracSimplify[%]
γμ.γν.γμ
2γν−Dγν
GSD[p] . GAD[\[Alpha], \[Beta]] . GSD[p]
DiracSimplify[%]
(γ⋅p).γα.γβ.(γ⋅p)
p2γα.γβ+2pαγβ.(γ⋅p)−2pβγα.(γ⋅p)
GAD @@ Join[{\[Mu]}, Table[Subscript[\[Nu], i], {i, 6}], {\[Mu]}]
DiracSimplify[%]
γμ.γν1.γν2.γν3.γν4.γν5.γν6.γμ
−12γν1.γν2.γν3.γν4.γν5.γν6+Dγν1.γν2.γν3.γν4.γν5.γν6+4γν3.γν4.γν5.γν6gν1ν2−4γν2.γν4.γν5.γν6gν1ν3+4γν2.γν3.γν5.γν6gν1ν4−4γν2.γν3.γν4.γν6gν1ν5+4γν2.γν3.γν4.γν5gν1ν6+4γν1.γν4.γν5.γν6gν2ν3−4γν1.γν3.γν5.γν6gν2ν4+4γν1.γν3.γν4.γν6gν2ν5−4γν1.γν3.γν4.γν5gν2ν6+4γν1.γν2.γν5.γν6gν3ν4−4γν1.γν2.γν4.γν6gν3ν5+4γν1.γν2.γν4.γν5gν3ν6+4γν1.γν2.γν3.γν6gν4ν5−4γν1.γν2.γν3.γν5gν4ν6+4γν1.γν2.γν3.γν4gν5ν6
-1/2 GA[5] . (GAD[\[Mu]] . GSD[v] - FVD[v, \[Mu]]) FVD[v, \[Mu]]
DiracSimplify[%]
−21vμγˉ5.(γμ.(γ⋅v)−vμ)
0
γ5 and the chirality
projectors are always moved to the right
GA[5, \[Mu], \[Nu]]
DiracSimplify[%]
γˉ5.γˉμ.γˉν
γˉμ.γˉν.γˉ5
GA[6] . GS[p + q]
DiracSimplify[%]
γˉ6.(γˉ⋅(p+q))
(γˉ⋅p).γˉ7+(γˉ⋅q).γˉ7
The properties of the chirality projectors are taken into account
without substituting explicit expressions for γ6 and γ7.
GA[\[Mu]] . (c1 GA[6] + c2 GA[7]) . (GA[p] + m) . (c3 GA[6] + c4 GA[7]) . GA[\[Mu]]
DiracSimplify[%]
γˉμ.(c1γˉ6+c2γˉ7).(γˉp+m).(c3γˉ6+c4γˉ7).γˉμ
4c1c3mγˉ7−2c1c4γˉp.γˉ6−2c2c3γˉp.γˉ7+4c2c4mγˉ6
Moreover, 21(1±γ5) is automatically replaced by γ6/7.
(1/2 - GA[5]/2) . (-((a + GS[p + q])/b)) . (1/2 + GA[5]/2)
DiracSimplify[%]
(21−2γˉ5).(−bγˉ⋅(p+q)+a).(2γˉ5+21)
−b(γˉ⋅p).γˉ6−b(γˉ⋅q).γˉ6
Suitable combinations of γ5
will not be rewritten in terms of chirality projectors, if the option
ToDiracGamma67
is set to False
.
DiracSimplify[(1/2 - GA[5]/2) . (-((a + GS[p + q])/b)) . (1/2 + GA[5]/2),
ToDiracGamma67 -> False]
−2bγˉ⋅p−2b(γˉ⋅p).γˉ5−2bγˉ⋅q−2b(γˉ⋅q).γˉ5
However, it the final result must contain only γ5 but not γ6 or γ7, it is better to invoke the option
DiracSubstitute67
. This way DiracSimplify can perform more
intermediate simplifications before presenting the final result.
DiracSimplify[(1/2 - GA[5]/2) . (-((a + GS[p + q])/b)) . (1/2 + GA[5]/2),
DiracSubstitute67 -> True]
−2bγˉ⋅p−2b(γˉ⋅p).γˉ5−2bγˉ⋅q−2b(γˉ⋅q).γˉ5
It is also possible to eliminate γ5 by rewriting it in terms of the
chirality projectors
DiracSimplify[GA[5, \[Mu], \[Nu]], DiracSubstitute5 -> True]
γˉμ.γˉν.γˉ6−γˉμ.γˉν.γˉ7
The Dirac equation is routinely used to simplify closed spinor
chains.
(SpinorVBar[Subscript[p, 2], Subscript[m, 2]] . (GS[Subscript[p, 1]] +
Subscript[m, 1]) . SpinorU[Subscript[p, 1], Subscript[m, 1]])
DiracSimplify[%]
vˉ(p2,m2).(γˉ⋅p1+m1).u(p1,m1)
2m1(φ(−p2,m2)).(φ(p1,m1))
SpinorVBar[p] . GS[p] . SpinorU[q]
DiracSimplify[%]
vˉ(p).(γˉ⋅p).u(q)
0
Use the option DiracEquation
to deactivate this type of
simplifications.
DiracSimplify[SpinorVBar[p] . GS[p] . SpinorU[q], DiracEquation -> False]
(φ(−p)).(γˉ⋅p).(φ(q))
Suitable products of 4-dimensional
spinor chains are simplified using Sirlin’s identities
(SpinorUBar[Subscript[p, 3], Subscript[m, 3]] . GA[\[Mu], \[Rho], \[Nu], 6] . SpinorU[Subscript[p, 1],
Subscript[m, 1]] SpinorUBar[Subscript[p, 4],
Subscript[m, 4]] . GA[\[Mu], \[Tau], \[Nu], 6] . SpinorU[Subscript[p, 2], Subscript[m, 2]])
DiracSimplify[%]
uˉ(p3,m3).γˉμ.γˉρ.γˉν.γˉ6.u(p1,m1)uˉ(p4,m4).γˉμ.γˉτ.γˉν.γˉ6.u(p2,m2)
(φ(p3,m3)).γˉμ.γˉρ.γˉν.γˉ6.(φ(p1,m1))(φ(p4,m4)).γˉμ.γˉτ.γˉν.γˉ6.(φ(p2,m2))
The applications of Sirlin’s identities can be disabled by setting
the option SirlinSimplify
to False
.
DiracSimplify[SpinorUBar[Subscript[p, 3], Subscript[m, 3]] . GA[\[Mu], \[Rho], \[Nu],
6] . SpinorU[Subscript[p, 1], Subscript[m, 1]]*
SpinorUBar[Subscript[p, 4], Subscript[m, 4]] . GA[\[Mu], \[Tau], \[Nu],
6] . SpinorU[Subscript[p, 2], Subscript[m, 2]], SirlinSimplify -> False]
(φ(p3,m3)).γˉμ.γˉρ.γˉν.γˉ6.(φ(p1,m1))(φ(p4,m4)).γˉμ.γˉτ.γˉν.γˉ6.(φ(p2,m2))
Even when the usage of Sirlin’s identities is disabled, DiracSimplify
will still try to perform some simplifications on the spinor chains,
e.g. by canonicalizing the dummy indices.
(c1 SpinorUBar[Subscript[p, 3], Subscript[m, 3]] . GA[\[Mu], \[Rho], \[Nu], 6] . SpinorU[Subscript[p,
1], Subscript[m, 1]] SpinorUBar[Subscript[p, 4], Subscript[m,
4]] . GA[\[Mu], \[Tau], \[Nu], 6] . SpinorU[Subscript[p, 2], Subscript[m, 2]] +
c2 SpinorUBar[Subscript[p, 3], Subscript[m, 3]] . GA[\[Alpha], \[Rho],
\[Nu], 6] . SpinorU[Subscript[p, 1], Subscript[m, 1]] SpinorUBar[Subscript[p,
4], Subscript[m, 4]] . GA[\[Alpha], \[Tau], \[Nu], 6] . SpinorU[Subscript[p, 2], Subscript[m, 2]])
DiracSimplify[%, SirlinSimplify -> False] // Factor
c1uˉ(p3,m3).γˉμ.γˉρ.γˉν.γˉ6.u(p1,m1)uˉ(p4,m4).γˉμ.γˉτ.γˉν.γˉ6.u(p2,m2)+c2uˉ(p3,m3).γˉα.γˉρ.γˉν.γˉ6.u(p1,m1)uˉ(p4,m4).γˉα.γˉτ.γˉν.γˉ6.u(p2,m2)
c1(φ(p3,m3)).γˉμ.γˉρ.γˉν.γˉ6.(φ(p1,m1))(φ(p4,m4)).γˉμ.γˉτ.γˉν.γˉ6.(φ(p2,m2))+c2(φ(p3,m3)).γˉα.γˉρ.γˉν.γˉ6.(φ(p1,m1))(φ(p4,m4)).γˉα.γˉτ.γˉν.γˉ6.(φ(p2,m2))
Setting SpinorChainTrick
to `False disables this
behavior.
DiracSimplify[c1 SpinorUBar[Subscript[p, 3], Subscript[m, 3]] . GA[\[Mu], \[Rho],
\[Nu], 6] . SpinorU[Subscript[p, 1], Subscript[m, 1]] SpinorUBar[Subscript[p,
4], Subscript[m, 4]] . GA[\[Mu], \[Tau], \[Nu], 6] . SpinorU[Subscript[p, 2],
Subscript[m, 2]] + c2 SpinorUBar[Subscript[p, 3], Subscript[m,
3]] . GA[\[Alpha], \[Rho], \[Nu], 6] . SpinorU[Subscript[p, 1], Subscript[m,
1]] SpinorUBar[Subscript[p, 4], Subscript[m, 4]] . GA[\[Alpha], \[Tau],
\[Nu], 6] . SpinorU[Subscript[p, 2], Subscript[m, 2]],
SirlinSimplify -> False, SpinorChainTrick -> False]
c1(φ(p3,m3)).γˉμ.γˉρ.γˉν.γˉ6.(φ(p1,m1))(φ(p4,m4)).γˉμ.γˉτ.γˉν.γˉ6.(φ(p2,m2))+c2(φ(p3,m3)).γˉα.γˉρ.γˉν.γˉ6.(φ(p1,m1))(φ(p4,m4)).γˉα.γˉτ.γˉν.γˉ6.(φ(p2,m2))
DiracSimplify
will not reorder Dirac matrices
lexicographically, but can be forced to do so via the option
DiracOrder
.
DiracSimplify[GA[\[Nu], \[Mu]]]
DiracSimplify[GA[\[Nu], \[Mu]], DiracOrder -> True]
γˉν.γˉμ
2gˉμν−γˉμ.γˉν
Setting InsideDiracTrace
to True
$ makes the
function assume that it is acting inside a Dirac trace. For instance,
chains with an odd number of Dirac matrices will be set to zero.
GA[\[Mu], \[Nu], \[Rho]]
DiracSimplify[%, InsideDiracTrace -> True]
γˉμ.γˉν.γˉρ
0
Yet, it will not explicitly calculate the trace
GA[\[Mu], \[Nu], \[Rho], \[Sigma]]
DiracSimplify[%, InsideDiracTrace -> True]
γˉμ.γˉν.γˉρ.γˉσ
γˉμ.γˉν.γˉρ.γˉσ
Since FeynCalc 9.3, DiracSimplify
will automatically
evaluate Dirac traces in the input expression
DiracTrace[GA[\[Mu], \[Nu], \[Rho], \[Sigma]]]
DiracSimplify[%]
tr(γˉμ.γˉν.γˉρ.γˉσ)
4gˉμσgˉνρ−4gˉμρgˉνσ+4gˉμνgˉρσ
DiracTrace[(-GSD[q] + SMP["m_e"]) . GAD[\[Nu]] . (GSD[p - q] + SMP["m_e"]) . GAD[\[Mu]]]
DiracSimplify[%]
tr((me−γ⋅q).γν.(me+γ⋅(p−q)).γμ)
4me2gμν+4gμν(p⋅q)−4q2gμν−4pνqμ−4pμqν+8qμqν
This will not happen if the option DiracTraceEvaluate
is
set to False
. However, DiracSimplify
will
still perform some simplifications inside the trace, without evaluating
it explicitly.
DiracSimplify[DiracTrace[(-GSD[q] + SMP["m_e"]) . GAD[\[Nu]] . (GSD[p - q] +
SMP["m_e"]) . GAD[\[Mu]]] , DiracTraceEvaluate -> False]
tr(me2γν.γμ+meγν.(γ⋅p).γμ−meγν.(γ⋅q).γμ−me(γ⋅q).γν.γμ−(γ⋅q).γν.(γ⋅p).γμ−q2γν.γμ+2qν(γ⋅q).γμ)
Set DiracTrace
to False
if you want
DiracSimplify
not to touch the Dirac traces.
DiracSimplify[DiracTrace[(-GSD[q] + SMP["m_e"]) . GAD[\[Nu]] . (GSD[p - q] +
SMP["m_e"]) . GAD[\[Mu]]] , DiracTraceEvaluate -> False, DiracTrace -> False]
tr((me−γ⋅q).γν.(me+γ⋅(p−q)).γμ)
When doing calculations at one loop and above, you may encounter
expressions that contain D- and 4-dimensional objects.
Although DiracSimplify
can handle such terms
effortlessly, it will not do so unless you certify that you fully
understand what you are doing: being sloppy with the dimensions easily
leads to inconsistencies and wrong results!
GAD[\[Mu]] . (GA[p] + m) . GAD[\[Mu]]
DiracSimplify[%]
γμ.(γˉp+m).γμ

$Aborted
By default, FeynCalc uses the naive dimensional regularization (NDR)
scheme, where all Dirac matrices are taken to be D-dimensional. Therefore, in NDR you may not
have mixtures of Dirac matrices living in D and 4
dimensions. However, such expressions are possible in the
t’Hooft-Veltman-Breitenlohner-Maison (BMHV) scheme.
FCSetDiracGammaScheme["BMHV"];
DiracSimplify[GAD[\[Mu]] . (GA[p] + m) . GAD[\[Mu]]]
−Dγˉp+2γˉp+Dm
FCSetDiracGammaScheme["NDR"];
The BMHV scheme is a special prescription for handling γ5 in dimensional regularization. Do
not activate this scheme mindlessly just to get rid of errors from
DiracSimplify! If you are doing a calculation in NDR or a calculation
that does not involve γ5, better
make sure that your input expressions are correctly written to be D-dimensional objects.
Traces that contain an odd number of γ5 or chirality projectors cannot be
calculated unambiguously in NDR. To avoid inconsistencies, DiracTrace
will refuse to evaluate such traces in NDR.
DiracTrace[GAD[\[Mu], \[Nu], \[Rho], \[Sigma], \[Alpha], \[Beta]] . GA[5]]
DiracSimplify[%]
tr(γμ.γν.γρ.γσ.γα.γβ.γˉ5)
tr(γμ.γν.γρ.γσ.γα.γβ.γˉ5)
Such traces can be consistently calculated in the BMHV scheme. Our
scheme choice as of course also possible, but those are not implemented
in FeynCalc.
FCSetDiracGammaScheme["BMHV"];
DiracSimplify[DiracTrace[GAD[\[Mu], \[Nu], \[Rho], \[Sigma], \[Alpha], \[Beta]] . GA[5]]]
−4igαβϵˉμνρσ−4igαμϵˉβνρσ+4igανϵˉβμρσ−4igαρϵˉβμνσ+4igασϵˉβμνρ+4igβμϵˉανρσ−4igβνϵˉαμρσ+4igβρϵˉαμνσ−4igβσϵˉαμνρ−4igμνϵˉαβρσ+4igμρϵˉαβνσ−4igμσϵˉαβνρ−4igνρϵˉαβμσ+4igνσϵˉαβμρ−4igρσϵˉαβμν
FCSetDiracGammaScheme["NDR"];
Keep in mind that the BMHV scheme violates axial Ward identities and
requires special model-dependent counter-terms to restore those.
Therefore, just setting FCSetDiracGammaScheme["BMHV"]
does
not magically resolve all your troubles with γ5 in D-dimensions. The proper treatment of γ5 in dimensional regularization is an
intricate issue that cannot be boiled down to a simple and universal
recipe. FeynCalc merely carries out the algebraic operations that you
request, but it is still your task to ensure that what you do makes
sense.
Since FeynCalc 9.3 it is also possible to simplify Dirac matrices
with Cartesian or temporal indices. However, the support of
nonrelativistic calculations is a very new feature, so that things may
not work as smooth as they do for manifestly Lorentz covariant
expressions.
CGA[i] . CGA[i]
DiracSimplify[%]
γi.γi
−3
CGA[i] . CGS[p] . CGA[j] . CGS[p + q]
DiracSimplify[%]
γi.(γ⋅p).γj.(γ⋅(p+q))
p2γi.γj−2pjγi.(γ⋅p)+γi.(γ⋅p).γj.(γ⋅q)
CGA[i] . CGS[p] . CGA[j] . CGS[p + q] KD[i, j]
DiracSimplify[%]
δˉijγi.(γ⋅p).γj.(γ⋅(p+q))
(γ⋅p).(γ⋅q)−p2
TGA[] . CGA[i] . TGA[]
DiracSimplify[%]
γˉ0.γi.γˉ0
−γi
DiracTrace[CGAD[i, j, k, l]]
DiracSimplify[%]
tr(γi.γj.γk.γl)
4δilδjk−4δikδjl+4δijδkl
For performance reasons DiracSimplify
will not
canonically order Dirac matrices and canonicalize Lorentz/Cartesian
indices by default. However, amplitudes involving 4-fermion operators
may require such additional simplifications. In this case they should
explicitly activated by the user. Of course, this will somewhat slow
down the evaluation.
ex = (Spinor[-Momentum[p1, D], mb, 1] . GAD[\[Mu]] . GA[7] . GAD[\[Nu]] . GAD[\[Alpha]] .
GAD[\[Beta]] . GAD[\[Delta]] . GA[7] . Spinor[-Momentum[p4, D], 0, 1] Spinor[Momentum[p3, D], 0,
1] . GAD[\[Alpha]] . GAD[\[Beta]] . GAD[\[Delta]] . GA[7] . GAD[\[Nu]] . GAD[\[Mu]] .
GA[7] . Spinor[Momentum[p2, D], 0, 1])
DiracSimplify[ex]
(φ(p3)).γα.γβ.γδ.γˉ7.γν.γμ.γˉ7.(φ(p2))(φ(−p1,mb)).γμ.γˉ7.γν.γα.γβ.γδ.γˉ7.(φ(−p4))
(φ(p3)).γα.γβ.γδ.γν.γμ.γˉ7.(φ(p2))(φ(−p1,mb)).γμ.γν.γα.γβ.γδ.γˉ7.(φ(−p4))
DiracSimplify[ex, DiracOrder -> True, LorentzIndexNames -> {i1, i2, i3, i4, i5}]
−24D2(φ(p3)).γi1.γˉ7.(φ(p2))(φ(−p1,mb)).γi1.γˉ7.(φ(−p4))+14D(φ(p3)).γi1.γi2.γi3.γˉ7.(φ(p2))(φ(−p1,mb)).γi1.γi2.γi3.γˉ7.(φ(−p4))+112D(φ(p3)).γi1.γˉ7.(φ(p2))(φ(−p1,mb)).γi1.γˉ7.(φ(−p4))−(φ(p3)).γi1.γi2.γi3.γi4.γi5.γˉ7.(φ(p2))(φ(−p1,mb)).γi1.γi2.γi3.γi4.γi5.γˉ7.(φ(−p4))−36(φ(p3)).γi1.γi2.γi3.γˉ7.(φ(p2))(φ(−p1,mb)).γi1.γi2.γi3.γˉ7.(φ(−p4))−64(φ(p3)).γi1.γˉ7.(φ(p2))(φ(−p1,mb)).γi1.γˉ7.(φ(−p4))
DiracSimplify
automatically evaluates suitable spinor
products with equal momenta, e.g.
ex = SpinorUBar[p, m] . SpinorU[p, m]
DiracSimplify[ex]
uˉ(p,m).u(p,m)
2m
This behavior can be turned off by setting the option
SpinorChainEvaluate
to False
DiracSimplify[ex, SpinorChainEvaluate -> False]
(φ(p,m)).(φ(p,m))