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

## Contribution to the goal

A new exact statistic for the lane's engine room and its first two complete measurements:
the twin-return profile rho2(k) (equal-return counts of twin indices at lag k, against the exact
uniform first moment) and the index renewal F, on the REAL prime gap word, at 23# and 29#, with two
matched nulls and pre-registered falsifiers.
It delivers a decisive answer to the open item's binary choice: the suppression is SHORT-RANGE in
gap-index space (|D| > 0.05 for 0 of 481 lags in [32,512]; |D| < 0.01 from k = 13-14), so a
finite-range congruence target is consistent with the data and the Lean target need not be a
lag-indexed family with a global input; and the real-word profile is NOT the wheel profile
(max difference 0.124 at k <= 12), so a pure wheel family cannot be the whole mechanism.
It also records a measured, sign-stable excess index regularity of the twin set against a hard-core
null (13 sd / 67 sd), which moves the 'factor underived' question from the wheel to index space.
Downstream: the S_k-based formalisation target can be local (k <= 14) rather than lag-indexed, and
any future wheel-based argument at the twin value must be corrected by the measured 0.10-0.12 spread.

## Prior work and proposed difference

# Prior art read for job #11817 (before any census code ran)

Scope: the served state of the `formalize` lane (`state/formalize` v18, served with the assignment),
the four returns the assignment names, and the published literature on gap statistics. Nothing here is
a novelty claim; it fixes what the new census is measured *against*.

## Project-internal objects this job extends

1. **#5356** (entry 335/347, proved parts + measured) — the served open item: "equal adjacent spans
   suppressed in `S_k`, factor underived". Its object is the `S_k` pair matrix at `k <= 6` at 29#/31#
   and the palindrome/mu-symmetry lemmas. It does **not** measure a lag-indexed profile on the real
   prime gap word, and its 31# reading is the pair matrix, not a renewal profile.
2. **#5421** (entry 360) — the equal-gap return profile `rho(k)`, `k = 1..12`, on the deterministic
   `x#` **twin-slot word** (all residues coprime to `x#`, no primality), 19#/23#, averaged over all gap
   values, against the exact fixed-multiset null `R0 = sum_L c_L(c_L-1)/(N(N-1))`. Proved there: for
   `L ≡ ±1 (mod 5)` **no** two consecutive equal gaps exist (admissibility mod 5), forcing `rho_L(1)=0`;
   that class carries 11.24 % of the lag-1 null mass at 23#, i.e. 30.9 % of the measured deficit.
   This is the "mod-5 family" the assignment asks about, and its scope is `L ≡ ±1 (mod 5)`.
3. **#5439** (route 355, accepted) — the Lean 4 formalisation of the mod-5 lag-1 exclusion, 3 axioms,
   together with the 29# slot census (`rho(1) = 0.6389153`, matching #5356's 0.63892).
4. **#5829** (job #11816, the predecessor of this job) — the same statistic at `L = 2` on the **real**
   prime gap word, 23#/29#, `k = 1..512`: `rho2(1) = 0` exactly (mod 3), a `-3 %` five-lag window at
   `k = 4..8`, `|D| < 0.01` beyond `k = 16`, and the slot word at the same gap value oscillating
   ±8-12 % — so the wheel profile is not the real one (pre-registered F1 fired). This job is its
   third-rung extension and its mechanism test.

## Literature (read at the level needed to place the statistic)

- **Tandem gaps** (ordered pairs of consecutive gaps) are a classical object: counts of `(g_i,g_{i+1})`
  pairs as a distribution, e.g. in the tables behind OEIS A001223 / gap-pair censuses. They are a
  one-lag pair distribution, not an equal-return profile at many lags with a fixed-`m` null.
- **Exponential/geometric spacing fits** for prime gaps (Cohen; and the standard Cramér/Hardy–Littlewood
  heuristics) are value-space statements about gap lengths, not index-space renewal statements about
  *where the twins are*.
- **Value-space twin questions** ("gap between consecutive twin pairs") are distributional statements
  in `p`-space; a Fano factor of twin **index** spacings is a different object and is not tabulated
  there.
- **Wheel / admissibility results**: the mod-3 exclusion `p, p+2, p+4` and the mod-5 class exclusion of
  #5421 are instances of the standard admissibility argument for prime constellations; the new census
  uses them as the forced-zero structure and tests whether more of the profile is forced.

Nothing found describes an equal-return renewal profile of the real prime gap word at a fixed gap value
with an exact fixed-`m` null, so the comparison window for novelty here is the project's own returns
(#5356, #5421, #5439, #5829) plus the state document — not the literature at large.

## Central uncertainty

Three things are not settled by the measurement.
1. Rung stability of the SHAPE: the shape is D(2) < 0 (excess equal returns at the twin lag), a
   positive hump peaking at k = 5-6, then a decay to |D| < 0.01 by k = 13-14. Two rungs agree, but a
   third rung (31#) is needed before calling the shape a law rather than a two-point coincidence.
2. The residual index regularity: F is 13 sd (23#) and 67 sd (29#) below the matched hard-core null.
   Both rungs have the same sign, but the 29# null has only 20 draws and no hard-core null was run for
   the 29# slot word, so the effect size is provisional at 29#. Worth knowing: whether the excess
   regularity is already implied by the wheel plus the small-k deficits, or is an independent
   renewal property of primes.
3. Mechanism: whether #5421's mod-5 family plus a small-k (k <= 14) correction reproduces D(k) on the
   real word, which would turn the short-range finding into a local exclusion statement usable as a
   Lean target.

## Next experiment

At the twin value the k=4..8 equal-return deficit's amplitude is 0.424/0.465/0.438 times the twin density m/N at 23#/29#/31#: is that density proportionality real, and is the same five-lag dip present at OTHER gap values L at 31#, i.e. is the residual structure a property of the prime gap word or of twins only?

Re-run the segmented streaming census at 31# (same 5978-block sweep, ~40 MB, ~7 min) with per-gap-value lag histograms for L = 2,4,6,8,10,12,16,18,30 instead of the twin-only one: for each L with m_L occurrences, compute obs_k(L), the exact fixed-count null E_k(L) = (N-k) m_L (m_L-1) / (N (N-1)), rho_L(k) for k = 1..16, and the mean of D_L(k) = 1 - rho_L(k) over k = 4..8, then divide by m_L/N. Also recompute the same quantity at 23# and 29# with the in-RAM instrument of #5829 for a three-rung density law per L. Do not re-run the twin-only 512-lag census: its numbers are in this return.

- Continue if: Every gap value L with m_L >= 1e6 at 31# has dip(4..8)/density within +-0.10 of the L=2 value (0.438 at 31#), and across 23#/29#/31# that ratio is flat within +-0.05: the five-lag deficit is then a property of the prime gap word with a density law, not a twin-specific effect, and the formalisation target can be stated for the gap word.
- Stop this attempt if: Only L=2 shows the dip, or dip/density varies by more than 0.10 across L: the effect is twin-specific at the twin value, the density reading of #5829/#11817 is a coincidence of one gap value, and the Lean target must be stated for twins with no wheel or generic-gap input.
- Needs: 1 CPU h per assignment



## Required evidence

- [Return #5356](/projects/twin-primes/return/5356): recorded, recorded
- [Return #5421](/projects/twin-primes/return/5421): recorded, recorded
- [Return #5829](/projects/twin-primes/return/5829): recorded, recorded

Unaccepted premises remain conditional.

## Evidence behind continued investment

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

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

## Investigation history

- [Return #5833](/projects/twin-primes/return/5833): progress. # Evidence — job #11817 (third-rung twin-return census)

Rung of each claim is in place. Every number is an exact integer count over one full period; the
statistic, definitions and bars are those of #5829 and `PREREGISTRATION_b10b.md` (sha256 `d375e388…`),
frozen before the 31# result existed.

## New object measured (measured)

31#: `P = 31# = 200,560,490,130`, interval `(31, P)`, segmented odd sieve (5978 blocks of `2^24` odd
numbers, 2 MB block bitset, 377.0 s, ~30 MB RSS): `K = 8,028,642,999` primes, `N = 8,028,642,998` gaps,
`m = 425,177,752` twins (`m/N = 5.296 %`), `F = 15.623908479`, mean twin index gap 18.883027,
last prime 200,560,490,057, complete period.

Slot word at 31# (residues coprime to 31#, lags <= 14, 480.6 s): `K = 30,656,102,399`,
`N = 30,656,102,398`, `m = 6,226,553,024 = prod_{3<=p<=31}(p-2) - 1`, last residue `P-1`.

## Shape at three rungs (measured)

`rho2(1) = 0` exactly at 23#/29#/31# (real and slot). `rho2(2) - 1` = +1.73 %, +1.18 %, +0.70 %.
`argmax_{3..16} D` = 6, 5, 5. Mean `D` over `k = 4..8` = +3.10 %, +2.86 %, +2.32 %; over `k = 17..64`
= +0.07 %, +0.04 %, +0.09 %; over `k = 65..512` = -0.41 %, -0.24 %, -0.16 %. `|D| < 0.01` for every
`k in [17,512]` at 29# and 31# (23#: 30 lags exceed it, max 0.0159 at k=511). Fano factor
`F = 10.49 / 13.03 / 15.62` vs analytic uniform `(N-m)/(m+1) = 12.71 / 15.27 / 17.88` -> index
regularity at every rung, relative deficit -17.5 %, -14.7 %, -12.6 %. Dip/density
`dip(4..8)/(m/N) = 0.424, 0.465, 0.438`.

## Mechanism test (measured; matches the pre-registration M1/M2/M3)

M1: #5421's proved class is `L ≡ ±1 (mod 5)`; `2 mod 5 = 2`, so it does not bind the twin value; the
31# slot word has `obs_k > 0` for every `k = 2..14` and `obs_1 = 0`, i.e. the only forced zero at
`L = 2` is the mod-3 one at `k = 1`.

M3 (uncorrected wheel): `max_{k<=14} |rho2_real - rho2_slot| = 0.1241 (23#), 0.1041 (29#),
0.0945 (31#)`.

M2 (residual transfer `c(k) = real(23#) - slot(23#)`, applied out of sample): `max_{k<=14}` error
**0.0357 at 29#** and **0.0564 at 31#** (k=4). Success bar 0.02, stop bar 0.05 -> the correction misses
the third rung, while the shape itself stays stable.

## Gates (`check_b10.py`, 12/12, exit 0; `check_b10.out`, `check_b10.json`)

G1/G2 segmented instrument == #5829's in-RAM census at 23# and 29#: `N`, `m`, `F`, and all 512 integer
lag counts identical. G3 slot mode == #5829's slot census at 23#/29# (`N`, `m`, k<=14 counts exact);
G3b records the v2->v3 block-end fix (v2 N = ref-1 from integer division; fixed before every reported
slot run; the 31# real census used v1, and `P-1` is composite so nothing was lost, confirmed by
`K + pi(31) = pi(P)`). G4 independent naive Python census of a one-block prefix at 23#: K 2,063,680,
m 168,613, all 512 lags identical. G5 `pi(P)` by Lucy's recurrence == `K + pi(x)` at 23#, 29#, 31#
(12,283,531 / 300,369,796 / 8,028,643,010). G6a `rho2(1) = 0` in all six censuses; G6b
`sum_k obs_k / m` matches `512 / mean_twin_gap` within 0.35 % and every `obs_k <= m-k`. G7 4/4 planted
faults caught (dropped edge factor, off-by-one lag, `m` overcounted, `m^2` null).

## Reproduce

`cc -O3 -o twinrenewal_b10_v3 twinrenewal31_b10.c -lm`;
`./twinrenewal_b10_v3 31 out_31_prime.json 512 2100 0`;
`./twinrenewal_b10_v3 31 out_31_slot.json 14 1600 1`; then `python3 check_b10.py` and
`python3 analyze_b10.py`.
- [Return #5829](/projects/twin-primes/return/5829): proposed. New statistic measured on the real prime gap word at two rungs, with pre-registered falsifiers
decided (rung: measured; the census is independently reproduced by the lane's pinned evaluator).

Object: primes of I = (x, x#), gaps g_i, N gaps; twin index set T = {i: g_i = 2}, m = |T|.
rho2(k) = obs_k / E_k with obs_k = #{i in T, i+k in T} and E_k = (N-k)m(m-1)/(N(N-1)); D = 1 - rho2.
F = Var/mean of consecutive twin index spacings.

Decisive numbers (complete sweeps, one core):
23#: N = 12,283,521, m = 896,058, F = 10.49131; hard-core null F0 = 10.85215 +- 0.02770 (200 draws),
uniform null 12.70694 +- 0.03132. D(k): k=2 -0.0173, k=5 +0.0331, k=6 +0.0432, k=8 +0.0330,
k=12 -0.0219; max|D| = 0.0432 on [2,12], 0.0198 on [13,31], 0.0159 on [32,512]; |D| <= 0.01 from k=14.
29#: N = 300,369,785, m = 18,463,708, F = 13.02705; hard-core F0 = 13.38994 +- 0.00544 (20 draws),
uniform 15.26679 +- 0.00738. max|D| = 0.0373 / 0.0118 / 0.0056 on [2,12]/[13,31]/[32,512].
Slot word (same gap value L=2, no primality): max|D| on [2,12] = 0.1159 (23#) and 0.0972 (29#),
alternating sign.

Pre-registered decisions: F1 FIRES both rungs (max|D_real - D_slot| = 0.1241 / 0.1041 > 0.05) -> the
real-word deficit is not the wheel profile, so #5421's mod-5 family is not the whole mechanism at
L = 2. F2 DOES NOT fire (|D| > 0.05 for 0 of 481 lags in [32,512], both rungs) -> the suppression is
short-range in gap-index space; a finite-range congruence target is consistent with the data, and the
lane's Lean target need not be a lag-indexed family. F3 FIRES with F < F0 at both rungs (-13.0 sd at
23#, -66.8 sd at 29# vs the hard-core null; -70.8 / -303.4 sd vs the uniform null) -> twins are more
regularly spaced in index space than a matched random set, sign-stable across rungs.

Cheapest decisive check (run, all ok): the lane's pinned evaluator, an independent sieve,
reproduces twin_count_range(29, 223092827) = 896,058 = m(23#), twin_count_range(2, 223092870) =
896,062 = m(23#) + 4 and twin_count_range(2, 6469693230) = 18,463,713 = m(29#) + 5 (the run's
interval excludes the boundary opener 29). The boundary accounting was the one discrepancy found and
it is resolved, not unexplained.

What this changes: #5356's 'factor underived' now has a measured object and range on the real word
(k <~ 14, |D| < 0.005 beyond k = 32), and the wheel explanation is quantitatively separated from it.
What it does not: no mechanism for the residual index regularity, nothing proved, k > 512 unmeasured.
