プログラミングなどなど

プログラミングに関係しそうな内容を

SPIN:順次の実行と値

これまで読んだSPIN本のどこかに書かれているかもしれませんが完全にスルーしていた内容を紹介します。(SPINモデル検査入門の8クイーン問題で知りました。)

以下の見出しでわかってしまいますが、以下のモデルを実行した際に
Hello, world!は出力されるでしょうか。

timeoutになる例

seq-stop.pml
byte b = 0;

active proctype p()
{
  b;
  printf("Hello, world!\n");
}
timeoutになる
$ spin seq-stop.pml 
      timeout
#processes: 1
		b = 0
  0:	proc  0 (p:1) seq-stop.pml:5 (state 1)
1 process created

なんとtimeoutになり、Hello, world!は出力されません。

通過する例

bの初期値を変更すると今度はprintfまで進みます。

seq-pass.pml
byte b = 1;

active proctype p()
{
  b;
  printf("Hello, world!\n");
}
通過する
$ spin seq-pass.pml 
      Hello, world!
1 process created

知ってました?