YONAPO RESEARCH
研究記録
MedDSL(仮称)

RESEARCH / RECORD

P2-h:型付き表示の射影・最小実装と内部評価

原文 docs/research/42-p2-h-results.md

16 KB

GitHubで見る

版 be280c0

この文書の目次 6項目

作成日:2026-10-20。状態:限定した断片を最小実装し、両Python版の全体回帰・版比較つき統合評価を通過。独立確認・評価用正解の凍結は未実施です。設計40・手指定期待41 のR4射影を追加しました。両文書の未実装という記載は設計時点の記録として保持し、現在の状態は本書に記録します。

1. 実装した範囲

実体 内容
display.py 計画の静的検証、子料金の算定・予約、直接丸め、セル上の問い、別添えと認定範囲、最終確定
native仕様 方針・型・依存版・上限・保存範囲を固定した最初の断片
host.py 新schemaの専用経路を追加。旧schemaの経路は保持
R4宣言 共通4+R4の3+DP-1〜12の19義務、35防護例の参照
実行例 P36/N12/B4を145 JSON・2128必須パスと専用テストへ展開
別計算 近隣整数への距離と、閾値で分割したセル内の証人点。測定の選択は既存の到着順参照計算を使用
検査 API/CLI・有限列挙・seed・衝突・型・保持・予算・上限・変異の15テスト

表示の対象は、P2-gのconvert結果が表す閉じた単一点です。整数商と剰余から0〜6桁へ直接最近接偶数丸めを行い、型・単位・仕様・方針・桁数・係数・textだけをartifactへ含めます。非単一点はunassessedとして止め、区間の代表値を作りません。末尾零を保持し、零の符号は統合します。

型付きartifactだけを射影πの対象とし、原値・記録ID・文脈・出自・hash・別添えを含む応答全体と分けます。根拠に正確な原値や原値との差を混ぜません。量種と単位はP2-fのprofileと仕様hash内の架空の局所IDです。同じtextでも、p・単位・種類が違えばartifactは異なります。

セルは丸め関数の実数上の逆像で、偶数係数なら両端閉、奇数なら両端開です。測定の不確かさ・真値・確率を意味しません。セル全体で一定のthresholdとdisplay_textだけをpreservedとし、exact_valueは初回テンプレートの範囲外にします。入力上限を使った個別の単射性まで判定する完全な分類ではありません。out_of_scopeだけから、受理できる原要求の衝突が必ず存在すると推論しません。

retention=source_bundleでは、予算欄を除いた原要求をrequest_planとして保持します。配列順・未約分表記・確認・依存版を変更しません。予算は実行資源として分け、完成後の意味結果を十分な予算の大小で変えません。原予算まで含む入力hashの完全再現には、呼出側で元の要求も保存する必要があります。

別添えを読むexact_value/thresholdの回答はsource_replayで、projection_answerへ昇格させません。別添えがあるだけではadditional_source_usedをtrueにせず、実際にその回答を使ったときだけtrueにします。表示の根拠と原情報の回答に使う追加情報を区別します。

rootの認定は、全表示と質問の処理・最終料金まで完了し、全質問が表示へ因子化する既知の十分条件を満たした場合の display_questions_only に限ります。原値一般・記録・文脈・履歴・医学的真実・不確かさを除外します。P2-gのnot_certifiedを上書きせず、子の認定と両originは完成行の根拠に残します。review_verificationはstructural_onlyです。人の確認者の認証や医学的妥当性の保証は実装していません。

表示が計算できても、clinical_confirmation=not_evaluated、uncertainty_propagated=false、converted_to_base=false、clinical_assertions_added=[]を維持します。新しい意味クラスは追加せず、量・測定・旧R4の実装と旧基底は変更していません。

2. 手指定期待と別計算

系列 分母 内容
P 36条件・76 JSON・1601必須パス 丸め、境界、大数、セル、因子化、別添え、型、衝突、出自、再現
N 12条件のうち11条件・52 JSON・120必須パス 型・参照・hash・依存・未対応・静的上限。N12は回帰・順序・変異で補う
B 4条件・17 JSON・407必須パス 子料金の先払い、行の原子性、最後の確定料金、完成行の保持
丸めの有限列挙 8020要求・32,080表示行 分子-200〜200、分母1〜20、p=0〜3。近隣整数への距離と偶奇を使う別計算と照合
閾値の有限列挙 164要求・492表示行・5740質問 係数-20〜20、p=0〜3。七つの閾値×五つのoperatorを、セル内の証人点による回答集合と照合
seed付きの値・単位 300要求・900表示行 seed 20261020、負数・分数・2**53超・四単位・p=0〜6、原値/表示/閾値と保持モード
履歴と料金 200要求・200表示行 seed 640216、分岐・確認遅延・保留・不明な方法・複数view/query。計画C、子予算、子の実費、親の合計を照合
選定した意味変異 10件 半整数、float化、開閉、artifactへの原値混入、原回答の流用、別添えによる認定、二重丸め、子予算リセット、最終料金省略、臨床昇格

別計算との照合は合計 33,672表示行です。5740はそのうち492行に含まれる質問数で、表示行へ重ねて加算しません。設計41の式だけの点検をruntimeの分母へ足していません。

実装は商・剰余とセルの端点条件を使い、別計算は整数候補への距離と、閾値・端点・各部分区間の中点から回答集合を作ります。nativeの丸め・判定関数を別計算では呼びません。測定の選択はP2-gの到着順参照計算、厳密換算はP2-fの整数対参照計算を使います。共有するのは設計した意味と標準整数演算であり、独立確認済みの正解ではありません。

手指定期待は文書41から展開し、実行出力で更新していません。生JSONの小数・NaN/Infinity、1 MiB・深さ64、nativeの実体不整合は専用テストで補います。保持と並べ替えでは、rootの入力hash、子のmeasurement_input_sha256、request_planの原順序だけを意味の不変比較から外し、各入力hash自体はその原入力から照合します。Hs・記録/数量の内容hash・artifact hash・子の数量計算根拠は除去しません。

衝突・追加情報・認定

P28〜P30では、121/100と124/100が同じ型付きartifact「1.2」へ写り、61/50以上かのsource_answerがfalse/trueとなることを確かめます。両projection_answerはnull/out_of_scopeのままで、別添えがあってもnot_certifiedです。canonical JSONの実際の符号化・復号でartifactが戻っても、この原回答の区別は戻りません。

これは手指定した受理可能な二入力の衝突の実証です。自動の反例探索器や、全ての失われる情報を列挙する一般判定器を実装したとは扱いません。P31では原値が同じでも記録・方法・originをartifactが符号化しない境界を、P33では同じtextでも型・単位・pの違いを消さない境界を検査します。

10変異は元ファイルを変更せず別の関数束で実行します。9件は対応する手指定期待の不一致で検出し、子予算を100000へリセットする1件は呼出引数を観測して検出します。正常時に16等の計画料金だけを一度渡す検査も別に行います。数学的な値だけで予算リセットを検出できたという主張ではありません。選定した変異を超える退行の網羅性は示していません。

3. 共有予算と資源停止

全計画の静的な検証を先に終え、開始1、子の全料金C、表示ごとの8+2×質問数、最後の確定1を順に先払いします。子Cは固定されたP2-gの全view/query・可視性・適格な訂正辺から数え、予算Cを渡して一度だけ実行します。子の実費との一致も確認します。未参照のconvertを除外したり、表示ごとに子予算をリセットしたりしません。

標準はC=16、一表示一質問で合計28です。予算26では表示は全てnull、27では行が完成していても最後の1不足でrootはresource_limit、認定なし、incompleteにcompletionを載せます。同じ子から二表示なら38、二slot・二convertの計画ではC=31で二表示合計53です。

未完成の行ではartifact・hash・セル・質問結果・両根拠はnullです。完成済みの前の行は保持します。子が途中まで計算して資源停止しても表示へ拾わず、rootをresource_limitにします。原要求の別添えは元の入力で、計算値の公開とは分けます。

共通検査器へ表示の六つの値欄と、空配列・空objectをnullへ読み替えない検査を追加しました。値・根拠・空コンテナ・falseの回答を含む配列の早期漏出と、最後の確定前の認定を注入して検出しています。既存の予算依存拒否の例外は1件を維持します。

共通予算は 623要求・9544掃引評価、違反0。全625要求のうちbudget欄自体がない旧・新の負例2件は、元のfixtureの拒否で検査します。P2-gまでの479要求・6070評価に、表示の144要求・3474評価を加えました。無制限でも停止する例の初回評価等は、従来どおり掃引評価数へ加えていません。

妥当な20記録・64view・64convertの計画C=125443を作り、親の上限100000では子を呼ばない実例を検査しました。一方、固定した数量表とpの上限では通常届かない256bit・64文字の上限は、防護分岐や下位資源停止の注入として検査しています。自然入力でそれらの全境界に到達したとは扱いません。

4. 回帰と統合評価

Python 3.14.4と3.11.17で、次の回帰と版比較つき統合評価を全て通過しました。ログと終了コードは data/research/p2-h/py314/・py311/、統合結果は data/research/p2-d/p2-h-py314/・p2-h-py311/(全てGit管理外)です。

系列 件数 Python 3.14.4 Python 3.11.17
開発 231 通過 通過
追加レビュー系列 52 通過 通過
保存監査 8 通過 通過
P2 251(既存236+表示15) 通過 通過
統合評価 P1/P0・拡張・全P2・予算・版比較 通過 通過

統合評価は両版ともpassed=true、mismatches=[]です。保存したP0 draft-1→draft-2の版記録もstatus=passedで、版比較の省略を通過とは扱っていません。生成器による全例・宣言のバイト一致、旧変異表の置換箇所と構文、新旧の停止漏出検査もP2系列内で通過しました。追加・更新したMarkdownのローカルリンクとfence、git diff --checkも確認しました。

統合評価の対象 P2-h追加後の分母
登録・義務・防護例 16宣言・182義務・348防護例の参照
証拠の強さ checked_native_template 132、finite_check 42、hand_derivation 8
防護例のない義務 既存の3件(R1-3/R3-3/COMP-3)。表示の19義務は全て防護例あり
振り分け・依存の独立 105組中89組。新しい時間・概念分割等との意味上の併用保証とは別
P2の例 P2 35/128、分割34/224、分割併用38/221、時間61/462、量79/609、測定137/1425、表示145/2128(JSON/必須パス)
共通予算 623要求・9544掃引評価、違反0、既存の例外1件
旧基底 P1全20条件・80 JSON・417必須パス、別枠P0の37 JSON・221必須パス

旧分母はP2_D_EXPECTED・P2_E_EXPECTED・P2_F_EXPECTEDに続き、P2_G_EXPECTEDとして保持しました。過去の実行件数を新しいものへ書き換えません。

P2追加前から固定した22,052出力の比較も両Python版で通過しました。挙動digestは d0a2233574ab350e65217ef6da8ed037fe34020e8ee79eee2506bd9ce4320236 のままです。次節の2280出力はP2-gを含む追加前後の別の比較で、この22,052出力と合算しません。

5. 追加前の基準と固定した実体

設計コミット 5da7c0f をクリーンな一時worktreeへ出し、追加前の統合評価を通過させました。P2-gの実装基準 3311edd から、5da7c0fでは設計資料だけを追加しています。旧共通480要求+防護例35件と測定の予算変種、計 2280出力は、追加後とcertifierだけを除いて一致しました。他のhash・意味の欄は除いていません。記録は data/research/p2-h/baseline-integrated.json・old-requests.json・old-results.json・old-behavior-comparison.json です。

新しい仕様・宣言・例・検査・別計算・生成器と契約40/41を固定対象へ加え、663→818ファイルとしました。旧fixture・旧基底5ファイル・quantity.py/quantity_spec.json・measurement.py/measurement_spec.json・旧projection.pyは変更していません。

  • 表示native仕様hash:15f57a8b8f5729862a8afe66d86e1dab2406e036a2b3854cbc25e783ee4f3e44
  • 測定の依存仕様hash:7c2f731f2e24423f552bef8fb61efd5bdb74fac326279c7d7800639bb301a454
  • 数量の依存仕様hash:84af2e771d1868471d0a8441021fde2a7253b1fc17f8ff9b807461e3df7f1f43
  • manifest hash:33b1bcf9ad540d0ce60e956831e9b33b8a81c844698cda6e17c99bcec80350b7
  • 束hash:7bf00222d5a6d39394c4922e85bfa2f8e1873c20e77ff9d87b7808619b70808f
  • 追加前manifest:ef7cf5fe4a3c304765f38b5576db61629d7f4f9696318322bcce205708883e4b
  • 追加前の束:23c9c49095316533213edb38fd6ff11310fb98b756e891cbe60c071c76e49bdb

作成者snapshotで、独立確認済みの評価用正解の凍結ではありません。independent_review / evaluation_frozenはfalseです。コミット前の実行のgit_dirtyはtrueで、コミット後の同じhash・新例・旧挙動・旧核の読み取り専用確認は data/research/p2-h/postcommit-check.json に記録します。

6. 再現と次の判断

PYTHONPATH=src python3 -B -m med_dsl --fixture examples/p2-display/p01.json
python3 -B -m unittest discover -s tests/p2 -p test_display.py -v
python3 -B scripts/research/check-extensions.py --json
python3 -B scripts/research/evaluate-p2.py --output data/research/p2-d/p2-h-reproduce

次は、時間と測定を含む能力間の併用契約の比較・意味設計を優先します。P2-eの期間を限定した訂正と、P2-gの瞬間の文脈・slot単位の全体訂正について、どの問い・履歴・解釈を残すかを反例から定めます。型が共存することや個別モジュールの通過から、併用後の保存を自動的に導きません。これまでに得た性質と個別の義務は原理の草案へ整理します。

区間を安全に示す表示、外部の小数字句・有効数字・実単位・医学的な閾値、認証・永続台帳、実体系や会計への接続、R4の実資料評価、臨床ライブラリ・標準化は未完了です。表示を整形できることを、将来の変化に耐える医療コード体系の完成とは扱いません。独立確認は 運用方針29 に従って別の英語リポジトリへ引き継ぐ対象として保持します。

P2-h

同じ区分の文書