Skip to main content

Follow the source behind the result.

Search the paper sections, open their original context and follow the checks they actually cite. The knowledge atlas explains the result; this library locates its source.

v494_cosmo_running_mu_record.py

verification/v494_cosmo_running_mu_record.py

This is a registered verification module. Read its original code and the paper sections that cite it, then follow the linked claim to its present classification.

Read the publication code on this page

The registered Python source is shown as text. Displaying it does not execute the code.

"""v494 -- COSMO.RUNNING.01 / COSMO.MUDIST.01: the two 2026-07-20 prediction-of-record
rows (spectral-index running alpha_s/beta_s and the CMB mu-distortion branch
discriminator) promoted to machine-checked verification.

The Starobinsky branch is already load-bearing (v7/v28/v86: n_s = 1 - 2/N_star,
r = 12/N_star^2, A_s = N_star^2 c3^7/(24 pi^2)).  This module adds the SAME
branch's next two observables so the paper/website prediction surfaces are
machine-backed:

  [E] LEADING-ORDER IDENTITIES (sympy exact, no floats):
        alpha_s = dn_s/dln k = -2/N_star^2 = -r/6      (LO)
        beta_s  = d alpha_s/dln k = -4/N_star^3        (LO; NOT -8/N^3)
      using d ln k = -dN at leading order.
  [E] EXACT SLOW ROLL on the Einstein-frame Starobinsky potential
      V = V0 (1 - e^{-sqrt(2/3) phi})^2 (third-order SR, Lyth-Riotto),
      cross-checked by a finite difference along ln k:
        alpha_s(N=51.4) = -7.09e-4,  beta_s(51.4) = -2.70e-5;
        exact-SR band edges alpha_s(50) = -7.48e-4, alpha_s(60) = -5.23e-4;
        LO band over N_star in [50,60]: [-8.0e-4, -5.6e-4].
  [C] DATA CONFRONTATION (external data, no marker upgrade):
        Planck 2018 TTTEEE+lowE+lensing  alpha_s = -0.0045 +/- 0.0067 -> +0.57 sigma;
        P-ACT-LB (ACT DR6+Planck+lensing+DESI BAO) +0.0062 +/- 0.0052 -> -1.33 sigma;
        beta_s (Planck run+runrun) 0.010 +/- 0.013 -> -0.77 sigma.
      KILL: robust alpha_s < -5e-3 or > +3e-3 at >= 5 sigma; any robust
      POSITIVE running kills the plateau branch (plateau potentials give
      alpha_s < 0).
  [C] MU-DISTORTION BRANCH DISCRIMINATOR (Chluba-Erickcek-Ben-Dayan k-space
      window, calibrated on the LCDM Planck-2018 anchor to the literature
      mu_LCDM ~ 2.0e-8, a +21% window correction):
        sharp branch N_star = 51.4 (A_s = 1.76e-9): mu ~ 1.6e-8;
        profiled record N_star = 56.1 (A_s = 2.10e-9): mu ~ 2.0e-8 (1.94e-8);
        band N_star in [50,60]: 1.5e-8 .. 2.3e-8;
        branch split Delta mu = 3.0e-9 (raw window; calibrated 3.7e-9)
        => >= 3 sigma A_s/N_star branch decision at sigma(mu) = 1e-9
        (Voyage-2050 class); the PIXIE baseline limit 9e-8 does NOT reach the
        band (sharp = 0.18 x limit); FIRAS 9e-5 is 4 dex above.
      KILL: robust mu < 0.9e-8 or > 4e-8.
  [E] COMB BLINDNESS IN THE MU WINDOW (honest S15 typing): the frozen recovery
      log-comb (omega = 2 pi/ln((3/2)^6) = 2.5827, eps = e^{-pi^2/ln((3/2)^6)}
      = 0.0173) is STRUCTURALLY invisible here -- window attenuation
      |F(omega)| = 0.033, delta mu = 7.4e-12 = 0.007 sigma even at Voyage-2050
      sensitivity.  The theory itself predicts where it cannot be seen; no
      comb-search row is opened.

HONEST FENCES (do not oversell):
  * N_star REMAINS an external reheating input (GATE.NSTAR.01); the frozen
    band [50, 60] stays the prediction surface of record (v84/v86); the sharp
    point 51.4 is the conditional [P] reheating point.
  * All data confrontations are [C] external-data rows (scorecard stage
    prediction_of_record); nothing here closes a gate or moves a marker.
  * The Chluba window is imported standard physics; the +21% calibration is
    anchored on the LCDM literature value, not fitted to TFPT.

Origin: experiments/tfpt-discovery/alpha_s_running_probe.py and
mu_distortion_probe.py (2026-07-20 scorecard round), promoted 2026-07-21.
Python: sympy exact (LO identities) + numpy (SR solve, window quadrature);
the quadrature/ODE parts are numerical, Python-only by the suite convention.
"""
import numpy as np
import sympy as sp
import mpmath as mp
from tfpt_constants import check, summary, reset, c3, PI

SQ23 = np.sqrt(2.0 / 3.0)
K_PIVOT = 0.05                                    # 1/Mpc
N_SHARP = 51.4                                    # v86 reheating point
N_PROF = 56.1                                     # A_s-profiled record branch
LAMBDA_DSI = (3.0 / 2.0) ** 6
OMEGA = 2.0 * np.pi / np.log(LAMBDA_DSI)          # frozen comb kernel
EPS_COMB = np.exp(-np.pi ** 2 / np.log(LAMBDA_DSI))
MU_LCDM_LIT = 2.0e-8                              # literature LCDM mu (Chluba)

# ---------- Starobinsky potential + third-order slow roll (M_pl = 1) --------


def _V(phi):
    return (1.0 - np.exp(-SQ23 * phi)) ** 2


def _dV(phi):
    e = np.exp(-SQ23 * phi)
    return 2.0 * SQ23 * e * (1.0 - e)


def _d2V(phi):
    e = np.exp(-SQ23 * phi)
    return (4.0 / 3.0) * e * (2.0 * e - 1.0)


def _d3V(phi):
    e = np.exp(-SQ23 * phi)
    return (4.0 / 3.0) * SQ23 * e * (1.0 - 4.0 * e)


def _d4V(phi):
    e = np.exp(-SQ23 * phi)
    return (8.0 / 9.0) * e * (8.0 * e - 1.0)


def _sr_params(phi):
    v, v1, v2, v3, v4 = _V(phi), _dV(phi), _d2V(phi), _d3V(phi), _d4V(phi)
    eps = 0.5 * (v1 / v) ** 2
    eta = v2 / v
    xi2 = v1 * v3 / v ** 2
    sig3 = v1 ** 2 * v4 / v ** 3
    return eps, eta, xi2, sig3


def _observables(phi):
    """Third-order slow-roll n_s, r, alpha_s, beta_s (Lyth-Riotto)."""
    eps, eta, xi2, sig3 = _sr_params(phi)
    ns = 1.0 - 6.0 * eps + 2.0 * eta
    r = 16.0 * eps
    alpha = 16.0 * eps * eta - 24.0 * eps ** 2 - 2.0 * xi2
    beta = (-192.0 * eps ** 3 + 192.0 * eps ** 2 * eta - 32.0 * eps * eta ** 2
            - 24.0 * eps * xi2 + 2.0 * eta * xi2 + 2.0 * sig3)
    return ns, r, alpha, beta


def _phi_end():
    lo, hi = 0.1, 2.0
    for _ in range(200):
        mid = 0.5 * (lo + hi)
        if _sr_params(mid)[0] > 1.0:
            lo = mid
        else:
            hi = mid
    return 0.5 * (lo + hi)


def _efolds(phi, phi_e):
    xs = np.linspace(phi_e, phi, 20001)
    return np.trapezoid(_V(xs) / _dV(xs), xs)


def _phi_of_N(n_target, phi_e):
    lo, hi = phi_e, 12.0
    for _ in range(200):
        mid = 0.5 * (lo + hi)
        if _efolds(mid, phi_e) < n_target:
            lo = mid
        else:
            hi = mid
    return 0.5 * (lo + hi)


# ---------- Chluba k-space window for mu (khat = k * Mpc) --------------------

_LNK = np.linspace(np.log(1.0), np.log(1.0e6), 200001)
_KHAT = np.exp(_LNK)
_W_MU = np.exp(-_KHAT / 5400.0) - np.exp(-((_KHAT / 31.6) ** 2))


def _pzeta(a_s, ns, alpha):
    lnkr = _LNK - np.log(K_PIVOT)
    return a_s * np.exp((ns - 1.0) * lnkr + 0.5 * alpha * lnkr ** 2)


def _mu_window(a_s, ns, alpha):
    return 2.2 * np.trapezoid(_pzeta(a_s, ns, alpha) * _W_MU, _LNK)


def _As_tfpt(n):
    return float(n ** 2 * c3 ** 7 / (24 * PI ** 2))


def run():
    reset()
    print("v494 cosmo running + mu-distortion record "
          "(COSMO.RUNNING.01 / COSMO.MUDIST.01)")

    # ---- [E] leading-order identities, sympy exact --------------------------
    N = sp.symbols('N', positive=True)
    ns_lo = 1 - 2 / N
    r_lo = 12 / N ** 2
    alpha_lo = -sp.diff(ns_lo, N)          # d ln k = -dN at LO
    beta_lo = -sp.diff(alpha_lo, N)
    check("[E] LO identity alpha_s = dn_s/dlnk = -2/N^2 (sympy exact)",
          sp.simplify(alpha_lo + 2 / N ** 2) == 0)
    check("[E] LO identity alpha_s = -r/6 (sympy exact)",
          sp.simplify(alpha_lo + r_lo / 6) == 0)
    check("[E] LO identity beta_s = -4/N^3 (NOT -8/N^3; sympy exact)",
          sp.simplify(beta_lo + 4 / N ** 3) == 0)
    check("[E] LO band edges: alpha_s(50) = -8.00e-4, alpha_s(60) = -5.56e-4",
          sp.Rational(-2, 50 ** 2) == sp.Rational(-1, 1250)
          and abs(float(-2 / mp.mpf(60) ** 2) + 5.556e-4) < 1e-7)

    # ---- [E] exact slow roll on the Starobinsky potential --------------------
    phi_e = _phi_end()
    obs = {}
    for n_star in (50.0, N_SHARP, 60.0):
        obs[n_star] = _observables(_phi_of_N(n_star, phi_e))
    a_sharp, b_sharp = obs[N_SHARP][2], obs[N_SHARP][3]
    check("[E] exact-SR alpha_s(N=51.4) = -7.088e-4", a_sharp,
          mp.mpf('-7.0884e-4'), tol=mp.mpf('1e-3'))
    check("[E] exact-SR beta_s(N=51.4) = -2.702e-5", b_sharp,
          mp.mpf('-2.7020e-5'), tol=mp.mpf('1e-3'))
    check("[E] exact-SR band edges alpha_s(50) = -7.482e-4, "
          "alpha_s(60) = -5.234e-4",
          abs(obs[50.0][2] / -7.4824e-4 - 1) < 1e-3
          and abs(obs[60.0][2] / -5.2337e-4 - 1) < 1e-3)

    # finite-difference cross-check along ln k = -N + (1/2) ln(V/3)
    pts = []
    for n_star in (N_SHARP - 0.5, N_SHARP + 0.5):
        phi = _phi_of_N(n_star, phi_e)
        pts.append((-n_star + 0.5 * np.log(_V(phi) / 3.0),
                    _observables(phi)[0]))
    alpha_fd = (pts[1][1] - pts[0][1]) / (pts[1][0] - pts[0][0])
    check("[E] finite-difference dn_s/dlnk = exact-SR alpha_s to < 1%",
          abs(alpha_fd / a_sharp - 1) < 1e-2)

    # ---- [C] data confrontation (external data; no marker moves) ------------
    check("[C] Planck 2018 (-0.0045 +/- 0.0067): TFPT pull = +0.57 sigma",
          (a_sharp - (-0.0045)) / 0.0067, mp.mpf('0.57'), tol=mp.mpf('2e-2'))
    check("[C] P-ACT-LB (+0.0062 +/- 0.0052): TFPT pull = -1.33 sigma "
          "(record leg; watch channel)",
          (a_sharp - 0.0062) / 0.0052, mp.mpf('-1.33'), tol=mp.mpf('2e-2'))
    check("[C] beta_s vs Planck run+runrun (0.010 +/- 0.013) = -0.77 sigma",
          (b_sharp - 0.010) / 0.013, mp.mpf('-0.77'), tol=mp.mpf('2e-2'))
    check("[C] kill margin: LO band edge -8.0e-4 sits 4.2e-3 INSIDE the "
          "negative kill edge -5e-3; any robust POSITIVE running kills the "
          "plateau branch",
          obs[50.0][2] > -5e-3 and a_sharp < 0)

    # ---- [C] mu-distortion branch discriminator ------------------------------
    mu_lcdm = _mu_window(2.10e-9, 0.9649, 0.0)
    cal = MU_LCDM_LIT / mu_lcdm
    check("[C] window calibration on the LCDM anchor: mu_win(LCDM) = 1.65e-8 "
          "-> cal = +21% (the scorecard's '+20% to the full computation')",
          cal, mp.mpf('1.209'), tol=mp.mpf('2e-2'))

    mu_sharp_raw = _mu_window(_As_tfpt(N_SHARP), 1 - 2 / N_SHARP,
                              -2 / N_SHARP ** 2)
    mu_prof_raw = _mu_window(2.10e-9, 1 - 2 / N_PROF, -2 / N_PROF ** 2)
    mu_50 = cal * _mu_window(_As_tfpt(50.0), 1 - 2 / 50.0, -2 / 50.0 ** 2)
    mu_60 = cal * _mu_window(_As_tfpt(60.0), 1 - 2 / 60.0, -2 / 60.0 ** 2)
    check("[C] sharp branch (N=51.4, A_s=1.76e-9): mu = 1.6e-8 (calibrated)",
          cal * mu_sharp_raw, mp.mpf('1.6e-8'), tol=mp.mpf('2e-2'))
    check("[C] profiled record (N=56.1, A_s=2.10e-9): mu = 1.94e-8 (~2.0e-8)",
          cal * mu_prof_raw, mp.mpf('1.94e-8'), tol=mp.mpf('2e-2'))
    check("[C] band N in [50,60]: mu in [1.5e-8, 2.3e-8]",
          abs(mu_50 / 1.5e-8 - 1) < 2e-2 and abs(mu_60 / 2.3e-8 - 1) < 2e-2)
    check("[C] branch split Delta mu = 3.0e-9 (raw window; calibrated 3.7e-9) "
          "=> >= 3 sigma at sigma(mu) = 1e-9 (Voyage-2050 class)",
          mu_prof_raw - mu_sharp_raw, mp.mpf('3.03e-9'), tol=mp.mpf('2e-2'))
    check("[C] branch ratio mu_profiled/mu_sharp = 1.23 (the 23% split)",
          mu_prof_raw / mu_sharp_raw, mp.mpf('1.232'), tol=mp.mpf('1e-2'))
    check("[C] PIXIE baseline |mu| < 9e-8 does NOT reach the band "
          "(sharp = 0.18 x limit); FIRAS 9e-5 is 4 dex above",
          cal * mu_sharp_raw / 9e-8 < 0.25
          and cal * mu_sharp_raw / 9e-5 < 1e-3)

    # ---- [E] comb blindness in the mu window (S15 honest typing) -------------
    check("[E] frozen comb kernel omega = 2 pi/ln((3/2)^6) = 2.5827, "
          "eps = 0.0173",
          abs(OMEGA - 2.5827) < 1e-4 and abs(EPS_COMB - 0.017302) < 1e-5)
    lnkr = _LNK - np.log(K_PIVOT)
    p0w = _pzeta(_As_tfpt(N_SHARP), 1 - 2 / N_SHARP,
                 -2 / N_SHARP ** 2) * _W_MU
    base = np.trapezoid(p0w, _LNK)
    f_att = np.hypot(np.trapezoid(p0w * np.cos(OMEGA * lnkr), _LNK),
                     np.trapezoid(p0w * np.sin(OMEGA * lnkr), _LNK)) / base
    dmu_comb = EPS_COMB * f_att * mu_sharp_raw
    check("[E] window attenuation |F(2.5827)| = 0.033 (vs 0.70 at omega=0.5)",
          f_att, mp.mpf('0.033'), tol=mp.mpf('3e-2'))
    check("[E] comb blindness: delta mu = 7.4e-12 = 0.007 sigma even at "
          "Voyage-2050 (structurally invisible; no comb-search row opened)",
          dmu_comb, mp.mpf('7.4e-12'), tol=mp.mpf('2e-2'))

    # ---- fences ---------------------------------------------------------------
    check("[O] fence: N_star stays an external reheating input "
          "(GATE.NSTAR.01); the frozen band [50,60] stays the surface of "
          "record; the sharp point is the conditional v86 [P] reading",
          50.0 < N_SHARP < 60.0 and 50.0 < N_PROF < 60.0)

    return summary("v494 cosmo running + mu record")


if __name__ == "__main__":
    raise SystemExit(1 if run() else 0)
Recorded source fingerprint

f141a038a91f8dca363c59833682785d24249d3f01944b20e098cdeaba63328f

Paper sections that cite this module

What this source index covers

The public registry includes 116 document views, 6,693 section records and 985 physical LaTeX sources. Active publication documents, research material and archives retain their recorded roles. This is source navigation, not a new semantic review or proof run.