← Session 8 — Regroup + R-004 finite-height Li theorem; resources atlas ingested
thinking (9068 chars)
Same devs at dps 700 — so NOT summation precision. The dev is in the η content (or E-015, or S_∞).
Next suspect: σ_m from zeros for m = 25..200. At n=300, terms j=25..200 in S_f include σ_{j+1} from zeros. Test: recompute S_f(300) with σ_m (25..200) set to ZERO and see how much S_f moves. If it moves by ~7.8e-8, the zero-σ region IS the dev source (either the float-γ errors or zero-tails).
Actually — better idea: compute σ_m (25..200) from HIGH-PRECISION zeros: recompute first ~200 zeros via mp.zetazero at dps 50 (fast for k ≤ 200) and the rest from float cache. The σ_m are dominated by the first few zeros (14^{−m}), so high-precision first 200 zeros should kill any float-γ error. If dev collapses → float-γ was it. Then the fix: cache zeros at higher precision (recompute 7900 via zetazero dps 30 — or just use more σ from... hmm).
Wait, actually — first, let me estimate the float-γ error properly. ρ_k = 0.5 + iγ_k with γ_k float64: δγ_k ~ γ_k·2^{-53} ~ γ_k·1.1e-16. σ_m error = 2Re Σ_k (−m)ρ_k^{−m−1}·i·δγ_k ≤ 2m Σ_k |ρ_k|^{−m−1}δγ_k ≈ 2m·1.1e-16·Σ_k γ_k^{−m}·... ≈ 2m·1.1e-16·σ_{m,abs} where σ_{m,abs} = Σ γ^{−m} ~ 14^{1−m}/13·... For m=25: ~2·25·1.1e-16·2.66e-29·(14.13/13) ~ 1.6e-43. NEGLIGIBLE. So float-γ is NOT it (as computed before).
Zero-TAIL for σ_m m ≥ 25: Σ_{γ>5000}ρ^{−m} ~ (logT/2π)T^{1−m}/(m−1) ~ 1.36·5000^{1−m}/(m−1): m=25: 1.36·5000^{−24}/24 — absurdly small. NOT it.
So σ-from-zeros region is clean. Then what?! σ_m for m ≤ 24 "exact": τ from cache ζ strings parsed at dps 243 (smoke full_digits=193 → dps 243)... τ_j error ~1e-243·|τ| — |τ_j| ≤ 1.3: error 1e-243 ✓. η_{m−1} from Stieltjes at dps 293: error ~1e-293 ✓. σ_m error ~1e-243. Term C(n,m−1)·1e-243 — at n=300, m=24: C(300,23) ~ 10^{31}·1e-243 tiny. NOT it.
Hmm!! So what IS it? Let me reconsider: dev abs at n=300 = 7.8e-8, at n=250 = 7e-10, at n=200 = 2e-12, at n=150: 6e-18·393... let me get abs: n=150: dev 6.08e-18·λ_150(207.7) = 1.3e-15; n=100: 2.08e-18·118.6 = 2.5e-16; n=75: 2.36e-18·~85 = 2e-16; n=50: 2.8e-18·~55 = 1.6e-16. So abs error ~2e-16 flat for n ≤ 100, then 1.3e-15 (150), 2e-12 (200), 7e-10 (250), 7.8e-8 (300). The flat 2e-16 floor: comparison precision (e015 CSV parsed at dps 80/100, S_f/S_inf stored values at dps ~110-160: the DIFFERENCE |lam − e015| computed from values with ~110 digits — lam ~ 118 with error 1e-110... hmm no, 2e-16 is way above. e015 CSV: 26 digits → error 5e-27·... λ_100 = 118.6: rel 2e-16 → abs 2.4e-14?? dev was 2.08e-18 REL → abs 2.5e-16. e015 parse at dps 80: string "118.6037753767913299273647" parsed exactly (26 sig digits): the VALUE is rounded to 26 digits: error 5e-25. Not 2.5e-16.
Hmm, the floor 2e-16 ≈ 53-bit ε!! DOUBLE PRECISION AGAIN. Somewhere in the comparison... `lam = S_inf[n] - S_f[n] + 1` at mp.mp.dps = 80/100 — S_inf[n], S_f[n] stored at their computation precision ✓ high. e015[n] parsed at dps 80/100 from 26-digit string ✓. dev = abs(lam − e015[n])/abs(e015[n]) at dps 80/100... all fine. So the 2e-16 floor is REAL difference between E-021's λ and E-015's λ at n ≤ 100?! At n=1: abs dev 2.5e-18 — that's σ_1's 2.5e-21?? no — 2.5e-18 vs σ_1 diff 2.5e-21: factor 1000. Hmm: λ_1(E-021) = S_∞(1) − S_f(1) + 1 = −1.5541 − (−0.5772) + 1 = 0.0231: S_∞(1) = −(log4π+γ)/2 at... S_inf[1] computed at dps int(0.31)+80 = 80: ζ*(1) string from get_zeta_strings: mp.nstr(log(4π)+γ, full_digits=193) — computed WHERE? In get_zeta_strings cache-miss branch — but cache HIT, so the string came from the cache, built by the buggy previous run at full_digits=1650 — ζ*(1) = log4π+γ at dps... the previous run's mp.mp.dps at cache-build time? mp.nstr(mp.log(4*mp.pi) + mp.mpf(GAMMA_E), full_digits) — mp.log(4π) at the dps AT THAT MOMENT in the buggy run... The buggy run's compute_S_inf was called after P2 (which set dps 1700)... then inside compute_S_inf cache-miss branch: no dps set before zeta_str[1] = ... — dps was 1700 ✓ fine. GAMMA_E is the 50-digit constant string!! γ to 50 digits only!!! γ = 0.57721566490153286060651209008240243104215933593992 — that's 51 chars ≈ 50 digits. So ζ*(1) has γ to only 50 digits → error ~1e-51. λ_1 error ~1e-51. NOT 2.5e-18.
Hmm — mp.euler vs GAMMA_E... In the buggy run ζ*(1) = log(4π)+GAMMA_E(50 digits): fine to 1e-51.
So where does 2.5e-18 at n=1 come from? λ_1(E-021) vs λ_1(E-015): E-015's λ_1 = 0.02309570896612103381431025 (27 digits). True λ_1 = 0.02309570896612103381431024790649... E-021's λ_1 = S_∞(1) − S_f(1) + 1: S_∞(1) = −ζ*(1)/2, S_f(1) = η_0. ζ*(1) from cache (γ 50 digits), η_0 from Stieltjes γ_0 (flint, tight). λ_1(E-021) = −(log4π+γ)/2 + γ + 1 with γ_ζ*(1) = GAMMA_E (50 digits) and γ_{η_0} = flint γ (293 digits): λ_1 = 1 − (log4π)/2 + γ/2 − (γ_f − γ_G)/2-ish: error (γ_f − γ_G)/2 ~ (1e-51)/2... AND the 2.5e-21 σ_1 discrepancy printed earlier: σ_1 = 0.023095708966121031343 vs closed 0.023095708966121033814: diff 2.47e-21!! That's η_0 vs (τ_0-based): σ_1 = τ_0 − η_0 + 1: τ_0 = −(log4π+γ)/2 with γ = mp.euler (dps 243): error 1e-243; η_0 = −γ_f (flint): error 1e-293. σ_1 should match closed form to 1e-243!!! But printed diff 2.47e-21!!!
THERE'S A BUG IN σ_1's computation region. 2.47e-21... Let me look: τ_0 = mp.mpf(-0.5)*(mp.log(4*mp.pi) + mp.mpf(GAMMA_E)) — GAMMA_E is the 50-digit CONSTANT!!! γ to 50 digits: τ_0 error ~0.5e-51·... no: mp.mpf(GAMMA_E) parses the 50-digit string — EXACT value of those 50 digits (γ rounded to 50 digits): τ_0 error = |γ − GAMMA_E|/2 ≈ 2.4e-51·0.5... The diff 2.47e-21 is NOT 1e-51. Hmm!! 2.47e-21...
OH WAIT. mp.log(4*mp.pi) + mp.mpf(GAMMA_E) at dps 243 ✓. Hmm. σ_1 = (−1)^0·(τ_0 − η_0) + 1 = τ_0 − η_0 + 1. η_0 = mp.mpf(eta_str[0]) — eta_str[0] = nstr(Ev[1], 193) — Ev[1] = −gam_s[0], gam_s[0] = flint stieltjes(0) str(293) parsed at dps 293 ✓. η_0 = −γ accurate to 1e-293. τ_0 = −(log4π+γ_G)/2 with γ_G = GAMMA_E (50 digits): σ_1 = −(log4π)/2 − γ_G/2 + γ_f + 1: vs closed = 1 − (log4π)/2 + γ/2: diff = (γ_f − γ_G)/2 + (γ_f − γ)/... ≈ (γ − γ_G)/2: γ − GAMMA_E ~ 2.4e-51?? diff/2 ~ 1.2e-51. NOT 2.47e-21.
Hmm!! So what IS 2.47e-21? Let me compute γ − GAMMA_E: GAMMA_E = 0.57721566490153286060651209008240243104215933593992. True γ = 0.57721566490153286060651209008240243104215933593992337... — GAMMA_E truncated at digit 50 ("...593992|337"): diff ~2.3e-51. So σ_1 diff should be ~1.2e-51. Printed 2.47e-21. So my σ_1 computation has an error 2.47e-21 — 2e30 times bigger. WHY?!
Let me recheck the printed σ_1: 0.023095708966121031343. Closed: 0.023095708966121033814. Diff at digit 21: ...031343 vs ...033814. Hmm — TRUE σ_1 = λ_1 = 0.023095708966121033814310247906... The closed form 1 + γ/2 − log(4π)/2 = 1 + 0.28860783245076643030... − 1.26551212348464539690... = 0.02309570896612103381... ✓. My σ_1 = 0.023095708966121031343 — WRONG at digit 21. From τ_0 − η_0 + 1: τ_0 = −(log4π+γ)/2 = −1.554120... η_0 = −0.57721566490153286061 (flint γ_0 — WAIT. IS flint's stieltjes(0) = γ? YES γ_0 = γ ✓ 0.5772156649015328606 (printed mid 0.5772156649015328606065121 ✓).
τ_0 − η_0 + 1 = −1.554120... + 0.5772156649015328606 + 1 = 0.023095708966121031...? Let me compute: −1.554120... + 1 = −0.554120...; + 0.577215665 = 0.023095... hmm: τ_0 = −1.554120...? (log4π+γ)/2 = (2.53102424696929079298 + 0.57721566490153286061)/2 = 3.10823991187082365359/2 = 1.55411995593541182679. τ_0 = −1.55411995593541182679. +1: −0.55411995593541182679. −η_0 = +0.57721566490153286061: sum = 0.02309570896612103382 ✓ = 0.023095708966121033814 to 20 digits!!! So σ_1 SHOULD be 0.02309570896612103382. But the script PRINTED 0.023095708966121031343 — differing at digit 20. So the script's τ_0 or η_0 was wrong at ~2.5e-21.
Which one? η_0 from eta_str[0] = nstr(Ev[1], full_digits=193): Ev[1] = N_[1] − D_[1]·Ev[0] = 0 − γ_0·1 = −γ_0. Hmm wait — D_[1] = (−1)^0·γ_0/0! = γ_0 ✓. E[1] = N_[1] − D_[1]E[0] = −γ_0 ✓. η_str[0] = −γ to 193 digits ✓.
τ_0 = mp.mpf(-0.5)*(mp.log(4*mp.pi) + mp.mpf(GAMMA_E)): at dps full_digits+50 = 243: log(4π) accurate 1e-243, GAMMA_E accurate 2.3e-51: τ_0 accurate 2.3e-51. σ_1 = τ_0 − η_0 + 1: error ~2.3e-51. Printed error 2.5e-21?!?!
UNLESS the print itself: mp.nstr(sigma[1], 20) at mp.mp.dps = 60 ✓ fine.
Let me just directly run the σ_1 computation and print at high precision. Actually — hmm, WAIT: tau dict: `tau = {0: ...}; for j in range(1, K_SPLIT): tau[j] = ...` — K_SPLIT = 24 → tau[0..23]. σ_m for m in 1..24: sigma[m] = (−1)^{m−1}(tau[m−1] − η_str[m−1]) + 1 — η_str[m−1] for m−1 ≤ 23 ✓.
sigma[1] = (+1)(tau[0] − mp.mpf(eta_str[0])) + 1. ✓ as analyzed. Should be 0.02309570896612103382. Printed 0.023095708966121031343. Difference: 0.0230957089661210338 − 0.0230957089661210313 = 2.5e-21.
...2.5e-21 = γ-error?? If η_0 were wrong: η_0(true) = −0.5772156649015328606065; if the flint stieltjes(0) STRING at 293 digits were wrong at 1e-21... the ball rad at prec 1176 was ~1e-353. Hmm. OR gam_s parsing — I FIXED the dps ordering (mp.mp.dps = full_digits+100 BEFORE gam_s) — did the fix actually apply in the harness? The harness re-execs the CURRENT file ✓ fix included. η_0 printed "−0.577215664901533" ✓ 15 digits.
Let me just print sigma[1] computation pieces at dps 100.
The σ₁ printed value is off at digit 20 — should be exact. Let me trace it.
tool: Bash
input
{
"command": "cd /d/Python/Quantum && ./.venv/Scripts/python.exe - <<'EOF'\nsrc = open(\"research/numerics/scripts/E-021-sinf-sf-curve.py\").read()\nsrc = src.replace('if __name__ == \"__main__\":', 'if False:')\nns = {\"__file__\": \"research/numerics/scripts/E-021-sinf-sf-curve.py\"}\nexec(compile(src, \"e21\", \"exec\"), ns)\nimport numpy as np, mpmath as mp\nzs = np.load(\"research/numerics/data/E-021-zeros-cache.npy\")\nzeta_str, fd = ns[\"get_zeta_strings\"](300)\neta_str = ns[\"compute_eta\"](zeta_str, fd, zs)\nmp.mp.dps = 100\ntau0 = mp.mpf(-0.5)*(mp.log(4*mp.pi) + mp.euler)\neta0 = mp.mpf(eta_str[0])\nprint(\"tau0:\", mp.nstr(tau0, 40))\nprint(\"eta0:\", mp.nstr(eta0, 40))\nprint(\"-euler:\", mp.nstr(-mp.euler, 40))\nprint(\"sigma1 = tau0-eta0+1:\", mp.nstr(tau0-eta0+1, 40))\nprint(\"closed:\", mp.nstr(1+mp.euler/2-mp.log(4*mp.pi)/2, 40))\nG = \"0.57721566490153286060651209008240243104215933593992\"\nprint(\"GAMMA_E - euler:\", mp.nstr(mp.mpf(G)-mp.euler, 5))\nEOF",
"description": "Trace sigma_1 components",
"timeout": 300000
}
raw content_json (database row)
[{"type":"thinking","thinking":"Same devs at dps 700 — so NOT summation precision. The dev is in the η content (or E-015, or S_∞).\n\nNext suspect: σ_m from zeros for m = 25..200. At n=300, terms j=25..200 in S_f include σ_{j+1} from zeros. Test: recompute S_f(300) with σ_m (25..200) set to ZERO and see how much S_f moves. If it moves by ~7.8e-8, the zero-σ region IS the dev source (either the float-γ errors or zero-tails).\n\nActually — better idea: compute σ_m (25..200) from HIGH-PRECISION zeros: recompute first ~200 zeros via mp.zetazero at dps 50 (fast for k ≤ 200) and the rest from float cache. The σ_m are dominated by the first few zeros (14^{−m}), so high-precision first 200 zeros should kill any float-γ error. If dev collapses → float-γ was it. Then the fix: cache zeros at higher precision (recompute 7900 via zetazero dps 30 — or just use more σ from... hmm).\n\nWait, actually — first, let me estimate the float-γ error properly. ρ_k = 0.5 + iγ_k with γ_k float64: δγ_k ~ γ_k·2^{-53} ~ γ_k·1.1e-16. σ_m error = 2Re Σ_k (−m)ρ_k^{−m−1}·i·δγ_k ≤ 2m Σ_k |ρ_k|^{−m−1}δγ_k ≈ 2m·1.1e-16·Σ_k γ_k^{−m}·... ≈ 2m·1.1e-16·σ_{m,abs} where σ_{m,abs} = Σ γ^{−m} ~ 14^{1−m}/13·... For m=25: ~2·25·1.1e-16·2.66e-29·(14.13/13) ~ 1.6e-43. NEGLIGIBLE. So float-γ is NOT it (as computed before). \n\nZero-TAIL for σ_m m ≥ 25: Σ_{γ>5000}ρ^{−m} ~ (logT/2π)T^{1−m}/(m−1) ~ 1.36·5000^{1−m}/(m−1): m=25: 1.36·5000^{−24}/24 — absurdly small. NOT it.\n\nSo σ-from-zeros region is clean. Then what?! σ_m for m ≤ 24 \"exact\": τ from cache ζ strings parsed at dps 243 (smoke full_digits=193 → dps 243)... τ_j error ~1e-243·|τ| — |τ_j| ≤ 1.3: error 1e-243 ✓. η_{m−1} from Stieltjes at dps 293: error ~1e-293 ✓. σ_m error ~1e-243. Term C(n,m−1)·1e-243 — at n=300, m=24: C(300,23) ~ 10^{31}·1e-243 tiny. NOT it.\n\nHmm!! So what IS it? Let me reconsider: dev abs at n=300 = 7.8e-8, at n=250 = 7e-10, at n=200 = 2e-12, at n=150: 6e-18·393... let me get abs: n=150: dev 6.08e-18·λ_150(207.7) = 1.3e-15; n=100: 2.08e-18·118.6 = 2.5e-16; n=75: 2.36e-18·~85 = 2e-16; n=50: 2.8e-18·~55 = 1.6e-16. So abs error ~2e-16 flat for n ≤ 100, then 1.3e-15 (150), 2e-12 (200), 7e-10 (250), 7.8e-8 (300). The flat 2e-16 floor: comparison precision (e015 CSV parsed at dps 80/100, S_f/S_inf stored values at dps ~110-160: the DIFFERENCE |lam − e015| computed from values with ~110 digits — lam ~ 118 with error 1e-110... hmm no, 2e-16 is way above. e015 CSV: 26 digits → error 5e-27·... λ_100 = 118.6: rel 2e-16 → abs 2.4e-14?? dev was 2.08e-18 REL → abs 2.5e-16. e015 parse at dps 80: string \"118.6037753767913299273647\" parsed exactly (26 sig digits): the VALUE is rounded to 26 digits: error 5e-25. Not 2.5e-16.\n\nHmm, the floor 2e-16 ≈ 53-bit ε!! DOUBLE PRECISION AGAIN. Somewhere in the comparison... `lam = S_inf[n] - S_f[n] + 1` at mp.mp.dps = 80/100 — S_inf[n], S_f[n] stored at their computation precision ✓ high. e015[n] parsed at dps 80/100 from 26-digit string ✓. dev = abs(lam − e015[n])/abs(e015[n]) at dps 80/100... all fine. So the 2e-16 floor is REAL difference between E-021's λ and E-015's λ at n ≤ 100?! At n=1: abs dev 2.5e-18 — that's σ_1's 2.5e-21?? no — 2.5e-18 vs σ_1 diff 2.5e-21: factor 1000. Hmm: λ_1(E-021) = S_∞(1) − S_f(1) + 1 = −1.5541 − (−0.5772) + 1 = 0.0231: S_∞(1) = −(log4π+γ)/2 at... S_inf[1] computed at dps int(0.31)+80 = 80: ζ*(1) string from get_zeta_strings: mp.nstr(log(4π)+γ, full_digits=193) — computed WHERE? In get_zeta_strings cache-miss branch — but cache HIT, so the string came from the cache, built by the buggy previous run at full_digits=1650 — ζ*(1) = log4π+γ at dps... the previous run's mp.mp.dps at cache-build time? mp.nstr(mp.log(4*mp.pi) + mp.mpf(GAMMA_E), full_digits) — mp.log(4π) at the dps AT THAT MOMENT in the buggy run... The buggy run's compute_S_inf was called after P2 (which set dps 1700)... then inside compute_S_inf cache-miss branch: no dps set before zeta_str[1] = ... — dps was 1700 ✓ fine. GAMMA_E is the 50-digit constant string!! γ to 50 digits only!!! γ = 0.57721566490153286060651209008240243104215933593992 — that's 51 chars ≈ 50 digits. So ζ*(1) has γ to only 50 digits → error ~1e-51. λ_1 error ~1e-51. NOT 2.5e-18.\n\nHmm — mp.euler vs GAMMA_E... In the buggy run ζ*(1) = log(4π)+GAMMA_E(50 digits): fine to 1e-51.\n\nSo where does 2.5e-18 at n=1 come from? λ_1(E-021) vs λ_1(E-015): E-015's λ_1 = 0.02309570896612103381431025 (27 digits). True λ_1 = 0.02309570896612103381431024790649... E-021's λ_1 = S_∞(1) − S_f(1) + 1: S_∞(1) = −ζ*(1)/2, S_f(1) = η_0. ζ*(1) from cache (γ 50 digits), η_0 from Stieltjes γ_0 (flint, tight). λ_1(E-021) = −(log4π+γ)/2 + γ + 1 with γ_ζ*(1) = GAMMA_E (50 digits) and γ_{η_0} = flint γ (293 digits): λ_1 = 1 − (log4π)/2 + γ/2 − (γ_f − γ_G)/2-ish: error (γ_f − γ_G)/2 ~ (1e-51)/2... AND the 2.5e-21 σ_1 discrepancy printed earlier: σ_1 = 0.023095708966121031343 vs closed 0.023095708966121033814: diff 2.47e-21!! That's η_0 vs (τ_0-based): σ_1 = τ_0 − η_0 + 1: τ_0 = −(log4π+γ)/2 with γ = mp.euler (dps 243): error 1e-243; η_0 = −γ_f (flint): error 1e-293. σ_1 should match closed form to 1e-243!!! But printed diff 2.47e-21!!! \n\nTHERE'S A BUG IN σ_1's computation region. 2.47e-21... Let me look: τ_0 = mp.mpf(-0.5)*(mp.log(4*mp.pi) + mp.mpf(GAMMA_E)) — GAMMA_E is the 50-digit CONSTANT!!! γ to 50 digits: τ_0 error ~0.5e-51·... no: mp.mpf(GAMMA_E) parses the 50-digit string — EXACT value of those 50 digits (γ rounded to 50 digits): τ_0 error = |γ − GAMMA_E|/2 ≈ 2.4e-51·0.5... The diff 2.47e-21 is NOT 1e-51. Hmm!! 2.47e-21...\n\nOH WAIT. mp.log(4*mp.pi) + mp.mpf(GAMMA_E) at dps 243 ✓. Hmm. σ_1 = (−1)^0·(τ_0 − η_0) + 1 = τ_0 − η_0 + 1. η_0 = mp.mpf(eta_str[0]) — eta_str[0] = nstr(Ev[1], 193) — Ev[1] = −gam_s[0], gam_s[0] = flint stieltjes(0) str(293) parsed at dps 293 ✓. η_0 = −γ accurate to 1e-293. τ_0 = −(log4π+γ_G)/2 with γ_G = GAMMA_E (50 digits): σ_1 = −(log4π)/2 − γ_G/2 + γ_f + 1: vs closed = 1 − (log4π)/2 + γ/2: diff = (γ_f − γ_G)/2 + (γ_f − γ)/... ≈ (γ − γ_G)/2: γ − GAMMA_E ~ 2.4e-51?? diff/2 ~ 1.2e-51. NOT 2.47e-21.\n\nHmm!! So what IS 2.47e-21? Let me compute γ − GAMMA_E: GAMMA_E = 0.57721566490153286060651209008240243104215933593992. True γ = 0.57721566490153286060651209008240243104215933593992337... — GAMMA_E truncated at digit 50 (\"...593992|337\"): diff ~2.3e-51. So σ_1 diff should be ~1.2e-51. Printed 2.47e-21. So my σ_1 computation has an error 2.47e-21 — 2e30 times bigger. WHY?!\n\nLet me recheck the printed σ_1: 0.023095708966121031343. Closed: 0.023095708966121033814. Diff at digit 21: ...031343 vs ...033814. Hmm — TRUE σ_1 = λ_1 = 0.023095708966121033814310247906... The closed form 1 + γ/2 − log(4π)/2 = 1 + 0.28860783245076643030... − 1.26551212348464539690... = 0.02309570896612103381... ✓. My σ_1 = 0.023095708966121031343 — WRONG at digit 21. From τ_0 − η_0 + 1: τ_0 = −(log4π+γ)/2 = −1.554120... η_0 = −0.57721566490153286061 (flint γ_0 — WAIT. IS flint's stieltjes(0) = γ? YES γ_0 = γ ✓ 0.5772156649015328606 (printed mid 0.5772156649015328606065121 ✓).\n\nτ_0 − η_0 + 1 = −1.554120... + 0.5772156649015328606 + 1 = 0.023095708966121031...? Let me compute: −1.554120... + 1 = −0.554120...; + 0.577215665 = 0.023095... hmm: τ_0 = −1.554120...? (log4π+γ)/2 = (2.53102424696929079298 + 0.57721566490153286061)/2 = 3.10823991187082365359/2 = 1.55411995593541182679. τ_0 = −1.55411995593541182679. +1: −0.55411995593541182679. −η_0 = +0.57721566490153286061: sum = 0.02309570896612103382 ✓ = 0.023095708966121033814 to 20 digits!!! So σ_1 SHOULD be 0.02309570896612103382. But the script PRINTED 0.023095708966121031343 — differing at digit 20. So the script's τ_0 or η_0 was wrong at ~2.5e-21.\n\nWhich one? η_0 from eta_str[0] = nstr(Ev[1], full_digits=193): Ev[1] = N_[1] − D_[1]·Ev[0] = 0 − γ_0·1 = −γ_0. Hmm wait — D_[1] = (−1)^0·γ_0/0! = γ_0 ✓. E[1] = N_[1] − D_[1]E[0] = −γ_0 ✓. η_str[0] = −γ to 193 digits ✓.\n\nτ_0 = mp.mpf(-0.5)*(mp.log(4*mp.pi) + mp.mpf(GAMMA_E)): at dps full_digits+50 = 243: log(4π) accurate 1e-243, GAMMA_E accurate 2.3e-51: τ_0 accurate 2.3e-51. σ_1 = τ_0 − η_0 + 1: error ~2.3e-51. Printed error 2.5e-21?!?!\n\nUNLESS the print itself: mp.nstr(sigma[1], 20) at mp.mp.dps = 60 ✓ fine.\n\nLet me just directly run the σ_1 computation and print at high precision. Actually — hmm, WAIT: tau dict: `tau = {0: ...}; for j in range(1, K_SPLIT): tau[j] = ...` — K_SPLIT = 24 → tau[0..23]. σ_m for m in 1..24: sigma[m] = (−1)^{m−1}(tau[m−1] − η_str[m−1]) + 1 — η_str[m−1] for m−1 ≤ 23 ✓.\n\nsigma[1] = (+1)(tau[0] − mp.mpf(eta_str[0])) + 1. ✓ as analyzed. Should be 0.02309570896612103382. Printed 0.023095708966121031343. Difference: 0.0230957089661210338 − 0.0230957089661210313 = 2.5e-21.\n\n...2.5e-21 = γ-error?? If η_0 were wrong: η_0(true) = −0.5772156649015328606065; if the flint stieltjes(0) STRING at 293 digits were wrong at 1e-21... the ball rad at prec 1176 was ~1e-353. Hmm. OR gam_s parsing — I FIXED the dps ordering (mp.mp.dps = full_digits+100 BEFORE gam_s) — did the fix actually apply in the harness? The harness re-execs the CURRENT file ✓ fix included. η_0 printed \"−0.577215664901533\" ✓ 15 digits.\n\nLet me just print sigma[1] computation pieces at dps 100.","signature":""},{"type":"text","text":"The σ₁ printed value is off at digit 20 — should be exact. Let me trace it."},{"type":"tool_use","id":"Bash_68","name":"Bash","input":{"command":"cd /d/Python/Quantum && ./.venv/Scripts/python.exe - <<'EOF'\nsrc = open(\"research/numerics/scripts/E-021-sinf-sf-curve.py\").read()\nsrc = src.replace('if __name__ == \"__main__\":', 'if False:')\nns = {\"__file__\": \"research/numerics/scripts/E-021-sinf-sf-curve.py\"}\nexec(compile(src, \"e21\", \"exec\"), ns)\nimport numpy as np, mpmath as mp\nzs = np.load(\"research/numerics/data/E-021-zeros-cache.npy\")\nzeta_str, fd = ns[\"get_zeta_strings\"](300)\neta_str = ns[\"compute_eta\"](zeta_str, fd, zs)\nmp.mp.dps = 100\ntau0 = mp.mpf(-0.5)*(mp.log(4*mp.pi) + mp.euler)\neta0 = mp.mpf(eta_str[0])\nprint(\"tau0:\", mp.nstr(tau0, 40))\nprint(\"eta0:\", mp.nstr(eta0, 40))\nprint(\"-euler:\", mp.nstr(-mp.euler, 40))\nprint(\"sigma1 = tau0-eta0+1:\", mp.nstr(tau0-eta0+1, 40))\nprint(\"closed:\", mp.nstr(1+mp.euler/2-mp.log(4*mp.pi)/2, 40))\nG = \"0.57721566490153286060651209008240243104215933593992\"\nprint(\"GAMMA_E - euler:\", mp.nstr(mp.mpf(G)-mp.euler, 5))\nEOF","description":"Trace sigma_1 components","timeout":300000},"extra_content":null}]