スピンを使用してプロパティに対して複数の(またはすべての)違反トレースを取得することは可能ですか?スピンで複数の(またはすべての)違反トレースを求める
例として、私は以下のPromelaモデルモデルを作成:
byte mutex = 0;
active proctype A() {
A1: mutex==0; /* Is free? */
A2: mutex++; /* Get mutex */
A3: /* A's critical section */
A4: mutex--; /* Release mutex */
}
active proctype B() {
B1: mutex==0; /* Is free? */
B2: mutex++; /* Get mutex */
B3: /* B's critical section */
B4: mutex--; /* Release mutex */
}
ltl {[] (mutex < 2)}
をそれはナイーブミューテックスの実装を持っています。プロセスAとプロセスBがクリティカルセクションに一緒に到達しないことを期待して、それを確認するためのLTL式を書きました。
spin -run mutex_example.pml
を実行
は、プロパティが有効と
spin -p -t mutex_example.pml
を実行していないことを示している財産を侵害する一連の文を示しています。
Never claim moves to line 4 [(1)]
2: proc 1 (B:1) mutex_example.pml:11 (state 1) [((mutex==0))]
4: proc 0 (A:1) mutex_example.pml:4 (state 1) [((mutex==0))]
6: proc 1 (B:1) mutex_example.pml:12 (state 2) [mutex = (mutex+1)]
8: proc 0 (A:1) mutex_example.pml:5 (state 2) [mutex = (mutex+1)]
spin: _spin_nvr.tmp:3, Error: assertion violated
spin: text of failed assertion: assert(!(!((mutex<2))))
Never claim moves to line 3 [assert(!(!((mutex<2))))]
spin: trail ends after 9 steps
#processes: 2
mutex = 2
9: proc 1 (B:1) mutex_example.pml:14 (state 3)
9: proc 0 (A:1) mutex_example.pml:7 (state 3)
9: proc - (ltl_0:1) _spin_nvr.tmp:2 (state 6)
これは(ラベルで示されている)一連の文「B1」ことを示している - >「A1」 - >「B2」 - >「A2」のプロパティに違反するが、それにつながる他のインターリービングのオプションが(あります例えば 'A1'→ 'B1'→ 'B2'→ 'A2')。
私に複数の(またはすべての)トレースを与えるようにスピンに質問することはできますか?
をもたらす可能性があります、両方のプロセス(AとB)は有限であるので、反例の数は有限でなければならない。 –
ここでのポイントは、いくつかの反例を体系的に見つけることです。私は、さまざまな検索パラメータを使用しても同じカウンターの例が何度も見つからないという保証はありません。:( –
@BraulioHortaあなたは正しいです、それに応じて私はそれを更新します。 –