MC Ch.2: Introduction to the first edition #
プログラム解析技術の俯瞰(ISA より):
自動? 健全? 完全? 対象 動的・静的 Testing Yes No Yes Program 動的 Assisted proving No Yes Yes/No Model 静的 Model checking of
finite-state modelYes Yes Yes Finite
model静的 Model checking at
program levelYes Yes No Program 静的 Conservative static
analysisYes Yes No Program 静的 Bug finding Yes No No Program 静的
Model checking (MC):
- 自動
- 人間の介入が必要な技術もある (→ Assisted proving)
- e.g. Coq など自動定理証明技術は、プログラムの意味論などを人間が入力として与える必要あり
- 人間の介入が必要な技術もある (→ Assisted proving)
- 回路の設計や通信プロトコルの検証に使われている
MC における課題と近年の発展:
- 課題: 状態爆発
- 数多くのコンポーネントが絡みあったりすると、考慮すべき状態の数は指数的に増える
- 近年の発展: 状態爆発を抑える技術は 10 年で飛躍的に進歩した
この章で何をみるか:
- MC とその他の形式的検証技術の比較
- 特に、SW/HW の設計に関する検証について
- MC アルゴリズム間の比較
- 状態爆発への対処の比較
The Need for Formal Methods #
SW/HW はミッションクリティカルな場面で使われている。例えば…:
- 航空管制
- ロケット制御
- 医療関連のシステム
- 通販
- …
SW/HW が原因による事故が度々起きている:
- 最も有名なのは「1996 年: アリアン 5 ロケットが打ち上げ後 40 秒で爆発」
- 爆破までの流れ:
- 64 bit の浮動小数が 16bit の signed int に変換
- 例外発生
- 2.の例外がキャッチされずコンピュータがクラッシュ
- バックアップコンピュータも同様にクラッシュ
- 誤った高度データが基板コンピュータ(?)に送られ、結果的に爆破
- 被害:
- ロケット+積荷:5 億ドル
- 10 年の開発費用:70 億ドル
- 参照 1:クラスターミッション
- 事故映像
- 爆破までの流れ:
SW/HW の正しさを証明する技術は近年ますます重要になってきている!:
- 我々はミッションクリティカルなシステムに囲まれている。
- 「おかしくなったら電源を落とせばいい」のような単純な話では無い。(例:飛行機)
- 技術は急速に発展している。
- → 正しさを証明する技術の重要性
Hardware and Software Verification #
Validation methods (順に見る):
- simulation
- testing
- =====
- deductive verification
- model checking
Simulation and Testing:
- いつ?
- デプロイ前に実験を行う
- 何に対して?
- simulation : モデルの上などで行われる
- e.g. 回路の設計に対して行われる
- testing : 実際のプロダクトで行われる
- e.g. 実際の回路に対して行われる
- simulation : モデルの上などで行われる
- どのように?
- 特定の入力に対する出力を観測する
- しかし…
- 全てのパターンを網羅するのはほぼ不可能!
- バグの見逃しが発生してしまう orz
- 人が死ぬぞ?
Deductive verification とは:
- 公理 (axioms) と証明規則を用いてシステムの正しさを証明する
- 欠点:
- 人の介入が必要
- 数学者, 記号論理学に精通した人,…
- 人の介入が必要
- 利点:
- 無限状態のシステムを扱える
- しかし、証明の発見に必要なリソースの上限は無い。
- バカ食いする可能性あり。
- しかし、証明の発見に必要なリソースの上限は無い。
- 無限状態のシステムを扱える
Model checking とは:
- 有限状態の並列システムを検査する
- 欠点:
- 有限状態しか扱えない
- 利点:
- 検査を自動で行える
- 検査は必ず終わる
- しかも、yes/no の答えを必ず出す
- 効率的なアルゴリズムが存在する
- 普通の PC でも動く
Model checking (cont.):
- 無限状態は扱えないが、以下の超大事なシステム群を扱える:
- HW controllers
- 通信プロトコル
- 場合によっては、無限システムも扱える
- MC 以外の手法の組み合わせ
- 入力を制限することで、システムを有限状態システムに落とせる
結論: Model Checking を使えるなら使え。必要な時のみ Deductive Verification を。
The Process of Model Checking #
以下では Model Checking を MC と書く。
①: Modeling
- Model checker が読める形に設計・プログラムを変換する(一種のコンパイル)
- Kripke structure (後述)
- 必要に応じて抽象化も行う
- → 時間・メモリ量を削減できる
②: Specification (仕様)
- システムに満たして欲しい性質を論理形式に変換する
- Temporal logic
- 仕様が、上記の性質をカバーしているか注意する必要あり
- 「システムが仕様を満たす」と言われても、
仕様が性質を正しく表現してなければ意味がない
- 「システムが仕様を満たす」と言われても、
③: Verification
- 基本的には全て自動
- ただし、結果の解釈は人力
- ④ のトレースの用途:
- システムの解析(見直し)
- ① の Modeling の修正
- ② の Specification の修正
Temporal Logic and Model Checking #
Temporal logic: 時相論理
時相論理:
- 時間を明示的に扱うことなく(システムの)イベントの順序を表現できる論理
- 並列システムには最適
- よく出る形:
- $\mathbf{G}f$ : $f$ が将来ずっと (globally) 成立する時、真になる。
- e.g. $\mathbf{G}(\lnot e_1 \lor \lnot e_2)$ : イベント $e_1$ と $e_2$ は同時には必ず起きない
- 時間に対する仮定は 2 通りある (後の章で出てくる):
- Linear structure
- Branching structure
時相論理の用途(の歴史):
- プログラムへの適用 (Burstall (1974), Kroger (1977), Pnueli (1977))
- 特に、並列システムへの適用 (Pnueli (1977))
- シーケンス回路への適用 (Bochmann (1982), Malachi et al. (1981))
- 時相論理を用いたモデル検査 (Clarke et al. (1981))
- 初めてモデル検査が自動化される。
- Branching-time temporal logic (CTL, 後の章で出てくる) での検査
- モデルのサイズ、仕様の長さに関して多項式時間のアルゴリズム
- 正当性 (fairness, 後の章で出てくる) も扱える
- e.g. 飢餓の不在の証明を行うには正当性を扱う必要あり
- 初めてモデル検査が自動化される。
- CTL の部分集合に対するモデル検査 (Queille et al. (1982)) (メモ:どういう部分集合なのか?)
論理式の長さ * 状態遷移グラフのサイズ
に対して線形なアルゴリズム (Clarke et al. (1986))- $10^4 \sim 10^5$ 程度の状態数を扱える($100$ 状態/秒)
- ネットワークプロトコル、シーケンス回路の検査で広く使われた。
時相論理の用途(の歴史)2:
- Linear Time Logic (LTL) に対するモデル検査:
- PSPACE-complete (Sistla et al. (1983, 1985))
- 計算量:
- 仕様の論理式のサイズに対しては指数オーダーだが
- 大域状態グラフのサイズに対しては線形 (Pnueli et al. (1985))
→ 短い仕様に関しては十分に検査可能
- CTL* (=CTL (branching-time) + LTL (linear-time)) に対するモデル検査:
- PSPACE-complete (Clarke et al. (1983))
- LTL に対するモデル検査と同様の計算量のアルゴリズムが示される (Emerson et al. (1985))
- 仕様を LTL に制限する意味はない
Symbolic Algorithms #
- モデル検査の実装において、遷移関係は隣接リストで表現されていた
- プロセス数:少 → 十分に扱える
- プロセス数:多 → 状態遷移グラフ:大、扱いきれない
- 記号表現を用いて状態遷移グラフを扱えば、より大きなシステムの検査が可能になるのでは?(McMillan (1987))
- OBDDs: Ordered Binary Decision Diagrams (Bryant (1986))
- 非常に小さい形式で論理式を表現できる (ref: canonical form)
- 効率の良いアルゴリズムも存在する
- 扱える状態数が桁違い
- 状態空間の規則 (regularity) を捉える。
- 状態を明示的に扱うアルゴリズムより何桁も多い状態数を扱える。
- e.g.:
- CTL のモデル検査において記号表現を用いた場合: $10^{20}$ 程度の状態数を扱える (Burch et al. (1990))
- OBDD ベースの技術: $10^{120}$ 程度の状態数を扱える (Burch et al. (1991, 1994))
Partial Order Reduction #
SW: Software
HW: Hardware
SW の検査では状態爆発が問題になる:
- 並列プログラムはしばしば非同期的な挙動を見せるため。
- 従って、SW での検査は HW ほどは行われていない。
SW の検査での状態爆発に対処する技術が発展している:
- その中でも最も成功しているのが、partial order reduction
- (Godefroid et al. (1993), Peled (1994), Valmari (1990))
- 大域状態 (global state) が同じになるような interleaving を 1 つにまとめる。
- この本では ample sets と呼ばれるモデル検査の手法を 12 章で扱う。
Partial Order Reduction による探索空間の削減
独立なイベント:
- 2 つのイベントは次の時独立
- 実行する順番を入れ替えても最終的な大域状態 (global state) が同じ
独立なイベント $e_1, e_2, e_3$ があった時、以下のようにモデル検査での探索空間を削減できる:
Other Approaches to the State Explosion Problem #
その他手法(列挙に留めておく):
- Compositional reasoning
- Abstraction
- Symmetry
- Induction
まとめとクイズ #
- Q1. モデル検査の流れを述べよ
- Q2. モデル検査における課題は?
- Q3. Q2 での課題を克服するアイデアを述べよ