MaudeでCCS 拡張編 (2) Hennessy-Milner logic でチェックしてみる
http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/ccs-abort.maude ←今日のエントリで使っているMaudeのソースコード
ものぐさなので ちゃんと解説を書くのがめんどいのです…
問題
abort 演算子のチェックのために
eq context = ('AbtTest =def (('a : 'b . 0 abort 'fail_a . 0 + 'd . 'e . 0 | ~ 'd . 0) \ 'd)) & ('Check =def 'a . 'fail_a . 0) .
というプロセスを件の「MaudeでCCS」を使って定義した。 ここで 'AbtTest は
- 'a をやったら 'b をやる。 この場合 'd が選択されなかったので 'e.0 は消える
- 'd をやったら 'e をやる。 'a をやらなかったので abort 演算子が働いて 'fail_a をやる
という振る舞い…のはず。
これを Hennessy-Milner logic という様相論理の意味を使って確認する。
HML については Wikipedia とかを参照のこと
基本的なことをチェック
red in MODAL-LOGIC : ''AbtTest.Qid |= << ''fail_a.Act >> tt . red in MODAL-LOGIC : ''AbtTest.Qid |= << ''a.Act >> tt . red in MODAL-LOGIC : ''AbtTest.Qid |= << ''e.Act >> tt . red in MODAL-LOGIC : (''AbtTest.Qid |= (<< ''fail_a.Act >> tt) /\ (<< ''a.Act >> tt) /\ (<< ''e.Act >> tt)) .
'fail_a 、'a 、 'e で遷移する経路が一つ以上あることを確認する。 どれも true に書き換えられた。 OK。
red in MODAL-LOGIC : ''AbtTest.Qid |= << ''a.Act >> << ''e.Act >> tt . red in MODAL-LOGIC : ''AbtTest.Qid |= [[ ''a.Act ]] [[ ''e.Act ]] ff .
'a で遷移した後 'e で遷移するパスが存在しないことを確認する。 上は false 下は true となった(下は 上の否定形)。 OK。
abort演算子のチェック その1
red in MODAL-LOGIC : ''AbtTest.Qid |= << ''a.Act >> << ''fail_a.Act >> tt .
'a で遷移したらかならず 'fail_a で遷移するパスがあるという論理式。 'aが選ばれたらabort部分はなくなるのでそんなパスはないはず。 実際falseとなった。 OK。
red in MODAL-LOGIC : ''Check.Qid |= << ''a.Act >> << ''fail_a.Act >> tt .
念のため、この論理式がまっとうであることを確認。 この論理式は 'Check = 'a . 'fail_a . 0 というプロセスでは true となった。
abort演算子のチェック その2
red in MODAL-LOGIC : ''AbtTest.Qid |= [[ ''e.Act ]] << ''fail_a.Act >> tt .
'e で遷移したら('dで遷移したら)、 そこから かならず 'fail_a で遷移する経路が一つ以上ある。これは abort動作でやって欲しいこと。 trueとなった。 OK。
ビバ様相論理。