FunctionalD

Description

FunctionalD[expr, {QuantumField[name, {mu}, {a}][p], ...}] calculates the functional derivative of expr with respect to the field list (with incoming momenta p, etc.) and does the fourier transform. FunctionalD[expr, {QuantumField[name, {mu},{a}], ...}] calculates the functional derivate and does partial integration but omits the x-space delta functions.

FunctionalD is a low level function used in FeynRule.

See also:  FeynRule, QuantumField.

Examples

Instead of the usual δϕ(x)/δϕ(
            y) = (δ^((D)))(x - y) the arguments and the δ function are omitted, i.e., for the program for simplicity: δϕ/δϕ = 1

FunctionalD[QuantumField[ϕ], QuantumField[ϕ]]

FunctionalD[QuantumField[ϕ]^2, QuantumField[ϕ]]

Instead of the usual (δ (∂_μ) ϕ(
                  x))/δϕ(
            y) = (∂_μ) (δ^((D)))(x - y) the arguments are omitted, and the (∂_μ)operator is specified by default to be an integration by parts operator, i.e., the right hand side will be just -(∂_μ), or, more precisely (by default) -(Subscript[(∂^ →) , μ]).

FunctionalD[QuantumField[PartialD[μ], ϕ], 
      QuantumField[ϕ]]

S[ϕ]  = 
      1/2 ∫ (d^D) 
            x [ (∂_μ) ϕ(
                      x) (∂^μ) ϕ(
                      x) - (m^2) ϕ(x) ϕ(
                    y)]

s[ϕ] = (QuantumField[PartialD[μ], ϕ] . 
              QuantumField[PartialD[μ], ϕ] - 
            m^2 QuantumField[ϕ] . QuantumField[ϕ])/2

FunctionalD[s[ϕ], QuantumField[ϕ]]

S[
        A]  =  -∫ (d^D) 
            x (1/4) (Subscript[F, a]^μ)ν(x) (Subscript[F, μ])νa(
              x)

First approach

F1 = 
      FieldStrength[μ, ν, a, {A, b, c}, 1, 
        Explicit -> True]

F2 = 
      FieldStrength[μ, ν, a, {A, d, e}, 1, 
        Explicit -> True]

S[A] = -1/4 F1 . F2

In order to derive the equation of motion the functional derivative of S with respect to (Subscript[A, σ]^g)has to be set to zero. Bearing in mind that for FeynCalc we have to be precise as to where which operators (coming from the substitution of the derivative of the δ function) act:, act with the functional derivative operator on the first field strength:

0 = (δ  
                                  S)/(δ  (Subscript[A, σ]^g)(
                                    y))=-2/4∫(d^D) x (δ/(δ  (Subscript[A, σ]^g)(
                          y)) (Subscript[F, μ])νa(x)) (Subscript[F, a]^(,μν))(x)

See what happens with just(δ  S[A])/(δ  (Subscript[A, σ]^g)).

Ag = QuantumField[A, {σ}, {g}]

t1 = FunctionalD[F1, Ag]

In order to minimize the number of dummy indices, replace b -> c.

t1  =  t1  /.  b -> c

Instead of inserting the definition for the second (Subscript[F, a]^μ)ν, introduce a QuantumField object with antisymmetry built into the Lorentz indices:

F /:  QuantumField[pard___, F, β_, α_, 
        s_] := -QuantumField[pard, F, α, β, 
            s] /; ! OrderedQ[{β, α}]

QuantumField[F, {μ, ν}, {a}]

% /. {μ :> ν, ν :> μ}

t2 = 
      Contract[ExpandPartialD[-1/2 t1 . 
                QuantumField[F, LorentzIndex[μ], LorentzIndex[ν], 
                  SUNIndex[a]]]] /. Dot -> Times

t3  =  t2  /.  ν -> μ

t4 = FCE[t3] /.  SUNF[a, c, g] -> -SUNF[g, c, a]

Since the variational derivative vanishes t4 implies that 0 = (Subscript[D, μ]) (Subscript[F, g]^μ)σ .

Second approach

It is of course also possible to do the functional deriviate on the S[A] with both field strength tensors inserted.

S[A]

r1 = FunctionalD[S[A], Ag]

This is just funcional derivatves and partial integration and simple contraction of indices. No attempt is made to rename dummy indices (since this is difficult in general ...).

With a general replacement rule only valid for commuting fields the color indices can be canonicalized a bit more. The idea is to use the commutative properties of the vector fields, and canonicalize the color indices by a trick. This function will work on any commuting product of fields.

Clear[symfun];

symfun[z_, fieldname_Symbol] := 
      Expand[SUNSimplify[
          FixedPoint[
            Collect2[DotSimplify[#1 /. 
                        Times -> 
                          Dot] /. (((qi___) . 
                              QuantumField[par1___, fieldname, li1_, sui1_] . 
                              QuantumField[par2___, fieldname, li2_, sui2_] . 
                              qf___ ) 
                          any_) :> ((qi . 
                                QuantumField[par1, A, li1, sui2] . 
                                QuantumField[par2, fieldname, li2, sui1] . 
                                qf ) (any /. {sui1 :> sui2, 
                                  sui2 :> 
                                    sui1})) /; (! (FreeQ2[
                                  any, {sui1, 
                                    su2}])) && ! (OrderedQ[{sui1, 
                                  sui2}]) /. Dot -> Times, 
                QuantumField] &, z, 42]]]

r2  =  symfun[r1, A]

r3 = r2 /. ν -> μ

Inspection reveals that still terms are the same. Gather the terms with two f 's:

twof = Select[r3, Count[#, SUNF[__]] === 2 &]

twofnew = (twof[[1]] + (twof[[2]] /. {b :> c, 
                  c :> b})) /. {a :> c, 
          c :> a}

r4  =  r3 - twof + twofnew

Check that this is now indeed the same as the t4 result from the first attempt.

t4

w0 = 
      RightPartialD[μ] . 
          FieldStrength[μ, σ, g, {A, a, b}, 1] + 
        QuantumField[A, LorentzIndex[μ], SUNIndex[c]] 
          FieldStrength[μ, σ, a, {A, b, d}, 1] 
          SUNF[g, c, a]

w1 = Explicit[w0]

w2 = ExpandPartialD[w1] /. Dot -> Times

dif1  =  w2 - r4

dif2 = symfun[dif1, A]

quod erat demonstrandum.

Unset[s[ϕ]]; Unset[S[A]]; 
    Clear[Ag, F1, F2, t1, t2, t3, t4, F, r1, r2, r3, r4, symfun, twof, 
      twofnew, w0, w1, w2, dif1, dif2, dif3]

Examples of funcional differentiation as used in FeynRule

This is a part of the QCD Lagrangian.

(Gstrong*QuantumField[GaugeField,  LorentzIndex[li1],   
                SUNIndex[si2]][]  .   QuantumField[GaugeField,  
                LorentzIndex[li2],    
                SUNIndex[si4]][]  .   QuantumField[
                PartialD[LorentzIndex[li1]],  GaugeField,    
                LorentzIndex[li2],  SUNIndex[si1]][]*  
          SUNF[SUNIndex[si1],  SUNIndex[si2],  SUNIndex[si4]])/
      4

FunctionalD[%,  {QuantumField[GaugeField, {μ}, {a}][
          p],  QuantumField[GaugeField, {ν}, {b}][
          q],  QuantumField[GaugeField, {ρ}, {c}][r]}]

Calc[% // Calc] // Factor