STEP 1940 が site 反映 (STEP 1942) で公開した「初回却下率 94.9%」は 形式化の却下率ではなく、 pilot 側の line_map バグ由来の 見かけ の 数字。 cowork-Claude (Claude session claude-6c / fbd39f、 別 relay) が「A は指示追従率と形式化能力の混合」と指摘 → 藤本さん経由で ①② 提案 forward → rei-aios-99 (本 tab) で 生成コストゼロ の 再検査 実行。 結果 pilot bug 発見、 A が 94.9% ではなく 76.9% だと判明。 藤本さん directive「94.9% が形式化の却下率ではないことを 明記された方がいい」 に沿って本 page 新設 (STEP 1942 page は上書きせず併存)。
| 指標 | pilot 報告 (buggy) | Phase A 39 verify | Phase C 100/100 clean | root cause |
|---|---|---|---|---|
| PASS 数 | 2/39 | 9/39 | 27/100 | bugfix + full sample |
| Pass rate | 5.1% | 23.1% | 27.0% | +21.9 pt |
| A (raw 却下率) | 94.9% | 76.9% | 73.0% (73/100) | bugfix 収束 |
| A' (sorry 正規化後、 39 subset) | (未計測) | 61.5% (24/39) | (subset のみ) | sorry 正規化 → type-check |
| statement 構造妥当 (39 subset) | (未計測) | 38.5% (15/39) | (subset のみ) | 同上 |
| C `other` 割合 | 21.6% | < 5% | 11.0% | v2 分類器 + 100 sample 分散 |
| Top error class | no_sorry 65% | 混在 | syntax 41% | 診断 反転 |
no_sorry 1 型偏り → プロンプト問題」 vs 100/100 clean 実測 「A 高 × syntax 41% dominant + no_sorry 16% + other 11% + type_mismatch 4% + elab_failed 1% = model の Lean 4 syntax 知識不足 or 混合 (prompt + model)」。 no_sorry の 65% → 16% 大幅減少 = pilot の line_map bug が この bucket を 過大計上 していた 直接影響。
Phase 内訳: Phase A verified (baseline 39) = 9 PASS + 30 REJECT / Phase B fresh (61 items) = 18 PASS + 43 REJECT。 Phase B pass rate 29.5% vs Phase A 23.1% は sample variance (n=61 で ±10% 誤差内)、 合計 100 で 27.0% 収束。
cowork-Claude の 予測 (n=15 で 条件付き却下率 86.7%) と 私 の 結果 は 別軸: cowork-Claude は「指示追従を守った 15 件 の うち REJECT 割合」、 私 の 結果 は「実 100 items で 全 model attempt を fixed line_map で 属性化」。 前者 は pilot の 「no_sorry 24 件は未検査」 前提 に立った 上界推定、 後者 は full pilot re-run + bugfix。
run_pilot.py:140-147 の build_batch_file:
lines.append(marker_start)
start_line = len(lines) + 1 # BUG: len counts list elements, not physical lines
lines.append(f'namespace {ns}')
lines.append(body if body.strip() else '-- (empty body)') # multi-line body = 1 element!
lines.append(f'end {ns}')
end_line = len(lines) # BUG (same)
lines.append(body) は body が N 行 の string でも list 要素として 1 個。 '\n'.join(lines) で 展開時 に physical line 数 は N 増えるが、 len(lines) は 1 しか増えない → 全 item の range が 「3 行幅 (namespace + body 1行相当 + end)」に compress。
| item | pilot buggy range | correct physical range | drift |
|---|---|---|---|
| hilbert-residual-20 | (4, 6) | (4, 8) | +0, +2 |
| myst-monstrous-moonshine | (10, 12) | (12, 14) | +2, +2 |
| erdos-172 | (52, 54) | (97, 101) | +45, +47 |
| erdos-358 | (70, 72) | (120, 124) | +50, +52 |
| erdos-906 | (142, 144) | (354, 357) | +212, +213 |
| erdos-982 | (154, 156) | (368, 373) | +214, +217 |
| greens-1 | (106, 108) | (245, 261) | +139, +153 |
pilot の 上限 line が 実際 の theorem 領域 の 前 に 止まる → sorry warning が range 外 → 「no_sorry」誤判定。 実際は log に 9 sorry warning が emit されている が、 pilot は 2 個 しか PASS 判定できなかった。
len(lines) 算法 を そのまま 別 script で 実装 → pilot 保存 verdict と 39/39 完全一致。 root cause 特定完了。
body_str = body if body.strip() else '-- (empty body)' lines.extend(body_str.splitlines()) # STEP 1944 fix: one physical line per element
関数 docstring に ★ TAB ISOLATION EXCEPTION OVERRIDE ★ marker + root cause 記載。 data/tabs/rei-aios-87/pilot-autoform/run_pilot.py の line 123-159 に patch 適用済 (commit 4f767374a)。 rei-aios-99 が Tab Isolation 例外 override で rei-aios-87 の sidecar file を 修正 (peer offline)。
pilot 保存 PASS 2 件のうち:
Finset.card_le_of_subset unknown constant)。 pilot の buggy line_map で エラー行 が range 外 に 落ちて 「no error + sorry あり → PASS」 と 誤判定 したもの。| orig (v1) | → | new (v2) | count |
|---|---|---|---|
| PASS (2) | ↓ | PASS_confirmed | 1 |
| unknown_identifier | 1 (greens-1) | ||
| no_sorry (24) | ↓ | PASS_confirmed (line_map bug) | 6 |
| syntax | 9 | ||
| unknown_identifier | 3 | ||
| tactic_failed | 2 | ||
| invalid_declaration | 2 | ||
| no_sorry_confirmed | 1 | ||
| other | 1 | ||
| syntax (5) | ↓ | PASS_confirmed (line_map bug) | 2 |
| syntax | 2 | ||
| type_mismatch | 1 | ||
| other (8) | ↓ | syntax | 5 |
| elab_failed | 1 | ||
| tactic_failed | 1 | ||
| invalid_declaration | 1 |
v2 分類器 追加 bucket: tactic_failed / invalid_binder / function_expected / resource_limit / PASS_confirmed / no_sorry_confirmed。 詳細: STEP 1944 notepad
| metric | Track A (Goedel-Prover-V2:8b、 Lean 特化 8.7 GB) | Track B (qwen2.5:7b、 汎用 4.7 GB) |
|---|---|---|
| PASS | 27/100 = 27.0% | 3/100 = 3.0% |
| REJECT | 73/100 | 97/100 |
| Top error class | syntax 41% | no_sorry 64% ← 逆 |
| syntax count | 41 | 19 |
| no_sorry count | 16 | 64 |
| other | 11 | 7 |
| type_mismatch | 4 | 7 |
| elab_failed | 1 | 0 |
| Gen median | 72s | 49s (0.68x) |
| model | 診断 | intervention |
|---|---|---|
| Track A | syntax dominant → model limitation (Lean 4 知識不足) | Lean 特化 訓練 or 別 specialized model (Track B は 解決策 ではない、 pass 3% で 悪化) |
| Track B | no_sorry dominant → prompt problem (汎用 model 指示追従弱い) | prompt tuning (「必ず sorry で終わる」 explicit 指示 + refuse 例示) が 効く可能性 |
4f767374a) + full re-run で 100/100 clean 到達theorem <sig> := by sorry が type-check するか」 のみを 測定、 statement が 原問題 を 正しく formalize しているか は 別問題 (人手 review 必要)results-track-a.jsonl: baseline 39 items は 依然 pilot's original (buggy) verdicts 保存済 (rewrite していない、 履歴保持のため)。 clean 100/100 は rei-aios-99 sidecar の aggregate-100.jsonl で 提供 (source tag: phase_a_verified vs phase_b_fresh)run_pilot.py の bugfix patch 1 箇所 のみ (TAB ISOLATION EXCEPTION OVERRIDE marker 付き、 藤本さん explicit「順番に お願い致します」 で authorize)len(lines) + 1 で 計算 する と multi-line 要素 (body/theorem) が list 1 element vs physical N lines の mismatch を起こす。 全 verdict attribution が 壊れる。 Prevention: 要素追加 ではなく \n 明示 count か、 marker comment で physical scan。 batch 系 pilot は 必ず marker-based reconstruction を parallel で持つ。 Recovery: marker-based scan で line_map 再構築 → re-attribution → summary rewrite。 本 STEP 1944 で 実施した pattern が template。other 5% 超は 「使えない分類」 の 閾値 (cowork-Claude 指摘)、 pilot 完了時 に そのまま aggregate を出すと misleading。 Prevention: pilot 自身 に if C_other > 0.05: raise の early warn を組み込む。rei-aios-99 sidecar (data/tabs/rei-aios-99/pilot-autoform-analysis/) に:
normalize_and_recheck.py — ① sorry 正規化 + lake env lean 実行 (line_map bug あり raw)reattribute_normalized.py — ① 結果 marker-based line_map 修正reclassify_other.py — ② v2 分類器 で orig pilot batch reclassifynormalized-batch.lean — lake 送信 batch (9578 bytes、 31 theorem block)normalized-check.log — lake env lean 生 output (37 msg = 22 err + 15 warn)summary-normalized.json — 訂正後 A' + C_updated + per-item verdictsreclassification.json — v1→v2 per-item transitionclassifier-diff.md — 全 finding + failure mode datasetline-map.json — 訂正後 line_map (marker-based reconstruction)run_pilot_line_map_fix.patch — unified diff + relay note (STEP 1944 refs commit 4f767374a)verify_39_with_fix.py + verified-summary.json — Phase A: 39 items を fixed build_batch_file で re-attribute (lake 41s、 A=76.9%、 PASS=9)aggregate_100_clean.py + aggregate-100-summary.json + aggregate-100.jsonl — Phase C: Track A 100/100 aggregate (Phase A 39 verified + Phase B 61 fresh、 per-item source tag)aggregate_track_ab.py + aggregate-track-ab-summary.json — Phase D: Track A + Track B 200 items 対称比較 + spec §8 判定表 別 diagnosis実行 phase 別:
PYTHONIOENCODING=utf-8 python3 data/tabs/rei-aios-99/pilot-autoform-analysis/verify_39_with_fix.py → 41s lake env lean (warm Mathlib cache)cd data/tabs/rei-aios-87/pilot-autoform && python3 run_pilot.py --track a --model 'alessandrorumampuk/Goedel-Prover-V2:8b' --round 0 → ~65 min Ollama gen 61 items + 26.2s batch checkpython3 data/tabs/rei-aios-99/pilot-autoform-analysis/aggregate_100_clean.py → 数秒 aggregatecd data/tabs/rei-aios-87/pilot-autoform && python3 run_pilot.py --track b --model 'qwen2.5:7b' --round 0 → ~85 min Ollama gen 100 items (qwen 4.7 GB、 median 49s/item) + 34.1s batch checkpython3 data/tabs/rei-aios-99/pilot-autoform-analysis/aggregate_track_ab.py → Track A vs Track B 対称比較 + spec §8 別 diagnosisrun_pilot.py bugfix patch)e93c8f76a initial + 4f767374a bugfix + 59f154977 site 反映 initial + 46e76d382 Phase C 100/100 clean + Phase D 本 update commit)