STEP 1371 — d8_verdict_from_multi_trial v0.1
1. 契機
藤本さん directive: (A) 3 手 verify 先行 → (D) STEP 1350 拡張のみ、 新 repo 作らず で 実装。
3 手 verify 結果
- STEP 1350 実装 read = 単一測定 decision-table 11 rule、 5/8 値 activate (TRUE/NEITHER/ZERO/INFINITY/FLOWING)、 FALSE/BOTH/SELF は 予約
- discovery-worker v0.2 spec §6 grep = 「STEP 1350 NEITHER 経路転用」 明記済、 verdict 4 種 (TRUE/FALSE/NEITHER/INFINITY) は single-trial 想定、 FDR / 多重比較 未実装 = chat-Claude 診断的中
- FDR / Benjamini / Bonferroni grep 全 repo = 6 file hit だが production 実装 ゼロ (blackhole engine + hierarchical test は 無関係) → gap 確認
2. 実装内容
単一 file 拡張: src/mcp/d8-verdict-mapping.ts に append (新 file 作らず collision 最小化)。 pure TypeScript + seven-logic.ts import のみ (外部依存ゼロ)。
2.1 追加 export 4 個
benjaminiHochberg(pValues, q)— BH FDR primitive (pure、 決定的). 返却:{rejectedIndices, criticalP, adjustedP}mapMultiTrialToD8({trials, fdrQ, alpha})— 集約決定 main functiond8MultiTrialSpecTable()— 集約決定表 spec-as-data dump- Types:
TrialInput,MultiTrialInput,TrialResult,MultiTrialPayload,MultiTrialError
2.2 集約決定表 (first-match priority)
| # | Condition | Verdict | Reason |
|---|---|---|---|
| M1 | trials.length === 0 | ZERO 〇 | no_trials |
| M2 | fdrQ null / NaN / ≤0 / ≥1 | NEITHER N | fdr_q_not_set |
| M3 | alpha null / NaN / ≤0 / ≥1 | NEITHER N | alpha_not_set |
| M4 | 全 trial の pValue invalid | NEITHER N | no_valid_p_values |
| M5 | naive_significant_count === 0 | FALSE ⊥ | no_naive_signal (confirmed null) |
| M6 | naive>0 だが FDR 全滅 ★ | NEITHER N | all_naive_killed_by_fdr (chat-Claude 核心) |
| M7 | 0 < fdr_survivors < naive | BOTH B | partial_fdr_survivors |
| M8 | fdr_survivors === naive > 0 | TRUE ⊤ | all_naive_survive_fdr |
2.3 順序原則遵守 (feedback_one_reproduction_over_ten_unverified)
fdrQ / alpha の 具体値 (0.05 vs 0.01 vs 0.001) は module 内 定数として焼かない。 引数で 差し込む = pre-registration で 「先に決めた」 evidence を 別途残す設計 (STEP 1359 rei-preregister 連携候補)。 STEP 1350 の 順序原則 直接継承。
2.4 「否定から入れる」 discipline (chat-Claude)
本 v0.1 の rule 8 個中 5 個が 否定側 (M2/M3/M4/M5/M6 = NEITHER 4 + FALSE 1)、 肯定側は 2 個 (M7 BOTH partial + M8 TRUE)、 ZERO 1 個。 核心 rule M6 = 「naive で 5 個 有意に見えたが、 FDR 補正で 全滅した = まぐれ当たり」 判定。
3. STEP 1350 との 相補関係 (7/8 値 activate)
| STEP | Domain | Activate 5/8 値 |
|---|---|---|
| STEP 1350 (2026-08-20) | 単一測定 (single sensor) | TRUE |
| NEITHER | ||
| ZERO | ||
| INFINITY ∞ (sensor 飽和) | ||
| FLOWING ~ (校正中) | ||
| STEP 1371 (本 STEP) | 多試行 集約 (multi-trial aggregate) | TRUE |
| NEITHER | ||
| ZERO | ||
| FALSE ⊥ (confirmed null) | ||
| BOTH B (partial FDR survivors) | ||
| 合計 | — | 7/8 (SELF ⟲ のみ 予約) |
2 STEP は 同じ decision-table pattern を 異なる domain (single vs aggregate) に 適用。 module 内 spec は 分離、 module file は 統合 (import path 増やさない)。
4. discovery-worker との 位置づけ
discovery-worker v0.2 spec §6 の 「verdict 4 種 (TRUE/FALSE/NEITHER/INFINITY) は STEP 1350 NEITHER 経路転用」 は single-trial 用。 hunter_alpha / hunter_beta が N 個 conjecture 一括 submit する場面で、 個別 verdict を 集約する 上位 gate が 未実装だった gap を 本 STEP で 埋める (但し MCP 統合は 別 STEP defer、 本 STEP は primitive のみ)。
5. Verify 実測
5.1 test 89/89 PASS
test file: test/step1371-d8-multi-trial-fdr-test.ts (21 part)。
- Part 1 [1]-[5]: BH primitive — Wikipedia 系 教科書 example (10 p-values、 q=0.05、 kMax=2、 criticalP=0.008) 既知答え verify + monotonicity + null / NaN 処理 + mixed valid/invalid
- Part 2 [6]-[13]: 集約 rule M1-M8 全網羅、 [11] chat-Claude 核心 M6 (naive=2, fdr=0 → NEITHER all_naive_killed_by_fdr) 独立 assertion
- Part 3 [14]-[16]: discovery-worker realistic scenario — 100 trials uniform null → naive=4 → BH q=0.05 → 0 survivors → NEITHER (chat-Claude 「1 万通り試せば まぐれ」 の 数値 直接 evidence)、 1000 trials 拡張、 1 strong signal + 99 noise → BOTH partial 検出
- Part 4 [17]-[21]: spec table + source marker 一貫性 + invalid input rejection + id fallback + adjusted p boundary
5.2 regression clean
- STEP 1350 (single-measurement): 77/77 PASS (無変更)
- d8-verdict-mapping.ts 内 STEP 1350 側 API breaking なし (append のみ)
5.3 core assertion (chat-Claude M6)
[11] ★ Rule M6: naive>0 だが FDR 全滅 → NEITHER (chat-Claude 核心)
trials = [{p:0.04}, {p:0.045}, {p:0.06}], fdrQ=0.05, alpha=0.05
→ verdict = NEITHER
→ reason = all_naive_killed_by_fdr
→ naiveSignificantCount = 2
→ fdrSurvivorCount = 0
→ per-trial: a,b = NEITHER (naive_killed_by_fdr), c = FALSE (not_naive_significant)
[14] ★ discovery-worker: 100 trials under null (deterministic uniform p_i = i/100)
→ naive = 4 (p_1=0.01, p_2=0.02, p_3=0.03, p_4=0.04)
→ BH q=0.05, m=100: k=1 threshold=0.0005, all fail → 0 rejects
→ verdict = NEITHER (all_naive_killed_by_fdr) ✓
6. Honest scope
- v0.1 = pure primitive + test のみ。 MCP tool wrapper (
rei-mcp-server.ts) は 他タブ活動域 collision 回避のため defer、 別 commit / 別 STEP で 統合。 - 「世界唯一」 主張ゼロ (
feedback_world_uniqueness_claim_controllable)。 Benjamini-Hochberg (1995) は 30 年前既知、 novelty は Rei stack 内 D-FUMT₈ 8 値 verdict layer への mapping と 「否定 5 rule / 肯定 2 rule / ZERO 1 rule」 の 命名 discipline のみ、 それも v0.1 spike scope。 - pValue mode のみ実装。
{value, noiseFloor}→ p 変換は 分布仮定 (t / normal / permutation) が 別軸、 STEP 1353 Statistics × NEITHER Education v0.2 の Welch-t 実装から extract は 別 STEP。 - Benjamini-Hochberg 独立仮定。 BH-Yekutieli 依存対応 (正相関 / 任意相関) は scope 外、 discovery-worker が 独立探索 (candidate 間 論理的独立) を 前提とするなら 本 実装で 十分、 相関ある candidates (同 conjecture の parameter sweep 等) では 保守的 (rejection 過小) に働く。
- Bonferroni 未実装。
method: 'benjamini-hochberg'hard-coded、 v0.2 で method selector 追加検討。 - Storey q-value / knockoff は scope 外。 大規模 hypothesis test (数万〜数十万) では BH が 保守的、 v0.3 以降で 検討。
- 順序原則 operational form = fdrQ / alpha を 引数で 差し込む、 定数化禁止 = pre-registration (STEP 1359 rei-preregister) で 先に決めた値を 使う workflow を 構造的に強制。 code 内 magic number 陥落先を 排除。
- 形式化 3 系 (rei-mdnst / rei-raa / rei-six-attribute) には 効かない (chat-Claude 明示)。 Lean 4 axiom-free proof に 確率は無い、 本 tool は 実世界 evidence (計測・探索・アナログ・FX) 側 のみ効く。
- 命名 discipline: 「統計機械」 と 呼ぶと 集計とグラフ描画に堕落する chat-Claude 警告 尊重、 本 STEP は
d8_verdict_from_multi_trial= 「多試行 → D-FUMT₈ 8 値 verdict」 目的の 直接 semantic、rei-stats-*系 siren-family 名は 意図的回避 (feedback_super_naming_siren_family_pattern)。
7. 次手 candidate (別 STEP defer)
- (a) MCP wrapper 統合 —
rei-mcp-server.tsにd8_verdict_from_multi_trialtool 定義追加 + case handler + banner tool count update (現状 39 tool 宣言 vs banner 38 の off-by-one drift も 同時訂正 candidate、 STEP 1349 memory 記載 pattern 再発、 finding #32 候補)。 他タブ活動域のため defer、 collision confirm 後 別 commit - (b) discovery-worker v0.2 統合 — hunter_alpha / hunter_beta の batch output を 本 primitive に流す adapter (別 repo 側実装、 rei-aios 側は 本 primitive 提供のみ)
- (c) Welch-t 統合 — STEP 1353 Statistics × NEITHER Education v0.2 の Welch-t + Student t CDF 実装を 本 module に extract、
{value, noiseFloor}mode 対応 - (d) Bonferroni method 追加 —
method: 'bonferroni' | 'benjamini-hochberg'selector、 保守的 alternatives - (e) pre-registration hook —
rei-preregister(STEP 1359) で 先に決めた fdrQ / alpha を 本 tool が 参照する workflow (「後付けで threshold 動かす」 陥落先を 構造的排除)
8. 関連
- STEP 1350 (2026-08-20) — d8_verdict_from_measurement Phase A、 単一測定 SNR<3→NEITHER、 本 STEP の 直接前身
- STEP 1349 (2026-08-20) — d8_apply / d8_table、 D-FUMT₈ operator connectors、
source: 'static-truth-table'pattern 継承 (本 STEP はsource: 'multi-trial-fdr-verdict-mapping') - STEP 1353 (2026-08-20) — Statistics × NEITHER Education v0.1 (現 v0.2)、 Welch-t 実装源、 教材 domain (本 STEP は tool domain、 相補)
- STEP 1359 (2026-08-21) — rei-preregister v0.1 spike、 「事前に決めた threshold」 seal / verify、 本 STEP の fdrQ / alpha を 引数注入する caller 候補
- discovery-worker v0.1 spec (2026-08-22) — 隔離型 探索装置、 §6 で STEP 1350 NEITHER 経路転用明記、 本 STEP は 多試行 集約層 追加
feedback_one_reproduction_over_ten_unverified— 順序原則、 定数化禁止 discipline 継承feedback_super_naming_siren_family_pattern— 「統計機械」 命名罠 回避feedback_world_uniqueness_claim_controllable— BH 1995 既知の 尊重、 novelty 主張ゼロfeedback_chat_claude_hallucination_warning— chat-Claude Pattern 1-6 clean 判定 (診断 診断的中、 部分重複 flag は 私側 追加、 命名 warning 継承)feedback_all_research_site_reflection_default(2026-08-06) — 本 site page = protocol 継続適用