p21_gravity.py — frc/ledgers

The ledger file frc/ledgers/p21_gravity.py of Gravitation as Phase Synchronisation, rendered with an anchor per line: the marked lines (# 21:C2 (p21010): a predicate and its accession key) are the checks that decide the predicates of the paper's predicate ledger — 54 of 54 checks passing; the predicates' theorems are the declarations of Gravity in the core. ▶ run the predicates on Google Colab.

21-gravity ledgerfrc/ledgers/p21_gravity.py · 43.8 KBp21_gravity.pyColab
1"""p21_gravity — the ledger file of 21-gravity (ledger migration; 10 October 2026).23"Gravitation as Phase Synchronisation" (Akhtman, 2026; preprint pp202606.1018.v2). The paper's predicate ledger is4docs/21-gravity/21-gravity-ledger.json. This file binds its predicates to the framework: the table of keys (generated from5the ledger by ci/make_ledgers.py), and the checks of seven blocks. Each check names the predicate(s) it witnesses6(LEDGER) under a `# 21:XN (<key>)` marker on the check that decides it (PREDICATES). The checks compute what the paper's7validation package computes (src/21-gravity, twenty-one scripts of 13 July 2026), rewritten onto the themes: the exact8blocks A to D in integers, fractions and residues (frc/drift.py, frc/lattice.py, frc/gravity.py, frc/extension.py), the9chart blocks E to G in floats with every numeral anchored to the ledger's scale import (frc/chart.py: ln Ω = 283.5,10Ω = 1.3 × 10¹²³, the entailed H₀ = 67.4; frc/chart_gravity.py). The package stays the paper's published witness until11the milestone's release pin retires it.1213The exact checks call the gravity theme and stay exact (gate G09); the chart checks carry their tolerances in the14verdict and every comparison with measured data is [data]. The Lean side is lean/FrcCore/Theme/Drift.lean,15Theme/Lattice.lean, the register section of Theme/Gravity.lean and Theme/Shift.lean (core, no16axioms), and lean/FrcLedger/Theme/Strong.lean (the reals) with FrcLedger/Theme/Gravity.lean (the exact Mathlib17variants); the certificates are lean/FrcCore/Ledgers/P21Gravity.lean and lean/FrcLedger/Ledgers/P21Gravity.lean.1819    python3 -m frc.ledgers.p21_gravity        every block, the census; exit 1 if a check fails (≈ 40 s)20    python3 -m frc.ledgers.p21_gravity E      one block (A to G)21    from frc.ledgers.p21_gravity import R; R.predicate("21:C21")    one predicate: its blocks run once per session2223Blocks:  A  the register on a frame                     EXACT   (21:A1, A9, C2, C5, C13, C16, X1, X8)24         B  the lattice                                 EXACT   (21:C1, C2, C4, C9, C15, C20)25         C  the drift and the defect                    EXACT   (21:C1, C3, C6, C7, C11, C12, C19, C21, C22, C23, C25, P7, X3)26         D  the post-Newtonian series                   EXACT   (21:C7, C8, C12, C18, C23, P6)27         E  the strong field                            CHART   (21:C2, C4, C7, C10, C11, C12, C13, C15, C17, P1, P2, P7, X3)28         F  the floor and the crossover                 CHART   (21:C18, C19, P3, P4, P5, P8, X1, X2)29         G  the simulation                              CHART   (21:C19: the flux-conservation lemma, seeded)3031The notebook frc/ledgers/p21_gravity.ipynb runs one predicate per cell, the cell's id its key (gate G13).32"""33import random34import sys35from fractions import Fraction36from math import gcd, isqrt3738from frc import arith39from frc import chart as C40from frc import chart_gravity as CG41from frc import drift as D42from frc import gravity as G43from frc import lattice as LT44from frc.registry import Registry4546# ---- generated by ci/make_ledgers.py from docs/21-gravity/21-gravity-ledger.json; edit the ledger, not this table ----47PAPER = "21-gravity"48KEYS = {"A1": "p21001", "A2": "p21002", "A3": "p21003", "A4": "p21004", "A5": "p21005", "A6": "p21006", "A7": "p21007", "A8": "p21008", "A9": "p21009", "B1": "p21010", "B2": "p21011", "B3": "p21012", "B4": "p21013", "B5": "p21014", "B6": "p21015", "B7": "p21065", "B8": "p32014", "B9": "p32015", "C1": "p21016", "C2": "p21017", "C3": "p21018", "C4": "p21019", "C5": "p21020", "C6": "p21021", "C7": "p21022", "C8": "p21023", "C9": "p21024", "C10": "p21025", "C11": "p21026", "C12": "p21027", "C13": "p21062", "C14": "p21063", "C15": "p21030", "C16": "p21031", "C17": "p21032", "C18": "p21033", "C19": "p21064", "C20": "p21035", "C21": "p21036", "C22": "p21037", "C23": "p21038", "C25": "p21040", "X1": "p21041", "X2": "p21042", "X3": "p21043", "X4": "p21044", "X5": "p21045", "X6": "p21046", "X7": "p21047", "X8": "p21048", "P1": "p21049", "P7": "p21050", "P8": "p21060", "P2": "p21051", "P3": "p21052", "P4": "p21053", "P5": "p21054", "P6": "p21055", "Z1": "p21059"}       # every row of the ledger: its label and its accession key49LEAN = {"A1": "core, ml", "A9": "core, ml", "C1": "core, ml", "C2": "core, ml", "C3": "core", "C4": "ml", "C5": "core, ml", "C6": "core", "C7": "core, ml", "C8": "core, ml", "C9": "core, ml", "C11": "core, ml", "C12": "ml", "C13": "core, ml", "C15": "core, ml", "C16": "core, ml", "C18": "ml", "C19": "core, ml", "C20": "core, ml", "C21": "core", "C25": "core, ml", "X1": "core", "X2": "ml", "X3": "core", "X8": "ml", "P1": "ml", "P7": "ml", "P8": "ml", "P2": "ml", "P3": "ml", "P4": "ml", "P5": "ml", "P6": "core, ml"}       # the rows with a Lean declaration: the libraries whose key files prove them50# ---- end of the generated table ----5152LEAN_ONLY = ()                  # the predicates with a Lean declaration and no python check (gate G12): none5354SHELLS = [13, 17, 37, 1373]                  # the shells p = 4κ + 1 of the paper's register (21:C2, C16)55LAB = 2408561                                # the laboratory Carrier Ω = 4S + 1, S = 602 140 (21:C16; FRC.Gravity.lab_register)56MERGER = (27811, 1596)                       # the merger instance on the count face (21:C13; FRC.Gravity.merger_instance)5758# The paper's predicate ledger (Appendix A, predicates cited as 21:XN): the predicate(s) each check witnesses.59LEDGER = {60    "A1": "21:C16, 21:A1", "A2": "21:C2, 21:C16", "A3": "21:C5", "A4": "21:A9", "A5": "21:C13", "A6": "21:X8, 21:C5",61    "A7": "21:X1, 21:C14",62    "B1": "21:C9", "B2": "21:C9", "B3": "21:C9", "B4": "21:C20", "B5": "21:C4, 21:C20", "B6": "21:C1", "B7": "21:C15",63    "B8": "21:C2",64    "C1": "21:C21", "C2": "21:C22, 21:C21", "C3": "21:C21, 21:C1", "C4": "21:C11", "C5": "21:C25, 21:C7", "C6": "21:C6",65    "C7": "21:C19", "C8": "21:C19, 21:C21", "C9": "21:C23, 21:C21", "C10": "21:P7, 21:C12", "C11": "21:C19, 21:C21",66    "C12": "21:C3", "C13": "21:X3, 21:C21",67    "D1": "21:C8, 21:C7", "D2": "21:C23", "D3": "21:P6, 21:C8", "D4": "21:C12", "D5": "21:C18",68    "E1": "21:C2", "E2": "21:C7", "E3": "21:C12", "E4": "21:P1", "E5": "21:P7, 21:C12, 21:C13", "E6": "21:C4",69    "E7": "21:P2, 21:C10", "E8": "21:C17", "E9": "21:C11", "E10": "21:C11", "E11": "21:C15", "E12": "21:P6", "E13": "21:X3, 21:C12",70    "F1": "21:P3", "F2": "21:X2, 21:C19", "F3": "21:P4", "F4": "21:P4", "F5": "21:P8, 21:C18", "F6": "21:P5",71    "F7": "21:X1, 21:C14",72    "G1": "21:C19",73}7475BLOCK = {"A": "the register on a frame",                     # check-id prefix -> the block (the function block_<letter> below)76         "B": "the lattice",77         "C": "the drift and the defect",78         "D": "the post-Newtonian series",79         "E": "the strong field",80         "F": "the floor and the crossover",81         "G": "the simulation"}8283# the deciding check of each witnessed predicate84PREDICATES = {85    "21:A1": "A1", "21:A9": "A4", "21:C16": "A1", "21:C2": "A2", "21:C5": "A3", "21:C13": "A5", "21:X8": "A6", "21:X1": "A7",86    "21:C9": "B1", "21:C20": "B4", "21:C4": "B5", "21:C1": "B6", "21:C15": "B7",87    "21:C21": "C1", "21:C22": "C2", "21:C11": "C4", "21:C25": "C5", "21:C6": "C6", "21:C19": "C7", "21:C23": "D2", "21:C3": "C12", "21:X3": "C13",88    "21:C8": "D1", "21:C7": "D1", "21:P6": "D3", "21:C12": "D4", "21:C18": "D5",89    "21:P1": "E4", "21:P7": "E5", "21:P2": "E7", "21:C10": "E7", "21:C17": "E8",90    "21:P3": "F1", "21:X2": "F2", "21:P4": "F3", "21:P8": "F5", "21:P5": "F6",91}9293R = Registry("21", "gravity", LEDGER, PREDICATES, sources=[__file__])94Fr = Fraction959697def near(x, y, rel=None, abs_=None):98    """|x − y| within the stated tolerance, the chart's float x read as a Fraction against rational bounds."""99    d = abs(Fr(x) - Fr(y))100    return (rel is not None and d <= Fr(rel) * abs(Fr(y))) or (abs_ is not None and d <= Fr(abs_))101102103def between(lo, x, hi):104    return Fr(lo) < Fr(x) < Fr(hi)105106107def num(x):108    """A Fraction as a quotient of integers for the record's text (Python 3.10 formats no Fraction); a float as it is."""109    return x.numerator / x.denominator if isinstance(x, Fraction) else x110111112# ---- block A: the register on a frame (21:A1, A9, C2, C5, C13, C16, X1, X8) ---------------------------------------------------113@R.block("A", BLOCK["A"])114def block_A():115    shells = SHELLS + [LAB]116    ok = all(D.calibration(p) for p in shells)117    ok &= 4 * 602140 + 1 == LAB and (4 * 602140) % LAB == LAB - 1 and (4 * 602140) ** 2 % LAB == 1118    # 21:C16 (p21031), 21:A1 (p21001)119    R.check("A1", "the calibration congruence on p = 4κ + 1: 4κ ≡ −1 and (4κ)² ≡ 1 on the four shells and the laboratory Carrier Ω = 2 408 561 (4S = 2 408 560)", ok,120            f"p ∈ {SHELLS} and Ω = {LAB}")121    ok, det = True, []122    for p in shells:123        rel = D.newton_register(p)124        ok &= all(rel)125        k = (p - 1) // 4126        det.append(f"p={p}: G={2 * k}, c²={2 * k + 1}")127    # 21:C2 (p21017)128    R.check("A2", "the register value G = 2κ on every shell: 2G ≡ −1, (−2)G ≡ 1, the Gauss count (2·4κ)G ≡ 1, 2c² ≡ 1 with c² = 2κ + 1, and G ≡ −c²", ok, "; ".join(det))129    ok, det = True, []130    for p in shells:131        g = arith.primitive_root(p)132        rel = D.hbar_root(p, g)133        ok &= all(rel)134        det.append(f"p={p}: g={g}, ħ=g^κ={pow(g, (p - 1) // 4, p)}")135    # 21:C5 (p21020)136    R.check("A3", "the action quantum ħ = g^κ on every shell: ħ² ≡ −1 (the quarter turn), the root r = ħc² has r² ≡ κ and 2r ≡ ħ", ok, "; ".join(det))137    ps = [p for p in range(5, 200) if p % 4 == 1 and all(p % d for d in range(2, isqrt(p) + 1))]138    ok = all(D.channel_q4(p) for p in ps)139    ok &= all(k * (2 * S) == 2 * (k * S) and (4 * k) * (4 * S) == 4 * (4 * (k * S)) for k in range(1, 30) for S in (3, 7, 602140))140    # 21:A9 (p21009)141    R.check("A4", "the mass–energy channel: the residues of 𝔽_p^× in both C_{p−1} and C_{2(p+1)} are exactly the quarter-turn core Q₄ = {x : x⁴ = 1}, on every p ≡ 1 (mod 4) below 200; the two-face count κ·2S = 2κS and (p−1)(Ω−1) = 16κS", ok,142            f"{len(ps)} shells")143    ok, det = True, []144    for p in SHELLS:145        k = (p - 1) // 4146        S, A = G.record(p), G.area(p)147        ok &= S == k * (p + 1) and A == p * (p + 1) and Fraction(S, A) == Fraction(k, p) and 4 * k + 1 == p148        ok &= Fraction(k, p) == Fraction(1, 4) - Fraction(1, 4 * p)149        det.append(f"p={p}: S/A = {k}/{p}")150    ok &= all(G.sphere_points(p, a) == G.sphere_brute(p, a) for p in (13, 17) for a in (1, 2))151    m1, m2 = MERGER152    ok &= G.merger_area(m1, m2) == 2 * m1 * m2 == 88772712 and m1 + m2 == 29407153    ok &= all(G.merger_area(a, b) == 2 * a * b for a in range(1, 40) for b in range(1, 40))154    # 21:C13 (p21062)155    R.check("A5", "the count face: the record S = κ(p+1) and the area A = p(p+1) with S/A = κ/p = ¼ − 1/4p exactly (the Q₄ quotient's quarter), the sphere count two ways on 𝔽₁₃ and 𝔽₁₇, and the merger law ΔA = 2M₁M₂ on the count face (the instance 27 811 + 1 596 = 29 407)", ok,156            "; ".join(det) + f"; ΔA({m1}, {m2}) = {2 * m1 * m2}")157    ok = all(D.dilution(m, s) for m in (1, 3, 1000) for s in (5, 1552, 10 ** 61))158    # 21:X8 (p21048)159    R.check("A6", "cardinality dilution: with the Planck mass √Ω the coupling of two masses m is (m/√Ω)² = m²/Ω exactly on Ω = s²", ok, "m ∈ {1, 3, 1000}, s ∈ {5, 1552, 10⁶¹}")160    gens = {p: arith.primitive_root(p) for p in SHELLS + [29, 41]}161    ok = all(D.closed_chart(p, g) for p, g in gens.items())162    data = [D.curvature_datum(S) for S in (3, 4, 7, 10, 602140)]163    ok &= all(d[0] for d in data) and all(d[1] == Fraction(3, S) and d[2] == Fraction(1, 4 * S) for d, S in zip(data, (3, 4, 7, 10, 602140)))164    # 21:X1 (p21041)165    R.check("A7", "the closed chart and its curvature: on the frames of 𝔽₁₃, 𝔽₁₇, 𝔽₂₉, 𝔽₃₇, 𝔽₄₁ every nonzero residue returns after the full cycle 4κ chronons, the generator after no shorter run, the half cycle is −1, and the cycle's register is 4κ ≡ −1 (the horizon circumference in light time, 2π r_H/c, is the full cycle); over ℚ with π a symbol, the de Sitter entropy S = π r_H² and Ω = 4S + 1 give the curvature Λ = 3/r_H² = (3/S)π with Λ(Ω − 1) = 12π exactly (Λ ∼ 1/Ω in Planck units, the two readings of the one datum Ω), the chronon τ² = (π/4S) t_P² and the horizon 2S/π chronons (the chart's π kept a symbol: no residue stands in for it)", ok,166            "; ".join(f"p={p}: g={g}" for p, g in gens.items()) + "; S ∈ {3, 4, 7, 10, 602140}")167168169# ---- block B: the lattice (21:C1, C2, C4, C9, C15, C20) --------------------------------------------------------------------170@R.block("B", BLOCK["B"])171def block_B():172    ok = LT.fp_gauge_invariant(3, 4, seed=7) and LT.fp_gauge_invariant(3, 4, seed=11) and LT.fp_gauge_invariant(4, 4, seed=7)173    control = LT.fp_gauge_invariant(3, 4, seed=7, kind="forward")174    ok &= not control175    # 21:C9 (p21024)176    R.check("B1", "the discrete Fierz–Pauli functional on ℤ_N⁴ (N = 3, 4; Minkowski signature) with random integer fields: E[h + Dξ + (Dξ)ᵀ] = E[h] an exact integer identity for central differences, failing for one-sided differences (the control)", ok,177            f"central invariant on ℤ₃⁴ (two seeds) and ℤ₄⁴; one-sided invariant: {control}")178    ok1, ok2, ns1, ns2 = LT.fierz_pauli_line(samples=12)179    ok = ok1 and ok2180    R.check("B2", "uniqueness by the symbol method over ℚ: the gauge-invariant quadratic forms at a symbol are one line for spin 1 (Maxwell, a₁ + a₂ = 0) and one line for spin 2, the Fierz–Pauli line (−1, 2, −2, 1)", ok,181            f"spin-2 nullspace {[str(x) for x in ns2[0]]}" if ns2 else "no line")182    rng = random.Random(21)183    ok = True184    for n in range(3, 61):185        f = [rng.randint(-9, 9) for _ in range(n)]; g = [rng.randint(-9, 9) for _ in range(n)]186        ok &= LT.adjoint_identity(f, g, n) and LT.forward_adjoint_identity(f, g, n)187    R.check("B3", "the central difference is anti-self-adjoint on every cycle of 3 to 60 sites, Σ (Δf) g = −Σ f (Δg) on random integer fields; the forward difference's adjoint is the negative backward difference", ok, "58 cycles")188    ok, det = True, []189    for p in (13, 17, 37):190        g = arith.primitive_root(p)191        ns = [n for n in range(2, p) if (p - 1) % n == 0]192        for n in ns:193            for _ in range(3):194                v = [rng.randrange(p) for _ in range(n)]195                ok &= all(LT.shift_theorem(p, n, g, v, a) for a in range(n))196        det.append(f"p={p}: n ∈ {ns}")197    # 21:C20 (p21035)198    R.check("B4", "the finite Fourier shift theorem on every cycle of 𝔽₁₃, 𝔽₁₇ and 𝔽₃₇: the kick ζ^{ax}v shifts the transform by a, the shift of v by a multiplies its transform by ζ^{ak}, every a, random v (seed 21)", ok, "; ".join(det))199    ok = all(LT.two_shift_law(m, gu, T) for m in (1, 4, 9) for gu in (1, 2, 5) for T in (20, 40))200    # 21:C4 (p21019)201    R.check("B5", "the two-shift update law on an integer grid: Δ²q = −∇u at every interior chronon, and the registered trajectory is bitwise independent of m (the equivalence principle as an identity)", ok, "m ∈ {1, 4, 9}, ∇u ∈ {1, 2, 5}")202    ok, det = True, []203    for n, m in ((3, 3), (4, 3), (5, 3), (3, 5), (4, 4), (6, 3), (7, 3)):204        locked, mean = D.locked_sum(n, m)205        ok &= locked == m * m and mean == m206        det.append(f"n={n}, m={m}: |Σ|²={locked}, mean {mean}")207    # 21:C1 (p21016)208    R.check("B6", "the locked ensemble couples as m (|Σ_m z|² = m² on the locked word, computed as its residue multiset in ℤ[ζ_n]) while over all n^m phase words the mean of |Σ ζ^k|² is exactly m (the incoherent √m), an integer identity in ℤ[ζ_n]", ok, "; ".join(det))209    ok = all(LT.tt_rank(k) == 2 for k in ((1, 0, 0), (1, 1, 0), (1, 2, 2), (3, -1, 5)))210    det = []211    for p in (13, 17, 29):212        even, zeros = LT.laplacian_symbol_even(p, arith.primitive_root(p))213        ok &= even and zeros == [0]214        det.append(f"p={p}: even, zero at k=0 only")215    # 21:C15 (p21030)216    R.check("B7", "the radiative sector: the transverse-traceless projector has rank 2 at rational directions (two polarisations), and the cycle Laplacian's symbol 2 − g^k − g^{−k} is even in k with its zero at k = 0 alone on 𝔽₁₃, 𝔽₁₇, 𝔽₂₉", ok, "; ".join(det))217    ok = all(LT.tree_count(n) == n for n in (5, 8, 12, 20))218    R.check("B8", "spanning-tree admissibility: det of the reduced Laplacian of C_n is τ(C_n) = n exactly (n = 5, 8, 12, 20), the finite solvability predicate of the lattice potential", ok, "")219220221# ---- block C: the drift and the defect (21:C1, C3, C6, C7, C11, C12, C19, C21, C22, C23, C25, P7, X3) -----------------------222@R.block("C", BLOCK["C"])223def block_C():224    L, q, a, T = D.defect(60, 28, 1, 1)225    ok = (L, q, a, T) == (420, 4, 8, 105) and D.first_return(L // q, a) == 105 and D.first_return(L, a) == 105226    rng = random.Random(2128)227    for _ in range(200):228        nA, nB = rng.randint(2, 60), rng.randint(2, 60)229        wA, wB = rng.randint(0, nA - 1), rng.randint(0, nB - 1)230        L, q, a, T = D.defect(nA, nB, wA, wB)231        ok &= D.first_return(L // q, a) == T and (T * a) % (L // q) == 0 and all((t * a) % (L // q) for t in range(1, T))232    # 21:C21 (p21036)233    R.check("C1", "the relative-cycle defect recurs exactly: on the C₆₀–C₂₈ pair L = 420, q = 4, the defect a = 8 and the period T = 105 (the least t with t·a ≡ 0), and on 200 random pairs the least return equals (L/q)/gcd(L/q, a)", ok,234            "C₆₀–C₂₈: (420, 4, 8, 105); 200 random pairs")235    ok = all(D.compression_identity(n, sec) for n, sec in ((6, {0, 1, 2}), (8, {0, 1, 2, 3, 5}), (12, {1, 2, 3, 4, 5, 6, 7})))236    # 21:C22 (p21037)237    R.check("C2", "the compression identity: on the cyclic shift U with a sector projector P, K = PUP and C = (1 − P)UP satisfy P − KᵀK = CᵀC exactly (relaxation is unresolved leakage, the recurrence retained), on ℤ₆, ℤ₈, ℤ₁₂", ok, "")238    ok = all(D.pair_tally_identity(p, z) for p in (13, 17, 37) for z in range(1, p))239    dims = [D.antisymmetric_dimension(d) for d in (1, 2, 3, 5)]240    ok &= dims == [1, 2, 3, 5]241    R.check("C3", "the pair tally on the norm-one pair (z, w = z⁻¹): E + W = 4 and (z − w)² = −E·W for every z ∈ 𝔽_p^×, p = 13, 17, 37; the antisymmetric currents J(z⁻¹) = −J(z) of degree ≤ d form a d-dimensional space (exact rank over ℚ), so the sine mode (z − z⁻¹)/2i is the unique minimal-degree current up to scale and higher odd harmonics exist", ok,242            f"dimensions {dims} at d = 1, 2, 3, 5")243    ok = True244    for trial in range(20):245        n = rng.randint(4, 12)246        J = [[0] * n for _ in range(n)]247        for x in range(n):248            for y in range(x + 1, n):249                v = rng.randint(-5, 5); J[x][y], J[y][x] = v, -v250        region = {x for x in range(n) if rng.randrange(2) == 0}251        ok &= D.gauss_law(J, region)252    # 21:C11 (p21026)253    R.check("C4", "the cut-flux law from transfer antisymmetry: on 20 random graphs with antisymmetric integer link currents, the divergence summed over a random region equals the flux through its boundary (the interior links cancel in pairs)", ok, "")254    ok = D.cover_triangle(Fraction(1), Fraction(1))255    ok &= all((2 * g - b == 1 and g == 1) <= (b == 1) for g in (Fraction(1), Fraction(3, 2), Fraction(1, 2)) for b in (Fraction(1), Fraction(2), Fraction(0)))256    ok &= not D.cover_triangle(Fraction(1), Fraction(2))257    # 21:C25 (p21040)258    R.check("C5", "the PPN triangle: channel unity's γ = 1 with the instance cover's 2γ − β = 1 force β = 1, the deviation ⅔(2γ − β − 1) vanishing; a second β fails the triangle", ok, "")259    ok, det = True, []260    for p in (13, 17, 37):261        nu = next(v for v in range(2, p) if pow(v, (p - 1) // 2, p) == p - 1)262        for _ in range(30):263            ok &= D.frobenius_trace(p, nu, rng.randrange(1, p), rng.randrange(p), rng.randrange(p))264        det.append(f"p={p}: ν={nu}")265    # 21:C6 (p21021)266    R.check("C6", "the dust tensor's source: the Frobenius pairing of m(w ⊗ w) on 𝔽_p[η]/(η² − ν) equals m·N(w), the trace of the Frobenius-symmetric square is the mass times the norm", ok, "; ".join(det))267    ok, det = True, []268    for w, s in ((Fraction(3, 5), Fraction(4, 5)), (Fraction(5, 13), Fraction(12, 13)), (Fraction(8, 17), Fraction(15, 17)), (Fraction(20, 29), Fraction(21, 29))):269        r, eta = D.registration_root(w, s)270        ok &= r and 0 < eta < 1271        det.append(f"w={w}: η={eta}")272    ok &= all(D.chebyshev_weight(L, d, w) for L, d, w in ((6, 2, Fraction(3, 5)), (9, 4, Fraction(7, 10)), (12, 5, Fraction(2, 3))))273    # 21:C19 (p21064)274    R.check("C7", "the registration crossover's exact root: on w² + s² = 1 the root η = (1 − s)/w of wη² − 2η + w = 0 lies in (0, 1); the two-boundary masking weight q_{L,d} = (U_{d−1} + U_{L−d−1})/U_{L−1} at 1/w equals the tridiagonal solve of the killed walk on three (L, d, w)", ok,275            "; ".join(det))276    ok = all(D.christoffel(a, b) for a, b in ((3, 7), (5, 12), (7, 10), (114, 641)))277    prov, within = D.largest_remainder([Fraction(23, 54), Fraction(23, 54), Fraction(2, 27), Fraction(2, 27)], 81)278    ok &= within and prov == [35, 34, 6, 6] and sum(prov) == 81279    ok &= all(D.ledger_identity(m, g, N, T) for m in (1, 3) for g in (Fraction(2), Fraction(-7, 3)) for N, T in ((3, 7), (10, 4)))280    orbit = [D.event_orbit(a, b, g) for a, b, g in ((23, 54, Fraction(11, 9)), (5, 12, Fraction(3)), (7, 9, Fraction(-2, 5)))]281    ok &= all(o[0] and o[1] == a for o, a in zip(orbit, (23, 5, 7)))282    R.check("C8", "the registration words and the readout: the Christoffel pattern at rate a/b (a marks per recurrence b, gaps ⌊b/a⌋, ⌈b/a⌉), the largest-remainder allocation 35 + 34 + 6 + 6 = 81 at weights (23/54, 23/54, 2/27, 2/27), the registered-inertia identity mgT = (fm)(g/f)T over framed rationals; the event-based orbit: the a registered events of the word, each carrying g_N/f, sum to the window total b·g_N exactly (rates 23/54, 5/12, 7/9)", ok,283            f"allocation {prov}")284    sup, cut, bil, clock = D.binding(N=5, m1=3, m2=5)285    ok = sup and cut and bil and clock286    R.check("C9", "binding bookkeeping on the torus ℤ₅³ over the prime field 𝔽_{2⁶¹−1}: superposition exact, the far cut flux around the bound pair equals m₁ + m₂, the interaction energy exactly bilinear, the binding defect m₁(1 − u₂(a)) a registered-clock identity (η_Nordtvedt = 0)", ok,287            f"superposition {sup}, cut {cut}, bilinear {bil}, clock {clock}")288    ok = D.fold_return(17, 8, 4)289    R.check("C10", "the fold-return toy over 𝔽₁₇: on the chain C₈ with the interior block folded by its exact DFT (i = 4), the period-averaged exterior return P_E F Uⁿ F⁻¹ P_E is the uniform floor operator, fold-independent (no echo carries the fold)", ok, "")290    first = D.kesten_control(641, 3, Fraction(23, 54), 200)291    split = [D.stratum_split(B) for B in (2, 3)]292    ok = first is not None and all(s[0] for s in split) and [s[1] for s in split] == [128, 512]293    R.check("C11", "the counting theorem's controls on the readout's worked instance (Ω = 641, g = 3): the negative control — prefix counts along the raw drive orbit against the threshold 23/54 break unit discrepancy (Kesten), so the attribution is stated over complete recurrences; the per-stratum split at B = 2, 3 — the dial of eight primitive eighth roots is ±√2 summing to zero, the string tallies in ℤ[√2] are 8 × the Galois-symmetric coefficients, total 4^B · 8, agreeing mod 641", ok,294            f"first discrepancy ≥ 2 at B = {first}; totals {[s[1] for s in split]}")295    arrows = [D.single_arrow(p, nu) for p, nu in ((13, 2), (17, 3), (37, 2))]296    signs = [D.pair_energy_sign(n) for n in (3, 4)]297    ok = all(a[0] for a in arrows) and all(a[1] == p + 1 for a, (p, _) in zip(arrows, ((13, 2), (17, 3), (37, 2)))) and all(s[0] for s in signs)298    # 21:C3 (p21018)299    R.check("C12", "the single arrow: on 𝔽_{p²} (p = 13, 17, 37) the Frobenius z ↦ z^p is the conjugation on every element, on the norm-one circle the conjugate is the inverse and the drive generator's conjugate orbit is its orbit reversed, and the conjugation fixes ±1 alone (no translation of the circle does): a time-reversed clock is the Frobenius branch, not a step of the drive; over ℚ the Dirichlet Green's function of the 3³ and 4³ grids is entrywise positive, so the cross term of two sources lowers the energy exactly when their signs agree — like-signed sources attract", ok,300            "; ".join(f"p={p}: circle of order {a[1]}, fixed {a[2]}" for a, (p, _) in zip(arrows, ((13, 2), (17, 3), (37, 2)))) + f"; G_ab = {signs[0][1]} (3³), {signs[1][1]} (4³)")301    returns = [D.offset_return(n, sec) for n, sec in ((8, {1, 2, 3}), (12, {0, 5, 6, 7, 11}), (9, {4}))]302    ok = all(r[0] and r[1] == n for r, (n, _) in zip(returns, ((8, 0), (12, 0), (9, 0)))) and all(D.compression_identity(n, sec) for n, sec in ((8, {1, 2, 3}), (9, {4})))303    # 21:X3 (p21043)304    R.check("C13", "the offset sector confines what the drive moves, exactly: on the cycles ℤ₈, ℤ₁₂, ℤ₉ with a sector P, for random rational ψ the sector's weight is what the step keeps plus what it moves out, ‖Pψ‖² = ‖PUPψ‖² + ‖(1 − P)UPψ‖² (the compression identity P − KᵀK = CᵀC), the step conserves the whole weight, and the drive is a permutation of order n, so the leaked data return after n steps (the interior data of the horizonless body live in that sector; nothing is lost — the theorem citation is 22:C15)", ok,305            f"orders {[r[1] for r in returns]}")306307308# ---- block D: the post-Newtonian series (21:C7, C8, C12, C18, C23, P6) ------------------------------------------------------309@R.block("D", BLOCK["D"])310def block_D():311    pn = D.pn_coefficients(6)312    ok = pn["ok"] and Fraction(2 + 2 * pn["gamma"] - pn["beta"], 3) == 1313    # 21:C8 (p21023), 21:C7 (p21022)314    R.check("D1", "the exponential isotropic metric: β = γ = 1 read off e^{−2U} and e^{2U}, the perihelion factor (2 + 2γ − β)/3 = 1; against the isotropic Schwarzschild form the deviations are δA = U³/6 and δB = U²/2 exactly, nothing lower", ok,315            f"dA = {[str(x) for x in pn['dA'][:5]]}, dB = {[str(x) for x in pn['dB'][:4]]}")316    ok = D.two_body_1pn(3)317    # 21:C23 (p21038)318    R.check("D2", "the 1PN equivalence lemma: on the superposed potential U = U₁ + U₂ the two-body coefficients A to O(U²) and B to O(U) coincide with the isotropic form, the cross term 4U₁U₂ included (the Einstein–Infeld–Hoffmann sector shared exactly)", ok, "U₂/U₁ ∈ {1, 3/7, −2/5}")319    inp = D.pn_orbit_inputs(5)320    ok = inp["ok"]321    # 21:P6 (p21055)322    R.check("D3", "the 2PN orbit-equation inputs, exact in x = Mw: B/A − (B/A)_S = x²/2 + 5x³/3 and B − B_S = x²/2 + 5x³/6, so δc₂'s leading term is ε M²/L² and δc₃ = (5/6) M³/L²; the apsidal sum 5/2 − (1 − e²)/2 = 2 + e²/2", ok,323            f"c2 at E=1: {inp['c2_const']}, ε-coefficient {inp['c2_eps']}, c3 = {inp['c3']}")324    co = D.static_profile_coefficients(3)325    ok = co == [Fraction(1), Fraction(1, 30), Fraction(1, 120)]326    # 21:C12 (p21027)327    R.check("D4", "the exact saturating profile u(r) = ∫_r^∞ arcsin(Gm/s²) ds as an exact series: Gm/r (1 + (Gm/r²)²/30 + (Gm/r²)⁴/120 + …), the arcsin saturating at the slip core r_* = √(Gm)", ok, f"coefficients {[str(c) for c in co]}")328    fixed, ratios = D.scale_invariant_exponent(-6, 3)329    ok = fixed == [-3] and all(ratios[n][(lam, k)] == lam ** (n + 3) for n in ratios for lam, k in ratios[n])330    ok &= ratios[-2][(Fraction(2), 5)] == 2 and ratios[-4][(Fraction(2), 5)] == Fraction(1, 2) and ratios[0][(Fraction(3, 2), 1)] == Fraction(27, 8)331    # 21:C18 (p21033)332    R.check("D5", "the primordial spectrum's fixed point: Δ² ∝ k^{n+3} under the drive k ↦ λk is multiplied by (λk)^{n+3}/k^{n+3} = λ^{n+3}, evaluated exactly over ℚ for n ∈ [−6, 3), λ ∈ {2, 3/2, 1/3}, k ∈ {1, 2, 5}: the ratio is 1 at every (λ, k) for n = −3 alone, n_s = 1 (Harrison–Zel'dovich) the unique scale-dilation fixed point", ok,333            f"fixed points {fixed}; at n = −2 the ratio is λ, at n = −4 it is 1/λ")334335336# ---- block E: the strong field (21:C2, C4, C7, C10, C11, C12, C13, C15, C17, P1, P2, P6, P7, X3) [chart] ----------------------337# The chart's floats are read as Fractions and judged against rational tolerances: this file carries no float (gate G09).338@R.block("E", BLOCK["E"])339def block_E():340    ratios = CG.green_ratios((3, 5, 8, 12), M=300)341    slope = CG.green_slope((5, 8, 12), M=300)342    ok = all(abs(Fr(ratios[r]) - 1) <= Fr(3, 2) / r ** 2 + Fr(5, 1000) for r in ratios) and abs(Fr(slope) + 1) < Fr(2, 100)343    ok &= near(CG.lattice_green(0, 300), Fr("0.2527310098"), rel=Fr(1, 10 ** 5))344    R.check("E1", "the Newtonian layer: the exact lattice Green's function of ℤ³ (the Montroll kernel, the k₁ integral in closed form) has 4πr G(r) = 1 + O(r⁻²) at r = 3, 5, 8, 12 and the potential slope −1; G(0) = 0.252731 (Watson)", ok,345            ", ".join(f"4π·{r}·G = {ratios[r]:.4f}" for r in ratios) + f"; slope {slope:.4f}", kind="CHART")346    alpha, target = CG.deflection()347    ok = near(alpha, target, rel=Fr(1, 10 ** 6))348    R.check("E2", "the Fermat deflection in the index n = 1 + 2Gm/c²r integrates over the line to 4Gm/c²b (the full light deflection, γ = 1)", ok, f"α = {alpha:.9f} against {target}", kind="CHART")349    ok = all(near(*CG.profile_series(r), rel=Fr(1, 10 ** 5)) for r in (3, 5, 10))350    rph, bc = CG.photon_sphere()351    ok &= near(rph, 2, abs_=Fr(5, 100)) and near(bc, CG.TWO_E, abs_=Fr(2, 100))     # the package's tolerances: the exact profile shifts the exponential minimum by 1 %352    R.check("E3", "the exact profile's quadrature against its series (r = 3, 5, 10) and the photon sphere: the minimum of r e^{2u} taken on the exact profile (grid 0.01) lies within 1 % of the exponential zone's r_ph = 2Gm, its critical impact parameter within 0.2 % of b_c = 2e·Gm (tolerances 0.05, 0.02)", ok,353            f"r_ph = {rph:.2f}, b_c = {bc:.4f} (2e = {CG.TWO_E:.4f})", kind="CHART")354    sh, rd = CG.shadow_ringdown(); ang = CG.angular_shadows(); isc = CG.isco()355    ok = near(sh, Fr("0.0463"), abs_=Fr(5, 10 ** 4)) and near(rd, Fr("-0.0442"), abs_=Fr(5, 10 ** 4))356    ok &= near(isc["eff"], Fr("0.0548"), abs_=Fr(2, 10 ** 4)) and near(isc["eff_schw"], Fr("0.0572"), abs_=Fr(2, 10 ** 4))357    ok &= abs(Fr(isc["Wrr"])) < Fr(1, 10 ** 6) and near(isc["ratio"], Fr("0.931"), abs_=Fr(2, 1000))358    ok &= near(ang["Sgr A*"][0], Fr("53.3"), abs_=Fr(2, 10)) and near(ang["Sgr A*"][1], Fr("55.7"), abs_=Fr(2, 10))359    ok &= near(ang["M87*"][0], Fr("39.7"), abs_=Fr(2, 10)) and near(ang["M87*"][1], Fr("41.5"), abs_=Fr(2, 10))360    # 21:P1 (p21049)361    R.check("E4", "the strong-field signatures: shadow +4.63 % and ringdown −4.42 % (2e against 3√3), the ISCO at r = (3 + √5)Gm with accretion efficiency 5.48 % against Schwarzschild's 5.72 % and the ISCO frequency at 0.931 (−6.9 %); Sgr A* 53.3 → 55.7 μas and M87* 39.7 → 41.5 μas [data]", ok,362            f"shadow {sh:+.4f}, ringdown {rd:+.4f}, efficiency {isc['eff']:.4f}, frequency ratio {isc['ratio']:.4f}", kind="CHART")363    cut = CG.operational_cut(10 ** 6); low = CG.operational_cut(100)364    ok = cut["ordered"] and not low["ordered"] and near(cut["threshold"], Fr("20093.06"), rel=Fr(1, 10 ** 5))365    ok &= near(cut["round_trip"], CG.OMEGA, rel=Fr(1, 10 ** 9)) and near(cut["capacity_ratio"], Fr("1.244e-5"), rel=Fr(1, 1000))366    ok &= near(cut["echo"], CG.OMEGA / CG.LN_OMEGA ** 2, rel=Fr(1, 10 ** 12)) and near(cut["r_f"], Fr(2 * 10 ** 6) / C.LN_OMEGA, rel=Fr(1, 10 ** 12))367    # 21:P7 (p21050)368    R.check("E5", "the operational cut at ln Ω = 283.5: r_* < r_f = r_s/ln Ω < M for M > (ln Ω/2)² = 20 093 Planck masses (ordered at 10⁶, not at 10²); the round-trip factor e^{2u(r_f)} = Ω = 1.3 × 10¹²³ (no prompt echo); the capacity ratio S/S_BH = 1/ln²Ω = 1.24 × 10⁻⁵; the echo factor Ω/ln²Ω", ok,369            f"r_f = r_s/{CG.LN_OMEGA}, threshold {cut['threshold']:.1f}, capacity ratio {cut['capacity_ratio']:.3e}", kind="CHART")370    ok = all(CG.redshift_linear(Fr(1, 10 ** k)) for k in (1, 2, 3, 4, 6))371    ta = CG.turnaround()372    ok &= between(1, ta, Fr(5, 2))373    R.check("E6", "the redshift as clock rate: 1 − e^{−u} = u + O(u²), |1 − e^{−u} − u| ≤ u² on 10⁻⁶ ≤ u ≤ 10⁻¹; the Local-Group turnaround radius (Gm/H²)^{1/3} ≈ 1.6 Mpc against the observed ~1 Mpc [data]", ok, f"turnaround {ta:.2f} Mpc", kind="CHART")374    pf = CG.preferred_frame_scale()375    ok = between(Fr(2, 10 ** 62), pf, Fr(4, 10 ** 62)) and near(pf, Fr("2.75e-62"), rel=Fr(1, 100))376    drag = CG.dragging_field(J=Fr(3, 10), r=10)377    ok &= near(drag["axis"], CG.lense_thirring(Fr(3, 10), 10), rel=Fr(1, 10 ** 6)) and near(drag["equator"], -Fr(3, 10 ** 4), rel=Fr(1, 10 ** 6))378    ok &= Fr(drag["laplacian"]) < Fr(1, 10 ** 5) and Fr(drag["divergence"]) < Fr(1, 10 ** 5) and Fr(drag["transverse"]) < Fr(1, 10 ** 12)379    # 21:P2 (p21051), 21:C10 (p21025)380    R.check("E7", "no preferred-frame leakage: the drive's signature at 1/√Ω = 3 × 10⁻⁶² on the chart (α₁, α₂ = O(1/√Ω), far below the 10⁻⁵ bounds [data]); the dragging of the spin J: the gravitomagnetic dipole A = J × r/r³ (C17's quarter-turn dual) is harmonic and divergence-free off the source, and its curl is 2J/r³ on the axis — the Lense–Thirring rate 2GJ/c²r³ in its observed form — and −J/r³ on the equator (central differences, J = 0.3, r = 10)", ok,381            f"1/√Ω = {pf:.3e}; curl on the axis {drag['axis']:.6e} against 2J/r³ = {num(CG.lense_thirring(Fr(3, 10), 10)):.6e}", kind="CHART")382    spins = (Fr(1, 10), Fr(3, 10), Fr(1, 2), Fr(9, 10))383    erg = [CG.ergosurface(a) for a in spins]384    ok = all(Fr(erg[i]) < Fr(erg[i + 1]) for i in range(3)) and all(between(1, e, 3) for e in erg)385    # 21:C17 (p21032)386    R.check("E8", "the rotating solution: the O(a²) ergosurface of the horizonless body, the outer root of e^{−4/r} = 4a²/r⁴, exists and grows with the spin a (the frame-dragging dual, no horizon)", ok, ", ".join(f"a={a}: r={e:.3f}" for a, e in zip(spins, erg)), kind="CHART")387    ok = all(Fr(CG.schwarzschild_as_exponential(U)) < Fr(1, 10 ** 12) for U in (Fr(1, 10), Fr(3, 10), Fr(1, 2), Fr(9, 10)))388    ce, cs = CG.composition_violation(Fr(1, 5), Fr(3, 10))389    ok &= Fr(ce) < Fr(1, 10 ** 15) and Fr(cs) > Fr(1, 1000) and abs(Fr(CG.laplacian_psi(3))) > Fr(1, 10 ** 4)390    R.check("E9", "the nonlinear completion's two readings: isotropic Schwarzschild is the exponential reading e^{−2ψ} of ψ = 2 artanh(U/2), ψ non-harmonic (Δψ ≠ 0), and the Schwarzschild reading violates the composition law R(a + b) = R(a)R(b) that the exponential satisfies", ok,391            f"composition defect: exponential {num(ce):.1e}, Schwarzschild {num(cs):.4f}; Δψ(3) = {num(CG.laplacian_psi(3)):.2e}", kind="CHART")392    fluxes, power, two = CG.sine_model_flux(N=9, iters=1500)393    ok = all(near(f, 4, abs_=Fr(1, 1000)) for f in fluxes) and near(power, 3, abs_=Fr(2, 10)) and near(two, 6, abs_=Fr(1, 1000))394    R.check("E10", "the cut-flux law of the full sine model: the flux through every box about the source equals the demand to solver precision, the deviation from the linear model scales as the cube of the source (no m² self-sourcing), and with two sources (4 and 2, two sites apart) the flux through the box enclosing both is 6", ok,395            f"fluxes {[round(f, 5) for f in fluxes]} against 4; power {power:.3f}; two sources {two:.5f} against 6", kind="CHART")396    vg = CG.group_velocity(Fr(1, 1000))397    ok = near(vg, 1, abs_=Fr(1, 10 ** 5)) and near(CG.dispersion((CG.PI, 0, 0)), 4, abs_=Fr(1, 10 ** 12))398    ok &= all(near(CG.helicity_angle(d), 2 * d, abs_=Fr(1, 10 ** 9)) for d in (15, 30, 45))399    R.check("E11", "the radiative sector on the chart: ω² = Σ 4 sin²(k_i/2), the long-wave group velocity c = 1 (channel unity), the Nyquist edge at ω² = 4; rotating the field about k by ψ rotates (h₊, h×) by 2ψ — helicity ±2", ok,400            f"v_g(10⁻³) = {vg:.6f}", kind="CHART")401    up, excess = CG.periastron_excess()402    ok = near(up, Fr("4.38e-6"), rel=Fr(1, 100)) and near(excess, Fr("1.46e-6"), rel=Fr(1, 100)) and near(excess, up * (2 + Fr("0.0878") ** 2 / 2) / 6, rel=Fr(1, 10 ** 9))403    R.check("E12", "the 2PN periastron excess of PSR J0737−3039 [data]: on the semi-latus rectum U_p = GM/c²p = 4.38 × 10⁻⁶ (M = 2.5871 M_⊙, P_b = 8834.5 s, e = 0.0878) and δω̇/ω̇ = U_p (2 + e²/2)/6 = 1.46 × 10⁻⁶, the row's 1.5 × 10⁻⁶", ok,404            f"U_p = {up:.4e}, excess {excess:.4e}", kind="CHART")405    u0, floor_rate, bound, low = CG.horizonless()406    ok = Fr(u0) < Fr(bound) and Fr(floor_rate) > 0 and near(low, floor_rate, rel=Fr(1, 10 ** 9)) and near(u0, Fr("2.622"), abs_=Fr(1, 1000))407    R.check("E13", "no horizon, no singularity: below the slip core r_* = √(Gm) the profile's integrand saturates at π/2, so u(0) = u(r_*) + (π/2) r_* = 2.622 Gm is finite and below the bound π r_* (arcsin x ≤ (π/2) x); the clock-rate factor e^{−2u} attains its minimum e^{−2u(0)} = 0.0053 > 0 at the centre and is positive everywhere", ok,408            f"u(0) = {u0:.4f}, e^(−2u(0)) = {floor_rate:.4e}, bound π r_* = {bound:.4f}", kind="CHART")409410411# ---- block F: the floor and the crossover (21:C18, C19, P3, P4, P5, P8, X1, X2) [chart] -------------------------------------------412@R.block("F", BLOCK["F"])413def block_F():414    a0 = CG.floor()415    ok = near(a0, Fr("1.042e-10"), rel=Fr(2, 1000))416    fit, syst = C.A0_FIT417    ok &= all(abs(Fr(CG.floor(h)) - fit) <= syst for h in (C.H0_ENTAILED, 70, 73))418    # 21:P3 (p21052)419    R.check("F1", "the weak-acceleration floor a₀ = cH₀/2π = 1.04 × 10⁻¹⁰ m s⁻² at the entailed H₀ = 67.4, and for H₀ ∈ {67.4, 70, 73} within one systematic σ of the fitted 1.20 ± 0.24 × 10⁻¹⁰ [data]", ok,420            f"a₀(67.4) = {a0:.4e}", kind="CHART")421    pairs = [CG.eta_reach(s, a) for s, a in ((Fr(1, 50), 3), (Fr(1, 800), 12), (Fr(1, 12800), 48))]422    gaps = [abs(Fr(x) - Fr(y)) / Fr(y) for x, y in pairs]423    ok = gaps[0] > gaps[1] > gaps[2] and gaps[2] < Fr(1, 10 ** 4)424    deep, newton = CG.loglog_slope(Fr(1, 10 ** 6)), CG.loglog_slope(10 ** 6)425    ok &= near(deep, Fr(1, 2), abs_=Fr(1, 1000)) and near(newton, 1, abs_=Fr(1, 10 ** 6))426    # 21:X2 (p21042)427    R.check("F2", "the crossover: the exact root η^a converges to the e^{−√x} reading as the window refines; the deep limit's log–log slope ½ (g_obs → √(g_N a₀), no dark-matter particle) and the Newtonian limit's slope 1", ok,428            f"slopes {deep:.4f}, {newton:.6f}; root–reading gaps {[f'{num(g):.1e}' for g in gaps]}", kind="CHART")429    r5, nu, disc = CG.interpolant_discriminant(5)430    ok = near(disc, Fr("0.0511"), abs_=Fr(3, 10 ** 4)) and between(Fr("1.11966"), r5, Fr("1.11967")) and between(Fr("1.17082"), nu, Fr("1.17083"))431    ok &= all(Fr(CG.ratio(x)) > 1 for x in (Fr(1, 10 ** 4), Fr(1, 100), 1, 100)) and Fr(CG.ratio(100)) < Fr("1.0001") and Fr(CG.ratio(10 ** 4)) == 1432    # 21:P4 (p21053)433    R.check("F3", "the radial acceleration relation g_obs = g_N/(1 − e^{−√(g_N/a₀)}) across four decades, above Newton everywhere, within 10⁻⁴ of it at g_N = 100a₀ and at it on the chart by 10⁴a₀; its discriminant 0.051 at g_N = 5a₀ against the simple interpolant ½ + √(¼ + a₀/g_N)", ok,434            f"ratio(5) = {r5:.5f}, ν(5) = {nu:.5f}, difference {disc:.4f}", kind="CHART")435    v, curve = CG.tully_fisher(10 ** 10)436    ok = near(v, Fr("112.3e3"), rel=Fr(1, 1000)) and all(1 < Fr(curve[i][2]) and Fr(curve[i + 1][2]) < Fr(curve[i][2]) for i in range(2)) and near(curve[2][2], 1, abs_=Fr(2, 100))437    R.check("F4", "the baryonic Tully–Fisher asymptote: the rotation curve v(r) = √(g_obs r) of 10¹⁰ M_⊙ on the radial acceleration relation flattens from above to the deep limit's (GMa₀)^{1/4} = 112 km s⁻¹ with the fitted a₀ (v⁴/GMa₀ = 1.12, 1.03, 1.01 at 30, 100, 300 kpc); the identity v⁴ = GMa₀ itself is the deep limit's theorem (P4's key)", ok,438            f"v∞ = {v / 1000:.1f} km s⁻¹; " + ", ".join(f"{r:.0f} kpc: {num(q):.3f}" for r, _, q in curve), kind="CHART")439    t = CG.tilt()440    sig = C.sigma(t, C.TILT_FIT); half = C.sigma(-CG.PI ** 2 / (CG.LN_OMEGA / 2), C.TILT_FIT)441    ok = near(t, Fr("-0.0348"), abs_=Fr(1, 10 ** 4)) and abs(Fr(sig)) < Fr(1, 10) and abs(Fr(half)) > 8442    probe = [Fr(CG.scale_path_probe(K)) / Fr(CG.PI ** 2) for K in (6, 15, 50, 283, 1000)]443    ok &= all(probe[i] < probe[i + 1] < 1 for i in range(4)) and probe[3] > Fr(99, 100)444    sens = CG.tilt_sensitivity()445    ok &= near(sens, Fr("0.00244"), rel=Fr(1, 100))446    # 21:P8 (p21060)447    R.check("F5", "the primordial tilt n_s − 1 = −π²/ln Ω = −0.0348 at ln Ω = 283.5 [approx], at +0.07σ from Planck 2018's −0.0351 ± 0.0042 [data]; ½ ln Ω excluded at 8.2σ; the tilt moves by ln 2/ln Ω = 0.24 % per factor two in S; the scale-path probe K²λ₁ → π² monotonically, 99.3 % at K = 283", ok,448            f"tilt {t:.4f}, {sig:+.2f}σ; ½ ln Ω at {half:+.1f}σ; sensitivity {num(sens):.4%} per factor two; probe {num(probe[3]):.4f}", kind="CHART")449    om = C.OMEGA_L_FIT[0]450    zs = (0, Fr(1, 2), 1, 2)451    shifts = [CG.running_shift(z, om) for z in zs]452    ok = Fr(shifts[0]) == 1 and all(Fr(shifts[i]) < Fr(shifts[i + 1]) for i in range(3))453    ok &= near(shifts[1], Fr("1.072"), abs_=Fr(1, 1000)) and near(shifts[2], Fr("1.157"), abs_=Fr(1, 1000)) and near(shifts[3], Fr("1.320"), abs_=Fr(1, 1000))454    # 21:P5 (p21054)455    R.check("F6", "the running floor a₀(z) ∝ H(z): the Tully–Fisher zero-point E(z)^{1/4} on the rival chart's E(z) (Ω_Λ = 0.685) rises monotonically with redshift, 1.072, 1.157, 1.320 at z = ½, 1, 2 (that a₀ ∝ H gives the zero-point ∝ E(z)^{1/4} is P5's key)", ok,456            ", ".join(f"z={z}: {s:.3f}" for z, s in zip(zs, shifts)), kind="CHART")457    ci = CG.curvature_import()458    ok = near(ci["ln_omega"], C.LN_OMEGA, rel=Fr(1, 1000)) and near(ci["log10_lambda_omega"], ci["log10_12pi"], abs_=Fr(1, 10 ** 6))459    ok &= Fr(1) < Fr(ci["log10_lambda_omega"]) < Fr(2) and Fr(121) < Fr(ci["orders_lambda"]) < Fr(123) and Fr(122) < Fr(ci["orders_S"]) < Fr(123)460    ok &= near(ci["chronon"], Fr("4.87e-62"), rel=Fr(1, 100)) and near(ci["horizon_ratio"], 1, rel=Fr(1, 10 ** 9))461    R.check("F7", "the curvature of the closed chart on the scale import [data]: the measured Λ = 1.088 × 10⁻⁵² m⁻² in Planck units is Λ ℓ_P² = 2.84 × 10⁻¹²²; the de Sitter entropy S = 3π/(Λ ℓ_P²) = 3.32 × 10¹²² and Ω = 4S + 1 give ln Ω = 283.50, the ledger's numeral; Λ ℓ_P² · Ω = 12π to the sixth digit (log₁₀ 1.58: Λ ∼ 1/Ω within two decades, the constant the chart's 4π and 3); the vacuum-energy gap of the row is the count, log₁₀ S = 122.5 (−log₁₀ Λ ℓ_P² = 121.5); the Carrier chronon (√π/2) t_P/√S = 4.87 × 10⁻⁶² t_P and the horizon r_H = √Ω ℓ_P/(2√π) = 1.03 × 10⁶¹ ℓ_P, the coherence horizon", ok,462            f"ln Ω = {ci['ln_omega']:.4f}, log₁₀(Λ ℓ_P² Ω) = {ci['log10_lambda_omega']:.4f}, log₁₀ S = {ci['orders_S']:.2f}, τ/t_P = {ci['chronon']:.3e}", kind="CHART")463464465# ---- block G: the simulation (21:C19's flux-conservation lemma) [chart, seeded] ----------------------------------------------------466@R.block("G", BLOCK["G"])467def block_G():468    quiet = CG.kuramoto_chain(0, T=60000, burn=20000)469    noisy = CG.kuramoto_chain(Fr(3, 10), T=60000, burn=20000)470    ok = near(quiet[0], Fr(3, 10), rel=Fr(1, 100)) and Fr(quiet[1]) < Fr(1, 1000) and near(noisy[0], Fr(3, 10), rel=Fr(3, 100)) and Fr(noisy[1]) < Fr(5, 100)471    R.check("G1", "flux conservation under noise: a driven, pinned Kuramoto chain of 20 links in its stationary regime carries the time-averaged transport b = 0.3 through every link, with and without the ambient noise (seed 3, 60 000 steps)", ok,472            f"quiet: mean {quiet[0]:.4f}, max deviation {quiet[1]:.1e}; noisy: mean {noisy[0]:.4f}, max deviation {noisy[1]:.3f}", kind="CHART")473474475if __name__ == "__main__":476    want = [a.upper() for a in sys.argv[1:]] or sorted(BLOCK)477    bad = [b for b in want if b not in BLOCK]478    if bad: sys.exit(f"no block {', '.join(bad)}: the blocks are {', '.join(sorted(BLOCK))}")479    for b in want: R.run_block(b)480    sys.exit(0 if R.summary(write=False, expect=list(LEDGER) if want == sorted(BLOCK) else None) else 1)481