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

Library · hunts/r_2926e4/RESULTS.md

R-2926E4: the 1-D O9 table is 476 cells on kernel leaves, not 344

1,637 words · 178 lines · source

Settled. Issue #23's claim holds, and the outstanding item it named now has a number. o9_leaf.py's LEAF CAVEAT is false as a safety argument, its 344 is low by 38%, and the corrected 1-D count is 476 cells at max depth 22, every cell decided.

Run .venv/bin/python hunts/r_2926e4/probe.py (0.6 s end to end); the numbers below are results.json verbatim.

1. The caveat, put to a number

The caveat says the Arb leaves and BandCert/Leaves.lean's Taylor leaves "agree to well under 2^-60". Sampled over 24 cells drawn across the whole [28/5, 60] range from the module's own 344-cell table, the ratio of kernel width to Arb width per leaf:

leafminmeanmax
sinX21.0001.5444.695
cosX21.0008.15443.538
sinh0.3330.3330.333
cosh0.3330.3330.333
SQ20.1110.1110.111
SINC0.7780.7780.778
COSC0.5560.5560.556

The split is exactly the mechanism issue #23 names. The four constant leaves and the two hyperbolic ones are narrower in the kernel than in Arb-plus-4-ulp-pad because they are point or small-argument evaluations where the 4-ulp pad is the dominant term, so the caveat's "agree to 2^-60" is fair there. The two trig leaves of the cell are not: sinCosIv reduces mod 2π, evaluates a Taylor interval on a quarter, then applies dbl twice, and dbl squares an interval, so its width grows with the cell. Those are the only two leaves whose argument is the cell rather than a constant, and they are the two that blow up. The worst sampled case is cos on the cell at s = 31.478, wider by 43.5×.

This is a difference in kind, and the caveat's own framing of it as a precision gap is what made it read as safe.

2. Why "passes with margin" was never the right test

The caveat's safety argument is that every cell passes by far more than a few ulp, minimum 3.63e9. Rechecking the 344 recorded cells against kernel leaves, with nothing else changed:

baseline cells checked344
fail on kernel leaves85 (24.7%)
pass rate75.3%
worst kernel margin-1.07e17 ulp
largest Arb margin among the failures9.21e16 ulp
module's cited minimum margin3.63e9 ulp
ratio of the two2.5e7

That last row is the finding. A cell whose recorded margin is twenty-five million times the minimum the module offers as its safety evidence still fails. The margin and the leaf-model error are not commensurable quantities, so no threshold on the margin, not "a few ulp", not 3.63e9, not 9.21e16, separates the safe predictions from the unsafe ones. The caveat is not mis-calibrated; it is measuring the wrong thing.

The mirror reproduces the kernel's disagreement pattern, chunk for chunk

O9-2D-STATUS.md §0 records the 2026-08-13 Lean build: decide +kernel returned false on 7 of the 9 chunks, offsets 0, 40, 80, 120, 160, 240, 320, and true on 200 and 280. Bucketing this hunt's 85 failures into the same 40-cell chunks, in the same sorted order emit_lean writes:

chunk offset04080120160200240280320
failures found here351410380807
Lean's verdictfalsefalsefalsefalsefalsetruefalsetruefalse

Nine for nine, including both passing chunks. This is the load-bearing control for everything above: the mirror is not merely wider than Arb in the right direction, it agrees with the kernel on exactly which chunks survive. It is also the only comparison in this hunt against a real decide +kernel run rather than against a model, and it was not used to tune anything.

A correction to the issue. Item 1 of "What is still outstanding" says the 344-cell table "has never been put to the kernel". It has: that is the 2026-08-13 build recorded in O9-2D-STATUS.md §0, and it refuted the table. What had never been done is the rebuild, which is §3.

3. The corrected count

The same adaptive walk, the same seed cuts at every window endpoint, the same WINDOWS/CAPS and the same integer target, with o9_leaf.leaves replaced by o9_leaves_kernel.kernel_leaves. Every other line is o9_leaf.py's, imported rather than copied.

leavescellsundecidedmax depthmin margin (ulp)min margin (abs)
Arb + 4-ulp pad (recorded)3440203.63e91.97e-10
kernel, depth cap 20474120n/an/a
kernel, depth cap 304760223.12e81.69e-11

476 cells, 1.38× the recorded 344. Two things worth separating:

The 1.38× here is much gentler than the 3.2× the 2-D table suffered (598 → 1939). The plausible reason is the removable branch: the 2-D route carries y as an interval down to y = 0 and tests through R = Qim/y, so its enclosures compound the leaf widths further. Sitting at y = 1/2 with y a point, the 1-D route exposes less surface to the wider trig leaves. That is a conjecture about the mechanism, not a measurement; it would take a 2-D run at fixed y to separate.

4. What this does and does not license

Does. 476 is a materially better prediction of the kernel's verdict than 344 was, because every step from the cell to the Bool is now either o9_leaf.py's mirrored integer arithmetic or o9_leaves_kernel's mirror of Leaves.lean, and the latter is pinned against Lean's own #eval output integer for integer by tests/test_o9_leaves_kernel.py (5 passed, 1 deselected; the deselected one is the slow-marked Lean round-trip).

Does not. No Lean was built here. zeta23ext has no .lake cache in this container, so obtaining the verdict would mean building Mathlib from source, well past this hunt's budget. 476 is therefore a prediction, at the grade the 2-D repair already validated (its kernel-leaf table was accepted on all 49 chunks) but not itself checked. It is measured, rung 1: one route, and the route is a model of the kernel rather than the kernel.

Two further gaps are unchanged and belong to o9_leaf.py, not to this hunt: damageIv_mem still does not exist, so the table proves nothing about Dam even once it passes; and the 1-D route still rests on the unproved depth reduction D(y,s)/y^2 <= 4 D(1/2,s). Nothing here is evidence about RH.

5. What could not be settled at this cost

The kernel verdict itself. Everything else asked was answered.

Loose threads