作成日:2026-10-20。状態:限定した断片の最小実装・内部評価を完了。独立確認と評価の凍結は未実施です。設計34・手指定期待35 に従い、臨床状態を読まないR2の量リテラル計算を追加しました。34・35の未実装という記載は作成時点の記録として保持し、現在の状態は本書に記録します。
1. 実装範囲と契約
| 実体 | 内容 |
|---|---|
| quantity.py | 有理数・点・有限非空区間の検証、正の倍率による換算、可能な大小関係の集合、未知・比較不能・資源停止 |
| native仕様 | 5量種・7単位の架空の閉じた表、出力領域の形、エラー名、課金と整数上限 |
| host.py | 新schemaを専用経路へ登録。旧基底の5ファイルは変更しない |
| R2宣言 | 共通4+R2の5+QT-1〜8の17義務、24防護例の参照 |
| 実行例 | 手指定のQ24/N12/B4を79 JSON・609必須パスと補助テストへ展開 |
| 参照計算 | native表・関数を使わない整数対演算と区間内の証人点の比較 |
| 検査 | API/CLI、参照計算、予算、型、出自・原情報、非干渉、意味変異の14テスト |
入力は明示した有理数に限り、結果は既約形、原入力は未約分も含めて保持します。区間の比較は代表値に置き換えず、別参照なら区間から独立に選べる二つの値の関係集合、同一参照なら一つの値の自己比較として扱います。これは確率論上の独立性の仮定ではありません。
検査順は、構造・参照・入力次元の矛盾を予算前に検証した後、各行で未知能力、未知量種・単位、次元不一致、量種不一致、計算の順です。未知の単位をもつ自己比較も停止します。未参照の未知リテラルは保存しますが、別の量を読む行を停止させません。
完成した計算だけが converted_domain または relation_set と、仕様hash・量参照・種類・単位・倍率・出自を含む calculation_evidence を持ちます。比較不能・未知・未完了の行では、これらと certain_relation はnullです。計算できても clinical_confirmation: not_evaluated、uncertainty_propagated: false、converted_to_base: false、clinical_assertions_added: [] を維持し、認定を返しません。
R2の枠内に収まり、新しい契約クラスは追加しませんでした。ただしR2-3は基底の状態を全く読まないため空虚に満たすという限定があります。これを、確認済みの臨床測定から安全に計算できたという証拠にはしません。単位・量種はprofileと仕様hashの内部名で、共有述語として登録していません。QT-1〜8は量固有の個別義務であり、一般的な義務の自動生成ではありません。
2. 手指定期待と意味計算
| 系列 | 分母 | 内容 |
|---|---|---|
| Q | 24条件・24 JSON・318必須パス | 厳密換算、負数、未約分、区間境界、別参照/同一参照、無次元、種類/次元、未知、AI由来 |
| N | 12条件のうち11条件・43 JSON・97必須パス | 入力不正、静的上限、未対応、消費側仕様。N12は下記の回帰・順序・変異で確認 |
| B | 4条件・12 JSON・194必須パス | 予算0、換算8、比較12、同一参照11、二換算14、途中停止 |
| 区間比較の有限列挙 | 3,660行 | 端点{-1,0,1}の15非空区間×4倍率から60領域。別参照3,600組+同一参照60組 |
| 厳密換算 | 357行と入力範囲内の往復 | 各適合単位対、15区間・負の分数・63bit境界。4単位・2単位・1単位の群で17×(16+4+1) |
| seed付き区間 | 500要求・1,000行 | seed 20261020、有理端点・開閉・正の倍率。比較と換算の二行を照合 |
| 選定した意味変異 | 9件 | 換算方向、浮動小数点化、代表値化、境界、同一参照、量種の無視、未知の自己比較、臨床昇格、課金不足 |
参照計算との照合は合計 5,017行で、往復の追加照合はこの件数へ加えていません。比較の参照計算は全端点と隣接端点間の二つの三等分点を証人に選び、整数の交差積で順序を求めます。一つの中点だけでは同じ開区間の大小を見落とすため、二点を使います。実装の端点の存在条件式は呼びません。共有するのは設計された意味と標準整数演算であり、独立の確認者による正解ではありません。
期待は文書35と設計式から手指定し、runtimeの結果で更新していません。N06の小数・NaN/Infinityは正規JSONのfixtureへ入れず、生JSONとAPIのテストに分けます。D01/D02の丸め・字句精度は机上の射影反例として残し、実装済みの射影に数えません。9変異は元ファイルを書き換えず別の関数束として実行し、対応する手指定期待の不一致で検出します。浮動小数点化の防護には 2**53 + 1 を使います。検出範囲は選定した変異だけです。
不正な予算欄を0へ置き換えると入力そのものが修復されるため、その拒否を修復後にも要求していた既存テストの前提を修正しました。元の不正予算の拒否はfixtureとAPI/CLIで照合し、共通の掃引では有効な予算へ置換した要求を評価します。これは予算に応じて入力不正が変わる例外の追加ではなく、従来の例外1件は維持しています。
予算は 1+数量件数+6×換算件数+9×比較件数。点・同一参照・未知・比較不能でも同じ行料金を先払いし、支払い完了前に計算値を作りません。数量専用の予算掃引は 79要求・652評価、違反0。共有検査器にも四つの新しい値欄を追加し、それぞれの早期漏出を入れた変異を検出します。
63bit入力と固定表の7bit以下の倍率から、正規化70bit、変換77bit、比較交差積140bit以下という設計上限を検査します。256bitの中間上限はこの固定断片では通常到達しません。防護分岐の単体検査と資源停止の注入は行いますが、自然入力でその上限に達したとは扱いません。
3. 回帰と統合評価
| 検査 | Python 3.14.4 | Python 3.11.17 |
|---|---|---|
| 開発系列 | 231件通過 | 231件通過 |
| 追加系列 | 52件通過 | 52件通過 |
| 追加監査 | 8件通過 | 8件通過 |
| P2系列(既存208+量14) | 222件の各検査を通過(下記) | 全222件通過 |
| 数量API/CLIの手指定期待 | 79例・609必須パス一致 | 79例・609必須パス一致 |
| 統合評価 | 不一致なし・通過 | 不一致なし・通過 |
ログは data/research/p2-f/py314/・py311/ に保存しました(Git管理外)。初回のP2全体検査で、前述の不正予算のテスト前提を検出し修正しています。修正後に両版で全222件を再実行し、3.11は全件通過しました。3.14は検査中にREADMEを整形したため生成器のバイト再現検査だけが不一致となり、その1件を編集停止後に再実行して通過しました。3.14の最終結果は全体の221件通過と生成器1件の再実行を合わせたもので、失敗ログも保持します。runtimeと手指定期待はこの修正で変更していません。
版比較つき統合評価は data/research/p2-d/p2-f-py314/・p2-f-py311/ で両版通過しました(この段階のmanifestは c5e1b03b08fcb60a4cee769526b889c6c7aab66bb1538dcde66c2ba3ef878fbd)。その後の変更は共通予算の検査前提と説明・文書で、runtimeは同一です。再固定後に監査8件とP2全体検査を行い、版比較を省いた統合評価を data/research/p2-d/p2-f-py314-final/・p2-f-py311-final/ で両版通過させています。最終hashは§4に記録します。
| 統合評価の対象 | P2-f追加後 |
|---|---|
| 登録・義務・防護例 | 14宣言・144義務・282防護例の参照 |
| 証拠の強さ | checked_native_template 112、finite_check 24、hand_derivation 8 |
| 防護例のない義務 | 既存の3件(R1-3/R3-3/COMP-3)。量の17義務には全て防護例あり |
| 振り分け・依存の独立 | 78組中65組。時間・概念分割と量を意味上接続した保証ではない |
| 例の系列 | P2 35/128、分割34/224、分割併用38/221、時間61/462、量79/609(JSON/必須パス) |
| 共通予算 | 343要求・4,077評価、違反0。既知の予算依存拒否の例外は従来の1件 |
| 旧基底 | P1全20条件・80 JSON・417必須パス、別枠P0の37 JSON・221必須パス |
旧P2-dの分母は P2_D_EXPECTED、P2-eは P2_E_EXPECTED として保持し、歴史資料の数値を書き換えません。
4. 旧版と固定した実体
設計コミット d6a714d をクリーンな一時worktreeへ出し、追加前の統合評価を通過させました。旧共通264要求+旧防護例35件と、時間系列の予算0〜完成+1の359要求、計 658出力は、追加後と certifier だけを除いて一致しています。他のhashや意味の欄は除去していません。保存先は data/research/p2-f/baseline-integrated.json・old-requests.json・old-results.json・old-behavior-comparison.json。従来の22,052出力の挙動digestは変更していません。
新しい仕様・宣言・例・検査・参照計算・生成器と契約34/35を明示的に固定対象へ加え、427→516ファイルとしました。旧fixtureと旧基底5ファイルは変更していません。
- native仕様hash:
84af2e771d1868471d0a8441021fde2a7253b1fc17f8ff9b807461e3df7f1f43 - manifest hash:
791cbf9cf92734950ffe2d9a7985fb53b02789d05712fd113ecab9c5cac7919e - 束hash:
b2265c126bd087fd2c55e4a72fe25172bb9fa897d3056bc0e0e5b63c802d65bd - 追加前manifest:
96ae56c57ec5c85ef8122a5daac1712aa10b4dd5668a88491cab504dc18a1a79 - 追加前の束:
b84dfbcb5159c9fe9d90eb2253e3973d1b6f2dc27e8828d7560f9c61c1034588
これは作成者snapshotで、独立確認済みの評価用正解の凍結ではありません。independent_review / evaluation_frozen はfalseです。コミット前の実行の git_dirty はtrueで、コミット後には同じhash・新しい例・旧基底の不変を読み取りのみで再確認します。
5. 再現と次の判断
PYTHONPATH=src python3 -B -m med_dsl --fixture examples/p2-quantity/q07.json
python3 -B -m unittest discover -s tests/p2 -p test_quantity.py -v
python3 -B scripts/research/check-extensions.py --json
python3 -B scripts/research/evaluate-p2.py --output data/research/p2-d/p2-f-reproduce
次は、数量と臨床主張の接続契約の意味設計を優先します。今回のR2は値の型を扱えますが、その値が誰の何を・どの検体/方法/時点で測ったか、どの確認で利用可能かを扱いません。数量参照を訂正しても過去の計算が新版の値に黙って置き換わらない同一性と、AI候補・未確認情報を臨床判断へ昇格させない採用条件を、まず反例と手指定期待で定めます。
表示の丸め・外部単位構文・実体系への射影は、その接続と分けて扱います。時間や概念分割の個別試験の成功から、接続後の保存を自動的に導きません。R4の実資料評価、共有単位登録表、一般の測定不確かさ、臨床ライブラリ・標準化、未来全体への対応の証明は引き続き未完了です。