Research Log 2026-09-24 — mini-babel-sieve v0 (STEP 2218 + 2219 close)

Pre-registration freeze + implementation + measurement + honest report / 12 予測 field 中 6 OUT-of-CI / mutation 感度 3/3 完全 / §5.4 「完全 0」 trigger の 精緻化 candidate 提示 / 藤本伸樹 / 2026-09-24

1. Context — 数式図書館 依頼

数式図書館 チャット (chat-Claude) が 依頼文 mini-babel-sieve-request-v0.1.md を 起草、 藤本さん経由 で 私 (Claude Code、 rei-aios-6e tab) が 受領 (2026-09-24 00:00 JST 頃)。 目的:

「全 文字列 を 生成 する 図書館 と、 段階 的 に 意味 を 見分ける 篩 を、 正解 (ground truth) が 完全 に 決まる 小 領域 で 構成 し、 篩 の 誤り率 を 厳密 に 測る」

依頼 の 制約: (i) 承認前 は 実装 と 計数 なし / (ii) 「世界初」 「突破」 等 の 表現 なし / (iii) STEP 番号 の 採番 は 本人 (但し 本 arc で は 藤本さん directive で 私 に delegate 済) / (iv) 独立性 が 破れ ない よう 正解 と 篩 を 別 経路 で 作る (mutation test で 感度 verify)。

3 stage 実施 (spec §8 承認 flow 遵守): (1) spec v0 起草・承認、 (2) pre-registration v0 freeze、 (3) 実装 + 測定 + report。

2. Spec v0 と Pre-registration v0 (frozen)

Spec 実体: specs/mini-babel-sieve-spec-v0.md (commit 2910b4a18)。 Pre-registration 実体: specs/mini-babel-sieve-pre-registration-v0.md (commit 4bbeed5fb = freeze point、 STEP 2218)。

Chat-Claude review 6 点 全 反映 (FPR/FDR 分母 明記 / FNR 除外 → invariant / 最良 推定 / 集合 照合 感度 / wall-clock コスト / STEP 番号 delegation)。

2.1 予測 表 (frozen at commit 4bbeed5fb、 §2 現物)

Field点 推定 (best)CI 幅CI 種類
(a) S1 通過率8 %[3 %, 13 %]対称 ±5pp
(b) S2 通過率1 %[0.33 %, 3 %]幾何 ×3
(c) S2 | S112 %[6 %, 24 %]幾何 ×2
(d) 検証/生成 コスト 比3 x[1 x, 10 x]幾何 ×3.3
(e-1) 厳密 パーサ+eval FPR< 0.001[0, 0.001]一 側
(e-1) 厳密 パーサ+eval FDR< 0.001[0, 0.001]一 側
(e-2) S1 Heuristic (loose regex) FPR9 %[4 %, 14 %]対称 ±5pp
(e-2) S1 Heuristic FDR50 %[30 %, 70 %]対称 ±20pp
(e-3) S2 Heuristic (mod-10) FPR (S1-passed 内)10 %[5 %, 15 %]対称 ±5pp
(e-3) S2 Heuristic FDR (S1-passed 内)42 %[22 %, 62 %]対称 ±20pp

FNR は 全 篩 で 代数的 0 = pre-reg §3.3 invariant (実装 assert) へ 移設、 予測 表 から 除外。 S2 篩 の 適用 範囲 = S1-passed 集合 のみ (spec §3.2 t 定義 遵守)。

3. 実装 (STEP 2219、 commit 69afd9211)

15 file / 1205 insertions。 Layout: experiments/mini-babel-sieve/ root:

experiments/mini-babel-sieve/
├── README.md                        # layout + independence verification
├── domain.py                        # Σ={0-9,+,=} length-1..6 enumeration
├── generator/
│   └── ground_truth.py              # (A) tuple → string 一方向
├── sieve/
│   ├── strict_parser.py             # (B-1) S1 baseline
│   ├── heuristic1_regex.py          # (B-2) S1 loose regex
│   ├── eval_calculator.py           # (B-3) S2 baseline (parse-tree walk)
│   └── heuristic2_mod10.py          # (B-4) S2 mod-10 symmetric
├── mutation/
│   └── mutations.py                 # M1/M2/M3 + E_i 算出
├── verify_invariants.py             # I1-I5 assertion
└── run_experiment.py                # main runner, warm-up 1 + 3 median

3.1 独立性 static verify (spec §4.2 遵守)

Import graph 静的 grep:

3.2 実装 assert (spec §3.3、 全 PASS)

5/5 PASS = 実装 bug なし。

4. 測定 結果 (median of 3 runs)

4.1 Ground truth 実測

domain size3,257,436
|T_S1|426,000 (13.078 %)
|T_S2|300 (0.00921 %)
S2 | S10.0704 %
S2 ⊆ S1True (verified)

4.2 予測 vs 実測 (12 field 突合)

Field予測 / CI実測判定
(a) S1 通過率8 % / [3 %, 13 %]13.08 %OUT (境界 超 0.08pp)
(b) S2 通過率1 % / [0.33 %, 3 %]0.0092 %OUT (2 桁 低)
(c) S2 | S112 % / [6 %, 24 %]0.0704 %OUT (2 桁 低)
(d) 検証/生成 比3 x / [1 x, 10 x]16.6 xOUT (上)
(e-1) 厳密 S1 FPR / FDR<0.001 / [0, 0.001]0.000 / 0.000IN CI
(e-1) 厳密 S2 FPR / FDR<0.001 / [0, 0.001]0.000 / 0.000IN CI
(e-2) S1 heur FPR9 % / [4 %, 14 %]5.12 %IN CI
(e-2) S1 heur FDR50 % / [30 %, 70 %]25.39 %OUT (下)
(e-3) S2 heur FPR10 % / [5 %, 15 %]9.94 %IN CI
(e-3) S2 heur FDR42 % / [22 %, 62 %]99.30 %OUT (上)

Summary: 12 field 中 6 IN CI / 6 OUT-of-CI。 予測 miss は bidirectional (下 に 2 / 上 に 3 / 境界 に 1) で systematic bias なし = 予測 が 「上限 推定」 では なく 「素直 な 中央 推定」 で あった 傍証。

4.3 Mutation 感度 (集合 照合、 pre-reg §4)

Mutation|E_i| (理論)|A_i| (実測)E_i == A_i
M1 canonical flip68,10068,100EQUAL
M2 3-digit off-by-one11EQUAL
M3 double-plus70,10070,100EQUAL

3/3 EQUAL、 測定系 は 3 mutation class 全 で 感度 完全。 但し M2 |E|=1 (対象 = 99=100) は narrow、 v0.1 で mutation 定義 の 拡張 candidate。

5. §5.4 「完全 0」 trigger の 精緻化 candidate

厳密 パーサ (S1 + S2) の FPR = FDR = 0.000 完全 一致 が §5.4 反証 trigger 「厳密 パーサ 篩 で e_FP = 0 かつ e_FN = 0 → ground truth 経路 が 被検篩 と 部品 共有 の 疑い」 に fire。

Independence 再点検 (§4.2 コード上 独立性 静的 verify) で import graph 交差 なし confirmed。 従って:

Conclusion: 完全 0 の 出現 は 「両 実装 が 同 spec (Grammar G / 算術 定義) を 独立 に 正しく 実装 した」 由来 で、 「code reuse 循環」 では ない。 §5.4 trigger phrasing 「e = 0 → 独立性 破れ」 は 不十分:
  • Case A: code reuse (import graph 交差) → independence 破れ (真 に 反証 trigger)
  • Case B: 両 実装 が 同 spec を 正しく 実装 → 独立、 e = 0 は 正常 結果
v0.1 spec で trigger を 「完全 0 かつ import graph 交差 検出」 の 併存 条件 に refine 候補。

6. Miss の 原因 分析

6.1 Root cause #1: 「短 string diagonal 比 を 全長 に 外挿」 の 誤り

予測 (b) S2 = 1% / (c) S2|S1 = 12% は 「length 3 の X=Y diagonal 10% を 全 長さ に 保存」 と 見積もった。 実測 は (b) 0.0092% / (c) 0.070% で 2 桁 low。

Root cause: T_S1 の 80% (length-6 の 4 主 pattern (1,4),(2,3),(3,2),(4,1) 各 81K-90K) は LHS/RHS 桁 数 が 非対称 で numerical 等号 が 構造 的 impossible (例 X=YYYY で LHS ∈ 0-9 が RHS ∈ 1000-9999 と 等号 に なる こと は ない)。 Diagonal 可能 な subset は 短 string と 特定 pattern のみ = T_S2 = 300 に 圧縮。

6.2 Root cause #2: Loose regex の accept 拡大 が 想定 より tight

予測 (e-2) FDR = 50% は 「heuristic accept ~ 2x T_S1」 前提。 実測 25.39% (accept = 1.34x T_S1)。

Root cause: regex ^[0-9](?:[0-9]|\+)*=[0-9](?:[0-9]|\+)*$ の 起点 ^[0-9] と 中央 =[0-9] 制約 で 「先頭 桁 0 + 複数 桁」 型 (e.g., 03+1=4) は reject。 Canonical 違反 の 大半 が 内部 位置 に 限定 され accept 拡大 が 予想 より tight。

7. Honest scope

本 arc が 主張 しない こと:
  • 「予測 が 全て 当たった」 (12 field 中 6 が OUT-of-CI = 半分 miss)
  • 「予測 の 手法 が 洗練 された」 (rough theoretical reasoning、 pattern breakdown の 詳細 分析 は skip)
  • 「新規性 / 世界初」 (spec §7 遵守、 measurement discipline の 統合 のみ)
  • 「目視 検査 が 完了 した」 (spec §4.2.1 主体 は 本人/レビュアー、 私 は 実施 主体 に 該当 しない)
  • 「§5.4 trigger fire = 独立性 破れ」 (import graph 独立性 verify で Case B と confirmed)

予測 v0 は immutable (pre-reg §5.3、 commit 4bbeed5fb)、 事後 の 書換 なし。 Miss は 事実 として 記録 のみ、 v0.1 refinement は 別 STEP で 起草 待ち。

Peer tab 状況: STEP 2220 (Signature drift 週次 cron 統合) は 別 tab (rei-aios-2e) が 06:54 に land、 本 arc の STEP 番号 は 中央 counter atomic claim で collision 予防 済 (STEP 2218 → STEP 2219 → 本 site 反映 が STEP 2221)。

8. v0.1 refinement candidate (未来 STEP 候補)

  1. §5.4 trigger phrasing 精緻化 — 「完全 0 かつ import graph 交差 検出」 の 併存 条件 に refine (Case A vs Case B 区別 の 明文化)
  2. M2 mutation の 拡張 — 「3 桁 off-by-one」 の narrow (|E|=1) を 「全 operand 桁 数 で off-by-one」 に 拡張 して 感度 evidence を broaden
  3. Pre-reg 手法 の discipline 化 — 「pattern breakdown 詳細 分析 を pre-reg 段階 で 実施 する ガイド」 を 別 doc として 起草。 但し spec §7 「pre-reg 段階 で 事前 計数 しない」 と 両立 する 範囲 で
  4. 目視 検査 段 の 実施 (spec §4.2.1) — T_S1 ≤ 3 の 100 件 + T_S2 ≤ 3 の 10 件 を 本人/レビュアー が 目視 検査、 mismatch 記録

9. 派生 file と commit