実施日:2026-10-18。状態:有限の役割付き事実への問い合わせ、JSON 入出力、参照検証を実装しました。問い合わせの前提として、確認・参照時点・明示的な訂正の選択も先行実装しています。独立レビュー、R4 の全体評価、臨床性能の実証は未完了です。
後続の P0-b で定義認定・推論を追加しました。本書の未実装・件数・ハッシュは P0-a 時点の記録です。
実装した範囲
| 部分 | 動作 |
|---|---|
| ライブラリ | med_dsl.evaluate(request) が入力を変更せず JSON 相当の結果を返す |
| CLI | request または --fixture 指定の草案例を読み、結果を JSON で返す。expected は処理関数へ渡さない |
| 参照 | request 内のパッケージ・依存版・SHA-256 を照合。同じ参照への異なる実体、未解決依存、述語の所有者衝突を拒否 |
| 結合 | 一つの文脈内の正の atom を役割順で照合。同名変数を共有し、binding と根拠を集合として返す |
| 時点・確認・訂正 | 参照時点までの主張と人の確認記録を使う。明示的な訂正関係で旧主張を現採用から外し、訂正の連鎖で古い主張を復活させない |
| 否定・衝突 | ground atom の明示的な否定を検索。同文脈の肯定・否定の衝突では確定回答を止め、双方の根拠を返す |
| 未知の意味 | 可視主張が必要とする未知能力があれば、その文脈を unassessed にする |
| 上限 | サイズ・件数・照合ステップ・binding 上限を確認。未完了一問の途中 binding を完全回答にしない |
参照の固定は、今回渡した request の依存閉包と出力の入力ハッシュの範囲です。別々の request に同じ名前で異なるパッケージを持ち込んだことを検出する永続的なレジストリは、まだありません。確認記録の本人性も認証していません。
今回は動かさない機能
check_extension と compare は unsupported_profile と operation_not_implemented を返します。query の依存閉包に definitions/inclusions があれば definition_reasoning_not_implemented として unassessed にします。未実装の定義を読み飛ばして、原入力の検索結果を完全な推論結果と称しません。
したがって S1/S2 の自動認定・定義による導出、射影前後の差分計算は未実装です。実 CPC/FHIR の移行、一般の量化・確率・古典論理の否定推論も対象外です。P0 全体の 22/22 合格とはしません。
事前草案との照合とテスト
期待結果の事前草案は b760c4c の P01/P07/P10 です。三例の JSON・manifest は変更していません。
| 草案例 | CLI の結果 | 草案の指定チェック |
|---|---|---|
| P07:二観察の結合 | ok。e1/s1/m1 の結果は陽性、s2/m1 の組は未決 | 6/6 の指定パスが一致 |
| P10:疑いと訂正後の否定 | ok。t1 では未決・疑いを保留、t2 では opposed・旧主張を訂正済みとして保持 | 9/9 の指定パスが一致 |
| P01:定義追加の認定 | unsupported_profile、終了コード 3 | 未実装として保留。合格件数に入れない |
Python 3.14.4 で 36 件の unittest が通過しました。Python 3.11 自体での実行は未確認です。テストは既存草案との照合に加え、以下を確認しています。
- 四項関係を直接読む参照計算と、全検体×方法の問い合わせ結果の一致。
- 全ての値を残して結合を外した射影では、元の観察の binding を取得できなくなること。compare 操作自体は未実装。
- 同名変数の結合、重複する支持の根拠、JSON 読み戻し、原入力不変、入力順序の変更に対する意味結果の一致。
- 未確認 AI 候補・将来の確認の保留、家族と本人の区別、訂正の連鎖、未確認の訂正による誤置換の防止。
- 明示的な否定と未記載の区別、衝突時の停止、未知修飾の保留、必須情報の要求。
- 依存ハッシュ・参照所有者・役割数・ID・日時・JSON の不正、ステップと binding 上限、CLI の終了コード。
36 は単体テストの件数で、P01〜P22 の受入ケースの合格数ではありません。派生入力はテストファイル内にあり、独立した正解・未見評価ではありません。時点を文字列比較する前提を確保するため、ASCII の UTC 日時書式も検査します。
再現コマンド
リポジトリのルートで実行します。外部パッケージのインストールは不要です。
PYTHONPATH=src python3 -m med_dsl --fixture examples/p0/linked-observations.json
PYTHONPATH=src python3 -m med_dsl --fixture examples/p0/assertion-revision.json
python3 -m unittest discover -s tests
CLI は 0=正常処理、2=入力不正、3=未対応プロファイル/操作、4=資源上限 です。正常処理でも個別の query が unassessed の場合があるため、status と incomplete を確認します。
実行結果 JSON、unittest の出力、実行したソースとテストの SHA-256 は Git 管理外の data/research/p0-a/ に記録しました。ソースの束のハッシュは、src/med_dsl/*.py と tests/*.py の相対パス→生バイト SHA-256 の対応を、キー順・空白なし JSON にして SHA-256 を計算します。実装コミットはこの文書とコードを含む履歴で特定できます。
| 記録 | SHA-256 |
|---|---|
| 草案 manifest の生バイト | a71e9334be397504b5ba40e10724221d82718d2ed528c54c77ec7e30ef7404f1 |
| 実行したソース・テストの束 | acfc8629539966c5d19ad8498edd13cfc0c9f4979b678c2f9a990ee8261b406b |
次の作業
P0-b で S1/S2 の認定と、同じ文脈内の単項包含・連言定義の導出を実装します。P01〜P05・P19・P20 を JSON 化し、P07/P10 の現在の意味結果を維持できることも確認します。その後に compare と P01〜P22 の全受入評価へ進み、R4 の独立確認・臨床実証は別に残します。