付録C:記法対照表

本付録では、形式的手法で頻出する用語・記号の最小セットと、AI時代のDoDチェックリストをまとめます。

C.1 用語集(Glossary)

  • invariant(不変条件):常に成り立つべき性質。反例が出たら仕様/実装の破綻を示す。
  • safety(安全性):悪いことが起きない性質(例:二重引き落としが起きない)。
  • liveness(活性):良いことがいつか起きる性質(例:要求がいつか処理される)。
  • refinement(詳細化):抽象仕様から実装仕様へ段階的に具体化する手続き。
  • contract(契約):事前条件/事後条件を明文化した実行時/検証時のガード。
  • trace(トレース):状態遷移の列。反例はトレースとして提示される。
  • counterexample(反例):性質が破れる最小の実行例。設計修正の入口。

C.2 AI時代のDoDチェックリスト

AI支援開発では、出力の正当性を検証器で担保することが前提です。

  • 仕様差分がある場合、対応する形式仕様も更新されている
  • 検証ログに seed/深さ/スコープ/実行コマンドが含まれている
  • 反例が出た場合、修正履歴と再検証ログが残っている
  • 例外承認の理由・代替策・フォローアップ期限が明記されている

C.3 記法対照表(Z / Alloy / CSP / TLA+)

以下は「同じ概念」を各記法でどう表現するかの最小対応表です。章内の表記(第4章Alloy、第5章Z、第6章CSP、第7章TLA+)と整合する範囲で記載します。

コードブロックのラベル:

  • ツール準拠(そのまま動く):そのままツール/CLIへ貼り付けて実行できることを意図した記法(環境差により追加設定が必要な場合あり)。
  • 文脈依存スニペット:構文自体は実ツールに沿うが、前提となる宣言・モデル・ハーネス・対話コンテキストを別途必要とする断片。
  • 擬似記法:説明用に数学記法・省略表記・出力例等を含む記法(ツール入力としての厳密性を保証しない)。

注意:

  • ツール準拠(そのまま動く)のコードフェンス内には、ツール入力として有効な文字列のみを記載する(出力例・図示・自然言語説明は入れない)。
  • 変数宣言・MODULE main・検証ハーネス・対話コンテキストなど、周辺の必須要素を別の場所に置く場合は 文脈依存スニペット を使う。
  • 周辺の必須要素を本文や参照先で明示している断片は 文脈依存スニペット、参照先を明示していない断片や数学記法・省略・自然言語を含む断片は 擬似記法 として扱う。
  • 図示/出力例/擬似コードは 擬似記法 を使用する。

C.3.1 概念の対応(最小セット)

概念 Z記法(本書) Alloy(Alloy Analyzer 6想定) CSP(本書/ツール) TLA+(TLC想定)
集合(型) A : ℙ X A: set X 事象集合 {a, b} / 同期集合 X A ∈ SUBSET X
要素所属 x ∈ A x in A (事象)a ∈ X x ∈ A
関係 R : X ↔ Y R: X -> Y (通常は直接は書かない) R ⊆ X × Y
全関数 f : X → Y f: X -> one Y (通常は直接は書かない) f ∈ [X -> Y]
部分関数 f : X ⇸ Y f: X -> lone Y (通常は直接は書かない) (必要なら部分関数として表現)
状態 状態スキーマ 時刻(ステップ)を明示してモデル化 プロセス(状態は遷移に埋め込む) 変数 v と次状態 v'
初期状態 InitState pred Init[...] 初期プロセス P0 Init == ...
遷移/操作 ΔState pred Step[s, s'] 前置 a → P(ツールでは a -> P Next == ...
不変条件(安全性) スキーマ制約 fact / assert refinement / assertions(ツール依存) Invariant == ... / []P
活性/公平性 (拡張が必要) (トレース上で表現) (ツール依存) <>P, WF_vars(A), SF_vars(A)

注記:

  • Zの ↔/→/⇸/↦ は第5章の記号体系に合わせています。
  • CSPは本文では数学記法として →, □, ⊓ を用い、ツール(FDR/CSPM)では代表的に ->, [], |~| を用います。

C.3.2 Z記法:主要記号(読みの目安)

記号 意味 読み(例)
ℙ X 冪集合 power set of X
x ∈ A 要素所属 x is in A
R : X ↔ Y 関係 relation from X to Y
f : X → Y 全関数 (total) function from X to Y
f : X ⇸ Y 部分関数 partial function from X to Y
x ↦ y maplet(ペア) x maps to y
dom R, ran R 定義域/値域 domain/range

C.3.3 Alloy:主要記号(Alloy Analyzer 6)

記号 意味
sig / フィールド 集合と関係 sig User { files: set File }
多重度 one/lone/some/set 要素数制約 owner: one User
fact 常に成り立つ制約 fact { ... }
assert + check 性質検証(反例探索) check Inv for 5
run 充足例探索 run { ... } for 5
. / ~ / ^ 結合/転置/推移閉包 u.files, ~r, ^parent

C.3.4 CSP:主要記号(本文/ツール)

概念 本書表記(数学記法) ツール表記(CSPM/FDRの代表例)
前置(prefix) a → P a -> P
外部選択 P □ Q P [] Q
内部選択 P ⊓ Q P |~| Q
同期並行(同期集合X) P [| X |] Q P [| X |] Q
インタリーブ P ||| Q P ||| Q
隠蔽(hiding) P \ X P \\ X
リネーム P[[ a ← b ]] P[[ a <- b ]]

注記:ツール表記は代表例です。プロジェクトでは使用ツール(FDR版、CSP dialect)に合わせて確認してください。

C.3.5 TLA+:主要記号(TLC)

記号 意味
v' 次状態の値 x' = x + 1
[]P / <>P 常に / いつか []Inv, <>Goal
WF_vars(A) / SF_vars(A) 公平性仮定 WF_vars(Next)
.cfg TLC設定 初期状態/不変条件/探索制約

補足:

  • Alloyは有限範囲の反例探索が中心。状態遷移を扱う場合は、時間(ステップ)を明示してモデル化する
  • TLA+は状態遷移と時相論理が中心。実装詳細を詰める前に、高レベルで性質(不変/活性)を固定する
  • Zは状態/操作(スキーマ)で要件を厳密化し、実装へ詳細化する