YONAPO RESEARCH
研究記録
MedDSL(仮称)

RESEARCH / RECORD

P2-n:継承の欄の手指定期待

原文 docs/research/60-p2-n-cases.md

11 KB

GitHubで見る

版 be280c0

この文書の目次 5項目

作成日:2026-10-21。状態:作成者側の手指定。実装前に固定する。設計59 の予測 N1〜N9 と反例 X1〜X7 に、具体的な宣言・例の組・期待を与えます。期待は設計文書とこれまでの設計・例の記述から手で導いたもので、registry や宣言の出力から作りません。実装の結果と食い違った場合は、実装・期待・設計のどれが誤りかを調べて記録し、期待を結果に合わせて黙って更新しません。独立確認・評価用正解の凍結は未実施です。

1. 手で挙げた継承の一覧(実装前の予測 N2・N3)

挙げ方:既存の設計文書(23〜57)の「と同じ」「継承」「再び述べる」の記述(grep で拾い、読んで判断)から、実装を共有せず、断片で観測が一致するはずのものを挙げました。呼び出し(import)で等しさが構成される関係(例:P2-m が P2-i の行を端点に使う)は継承ではなく依存で、挙げません。宣言を強制した後の監査(59 の N2)で、この一覧との差を記録します。

証人の組は、入力の構造が断片について等しい既存の例どうしから選びました(出力を見て選んでいません。選ぶ前の根拠は、各例の入力と、例が持つ手指定の期待)。位置は結果の中の位置です。

# 継承する側 元 断片 義務 証人(元の例 ↔ 自分の例、位置)または欠落の理由
1 p2-temporal-measurement p2-temporal-assertion 期間の分類(bounded の半開区間、unknown、unspecified)と、確認済みの unknown/unspecified の記録が阻害する理由 TM-5 t13 ↔ c13-unknown、t14 ↔ c13-unspecified(いずれも results[0].reason_codes)
2 p2-temporal-measurement p2-measurement-binding 文脈(method・specimen)の unknown/unspecified、および property・量種・単位の未知による停止の理由名 TM-5 m16 ↔ c17-method-unknown、m17 ↔ c17-method-unspecified、m18 ↔ c17-specimen-unknown、m19 ↔ c17-specimen-unspecified、m32-property ↔ c19-property_ref、m32-kind ↔ c19-quantity_kind_ref、m32-unit ↔ c19-unit_ref(results[0].reason_codes)
3 p2-temporal-display p2-quantity-display 10進の最近接偶数丸め(係数・文字列)と、丸めセルによる閾値の判定 TD-5 丸め:p03 ↔ j02-5、p04 ↔ j02-27、p05 ↔ j02--5、p06 ↔ j02--27、p10-5 ↔ j06-5、p10-7 ↔ j06-7(results[0].artifact.text)。閾値:p24-ge-0 ↔ j24-13-0-ge、p24-lt-1 ↔ j24-13-1-lt(results[0].question_results[0].projection_answer)
4 p2-validity-refinement p2-temporal-assertion 適格な主張・訂正辺・半開区間による対象時点の判定(literal_state と採用集合)。精密化のない台帳で一致 RF-7 欠落:P2-e の例と台帳が構造的に等しい P2-k の例がない(n01 は P2-e の経路の対照で、P2-e の要求)。全数の差分は検査が担う(21,920行)
5 p2-longitudinal-comparison p2-measurement-binding matched_context:property・specimen・method の一致と、不一致の理由 different_* LC-10 m28 ↔ l24、m29 ↔ l22、m29-version ↔ l23、m30 ↔ l21、m30-version ↔ l20(results[0].reason_codes)
6 p2-temporal-display p2-temporal-measurement 全計画の料金 C(記録・確認・訂正辺・query の数からの式)を再び述べる TD-10 c01 の steps_used ↔ j01 の results[0].projection_evidence.temporal_measurement_reserved_steps(16)、c06-5 の steps_used ↔ j14-5 の同じ位置(21)
7 p2-longitudinal-comparison p2-temporal-measurement 全計画の料金 C を再び述べる LC-6 c25 の steps_used ↔ l01 の results[0].comparison_evidence.temporal_measurement_reserved_steps(27)、c30 の steps_used ↔ l04 の同じ位置(34)
8 p2-measurement-binding p2-temporal-assertion 記録・確認の可視性(recorded_at ≤ as_of)と、適格性(確定かつ可視の人の確認がある) MB-2 欠落:台帳の型が違い(測定の記録と主張)、構造的に等しい例の組がない。確信が低い候補(P2-g の設計は「P2-e の台帳は読みません」と書くが、規則は同形)

予測した数:項目 8、証人のある項目 6(証人は計 26:#1 が2、#2 が7、#3 が8、#5 が5、#6 が2、#7 が2)、欠落 2(#4・#8)。

2. 列挙・独立への影響の期待(N4・N5)

affected() の列挙(変更するファイル → 列挙される拡張)。継承の導入前の列挙は括弧内。

変更するファイル 導入後に列挙される拡張 導入前
src/med_dsl/measurement.py(P2-g) p2-measurement-binding、p2-quantity-display、p2-temporal-measurement(#2)、p2-longitudinal-comparison(#5)、p2-temporal-display(P2-i への依存と #3)の5件 MB・QD の2件
src/med_dsl/temporal.py(P2-e) p2-temporal-assertion、p2-temporal-measurement(#1)、p2-validity-refinement(#4)、p2-measurement-binding(#8)と、その依存・継承の先 p2-quantity-display、p2-temporal-display、p2-longitudinal-comparison の7件 TA の1件
src/med_dsl/display.py(P2-h) p2-quantity-display、p2-temporal-display(#3)の2件 QD の1件
src/med_dsl/temporal_measurement.py(P2-i) p2-temporal-measurement、p2-temporal-display、p2-longitudinal-comparison の3件(変化なし。依存で既に含まれる) 同じ
src/med_dsl/quantity.py(P2-f) p2-quantity-literal と、その依存先 5件の6件(変化なし) 同じ

independent_pairs:基底を除く19拡張の171組のうち、独立は 144(導入前は150)。減る6組は、依存・読み取りで結ばれていなかった (TM, TA)、(TM, MB)、(TD, QD)、(VR, TA)、(LC, MB)、(MB, TA)。(TD, TM)・(LC, TM) は既に依存で結ばれている。

3. 検査の期待(X1〜X5)

出発点は、同梱の宣言の一つ(p2-longitudinal-comparison)を読み込み、次のとおり書き換えた宣言。拒否の理由は、登録時の検査の順(書式 → 実体 → 防護例 → registry の規則)で最初のもの。

ID 書き換え 期待
X1-1 inherits を削る missing_field(inherits)
X1-2 schema_version を draft-1 にする unsupported_manifest_schema
X1-3 inherits を配列にしない/要素に未知の項目/必須項目の欠落/空の fragment・from invalid_inherits/invalid_inheritance
X2-1 from が自分の id self_inheritance
X2-2 from が登録されていない拡張 unresolved_inheritance
X2-3 同じ from と fragment の組が2つ duplicate_inheritance
X2-4 二つの拡張が互いを継承する どちらも解決できず拒否(先に登録されるものがない)
X3-1 obligation が宣言にない id inheritance_obligation_missing
X3-2 obligation の checks が空 inheritance_obligation_without_checks
X4-1 証人の値が一致しない例の組 inheritance_witness_mismatch
X4-2 証人の位置が結果にない inheritance_witness_unresolved
X4-3 from.example が元の拡張の例でない/to.example が自分の例でない witness_example_not_owned
X4-4 証人の形が不正(path が空、example が文字列でない) invalid_witness
X5-1 証人が空で witness_gap がない/空の理由 unexplained_witness_gap
X5-2 証人があるのに witness_gap がある witness_gap_with_witnesses
X5-3 空の inherits 登録される(継承なしの明示)

登録は全か無かで、拒否された宣言は登録の状態を変えない。

4. 実験の期待(N6〜N9)

E1 元の断片の変更(N6)。P2-g の measurement.py の matched_context の判定を次のように壊した木で、P2-g の登録、P2-m の登録、P2-m と P2-g の差分の検査(324対)の結果を記録する。壊し方は断片の中だけにする。

壊し方 期待
d1 different_method を出さない P2-g 自身の防護例が検出して拒否する(P2-m の段階で確認済み)。P2-m は unresolved_inheritance。差分の検査も失敗
d2 different_specimen を出さない P2-g が登録され(防護例が覆わない場合)、P2-m の証人(m29 ↔ l22)が拒否する
d3 different_property を出さない 同上(m28 ↔ l24)
d4 specimen の ref だけを比べ、version を見ない P2-g が登録され、証人(m29-version ↔ l23)が拒否する
d5 different_subject の判定を壊す(断片の外) 証人は拒否しない。差分の検査も一致のまま(対照)

予測:クラス「元の防護例に捕まらず、証人が捕まえる」に1件以上、クラス「どの証人にも捕まらず、差分の検査だけが捕まえる」に1件以上が入る。d1 はクラス「元が捕まえる」。

E2 疑いの探索(N8)。継承の疑いを、依存・読み取りの関係がない拡張の組のうち、実装モジュールが識別子らしい文字列定数(8文字以上、英小文字・数字・下線で、下線を含む)を3つ以上共有するものとして求める。核のモジュールが持つ定数と、拡張自身の id・profile の語は除く。宣言した継承の組に対する再現率(見つかる割合)と適合率(疑いのうち宣言した継承の割合)を記録する。予測:再現率は0.5以上、適合率は0.5未満。

E3 契約の版の更新の検証(N7・N9)。

検査 期待
旧い(draft-1)の20宣言を新しい registry に渡す 20件とも unsupported_manifest_schema で拒否
新しい宣言から schema_version と inherits を除いたもの 旧い宣言(直前のコミット 3c16f68 の木)の schema_version を除いたものと、20件とも同一
版の比較の道具(P2-l の記録の検証)を、修正前の道具で実行する 旧い木の宣言を作業ツリーの registry が拒否して失敗する(N7 の前段)
修正後(木ごとの registry) P2-l の記録の検証が再び通る

5. 前提と限界

  • 一覧と期待は、設計文書の記述と例の手指定の期待から手で導いた値で、独立確認を受けていません。一覧は網羅を主張しません。監査で予測外の継承が出ることを予測しています(N2)。
  • 証人は、断片の一致の有限の証拠です。継承の真偽(本当に再び述べたものか)は検査できず、偽りの宣言(継承がないのに宣言する、継承があるのに宣言しない)を排除しません(X7)。
  • 証人にできるのは、結果の中の位置の値が等しい場合だけです。差を伴う継承(精密化の追加など)は、断片を差の外に取れる範囲で扱います。

P2-n

同じ区分の文書