Transcript モデル検査(1) 概要
表現系工学特論
モデル検査(3)
手続き型言語に基づくモデリング
1.NuSMVによるモデリング
2.SPINによるモデリング
参考文献
4日で学ぶモデル検査 初級編,産業技術総合研究所システ
ム検証センター,NTS(2006)
モデル検査の概要(復習)
モデル
model
(状態遷移系)
モデル記述言語
•C言語風のもの
•プロセス代数
モデル検査器
model checker
性質
property
(安全性,活性)
性質の記述
•時相論理
検査結果
OK
反例
The result is
either OK or
a counterexample
1.NuSMVによるモデリング
NuSMVの概要
例題:スイッチシステム
NuSMVの概要(1/3)
SMV(Symbolic Model Verifier:カーネギーメロ
ン大学開発)の再実装
モデリング
代入文やcase式からなる簡単な言語によって,各
状態に現れる変数の変化を一元的に制御
電子回路のようなシステムの記述に適している
検証
線形時相論理(LTL)と計算木論理(CTL)で性質
を記述
NuSMVの概要(2/3) 全体の構造
MODULE
モジュール名
VAR
変数宣言部
ASSIGN
遷移記述部
LTLSPEC
検査式記述部
NuSMVの概要(3/3)代入文とcase式
代入文
<変数名>:=<式>
case式
case
<条件> : <式>;
<条件> : <式>;
...
1 : <式>;
esac;
上から順に<条件>を評価する.
最初に真(=1)となる<条件>に対応する<式>の
値を返す.
例題:スイッチシステム(1/10) 概要
変数a,bは0,1,2いずれかの値をとる.
スイッチはonまたはoffの2状態をとる.
a,bは連携しながら変化する.
a,bの値に応じて,スイッチがon/offする.
a
b
1
0
ON
OFF
スイッチシステム(2/10) 動作仕様
変数a,bは同期して値が変化する.
変数aは0→1→2→0と繰り返して変化する.
ただし,b=1のときは次の時点でもその値を保ち変化しな
い.初期状態は0とする.
変数bも0→1→2→0と繰り返して変化する.
ただし,a=bのときは次の時点でもその値を保ち変化しな
い.初期状態は0とする.
スイッチは,a=b=2なら次の時点でonとなり,a=b=1な
ら次の時点でoffとなる.それ以外の場合は次の時点でも
その値を保ち変化しない.初期状態はoff とする.
スイッチシステム(3/10) 検査項目
スイッチがoffならば,いずれonになる.
スイッチがonならば,いずれoffになる.
スイッチシステム(4/10)
紙の上でのモデル検査
状態=(aの値,bの値,スイッチの状態)
スイッチがoffならば,いずれonになる
(0,0,off)
成り立つ
(1,0,off)
bは a=bのときは
変化しない
スイッチがonならば,いずれoffになる
(2,1,off)
成り立たない
(2,2,off)
aは b=1のときは
変化しない
スイッチは a=b=2ならon
(0,2,on)
(1,0,on)
(2,2,on)
(2,1,on)
スイッチシステム(5/10) 変数宣言
---- SWITCH.smv
MODULE main
VAR
a
: { 0, 1, 2};
b
: { 0, 1, 2};
sw : { on, off };
スイッチシステム(6/10) 遷移記述
ASSIGN
init(a) := 0;
next(a) := case
b = 1: a;
1
: (a+1) mod 3;
esac;
スイッチシステム(7/10) 遷移記述(続)
init(b) := 0;
next(b) := case
a = b: b;
1
: (b+1) mod 3;
esac;
init(sw) := off;
next(sw) := case
a = 2 && b = 2: on;
a = 1 && b = 1: off;
1
: sw;
esac;
スイッチシステム(8/10) 線形時相論理
(Linear Temporal Logic)
詳しくは次回
線形時相論理 LTL
状態遷移系における任意の1本の計算経路を考える
...
時相論理式
Gp
Fp
読み方
Globally p
Always p
Finally p
Future p
Eventually p
解釈
pがいつでも成り立つ
pがいつか成り立つ
スイッチシステム(9/10) 検査式記述
スイッチがoffならば,いずれonになる
G(sw = off → F(sw = on))
成り立つ
off
off
on
off
on
成り立たない
off
off
on
on
off
LTLSPEC G(sw = off -> F(sw = on))
LTLSPEC G(sw = on -> F(sw = off))
スイッチシステム(10/10) モデル検査
$ NuSMV SWITCH.smv
-- specification G(sw = off -> F sw = on) is true
-- specification G(sw = on -> F sw = off) is false
-- as demonstrated by the following execution sequence
Trace Type: Counterexample
-> State 1.1 <- a = 0, b = 0, sw = off
-> State 1.2 <- a = 1
変化した変数
-> State 1.3 <- a = 2, b = 1
だけを表示
-> State 1.4 <b = 2
-> State 1.5 <- a = 0,
sw = on
-- Loop starts here
ループの入り口
-> State 1.6 <- a = 1, b = 0
-> State 1.7 <- a = 2, b = 1
-> State 1.8 <b = 2
-> State 1.9 <- a = 0
ループの入り口
-> State 1.10 <- a = 1, b = 0
の状態に戻っている
2.SPINによるモデリング
SPINの概要
Promelaの基本
例題:スイッチシステムの記述
SPINの概要
SPIN (Simple Promela Interpreter):ベル研究
所が開発
モデリング
C言語風のPromela (Process Meta-Language)で各
プロセスを記述
分散システムの検証に適している
検証
線形時相論理LTLで性質を記述
その他の機能も豊富
Promelaの基本(1/4) 全体の構造
mtype = ....
int ...
inline ...
proctype ...
メッセージ型の宣言
変数宣言
マクロの定義
プロセス型の定義
Promelaの基本(2/4) atomic文
atomic{
<文>;
<文>;
....
}
インタリーブされずに常に連続して実行してほしい文
(atomic action)は,atomicで囲む.
モデルの状態数削減に役立つ.
Promelaの基本(3/4) 選択文
if
::<ガード> -> <処理>
........
::<ガード> -> <処理>
fi
すべての<ガード>の実行可能性(trueなら実行可能)を評価する.
実行可能な<ガード>を1つ非決定的に選び,
それに続く<処理>を実行する.
実行可能な<ガード>がないときは,
いずれかの<ガード>が実行可能になるまでプロセスの実行が中断
(block)し,その後,実行可能になってから実行を再開する.
Promelaの基本(4/4) 反復文
do
::<ガード> -> <処理>
........
::<ガード> -> <処理>
od
if ... fi と同様の動作をする.
<ガード>に続く<処理>を実行した後,doに戻って同様
の動作を繰り返す.
ループから出るときには break を使う.
再掲
例題:スイッチシステム(1/6) 概要
変数a,bは0,1,2いずれかの値をとる.
スイッチはonまたはoffの2状態をとる.
a,bは連携しながら変化する.
a,bの値に応じて,スイッチがon/offする.
a
b
1
0
ON
OFF
スイッチシステム(2/6) 状態遷移モデル
1. 変数 a,b,swに初期値を代入する.
% は剰余(余り)を
2. 変数 a の次の値Naを決める.
b==1ならば,Na=a
b!=1ならば, Na=(a+1) % 3
3. 変数 b の次の値Nbを決める.
a==bならば,Nb=b
a!=bならば, Nb=(b+1) % 3
4. 変数 sw の次の値Nswを決める.
a==b==2ならば,Nsw=on
a==b==1ならば,Nsw=off
それ以外のとき, Nsw=sw
求める演算
スイッチシステム(3/6)
メッセージ型と変数の宣言
/* switch.pml */
mtype = {on, off};
int a, b, Na, Nb;
mtype sw, Nsw;
この例題では,メッセージをユ
ーザ定義シンボルとして利用
スイッチシステム(4/6) プロセスの定義
active proctype switch() {
a = 0; b = 0; sw = off;
do
:: true ->
if
::(b==1) -> Na = a
:: else -> Na = (a+1)%3
fi;
他のどのガードも実行可能でない
ときに,else が実行可能
スイッチシステム(5/6) プロセスの定義
if
::(a==b) -> Nb =
:: else -> Nb =
fi;
if
::(a==2 && b==2)
::(a==1 && b==1)
:: else
fi;
atomic{a = Na; b
od
}
b
(b+1)%3
-> Nsw = on
-> Nsw = off
-> Nsw = sw
= Nb; sw = Nsw }
スイッチシステム(6/6) モデル検査
SPINでは次のように入力する:
Gの代わりに □ (タイピングは[])
Fの代わりに ◇ (タイピングは<>)
スイッチがoffならば,いずれonになる
G(sw = off → F(sw = on))
#define p
sw==off
#define q
sw==on
[](p -> <>q)
演習問題
図のような電気回路がある.スイッチにはonとoffの状態がある.スイッチには
それぞれにタイマが付いている.(スイッチnにはタイマnが付いている.)
各タイマは各時点で1だけカウントアップし,最大値になったら次の時点で1に
戻る.タイマの最大値は,タイマ1が5,タイマ2が4,タイマ3が6,タイマ4が3で
ある.
タイマの初期値は,タイマ1が2,タイマ2が3,タイマ3が1,タイマ4が2である.
各スイッチは,対応するタイマが最大値になると,次の時点でonとなる.それ
以外のときはoffとなる.
このモデルをNuSMVまたはPromelaで記述せよ.また,「豆電球が消灯して
いれば,いずれ豆電球が点灯する」という性質をLTLで記述せよ.命題の論理
積と論理和には,C言語等と同様に,&&と||を使用できるので,それを利用す
ること.