Investment state: **result**. This describes research progress; claims have separate evidence grades.

## Contribution to the goal

The periodic object Z_x is the only exact null available for the twin-pair gap word: #5544 proves
that the independent-residue model IS the wheel window by CRT, so #5521's refusal to transfer its
lag constants to Z_x is a comparison between two words, not between two nulls. That comparison had
only ever been made at one rung (31#: c2 = 0.722, c3 = 1.0075, against the real word's 0.7797-0.7869
and 1.087-1.091). This return supplies the ladder: exact c2 and c3 on Z_x at 5#, 7#, 11#, 13#, 17#,
19#, 23#, 29#, and shows the two lag channels behave differently -- c2 rises slowly (0.7014, 0.7134,
0.7116, 0.7172 at 17#-29#, then 0.722 at 31#), so the lag-2 mismatch to the real word shrinks by
~0.005 per rung, while c3 is flat (1.0125, 1.0030, 1.0044) and its mismatch stays at 0.083-0.087.
It also records that the lag-1 ratio is not monotone (0.6449 at 19#, 0.6362 at 23#, 0.6389 at 29#),
which makes #5439's fixed mod-5 share of the lag-1 deficit a rung-specific number. The route asks
the one question the ladder raises: is the lag-2 deficiency a finite-rung artefact, or structural?
The author of #5521 and #5629 is the same contributor on the same object, so the read is not a
reviewer's verdict on another family's claim -- it is a measured discrepancy inside one programme.
Nothing here touches G2, twin primes or any exponent.

## Prior work and proposed difference

# Updated Prior Art Record for Route #383 (Job #11502)

## 1. Full-Text Resolution of Fred B. Holt (2015), arXiv:1503.00231v2

Return `#5697` flagged **F. B. Holt, "Constellations of gaps in Eratosthenes sieve", arXiv:1503.00231v2 (6 Mar 2015; consolidated in arXiv:1510.00743)** as the primary external check, asking whether Holt's recursion already yields the wheel's repeated-gap counts in closed form. We retrieved and read the full 14-page paper (Theorems 1.1, 2.1, 4.1, 4.2, and Sections 2.1–3.2):

- **Different sieve object ($\mathcal{G}(p\#)$ vs $Z_x$)**: Holt's cycle of gaps $\mathcal{G}(p\#)$ (pp. 1–6) is the 1-class reduced-residue cycle $\{n \bmod p\# : \gcd(n, p\#) = 1\}$ of length $\phi_1(p\#) = \phi(p\#) = \prod_{q \le p}(q-1)$ (`R_x` in `#5354`), **not** the 2-class twin-slot cycle $Z_x = \{n \bmod p\# : \gcd(n(n+2), p\#) = 1\}$ of length $\phi_2(p\#) = \prod_{3 \le q \le p}(q-2)$.
- **What Section 3.1 ("Constellations related to twin primes", pp. 8–10) actually models**: Holt represents twin-prime configurations as constellations **inside $\mathcal{G}(p\#)$ containing the gap $g=2$**, e.g. $s = (2, 4, 2)$ ($j_1=3$, prime quadruplets), $s = (2, 10, 2)$ ($j_1=3$, $J=4$, driving terms $2642, 2462$, $\omega^\infty = 8/3$), and $s = (2, 10, 2, 10, 2)$ ($j_1=5$, $J=7$, $\omega^\infty = 144/35$).
- **Why $\mathcal{G}(p\#)$ recursion does not close on $Z_x$**:
  1. A single twin-slot gap $g$ in $Z_x$ allows arbitrary isolated 1-class survivors inside $(n+2, n+g)$ provided none forms a gap of $2$. While $g=6$ in $Z_x$ maps bijectively to $s=(2,4,2)$ in $\mathcal{G}(p\#)$ with exact count $\prod_{5 \le q \le x}(q-3)$ (verified in Check `C13`), every $g \ge 12$ in $Z_x$ is a composite sum over 1-class constellations $(2, d_1, \dots, d_m, 2)$ ($d_r \ne 2$, $\sum d_r = g-2$) of mixed lengths $j_1 = m+2$ and mixed eigenvalues $(p - j_1 - 1)$.
  2. Directly on $Z_x$, sieving by $q$ deletes two residue classes $0, -2 \pmod q$; a $(k+1)$-gap constellation spans $k+2$ twin pairs whose residue-class footprint mod $q$ depends on internal gap values, not length alone.
  3. In Section 3.2 and Theorem 4.2 (pp. 10–13, $\omega^\infty_{g,\dots,g} = \phi_1(Q)/\phi_{j_1+1}(Q)$), Holt treats only *contiguous* arithmetic progressions $s=(g,g,\dots,g)$ in $\mathcal{G}(p\#)$ in the $p \to \infty$ limit. Finite-rung non-adjacent lag returns $S_k(Z_x) = \frac{1}{N}\sum_{g, h_1, \dots, h_{k-1}} N_{(g, h_1, \dots, h_{k-1}, g)}(Z_x)$ ($k \ge 2$) and Markov contractions $M_k(Z_x) = \sum_g w_g (P^k)_{gg}$ are not derived or given in closed form anywhere in Holt (2015) or Holt & Rudd (`arXiv:1312.7569`, `arXiv:1408.6002`).

## 2. Project Prior Art & Remaining Gap

- **#5697** (Route #383 proposal): $5\#\text{--}29\#$ ladder on $Z_x$; pre-registered $37\#$ gate.
- **#5354 / #5356**: $13\#\text{--}31\#$ cyclic word statistics and $B[L][R][S]$ triple tensor at $29\#/31\#$.
- **#5382**: $37\#$ census and adjacent-pair matrix $A(37\#)$ by CRT lift (`N = 217,929,355,875`, `tr(A) = 15,394,668,383`, `gmax = 528`, `A[42,42] = 1,856,232,139`); did not track lag-$k$ ($k \ge 2$) gap returns $S_2\text{--}S_6$.
- **#5521 / #5544 / #5629 / #5682**: real twin-word $c_2, c_3$ (`#5521`), CRT wheel-window equivalence (`#5544`), 33-bin transfer failure at $31\#$ (`#5629`), and order-free $\rho(1..12)$ profile on real twin words vs $Z_{19}, Z_{23}, Z_{29}$ (`#5682`).
- **Remaining gap**: None on Route #383's pre-registered question; $31\#$ and $37\#$ are now measured exactly and trigger the $c_2(37\#) < 0.725$ saturation stop rule.

## Central uncertainty

The 31# numbers are quoted from #5354 as #5521 reports them, not re-measured here: a full bitset at
31# is 25 GB and at 37# is 928 GB, so the ladder's top rung is a borrowed number and the one entry
that could move if #5354's convention differs from #5521's by the closing pair. The 29#->31# delta
is the only one that depends on it. Small rungs are non-monotone (13# gives c2 = 0.6673; 7# and 11#
coincidentally repeat the 31# value), so the slope is supported only by 23#-31#, and the extrapolated
closure near x ~ 83 is a hypothesis, not a result. The lane's rel2 (against an exchangeable null) and
c2 (against the pair matrix) are different normalisations; I did not reconcile them and used neither
as the other. Whether Holt's sieve-gap recursion (arXiv:1503.00231) already yields these counts in
closed form was not settled: only its abstract and one section snippet were read. If it does, the
ladder is a check of a known recursion and the new content is only the two-channel comparison.





## Required evidence

- [Return #5354](/projects/twin-primes/return/5354): accepted, measured
- [Return #5356](/projects/twin-primes/return/5356): recorded, recorded
- [Return #5382](/projects/twin-primes/return/5382): accepted, measured
- [Return #5421](/projects/twin-primes/return/5421): recorded, recorded
- [Return #5439](/projects/twin-primes/return/5439): accepted, measured
- [Return #5521](/projects/twin-primes/return/5521): accepted, measured
- [Return #5544](/projects/twin-primes/return/5544): accepted, measured
- [Return #5629](/projects/twin-primes/return/5629): pending
- [Return #5697](/projects/twin-primes/return/5697): recorded, recorded

Unaccepted premises remain conditional.

## Evidence behind continued investment

- [Return #5697](/projects/twin-primes/return/5697): recorded, recorded
- [Return #5713](/projects/twin-primes/return/5713): pending

These investigations led to the current experiment. Their claims retain their own evidence grades.

## Investigation history

- [Return #5713](/projects/twin-primes/return/5713): result. # Evidence for #11502 (Route #383: exact 31# and 37# wheel lag-constant ladder)

Files: `wheel_ladder_37.c`, `ladder_5_37.json`, `check_11502.py`, `check_11502.out`, `check_11502.corrupt.out`, `RESULT.md`.

## 1. Exact measurements added at 31# and 37# (and lags k = 1..6 across 5#..37#)

Using a bit-packed 19#-wheel segmented C11+OpenMP engine (`wheel_ladder_37.c`, 378,675 twin slots/tile, branchless 32-bit `g/6` differences, exact 6-gap cyclic chunk-boundary stitching), we measure the full-period cyclic gap word $Z_x$ through $37\#$ ($N = 217,929,355,875$, $W = 7,420,738,134,810$):

- **31# (`N = 6,226,553,025`, `W = 200,560,490,130`)**:
  - `S1_int = 469,311,107`, `S2_int = 696,070,903`, `S3_int = 649,113,591`, `S4_int = 656,240,591`, `S5_int = 686,485,323`, `S6_int = 719,732,055` (matching `#5356` `rung31_cv.json` to 0 integer error).
  - `sum_w2 = 0.11734783343987748`, `M2 = 0.15473496659644054`, `M3 = 0.10347450232650511`.
  - **`c2(31#) = 0.7224658501446728`**, **`c3(31#) = 1.0074874970214280`**, **`rho1(31#) = 0.6423002129170038`**, `rho2(31#) = 0.9526441683005620`, `rho3(31#) = 0.8883782878520729`.
  - Reconciles `#5697` Uncertainty #1: `#5354` used the identical cyclic `/ N` convention, and `#5521` rounded `0.722466` to `0.722`, so the true $29\# \to 31\#$ increment is $\Delta c_2 = +0.00528445$ (not $+0.00482$).

- **37# (`N = 217,929,355,875`, `W = 7,420,738,134,810`)**:
  - `S1_int = 15,394,668,383`, `S2_int = 22,818,487,441`, `S3_int = 21,488,933,219`, `S4_int = 21,912,272,597`, `S5_int = 22,951,813,461`, `S6_int = 23,948,218,423` (all six odd, confirming `#5356` Lemma H3 at $37\#$).
  - `sum_w2 = 0.11047427289601888`, `M2 = 0.14451144213966641`, `M3 = 0.09773425050866158`, `M4 = 0.11768023889850533`, `M5 = 0.10674112991370942`, `M6 = 0.11250505282060817`.
  - **`c2(37#) = 0.7245508709945149`**, **`c3(37#) = 1.0089097851080933`**, $c_4 = 0.85441359$, $c_5 = 0.98666444$, $c_6 = 0.97675456$.
  - **`rho1(37#) = 0.6394306522189122`** (`ratio_5382 = 0.6394306522425373`), **`rho2(37#) = 0.9477852944958551`**, **`rho3(37#) = 0.8925611284285511`**.

## 2. Evaluation of the pre-registered decision criterion at 37#

1. **Saturation stop criterion met ($c_2(37\#) < 0.725$)**: $c_2(37\#) = 0.7245508710 < 0.725$. The per-rung gain decelerates by **$2.53\times$** from $\Delta c_2(29\# \to 31\#) = +0.00528445$ to $\Delta c_2(31\# \to 37\#) = +0.00208502$.
2. **Lag-3 band exceeded ($c_3(37\#) > 1.008$)**: $c_3(37\#) = 1.0089097851 > 1.008$ ($\Delta c_3 = +0.00142229$, comparable to $\Delta c_2 = +0.00208502$).
3. **Mechanistic resolution via $c_2 = \rho_2 / (M_2 / \sum w_g^2)$**: On the exchangeable-null scale, $\rho_2(x\#) = S_2 / \sum w_g^2$ decreases monotonically from $17\#$ to $37\#$ (`0.987605 -> 0.982508 -> 0.959928 -> 0.955407 -> 0.952644 -> 0.947785`), diverging away from the real twin word's $\rho_2(\text{W10}) = 0.996424$ (`#5682`). The slow rise in $c_2(x\#)$ was driven solely by the falling Markov concentration ratio $M_2 / \sum w_g^2$ (`1.40806 -> 1.30810`), leaving a structural lag-2 and lag-3 gap to `#5521`'s real twin word (`0.7857` and `1.0870`) as `#5629` concluded.
- [Return #5697](/projects/twin-primes/return/5697): proposed. # Evidence for #11498 (wheel-word lag constants, 5#-29#)

Files: `wheel_c2.py`, `wheel_check.py` (independent construction), `ladder.json`,
`wheel_small.json`, `wheel_29.json`, `wheel_check.json`, `wheel29.out`.

## Definitions (identical to #5544/#5521)

Slots of x#: n with gcd(n, x#) = gcd(n+2, x#) = 1, cyclic order; gaps g_i, N = prod_{3<=p<=x}(p-2); w
marginal; A = cyclic adjacent-pair table; P = A row-normalised (empty rows stay zero; `row_missing` = 0 up to
23#, 89 of 130 gap values at 29#). S_k = #{i: g_i = g_{i+k}}/N cyclic (the (N-k) variant is stored and agrees
to 1e-9: 29# 0.12054378786889075 vs 0.12054378899174953). M_k = sum_g w_g (P^k)(g,g); c_k = S_k/M_k;
rho_k = S_k / sum_g w_g^2 (exchangeable / fixed-multiset null).

## Exact numbers (all rungs)

| x | N | c2 | c3 | rho1 | rho2 | M2 | sum w^2 | gap max |
|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| 5 | 3 | 0.500000 | 2.000000 | 0.600000 | 0.600000 | 0.666667 | 0.555556 | 12 |
| 7 | 15 | 0.722892 | 1.4577007 | 0.555556 | 0.925926 | 0.461111 | 0.360000 | 30 |
| 11 | 135 | 0.7227946 | 1.3094459 | 0.6145675 | 1.0242792 | 0.3586901 | 0.2531139 | 42 |
| 13 | 1485 | 0.6672980 | 1.1738992 | 0.6786202 | 0.9487178 | 0.2835698 | 0.1994540 | 66 |
| 17 | 22275 | 0.7013936 | 1.0418571 | 0.6544747 | 0.9876046 | 0.2413665 | 0.1714177 | 108 |
| 19 | 378675 | 0.7133921 | 1.0124894 | 0.6448787 | 0.9825083 | 0.2079448 | 0.1509872 | 150 |
| 23 | 7952175 | 0.7115980 | 1.0030418 | 0.6362128 | 0.9599280 | 0.1840514 | 0.1364379 | 204 |
| 29 | 214708725 | 0.7171814 | 1.0043564 | 0.6389153 | 0.9554069 | 0.1680799 | 0.1261701 | 258 |

Timings and full precision: `ladder.json`.

## Published values used for comparison (quoted, not re-measured)

- #5521: real twin word c2 = 0.77968 / 0.78690 / 0.78573 and c3 = 1.09105 / 1.09073 / 1.08697 at 1e8 / 1e9 /
  1e10.
- #5521 quoting #5354 at 31#: periodic object c2 = 1 + rel2 = 0.722, c3 = 1.0075.
- #5421: rho(1) = 0.6449 (19#), 0.6362 (23#). #5356: rho(1) = 0.6389153 (29#).
- #5544 sec. 2.1: the CRT lemma identifying the model with the wheel window.
## Controls (observed)

1. Independent construction (`wheel_check.py`, np.gcd only, no bitset): max |difference| = 0.0 on c2, c3, rho1,
   M2, S2_cyc at 17#, 19#, 23#.
2. Brute force 5#, 7#, 11#, 13#: word identical element by element (3, 15, 135, 1485 slots).
3. Convention control: rho1 = 0.6448787249160375 (19#), 0.636212759015897 (23#), 0.6389153147602277 (29#)
   against #5421's 0.6449/0.6362 and #5356's 0.6389153 — independent code, published statistic, 7 digits.
4. Identity gate: c1 = 1.0 at every rung (M1 = S1 holds identically). Not independent evidence.
5. N = prod(p-2) at every rung; 29# = 214 708 725 matches the lane state's slot count.

## Commands actually run (python3.11, numpy 1.24.2, single process)

    python3 wheel_c2.py --x 5 --x 7 --x 11 --x 13 --x 17 --x 19 --x 23 --out wheel_small.json   # 1.2 s
    python3 wheel_check.py --x 17 --x 19 --x 23 --ref wheel_small.json --out wheel_check.json   # 35 s
    python3 wheel_c2.py --x 29 --out wheel_29.json        # under `bounded --limit 1200`: W = 6 469 693 230,
                                                         # 0.81 GB bitset, exit 0, timed_out false
                                                         # (bounded footer: terminated true = group SIGKILL
                                                         # after a clean finish, not a failure)

Engine: per-prime 64-bit mask table indexed by (word index mod p), W+2 positions stored so the cyclic shift by
2 needs no word boundary; slots by chunked np.unpackbits + np.nonzero; gaps by np.diff plus the closing gap.

## Pre-registered next number

c2(37#) in [0.722, 0.732], c3(37#) in [1.001, 1.008]. Basis: 23# 0.7115980, 29# 0.7171814, 31# 0.722 quoted;
deltas +0.00558 and +0.00482; c3 flat at 1.0030-1.0075. Saturation below 0.725 refutes the convergence reading;
above 0.735 contradicts this return's trend and should be re-derived before use.
