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