# Feyncalc remove higher-order TensorFunction terms from expression

I am looking for a way to reduce the following expression:

cc[\[Nu], \[Mu]_] := TensorFunction[{c, "S"}, \[Nu], \[Mu]]

G[\[Mu]_, \[Nu]_] := GA[\[Mu]]
+ Contract[cc[\[Nu], \[Mu]].DiracMatrix[\[Nu]]]

A = G[\[Alpha], \[Delta]].G[\[Mu], \[Omega]].DiracMatrix.G[\[Beta],
[Lambda]].G[\[Nu], \[Epsilon]]


When I calculate A, it has fourth-order terms in cc[[Nu], [Mu]]. How to I only keep first-order terms in cc[[Nu], [Mu]], or at least can order them so they can be used in other expressions?

## 1 Answer

Do you mean something like this?

cc[\[Nu]_, \[Mu]_] := TensorFunction[{c, "S"}, \[Nu], \[Mu]]
G[\[Mu]_, \[Nu]_] := GA[\[Mu]] + Contract[cc[\[Nu], \[Mu]].GA[\[Nu]]]
A = G[\[Alpha], \[Delta]].G[\[Mu], \[Omega]].GA.G[\[Beta], \[Lambda]].G[\[Nu], \[Epsilon]]

DotSimplify[A] /. c[x__] -> scaling c[x]

Series[%, {scaling, 0, 2}] // Normal // ReplaceAll[#, scaling -> 1] & • Thanks, this is perfect! Would you mind explaining in a little bit more detail what is exactly going on in your additions? For example c[x__] -> scaling c[x] and ReplaceAll[#, scaling -> 1] & ? – nsbd88 Mar 15 '18 at 16:45
• Also, why must one use DotSimplify? I noticed this only works when using this option in this answer instead of just A /. c[x__] -> scaling c[x] – nsbd88 Mar 15 '18 at 18:52
• You want to get rid of higher-order terms but Series obviously cannot expand in terms of tensor functions or other user-defined objects. So the simplest workaround is to multiply your function by a scaling parameter and do a series expansion in that parameter. After the expansion you can set the parameter to unity. – vsht Mar 16 '18 at 6:25
• DotSimplify is needed because Series does not work well for cases where the expansion parameter is inside a chain of noncommutative objects. DotSimplify pulls scaling out of the Dot after which you can do a proper expansion. – vsht Mar 16 '18 at 6:28