如何使用NuSMV检查LTL的可满足性?

时间:2016-01-21 15:30:40

标签: logic model-checking nusmv

我正在尝试使用NuSMV作为LTL公式的可满足性检查器,即我想知道是否存在给定公式的模型。 我知道NuSMV也可以用于此目的,因为它在理论上是可行的,因为我在许多论文中引用它来处理可满足性(其中一个声称NuSMV是最快的可满足性检查器之一有)。

我看到NuSMV带来了一个名为ltl2smv的工具,它显然将LTL公式转换为SMV模块,但后来我不知道如何使用输出。直接将它提供给NuSMV会返回一条关于“main”未定义的错误消息,所以我想我必须定义一个主模块并以某种方式使用另一个。由于我从未使用过NuSMV作为模型检查器,因此我不知道它的语言是如何工作的,并且用户指南是压倒性的,因为我只需要这个特定的用例,顺便说一下,在上述指南的任何地方都没有提到。 / p>

那么我如何使用NuSMV来检查LTL公式的可满足性?是否有记录此用例的地方?

2 个答案:

答案 0 :(得分:4)

查看chapter about LTL model checking in NuSMV's user manual。它附带了一个示例,说明如何在模块中表达LTL规范并进行检查:

MODULE main
  VAR
    ...
  ASSIGN
    ...
  LTLSPEC <LTL specification 1>
  LTLSPEC <LTL specification 2>
...

NuSMV检查规范是否适用于所有可能的路径。要检查公式是否存在模型(即路径),可以输入否定,模型检查器将为您提供反例(如果存在)。反例将是原始公式的一个例子。

答案 1 :(得分:0)

一种方法是使用PolSAT。这将LTL公式作为输入,并将其提供给许多不同的LTL求解器。这通常比单独使用NuSMV更快。如果您将NuSMV二进制文件替换为/bin/false并运行./polsat 'Gp & F X ~ p',它将中止并留下包含以下内容的文件../NuSMV/tmpin.smv

MODULE main
VAR
Gp:boolean;
p:boolean;
LTLSPEC
!(((Gp)&(F (X (!(p))))))

(注意,PolSAT将Gp解释为单个变量)。然后,您可以使用命令../NuSMV/nusmv/NuSMV < ../NuSMV/tmpin.smv直接运行NuSMV。

如果您想安装PolSAT,目前可以从https://lab301.cn/home/pages/lijianwen/下载。 v0.1在现代机器上有点困难,您可能需要将bison降级到2.7版(参见例如https://askubuntu.com/questions/444982/install-bison-2-7-in-ubuntu-14-04)。