Releases: Osman209/prime-number-studies
Release list
section 6 of papers/odd_parity_sector
New: section 6 of papers/odd_parity_sector.md — the near-null branches of
both parity blocks at c = 100. Across twelve cell-sector combinations the
number of roots a branch produces beyond the tested ordinates is
non-decreasing in |lambda|, with the sign of the eigenvalue interleaved
throughout and no separate sign effect detected. The negative eigenvalues
of those blocks are counted against the archimedean cutoff, and a
parity-count pattern that held in five successive cells is reported
together with the sixth cell that breaks it.
New: harness/negative_branch.py, harness/root_precision_probe.py.
v1.13.0 New: papers/odd_parity_sector.md
v1.13.0
New: papers/odd_parity_sector.md — a probe of the odd parity sector of the
Connes-van Suijlekom Galerkin construction, with an exact finite identification
on that sector, an unseeded reconstruction of the first ten zeta ordinates at
four cutoffs, and a T-scaling measurement of the Galerkin exponent.
Changed: harness/sobolev_slope.py, conventions.py, builder_periodic.py.
The T-scaling measurement is recorded in the source package's ERRATA.md.
Release v1.12 — When the Lens Goes Blind
A fourth structural note: papers/phase_and_masking.md. The companion to li_lens_law.md — that note took the modulus of the Li–Sekatskii image and found an exact optimal lens width; this one takes the phase. At the matched lens the phase is exactly −π/2, independent of β and T, so a planted off-line quartet contributes on a strict n mod 4 cycle: detection at n ≡ 0, active masking at n ≡ 2, no exponential term at all for odd n. Measured, the first negative index was ≡ 0 (mod 4) in 24 of 24 runs. Following the rate to the far end recovers Sekatskii's Theorem 3, and the detection index grows linearly in the shift, N(d)·r(d) = log M + O(1) — so hiding a violation past order m costs a shift of order mR. Two natural refinements were tested and both fail. Its usable consequence: a numerical search that finds the first m coefficients positive has established nothing unless it states its shift.
Corrections to li_lens_law.md. Corollary 3's limit is T + 1/(4T), not T — the excess is the ¼ carried by the classical lens, and the note's own gain column was already measuring it. A guess attributing a 3% residue to the background is withdrawn: a 24-run sweep shows scatter, not a systematic effect.
Contributed. §3.1 now carries a second derivation of the same optimum by S. K. Sekatskii, included with his permission and machine-checked alongside the original.
Three new scripts, all exiting nonzero on failure; PDFs and landing pages for both notes added to docs/.
v1.11 — A Numerical Study of the Division Table
What is new
papers/a_numerical_study_of_the_division_table.md — the most elementary paper in the repository, and the natural entry point. It starts from the quotients n/d for n ≤ 100 written as mixed numbers, and reports at every step which classical object the sheet has become.
Three features before any theory: the whole cells are the summatory divisor function D(x), the column sums are the harmonic numbers, and the determinant of the 0–1 shadow — after one column is falsified — is the Mertens function, so det Rₙ = O(n^{1/2+ε}) is the Riemann hypothesis wearing a matrix. The paper says plainly that this is the hypothesis, not a route to it.
Then a walk across the table traces an arch; the arch is Fermat's method (1643); its failure is repaired by Kraitchik and the quadratic sieve, worked by hand on N = 2041; and rotating the picture forty-five degrees lands on the Dirichlet divisor and Gauss circle problems, Voronoï's series, and the x^{1/4} they share — which the paper then dissolves by softening the edge, leaving the single explicit term −1/(144X).
Two closing sections truncate the sheet instead of walking it. Keeping only the rows up to a cutoff z turns the table into the sieve of Eratosthenes and makes primality a time-dependent verdict, read on the clock u = log x / log z: Buchstab's ω as the exact dual of Dickman's ρ from §5, the frontier u = 2 where every survivor is prime, and p² as the same statement in other coordinates. The last section reduces a family of measurements to one identity, A_p = p·S_p⁻, and ends on a hard limit: the mean quantities of the sieve settle inside a window of 10⁶, while the extreme ones need a complete cycle whose length is a primorial — the largest gap among the odd numbers coprime to every odd prime up to 53 is 106, and the best a scan to 10⁹ shows is 64.
No result in the paper is new, and it says so in the abstract. Its ledger section lists twenty-one items and decomposes all twenty-one into named classical results.
the rational-angle lock
Adds papers/rational_angle_lock.md and code/verify_angle_lock.py. The note closes the one item the fourth paper flagged as possibly carrying content beyond bookkeeping — the rational-angle locking of the Toeplitz symbol's minimum — by identifying the edge law as the Hardy–Littlewood singular series μ(q)/φ(q) multiplying a Lerch–Wood polylogarithm cusp, i.e. the major arcs of the circle method. Rescaling every measured edge by φ(q)/μ(q) collapses them onto one prime-free universal cusp (mean 0.9944, sd 0.0096).
Corrects a number in the fourth paper: the handover from θ = π to θ = 2π/5 is at α* = 0.74005083, not "about α = 0.71". Appendix A item 2 is marked answered in place, with the correction recorded rather than silently edited.
Housekeeping: removes AI_disclosure.md, a working file committed to the repo root by mistake; unifies the AI-assistance line across all seven documents (paper vs note, with a pointer to the fuller statement in the README); brings .zenodo.json and CITATION.cff up to date with the notes added in v1.9.
v1.9 — the Li–Sekatskii lens note
Adds papers/li_lens_law.md, a short note on the Li–Sekatskii coefficients — the one-parameter family of Li coefficients obtained by shifting the Möbius map. The construction is Sekatskii's and the note names it in a prior-art table; what it adds is that the shift behaves as a lens with an exact optimal width. For a hypothetical zero at ρ = 1/2 + β + iT the detection rate is maximal at d = |ρ − 1/2|, where it equals artanh(β/|ρ − 1/2|), so matching the lens to the zero improves the detection index by a factor T; a previously measured empirical 30.9× improvement for a planted zero at height 30 turns out to be that T. The accompanying code/verify_li_lens.py runs eleven checks and verifies the proof of the optimum line by line.
The note also records a truncation artifact that manufactures a false detection, at the rate (1 + 1/|a|) which is Sekatskii's own exponential term, and asks the same optimisation question of the truncated Weil form, where the answer is the opposite: the support length has no interior optimum, being bounded by a Paley–Wiener price rather than a matching condition. It states how far its own prior-art search went and which sources it did not consult.
v1.8.2 — the validator runs across the ladder
run_ladder.py now runs the zero-side validator at every rung of the m-ladder rather than at one basis size, printing the worst relative residual and tail bound per rung and writing the per-rung block to run.json. conventions.py §4 had specified this and the code did not deliver it.
conventions.py also now owns the support length L_DEFAULT, which was previously hardcoded in two places; both entry points import it. The README states the true runtime of the default sweep and offers a quick-check invocation.
v1.8.1 — the validator runs across the ladder
run_ladder.py now runs the zero-side validator at every rung of the m-ladder rather than at one basis size, printing the worst relative residual and tail bound per rung and writing the per-rung block to run.json. conventions.py §4 had specified this and the code did not deliver it.
conventions.py also now owns the support length L_DEFAULT, which was previously hardcoded in two places; both entry points import it. The README states the true runtime of the default sweep and offers a quick-check invocation.
v1.8 — the validator runs across the ladder
run_ladder.py now runs the zero-side validator at every rung of the m-ladder rather than at one basis size, printing the worst relative residual and tail bound per rung and writing the per-rung block to run.json. conventions.py §4 had specified this and the code did not deliver it.
conventions.py also now owns the support length L_DEFAULT, which was previously hardcoded in two places; both entry points import it. The README states the true runtime of the default sweep and offers a quick-check invocation.
v1.7 — harness, extended-precision edge limit, and the stability statement corrected
Adds harness/: a fixed-support builder with the archimedean, pole and prime blocks exposed separately; a validator that checks the assembly non-circularly against ordinates from mpmath.zetazero, reporting residuals against explicit tail bounds; a regression harness that sweeps the m-ladder, prints the full inertia triple with its stated tolerance, writes raw arrays and JSON metadata, and exits nonzero on failure; and edge_precision.py, which evaluates the edge limit through a reduction with no trigonometric cancellation, at a precision set from the target δ. Built to a specification supplied by A. Groskin.
With that precision the (m−1)/(m+2) law is confirmed to converge like δ², the O(δ⁵) remainder holds to δ = 10⁻⁶, and the parity ratio is measured as σ₂/σ₁ = C(m) ε⁴. Running the module with --dps 16 reproduces the float64 turnaround, showing it to be arithmetic rather than mathematics.
The prime-edge note is corrected throughout. λ_min converges — 2.39%, 0.75%, 0.39% across the ladder at p_c = 60 — while the inertia counts do not, which is why the harness gates on λ_min and reports the counts without gating on them. Four precision edits due to A. Groskin are applied, the asserted equality d = 2c − 6 is withdrawn, and Bombieri's count theorem is explicitly not invoked, being stated for a different matrix family.
Four retained scripts are corrected in place so that no script prints a claim its own output does not support: the section-B conclusion in prime_edge_jump.py, the ε/δ labelling and the missing precision warnings in check_reply.py, and the withdrawn scalar-verification reading in both prime_edge_jump.py and prime_edge_rank.py