付録E:参考文献とWebリソース

本付録は、本文で扱った形式的手法・ツールについて、一次情報(公式サイト/公式リポジトリ/公式ドキュメント/公式リリース)へ到達するための索引である。 2026-07 時点で、名称変更・主流ツールの更新(例:Coq→Rocq、CVC4→cvc5、Alloy 6 系、TLA+ の Apalache / Quint 等)を反映している。

実行保証の読み方

本付録への掲載は、リポジトリでの実行保証を意味しない。実行状態の正本は tools/tool-manifest.json と付録Bの lane inventoryである。 Alloy、TLC、Apalache、Dafny は pr-quick、SPIN、NuSMV、CBMC、Quint、PRISM、Tamarin、SymbiYosys、cvc5 / Carcara、RTLola は nightly、Kani は明示的な optional/manual で検証する。それ以外の掲載ツールは documentation-only であり、本書は固定バージョン、実行環境、実行結果を保証しない。

数値の出典ポリシー(本書共通)

  • 報告値(実測/事例):一次・準一次情報(論文/公式ブログ/公式レポート等)への出典URLを必須とする。
  • 例示:例示であることを明記し、読者が「一般に成立する値」と誤認しない表現にする。
  • 不確実な推定:推定値は避け、必要なら「不確実である」旨と前提条件(スコープ、計測条件)を併記する。

1) 仕様記述(Alloy / TLA+ / Z / CSP)

Alloy(Alloy 6.x)

TLA+(TLC)

Quint(TLA+ 意味論に基づく型付き仕様言語)

Z(Z記法)

CSP

  • 用途:並行プロセスの通信・同期・デッドロック等の性質を扱う
  • 推奨読者:第6章(CSP)
  • 一次情報(ツール例):

2) 模型検査(TLC / Apalache / SPIN / NuSMV / PRISM / SymbiYosys)

Apalache(TLA+ の追加検査:SMT ベース)

SPIN(Promela)

NuSMV / nuXmv

  • 用途:NuSMV は古典的な記号的模型検査器、nuXmv はその後継・拡張系である。結果を引用するときは、ツール名に加えて、使用したエンジン、fairness constraints、timeout、unknown、抽象化を記録する。
  • 推奨読者:第8章(模型検査の俯瞰)
  • 一次情報:

PRISM(確率的・定量的模型検査)

SymbiYosys(open-source RTL formal verification)

Tamarin Prover(active adversary下のsymbolic protocol verification)

Runtime verification(RTLola / MonPoly / RV-Monitor)

2026-07-16に公式repository、配布ページ、documentationを再確認した比較です。 同じruntime verificationでも、stream specification、metric temporal logic、Java instrumentationでは導入境界が異なります。

候補 主な適用形態 公式配布・保守の観測事実 本書での判断
RTLola typed input/output streamとtriggerをonlineまたはoffline eventへ適用 rtlola-cli 0.1.2のcrates.io package、offline CSV、JSON出力、2025年のupstream更新を確認 採用。immutable package digest、埋め込みcommitとCargo.lock、固定Rust、構造化verdictを一つのnightly契約にできる
MonPoly timestamp付きlogをmetric first-order temporal logicへ照合 SourceForgeの最新配布として1.1.10(2020-11-25)を確認 今回は不採用。offline log監視への適合性は高いが、本書のJSON verdict、provenance、現行CI保守契約を追加で設計する必要がある
RV-Monitor specificationからJava monitorを生成し、applicationへinstrumentationする 公式GitHubにreleaseがなく、確認できる最新commitは2020-12-18、MIT license 今回は不採用。Java code generation / instrumentationは、固定CSVを再生する最小教材よりbuild・結合範囲が広い

RTLolaを選んだ理由は機能数の一般比較ではなく、このrepositoryの固定offline traceと構造化artifact契約に最も小さく接続できたためです。 MonPolyやRV-Monitorが劣っているという結論ではなく、対象property、言語、instrumentation方式、運用platformが変われば選択も変わります。

3) 定理証明(Rocq / Lean / Isabelle / Agda)

Rocq(旧称:Coq)

Lean(Lean 4)

論理の健全性・完全性と意味論

Isabelle

Agda

  • 用途:依存型に基づく定理証明・プログラム記述
  • 推奨読者:第9章(型理論の補助線として)
  • 一次情報:

4) プログラム検証(Dafny / Frama-C / CBMC / VeriFast / SPARK / Rust検証ツール)

Dafny

  • 用途:仕様(契約)と検証を統合し、SMT と組み合わせて自動検証を行う
  • 推奨読者:第10章(プログラム検証)、第12章(自動化)
  • 一次情報:

Frama-C

  • 用途:C言語向けの静的解析/検証(アノテーション、プラグイン)
  • 推奨読者:第10章(プログラム検証)
  • 一次情報:

CBMC

VeriFast

SPARK(Ada)

  • 用途:高信頼Ada開発向けの契約/静的解析/証明(安全クリティカル)
  • 推奨読者:第11章(導入戦略)、第12章(ツール統合)
  • 一次情報:

Kani Rust Verifier

Verus

Creusot

  • 用途:RustコードをWhy3系の検証条件へ接続し、panic、overflow、未定義動作、仕様適合性を演繹検証する
  • 推奨読者:第10章(プログラム検証)、第12章(証明義務管理)
  • 一次情報:

Prusti

Aeneas

5) SMT 標準とソルバー(SMT-LIB / Z3 / cvc5)

SMT-LIB

  • 用途:SMT ソルバーへ論理式、理論、ベンチマーク、検査対象を渡す標準形式
  • 推奨読者:第10章(プログラム検証)、第12章(ツールと自動化)
  • 注意:SMT-LIB v3 は予備提案であり、現行の SMT-LIB 2.7 や各ツールの実務運用を直ちに置き換えるものではない
  • 一次情報:

Z3

cvc5(CVC系列の後継。旧:CVC4)

SMT 証明証跡の独立再検査(Alethe / LFSC / DRAT / LRAT)

  • 実行境界(本書の pinned contract):
    • cvc5 1.3.4 release tag は cvc5-1.3.4、release commit は f3b21c4483d3b88dc63cb7cd3e5eb092eee5e341、対象 asset は cvc5-Linux-x86_64-static.zip、SHA-256 は dcdbfada0ce493ee98259c0816e0daafc561c223aadb3af298c2968e73ea39c6
    • Carcara 1.1.0 自体の release は参照用だが、cvc5 1.3.4 の contrib/get-carcara-checker が固定している互換 commit は 394edbb15ba95c47893f1d821fddde7e016af178
    • 上記 commit の source archive SHA-256 は 28562432ca7413a662d25f03e328cab4b7b9bf649b2ca69268a255a44a5ddee6
    • Carcara の build 境界は固定した Rust/Cargo 1.87.0
  • cvc5 1.3.4 の Alethe 文書は、equality with uninterpreted functions、linear arithmetic、bit-vectors、parts of strings を、quantifier の有無を含めて現在の対象として挙げる。これは「普遍互換」を意味せず、solver / checker / logic fragment の組合せごとに確認が必要
  • cvc5 1.3.4 の release note は、Alethe について「AUFNIRA に対する CPC fragment の full translation 改善」を述べており、逆に言えば full coverage を一般化してよい根拠にはならない
  • cvc5 の LFSC 文書は、supported theories 全体に basic support を述べる一方、未対応の internal proof rule は trust step として出力され得る。strict checker 連携では trust step を成功扱いにしない
  • DRAT / LRAT は propositional CNF proof ecosystem であり、CNF 化後の unsat 証明を扱う。元の SMT 問題、自然言語仕様、エンコーダ、未モデル化仮定の正しさを直接証明するものではない
  • 一次情報:

6) 分散システム理論(CAP / FLP と仮定変更)

7) 産業事例(一次・準一次情報)

パリ地下鉄14号線(B-method)

Amazon s2n(暗号実装の検証)

産業界における TLA+ 活用

Cedar / AWS(認可ポリシー検証)

Amazon Bedrock Guardrails Automated Reasoning checks

スマートコントラクト検証(Ethereum / Move / Certora)

8) AI×形式手法(LLM 支援:位置づけと注意点)

LLM は、仕様/証明/反例解釈の「草案生成」や「探索支援」に有用である一方、最終保証の根拠にはならない。 本書では、LLM 出力を「未信頼入力」として扱い、必ず機械検証(模型検査/型チェック/SMT 等)で閉じる運用を推奨する。