/teal-sea
teal-sea / zeta-labstate of record · compiled 28 Sep 2026 · revision e4945c4 · source

Library · hunts/prime_pair_error/S8_CONTROL.md

Section 8: a control and sensitivity instrument for E_corr

938 words · 135 lines · source

2026-09-10. Reuses probe.py's FFT-autocorrelation route for \(E(N)\) unchanged, and the character/sieve helpers in artifacts/siegel_uniformity/check.py (artifacts/siegel_uniformity/check.py) for \(C_N(h)\). Produced by s8_control.py (s8_control.py); raw output in results_s8_control.json (results_s8_control.json). This is a diagnostic instrument, not a new estimate: it measures where CORRECTED_RH_BRIDGE.md's corrected quantity \(E_{\rm corr}(N)\) actually stands at reachable \(N\), and how it reacts to an unphysical planted perturbation.

1. Which case applies at each required cutoff

\(E_{\rm corr}(N):=2\sum_{h=1}^N|r_N(h)-C_N(h)|^2\) (CORRECTED_RH_BRIDGE.md eq. 1), with \(r_N(h)=\psi_2(N,h)-(N-h)\mathfrak S(h)\) exactly probe.py's \(e(N,h)\), and \(C_N(h)\) SIEGEL_UNIFORMITY.md eq. (5) for whichever exceptional data TT Definition 2.1 assigns at that \(N\), or identically \(0\) when it assigns none.

Whether an exceptional zero is assigned is not assumed either way: at each \(N\), s8_control.py computes \(Z(N)=\exp((\log N)^{1/10})\), takes every primitive real character with conductor \(q<Z(N)\) from siegel_uniformity/check.py's local_characters(), and scans each one's Dirichlet \(L\)-function on the real axis for a zero in TT's window near \(s=1\). \(L(s,\chi)\) is evaluated exactly via the Hurwitz-zeta identity \(L(s,\chi)=q^{-s}\sum_a\chi(a)\zeta(s,a/q)\) (entire: the shared pole of \(\zeta(s,a/q)\) at \(s=1\) cancels because \(\sum_a\chi(a)=0\)), not by a truncated Dirichlet series.

For every \(N\) in \(\{2000,5000,10000,30000,100000\}\), \(Z(N)<3.6\) (it stays below 4 up to \(N\sim10^{12}\)), so the only candidate is \(q=3\); the scan finds no real zero of \(L(s,\chi_3)\) in a window padded well below TT's threshold. Every row below is therefore the no-exception case, \(C_N\equiv0\), so \(E_{\rm corr}(N)=E(N)\) exactly.

NE(N)E_corr(N)E_corr/Ecase
200025324886.7625324886.761.000000no_exception (only q=3 < Z=3.404 checked)
5000199060153.43199060153.431.000000no_exception (only q=3 < Z=3.427 checked)
100001045773187.251045773187.251.000000no_exception (only q=3 < Z=3.443 checked)
3000013875798275.99813875798275.9981.000000no_exception (only q=3 < Z=3.465 checked)
100000223439980640.017223439980640.0171.000000no_exception (only q=3 < Z=3.472 checked)

(Z values above are illustrative to 3 decimals; exact mpmath strings for each row's Z, window_lower, and scan_range are in results_s8_control.json's exceptional_case field.)

This is itself informative for the control instrument: at every scale currently reachable by direct computation, the exceptional-correction machinery from CORRECTED_RH_BRIDGE.md/SIEGEL_UNIFORMITY.md is a no-op, and \(E_{\rm corr}\) and the original \(E\) coincide exactly. The two quantities can only diverge once \(N\) is large enough to push \(Z(N)\) past a conductor that actually carries an exceptional zero -- and no such zero is known to exist at any conductor, so in practice they may never diverge at any \(N\) anyone will ever compute directly.

2. Cross-check at N=2000

\(E_{\rm corr}(2000)\) computed via the FFT route agrees with a direct, no-numpy pair count (reusing probe.py's psi2_python and singular_series_python, the same cross-check pattern probe.py itself uses for \(E\)):

3. Sensitivity: a planted off-line zero

Section 8 treats such perturbations as diagnostics, not alternative prime sequences. s8_control.py adds to \(\Lambda\) the density that a zero pair \(\rho=\beta+i\gamma\), \(\overline\rho\) contributes to \(\psi'(x)\) via the explicit formula \(\psi(x)=x-\sum_\rho x^\rho/\rho-\cdots\) (the \(-1/\rho\) factor cancels on differentiating \(-x^\rho/\rho\)): \[ \Lambda_{\rm pert}(n)=\Lambda(n)-2\,\text{amplitude}\cdot n^{\beta-1}\cos(\gamma\log n), \qquad 1\le n\le N, \] then recomputes \(E_{\rm corr}\) on \(\Lambda_{\rm pert}\) against the same fixed \(C_N\) (which is \(0\) here, since \(C_N\) depends only on \((N,q,\chi,\beta)\) of the assigned exceptional data, not on the sequence being measured).

What the perturbed sequence keeps and breaks, exactly as Section 8 requires this be written down:

Response of \(E_{\rm corr}\) (ratio to the unperturbed row above; amplitude scales the whole planted density):

Nβ=0.60,γ=14.13β=0.75,γ=14.13β=0.90,γ=14.13β=0.90,γ=50β=0.90,γ=14.13,amp=5
20001.0781.3676.8272.7832733.7
50001.0661.4839.7443.2913483.9
100001.0841.83320.8753.3924643.1
300001.0581.69617.4283.5114963.0
1000001.0241.43722.6777.1527296.2

Qualitatively: the response grows sharply with \(\beta\) (a zero closer to \(\mathrm{Re}=1\) is far more damaging, consistent with the density's \(n^{\beta-1}\) envelope), is smaller for a higher \(\gamma\) at fixed \(\beta\) (a faster-oscillating term self-cancels more in the autocorrelation), and grows roughly with the square of amplitude (an amplitude-5 planted term at \((\beta,\gamma)=(0.9,14.13)\) inflates \(E_{\rm corr}\) by three to four orders of magnitude beyond the already-large single-amplitude response at the same \((\beta,\gamma)\), rather than by a factor of 5). None of this says anything about whether such a zero exists; it only calibrates how visible one would be to \(E_{\rm corr}\) if it did, at cutoffs section 8 asked for.

4. Reuse and scope

s8_control.py reuses probe.py's von_mangoldt, singular_series, singular_series_python, psi2_fft, and psi2_python unmodified, and artifacts/siegel_uniformity/check.py's factors, phi, ramanujan, legendre, and local_characters unmodified, importing both by path rather than reimplementing anything they already compute. It writes only under hunts/prime_pair_error/.

The full per-N exceptional_case metadata (exact Z, window_lower, and scan_range at mpmath precision, and which conductors were checked) and the full planted-zero parameter grid are in results_s8_control.json.