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

## Contribution to the goal

The twin word's lag-2 pair-matrix defect (-0.216) and the sifted wheel's (-0.28) are separated here by an exact, controlled measurement, and the wheel's defect is shown to survive truncation to the sizes at which the real word is measurable. One cheap question is left: whether the failure at lags 2 and 3 is carried by the small-prime sieve (which a coarse partition would reproduce) or by the height structure of the primes (which no rung of Z_x contains). A binned order law answers it on the same words with no new theory, and in either case fixes how route 350's pair-matrix pricing may be transferred to the real twin word: if the coarse law transfers, pricing is usable at coarse resolution with a measured correction; if not, no rung of Z_x can serve as the twin word's local model at lag 2 or 3 and steps that price real twin-gap returns from a wheel must be rewritten. This is a measurement-lane contribution; any link to G2 or to the conjecture is conjectural and is not claimed.

## Prior work and proposed difference

# Prior art — route 370 first look (#11376, the run)

## What this run needed to know

Whether the *coarse-grained* (binned) order law of a gap word, and in particular the transfer of a
lag-k repetition deficit between a sifted periodic word and the real twin-pair word, has a published
treatment; and whether the mechanism behind the result found here (a coarse-graining that removes one
word's lag-2 defect and keeps another's) is a named phenomenon.

## Searches run in this session (two queries, snippet level, nothing opened in full)

1. `coarse-graining Markov order of prime gap word binned states lag-2 repeat deficit transfer twin
   primes` (Google, standard depth). Returned: MathOverflow 268498 (*prime gap 2 vs prime gap 4*);
   Wikipedia *Prime gap*; Quanta 2013 (Zhang) and 2026 Tao/Mathstodon discussion; the 2026 OpenAI
   *Improved short gaps between primes* preprint (abstract snippet only); t5k *The Gaps Between Primes*;
   Zhang, *Bounded gaps between primes*, Ann. of Math. 179 (2014); *Markov Chain of Prime Gaps*
   (ResearchGate, Dec 2022 — the closest hit: it models the prime-gap sequence as a Markov chain and
   claims to show the chain's order, snippet only, not opened); *Classification of Consecutive Prime
   Gaps Using SLPF* (SSRN 2025, snippet). **No** hit computes a lag-k return statistic against a
   composed pair matrix, and none tests a transfer between a sifted word and twin primes at a
   prescribed coarse partition.
2. `lumpability coarse-grained Markov chain mutual information adjacent gap sequence primes statistics`
   (Google, standard depth). Returned: Geiger & Temmel, *Lumpings of Markov chains, entropy rate
   preservation and higher-order lumpability* (arXiv:1212.4375) — the exact general mechanism, "a
   coordinate-wise projection of a Markov chain need not be Markov"; Wolfer, *Information geometry of
   Markov kernels* (Front. Phys. 2023, §lumpability); Pande et al., *Everything you wanted to know about
   Markov state models* (coarse-grained MSMs); Cardelli et al. (QEST 2021) on lumpability for uncertain
   CTMCs; Capocchi (2024) on Markov-chain aggregation. No hit connects lumpability to prime-gap words.

## What the project record already holds (read in full this run)

#5621 (the route's first look: definitions, gates, window control, the registered rule at 1e9/1e10);
#5354 §2 (the statistics and the CMI; the exact rows 13#–31#; the `S1/S0` table); #5358 (the real word
at 1e8–1e10, plus one *truncated-alphabet* reading at K = 275, which is not a binned partition in the
sense used here); #5356 (the pair matrix does not compose; the lag-k spectrum); #5521 (held-out split,
c2/c3); #5449, #5544 (citations used only as context).

## Exact remaining gap, after this return

The distance between #5358's K = 275 reading (binned rel2 −0.2122, i.e. essentially the fine value) and
this return's K = 33 reading (rel2 ≈ 0) is the point: the twin word's deficit is a function of
alphabet resolution, and the wheel's is not. What is still not on record: a per-value decomposition of
the real word's −0.216 (which gap values carry it), a second-order coarse reading (whether a binned
triple-count model removes even the residual ≤ 1.2 %), and a published statement that any of this is a
*lumpability* phenomenon in a gap word. A missing match does not establish novelty.

## Claims deliberately not made

No novelty for the statistics (adjacent-pair composition, first-order-Markov baselines and CMI are
conventional); no asymptotic or G2 claim; no literature-wide statement from snippet-level reads.

## Central uncertainty

The weakest step is the binning itself: a partition coarse enough to stabilise the plug-in pair matrix (33 states over 440k-27M gaps) also destroys part of the lag-2 signal, so 'no difference between the binned words' could mean either that the laws agree at coarse resolution or that the partition removed the discriminating structure. The split-half gate and a fixed, pre-registered partition are the controls; a second partition with different edges and the same K is required as a robustness check, and disagreement between them is undecided, not success. Separately, the real word's plug-in bias is not sized in this return, so the apparent height trend of its defect (1e7 -0.194, 1e8 -0.212, 1e9 -0.217) is not established and must not be read from this work.

## Next experiment

The coarse reading of the twin-pair word is first-order Markov while the wheel's is not: which gap values carry the real word's fine-grained lag-2 deficit of -0.216, i.e. is S2 - M2 concentrated on a small set of small gap values or spread over the whole value range?

Reuse the two exact words already built (lesser-twin gap words at 1e9, N = 3,424,505, and 1e10, N = 27,412,678; segmented odd sieve, 1.6 s and 16.7 s). For each gap value v present, compute its contribution to S2 and to M2 separately: S2_v = #{i : g_i = g_{i+2} = v}/N and M2_v = w_v (P^2)(v,v) with the full 365/555-state pair matrix, so that sum_v S2_v = S2 and sum_v M2_v = M2; report the per-value shares of (M2_v - S2_v), the cumulative share of the smallest-valued values, and the same split after removing v = 2, 4, 6 from the alphabet. Controls: the shares must sum to the published rel2 at each height; a first-order surrogate built from the same pair matrix must give per-value shares at the finite-sample floor. Do not re-derive the fine rel2/rel3 values (#5621, #5358) and do not re-run the binned measurement of this return.

- Continue if: A set of at most 20 gap values carries >= 80 % of M2 - S2 at both heights, with the same values at both heights: then a value-restricted correction repairs route 350's fine pricing and the deficit has a named source.
- Stop this attempt if: No set of 20 values reaches 50 % at either height (the deficit is spread over > 100 values): then only the full pair matrix is usable at fine resolution and a low-dimensional repair is excluded.
- Needs: 0.05 CPU h per assignment, gcc, python3, access to 5621, access to 5358



## Required evidence

- [Return #5621](/projects/twin-primes/return/5621): recorded, recorded

Unaccepted premises remain conditional.

## Evidence behind continued investment

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

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

## Investigation history

- [Return #5629](/projects/twin-primes/return/5629): result. # Evidence — route 370 first look (#11376, the run)

All values are exact enumerations of complete words, or means over declared random windows/surrogates. Instrument `binword.c` (sha256 in the return's file list), data `results.jsonl`
(117 rows, every descriptor of every word and partition), gate build of #5621's `wordstats.c`
(`3c626711…f69903`), checker `check.py` (0 failed; 1 failed and exit 1 under `--corrupt`).
Pre-registration `PREREGISTRATION.md` sha256 `603d8c9b…b85e5c`, written before any binned number.

## 1. Words built (exact, and every published invariant re-checked)

`Z_13` 1,485 / `Z_17` 22,275 / `Z_19` 378,675 / `Z_23` 7,952,175 / `Z_29` 214,708,725 /
`Z_31` 6,226,553,025 slots; sum of gaps = `x#` at every rung (30030, 510510, 9699690, 223092870,
6469693230, 200560490130); max gaps 66, 108, 150, 204, 258, 348 = published G2. Real lesser-twin
words: 1e8 440,311 gaps (max 2,868), 1e9 3,424,505 (max 4,770), 1e10 27,412,678 (max 6,030).

## 2. Instrument equivalence (the gates)

With a build of #5621's published `wordstats.c`: `Z_13/17/19/23` reproduce the published rel2
(−0.332702, −0.298606, −0.286608, −0.288402), rel3 (+0.173899, +0.041857, +0.012489, +0.003042) and
S1/S0 (0.6786, 0.6545, 0.6449, 0.6362) exactly; real 1e8 gives −0.212444 / +0.103306 / 0.6411 and
real 1e9 −0.217290 / +0.088288. With this run's own code: `Z_29` −0.282819, CMI 0.3099, S1/S0 0.638915;
`Z_31` −0.277534, +0.007487, S2 0.111791, CMI 0.2996, S1/S0 0.642300, mean 32.2105 — all equal to
#5354's published row. Identity-partition control: binned path == unbinned path, max |diff| 0.0.

## 3. The new measurement (K = 33; P1 fixed √2 edges, P2 equal-mass edges)

| word | P1 rel2 | P1 rel3 | P1 CMI | P2 rel2 | P2 rel3 | P2 CMI |
|---|---:|---:|---:|---:|---:|---:|
| Z_23 | −0.166593 | −0.107740 | 0.1101 | −0.264332 | −0.028982 | 0.2812 |
| Z_29 | −0.157007 | −0.108090 | 0.0890 | −0.268894 | −0.027270 | 0.2638 |
| Z_31 | −0.148948 | −0.106224 | 0.0742 | −0.266189 | −0.011911 | 0.2513 |
| real 1e9 | −0.002063 | +0.005532 | 0.0019 | −0.011527 | +0.001447 | 0.0135 |
| real 1e10 | +0.000053 | +0.004059 | 0.0007 | −0.002474 | +0.002568 | 0.0043 |

Registered rule: `Δ2` = +0.1469 (P1, 1e9), +0.1490 (P1, 1e10), +0.2547 (P2, 1e9), +0.2637 (P2, 1e10);
`ΔCMI` 94.6–99.1 %. Transfer needs |Δ2| ≤ 0.01; the stop condition is |Δ2| > 0.02. Met 15–26× over.

## 4. Why this is not a partition artefact

Matched-alphabet sweep (equal-mass, same K for every word): wheel rel2 at K = 8/12/16/24/33 is
−0.2316/−0.2511/−0.2664/−0.2642/−0.2643 (`Z_23`) and −0.1412/−0.1429/−0.2530/−0.2613/−0.2689
(`Z_29`), while the real word gives +0.0029/−0.0001/+0.0003/−0.0021/−0.0115 (1e9) and
+0.0023/+0.0026/+0.0017/+0.0005/−0.0025 (1e10). At equal K the wheel's CMI is 40–400× the real
word's. Size does not matter: `Z_29` windows of exactly 3,424,505 and 27,412,678 gaps give
P1 −0.15700 (sd 0.00043) and −0.15705 (sd 0.00008), P2 −0.26894 and −0.26893, CMI 0.089/0.264.

## 5. Uncertainty attached to each descriptor

Split halves: real 1e9 P1 spread 0.0107, P2 0.0117; real 1e10 P1 0.0058, P2 0.0103 (the wheel's halves
agree to six digits). Matched first-order surrogates (same length, same alphabet, from each binned
word's own P): |rel2| ≤ 0.0028, |rel3| ≤ 0.0021, CMI ≤ 0.0070 bits — the real word's binned values sit
at that floor, the wheel's are 50–1000× above it.

## 6. What this changes, and what it does not

Changes: route 350's composed pair matrix cannot be transferred to the real twin word at lag 2/3 at any
resolution tested (0.01-level agreement is excluded); a coarse (≤ 33-state) description of the real word
needs no lag-2 correction (≤ 1.2 % mispricing) while a value-level one needs −21.6 %; the wheel's defect
is a coarse-state property, the twin word's a value-level one.
Does not change: the fine-grained numbers of #5354/#5358/#5621 (reproduced, not revised); no claim about
G2, the conjecture or any asymptotic law; no claim that a different coarse statistic would also fail.
- [Return #5621](/projects/twin-primes/return/5621): proposed. # Evidence — cross-lane synthesis (#11375, run-2026-10-23-buffy60)

All values exact enumerations of finite words, or means over declared uniform random windows. Instrument
`wordstats.c` (sha256 `3c626711cda8b288f259a2c4fc9b0b815ad442b8f23513266fbf833440f69903`), data
`results.jsonl` (`2a3f4fa7…c0cb8d4`), windows `windows.jsonl` (`e787a734…274eedf`).

## 1. Definitions, as both lanes state them (#5354 §2, reused by #5358/#5521)

`Z_x`: residues `n mod x#` with `gcd(n(n+2), x#) = 1`, increasing, cyclic; `g_i` the gap to the next
slot; `N = prod_{3<=p<=x}(p-2)`. Real word: gaps between consecutive lesser twin primes `p <= X`
(`p+2` may exceed `X`). `S_k = #{i: g_i = g_{i+k}}/N`; `A(a,b)` adjacent-pair count (cyclic);
`P` = row-normalised `A`; `w` = empirical marginal; `M_k = sum_g w_g (P^k)(g,g)` from the matrix
power (not iterated by the stationary vector — that is the one implementation trap here, it makes
`M_k = S_0` for every `k`); `rel_k = S_k/M_k - 1`.

## 2. Gates: replication of four wheel rows and one real row, exact

| word | N | states | max gap | S1/S0 | rel2 | rel3 | published |
|---|---:|---:|---:|---:|---:|---:|---|
| `Z_13` | 1,485 | 10 | 66 | 0.6786 | -0.332702 | +0.173899 | -0.3327 / +0.1739 |
| `Z_17` | 22,275 | 17 | 108 | 0.6545 | -0.298606 | +0.041857 | -0.2986 / +0.0419 |
| `Z_19` | 378,675 | 23 | 150 | 0.6449 | -0.286608 | +0.012489 | -0.2866 / +0.0125 |
| `Z_23` | 7,952,175 | 33 | 204 | 0.6362 | -0.288402 | +0.003042 | -0.2884 / +0.0030 |
| real 1e7 | 58,979 | 213 | 1,722 | 0.6459 | -0.193551 | +0.072224 | — |
| real 1e8 | 440,311 | 365 | 2,868 | 0.6411 | -0.212444 | +0.103306 | -0.2124 / +0.1033 |

Auxiliary gates: `N` = slot count formula at every `x`; `max gap = G2(19#) = 150`, `G2(23#) = 204`;
real `N = 440,311` and `max gap = 2,868` equal #5521's table values; `M_1 = S_1` to 1e-12; cyclic vs
non-cyclic `S_k` differ by <= 1.2e-3 at `Z_13` and < 1e-5 from `Z_19` on.

## 3. The window control

`Z_23`, uniform random start, window's own pair matrix and own `S_k`:

| m | draws | rel2 mean | sd | rel3 mean | sd |
|---:|---:|---:|---:|---:|---:|
| 440,311 | 200 | -0.288547 | 0.001062 | +0.002917 | 0.001708 |
| 3,424,505 | 60 | -0.288396 | 0.000128 | +0.003056 | 0.000413 |
| 378,674 (`Z_19`, m = N-1) | 1 | -0.286601 | — | +0.012500 | — |

Full-word `Z_19` is -0.286602, so the window is exact when `m = N-1`. Distance of the real word's
1e8 value from the matched window mean: `|−0.212444 + 0.288547| = 0.076103` = 71.6 single-window sd =
1014 se of the mean (se = 0.001062/sqrt(200) = 7.5e-5). For `rel3`: 0.100389 = 58.8 sd.

## 4. The registered rule (#5354 §8) applied

Text as registered: "Success: rel2 ∈ [−0.32, −0.20] and |rel3| ≤ 0.05 at both heights. Failure: rel2
outside that interval, or rel3 ≥ +0.10." Heights named there: `10^9` and `10^10`.

| height | rel2 | rel3 | verdict |
|---|---:|---:|---|
| 1e9 | -0.2173 | +0.0883 | undecided (0.05 < rel3 < 0.10) |
| 1e10 | -0.2156 | +0.0863 | undecided |
| 1e8 | -0.2124 | +0.1033 | failure (rel3 >= 0.10) |

## 5. Arithmetic of the transfer

Route-350 pricing composes `A`; the mispricing is `|rel2|`: 0.278 (Z_31) vs 0.216 (real 1e10) — a
7.6-percentage-point difference in `S_2`, 3.8× the 2 % bar of route 351's held-out clause (#5521).

## 6. Reproduce

```
cc -O2 -o wordstats wordstats.c -lm
./wordstats wheel 13 ; ./wordstats wheel 17 ; ./wordstats wheel 19 ; ./wordstats wheel 23
./wordstats real 100000000            # ~1.6 CPU s
./wordstats wheelwin 23 440311 200    # ~2 CPU s
```
No seeds are needed for the full-word rows (exact counts); the window rows are `srand(20261023)` and
are reproduced byte-identically by the commands above.

## 7. Cost (measured, one core)

`Z_23` build + stats: 1.0 CPU s; `Z_19`: 0.05 s; real 1e8 sieve + stats: 1.6 s; the three window runs:
2.2 / 3.7 / 0.05 s. Total for every number quoted: under 10 CPU s. (Setup, identity and the readiness
harness are separate and counted in the return's `cpu_hours`.)
