NuSMV陷入微不足道的僵局

时间:2018-09-05 23:57:45

标签: logic automata nusmv

假设我用NuSMV编写了一个从状态S1开始的模型。我想在此模型检查器中检查条件是否最终在所有情况下都达到状态S70。现在可视化我编码的NuSMV模型,如下所示:

enter image description here

很明显,最终将达到S70,但可能要花费70多个时间步长。为什么?因为您可能会转到S2,然后再到S3,而不是再回到S4,然后重复这种模式(例如说100次),所以您可以转到S2。 NuSMV软件将这种可能性考虑在内,以确保一定可以达到S70。

问题在于NuSMV表示无法达到S70并生成了一个反例,正是这样:-

{{1}}

所以反例就是这四个步骤。但是令我惊讶的是,NuSMV无法弄清楚这种僵局最终会随着时间的流逝而得到解决。为什么我会得到非直觉的结果?

我在图中显示的自动机可能是我想要我的NuSMV代码表示的机会,但是我错误地编码了一两行,但我不这么认为。否则,NuSMV怎么会认为它可以从S2转到S3。如果可以确定一个人可以从S2转到S3,那么为什么在S2终止上面的反例?

有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

  

但是我很惊讶NuSMV无法弄清楚这种僵局最终会随着时间的流逝而得到解决

我不确定这种情况是否与definition of "deadlock"相符。无论如何,NuSMV指出存在执行程序永远不会到达状态S70的情况是正确的。

针对可达性问题的反例(在没有死锁状态的适当模型中)始终是无限执行跟踪。您得到的反例:

S1->S2->S3->S2

由两部分组成:

  • 一个前缀部分:状态序列,从初始状态开始,到达无限循环部分。在这种情况下,它只是S1
  • 一个循环部分:状态的自循环序列,由于它以与开始时相同的状态结束,因此很容易识别。在这种情况下,它是S2 -> S3 -> S2

这是自动机的有效无限执行路径,这意味着程序始终从S3跳到S2且从不进入{{ 1}},并且由于它从未触及S4,因此它也是您的媒体资源的反例。


我不确定如何进一步帮助您解决问题,因为您没有表明您使用的是 LTL 还是 CTL ,也没有提供任何进一步的建议有关您的模型的信息。可能需要更改模型,属性或同时更改两者。如果可以的话,我建议您看看S70 / NuSMVthis course第二部分的幻灯片,以更好地了解该工具。

编辑

让我们假设,在正在建模的现实场景中,从技术上讲不可能发生这种无限执行,即这种可能性是建模阶段引入一些简化的结果,或者实际上可能会发生这种情况,但出于书面原因,我们对这种极端情况根本不感兴趣。

然后,解决方案是从验证部分中排除这种执行跟踪,以使它不会显示为反例。确切的解决方案可能取决于所验证的模型,我无法使用该模型,但示例可能是:

nuXmv

此编码假定在 (! (G (F S2))) -> (F S70) 之后不存在返回到S2的环回。否则,应使用其他方法。