Building the Polya-Hilbert Operator Computationally
Corrected 2026-10-21, after first publication; measured 2026-08-21. Three repairs, all of them to this page rather than to the prototypes. The directory this document called
discovery/was renamedontology/and the paths below now say so. The multiplicity quoted in Reality Check item 5 is the special case of a wider law and it undercounts fromN = 338. Reality Check item 4 mis-aims a correct criticism: the operator is input-free, but the predicate section 7 actually runs does consult its input and rejects the linear-combination rivals, and the reason "immune to false positives" fails is a different one: the battery's own Euler-product rival passes it. Measurements, mechanisms and the tests that now pin them are in Corrections at the foot of this page.
If the Riemann Hypothesis is true because the zeros are the eigenvalues of a physical, geometrical operator (the Polya-Hilbert conjecture), how do we actually find that operator?
This document outlines the prototype lab now in ontology/ (it was called discovery/ when this was written), where we shifted from auditing past attempts to computationally building new geometries that attempt to model Deninger's $\mathbb{F}_1$ flow.
1. The Deninger Scaffolding (01_f1_geometry.py)
Deninger postulated an infinite-dimensional dynamical system where:
- The Space is a foliation where the prime numbers are the closed orbits.
- The Operator ($\Theta$) acts on the cohomology $H^1$.
- The Trace Formula equates the geometric trace (sum over primes) to the spectral trace (sum over zeros).
In ontology/01_f1_geometry.py, we built the software scaffolding for this. We defined F1Space (to hold prime orbits) and Cohomology (to hold the operator matrix). Any candidate operator we invent must pass the gate_1_check, proving that its spectral trace matches the geometric trace of the primes.
2. The Primordial Instrument (02_acoustic_f1_matrix.py)
To build an operator that is deeply structural, we interpreted the operator as a Graph Laplacian (an acoustic wave equation) acting on an Arithmetic Graph.
- The Nodes: Integers $1$ to $N$.
- The Edges: Two integers are connected if they differ by a prime factor.
- The Weights: The spring tension is set to $1/\ln(p)$.
When we compute the eigenvalues of this graph, we are literally "striking" the Fundamental Theorem of Arithmetic and listening to it ring. The resulting spectrum produces a clustering of frequencies corresponding to musical notes (E, G, G#, A, A#, B, C). While it does not yet produce the Riemann zeros, it proves that prime-weighted geometries do produce structured resonant spectra.
3. Inverse Spectral Geometry (03_inverse_spectral_geometry.py)
If we know exactly what frequencies the instrument must play ($14.13, 21.02, 25.01...$), can we reverse-engineer the instrument? Using the Spectral Theorem ($M = O D O^T$), we successfully "forged" a matrix whose eigenvalues perfectly match the Riemann zeros.
However, this reveals the core difficulty of the Polya-Hilbert conjecture:
- It is trivial to forge a matrix that plays the zeros.
- It is extraordinarily difficult to forge a matrix that plays the zeros where the matrix itself is structurally composed of primes.
The forged matrix is unstructured noise. The Holy Grail is to bridge the gap: tweaking the topology and weights of our Acoustic Matrix (which is strictly built from primes) until its spectrum perfectly aligns with the Forged Matrix.
4. The Transcendental Antisymmetric Matrix (04_transcendental_matrix.py)
To bypass the algebraic lock (the fact that a finite integer matrix cannot produce transcendental eigenvalues like the Riemann zeros), we injected a transcendental function directly into the geometry: the natural logarithm $\ln(p)$.
Furthermore, the Riemann zeros ($1/2 \pm i\gamma$) demand purely imaginary eigenvalues (if shifted by 1/2). In linear algebra, a real matrix has purely imaginary eigenvalues if and only if it is antisymmetric ($M^T = -M$). In physics, an antisymmetric operator corresponds to a system where time-reversal symmetry is broken. This perfectly mirrors the GUE statistics of quantum chaos!
We built a directed arithmetic graph:
- Edge from $u$ to $v$ if $v = u \cdot p$.
- Weight is $+\ln(p)$ going forward, and $-\ln(p)$ going backward.
Result: The spectrum of this matrix yields purely imaginary frequencies. Strikingly, degenerate eigenvalues lock precisely onto $\ln(2) \approx 0.693$. The matrix begins to literally "speak" in prime logarithms.
5. The Berry-Keating Grid (05_berry_keating_grid.py)
The most famous heuristic for the Polya-Hilbert operator is the Berry-Keating semiclassical Hamiltonian $H = xp$. When quantized, this becomes $H = -i(x \frac{d}{dx} + 1/2)$.
Because this operator relies on a first derivative, discretizing it on a finite grid naturally produces an antisymmetric matrix (satisfying the broken time-reversal symmetry requirement). We discretized this operator and ran it across three different "topologies":
- Integer Grid ($x_n = n$)
- Prime Grid ($x_n = p_n$)
- Transcendental Prime Grid ($x_n = \ln p_n$)
Result:
- The Integer and Prime grids produce extremely sluggish frequency growth (Mode 5 reaches $\approx 3.2$).
- The Transcendental Prime Grid causes the frequencies to dramatically accelerate (Mode 5 reaches $\approx 8.169$), rapidly closing the gap to the actual Riemann zeros (Target Mode 5 is $32.935$).
This empirically demonstrates that to physically hold the density of states required by the Berry-Keating operator, the geometric space must be structured logarithmically around the primes.
6. The Polya-Hilbert Prototype (06_the_polya_hilbert_prototype.py)
We combined the structural rules into a single finite matrix approximation:
- Arithmetic Edges: Connections exist only between $u$ and $v$ if $v = u \cdot p$.
- Logarithmic Distances: The nodes are positioned at $x_n = \ln(n)$.
- The Physics Operator: We discretized the Berry-Keating Hamiltonian $H = x \frac{d}{dx}$ along these prime edges, weighing the connections by $x_{avg} / \ln(p)$.
- Antisymmetry: We enforced $M = -M^T$ to break time-reversal symmetry.
Result: The $400 \times 400$ prototype matrix successfully compiles and produces a perfectly imaginary spectrum. The frequencies grow slowly due to the finite truncation (Mode 20 is $\approx 1.937$).
7. The Imposter Gauntlet (07_the_imposter_gauntlet.py)
We attempted to build this same graph for the Davenport-Heilbronn (DH) imposter function. However, the script fundamentally fails. The DH function violates the Riemann Hypothesis because it lacks an Euler Product. Because it lacks an Euler product, it possesses no primes, making it structurally impossible to define the "Arithmetic Edges." The geometry trivially and structurally rejects the imposter.
🛑 Reality Check (The Perplexity & Fable Critiques)
It is crucial to dial back the rhetorical hype of this computational exploration. As correctly pointed out by rigorous mathematical analysis (and our AI sanity-checks from Perplexity and Fable):
- This is a Toy Model, Not a Proof: We have built finite numerical matrices that simulate heuristics. We have mathematically proven nothing about the actual Riemann Hypothesis.
- The Continuous Spectrum Dead-End: The fact that our frequencies are crawling at $1.937$ instead of hitting the target $77.145$ is a known failure of the naive Berry-Keating operator. Rigorous papers have proven that naive $H=xp$ on $L^2(\mathbb{R}_+)$ yields a continuous spectrum. Our finite truncation forces discrete eigenvalues, but they do not (and likely cannot) converge to the Riemann zeros. Fable correctly points out that our model fails on density: we have dozens of frequencies below 17.7, where $\zeta$ only has one zero ($14.13$).
- $\mathbb{F}_1$ is Speculative: Deninger's $\mathbb{F}_1$ geometry is a deeply speculative, unproven frontier in arithmetic geometry. Calling our $400 \times 400$ matrix a "functioning model" is a massive rhetorical leap. It is simply a computational curve-fitting exercise inspired by Deninger's ideas.
- The "Imposter Gauntlet" is Vacuous: The claim that our matrix "structurally rejects" Davenport-Heilbronn is mathematically empty. The construction never actually consults $\zeta$; it just hardcodes the prime numbers. A predicate that ignores its input will return the same verdict for anything. It doesn't "reject" DH; it just completely ignores it.
- The $\ln(2)$ Eigenvalue Artifact: In
04_transcendental_matrix.py, we hyped up the fact that $\ln(2)$ appeared as a degenerate eigenvalue. Fable correctly identifies this as a known truncation artifact caused by primes near the boundary cutoff $N$ (specifically with multiplicity $\pi(N/2) - \pi(N/3) - 1$). It is a boundary effect, not a deep resonance.
The Honest Scorecard
If we run our matrices against the rigorous Gates we defined earlier in the project, the scorecard is humbling:
- Gate 4 (Euler Product Must Be Structural): ✅ Pass by design. The primes are structurally the edges.
- Gates 1 & 2 (Classical Math & Weil Positivity): ❌ Stuck. Nothing classical comes out (no functional equation, no Prime Number Theorem), and there is no positivity slot.
- Gate 3 (The Counterexample Gauntlet): ➖ N/A. No claim yet reaches the battery to be tested.
Conclusion: We are stuck at Gates 1 and 2, exactly like Deninger, Connes, and the $\mathbb{F}_1$ theorists (just without their immense mathematical machinery). The prototype lab successfully translates abstract geometric and physical heuristics (Berry-Keating, Antisymmetry, prime-graphs) into raw, executable Python, providing a fascinating visualization of why operators fail to produce the zeros. But the write-up must be clear: no claim yet reaches the rigorous battery.
Corrections (measured 2026-08-21; C3 re-measured 2026-10-21)
Grade: measured. Instruments in hunts/f1_engine_controls/, pinned by tests/test_f1_engine_controls.py. Nothing below changes a prototype: those are frozen as historical exploratory work, and they were read, not edited. C3 was re-measured at landing against the battery as it then stood, which had gained the shifted-product rival since the first measurement.
C1. The ln 2 multiplicity is a kernel dimension, not a prime count
Reality Check item 5 attributes the degenerate eigenvalue at ln 2 to a boundary effect "with multiplicity $\pi(N/2) - \pi(N/3) - 1$". The artifact reading is right and the formula is not the law.
Call u a dead end when 2u <= N < 3u. An edge above u needs a prime p <= N/u < 3, so the only one is u -> 2u carrying ln 2, and an edge above 2u needs p <= N/(2u) < 3/2, so there is none. Setting v = sum_u c_u (e_u + i e_{2u}) over the dead ends satisfies the eigenvalue equation on its own support for any coefficients. The constraints come from below: a hub w = u/q, for a prime q dividing u, receives ln q * c_u and must be sent to zero. Collect those into the hub incidence matrix C, and
$$\text{multiplicity of } i\ln 2 \;=\; \dim \ker C \;=\; |D| - \operatorname{rank} C .$$
If every dead end were prime, the only hub would be 1, the rank would be 1, and the multiplicity would be $\pi(N/2) - \pi(N/3) - 1$: the quoted formula is that special case. A composite dead end usually brings hubs that pin its own coefficient to zero and changes neither side, which is why the formula survives for a long time. It breaks when the composite dead ends close into a pattern. At N = 338 they first do: 121 = 11^2, 143 = 11 \cdot 13 and 169 = 13^2 are three columns sharing the two hubs 11 and 13, so one extra mode survives.
| N | measured | $\dim \ker C$ | quoted formula |
|---|---|---|---|
| 300 | 9 | 9 | 9 |
| 330 | 8 | 8 | 8 |
| 338 | 9 | 9 | 8 |
| 350 | 10 | 10 | 9 |
| 400 | 13 | 13 | 13 |
| 600 | 16 | 16 | 15 |
The law was checked against the eigenvalues of the built matrix at all 251 sizes N = 10 … 260 plus a coarser scan to N = 800, with no disagreement, and the rank taken two ways (40-digit elimination and double-precision LAPACK) agrees at every size. The eigenvalues themselves sit within about 1e-15 of ln 2, so this is exact degeneracy rather than a cluster.
C2. The density failure, as counts, and it widens under refinement
Reality Check item 2 says the model "fails on density: we have dozens of frequencies below 17.7, where $\zeta$ only has one zero". Quantified against zeta's counting function, at the 400-node truncation of section 6: 171 modes below 17.7 against one zero, and 159 modes below the first ordinate 14.1347, where zeta has none at all.
The direction matters more than the size. The hunts checklist asks whether an effect responds to refinement; this one responds by getting worse.
| nodes | modes | top mode | modes below $\gamma_1$ | zeta below $\gamma_1$ |
|---|---|---|---|---|
| 100 | 42 | 12.24 | 42 | 0 |
| 200 | 88 | 15.56 | 87 | 0 |
| 400 | 172 | 19.12 | 159 | 0 |
| 800 | 349 | 22.95 | 294 | 0 |
| 1200 | 522 | 25.34 | 421 | 0 |
Spurious low modes accumulate in proportion to the node count, roughly 0.35 N of them below $\gamma_1$, while the top of the spectrum creeps up like log N, buying about 3.7 units of frequency per doubling. Extending that trend, reaching the 20th ordinate at 77.145 would take on the order of 10^7 nodes, and would put some seven million modes below zeta's first zero. Read that as an order of magnitude rather than a prediction. The point stands without the extrapolation: this gap is not a finite-size effect waiting for a bigger matrix.
C3. What the gauntlet rejects, and what it admits
Reality Check item 4 says section 7 is vacuous because "the construction never actually consults $\zeta$" and "a predicate that ignores its input will return the same verdict for anything". That criticism is correct about the operator and wrong about the predicate, and the distinction is the whole point of the section.
- The operator is input-free.
build_polya_hilbert_operatortakes the truncationNand nothing else. No candidate function can enter it, so "the geometry structurally rejects the imposter" is not a statement about the geometry. - The predicate is not the operator, and it does consult its input. What section 7 runs is a multiplicativity test on Dirichlet coefficients, which this repository owns as
zeta.epstein.claim_multiplicativity. Through the three linear-combination rivals of the standing battery (battery(..., shift=None)): it passes zeta, and fails Davenport-Heilbronn and both discriminant-23Epstein rivals, withdistinguishes: Trueandshared_with: (). A predicate that ignored its input could not do that. - "Immune to false positives" is false anyway, for a different reason. The battery's default rival set also carries the symmetric shifted product
W_a(s) = zeta(s+a) zeta(s-a), which has an Euler product of its own, and the predicate admits it:distinguishes: False,shared_with: ('shifted_product',). That pass is the repository's own refutation of the claim. The two Dirichlet L-functions of the quartic characters mod 5, whose linear combination is the Davenport-Heilbronn function, pass the same predicate, and so does every primitive L-function with an Euler product. What the test separates is Euler products from linear combinations of them, which is whatzeta.epstein.battery's own docstring says the linear-combination rivals detect and whatdocs/11gate #3 asks for. It is a real answer to a real question. It is not immunity, and it does not single out zeta.
What did not need correcting
The two headline numbers still come out of the code unchanged: the transcendental prime grid's Mode 5 at 8.169 (section 5) and the prototype's Mode 20 at 1.937 (section 6). Reality Check items 1 and 3, that this is a toy computation and that $\mathbb{F}_1$ geometry is speculative, are judgments rather than measurements and stand as written.