|
| 1 | +# 2026-10-23 — EXO-129: does a LUT learned from observed transitions compose? (pre-registration) |
| 2 | + |
| 3 | +**Status:** PRE-REGISTERED (written and committed before any probe code) |
| 4 | +**Thread:** TORQUE T-2026-10-23-1, Linear EXO-129. Crumb trail T-CLOSURE (EXO-132). |
| 5 | +**Owner:** CC:session_01G22yT6htkcdyXsihxxXdrg |
| 6 | + |
| 7 | +## Question |
| 8 | + |
| 9 | +P-S2 (#1726) showed that `ComposeTable` does not survive two hops. It snaps |
| 10 | +`entry[a] ⊕ entry[b]` back to the nearest entry, and most bound pairs land |
| 11 | +outside the codebook. This probe asks two things: |
| 12 | + |
| 13 | +1. Does a 256×256 table **learned from observed one-hop transitions** |
| 14 | + (`PaletteLut`-shaped, cell = modal next state) compose over k hops where |
| 15 | + `ComposeTable` does not? |
| 16 | +2. **Mechanism M:** does a data-only statistic, the **purity** `P` of the |
| 17 | + learned table (the share of training observations that equal their cell's |
| 18 | + modal result), predict how well it composes? This is the testable form |
| 19 | + of T-CLOSURE's "is the carrier closed under the operation". |
| 20 | + |
| 21 | +## Setup |
| 22 | + |
| 23 | +- **Operation per hop, with key index `b`:** `x ← x ⊕ entry[b]` in Base17 |
| 24 | + (`xor_bind`), as in P-S2. |
| 25 | +- **Truth for a chain** `(x0, b1..bk)`: `assign(x0 ⊕ e_b1 ⊕ … ⊕ e_bk)`, one |
| 26 | + snap at the end. `x0` is a population row, not a palette entry. |
| 27 | +- **Arms:** |
| 28 | + - **C:** the `ComposeTable` chain from `s0 = assign(x0)`. |
| 29 | + - **L:** the learned-table chain from `s0`. |
| 30 | +- **Training:** 20 000 trajectories of 6 hops from population rows (seed A). |
| 31 | + Each hop records `(assign(x_t), b, assign(x_{t+1}))`. `L[a][b]` is the |
| 32 | + modal result. Unobserved cells fall back to `ComposeTable`, and the |
| 33 | + unobserved fraction is reported. |
| 34 | +- **Test:** 2 000 fresh chains (seed B) for each k = 1..6. |
| 35 | +- **Worlds (six settings):** |
| 36 | + - **W1 clustered** and **W2 uniform:** P-S2's generators and seed, |
| 37 | + palette from `WeightPalette::build`. These are inherited from P-S2, not |
| 38 | + built for this probe. |
| 39 | + - **W3 group-closed:** 256 palette entries built directly as an XOR group. |
| 40 | + `entry[g]` has `dims[i] = 4096` for each set bit `i < 8` of `g`, so |
| 41 | + `entry[a] ⊕ entry[b] = entry[a ^ b]` exactly. Population: 4 members per |
| 42 | + element, each `entry[g] + u`, with `u` non-negative per-dim noise in |
| 43 | + `[0, n]` (non-negative so that XOR never touches the sign bit). |
| 44 | + Noise levels: `n ∈ {0, 500, 1500, 3000}`, four settings. Larger noise |
| 45 | + lets XOR of noise reach bit 12 and break closure gradually. |
| 46 | + |
| 47 | +## Measures |
| 48 | + |
| 49 | +- `agreement_L(k)` and `agreement_C(k)` for k = 1..6: the share of test |
| 50 | + chains whose arm result equals the truth. |
| 51 | +- `P` (purity of L on its training observations) and the unobserved-cell |
| 52 | + fraction. |
| 53 | + |
| 54 | +## Decision rules (fixed now) |
| 55 | + |
| 56 | +1. **Harness control:** in W3 with n = 0, both L and C read ≥ 0.99 at every |
| 57 | + k. Otherwise the harness is broken and nothing below is read. |
| 58 | +2. **EXO-129 torque card:** |
| 59 | + - **PROMOTE** if L ≥ 0.90 at k = 2 in **both** W1 and W2. |
| 60 | + - **KILL** if L < 0.90 at k = 2 in both. |
| 61 | + - Mixed: report, and the row stays TORQUE with the next probe named. |
| 62 | +3. **Mechanism M:** passes if, over the six settings, the Spearman rank |
| 63 | + correlation between `P` and `agreement_L(2)` is ≥ 0.9. The prediction |
| 64 | + `agreement_L(k) ≈ P^k` (independent per-hop errors) is reported with its |
| 65 | + residual, but it does not gate. |
| 66 | +4. **Disables (both must behave, or no claim is made):** |
| 67 | + - **D1:** shuffle L's result bytes across cells. Agreement at k = 2 must |
| 68 | + drop to ≤ 0.10 in every setting. |
| 69 | + - **D2:** set L := C. This must reproduce C's numbers exactly. |
| 70 | + |
| 71 | +## Applying GOLDSTAUB G-2026-10-23-1 to this probe |
| 72 | + |
| 73 | +The world that passes by construction is W3 with n = 0. That is why it is |
| 74 | +only a harness control. The world expected to fail is W2, which has no |
| 75 | +structure for a table to learn. So no conclusion is drawn from a single |
| 76 | +world's pass or fail: |
| 77 | + |
| 78 | +- the **mechanism** verdict comes only from M across the six settings; |
| 79 | +- the **torque** verdict comes from W1/W2, which P-S2 fixed before this |
| 80 | + probe existed. |
| 81 | + |
| 82 | +## Results (2026-10-23, after the run; nothing above was changed) |
| 83 | + |
| 84 | +`cargo test --release --test exo129_learned_lut_probe -- --nocapture` |
| 85 | +(bgz-tensor, debug info off). Agreement with the truth at k = 1..6: |
| 86 | + |
| 87 | +| setting | purity P | unobserved | L k=1 | L k=2 | C k=1 | C k=2 | L k=6 | C k=6 | |
| 88 | +|---|---|---|---|---|---|---|---|---| |
| 89 | +| W1 clustered | 0.471 | 0.199 | 0.242 | **0.017** | 0.579 | 0.029 | 0.005 | 0.005 | |
| 90 | +| W2 uniform | 0.479 | 0.170 | 0.112 | **0.009** | 0.279 | 0.027 | 0.005 | 0.005 | |
| 91 | +| W3 n=0 | 1.000 | 0.159 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | |
| 92 | +| W3 n=500 | 1.000 | 0.159 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | |
| 93 | +| W3 n=1500 | 1.000 | 0.159 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | |
| 94 | +| W3 n=3000 | 0.544 | 0.340 | 0.263 | 0.145 | 0.231 | 0.260 | 0.041 | 0.248 | |
| 95 | + |
| 96 | +- **Rule 1 (harness control):** holds. W3 with n = 0 reads 1.000 for both |
| 97 | + arms at every k. |
| 98 | +- **Rule 4 (disables):** both hold. |
| 99 | + - D1 (shuffled table) reads ≤ 0.005 at k = 2 in every setting. |
| 100 | + - D2 (L := C) reproduces C exactly. |
| 101 | +- **Rule 2 (torque): KILL.** L reads 0.017 / 0.009 at k = 2 in W1 / W2, |
| 102 | + against the 0.90 bar. The learned table is worse than `ComposeTable` |
| 103 | + there, even at k = 1. |
| 104 | +- **Rule 3 (mechanism M): PASS by the registered rule**, Spearman ρ = 0.935, |
| 105 | + **but the evidence is thin.** Four of the six settings tie at P = 1.0 / |
| 106 | + agreement = 1.0, so the rank correlation rests on three distinct points. |
| 107 | + The unregistered magnitude prediction `agreement_L(k) ≈ P^k` fails badly: |
| 108 | + W1 k = 2 is 0.017 against P² = 0.222. |
| 109 | +- **Pin:** both verdicts are asserted in the test. Disable run: inverting |
| 110 | + purity (`1 − P`) makes the M assertion fail, so the pin is real. |
| 111 | + |
| 112 | +### What the numbers say (reading, not a ruling) |
| 113 | + |
| 114 | +- **Purity < 1 means the palette state is not Markov for this operation.** |
| 115 | + The cell does not determine the next cell: members of one cell go to |
| 116 | + different cells. In W1/W2 the purity is about 0.47. No 256×256 table |
| 117 | + can compose there, learned or derived, because one byte of state does not |
| 118 | + carry the information the next hop needs. In Markov-chain terms this is a |
| 119 | + **lumpability** failure (Kemeny–Snell): the partition is not lumpable for |
| 120 | + the operation. That is a candidate name for trail T-CLOSURE. It is not |
| 121 | + adopted here. |
| 122 | +- **Learning made W1/W2 worse at k = 1** (0.242 vs C 0.579). Training cells |
| 123 | + pool starts from population rows with states reached after several hops, |
| 124 | + and 5/6 of the observations are reached states. The modal result then |
| 125 | + favours the reached-state distribution, while the test starts from |
| 126 | + population rows. This is a real cost of the pre-registered design, and it |
| 127 | + is itself a non-lumpability symptom: where in the cell a state sits |
| 128 | + matters. |
| 129 | +- **W3 n=3000 separates two error sources.** C stays flat at about 0.25 from |
| 130 | + k = 1 to 6. The table is the exact group law, so composition adds no |
| 131 | + error, and the loss comes from the start and end snaps alone, which |
| 132 | + depend on the fixed member noise. L decays (0.263 → 0.041), because its |
| 133 | + cells were filled from mis-snapped observations. A closed carrier |
| 134 | + therefore composes with its exact law even when snapping is noisy. A |
| 135 | + table learned from noisy snaps does not. |
| 136 | + |
| 137 | +### Closeout |
| 138 | + |
| 139 | +PR (this branch) | STATUS: measured | OUTCOME: a learned 256×256 table does |
| 140 | +not compose where the codebook is not closed (KILL); purity < 1 marks those |
| 141 | +cases, with thin rank evidence (M PASS on three distinct points) | |
| 142 | +OPEN: whether a purity bar (for example P ≥ 0.99) predicts composition on |
| 143 | +real Moore/DR pair data. That needs labelled data (GOLDSTAUB |
| 144 | +G-2026-10-23-1). |
0 commit comments