Transcript SLIDE
充足可能性判定を利用した
モデル検査
土屋達弘 (大阪大学)
1
モデル検査とは
形式的検証手法
2007 Turing Award (Clarke, Emerson, Sifakis)
入力: 設計 + 特性 (仕様)
出力: Yes or No
方法: 状態探索
モデル検査器
設計
特性 (仕様)
状態機械
Yes
No
(+反例)
2
簡単な歴史
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)
(x, yは整数変数とする)
設計
特性
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度しか更新
されないように変数の
名前を付けかえる
7
逐次プログラムの検証例 (2/2)
assume(x0 + y0 > 2);
if (b0)
x1 = x0 +1;
else
x2 = x1 + 2;
y1 = y0 + x2;
x3 = y1 + 1;
assert(x3 < 2);
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)
充足可能 ⇔ 言明を満たさない実行が存
在
8
充足可能性判定の実行
SAT/SMT Solverを利用
例.Yices @ SRI
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)
一定の長さの実行を検査
有界(Bounded)モデル検査
% 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
9
式の表現力
ブール式
Separation Formula
整数か実数(一方のみ),(x – y > c)の論理結合
ブール式 + 背景理論
計算量 NP完全
SAT solvers
O. Strichman et al., “Deciding
Separation Formulas with SAT,”
CAV 2002.
SMT solvers
例.整数,実数,加減算大小比較
Presburger Arithmetic
整数,加減算,限量子(一階)
計算量O(22^n)
ツール例.Omega Library
ディオファントス方程式
決定不能
10
SAT Solver
SMT (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.
4.
ネストしたループの解消
ループの削除
変数のRenaming
論理式への変換
他の方法も大体同じ
1.
2.
3.
if, if-else のみに
変換
A. Armando et al., “Bounded model checking of software using SMT
solvers instead of SAT solvers,” J. Softw. Tools & Technol.
Transfer, 2009.
12
1. ネストしたループの解消
ループの展開(手順2)でのプログラムのBlow
upを避ける
仮想的なプログラムカウンタ (vpc) を導入
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;
}
}
13
2. ループの削除
ループを展開
最大何回展開するかはユーザが入力
例.繰り返しが最大3回の場合
while (b) {
S;
}
最後はassert(!条件)に置
き換える
→ ループが指定回数以上
実行される可能性を検出
if (b) {
S;
if (b) {
S;
if (b) {
S;
assert(!b);
}
}
}
for, 後ろ向きのgoto,関数の再帰呼び出しも同様に変換
14
変数のRenamingと論理式への変換
x = x + y;
if (x != 1) {
x = 2;
if (z) x++;
}
assert(x<=3);
静的単一
代入(SSA)
とほぼ同じ
x1 = x0 + y0;
if (x1 != 1) {
x2 = 2;
if (z0) x3 =x2 + 1;
}
assert(x3<=3);
x1 = x0 + y0
x2 = ite(x1 1, 2, x1)
x3 = ite(x1 1 z0, x2 + 1, x2)
(x3 3)
15
論理式への変換
SATの場合 ー CNF (Conjunctive Normal
Form)のブール式に変換
変数: 複数のブール変数によるベクトル
演算(+,-,*,/など): 演算回路
任意のブール式は,充足可能性を保存して線形の大
きさのCNFに変換可能
SMTの場合
1プログラム変数を1変数で表現可能
背景理論:ビットベクトル
背景理論:Linear Arithmetic (上限のない整数,実数変数)
16
SAT vs. SMT
SMTが優れる場合
背景理論によって式がコンパクトになる場合
例.配列を多用する場合
Primのアルゴリズム (最小スパニング木の計算, 4ノード)
時間(sec)
辺の数
A. Armando et al., “Bounded model checking of software using SMT
solvers instead of SAT solvers,” J. Softw. Tools & Technol. Transfer, 2009.
17
適用事例
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つの並行プロセス)
設計
状態:(pc0, pc1, t)
P0::
0: while True {
1: wait (t = 0)
2: t = 1;} // CS
0,0,1
0,0,0
0,1,0
P1::
0: while True {
1: wait (t = 1)
2: t = 0;} // CS
2,0,0
1,1,0
1,0,1
0,1,1
1,0,0
2,1,0
1,1,1
0,2,1
1,2,1
特性 (時相論理LTL, G:「常に」,F: 「いつか」)
•相互排除
G¬((pc0 = 2)(pc1 = 2))
Yes
G(pc0 = 1→Fpc0 = 2)
No!
•スタベーションフリー(P0側)
21
システムの記号表現 ー 記号モデル検査
の基礎
状態:(pc , pc , t)
0
システムの数学的表現
形式的な仕様記述にも有用
0,0,1
0,0,0
0,1,0
2,0,0
1,1,0
1,0,1
0,1,1
1,0,0
1,1,1
0,2,1
2,1,0
1,2,1
状態とは?
グラフ表現:頂点
TLA, TLA+ (by Lamport)
1
記号表現:変数への付値
例.pc0 = 0, pc1 = 2, t = 1
遷移とは?
グラフ表現:辺
記号表現:変数とそのコピーへの付値
例.pc0 = 0, pc1 = 2, t = 1, pc‘0 = 1, pc‘1 = 2, t‘ = 1
22
記号表現:状態集合
P0::
状態集合S
S = True sS が付値
0: while True {
1: wait (t = 0)
2: t = 1;} // CS
状態集合とその記号表現を同一視
P1::
0: while True {
1: wait (t = 1)
2: t = 0;} // CS
例.初期状態集合
I = {(pc0,pc1, t)=(0, 0, 0), (0, 0, 1)}
0,0,1
0,0,0
記号表現
I := pc0=0 pc1=0
0,1,0
2,0,0
1,1,0
2,1,0
1,0,1
0,1,1
1,0,0
1,1,1
0,2,1
1,2,1
23
記号表現:遷移関係
P1::
変数とそれらのコピー上の論理式
T = True (s, s’)T が付値
0: while True {
1: wait (t = 1)
2: t = 0;} // CS
例.P0の0行
G1 := pc0=0
T1 := G1 pc’0=1 pc’1=pc1 t’ =t
0: while True {
1: wait (t = 0)
2: t = 1;} // CS
遷移関係T (遷移の集合)
P0::
遷移関係全体
0,0,1
0,0,0
0,1,0
T :=T1T2… Tn
¬(G1 … Gn )pc’0=pc0pc’1=pc1t’=t
2,0,0
1,1,0
2,1,0
1,0,1
0,1,1
1,0,0
1,1,1
0,2,1
1,2,1
実行できる命令がないなら「次状態 = 現状態」
記号表現は設計から直接得られる (状態探索は不要)
(むしろ設計そのもの)
24
記号表現: システム
システム=状態機械
変数の集合 (状態空間を規定)
初期状態集合I
遷移関係T
3要素によりシステムの動作を完全に記述
記号表現のメリット ・・・ 記号モデル検査
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回の状態遷移を検査
例:到達可能性の判定
I(0) T(0,1) … T(k-1,k) (P(0)…P(k))
が充足可能 ⇒ Pが成り立つ状態に到達
k回の遷移をブール値の式で表現
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))
充足可能 ⇒ Pが成り立つ状態に到達
27
手法の完全性
充足不能の場合
「Pが成り立つ状態に到達しない」とは結論できない
kを増やすと充足するかもしれない
for (k = 0, 1, 2, 3, …) {
res <- Sat(I(0) T(0,1) … T(k-1,k) P(k));
if (res = True)
return “reachable”;
}
k は状態グラフの直径までしらべればよい,しかし,
直径を知るのに手間がかかる
kが大きくなると時間が増加する
28
狭義の記号モデル検査 (BDD (2分決定グ
ラフ)を利用)
BDD: 論理関数を表現するデータ構造
ハードウェアの場合,システムの構造に規則性があることが多く,対
応するBDDが非常に小さくなることが多い.
状態集合と遷移関係を表すBDDをつかって,
状態の幅優先探索が可能
高速な演算処理アルゴリズムが存在
f(x, y) = x ¬x y
検証の完全性
x
代表的なモデル検査ツール
0
SMV (@CMU)
NuSMV
1
y
SATを使う有界モデル検査も実装
1
0
0
29
1
有界モデル検査の長短
長所
初期状態に近い状態を効率良く検証
充足する場合は速い (Bug Huntingに効果的)
短所
時間がかかる
完全な検証のためには大きなkが必要
式が大きくなり時間がかかるため検証が困難
十分なkを知るのが困難
30
Part III
有界から無界へ
31
無界モデル検査
Unbounded Model Checking
有界から無界へ
検査する範囲を状態空間全体に拡張
✔1. K-Induction
2.
L. de Moura et al., “Bounded Model Checking and
Induction: From Refutation to Verification,”
CAV 2003.
Craig’s Interpolant
32
K-Induction
目的: 性質Vが常に成立するか否かを判定
手法:以下の2条件を示す
初期状態からのk状態で性質Vが常になりたつ
1.
連続するk状態で性質Vが成り立っているなら,
k+1番目の状態でもVが成り立っている
2.
I(0) T(0,1) …T(k-2,k-1) (V(0) … V(k-1))
が充足不能
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)
P1
P2
P3
v1,0
u1:= 1
v1
Ack
e1:= v1
u1:= 0 v ,0
2
r1:= 1
v1
Ack
e2:= v2
u2:= 0 v3,0
r2:= 1
e3:= v3
u3:= 0
r3:= 1
v1
e2:= v1
u2:= 1
Ack
e3:= v1
u3:= 1
35
実験結果
(The LastVoting/Paxos Algorithm)
実行時間 (sec)
SPIN
ALV
手法1.
通常のモデル検査(NuSMV)
+ 有限状態への抽象化
手法2. SMT (Yices) + K-Induction
ノード数
36
無界モデル検査
Unbounded Model Checking
1.
✔2.
有界から無界へ
K-Induction
Craig’s Interpolant
K. McMillan, “Interpolation and SAT-Based Model
Checking,” CAV 2003.
37
Craig’s Interpolant
F Gが充足不能な場合,
FとGのInterpolant IP が存在
F ⇒ IP
IP G は充足不能
IPの変数は FとGに共通
1.
2.
3.
例
F := p q, G := : q r s, Ip := q
38
Interpolantによる状態探索 (Pへの可到性)
k = 0からスタート
I(0) T(0,1) … T(k-1,k) P(k)
1.
充足可能: 「Reachable」
充足不能: kステップ目の状態ではPは成り立たない
F:= I(0)T(0,1), G:=T(1,2) …T(k-1,k) P(k),
IP := FとGのInterpolant
IPはIから1ステップで行ける状態集合の
Overapproximation
2.
1.
2.
3.
F ⇒ IP
IP G は充足不能
IPの変数は FとGに共通
I
1ステップ後
の状態
39
Interpolantによる状態探索
R <- I IP
R(0) T(0,1) … T(k-1,k) P(k)
3.
充足可能: k <- k + 1. 手順1へ
充足不能: 手順4へ.
F:= R(0)T(0,1), G:=T(1,2) …T(k-1,k) P(k),
IP := FとGのInterpolant
R <- R IP
4.
Rが変化しない: 「到達しない」
Rが増加:手順3へ.
R
Rから
1ステップ後
の状態
40
適用例
電話通信サービスの競合問題検出
提案手法
電話通信サービス向きの記号表現
Interpolant (ツールFOCI)
従来法1
T. Matsuo et al., “Feature Interaction Verification Using Unbounded
Model Checking with Interpolation,” IEICE Trans. Info & Syst, 2009.
Interpolant (ツールFOCI) + 通常の記号表現
従来法2
Spin (状態グラフを扱うモデル検査ツール)
41
実験結果
•競合あり = 充足する場合: 提案手法は高速
•充足しない場合: Spinの方が速い
42
Part IV
まとめ
43
まとめ
SAT/SMTソルバを利用したモデル検査
逐次プログラム
並行システム
非界モデル検査
44