构建有效的CTL或LTL表达(在NuSMV中)

时间:2013-12-12 14:44:04

标签: logic ctl nusmv

我正在尝试为NuSMV中的模型检查创建有效的CTL或LTL表达式。

我在游戏中有一个变量,演员跑来跑去试图互相捕捉。 变量是,State_Of_Game:{Win,Lose,Playing}

我希望表明,从每个开始状态开始,游戏都可以赢或输。

那么,我将如何在CTL或LTL中实现它?

我在想像AG这样的东西(S_O_G = Win | S_O_G = Lose),但不知道如何实现从每个起始状态看到它。

2 个答案:

答案 0 :(得分:3)

我不熟悉SMV表示法,所以我猜这个,但关键点是:

  1. 为了避免在外部对所有状态进行量化:你不想说所有游戏都可以赢或输,而只是开始游戏。所以只需要一个处于起始状态的公式,没有最外层的模态

  2. 使用连词,而不是分离:你想断言胜利和失败

  3. 你需要用不同的方式包装每个分支:可靠性,可失性是一种存在主张,说有可能达到一个条件。

  4. 我认为你需要的公式是:(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)