充足可能性判定を利用した モデル検査
DESCRIPTION
充足可能性判定を利用した モデル検査. 土屋達弘 ( 大阪大学 ). モデル検査とは. 形式的検証手法 2007 Turing Award (Clarke, Emerson, Sifakis) 入力 : 設計 + 特性 ( 仕様 ) 出力 : Yes or No 方法 : 状態探索. モデル検査器. 状態機械. 設計. Yes. No ( +反例 ). 特性 ( 仕様 ). 簡単な歴史. 1980 頃 最初の研究成果 1990 年代 Partial Order Reduction -> SPIN - PowerPoint PPT PresentationTRANSCRIPT
1
充足可能性判定を利用したモデル検査
土屋達弘 ( 大阪大学 )
2
モデル検査とは 形式的検証手法
2007 Turing Award (Clarke, Emerson, Sifakis) 入力 : 設計 + 特性 ( 仕様 ) 出力 : Yes or No 方法 : 状態探索
特性 ( 仕様 )
状態機械
モデル検査器
Yes
No( +反例 )
設計
簡単な歴史
1980 頃 最初の研究成果
1990 年代 Partial Order Reduction -> SPIN BDD (2 分決定グラフ ) -> SMV
1998 ~ SAT ( 充足可能性判定 )
2000 年代中~後 SMT
3
今回のトピック
記号モデル検査状態機械を記号的に表現・操作
日本語でよめる記号モデル検査関連の文献 米田,梶原,土屋,ディペンダブルシステム,
共立出版, 2005. 電子情報通信学会ハンドブック/知識ベース,
7群1編「ソフトウェア基礎」 土屋,菊野,” モデル検査入門 ,” 計測と制
御, 2009. 土屋,菊野,” 記号モデル検査の並行ソフトウ
ェアシステムへの応用 ,” 第 17 回回路とシステム軽井沢ワークショップ, 2004.
4
逐次プログラムのモデル検査Part I
5
充足可能性判定問題 ( 拡張版 )
入力:ブール値をもつ式 出力: Yes or No 条件: Yes の必要十分条件は,
式を True にする変数への値の割り当て( 付値 valuation) が存在すること
例. 入力 : x, y Z, (x + y > 2) ((x < 3) (y < 2)) 出力 : Yes ( 付値の例 x = 2, y = 1)
6
逐次プログラムの検証例 (1/2)
7
assume(x + y > 2); if (b) x = x +1;else x = x + 2;y = y + x;x = y + 1;assert(x < 2);
assume(x0 + y0 > 2);if (b0) x1 = x0 +1;else x2 = x1 + 2;y1 = y0 + x2;x3 = y1 + 1;assert(x3 < 2);
1 変数は 1 度しか更新されないように変数の名前を付けかえる
設計
特性
(x, y は整数変数とする )
逐次プログラムの検証例 (2/2)
8
y0 + x0 > 2 b0 x1 = x0 +1 b0 x1 = x0 b0 x2 = x1 + 2 b0 x2 = x1 y1 = y0 + x2 x3 = y1 + 1 (x3 < 2)
充足可能 ⇔ 言明を満たさない実行が存在
assume(x0 + y0 > 2);if (b0) x1 = x0 +1;else x2 = x1 + 2;y1 = y0 + x2;x3 = y1 + 1;assert(x3 < 2);
充足可能性判定の実行
SAT/SMT Solver を利用 例. Yices @ SRI
一定の長さの実行を検査 有界 (Bounded) モデル検査
9
y0 + x0 > 2 b0 x1 = x0 +1 b0 x1 = x0 b0 x2 = x1 + 2 b0 x2 = x1 y1 = y0 + x2 x3 = y1 + 1 (x3 < 2)
% cat sample.txt(define b0::bool)(define x0::int)(define x1::int)(define x2::int)(define x3::int)(define y0::int)(define y1::int)(assert(and (> (+ y0 x0) 2) (or (and b0 (= x1 (+ x0 1))) (and (not b0) (= x1 x0)) ) (or (and (not b0) (= x2 (+ x1 2))) (and b0 (= x2 x1)) ) (= y1 (+ y0 x2)) (= x3 (+ y1 1)) (not (< x3 2))))(check)% yices –e sample.txt
式の表現力
10
ブール式
ブール式 + 背景理論
Separation Formula
Presburger Arithmetic
ディオファントス方程式
計算量 NP 完全SAT solvers
SMT solvers
決定不能
計算量 O(22^n)ツール例. Omega Library整数,加減算,限量子 ( 一階 )
整数か実数(一方のみ), (x – y > c) の論理結合
例.整数,実数,加減算大小比較
O. Strichman et al., “Deciding Separation Formulas with SAT,” CAV 2002.
SAT SolverSMT (Satisfiability Modulo Theories) Solver
SAT Solver: ブール式の充足可能性判定器 高速なヒューリステックアルゴリズム
MiniSAT, Zchaff, Grasp, … ブール式以外の変数の表現
複数のブール変数からなるビットベクトル SMT Solver: 「ブール式+背景理論」を扱う
Yices, CVC3, Z3,… 種々の背景理論 (組み合わせても良い)
配列, Linear Arithmetic ( 整数 and/or 実数の加減算大小比較 ) ,ビットベクトル
11
逐次プログラムのモデル検査CBMC での手順 CBMC: ANSI C Model Checker (SAT を利用 )
E. Clarke et al., “A tool for checking ANSI-C programs,” TACAS 2004.
1. ネストしたループの解消2. ループの削除3. 変数の Renaming4. 論理式への変換
他の方法も大体同じ A. Armando et al., “Bounded model checking of software using
SMT solvers instead of SAT solvers,” J. Softw. Tools & Technol. Transfer, 2009.
12
if, if-else のみに変換
1. ネストしたループの解消
ループの展開(手順2)でのプログラムのBlow up を避ける 仮想的なプログラムカウンタ (vpc) を導入
13
while (B1) { S1; while (B2) { S2; }}
while (vpc <= 2) { switch (vpc) { case 1: if (B1) { S1; vpc = 2; } else vpc = 3; break; case 2: if (B2) S2 else vpc=1; break; }}
2. ループの削除 ループを展開
最大何回展開するかはユーザが入力 例.繰り返しが最大 3回の場合
for, 後ろ向きの goto, 関数の再帰呼び出しも同様に変換
14
while (b) { S;}
if (b) { S; if (b) { S; if (b) { S; assert(!b); } }}
最後は assert(! 条件 ) に置き換える→ ループが指定回数以上実行される可能性を検出
変数の Renaming と論理式への変換
15
x = x + y;if (x != 1) { x = 2; if (z) x++;}assert(x<=3);
x1 = x0 + y0 x2 = ite(x1 1, 2, x1) x3 = ite(x1 1 z0, x2 + 1, x2) (x3 3)
x1 = x0 + y0;if (x1 != 1) { x2 = 2; if (z0) x3 =x2 + 1;}assert(x3<=3);
静的単一代入(SSA) とほぼ同じ
論理式への変換 SAT の場合 ー CNF (Conjunctive Normal
Form) のブール式に変換 変数 : 複数のブール変数によるベクトル 演算 (+,-,*,/ など) : 演算回路 任意のブール式は,充足可能性を保存して線形の大き
さの CNF に変換可能 SMT の場合
1プログラム変数を 1変数で表現可能 背景理論:ビットベクトル 背景理論: Linear Arithmetic (上限のない整数 ,実数変数 )
16
SAT vs. SMT SMT が優れる場合
背景理論によって式がコンパクトになる場合 例.配列を多用する場合
Prim のアルゴリズム ( 最小スパニング木の計算 , 4ノード )
17A. Armando et al., “Bounded model checking of software using SMT solvers instead of SAT solvers,” J. Softw. Tools & Technol. Transfer, 2009.
辺の数
時間 (sec)
適用事例
ANSI C の検証 CBMC @CMU
E. Clarke et al., “A tool for checking ANSI-C programs,” TACAS 2004.
PHP プログラムの脆弱性検出 @National Taiwan Univ.
Y.W. Huang et al., “Verifying web applications using bounded model checking,” DSN 2004.
18
並行システムのモデル検査Part II
19
並行システム
モデル検査の主たる対象 通常は停止しない ( リアクティブシステム ) 検証の関心
アルゴリズム (cf. 実際のコード ) 制御に関する正しさ (cf. データ )
モデル検査問題の入力 設計:アルゴリズム 性質 ( 仕様 ) :時相論理 (ex. LTL, CTL)
有界モデル検査では LTL を扱う
20
例.相互排除(2つの並行プロセス)
21
P0::0: while True {1: wait (t = 0)2: t = 1;} // CS
P1::0: while True {1: wait (t = 1)2: t = 0;} // CS
0,0,0
0,1,0
1,1,0 2,0,0
2,1,0
1,0,0 0,1,1
0,2,1 1,1,1
1,2,1
0,0,1
1,0,1
状態: (pc0, pc1, t)
Yes
No!
設計
特性 (時相論理 LTL, G :「常に」, F: 「いつか」 )•相互排除
G¬((pc0 = 2)(pc1 = 2))•スタベーションフリー (P0 側 )
G(pc0 = 1→Fpc0 = 2)
システムの記号表現 ー 記号モデル検査の基礎 システムの数学的表現
形式的な仕様記述にも有用 TLA, TLA+ (by Lamport)
状態とは? グラフ表現 :頂点 記号表現 : 変数への付値
例. pc0 = 0, pc1 = 2, t = 1 遷移とは?
グラフ表現 :辺 記号表現 : 変数とそのコピーへの付値 例. pc0 = 0, pc1 = 2, t = 1, pc‘0 = 1, pc‘1 = 2, t‘ = 1
22
0,0,0
0,1,0
1,1,0 2,0,0
2,1,0
1,0,0 0,1,1
0,2,1 1,1,1
1,2,1
0,0,1
1,0,1
状態: (pc0, pc1, t)
記号表現:状態集合
状態集合 S S = True sS が付値
状態集合とその記号表現を同一視
例.初期状態集合 I = {(pc0,pc1, t)=(0, 0, 0), (0, 0, 1)}
記号表現I := pc0=0 pc1=0
23
0,0,0
0,1,0
1,1,0 2,0,0
2,1,0
1,0,0 0,1,1
0,2,1 1,1,1
1,2,1
0,0,1
1,0,1
P0::0: while True {1: wait (t = 0)2: t = 1;} // CS
P1::0: while True {1: wait (t = 1)2: t = 0;} // CS
記号表現:遷移関係
遷移関係 T ( 遷移の集合 ) 変数とそれらのコピー上の論理式 T = True (s, s’)T が付値
例. P0 の 0行G1 := pc0=0T1 := G1 pc’0=1 pc’1=pc1 t’ =t
遷移関係全体T :=T1T2… Tn
¬(G1 … Gn )pc’0=pc0pc’1=pc1t’=t
24
0,0,0
0,1,0
1,1,0 2,0,0
2,1,0
1,0,0 0,1,1
0,2,1 1,1,1
1,2,1
0,0,1
1,0,1
P0::0: while True {1: wait (t = 0)2: t = 1;} // CS
P1::0: while True {1: wait (t = 1)2: t = 0;} // CS
記号表現は設計から直接得られる ( 状態探索は不要 )( むしろ設計そのもの )
実行できる命令がないなら「次状態 = 現状態」
記号表現 : システム システム=状態機械
変数の集合 ( 状態空間を規定 ) 初期状態集合 I 遷移関係 T3要素によりシステムの動作を完全に記述
記号表現のメリット ・・・ 記号モデル検査 BDD を用いたモデル検査 (1990 年ころ )
Burch et al., “Symbolic model checking: 1020 states and beyond,” LICS 1990.
SAT を用いたモデル検査 (1999 年ころ ) A. Biere et al., “Symbolic model checking without BDDs,” TACAS 1999.
25
有界モデル検査 (SAT を利用 )
初期状態から k 回の状態遷移を検査 k 回の遷移をブール値の式で表現
例:到達可能性の判定I(0) T(0,1) … T(k-1,k) (P(0)…P(k))が充足可能 ⇒ Pが成り立つ状態に到達 I(0): I の各変数 var を var0に置き換え T(i, i+1):T の各変数 var を variに , var’ を vari+1 に置き換え
検査する特性としては,任意の LTL 式を扱える
26
例. I := x = 1 T := (x 3 x’ = x + 1) (x > 3 x’ = x) I(0) T(0,1) … T(k-1,k) (P(0)…P(k))
= x0 =1 (x0 3 x1 = x0 + 1) (x0 >3 x1 = x0) (x1 3 x2 = x1 + 1) (x1 >3 x2 = x1) … (xk-1 3 xk = xk-1 + 1) (xk-1>3 xk = xk-1) (P(x0) … P(xk))
27
充足可能 ⇒ Pが成り立つ状態に到達
手法の完全性
充足不能の場合 「 Pが成り立つ状態に到達しない」とは結論できない
kを増やすと充足するかもしれない
k は状態グラフの直径までしらべればよい,しかし, 直径を知るのに手間がかかる kが大きくなると時間が増加する
28
for (k = 0, 1, 2, 3, …) { res <- Sat(I(0) T(0,1) … T(k-1,k) P(k)); if (res = True) return “reachable”;}
29
狭義の記号モデル検査 (BDD (2 分決定グラフ ) を利用 ) BDD: 論理関数を表現するデータ構造
高速な演算処理アルゴリズムが存在 ハードウェアの場合,システムの構造に規則性があることが多く,対応する BDD が非常に小さくなることが多い.
状態集合と遷移関係を表す BDD をつかって,状態の幅優先探索が可能 検証の完全性
代表的なモデル検査ツール SMV (@CMU) NuSMV
SAT を使う有界モデル検査も実装
x
y
0 1
01
10
f(x, y) = x ¬x y
30
有界モデル検査の長短
長所 初期状態に近い状態を効率良く検証 充足する場合は速い ( Bug Hunting に効果的)
短所 時間がかかる 完全な検証のためには大きな k が必要
式が大きくなり時間がかかるため検証が困難 十分な k を知るのが困難
有界から無界へPart III
31
無界モデル検査Unbounded Model Checking 有界から無界へ
検査する範囲を状態空間全体に拡張
1. K-Induction L. de Moura et al., “Bounded Model Checking
and Induction: From Refutation to Verification,” CAV 2003.
2. Craig’s Interpolant
32
✔
K-Induction 目的 : 性質V が常に成立するか否かを判定 手法 : 以下の 2条件を示す
1. 初期状態からの k状態で性質V が常になりたつ I(0) T(0,1) …T(k-2,k-1) (V(0) … V(k-1))
が充足不能 2. 連続する k状態で性質V が成り立っているなら,
k+1番目の状態でも V が成り立っている V(0) … V(k-1) T(0,1) … T(k-1,k) V(k)
が充足不能 1, 2 ⇒ V が常になりたつ
SAL モデル検査器でサポート
33
適用事例:コンセンサスアルゴリズムのモデル検査 コンセンサスアルゴリズム
耐故障分散アルゴリズムの一種 Paxos (by Lamport)
Chubby lock system @ Google Practical Byzantine Fault Tolerance (by Castro &
Liskov) 全ノードを同じ決定にみちびく
各ノードが値を提案 全ノードが同じ提案値を選択・決定
34
コンセンサスアルゴリズムの特徴 全プロセスが決定するまで無期限にラウンドをくりかえす メッセージの遅延,故障に耐えるため
検証では無限のラウンドを扱わなければならない 手法 1: 有限状態への抽象化 (SRDS 2007) 手法 2: K-Induction (DISC 2008)
35
P1
P2
P3
Ack
Ack
v1,0 v1
v1
v1
e3:= v1
v2,0
v3,0
u3:= 1
u1:= 1
e2:= v1u2:= 1
Ack
e3:= v3u3:= 0
e2:= v2u2:= 0
e1:= v1u1:= 0r1:= 1
r2:= 1
r3:= 1
実験結果(The LastVoting/Paxos Algorithm)
36
手法 2. SMT (Yices) + K-Induction
SPINALV
実行時間 (sec)
手法1.通常のモデル検査(NuSMV) + 有限状態への抽象化
ノード数
無界モデル検査Unbounded Model Checking 有界から無界へ
1. K-Induction2. Craig’s Interpolant
K. McMillan, “Interpolation and SAT-Based Model Checking,” CAV 2003.
37
✔
Craig’s Interpolant
F G が充足不能な場合,F と G の Interpolant IP が存在1. F ⇒ IP2. IP G は充足不能3. IP の変数は F と G に共通
例 F := p q, G := : q r s, Ip := q
38
Interpolant による状態探索 (P への可到性 )
k = 0 からスタート1. I(0) T(0,1) … T(k-1,k) P(k)
充足可能 : 「 Reachable 」 充足不能 : k ステップ目の状態では Pは成り立たない
2. F:= I(0)T(0,1), G:=T(1,2) …T(k-1,k) P(k), IP := F と G の Interpolant IP は Iから 1ステップで行ける状態集合のOverapproximation
1. F ⇒ IP2. IP G は充足不能3. IP の変数は F と G に共通
39
I1 ステップ後の状態
Interpolant による状態探索
R <- I IP3. R(0) T(0,1) … T(k-1,k) P(k)
充足可能 : k <- k + 1. 手順1へ 充足不能 : 手順4へ.
4. F:= R(0)T(0,1), G:=T(1,2) …T(k-1,k) P(k), IP := F と G の InterpolantR <- R IP
R が変化しない : 「到達しない」 R が増加:手順3へ.
40
RR から1 ステップ後の状態
適用例
電話通信サービスの競合問題検出 T. Matsuo et al., “Feature Interaction Verification Using Unbounded
Model Checking with Interpolation,” IEICE Trans. Info & Syst, 2009. 提案手法
電話通信サービス向きの記号表現 Interpolant ( ツール FOCI)
従来法 1 Interpolant ( ツール FOCI) + 通常の記号表現
従来法 2 Spin ( 状態グラフを扱うモデル検査ツール )
41
実験結果
42
•競合あり = 充足する場合 : 提案手法は高速•充足しない場合 : Spin の方が速い
まとめPart IV
43
まとめ
SAT/SMT ソルバを利用したモデル検査 逐次プログラム 並行システム 非界モデル検査
44