付録E:参考文献とWebリソース(一次情報への導線)

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

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

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

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

Alloy(Alloy 6.x)

TLA+(TLC)

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

Z(Z記法)

  • 用途:状態ベース仕様(集合/関係/写像)を厳密に記述し、レビューや検証の基盤にする
  • 推奨読者:第5章(Z記法)
  • 一次情報(実装・ツール):

CSP

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

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

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

SPIN(Promela)

  • 用途:並行システムの模型検査(Promela)と反例トレース
  • 推奨読者:第6章(並行性の落とし穴)、第8章(模型検査)
  • 一次情報:

NuSMV

  • 用途:状態遷移モデルに対する模型検査(CTL/LTL等)
  • 推奨読者:第8章(模型検査の俯瞰)
  • 一次情報:

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

  • 用途:C/C++の境界付き模型検査(バグ/安全性/アサーション)
  • 推奨読者:第8章(模型検査の考え方)、第10章(プログラム検証)
  • 一次情報:

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)

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

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

Amazon s2n(暗号実装の検証)

産業界における TLA+ 活用

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

Amazon Bedrock Guardrails Automated Reasoning checks

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

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

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