Name: Rolf Mertig (email_not_shown)
Date: 03/01/12-03:08:12 PM Z

This is just how /. (ReplaceAll) works.
>From http://reference.wolfram.com/mathematica/ref/ReplaceAll.html

ReplaceAll looks at each part of expr, tries all the rules on it, and then goes on to the next part of expr. The first rule that applies to a particular part is used; no further rules are tried on that part, or on any of its subparts.

```---
So, all what is need is to change /. to //. :
In[1]:= !!pol2.m
<<HighEnergyPhysics`FeynCalc`
Print[" "];
(*
{\$AL[1], \$AL[2]} = {mu, nu};  (* \$AL are predefined dummy indices *)
*)
FI; IP = InputForm;
constraint = {
FeynCalcInternal[
FV[e2, muPAT] FV[e2, nuPAT] ->
PolarizationSum[mu, nu, p2]] /. {muPAT :> mu_, nuPAT :> nu_},
FeynCalcInternal[
FV[e4, muPAT] FV[e4, nuPAT] ->
PolarizationSum[mu, nu, p4]] /. {muPAT :> mu_, nuPAT :> nu_}};
M = SP[p1, e2]^2 SP[p2, e4]^2
tmp = Uncontract[Expand[M], e2, e4, Pair -> All, Unique -> False];
Print[" "];
Print["check constraint : ", IP@constraint];
Print[" "];
Print["contract and using the constraint : ",
IP@FeynCalcExternal@Contract[tmp //. constraint]]
In[1]:= <<pol2.m
FeynCalc 8.1.0 Type ?FeynCalc for help or visit http://www.feyncalc.org/
\$PrePrint is set to FeynCalcForm. Use FI and FC to change the display format.
FeynArts 3.4 patched for use with FeynCalc

check constraint : {Pair[LorentzIndex[mu_], Momentum[e2]]*
Pair[LorentzIndex[nu_], Momentum[e2]] ->
-Pair[LorentzIndex[mu], LorentzIndex[nu]] +
(Pair[LorentzIndex[mu], Momentum[p2]]*
Pair[LorentzIndex[nu], Momentum[p2]])/Pair[Momentum[p2], Momentum[p2]]\
, Pair[LorentzIndex[mu_], Momentum[e4]]*
Pair[LorentzIndex[nu_], Momentum[e4]] ->
-Pair[LorentzIndex[mu], LorentzIndex[nu]] +
(Pair[LorentzIndex[mu], Momentum[p4]]*
Pair[LorentzIndex[nu], Momentum[p4]])/Pair[Momentum[p4], Momentum[p4]]}

contract and using the constraint :
(-SP[p1, p1] + SP[p1, p2]^2/SP[p2, p2])*
(-SP[p2, p2] + SP[p2, p4]^2/SP[p4, p4])
```

This archive was generated by hypermail 2b29 : 07/23/18-09:20:01 AM Z CEST