Research Log 2026-09-24 — mini-babel-sieve v0 (STEP 2218 + 2219 close)
1. Context — 数式図書館 依頼
数式図書館 チャット (chat-Claude) が 依頼文 mini-babel-sieve-request-v0.1.md を 起草、 藤本さん経由 で 私 (Claude Code、 rei-aios-6e tab) が 受領 (2026-09-24 00:00 JST 頃)。 目的:
依頼 の 制約: (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 | S1 | 12 % | [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) FPR | 9 % | [4 %, 14 %] | 対称 ±5pp |
| (e-2) S1 Heuristic FDR | 50 % | [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:
generator/*はsieve/*andmutation/*を import しないsieve/*はgenerator/*を import しない- Import graph 交差 なし → コード上 独立 verified
3.2 実装 assert (spec §3.3、 全 PASS)
- I1 strict_s1_FNR_zero: PASS (missed 0 T_S1 members)
- I2 heuristic_s1_FNR_zero: PASS
- I3 eval_s2_FNR_zero: PASS
- I4 mod10_s2_FNR_zero: PASS
- I5 T_S2_subset_of_T_S1: PASS (|T_S1|=426000, |T_S2|=300, subset=True)
5/5 PASS = 実装 bug なし。
4. 測定 結果 (median of 3 runs)
4.1 Ground truth 実測
| domain size | 3,257,436 |
| |T_S1| | 426,000 (13.078 %) |
| |T_S2| | 300 (0.00921 %) |
| S2 | S1 | 0.0704 % |
| S2 ⊆ S1 | True (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 | S1 | 12 % / [6 %, 24 %] | 0.0704 % | OUT (2 桁 低) |
| (d) 検証/生成 比 | 3 x / [1 x, 10 x] | 16.6 x | OUT (上) |
| (e-1) 厳密 S1 FPR / FDR | <0.001 / [0, 0.001] | 0.000 / 0.000 | IN CI |
| (e-1) 厳密 S2 FPR / FDR | <0.001 / [0, 0.001] | 0.000 / 0.000 | IN CI |
| (e-2) S1 heur FPR | 9 % / [4 %, 14 %] | 5.12 % | IN CI |
| (e-2) S1 heur FDR | 50 % / [30 %, 70 %] | 25.39 % | OUT (下) |
| (e-3) S2 heur FPR | 10 % / [5 %, 15 %] | 9.94 % | IN CI |
| (e-3) S2 heur FDR | 42 % / [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 flip | 68,100 | 68,100 | EQUAL |
| M2 3-digit off-by-one | 1 | 1 | EQUAL |
| M3 double-plus | 70,100 | 70,100 | EQUAL |
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。 従って:
- Case A: code reuse (import graph 交差) → independence 破れ (真 に 反証 trigger)
- Case B: 両 実装 が 同 spec を 正しく 実装 → 独立、 e = 0 は 正常 結果
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
- 「予測 が 全て 当たった」 (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 候補)
- §5.4 trigger phrasing 精緻化 — 「完全 0 かつ import graph 交差 検出」 の 併存 条件 に refine (Case A vs Case B 区別 の 明文化)
- M2 mutation の 拡張 — 「3 桁 off-by-one」 の narrow (|E|=1) を 「全 operand 桁 数 で off-by-one」 に 拡張 して 感度 evidence を broaden
- Pre-reg 手法 の discipline 化 — 「pattern breakdown 詳細 分析 を pre-reg 段階 で 実施 する ガイド」 を 別 doc として 起草。 但し spec §7 「pre-reg 段階 で 事前 計数 しない」 と 両立 する 範囲 で
- 目視 検査 段 の 実施 (spec §4.2.1) — T_S1 ≤ 3 の 100 件 + T_S2 ≤ 3 の 10 件 を 本人/レビュアー が 目視 検査、 mismatch 記録
9. 派生 file と commit
- Spec draft: commit
2910b4a18—specs/mini-babel-sieve-spec-v0.md - Pre-reg freeze (STEP 2218): commit
4bbeed5fb—specs/mini-babel-sieve-pre-registration-v0.md - Implementation + measurement + report (STEP 2219): commit
69afd9211- 実装 module:
experiments/mini-babel-sieve/15 file - 実測 raw JSON:
data/mini-babel-sieve/experiment-result-v0.json - Report 全文:
experiments/mini-babel-sieve/report-v0.md
- 実装 module:
- Site 反映 + notepad + coverage map (本 STEP 2221): commit hash は commit 後 に 追記
- Notepad fragments:
docs/notepad/2026-09-24T06-39_STEP-2218_*.md+docs/notepad/2026-09-24T06-57_STEP-2219_*.md