Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Magnetic moment of an electron (NLO)

In this section we derive the next-to-leading-order (NLO) order-α2\alpha^2 correction to the magnetic moment of an electron. This has been first attempted in 1950 by Karplus and Kroll, and first computed correctly in 1957 by Petermann and Sommerfield.

See for example hep-ph/9410248 for the expression for A2A_2:

A2=197144+34ζ(3)−12π2log⁡(2)+112π2=A_2 = \frac{197}{144} + \frac{3}{4} \zeta\left(3\right) - \frac{1}{2} \pi^{2} \operatorname{log}\left(2\right) + \frac{1}{12} \pi^{2} =
=−0.328478965579…= -0.328478965579\dots

Code:

>>> from sympy import zeta, S, log
>>> A_2 = S(197)/144 + zeta(2)/2 + 3*zeta(3)/4 - 3*zeta(2) * log(2)
>>> A_2.n()
-0.328478965579194

Plan of the calculation

Status: all five contributions reproduced. Each gets its own section below: the diagram, whether/how it must be renormalized, the computation strategy, the known analytic value, and our own SymPy derivation cross-checked numerically in Fortran. Diagrams IIe, IId, IIc and IIa are established analytically (with the hardest pieces of IIc and IIa identified from 11–14-digit quad-precision integrals), diagram I is confirmed numerically, and pixi run assembly proves in SymPy that the five values sum to A2A_2 with the infrared logarithms cancelling.

As in the LO section, the anomalous moment is the on-shell form factor

ae=F2(0),a_e = F_2(0),

now evaluated to order α2\alpha^2: we must compute the two-loop (fourth-order in ee) contributions to the vertex function Γμ(p′,p)\Gamma^\mu(p', p), project out F2F_2, and take q2→0q^2 \to 0.

Papers (all in this repo)

The Karplus–Kroll diagram classification

KK’s Fig. 1 groups the fourth-order diagrams for electron scattering off an external field into five classes:

So only class I and class II contribute. Within class II, IIb and IIf are self-energy corrections on the external electron legs — pure mass/field renormalization with no moment contribution (see below). The mirror images (reflection through the external vertex) of IIc and IId are not drawn by KK; their contribution is included by doubling. That leaves five independent contributions: I, IIa, IIc, IId, IIe.

Reference values (Petermann 1957)

In units of α2/π2\alpha^2/\pi^2, with the photon-mass IR regulator λ\lambda (petermann1957.pdf, eqs. (1)–(6)):

μI=16+1336π2+54ζ(3)−56π2log⁡2=−0.467645…\mu_\mathrm{I} = \frac16 + \frac{13}{36}\pi^2 + \frac54\zeta(3) - \frac56\pi^2\log 2 = -0.467645\ldots
μIIa=1148+π218=+0.777478…\mu_\mathrm{IIa} = \frac{11}{48} + \frac{\pi^2}{18} = +0.777478\ldots
μIIc=−6724+π218−12ζ(3)+13π2log⁡2−12log⁡λ2m2=−0.564021…−12log⁡λ2m2\mu_\mathrm{IIc} = -\frac{67}{24} + \frac{\pi^2}{18} - \frac12\zeta(3) + \frac13\pi^2\log 2 - \frac12\log\frac{\lambda^2}{m^2} = -0.564021\ldots - \frac12\log\frac{\lambda^2}{m^2}
μIId=1124−π218+12log⁡λ2m2=−0.089978…+12log⁡λ2m2\mu_\mathrm{IId} = \frac{11}{24} - \frac{\pi^2}{18} + \frac12\log\frac{\lambda^2}{m^2} = -0.089978\ldots + \frac12\log\frac{\lambda^2}{m^2}
μIIe=11936−π23=+0.015687…\mu_\mathrm{IIe} = \frac{119}{36} - \frac{\pi^2}{3} = +0.015687\ldots

The infrared logarithms cancel between IIc and IId, and the sum is exactly A2A_2:

>>> from sympy import Rational, pi, zeta, log, symbols, simplify, expand
>>> L = symbols("L")   # L = log(lambda^2/m^2)
>>> mu_I   = Rational(1,6) + Rational(13,36)*pi**2 + Rational(5,4)*zeta(3) \
...          - Rational(5,6)*pi**2*log(2)
>>> mu_IIa = Rational(11,48) + pi**2/18
>>> mu_IIc = -Rational(67,24) + pi**2/18 - zeta(3)/2 + pi**2*log(2)/3 - L/2
>>> mu_IId = Rational(11,24) - pi**2/18 + L/2
>>> mu_IIe = Rational(119,36) - pi**2/3
>>> expand(mu_I + mu_IIa + mu_IIc + mu_IId + mu_IIe)
-pi**2*log(2)/2 + pi**2/12 + 3*zeta(3)/4 + 197/144

For the record, KK’s two errors: their μI\mu_\mathrm{I} was too low by 132\frac{1}{32}, and their μIIc=−3.18\mu_\mathrm{IIc} = -3.18 was too low by

323−618π2+172π2log⁡2−1094ζ(3)=2.614,\frac{32}{3} - \frac{61}{8}\pi^2 + \frac{17}{2}\pi^2\log 2 - \frac{109}{4}\zeta(3) = 2.614,

which is how they arrived at the wrong total -2.973.

Caveat on per-diagram comparisons: the split of A2A_2 into the five μ\mu’s is scheme-dependent — it depends on how the UV subtractions (mass, vertex, charge renormalization) are apportioned among the diagrams, and on the IR regulator. To reproduce Petermann’s individual numbers we must follow the KK subtraction conventions (they renormalize each reducible diagram by subtracting the corresponding lower-order renormalization part, which is why e.g. the ladder IIa comes out UV- and IR-finite). Only the total is scheme-independent.

Conventions, regulators, renormalization

We keep the conventions of the LO section (Peskin–Schroeder-style, metric (+,−,−,−)(+,-,-,-)), with:

Note that KK/Petermann use the old “Pauli metric” conventions (iγp+mi\gamma p + m propagators), so a translation is needed when comparing intermediate formulas.

Renormalization structure at this order:

Master strategy for each diagram:

  1. Write the amplitude from the Feynman rules (as in the LO section).

  2. Project out F2(0)F_2(0) (magnetic projector / trace technique, so the whole computation reduces to Dirac traces and scalar integrals — done in SymPy).

  3. Combine denominators with Feynman parameters, do both loop-momentum integrations, leaving a multi-dimensional parametric integral.

  4. Evaluate: numerically first (Fortran, Gauss–Legendre / adaptive quadrature, compiled with flang -O3 -march=native -ffast-math), then analytically in SymPy by sequential one-variable integration in a well-chosen order (this is where ζ(3)\zeta(3), π2log⁡2\pi^2\log 2, π2\pi^2 arise, exactly as in Petermann’s hand calculation).

Tooling (see pixi.toml tasks): pixi run figures regenerates the diagram SVGs (code/feynman_diagrams.py); pixi run lo-sympy, pixi run lo-trace-sympy, pixi run iie-sympy, pixi run iid-sympy run the SymPy derivations; pixi run iie-fortran, pixi run iid-fortran compile and run the Fortran checks; pixi run g2-nlo runs the fast ones.

A SymPy practicality discovered on the way, used throughout: definite integrate() with a free parameter in the integrand is slow and sometimes wrong (branch issues) — e.g. it returns 12−r\frac12 - r for the massive photon kernel KK below, which is false. We therefore rationalize all square roots by substitution, take indefinite antiderivatives of partial-fractioned integrands, and evaluate the endpoint limits ourselves, checking every intermediate result numerically.

The pipeline (Dirac algebra, projector, loop integrals)

All diagrams are computed by one mechanical pipeline (code/dirac.py, code/loops.py):

Validation (pixi run lo-trace-sympy, code/g2_lo_trace.py): the whole LO derivation from raw Feynman rules runs through the pipeline and reproduces both Schwinger’s result and the massive-photon kernel:

Delta = -lam**2*y - lam**2*z + lam**2 + m**2*y**2 + 2*m**2*y*z + m**2*z**2   (at q^2 = 0)
UV structure OK: LUV in F1 only
F2 integrand (q^2=0, m=1): -e2*(y + z)*(y + z - 1)/(4*pi**2*(-lam**2*y - lam**2*z + lam**2 + y**2 + 2*y*z + z**2))
F2(0) = 2 * e2/(16 pi^2)  =>  a_e = alpha/(2 pi): True
K(8) from trace pipeline = 0.027280670780387366
K(8) direct              = 0.027280670780387367247
OK: massive-photon kernel reproduced

(The parametric integrand looks different from the LO section because the Feynman parameters are assigned to different propagators, but it integrates to the same kernel.)

Stage 0: LO vertex with a massive photon

LO vertex diagram

The pipeline is validated on the LO diagram, generalized to a photon of mass λ\lambda (needed both as the IR regulator and as the spectral mass in diagram IIe). Repeating the LO derivation with Δ=(1−z)2m2−q2xy+zλ2\Delta = (1-z)^2 m^2 - q^2 xy + z\lambda^2 gives, with t=λ2/m2t = \lambda^2/m^2:

F2(0;λ)=απK(t),K(t)=∫01z(1−z)2(1−z)2+zt dz,K(0)=12.F_2(0;\lambda) = \frac{\alpha}{\pi} K(t), \qquad K(t) = \int_0^1 \frac{z(1-z)^2}{(1-z)^2 + z t}\, \mathrm{d} z, \qquad K(0) = \frac12.

For t>4t > 4 (the spectral region needed below) the denominator factors rationally under the substitution

t=(1+y)2y,0<y≤1:(1−z)2+zt=(z+y)(zy+1)y.t = \frac{(1+y)^2}{y}, \quad 0 < y \le 1: \qquad (1-z)^2 + z t = \frac{(z+y)(zy+1)}{y}.

Running pixi run lo-sympy (code/g2_lo.py):

K(0) = 1/2  => a_e = alpha/(2 pi)
K(y) = (-y**2*(y - 1)*(2*y + 3) - 2*y*(y - 1)
        + log(((y + 1)/y)**(2*y**4*(y + 1))*(y + 1)**(-2*y - 2)))
       /(2*y**2*(y - 1))
K(t=8) direct  = 0.02728067078038736724734729
K(t=8) closed  = 0.02728067078038736724734729
OK: closed form matches numeric integration

Diagram IIe: vacuum polarization insertion — DONE

Diagram IIe

Topology: the LO vertex diagram with the internal photon corrected by an electron loop.

Renormalization: the electron loop Πμν\Pi^{\mu\nu} is UV divergent; the once-subtracted Π^\hat\Pi (Π^(0)=0\hat\Pi(0) = 0, i.e. on-shell charge renormalization) makes the diagram finite. It is also IR finite — no log⁡λ\log\lambda — so it is a well-defined number all by itself.

Method (dispersion relation): the renormalized VP gives the spectral representation of the dressed photon propagator,

1k2→1k2+∫4m2∞dt ρ(t)k2−t,ρ(t)=α3πt(1+2m2t)1−4m2t,\frac{1}{k^2} \to \frac{1}{k^2} + \int_{4m^2}^\infty \mathrm{d} t\, \frac{\rho(t)}{k^2 - t}, \qquad \rho(t) = \frac{\alpha}{3\pi t}\left(1 + \frac{2m^2}{t}\right) \sqrt{1 - \frac{4m^2}{t}},

i.e. diagram IIe is the LO diagram with a massive photon folded with ρ\rho:

μIIe=∫4∞dt 13t(1+2t)1−4t  K(t)(units α2/π2, m=1).\mu_\mathrm{IIe} = \int_{4}^\infty \mathrm{d} t\, \frac{1}{3t}\left(1+\frac2t\right) \sqrt{1-\frac4t}\; K(t) \qquad \text{(units } \alpha^2/\pi^2,\ m=1).

With t=(1+y)2/yt = (1+y)^2/y everything rationalizes (t(t−4)=(1−y2)/y\sqrt{t(t-4)} = (1-y^2)/y, ∣dt/dy∣=(1−y2)/y2|\mathrm{d}t/\mathrm{d}y| = (1-y^2)/y^2):

μIIe=∫01dy∫01dz (y2+4y+1)(1−y)23 y (1+y)4  z(1−z)2 y(z+y)(zy+1).\mu_\mathrm{IIe} = \int_0^1 \mathrm{d} y \int_0^1 \mathrm{d} z\, \frac{(y^2+4y+1)(1-y)^2}{3\,y\,(1+y)^4}\; \frac{z(1-z)^2\, y}{(z+y)(zy+1)}.

The yy-integration (rational) is done first; the remaining zz-integrand is of the form A(z)log⁡z+B(z)A(z)\log z + B(z) with rational A,BA, B, whose integral produces dilogarithms at unit argument, i.e. π2\pi^2.

Result — pixi run iie-sympy (code/g2_iie.py):

after y-integration:
  I(z) = z*(-5*z**3 + 27*z**2 - 27*z + log(z**(3*z**3 - 9*z**2 - 9*z + 3)) + 5)
         /(9*(z**3 - 3*z**2 + 3*z - 1))
mu_IIe = 119/36 - pi**2/3
       = 0.015687421859102682611
OK: mu_IIe = 119/36 - pi^2/3  (Petermann 1957, eq. (5))

Numeric check — pixi run iie-fortran (code/g2_iie.f90, independent 128-point Gauss–Legendre quadrature in the original tt-form variables):

mu_IIe (numeric)      =    0.015687421859103
119/36 - pi^2/3       =    0.015687421859103
difference            =   2.98E-16
μIIe=11936−π23\boxed{\mu_\mathrm{IIe} = \frac{119}{36} - \frac{\pi^2}{3}}

in agreement with petermann1957.pdf, eq. (5).

Diagram IId: self-energy insertion on the internal electron line — DONE

Diagram IId

Topology: the LO vertex diagram with the one-loop electron self-energy Σ(p)\Sigma(p) inserted on one internal electron propagator. The mirror diagram contributes equally; μIId\mu_\mathrm{IId} includes both (factor 2).

Renormalization: Σ\Sigma is UV divergent; we use the fully on-shell-subtracted

ΣR(p)=Σ(p)−δm−(/p−m)∂Σ∂/p∣/p=m,\Sigma_R(p) = \Sigma(p) - \delta m - (\slashed{p} - m) \left.\frac{\partial\Sigma}{\partial\slashed{p}}\right|_{\slashed{p} = m},

which is equivalent to adding the δm\delta m-insertion counterterm diagram

mass counterterm insertion

and the δZ2\delta Z_2 piece. The on-shell subtraction is IR sensitive: μIId\mu_\mathrm{IId} keeps a +12log⁡(λ2/m2)+\frac12\log(\lambda^2/m^2) that cancels against IIc. The numerical agreement below confirms that this full on-shell subtraction is the KK/Petermann scheme for IId.

Derivation (pixi run iid-sympy, code/g2_iid.py): the pipeline derives the inner loop mechanically,

Σ(k)=e216π2 (4m−2u/k)(LUV−log⁡Din),Din=a−b k2,a=(1−u)m2+uλ2,b=u(1−u),\Sigma(k) = \frac{e^2}{16\pi^2}\,(4m - 2u\slashed{k}) \left(L_{UV} - \log D_\mathrm{in}\right), \qquad D_\mathrm{in} = a - b\,k^2,\quad a = (1-u)m^2 + u\lambda^2,\quad b = u(1-u),

with u∈(0,1)u \in (0,1) the inner Feynman parameter. After the on-shell subtraction LUVL_{UV} cancels identically (asserted by the script), leaving a rational part and a log⁡ ⁣(Din(k2)/Din(m2))\log\!\big(D_\mathrm{in}(k^2)/D_\mathrm{in}(m^2)\big) part. The log is made rational with one more parameter, log⁡(X/Y)=∫01dξ (X−Y)/(Y+ξ(X−Y))\log(X/Y) = \int_0^1 \mathrm{d}\xi\, (X-Y)/(Y + \xi(X-Y)), which cancels one power of the doubled propagator (k2−m2)2(k^2-m^2)^2 and leaves a normal propagator of mass2^2 C=m2+(a−bm2)/(ξb)>m2C = m^2 + (a - b m^2)/(\xi b) > m^2 (kept as an opaque symbol during assembly to keep expressions small). The outer loop then runs through the same machinery as LO, giving

μIId=∫frat dy dz du+∫flog dy dz dt du dξ\mu_\mathrm{IId} = \int f_\mathrm{rat}\,\mathrm{d}y\,\mathrm{d}z\,\mathrm{d}u + \int f_\mathrm{log}\,\mathrm{d}y\,\mathrm{d}z\,\mathrm{d}t\,\mathrm{d}u\,\mathrm{d}\xi

with fratf_\mathrm{rat} printed by the script and flogf_\mathrm{log} (a 65-term rational expression) written, together with fratf_\mathrm{rat}, as generated Fortran into code/g2_iid_frat.inc / code/g2_iid_flog.inc.

Numeric check — pixi run iid-fortran (code/g2_iid.f90, Gauss–Legendre with a smoothstep endpoint map to resolve the IR structure at parameter scale λ\lambda; compile with -fopenmp for speed):

   lam     mu_IId - log(lam)    target = -0.0899780...
  0.1000      0.304059789767   (rat =  -1.4642459, log =  -0.5342794)
  0.0300      0.144669264714   (rat =  -2.7824431, log =  -0.5794456)
  0.0100      0.025773149821   (rat =  -3.9913265, log =  -0.5880705)
  0.0030     -0.043148094904   (rat =  -5.2625440, log =  -0.5897471)
  0.0010     -0.070807985164   (rat =  -6.3885840, log =  -0.5899793)
  0.0003     -0.083100856528   (rat =  -7.6048118, log =  -0.5900172)
extrapolated lam->0:      -0.090070136381
target 11/24-pi^2/18:     -0.089978022283

The λ→0\lambda \to 0 extrapolation (fitting c0+c1λ+c2λlog⁡λc_0 + c_1\lambda + c_2\lambda\log\lambda to the three smallest λ\lambda) agrees with Petermann’s constant to 10-4, and the log⁡λ\log\lambda coefficient is confirmed to be +12log⁡λ2+\frac12\log\lambda^2 (subtracted in the table).

Analytic evaluation (pixi run iid-analytic, code/g2_iid_analytic.py, using the deterministic rational-function integrator code/ratint.py, since SymPy’s integrate with symbolic parameters returns wrong results for exactly these integrals):

Output:

[   0.7s] f_rat factorized form verified
[   1.3s] U, S exact in lam, checked numerically
  mu_rat(lam->0) = log(lam) + 1/2
[   1.9s] z-integration done
[   2.1s] C-integration done, checked numerically
[   3.3s] t-integration done, checked numerically
[   4.0s] s-integration done, checked numerically
[   4.8s] u-integration done, checked numerically
  mu_log(lam=0) = -pi**2/18 - 1/24

mu_IId = 11/24 - pi^2/18 + (1/2) log(lam^2)
      == 11/24 - pi^2/18 + (1/2) log(lam^2/m^2)
      (Petermann 1957, eq. (4));  constant = -0.08997802228274214
μIId=1124−π218+12log⁡λ2m2\boxed{\mu_\mathrm{IId} = \frac{11}{24} - \frac{\pi^2}{18} + \frac12\log\frac{\lambda^2}{m^2}}

in exact agreement with petermann1957.pdf, eq. (4).

Diagram IIa: ladder (vertex part at the external vertex) — DONE

Diagram IIa

Topology: both photons span the external vertex, nested: the inner photon is a one-loop vertex correction at the external-field vertex.

Renormalization: the inner vertex subgraph is log-divergent; in the KK scheme one subtracts the corresponding second-order renormalization part (the δF1(0) γμ\delta F_1(0)\,\gamma^\mu counterterm) within the diagram, which is what makes their μIIa\mu_\mathrm{IIa} UV finite and even IR finite.

Target: μIIa=1148+π218\mu_\mathrm{IIa} = \frac{11}{48} + \frac{\pi^2}{18}.

Derivation (pixi run iia-sympy, code/g2_iia.py): the same three-piece decomposition as IIc — the inner vertex subgraph (now sitting at the external vertex, so the external momentum qq flows through the inner loop), subtracted pointwise in the inner Feynman parameters (u,v)(u, v) by the on-shell La(u,v)γνL_a(u,v)\gamma^\nu counterterm whose (u,v)(u,v)-integral is δF1(0)\delta F_1(0); no mirror factor (the ladder is its own mirror image). LUVL_{UV} cancels pointwise (asserted). The three pieces reduce to functions of s=y+zs = y{+}z, χ=u+v\chi = u{+}v, tt, and the ξ\xi of the log-ratio representation only.

Piece (b) (the δF1×\delta F_1 \times LO cross term) is exactly half of IIc’s (same factorized integrals, no mirror doubling):

μbIIa=−12log⁡λ−58+O(λlog⁡λ).\mu_b^\mathrm{IIa} = -\tfrac12\log\lambda - \tfrac58 + O(\lambda\log\lambda).

Piece (c) (code/g2_iia_cq.f90): the ξ\xi and χ\chi integrations are exact (shared letter alphabet with IIc); the remaining 2-dim quad-precision DE quadrature with a tt-sliver δ\delta-cut and pure-δ2\delta^2 Richardson gives, at DE levels 6 and 7,

level  6: C0 (Richardson) =    -0.062500000001992...
level  7: C0 (Richardson) =    -0.062500000006245...

i.e. C0=−116C_0 = -\frac{1}{16} exactly (11 digits).

Piece (a) (code/g2_iia_a3.f90): the zz and χ\chi integrations are exact, leaving a compact rational 3-dim integrand sχ g(s,χ,t)s\chi\,g(s,\chi,t) (739 ops — far cheaper than emitting the dilog-heavy fully-integrated form). The quad-precision DE ladder in the photon mass, with V(λ)=I(λ)−12log⁡λV(\lambda) = I(\lambda) - \frac12\log\lambda (values stable to 18 digits between DE levels 5 and 6):

  lam        V(lam)
1.00E-02   1.397257953741492807873377568570
3.00E-03   1.439499192379301986687186310182
1.00E-03   1.454839988486778227163151036370
3.00E-04   1.461381945469017179823820054682
1.00E-04   1.463608481859397470290915827937
3.00E-05   1.464510667192499352430857425917

Fitting the λ→0\lambda \to 0 tail (integer powers of λ\lambda times log⁡kλ\log^k\lambda — the integrand is rational in λ\lambda; pixi run iia-fit, code/g2_iia_fit.py):

A0 fits over {1, lam, lam log lam, lam log^2 lam, lam^2, lam^2 log lam}:
  smallest 4 points, 4 terms  A0 = 1.46497916871   (A0 - pred = 1.15e-6)
  smallest 5 points, 5 terms  A0 = 1.46497855136   (A0 - pred = 5.29e-7)
  all 6 points,     6 terms   A0 = 1.46497819226   (A0 - pred = 1.7e-7)
predicted A0 = 11/12 + pi^2/18 = 1.46497802228274

converging steadily onto A0=1112+π218A_0 = \frac{11}{12} + \frac{\pi^2}{18} (confirmed to 2×10−72\times10^{-7}).

Assembly: the IR log cancels within the diagram (piece (a) carries +12log⁡λ+\frac12\log\lambda, piece (b) −12log⁡λ-\frac12\log\lambda), and

μIIa=A0−58−116=1148+π218=0.777478…\mu_\mathrm{IIa} = A_0 - \tfrac58 - \tfrac1{16} = \boxed{\frac{11}{48} + \frac{\pi^2}{18}} = 0.777478\ldots

in agreement with petermann1957.pdf, eq. (2).

Diagram IIc: corner (vertex part at an internal vertex) — DONE

Diagram IIc

Topology: the outer photon spans the external vertex; a one-loop vertex-correction subgraph sits at one of its two internal attachment points. Mirror included by doubling.

Renormalization: inner vertex subgraph log-divergent, subtracted as in IIa. IR divergent: carries −12log⁡(λ2/m2)-\frac12\log(\lambda^2/m^2), cancelling IId.

This is the diagram Karplus–Kroll got wrong (-3.18 instead of −0.564−12log⁡λ2m2-0.564 - \frac12\log\frac{\lambda^2}{m^2}), and the one worked out in detail in petermann1958.pdf — our reproduction target:

Plan:

  1. Transcribe the (2.3)–(2.4) integrands into Fortran (the scan’s OCR is noisy — the formulas must be re-checked against a re-derivation); verify μ(A1)≈2.60\mu(A_1) \approx 2.60 and that the total lands in [−0.71,−0.49][-0.71, -0.49].

  2. Reproduce his section-3 elementary bounds exactly in SymPy (e.g. his numeric 4.42 in eq. (3.7) should be an exact log⁡2\log 2/π2\pi^2 combination).

  3. Re-derive the integrands from our own Feynman rules + F2F_2 projector and check them against his, then evaluate analytically by sequential integration.

Derivation (pixi run iic-sympy, code/g2_iic.py): the inner vertex part with one on-shell leg is derived by the pipeline,

Λν(k)=Pν(k)Din(k)+c (LUV−log⁡Din(k)) γν,Din=D0+L(k)−b^ k2,\Lambda^\nu(k) = \frac{P^\nu(k)}{D_\mathrm{in}(k)} + c\,(L_{UV} - \log D_\mathrm{in}(k))\,\gamma^\nu, \qquad D_\mathrm{in} = D_0 + L(k) - \hat b\,k^2,

with b^=u(1−u)\hat b = u(1-u), L(k)L(k) linear in kk, D0=(u+v)2+(1−u−v)λ2D_0 = (u+v)^2 + (1-u-v)\lambda^2 (the LO Δ\Delta with z=u+vz = u+v), and is subtracted pointwise in (u,v)(u,v) by its on-shell value La(u,v)γν/D0+c(LUV−log⁡D0)γνL_a(u,v)\gamma^\nu/D_0 + c(L_{UV}-\log D_0)\gamma^\nu — the KK “reduced diagram” scheme, whose (u,v)(u,v) integral is δF1(0)\delta F_1(0). LUVL_{UV} cancels pointwise (asserted). Three pieces go through the outer loop: the 1/Din1/D_\mathrm{in} part (an extra propagator of mass2^2 a^/b^\hat a/\hat b), the −La/D0-L_a/D_0 counterterm part (an LO-type loop), and the log-ratio part (ξ\xi-representation as in IId). The whole derivation runs in under a minute; the F2 projection of each piece is UV finite by itself (checked by exact rational-point tests).

Numeric check — pixi run iic-fortran (code/g2_iic.f90):

   lam     mu_IIc + log(lam)    target = -0.5640214...
  0.1000     -0.909584536420   a=    0.4915801 b=    0.9778715 c=   -0.0764511
  0.0300     -0.790506365659   a=    0.6656544 b=    2.1330785 c=   -0.0826814
  0.0100     -0.678130174632   a=    0.7326841 b=    3.2781476 c=   -0.0837916
  0.0030     -0.608880599384   a=    0.7601970 b=    4.5240536 c=   -0.0839882
  0.0010     -0.581254893833   a=    0.7680358 b=    5.6424758 c=   -0.0840112
  0.0003     -0.570039754501   a=    0.7697160 b=    6.8559865 c=   -0.0840142
extrapolated lam->0:      -0.564226400079
target:                   -0.564020941345

The λ→0\lambda \to 0 extrapolation agrees with Petermann’s constant to 2×10−42\times10^{-4} and confirms the IR term −12log⁡λ2-\frac12\log\lambda^2 (cancelling IId’s).

Analytic evaluation (in progress; code/g2_iic_analytic.py, code/g2_iic_a_sint.py, code/g2_iic_a_quad.f90):

Assembly (verified exactly in SymPy):

A∗+μb+C∗=−6724+π218−ζ(3)2+π23log⁡2−12log⁡λ2m2A^* + \mu_b + C^* = -\frac{67}{24} + \frac{\pi^2}{18} - \frac{\zeta(3)}{2} + \frac{\pi^2}{3}\log 2 - \frac12\log\frac{\lambda^2}{m^2}
μIIc=−6724+π218−12ζ(3)+13π2log⁡2−12log⁡λ2m2\boxed{\mu_\mathrm{IIc} = -\frac{67}{24} + \frac{\pi^2}{18} - \frac12\zeta(3) + \frac13\pi^2\log 2 - \frac12\log\frac{\lambda^2}{m^2}}

in agreement with petermann1957.pdf, eq. (3) — with every piece computed independently (pieces (a) and (c) identified from ~14-digit quad-precision integrals; their exact sequential integration remains an optional refinement).

Diagram I: crossed ladder — DONE (numeric)

Diagram I

Topology: both photons span the external vertex and cross. This is KK’s only “irreducible” diagram: it contains no one-loop subdiagram, so no UV subtraction is needed — its F2F_2 projection is UV finite as it stands. In the KK scheme it is IR finite too (no log⁡λ\log\lambda in μI\mu_\mathrm{I}).

Plan: direct two-loop computation: Dirac traces with the F2F_2 projector, two loop integrations, ~5-fold Feynman-parameter integral, sequential analytic integration. Together with IIa/IIc this is where ζ(3)\zeta(3) and π2log⁡2\pi^2\log 2 appear. KK’s value was slightly wrong (by 132\frac1{32}) even here, caught only by Petermann’s analytic evaluation (footnote in petermann1958.pdf). Target: μI=16+1336π2+54ζ(3)−56π2log⁡2\mu_\mathrm{I} = \frac16 + \frac{13}{36}\pi^2 + \frac54\zeta(3) - \frac56\pi^2\log 2.

Derivation (pixi run i-sympy, code/g2_i.py): the crossed photon contraction is done in the full string (photon α\alpha at positions 1 and 4, β\beta at 2 and 5), the inner loop over aa has four denominators (parameters u,v,ru, v, r, Γ(4)\Gamma(4)) and is UV finite by itself, and the outer loop over bb runs against the composite propagator b2−Lb/b^−CAb^2 - L_b/\hat b - C_A with CA=a^/b^C_A = \hat a/\hat b kept opaque, b^=(r+v)(1−r−v)\hat b = (r+v)(1-r-v). The F2F_2 projection is LUVL_{UV}-free — checked by exact rational-point tests, as it must be for an irreducible diagram — leaving a 5-fold parametric integral over u,v,ru, v, r (with u+v+r<1u+v+r<1) and y,ty, t (with y+t<1y+t<1).

Numeric evaluation (pixi run i-fortran, code/g2_i_qmc.f90). Two practical obstacles had to be dealt with, both worth recording:

  1. Compilation. The generated integrand is a single 850 KB expression; flang needs more than 20 minutes and 30 GB on it at any optimization level. code/g2_i_split.py rewrites it as ~5300 per-term statements accumulating into fIv (large parenthesized factors lifted into temporaries), which compiles in seconds, and emits a quad-precision twin of the same file.

  2. Cancellation. fIf_\mathrm{I} is finite everywhere on the domain, but evaluating it in double precision loses all significance near the face 1−v−r=01-v-r = 0, where the outer b^\hat b vanishes. pixi run i-calibrate (code/g2_i_cal.f90) measures the worst relative error of double against quad on random points:

     scale of (1-v-r)      :  worst relative error of double
        1.0E-01      1.78E-08
        1.0E-02      3.61E-04
        1.0E-03      4.61E-01
        1.0E-04      1.00E+00
     quad per eval:       430.3 us
     dble per eval:         8.4 us

    (Earlier runs which simply discarded the resulting NaNs were biased low by ~1.4%, and a hard cut around the face converged to the wrong value.) The integrand itself is perfectly tame there: at (u,v,r,y,t)=(10−8,0.17,0.82,0.27,0.73)(u,v,r,y,t) = (10^{-8}, 0.17, 0.82, 0.27, 0.73) double gives NaN while quad gives 0.1015317542625155, and at u=10−12u = 10^{-12} it is still 0.1015306403866693.

The integral is then a randomly shifted rank-1 lattice rule over the 5-dim cube, each coordinate passed through the order-3 smoothstep s(x)=x3(10−15x+6x2)s(x) = x^3(10-15x+6x^2) (its first two derivatives vanish at both ends, so the periodic extension is C2C^2 and the rule converges far faster than plain Monte Carlo), evaluated in double precision in the bulk and in real(16) within 10-2 of the bad face (24% of points, which is where essentially all the time goes). Each shift is an unbiased estimate, so their spread is an honest error bar:

lattice rule: N =  16777216,  8 shifts
  shift  1     -0.4682561743
  shift  2     -0.4712629444
  shift  3     -0.4641033821
  shift  4     -0.4667036707
  shift  5     -0.4702164503
  shift  6     -0.4663382325
  shift  7     -0.4674334653
  shift  8     -0.4663191134

mu_I   =      -0.4675791791  +/-  8.13E-04
target =      -0.4676454461
diff   =       0.0000662670
quad-precision evaluations:  24.4471 %

Points closer than 10-6 to the face are dropped (quad would run out of digits there too); the same program reports that they carry 3×10−123\times10^{-12} of the total measure, so they cannot affect the result. This confirms

μI=16+1336π2+54ζ(3)−56π2log⁡2=−0.467645446…\mu_\mathrm{I} = \frac16 + \frac{13}{36}\pi^2 + \frac54\zeta(3) - \frac56\pi^2\log 2 = -0.467645446\ldots

to 0.08 standard deviations. Unlike IIa and IIc this is a numeric confirmation rather than an analytic evaluation: an exact treatment would need the y,ty, t integrations done in closed form (as was done for the inner variables of IIa/IIc) followed by a quad-precision identification. Note that diagram I needs no renormalization at all, so there is no scheme ambiguity in the comparison.

Diagrams IIb, IIf: external-leg self-energies — no contribution

Diagram IIb

Self-energy corrections on the external electron legs. After on-shell mass renormalization and LSZ amputation (wavefunction renormalization Z2Z_2, which cancels against Z1Z_1 by the Ward identity), these diagrams contribute only to the overall normalization of the vertex, i.e. to F1(0)F_1(0), not to F2(0)F_2(0). KK handle this by explicit cancellation between IIb/IIf and their renormalization counterterms.

Assembly and checks — DONE

All five independent contributions are now established:

pixi run assembly (code/g2_assembly.py) then proves exactly, in SymPy, that the IR logs cancel and the sum is A2A_2:

IR log cancellation: coeff of L in sum = 0
sum  = -pi**2*log(2)/2 + pi**2/12 + 3*zeta(3)/4 + 197/144
A2   = -pi**2*log(2)/2 + pi**2/12 + 3*zeta(3)/4 + 197/144
sum - A2 = 0

numeric values (units (alpha/pi)^2):
  mu_I    = -0.467645446093614
  mu_IIa  = 0.777478022282742
  mu_IIc  = -0.564020941344683
  mu_IId  = -0.0899780222827421
  mu_IIe  = 0.0156874218591027
  A2      = -0.328478965579194
A2=197144+π212+34ζ(3)−12π2log⁡2=−0.328478965579…\boxed{A_2 = \frac{197}{144} + \frac{\pi^2}{12} + \frac34\zeta(3) - \frac12\pi^2\log 2 = -0.328478965579\ldots}

Suggested order of work

  1. ~~Stage 0: LO pipeline + massive-photon kernel~~ — done.

  2. ~~Diagram IIe~~ — done (SymPy exact + Fortran numeric).

  3. ~~Two-loop pipeline (Dirac algebra, projector, loop tools) validated at LO~~ — done.

  4. ~~Diagram IId + δm\delta m counterterm~~ — done (exact analytic value + Fortran numeric confirmation).

  5. ~~Diagram IIc~~ — done (three pieces independently evaluated, sum equals Petermann’s eq. (3) exactly). Optional: comparison with Petermann 1958’s eqs. (2.3)-(2.4) integrands and his bounds.

  6. ~~Diagram IIa~~ — done (same machinery as IIc; equals Petermann’s eq. (2)).

  7. ~~Diagram I~~ — done numerically (derived by the pipeline and confirmed against Petermann’s closed form to 0.08σ0.08\sigma by a mixed-precision lattice rule). Remaining refinement: exact y,ty, t integration to 3 dimensions followed by a quad-precision identification, as was done for the inner variables of IIa/IIc.

  8. ~~Assembly, IR-cancellation check, final A2A_2~~ — done (pixi run assembly).

So all five contributions have been reproduced and they sum to A2A_2. What remains is refinement rather than new physics: an analytic (rather than 14-digit-numeric) evaluation of the IIc/IIa pieces, an analytic diagram I, a dimensional-regularization cross-check of the whole calculation, and the comparison against Petermann 1958’s own integrands and bounds.