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

Library · hunts/prime_pair_error/frontier/2026-09-06/factorial_certificate_pilot/REVIEW.md

Review: the factorial-certificate pilot

2,895 words · 247 lines · source

Reviewed 2026-09-06, in a fresh worktree, by a session that did not write the pilot.

Label. This is a pilot. It is not a new prime-counting record, not an improvement to the total CHHL error E(N), and not an RH result; nothing here bears on RH (docs/08). Its smallest example is Chebyshev's 1852 construction, and the pilot says so itself. This review does not reopen the completed A/B referee work in the parent hunt.

Verdict in one line. The 87 reported certificates reproduce exactly, and the general argument in PILOT.md sections 1 to 3 is correct as written: every step was re-derived by hand below and every finite consequence that can be computed was recomputed with independent code. No mathematical error was found. The two non-mathematical findings are listed in section 6.

1. What is preserved, and how

itemwherecheck
original ZIP, 10,876 bytesarchive/factorial_certificate_pilot.zipSHA-256 215f0ab2de4957e5d98d42106f2a525286b9fa9e89fa5f4db167ceb82ed7ad0c, the value the attachment was delivered with
hash sidecararchive/SHA256SUMSsame digest
the four members the ZIP's own SHA256SUMS.json listsinside the ZIPeach present with the recorded hash and byte count
extracted copiesthis directoryPILOT.md, requirements.txt, SHA256SUMS.json byte-identical to the members; pilot.py and results.json differ from their members by one token, see below
the testtests/test_factorial_pilot_archive.pyfails if the ZIP is missing, zero bytes, or hashed differently; if any member is missing or altered; if an extracted copy differs from its member by anything other than the documented token; if any of the 87 records stops re-verifying

The one edit, stated plainly. pilot.py (two places) and results.json (one place) contain the word this repository reserves for zeta/rigor.py, both times inside a sentence disclaiming it. AGENTS.md bans that word everywhere under hunts/, disclaimers included, and tests/test_hunt_probe_discipline.py reads the bytes. The extracted copies therefore carry the same one-token substitution (reserved word to established) that commit befceb5 applied to the four frontier checker files in this directory on the same day. The originals are the ZIP members and are not edited; the test reconstructs each extracted copy from its member by exactly that substitution and demands equality, so the edit is the only difference there can be. This is a deviation from "extracted contents unchanged", chosen over relaxing the lexical rule, which is not this session's to relax. Reverting it is one git mv from the ZIP plus an exemption in the lexical test.

Nothing else in the original files was touched. All new material is under review/ or in this file.

2. Reproduction of the 87 certificates

Command, from a copy of pilot.py in a scratch directory, output to a temporary file that is not committed:

OPENBLAS_NUM_THREADS=1 .venv/bin/python pilot.py --output rerun_results.json

Environment: Python 3.14.0, numpy 2.5.2, scipy 1.18.0 (HiGHS). The original record was produced under Python 3.13.5. Elapsed 3.10 s against the recorded 3.13 s.

Result, comparing the rerun to the preserved results.json field by field:

So the reported certificates reproduce.

3. Independent check: review/check_pilot.py, output review/check_pilot.json

Written for this review, shares no code with pilot.py, reads results.json as data. Runs in about 9 s. Every assertion passed. What it establishes is finite and exact; the general argument is section 4.

  1. All 87 seeds re-verify with Fraction arithmetic: balance sum a_j/j = 0, g(r) >= 0 on r = 0..L-1, g(r) >= 1 on r = 1..M-1, and periodicity g(r+L) = g(r) and g(r + 1/3) = g(r) at sample points as computed facts. Minimum slack is 0 in both constraint classes for some seeds, which is what an LP vertex looks like.
  2. The leading constant C = kappa/(1 - 1/M) at 40 digits agrees with every recorded float to at most 2.4e-16. Range over the 87: 1.0698544525734643 (L=2310, M=15) to 1.3862943611198906 = 2 log 2 (L=30, M=2, the seed a_1 = 1, a_2 = -2). The recorded coefficient_l1 (A) matches the exact sum for every seed.
  3. The pilot's lower bound C - 1 >= [1/(L+1) - 1/(L+2)]/(1 - 1/M) holds for all 87, and kappa >= 1 - 1/M holds for all 87.
  4. The integral representation kappa = int_1^inf g(t)/t^2 dt: the truncated integral has the closed form sum_j a_j [H_{floor(R/j)}/j - floor(R/j)/R]; at R = 10^7 it is within 5.0e-8, 1.0e-7 and 1.5e-7 of kappa for the three selected seeds, which is the O(A/R) the derivation predicts.
  5. The factorial inequality |log(floor(y)!) - (y log y - y)| <= 1 + log^+ y holds at 127,074 points (half-integers to 10^4, multiples of sqrt 2 to 10^4, every integer to 10^5); the ratio of left side to right side reaches 1.0, so the inequality is tight (at y = 1 both sides are 1) and cannot be sharpened in this form.
  6. The certificate against an independent psi. psi(N) from a smallest-prime-factor sieve, summed as log p over prime powers at 30 digits: psi(10^3) = 996.680912247175, psi(10^4) = 10013.3966932631, psi(10^5) = 100051.564025658, psi(10^6) = 999586.597495633. B_N from log-factorials at 30 digits. For all 87 seeds at N = 10^3, 10^4, 10^5 and the three selected seeds at N = 10^6 (264 rows): psi(N) <= B_N <= C N + A (K+1)(1 + log N) holds, and so does the two-sided budget with the (1 - M^{-K-1}) factor and the -log(M) K(K+1)/2 term. At N = 10^6:
LMKB_N / NCB_N - C Nbudget A(K+1)(1+log N)
30671.105528116331.10555042752-22.3592.6
210671.073926412831.07396536007-38.91185.2
23101551.069825692301.06985445257-28.81333.4

Over all 264 rows the residual |B_N - C N| never exceeds 10.2% of the budget (worst: L=30, M=22, N=10^4). The budget is valid and loose by a factor of ten or more at these N.

  1. The factorial identity in integers only, three selected seeds, N = 10^4: for each of the 1229 primes p <= N, the exponent of p in prod_{k,j} floor(N/(j M^k))!^{a_j} by Legendre's formula equals sum_{p^i <= N} W_N(N/p^i) exactly, and every W_N(N/p^i) is >= 1 (minimum exactly 1 for all three seeds). This is B_N = sum_d Lambda(d) W_N(N/d) with W_N >= 1 on the support of Lambda, checked without a single logarithm.

4. The general argument, step by step

These are the pilot's claims for every N, not for the tested ones. Each was re-derived.

4.1 Do the finite period constraints establish global positivity? Yes. g(t) = sum_{j|L} a_j floor(t/j). For j | L, floor((t+L)/j) = floor(t/j) + L/j for every real t, so g(t+L) = g(t) + L sum_j a_j/j = g(t): the balance condition is exactly periodicity. Each floor(t/j) changes value only when t crosses a multiple of j, an integer, so g is constant on every [n, n+1) and g(t) = g(floor(t) mod L) for all real t >= 0. Hence g(r) >= 0 on the L residues gives g >= 0 on [0, inf), and g(r) >= 1 on r = 1..M-1 gives g >= 1 on [1, M) because those residues are below L (the pilot requires M <= L, and exact_verify enforces 2 <= M <= L). g = 0 on [0, 1). Correct.

4.2 Does rescaling establish W_N(t) >= 1 throughout [1, N]? Yes. W_N(t) = sum_{k=0}^K g(t/M^k) with K = floor(log_M N), computed by integer powers (M^K <= N < M^{K+1}, and lifted_coefficients does exactly this). For real 1 <= t <= N put k = floor(log_M t); then 0 <= k <= K because 1 <= t <= N, and t/M^k lies in [1, M), so that term is >= 1 by 4.1. Every other term is g of a nonnegative real, so >= 0. Correct, for every real t in [1, N], both endpoints included (t = 1 uses k = 0 and g(1) >= 1; t = N uses k = K).

4.3 Does the factorial identity give B_N >= psi(N)? Yes. log(n!) = sum_{m<=n} log m = sum_{m<=n} sum_{d|m} Lambda(d) = sum_{d<=n} Lambda(d) floor(n/d). With n = floor(N/(j M^k)) and the nested-floor identity floor(floor(x)/d) = floor(x/d) for integer d >= 1, log(floor(N/(jM^k))!) = sum_d Lambda(d) floor(N/(d j M^k)). Summing with weights a_j over j and k and exchanging the finite sums, B_N = sum_{d<=N} Lambda(d) sum_k sum_j a_j floor((N/d)/(j M^k)) = sum_{d<=N} Lambda(d) W_N(N/d) (terms with d > N vanish since every floor is 0). For 1 <= d <= N, N/d is in [1, N], so W_N(N/d) >= 1 by 4.2, and Lambda(d) >= 0; therefore B_N >= sum_{d<=N} Lambda(d) = psi(N). No prime data enters the choice of a_j, and no RH assumption enters anywhere. Correct. Section 3 item 7 is this identity checked in integers.

4.4 Is the error budget correct? Yes, every piece.

4.5 What the construction is. The seed a_1 = 1, a_2 = a_3 = a_5 = -1, a_30 = 1 is Chebyshev's step function, kappa = 0.92129 is Chebyshev's constant A, and summing the rescalings over powers of M = 6 to get the upper bound 6A/5 = 1.10555 is Chebyshev's own argument for the upper bound, not just his seed. The L = 210 and L = 2310 seeds are LP-selected members of the same family, with the same proof. The pilot states this correctly ("positive control, not a discovery").

4.6 The pilot's section 5, two reviewer remarks. Both are outside what the pilot claims and are recorded as pointers, not findings.

5. Grade

6. Precise findings

No mathematical error. Two findings, neither about the mathematics:

  1. pilot.py and results.json use the repository's reserved word in disclaimers, so their extracted copies could not be committed byte-identical under hunts/. Handled as in section 1; the ZIP members are untouched and the test pins the substitution.
  2. PILOT.md section 4 reports C for the rational reconstruction (Fraction(float).limit_denominator(10^6)) rather than for the float LP optimum, and the two are only guaranteed to agree when the reconstruction succeeds, which exact_verify enforces by raising. All 87 reconstructions succeeded in the original and in the rerun; the recorded C values are the constants of the exact rational seeds, which is the right thing to report. Recorded here so a future scipy or HiGHS change that returns a different vertex in a degenerate case is read as a solver difference and not as a defect.

7. What ran and what did not

Ran: the rerun of pilot.py (section 2); review/check_pilot.py (section 3); tests/test_factorial_pilot_archive.py, tests/test_frontier_archive.py, tests/test_hunt_probe_discipline.py, tests/test_docs_numbering.py, tests/test_doors.py, tests/test_repo_hygiene.py; scripts/make_context.py --check.

Did not run: any check of LP optimality (the pilot disclaims it); any Lean build; the full slow tier; any literature search beyond confirming that the Diamond and Erdős paper exists; any reading of Bober or Fiori, Kadiri and Swidinsky, which the pilot cites and this review takes as cited.