我正在尝试为NuSMV中的模型检查创建有效的CTL或LTL表达式。
我在游戏中有一个变量,演员跑来跑去试图互相捕捉。 变量是,State_Of_Game:{Win,Lose,Playing}
我希望表明,从每个开始状态开始,游戏都可以赢或输。
那么,我将如何在CTL或LTL中实现它?
我在想像AG这样的东西(S_O_G = Win | S_O_G = Lose),但不知道如何实现从每个起始状态看到它。
答案 0 :(得分:3)
我不熟悉SMV表示法,所以我猜这个,但关键点是:
为了避免在外部对所有状态进行量化:你不想说所有游戏都可以赢或输,而只是开始游戏。所以只需要一个处于起始状态的公式,没有最外层的模态
使用连词,而不是分离:你想断言胜利和失败
你需要用不同的方式包装每个分支:可靠性,可失性是一种存在主张,说有可能达到一个条件。
我认为你需要的公式是:(EG SOG = Win)& (EG SOG = Lose)在根处,这可能意味着类似于init / start子句,或者在命名的根子句中断言。如果SMV没有EG模态,你可以使用等价EG p =!(AG!p)转换成AG,因为这两个是De Morgan对偶。
答案 1 :(得分:0)
尝试以下方法:AF(State_of_Game = Win | State_of_Game = Lose)