STEP 1736 — R(D~) v0.4 全 4,140 分割の Pareto + Blahut-Arimoto R(D) による反証テスト

2026-09-04 (JST) · rei-aios tab rei-aios-20 STEP 1736 land · Predecessor: STEP 1733 v0.3 · Sibling: STEP 1735 claim ledger · Spec: data/tabs/rei-aios-f9/quantum-frontier-spike/spec-v0.1.md

Land 内容: v0.4 LAND 76/76 PASS v0.3 1232/1232 v0.2 137/137 v0.1 63/63 FALSIFIABLE TEST PASS
Bell(8) = 4,140 分割を全列挙し、各点の (savings, E[d]) を計算。 加えて同じ情報源・同じ歪み行列で Blahut-Arimoto で R(D) を数値計算し、 全 4,140 の達成可能点が R(D) 曲線の上に乗ることを検証した。 v0.3 の「上界である」は disclaimer から 測定されたギャップ に昇格した。

1. Motivation — 「Pareto: yes」を 4 点相対から 4,140 点相対へ

v0.3 は 4 registered partition について「4 点集合内では 4/4 とも Pareto」と報告していた。 この「Pareto」は登録 4 点だけを見た局所判定であり、D-FUMT₈ の全 Bell(8) = 4,140 通り の分割の中で真に非劣位かは分からなかった。

さらに v0.3 の outOfScope には 「達成可能点 = R(D~) の上界であって R(D~) ではない」 が disclaimer として書かれていた。 v0.4 は Blahut-Arimoto を数値実装して R(D) 曲線を引き、 全 4,140 点が曲線の上に乗ることを検証する。乗らなければ、 実装のどこか(RGS 列挙・optimal decoder・BA 反復)が間違っている ─ 反証可能なテストになる。

2. 追加した API

API役割
allRestrictedGrowthStrings(n)Bell(n) 個の分割を canonical RGS 形で列挙 (Bell(8)=4,140、Bell(6)=203 で確認済)
allDFumt8Partitions()D-FUMT₈ の 4,140 分割を配列で返す
partitionRatePoint(partition, counts, distortion)単一分割について (savings, E[d]) を計算 (v0.3 の optimalDecoder 再利用)
allPartitionRatePoints(counts, distortion)4,140 点全部を計算 (~30ms)
paretoFrontier(points)(E[d], R) 平面での Pareto 非劣位判定 (dominated iff 別点が両方向で ≤ かつ片方が strict)
locateRegisteredPartitions(counts, distortion)4 registered partition の 4,140 中の rank + Pareto 位置
blahutArimotoAt(counts, distortion, s)slope s での BA 1 point 解 (Cover-Thomas §10.8 Algorithm 10.4)
blahutArimotoRDCurve(counts, distortion)slope sweep で R(D) 曲線全体、endpoint 込み、pointwise lower envelope 保証
interpolateRateAt(curve, D)任意 D での R の線形補間 (凸曲線上の upper bound = 反証テスト strict 化)
verifyPartitionsAboveRDCurve(counts, distortion)反証テスト本体: 全 4,140 点が R(D) の上にあるか + gap 統計 (min/median/max)

3. 反証テスト — 全 4,140 点が R(D) の上に乗ることの実測

test §6 結果:
skewed [50,30,10,10,5,5,3,1] · 4,140 points · 0 violations · min gap = 0.000e+0 · median gap = 0.4839 bits · max gap = 1.0407 bits
uniform [1,1,1,1,1,1,1,1] · 4,140 points · 0 violations · min gap = 0.000e+0 · median gap = 1.2090 bits · max gap = 1.4036 bits

「gap」 = R_partition − R(E[d]_partition) = 決定的写像 code が真の R(D) より どれだけ余計に rate を使っているか

訂正 (2026-09-04, chat-Claude review 反映) — 「gap ≥ 0 を実測」は発見ではない。 R(D) の定義 =「全条件付き分布 p(x̂|x) にわたる min I(X;X̂)」で、決定的写像 + decoder は そのうち一員なので、gap ≥ 0 は理論から要請される不等式。破れれば実装バグ。 つまり本テストは 「反証可能な実装正当性テスト」 であり、それが 4,140 全点で通ったこと ─ とりわけ 両端が厳密に 0 で刺さったこと (identity 分割 rate = H(X) = R(0)、trivial 分割 rate = 0 = R(D_max)) ─ が BA + RGS enumerator + optimal decoder の 4 独立実装が 互いに矛盾しない証拠。情報を持つのは gap の 大きさ (median 0.48 bits) と両端一致。
反証テストが失敗する条件 (仮定法) — もし 1 点でも gap < 0 (許容 1e-4 bits) なら: (a) RGS 列挙が duplicate や missing を生む・(b) optimal decoder が最適でない・(c) BA が発散/収束バグ・(d) 数値誤差の集中 — のいずれか。 現在の実装は全 4,140 で 0 violations
chat-Claude 独立再現 (2026-09-04) — Python 別実装 (TypeScript とは無関係) で 4,140 分割列挙 + Blahut-Arimoto を書き直し、全数字一致確認済。特に identity 分割 (8 singleton) は rate = H(X) = 2.2380 = R(0) で gap = 0.000000trivial 分割 (1 class) は rate = 0 = R(D_max) で gap = 0.000000 ─ 両端刺さりで BA 実装の正当性が独立に verify された。

4. 4 registered partition の 4,140 中の位置

spec §5.6 が v0.3 で報告した「4 partition 内では 4/4 Pareto」に対する v0.4 の答え: 4,140 中では 4/4 とも Pareto ではない

partition classes R = H(X/~) E[d] Pareto (4,140) D rank R rank slack vs R(D)
v01_polar 4 1.2766 0.4035 no 3787 / 4140 1033 / 4140 1.0348 bits
conservative 4 1.8404 0.1667 no 1893 / 4140 3553 / 4140 0.7101 bits
bivalent_only 6 1.6113 0.1754 no 1895 / 4140 2480 / 4140 0.5242 bits
self_fixed 5 0.7596 0.4386 no 3968 / 4140 136 / 4140 0.5964 bits

Distribution: [50, 30, 10, 10, 5, 5, 3, 1], distortion: 0-1 Hamming. Rank 0 = smallest.

4.1 何が言えて、何が言えないか

言えること
言えないこと

5. Blahut-Arimoto の実装詳細

Cover & Thomas Elements of Information Theory 2nd ed. §10.8 Algorithm 10.4 (Blahut 1972 / Arimoto 1972) をそのまま。 各 Lagrange slope s ≤ 0 で:

iterate:
  w(y|x) ∝ q(y) · exp(s · d(x, y))     [normalize over y for each x]
  q(y)   = Σ_x p(x) · w(y|x)
until |I(X;Y)| converges (tolerance 1e-9 bits)

then:
  D(s) = Σ_{x,y} p(x) w(y|x) d(x, y)
  R(s) = Σ_{x,y} p(x) w(y|x) log₂(w(y|x) / q(y))

Endpoints は解析値を追加:

Slope sweep = 400 point の quadratic ramp (s = 0 で密、s → -50 で粗)。 数値誤差から生じる 微小な単調性違反は pointwise lower envelope (running-min from the left, sorted by D asc) で厳密に修正。 これは R(D) の 下からの近似を保つので、 「partition R ≥ interpolated R(D)」 テストは strict な必要条件のまま。

5.1 数値検証

6. 反証性を強化する「injected wrong point」テスト

§7 では、実 partition の一つを取り、その rate を人為的に 0.5 bits 下げた 「架空の code」を作って反証テストに掛ける。すると:

fake point has gap −0.5000 < 0 (correctly under the curve) ✓

= もし本当に間違った実装があったら、テストは検出することの実演。 真の 4,140 点が全て gap ≥ 0 なのは、実装が正しいからと言える (test §6)。

7. Anti-hill-climb discipline (spec §7 Pattern L 遵守)

v0.4 での Pattern L (savings 単独報告への回帰) 予防

8. Honest scope

9. Cross-references

10. External references

Test: test/step1736-r-d-tilde-v04-exhaustive-frontier-test.ts · 76/76 PASS · Regression: v0.3 1232/1232, v0.2 137/137, v0.1 63/63 all clean.