現在、状態の変化に関するプロパティを指定できる唯一の場所は、イベント自体です。PrimaryLock /= Onしたがって、変数を変更する各イベントにガードを追加する必要がありますdoor。
絞り込みを使用する場合 (そうするべきです! :)、ドアを変更する可能性のある抽象的なイベントを指定し、絞り込みのすべてのイベントはその仕様に従わなければならないため、これは実際にはそれほど悪くはありません。
open_door = WHEN PrimaryLock /= On THEN door := Open END
close_door = WHEN PrimaryLock /= On THEN door := Closed END
open_door洗練されていない、またはclose_door暗黙的に洗練されていない洗練の新しいイベントはskip、ドアのステータスを変更することはできません。したがって、open_doorとclose_doorが変数を変更する抽象仕様内の唯一のイベントであるdoor場合door、それがロックされていない場合にのみ、改良で変更できます。
でさらに抽象的に指定できます
change_door_status = WHEN PrimaryLock /= On THEN door :: {Open,Closed} END
そして、それを開閉するイベントを絞り込みとして指定します。
すべてのイベントに対してこのようなプロパティを表現できれば、すばらしい機能になることは認めます。