假设我用NuSMV编写了一个从状态S1开始的模型。我想在此模型检查器中检查条件是否最终在所有情况下都达到状态S70。现在可视化我编码的NuSMV模型,如下所示:
很明显,最终将达到S70,但可能要花费70多个时间步长。为什么?因为您可能会转到S2,然后再到S3,而不是再回到S4,然后重复这种模式(例如说100次),所以您可以转到S2。 NuSMV软件将这种可能性考虑在内,以确保一定可以达到S70。
问题在于NuSMV表示无法达到S70并生成了一个反例,正是这样:-
{{1}}
所以反例就是这四个步骤。但是令我惊讶的是,NuSMV无法弄清楚这种僵局最终会随着时间的流逝而得到解决。为什么我会得到非直觉的结果?
我在图中显示的自动机可能是我想要我的NuSMV代码表示的机会,但是我错误地编码了一两行,但我不这么认为。否则,NuSMV怎么会认为它可以从S2转到S3。如果可以确定一个人可以从S2转到S3,那么为什么在S2终止上面的反例?
有人可以解释吗?
答案 0 :(得分:0)
但是我很惊讶NuSMV无法弄清楚这种僵局最终会随着时间的流逝而得到解决
我不确定这种情况是否与definition of "deadlock"相符。无论如何,NuSMV
指出存在执行程序永远不会到达状态S70
的情况是正确的。
针对可达性问题的反例(在没有死锁状态的适当模型中)始终是无限执行跟踪。您得到的反例:
S1->S2->S3->S2
由两部分组成:
S1
。S2 -> S3 -> S2
这是自动机的有效无限执行路径,这意味着程序始终从S3
跳到S2
且从不进入{{ 1}},并且由于它从未触及S4
,因此它也是您的媒体资源的反例。
我不确定如何进一步帮助您解决问题,因为您没有表明您使用的是 LTL 还是 CTL ,也没有提供任何进一步的建议有关您的模型的信息。可能需要更改模型,属性或同时更改两者。如果可以的话,我建议您看看S70
/ NuSMV
上this course第二部分的幻灯片,以更好地了解该工具。
编辑
让我们假设,在正在建模的现实场景中,从技术上讲不可能发生这种无限执行,即这种可能性是建模阶段引入一些简化的结果,或者实际上可能会发生这种情况,但出于书面原因,我们对这种极端情况根本不感兴趣。
然后,解决方案是从验证部分中排除这种执行跟踪,以使它不会显示为反例。确切的解决方案可能取决于所验证的模型,我无法使用该模型,但示例可能是:
nuXmv
此编码假定在 (! (G (F S2))) -> (F S70)
之后不存在返回到S2
的环回。否则,应使用其他方法。