充足可能性判定を利用した モデル検査

44
1 充充充充充充充充充充充充 充充充充充 充充充充 ( 充充充充 )

Upload: kimama

Post on 13-Feb-2016

49 views

Category:

Documents


0 download

DESCRIPTION

充足可能性判定を利用した モデル検査. 土屋達弘 ( 大阪大学 ). モデル検査とは. 形式的検証手法 2007 Turing Award (Clarke, Emerson, Sifakis)  入力 : 設計 + 特性 ( 仕様 ) 出力 : Yes or No 方法 : 状態探索. モデル検査器. 状態機械. 設計. Yes. No ( +反例 ). 特性 ( 仕様 ). 簡単な歴史. 1980 頃 最初の研究成果 1990 年代 Partial Order Reduction -> SPIN - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 充足可能性判定を利用した モデル検査

1

充足可能性判定を利用したモデル検査

土屋達弘 ( 大阪大学 )

Page 2: 充足可能性判定を利用した モデル検査

2

モデル検査とは 形式的検証手法

2007 Turing Award (Clarke, Emerson, Sifakis)  入力 : 設計 + 特性 ( 仕様 ) 出力 : Yes or No 方法 : 状態探索

特性 ( 仕様 )

状態機械

モデル検査器

Yes

No( +反例 )

設計

Page 3: 充足可能性判定を利用した モデル検査

簡単な歴史

1980 頃 最初の研究成果

1990 年代 Partial Order Reduction -> SPIN BDD (2 分決定グラフ ) -> SMV

1998 ~ SAT ( 充足可能性判定 )

2000 年代中~後 SMT

3

今回のトピック

記号モデル検査状態機械を記号的に表現・操作

Page 4: 充足可能性判定を利用した モデル検査

日本語でよめる記号モデル検査関連の文献 米田,梶原,土屋,ディペンダブルシステム,

共立出版, 2005. 電子情報通信学会ハンドブック/知識ベース,

7群1編「ソフトウェア基礎」 土屋,菊野,” モデル検査入門 ,” 計測と制

御, 2009. 土屋,菊野,” 記号モデル検査の並行ソフトウ

ェアシステムへの応用 ,” 第 17 回回路とシステム軽井沢ワークショップ, 2004.

4

Page 5: 充足可能性判定を利用した モデル検査

逐次プログラムのモデル検査Part I

5

Page 6: 充足可能性判定を利用した モデル検査

充足可能性判定問題 ( 拡張版 )

入力:ブール値をもつ式 出力: Yes or No 条件: Yes の必要十分条件は,

式を True にする変数への値の割り当て( 付値 valuation) が存在すること

例. 入力 : x, y Z, (x + y > 2) ((x < 3) (y < 2)) 出力 : Yes ( 付値の例 x = 2, y = 1)

6

Page 7: 充足可能性判定を利用した モデル検査

逐次プログラムの検証例 (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 は整数変数とする )

Page 8: 充足可能性判定を利用した モデル検査

逐次プログラムの検証例 (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);

Page 9: 充足可能性判定を利用した モデル検査

充足可能性判定の実行

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

Page 10: 充足可能性判定を利用した モデル検査

式の表現力

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.

Page 11: 充足可能性判定を利用した モデル検査

SAT SolverSMT (Satisfiability Modulo Theories) Solver

SAT Solver: ブール式の充足可能性判定器 高速なヒューリステックアルゴリズム

MiniSAT, Zchaff, Grasp, … ブール式以外の変数の表現

複数のブール変数からなるビットベクトル SMT Solver: 「ブール式+背景理論」を扱う

Yices, CVC3, Z3,… 種々の背景理論 (組み合わせても良い)

配列, Linear Arithmetic ( 整数 and/or 実数の加減算大小比較 ) ,ビットベクトル

11

Page 12: 充足可能性判定を利用した モデル検査

逐次プログラムのモデル検査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 のみに変換

Page 13: 充足可能性判定を利用した モデル検査

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; }}

Page 14: 充足可能性判定を利用した モデル検査

2. ループの削除 ループを展開

最大何回展開するかはユーザが入力 例.繰り返しが最大 3回の場合

for, 後ろ向きの goto, 関数の再帰呼び出しも同様に変換

14

while (b) { S;}

if (b) { S; if (b) { S; if (b) { S; assert(!b); } }}

最後は assert(! 条件 ) に置き換える→ ループが指定回数以上実行される可能性を検出

Page 15: 充足可能性判定を利用した モデル検査

変数の 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) とほぼ同じ

Page 16: 充足可能性判定を利用した モデル検査

論理式への変換 SAT の場合 ー CNF (Conjunctive Normal

Form) のブール式に変換 変数 : 複数のブール変数によるベクトル 演算 (+,-,*,/ など) : 演算回路 任意のブール式は,充足可能性を保存して線形の大き

さの CNF に変換可能 SMT の場合

1プログラム変数を 1変数で表現可能 背景理論:ビットベクトル 背景理論: Linear Arithmetic (上限のない整数 ,実数変数 )

16

Page 17: 充足可能性判定を利用した モデル検査

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)

Page 18: 充足可能性判定を利用した モデル検査

適用事例

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

Page 19: 充足可能性判定を利用した モデル検査

並行システムのモデル検査Part II

19

Page 20: 充足可能性判定を利用した モデル検査

並行システム

モデル検査の主たる対象 通常は停止しない ( リアクティブシステム ) 検証の関心

アルゴリズム (cf. 実際のコード ) 制御に関する正しさ (cf. データ )

モデル検査問題の入力 設計:アルゴリズム 性質 ( 仕様 ) :時相論理 (ex. LTL, CTL)

有界モデル検査では LTL を扱う

20

Page 21: 充足可能性判定を利用した モデル検査

例.相互排除(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)

Page 22: 充足可能性判定を利用した モデル検査

システムの記号表現 ー 記号モデル検査の基礎 システムの数学的表現

形式的な仕様記述にも有用 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)

Page 23: 充足可能性判定を利用した モデル検査

記号表現:状態集合

状態集合 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

Page 24: 充足可能性判定を利用した モデル検査

記号表現:遷移関係

遷移関係 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

記号表現は設計から直接得られる  ( 状態探索は不要 )( むしろ設計そのもの )

実行できる命令がないなら「次状態 = 現状態」

Page 25: 充足可能性判定を利用した モデル検査

記号表現 : システム システム=状態機械

変数の集合 ( 状態空間を規定 ) 初期状態集合 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

Page 26: 充足可能性判定を利用した モデル検査

有界モデル検査 (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

Page 27: 充足可能性判定を利用した モデル検査

例. 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が成り立つ状態に到達

Page 28: 充足可能性判定を利用した モデル検査

手法の完全性

充足不能の場合 「 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”;}

Page 29: 充足可能性判定を利用した モデル検査

29

狭義の記号モデル検査 (BDD (2 分決定グラフ ) を利用 ) BDD: 論理関数を表現するデータ構造

高速な演算処理アルゴリズムが存在 ハードウェアの場合,システムの構造に規則性があることが多く,対応する BDD が非常に小さくなることが多い.

状態集合と遷移関係を表す BDD をつかって,状態の幅優先探索が可能 検証の完全性

代表的なモデル検査ツール SMV (@CMU) NuSMV

SAT を使う有界モデル検査も実装

x

y

0 1

01

10

f(x, y) = x ¬x y

Page 30: 充足可能性判定を利用した モデル検査

30

有界モデル検査の長短

長所 初期状態に近い状態を効率良く検証 充足する場合は速い ( Bug Hunting に効果的)

短所 時間がかかる 完全な検証のためには大きな k が必要

式が大きくなり時間がかかるため検証が困難 十分な k を知るのが困難

Page 31: 充足可能性判定を利用した モデル検査

有界から無界へPart III

31

Page 32: 充足可能性判定を利用した モデル検査

無界モデル検査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

Page 33: 充足可能性判定を利用した モデル検査

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

Page 34: 充足可能性判定を利用した モデル検査

適用事例:コンセンサスアルゴリズムのモデル検査 コンセンサスアルゴリズム

耐故障分散アルゴリズムの一種 Paxos (by Lamport)

Chubby lock system @ Google Practical Byzantine Fault Tolerance (by Castro &

Liskov) 全ノードを同じ決定にみちびく

各ノードが値を提案 全ノードが同じ提案値を選択・決定

34

Page 35: 充足可能性判定を利用した モデル検査

コンセンサスアルゴリズムの特徴 全プロセスが決定するまで無期限にラウンドをくりかえす メッセージの遅延,故障に耐えるため

検証では無限のラウンドを扱わなければならない 手法 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

Page 36: 充足可能性判定を利用した モデル検査

実験結果(The LastVoting/Paxos Algorithm)

36

手法 2. SMT (Yices) + K-Induction

SPINALV

実行時間 (sec)

手法1.通常のモデル検査(NuSMV) + 有限状態への抽象化

ノード数

Page 37: 充足可能性判定を利用した モデル検査

無界モデル検査Unbounded Model Checking 有界から無界へ

1. K-Induction2. Craig’s Interpolant

K. McMillan, “Interpolation and SAT-Based Model Checking,” CAV 2003.

37

Page 38: 充足可能性判定を利用した モデル検査

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

Page 39: 充足可能性判定を利用した モデル検査

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 ステップ後の状態

Page 40: 充足可能性判定を利用した モデル検査

  

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 ステップ後の状態

Page 41: 充足可能性判定を利用した モデル検査

適用例

電話通信サービスの競合問題検出 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

Page 42: 充足可能性判定を利用した モデル検査

実験結果

42

•競合あり = 充足する場合 : 提案手法は高速•充足しない場合 : Spin の方が速い

Page 43: 充足可能性判定を利用した モデル検査

まとめPart IV

43

Page 44: 充足可能性判定を利用した モデル検査

まとめ

SAT/SMT ソルバを利用したモデル検査 逐次プログラム 並行システム 非界モデル検査

44