← Session 8 — Regroup + R-004 finite-height Li theorem; resources atlas ingested
thinking (8875 chars)
Beautiful progress. S_f values now match (S_f(100) = −0.62875282 = the reference −0.628752815248206 ✓). The dev curve:
- n ≤ 150: ~1e-17 — this is E-015 CSV's 26-digit limit (λ ~ 100 → 1e-26 abs → 1e-28... hmm 1e-17 bigger than that. Actually 1e-17: the σ_1 2.5e-21·n... at n=100: 2.5e-19 — no. E-015's own accuracy: computed at dps 1450, its λ accurate to ~1e-1400, CSV 26 digits: rel 1e-26·... hmm the observed 1e-17-1e-18 floor. λ_1 dev 1.07e-16: E-015's λ_1 = "0.02309570896612103381431025" (27 digits) vs E-021's σ_1 = 0.023095708966121031343 (differs at digit 21: 2.5e-21/0.023 = 1.1e-19?? measured 1.07e-16?!). Hmm — the e015 CSV parse at mp.mp.dps = 80... lam computed at various dps from S_inf/S_f dicts (stored at their computation dps — S_f[1] = +s at dps int(0.31)+80 = 80)... abs diff at n=1: 1.07e-16·0.023 = 2.5e-18. vs σ_1 diff 2.5e-21. Close-ish — maybe the e015 parse. Whatever: floor 1e-16-1e-18 — fine, dominated by comparison precision.
- n=200: 6.6e-15; n=250: 1.7e-12; n=300: 1.5e-10 — GROWING ~×40 per 50. Ratio 250→300: 87; 200→250: 263. Hmm super-exponential-ish growth. This is the σ-from-zeros m≥25 tail? σ_25 zero-tail ~ Σ_{γ>5000}2Re ρ^{−25} ~ 2.66e-29·(14.13/5000) = 7.5e-32... too small. What else grows with n? The omitted σ_m m>200: (15/14)^n·14^{−200}·0.65: n=200: e^{13.8}·10^{−229}·0.65 = 10^{6}·10^{−229} tiny. No.
The growing dev: ~e^{0.22n}?? from 200 to 300: 6.6e-15 → 1.5e-10: factor 2.3e4 over 100 → e^{10}/100 → per-n e^{0.1}. What has error growing like e^{0.1n}? PRECISION of the S_f sum: dps(n) = 0.31n+80 digits; max term ~10^{0.125n} (computed before): error ~10^{0.125n−(0.31n+80)} = 10^{−0.185n−80} — SHRINKS. η errors ~1e-243 constant: 2^n·1e-243: n=300: 10^{90−243} tiny. η stored nstr(full_digits=193): errors ~η·1e-193: Σ C·η·1e-193 = S_f-scale·1e-193 tiny.
Hmm, what about σ_m from zeros for m = 25..200 at dps 100 — computed with ρ = mpc(0.5, float(g)): FLOAT γ. ρ^{−m} relative error ~ m·δγ/|ρ|·... δγ ~ eps(γ) ~ γ·1e-16: for γ ~ 5000: δγ ~ 5e-13. ρ^{−25} error ~ 25·5e-13/5000 = 2.5e-15 relative → σ_25 error ~ 2.66e-29·2.5e-15·7900/2... hmm no: σ_m = 2Re Σ ρ^{−m}: each term's error ~ |ρ|^{−m}·m·δγ/γ: sum of 7900 terms: dominated by first zeros: 14^{−m}·m·(1e-13/14)·7900? No — errors accumulate on the DOMINANT terms (first zeros): σ_m ~ 2·14^{−m}·cos: error ~ 2·14^{−m}·m·δγ_1/γ_1 ~ 2·14^{−m}·25·(7e-15/14.13) ~ 14^{−m}·2.5e-14. Term in S_f: C(n,j)·14^{−j}·2.5e-14·(phase) — Σ_j C(n,j)14^{−j} = (15/14)^n: at n=300: e^{20.7} = 9.7e8·2.5e-14·(14²) ~ 4.7e-5?!? Phaseless ~4.7e-5, observed absolute dev at n=300: 1.5e-10·519.7 = 7.8e-8. With phases (1−1/14)^n suppression... hmm: the σ errors are all ~ 14^{−j}·(m=j+1)·c with the SAME sign-ish structure (errors proportional to m·δγ/γ per zero — correlated): Σ_j C(n,j)(−1)^{j+1}·2Re Σ_k ρ_k^{−(j+1)}·(j+1)δγ_k/γ_k = 2Re Σ_k (δγ_k/γ_k)Σ_j C(n,j)(−1)^{j+1}(j+1)ρ_k^{−(j+1)} = 2Re Σ_k (δγ_k/γ_k)·(n/ρ_k)(1−1/ρ_k)^{n−1}·... |(1−1/ρ)^n| ≈ 1: per-zero contribution ~ δγ/γ·n/|ρ| ~ (5e-13/5000)·300/14 ~ 2e-15·... ×7900 zeros ~ sqrt or linear: ~1e-11-1e-10. MATCHES the observed 7.8e-8 order-ish! So the residual dev = FLOAT64 zeros' γ-error propagated through σ_m — growing ~n·(Σ_k δγ_k/γ_k²)·... ∝ n·log-ish.
Fix: use higher-precision zeros? The cache is float64. mp.zetazero recompute at dps 30 for 7900 zeros — that was the original cache build (~30-60 min?). OR: accept 1e-10 at n=300 — at n=5000 it would grow to ~1e-10·e^{0.1·4700}?!? NO — that extrapolates insanely. Let me think about the growth law: dev_abs ~ n·Σ_k (δγ_k/γ_k)·(1/|ρ_k|) ~ n·[Σ over zeros of γ·1e-16/γ²] ~ n·1e-16·Σ 1/γ ~ n·1e-16·(log²T)/(4π): at T=5000: log² ~ 72: n·5.7e-16: at n=300: 1.7e-13?? observed 7.8e-8 — 5 orders bigger. Hmm. Maybe errors aren't random: float64 rounding of γ is deterministic, correlated... contribution ~ n·Σ_k δγ_k/γ_k² ~ n·(Σ δγ/γ²): with δγ ~ ±γ·1e-16 random: Σ δγ/γ² ~ 1e-16·Σ 1/γ ~ 1e-16·72/(4π)·... ~5.7e-16·... times n=300: 1.7e-13. Observed 7.8e-8. Doesn't match. So maybe NOT the float-γ.
Alternative: dev growth e^{0.1n}... (15/14)^n = e^{0.069n}: from n=200 to 300: ×e^{6.9} = 1000 — observed ×2.3e4. (16/15)^n? e^{0.0645n}... Hmm observed ×230 per 50 → e^{0.109n}. What about (17/16)^n: e^{0.0606n}... no.
What if it's σ_m accuracy for m ~ n/2-ish from... no, σ_m for m>200 = 0 — at n=300, j up to 300, η_{j−1} j−1 up to 299, σ up to σ_300: omitted m = 201..300: |σ_m| ~ 2·14^{−m}: term C(n,m−1)·2·14^{−m} at m~n/2=150 — included (m ≤ 200 ✓). m=201: C(300,200)·2·14^{−201} = C(300,200) ~ 10^{82}·10^{−230} = 10^{−148}·2 ✓ negligible.
Hmm, what about the S_f sum PRECISION: compute_Sf sets dps = int(0.31n)+80 — at n=300: 173. But η_mpf parsed at mp.mp.dps = full_digits+50 = 243 — the parse happens ONCE at function top ✓. Then per-n dps 173: c·eta_mpf[j−1] at 173 ✓. Max term ~10^{37.5}: error 10^{37.5}·5·10^{−174}... ~10^{−135}. no.
WAIT — maybe it's the σ-from-zeros dps-100 computation: σ_m = 2*mp.re(sum(r**(−m) for r in rho)) at dps 100: ρ^{−m} for m=200: 14^{−200} = 10^{−229}: at dps 100, mpf exponent fine. σ_m errors ~1e-100·|σ_m|. no.
Hmm, dev at n=200: 6.6e-15 (abs 2e-12), n=250: 1.7e-12 (abs 7e-10), n=300: 1.5e-10 (abs 7.8e-8). Growth ×350/50n. What about η_j for j ≥ 24: computed at dps full_digits+50 = 243 — the SUBTRACTION (1−2^{−(j+1)})ζ(j+1) − 1 + σ: at j ~ 200: result ~ 3^{−200} = 10^{−95}: absolute error of the pre-subtraction product ~1e-243: result error ~1e-243 ✓ tiny. At j=299: 3^{−300} = 10^{−143}: error still 1e-243 absolute ✓.
nstr(eta, full_digits=193): η stored to 193 sig figs ✓.
Hmm OK, let me look at S_∞: could the dev be from S_∞ rather than S_f?! S_∞(n) at dps 0.31n+80 from ζ strings parsed at 243: terms (−1)^j C(n,j)(1−2^{−j})ζ*(j): C(n,j) up to 2^n = 10^{90} at n=300: error 10^{90}·10^{−243} = 10^{−153} ✓. And the known S_∞ cancellation: result ~ n log n: fine.
E-015's own λ accuracy at n=300?! E-015 computed λ at dps 1450 — but WAIT: E-015's precision budget: "dps = 0.45·n_max+100" = 1450 for n_max=3000: the λ_n sums: cancellation ~2^n (0.301n digits) + η-sum cancellation needs MORE: terms C(n,j)η_{j−1} ~ 10^{0.244n}: at n=3000: 10^{732}: E-015's λ_3000 accurate to ~1450−732−90 = ~628 digits. At n=300: 10^{73}: accurate to ~1300 digits. NOT the issue.
Hmm, let me just directly compare S_f(300) against a high-precision reference computed with η from Stieltjes to k=300 (dps 1000 recursion — k=300 Stieltjes via flint: ~minutes?). flint stieltjes(300) at 4000 bits — E-011 did k≤1000 parallel. Serial k ≤ 300 might take a few minutes. That would settle whether the error is in S_f or S_∞ or E-015.
Actually — cheaper: compare λ_300 from the ZERO side with tail correction: λ_300 zero-truncated + n²-tail estimate. λ_300(E-021) = S_∞(300) − S_f(300) + 1 = S_∞(300) + 3.4839435 = ? S_∞(300) ≈ (300/2)ln300 − 1.13033·300 − 0.25 = 855.57 − 339.10 − 0.25 = 516.2. λ ≈ 519.7. E-015: 519.70197. E-021: 516.2 + 3.4839 = 519.68. dev 7.8e-8 abs.
Zero-side: Σ_{γ≤5000}2Re[1−(1−1/ρ)^300] + tail(~300²·2.1e-4·0.5 ~ 9.5?)... the tail estimate too rough to adjudicate 7.8e-8.
Cheapest decisive: recompute S_f(300) with Stieltjes-η to k=300. Let me estimate flint stieltjes time for k ≤ 300 at 1200 digits — k³ cost: E-011 did 0..1000 at dps 550 in parallel (14 workers) taking "~k³"... unknown wall time. Try k ≤ 300 serial and time it.
Actually — even better: compute S_f(300) using η from the ZETA formula for ALL j ≥ 1 (not just j ≥ 24): η_j = (−1)^{j+1}[(1−2^{−(j+1)})ζ(j+1) − 1 + σ_{j+1}] with σ_m for m ≤ 300 all from... σ_m m ≤ 24 exact, 25..300 from zeros — but σ_25..300 from zeros has the float-γ issue... hmm no, that's the current setup essentially (except j=1..23 currently from Stieltjes). The current dev must come from somewhere in the current setup.
Let me BISECT: compute λ_300 deviation with S_f built from η where σ_m for 25..200 uses EXACT (mpf from float γ but at dps 300, and γ from mp.zetazero recomputed at dps 50 for first 100 zeros only... no).
Alternative bisect: S_f(300) with σ_m for 25..200 set to ZERO vs with zeros-values: difference tells if σ-zeros region matters at n=300 at all. If dev unchanged → not the σ-zeros. Also S_f(300) with η_j for j ≥ 24 replaced by... hmm.
Actually, simplest hypothesis test: the dev ~ e^{0.109n} growth — PRECISION-LIKE. What if mp.mp.dps = int(0.31*n)+80 inside compute_Sf is NOT taking effect (setter bug again — it worked in my tests but...)? If the S_f sum ran at the dps left over from before (243? no — compute_eta left dps at 60!): dps 60 at n=300: max term 10^{37.5} → error 10^{37.5−60} = 10^{−22.5}?? rel to λ: 3e-24/520 = 6e-27. no, too small. At dps 15 (53-bit): 10^{37.5−16} = 10^{21.5} — way too big.
Hmm what about η_mpf parse in compute_Sf: mp.mp.dps = full_digits+50 = 243 ✓.
Let me just print devs with S_f computed at dps 600 for n = 200..300 — if devs collapse, it was sum precision; if not, η content.
Devs grow ~e^{0.11n} beyond n≈200 — let me test whether it's S_f summation precision or η content.
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)\nS_inf = ns[\"compute_S_inf\"](300, zeta_str, fd)\ne015 = {}\nmp.mp.dps = 100\nfor line in open(\"research/numerics/data/E-015-li-coefficients-n3000.csv\"):\n p = line.strip().split(\",\")\n if p[0].isdigit(): e015[int(p[0])] = mp.mpf(p[1])\n# high-precision S_f for n in {200,250,300}\nmp.mp.dps = 700\neta = {j: mp.mpf(v) for j, v in eta_str.items()}\nfor n in (200, 250, 300):\n s = mp.mpf(0); c = mp.mpf(1)\n for j in range(1, n+1):\n c = c*(n-j+1)/j\n s += c*eta[j-1]\n mp.mp.dps = 100\n lam = S_inf[n] - s + 1\n dev = abs(lam - e015[n]) / abs(e015[n])\n print(f\"n={n}: S_f(hi) = {mp.nstr(s,12)} rel dev vs E015 = {float(dev):.3e}\")\n mp.mp.dps = 700\nEOF",
"description": "S_f at dps 700 for n=200..300",
"timeout": 600000
}
raw content_json (database row)
[{"type":"thinking","thinking":"Beautiful progress. S_f values now match (S_f(100) = −0.62875282 = the reference −0.628752815248206 ✓). The dev curve:\n- n ≤ 150: ~1e-17 — this is E-015 CSV's 26-digit limit (λ ~ 100 → 1e-26 abs → 1e-28... hmm 1e-17 bigger than that. Actually 1e-17: the σ_1 2.5e-21·n... at n=100: 2.5e-19 — no. E-015's own accuracy: computed at dps 1450, its λ accurate to ~1e-1400, CSV 26 digits: rel 1e-26·... hmm the observed 1e-17-1e-18 floor. λ_1 dev 1.07e-16: E-015's λ_1 = \"0.02309570896612103381431025\" (27 digits) vs E-021's σ_1 = 0.023095708966121031343 (differs at digit 21: 2.5e-21/0.023 = 1.1e-19?? measured 1.07e-16?!). Hmm — the e015 CSV parse at mp.mp.dps = 80... lam computed at various dps from S_inf/S_f dicts (stored at their computation dps — S_f[1] = +s at dps int(0.31)+80 = 80)... abs diff at n=1: 1.07e-16·0.023 = 2.5e-18. vs σ_1 diff 2.5e-21. Close-ish — maybe the e015 parse. Whatever: floor 1e-16-1e-18 — fine, dominated by comparison precision.\n- n=200: 6.6e-15; n=250: 1.7e-12; n=300: 1.5e-10 — GROWING ~×40 per 50. Ratio 250→300: 87; 200→250: 263. Hmm super-exponential-ish growth. This is the σ-from-zeros m≥25 tail? σ_25 zero-tail ~ Σ_{γ>5000}2Re ρ^{−25} ~ 2.66e-29·(14.13/5000) = 7.5e-32... too small. What else grows with n? The omitted σ_m m>200: (15/14)^n·14^{−200}·0.65: n=200: e^{13.8}·10^{−229}·0.65 = 10^{6}·10^{−229} tiny. No.\n\nThe growing dev: ~e^{0.22n}?? from 200 to 300: 6.6e-15 → 1.5e-10: factor 2.3e4 over 100 → e^{10}/100 → per-n e^{0.1}. What has error growing like e^{0.1n}? PRECISION of the S_f sum: dps(n) = 0.31n+80 digits; max term ~10^{0.125n} (computed before): error ~10^{0.125n−(0.31n+80)} = 10^{−0.185n−80} — SHRINKS. η errors ~1e-243 constant: 2^n·1e-243: n=300: 10^{90−243} tiny. η stored nstr(full_digits=193): errors ~η·1e-193: Σ C·η·1e-193 = S_f-scale·1e-193 tiny.\n\nHmm, what about σ_m from zeros for m = 25..200 at dps 100 — computed with ρ = mpc(0.5, float(g)): FLOAT γ. ρ^{−m} relative error ~ m·δγ/|ρ|·... δγ ~ eps(γ) ~ γ·1e-16: for γ ~ 5000: δγ ~ 5e-13. ρ^{−25} error ~ 25·5e-13/5000 = 2.5e-15 relative → σ_25 error ~ 2.66e-29·2.5e-15·7900/2... hmm no: σ_m = 2Re Σ ρ^{−m}: each term's error ~ |ρ|^{−m}·m·δγ/γ: sum of 7900 terms: dominated by first zeros: 14^{−m}·m·(1e-13/14)·7900? No — errors accumulate on the DOMINANT terms (first zeros): σ_m ~ 2·14^{−m}·cos: error ~ 2·14^{−m}·m·δγ_1/γ_1 ~ 2·14^{−m}·25·(7e-15/14.13) ~ 14^{−m}·2.5e-14. Term in S_f: C(n,j)·14^{−j}·2.5e-14·(phase) — Σ_j C(n,j)14^{−j} = (15/14)^n: at n=300: e^{20.7} = 9.7e8·2.5e-14·(14²) ~ 4.7e-5?!? Phaseless ~4.7e-5, observed absolute dev at n=300: 1.5e-10·519.7 = 7.8e-8. With phases (1−1/14)^n suppression... hmm: the σ errors are all ~ 14^{−j}·(m=j+1)·c with the SAME sign-ish structure (errors proportional to m·δγ/γ per zero — correlated): Σ_j C(n,j)(−1)^{j+1}·2Re Σ_k ρ_k^{−(j+1)}·(j+1)δγ_k/γ_k = 2Re Σ_k (δγ_k/γ_k)Σ_j C(n,j)(−1)^{j+1}(j+1)ρ_k^{−(j+1)} = 2Re Σ_k (δγ_k/γ_k)·(n/ρ_k)(1−1/ρ_k)^{n−1}·... |(1−1/ρ)^n| ≈ 1: per-zero contribution ~ δγ/γ·n/|ρ| ~ (5e-13/5000)·300/14 ~ 2e-15·... ×7900 zeros ~ sqrt or linear: ~1e-11-1e-10. MATCHES the observed 7.8e-8 order-ish! So the residual dev = FLOAT64 zeros' γ-error propagated through σ_m — growing ~n·(Σ_k δγ_k/γ_k²)·... ∝ n·log-ish.\n\nFix: use higher-precision zeros? The cache is float64. mp.zetazero recompute at dps 30 for 7900 zeros — that was the original cache build (~30-60 min?). OR: accept 1e-10 at n=300 — at n=5000 it would grow to ~1e-10·e^{0.1·4700}?!? NO — that extrapolates insanely. Let me think about the growth law: dev_abs ~ n·Σ_k (δγ_k/γ_k)·(1/|ρ_k|) ~ n·[Σ over zeros of γ·1e-16/γ²] ~ n·1e-16·Σ 1/γ ~ n·1e-16·(log²T)/(4π): at T=5000: log² ~ 72: n·5.7e-16: at n=300: 1.7e-13?? observed 7.8e-8 — 5 orders bigger. Hmm. Maybe errors aren't random: float64 rounding of γ is deterministic, correlated... contribution ~ n·Σ_k δγ_k/γ_k² ~ n·(Σ δγ/γ²): with δγ ~ ±γ·1e-16 random: Σ δγ/γ² ~ 1e-16·Σ 1/γ ~ 1e-16·72/(4π)·... ~5.7e-16·... times n=300: 1.7e-13. Observed 7.8e-8. Doesn't match. So maybe NOT the float-γ.\n\nAlternative: dev growth e^{0.1n}... (15/14)^n = e^{0.069n}: from n=200 to 300: ×e^{6.9} = 1000 — observed ×2.3e4. (16/15)^n? e^{0.0645n}... Hmm observed ×230 per 50 → e^{0.109n}. What about (17/16)^n: e^{0.0606n}... no.\n\nWhat if it's σ_m accuracy for m ~ n/2-ish from... no, σ_m for m>200 = 0 — at n=300, j up to 300, η_{j−1} j−1 up to 299, σ up to σ_300: omitted m = 201..300: |σ_m| ~ 2·14^{−m}: term C(n,m−1)·2·14^{−m} at m~n/2=150 — included (m ≤ 200 ✓). m=201: C(300,200)·2·14^{−201} = C(300,200) ~ 10^{82}·10^{−230} = 10^{−148}·2 ✓ negligible.\n\nHmm, what about the S_f sum PRECISION: compute_Sf sets dps = int(0.31n)+80 — at n=300: 173. But η_mpf parsed at mp.mp.dps = full_digits+50 = 243 — the parse happens ONCE at function top ✓. Then per-n dps 173: c·eta_mpf[j−1] at 173 ✓. Max term ~10^{37.5}: error 10^{37.5}·5·10^{−174}... ~10^{−135}. no.\n\nWAIT — maybe it's the σ-from-zeros dps-100 computation: σ_m = 2*mp.re(sum(r**(−m) for r in rho)) at dps 100: ρ^{−m} for m=200: 14^{−200} = 10^{−229}: at dps 100, mpf exponent fine. σ_m errors ~1e-100·|σ_m|. no.\n\nHmm, dev at n=200: 6.6e-15 (abs 2e-12), n=250: 1.7e-12 (abs 7e-10), n=300: 1.5e-10 (abs 7.8e-8). Growth ×350/50n. What about η_j for j ≥ 24: computed at dps full_digits+50 = 243 — the SUBTRACTION (1−2^{−(j+1)})ζ(j+1) − 1 + σ: at j ~ 200: result ~ 3^{−200} = 10^{−95}: absolute error of the pre-subtraction product ~1e-243: result error ~1e-243 ✓ tiny. At j=299: 3^{−300} = 10^{−143}: error still 1e-243 absolute ✓.\n\nnstr(eta, full_digits=193): η stored to 193 sig figs ✓.\n\nHmm OK, let me look at S_∞: could the dev be from S_∞ rather than S_f?! S_∞(n) at dps 0.31n+80 from ζ strings parsed at 243: terms (−1)^j C(n,j)(1−2^{−j})ζ*(j): C(n,j) up to 2^n = 10^{90} at n=300: error 10^{90}·10^{−243} = 10^{−153} ✓. And the known S_∞ cancellation: result ~ n log n: fine.\n\nE-015's own λ accuracy at n=300?! E-015 computed λ at dps 1450 — but WAIT: E-015's precision budget: \"dps = 0.45·n_max+100\" = 1450 for n_max=3000: the λ_n sums: cancellation ~2^n (0.301n digits) + η-sum cancellation needs MORE: terms C(n,j)η_{j−1} ~ 10^{0.244n}: at n=3000: 10^{732}: E-015's λ_3000 accurate to ~1450−732−90 = ~628 digits. At n=300: 10^{73}: accurate to ~1300 digits. NOT the issue.\n\nHmm, let me just directly compare S_f(300) against a high-precision reference computed with η from Stieltjes to k=300 (dps 1000 recursion — k=300 Stieltjes via flint: ~minutes?). flint stieltjes(300) at 4000 bits — E-011 did k≤1000 parallel. Serial k ≤ 300 might take a few minutes. That would settle whether the error is in S_f or S_∞ or E-015.\n\nActually — cheaper: compare λ_300 from the ZERO side with tail correction: λ_300 zero-truncated + n²-tail estimate. λ_300(E-021) = S_∞(300) − S_f(300) + 1 = S_∞(300) + 3.4839435 = ? S_∞(300) ≈ (300/2)ln300 − 1.13033·300 − 0.25 = 855.57 − 339.10 − 0.25 = 516.2. λ ≈ 519.7. E-015: 519.70197. E-021: 516.2 + 3.4839 = 519.68. dev 7.8e-8 abs.\n\nZero-side: Σ_{γ≤5000}2Re[1−(1−1/ρ)^300] + tail(~300²·2.1e-4·0.5 ~ 9.5?)... the tail estimate too rough to adjudicate 7.8e-8.\n\nCheapest decisive: recompute S_f(300) with Stieltjes-η to k=300. Let me estimate flint stieltjes time for k ≤ 300 at 1200 digits — k³ cost: E-011 did 0..1000 at dps 550 in parallel (14 workers) taking \"~k³\"... unknown wall time. Try k ≤ 300 serial and time it.\n\nActually — even better: compute S_f(300) using η from the ZETA formula for ALL j ≥ 1 (not just j ≥ 24): η_j = (−1)^{j+1}[(1−2^{−(j+1)})ζ(j+1) − 1 + σ_{j+1}] with σ_m for m ≤ 300 all from... σ_m m ≤ 24 exact, 25..300 from zeros — but σ_25..300 from zeros has the float-γ issue... hmm no, that's the current setup essentially (except j=1..23 currently from Stieltjes). The current dev must come from somewhere in the current setup. \n\nLet me BISECT: compute λ_300 deviation with S_f built from η where σ_m for 25..200 uses EXACT (mpf from float γ but at dps 300, and γ from mp.zetazero recomputed at dps 50 for first 100 zeros only... no). \n\nAlternative bisect: S_f(300) with σ_m for 25..200 set to ZERO vs with zeros-values: difference tells if σ-zeros region matters at n=300 at all. If dev unchanged → not the σ-zeros. Also S_f(300) with η_j for j ≥ 24 replaced by... hmm.\n\nActually, simplest hypothesis test: the dev ~ e^{0.109n} growth — PRECISION-LIKE. What if mp.mp.dps = int(0.31*n)+80 inside compute_Sf is NOT taking effect (setter bug again — it worked in my tests but...)? If the S_f sum ran at the dps left over from before (243? no — compute_eta left dps at 60!): dps 60 at n=300: max term 10^{37.5} → error 10^{37.5−60} = 10^{−22.5}?? rel to λ: 3e-24/520 = 6e-27. no, too small. At dps 15 (53-bit): 10^{37.5−16} = 10^{21.5} — way too big.\n\nHmm what about η_mpf parse in compute_Sf: mp.mp.dps = full_digits+50 = 243 ✓.\n\nLet me just print devs with S_f computed at dps 600 for n = 200..300 — if devs collapse, it was sum precision; if not, η content.","signature":""},{"type":"text","text":"Devs grow ~e^{0.11n} beyond n≈200 — let me test whether it's S_f summation precision or η content."},{"type":"tool_use","id":"Bash_67","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)\nS_inf = ns[\"compute_S_inf\"](300, zeta_str, fd)\ne015 = {}\nmp.mp.dps = 100\nfor line in open(\"research/numerics/data/E-015-li-coefficients-n3000.csv\"):\n p = line.strip().split(\",\")\n if p[0].isdigit(): e015[int(p[0])] = mp.mpf(p[1])\n# high-precision S_f for n in {200,250,300}\nmp.mp.dps = 700\neta = {j: mp.mpf(v) for j, v in eta_str.items()}\nfor n in (200, 250, 300):\n s = mp.mpf(0); c = mp.mpf(1)\n for j in range(1, n+1):\n c = c*(n-j+1)/j\n s += c*eta[j-1]\n mp.mp.dps = 100\n lam = S_inf[n] - s + 1\n dev = abs(lam - e015[n]) / abs(e015[n])\n print(f\"n={n}: S_f(hi) = {mp.nstr(s,12)} rel dev vs E015 = {float(dev):.3e}\")\n mp.mp.dps = 700\nEOF","description":"S_f at dps 700 for n=200..300","timeout":600000},"extra_content":null}]