YONAPO RESEARCH
研究記録
MedDSL(仮称)

RESEARCH / RECORD

P2-b の結果:パイロット「概念の分割」

原文 docs/research/24-p2-b-results.md

12 KB

GitHubで見る

版 be280c0

この文書の目次 6項目

実施日:2026-10-19。契約版:p0-draft-2。状態:作成者(AI-001)の単独・内部実施の結果。独立確認前。設計 23 に沿って、拡張契約で新しい意味能力を設計・実装し、受入条件 X04・X05・X14 を検査した記録です。述語・主体・文脈はすべて架空で、実在の疾患・分類の分割ではありません。P0/P1 の挙動と契約は変えていません。

1. 到達点

項目 結果
追加した意味能力 query_split:旧い概念 P が部分 Q1…Qk に分かれたとき、旧い記録に区別がない個体について、候補集合(七つの状態)と情報要求を返す。基底の状態へ変換しない
実装 split.py(253 行)、仕様 split_spec.json(生バイトの hash を固定)。最上位の登録は host.py に 1 行(と import)
契約の変更 新しいクラス R6「公理つき読み取りモジュール」(R2 の義務+R6-1〜R6-6)を extensions.py に追加。宣言は 11 件目 p2-concept-split(義務 15)
例 examples/p2-split/ 34 例。期待は設計の意味から手で指定(予算の境界の n だけ測定)
テスト tests/p2/test_concept_split.py 24、独立オラクル tests/p2/split_oracle.py。P2 系列は全体で 78
防護例のない義務 0 件(P2-a では 24 件から始まった。義務の設計と同時に防護例を付けた)
証拠の強さ 義務 15 のうち checked_native_template 12、finite_check 2(R6-3、R6-6)、hand_derivation 1(R6-2:一般のモデルへの拡張は手作業の導出)。拡張全体は最も弱い finite_check。防護例は 45 件
変異検査 分割の実装と登録の変異 35 件(うち等価 1):等価でない 34 件すべて検出。契約の検査(extensions.py)の変異は §4
既存の系列 開発テスト 231、レビュー系列 52、追加監査 8、P1 の 20 条件・80 JSON・417 必須パス、P0 221 必須パスは変化なし。固定済みの全例・改変入力・予算掃引の 22,052 件の出力は、基準(拡張の追加前)と完全に一致

2. 受入条件の結果

条件 結果 検査
X04 拡張を理解しない消費側の停止 達成 分割の能力を要求する主張(採用・訂正済み・保留)を含む文脈:基底の query は unassessed(missing_capabilities、blocking_assertion_refs に採用・訂正済み・保留の 3 件すべて)。同じ台帳を拡張が読むと、保留・訂正済みを除いて解釈する。第三の未知の能力は拡張でも blocked。無関係な文脈は影響を受けない
X05 回答型が基底の状態へ変換される経路がない 達成 行の base は、基底の query が同じ原子に返す状態と 3,232 行すべてで一致(分割の能力だけを除いた台帳で比較)。split.status の語彙(七つ)は基底の状態の語彙と互いに素。基底の状態の語は base の下にしか現れない。converted_to_base は常に偽。残りの一つ(single)の部分は、基底では undetermined のまま
X14 旧い問いは変わらず、新しい問いは候補集合と情報要求を返す 達成 K06 の例:旧い記録 P(a) だけの台帳で、基底の問いは P 支持・P1/P2 未決(旧回答の再現)。分割の問いは open(候補 P1・P2)と confirm_part。旧参照を消して P1 に書き換えた別の snapshot は、別の hash で asserted になる。拡張が黙って書き換えて確定することはない
X03 非干渉(拡張の追加) 達成 11 件目を不活性にしても、その外の結果は変わらず、中の結果は変わる(分割の例 34 を含む 165 要求)。拡張の追加で固定済みの全例の出力が変わらないことは、22,052 件の比較で確認
L7/X13 基底変更の波及 設計どおり 新しい拡張の追加が変更するのは split.py(1 拡張だけを再検証)と、共有の入口 host.py の登録 1 行。host.py の変更は pin の規則で 11 拡張すべての再検証と列挙される(共有の入口の変更は全体に及ぶ)

3. 検査の結果

検査 結果
規則と全数列挙(R6-3) 部分 2〜5 個、各原子が {なし, 肯定, 否定}:1,080 通りすべてで、規則(classify)と個体ごとのモデルの全数列挙(独立オラクル)が一致。七つの状態がすべて現れる
旧データ(R6-2) 部分の原子を含まない全状態で inconsistent にならない。台集合 3 個までの旧い全モデルが公理を満たす拡張を持つことを全数検査
乱数の差分 台帳 600(確認の有無・疑い・AI 候補・訂正・能力・複数の参照時点・文脈)、3,536 行:オラクルと一致(計算 3,232、blocked 304:未知の能力 274・衝突 30)
密な差分 乱数の分布が no_parent に偏った(3,232 行のうち 2,764、single は 2 行、narrowed は 7 行)ことに気付き、採用された記述を集中させた生成を追加した。2,500 台帳で、七つの状態がそれぞれ 25 件以上現れ、オラクルと一致
情報要求の充足可能性(R6-6) 要求した候補の部分が肯定されたら asserted になる(実現しない主張を求めない)ことを、乱数の台帳の全要求で確認
決定性・入力の保持・順序の不変性 200 台帳で、入力は変更されず、同じ入力から同じ結果。部分・参照時点・問い合わせの順序を変えても結果は同じ
予算の掃引 60 台帳、3,067 の予算:完了した行は無制限と同一、止まった行は値を持たない。打切りが 2,887 回
仕様の実体確認 仕様の実ファイルを hash で照合(差し替え・読み取り不能で停止)。consumer の profile・hash・操作

4. 変異検査

分割のゲートを壊した変異 35 件を、(a) 手で指定した例、(b) オラクルのテスト、(c) 拡張契約の検査(登録時に宣言した防護例を評価するため、挙動が変われば登録が拒否される)で、それぞれ検出できるか調べた。変異は作成者が選んだもの(判定の規則 10、拒否・停止のゲート 12、課金 3、状態の組み立て 6、登録 1、入力の変更・並べ替え 2、等価 1)。

結果 件数
検出(オラクルのテスト) 34 / 34
うち手で指定した例も失敗 32
うち拡張契約の検査も失敗 29
例では検出されず、性質のテストだけが検出 2(部分の並べ替えに対する不変性、入力を書き換えないこと)
検出されない 1(等価:除外の理由に adopted_negative が既に含まれるため、候補の計算で二重に除いても変わらない)

契約の検査(extensions.py)には、R6 の追加で変異 3 件(R6 の義務を他のクラスが宣言することの拒否、R2 の義務の継承、R6-6 の必須)を加え、全体で 45 件すべてを検出した。変異検査の途中で、1 件の「意図した例」の記入を誤った(open の導出に関わる変異を single の例に対応させた)が、検出の判定には影響せず、記入を直して再実行した。

5. 契約についての発見

P2-b の主な目的は、拡張の実装ではなく、契約が新しい意味能力の設計を導けるかの点検だった。

  1. R2(読み取り専用)の義務だけでは足りず、新しいクラスが要った。 分割は読み取り専用で独自の回答型を持つので R2 に見えるが、公理を加え、その下で結論を出す。R2 は、①追加する公理が閉じていて要求が変えられないか、②旧データを矛盾させないか(保存性)、③結論が公理の意味に対して健全で完全か、④公理から導いた結論を採用された主張として示さないか、⑤範囲外を黙って広げないか、⑥情報要求が実現可能で臨床の否定を含意しないか、を問わない。R6-1〜R6-6 として義務にした(設計 23 の §4)。これは、P2 の設計が予告した「収まらない場合は新しいクラスを定義する」の実演で、R6 が他の公理つきの能力に十分であることは主張しない。
  2. R2-2 の読み替えが要った。 「基底の語彙の述語へ導出しない」は、forecast では独自の述語だったから成り立った。分割は基底の語彙(P、Qj)について推論する。結論は原子ではなく候補集合の状態として返し、基底の閉包に入れない、と読み替えた。契約の文言が実現に対して曖昧だった。
  3. 義務の設計と防護例の設計を同時に行ったら、欠落が出なかった。 P2-a は後付けで 24 件の欠落が残った。今回は義務ごとに、拒否・変換しない・境界の例を設計時に対応づけ、15 義務すべてに防護例が付いた。ただし、これは「拒否できる義務だけを書いた」可能性もある(R6-2 は手作業の導出で、例は旧データの状態を示すだけ)。
  4. 能力の標識は、作成者の選択で、文脈全体に効く。 部分の主張に分割の能力を要求させると、基底だけの消費側は、その文脈全体を解釈しない(旧い P の主張がある同じ文脈も unassessed)。能力を要求しない文脈の結果は変わらない(L2)。旧回答の再現(X14)が成り立つのは、新旧の主張を別の文脈に置く場合で、同じ文脈に混ぜれば旧い問いも止まる。これは設計上の帰結で、利用者が選ぶ。
  5. 共有の入口の変更は全体に及ぶ。 新しい処理の登録は host.py の 1 行で、L1 の前提(追加は新しいモジュールと振り分けの一行)どおり。この 1 行が全拡張の再検証を列挙する(11 件)。実際には、既存の挙動が変わらないことを 22,052 件の比較と全系列で確認した。
  6. 独立オラクルを実装と別の方法で書けた。 実装は規則(除外・親の成立)、オラクルは k+1 個のモデルの列挙で、設計の意味から直接書いた。全数で一致したが、同じ作成者が書いたので、意味の解釈そのものの誤りは共通になり得る。

6. 限界と未解決

  • 独立確認は未実施。宣言、義務の導出、例の期待、公理そのものが作成者の主張で、解釈は覆り得る。
  • 範囲:一つの文脈・一つの個体の採用された原子、規則のない単項述語の分割。文脈をまたぐ推論、時間による持続、定義のある述語の分割、入れ子や重なる分割は含まない(23 の §7)。
  • single(残りの一つ)の自動的な確定はしない。確定するなら、新しい採用方針と人の確認を要求する別の拡張(橋渡し、R5)が要る。
  • 変異は作成者が選んだ 35 件で、検出できない退行が他にないことは示していない。
  • 乱数の生成が稀な状態に偏っていたことを、結果の分布を見て初めて気付いた。分布を要求する検査(各状態 25 件以上)で保護したが、他の生成器でも同じ偏りがあり得る。
  • 次は P2-c(併用)。分割を二つ併用する(記号を共有する、入れ子にする)ことは 19 の L4 の対象で、併用全体で再判定が要る。

P2-b

同じ区分の文書