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

Logic 如何使用NuSMV检查LTL的可满足性?,logic,model-checking,nusmv,Logic,Model Checking,Nusmv,我试图使用NuSMV作为LTL公式的可满足性检查工具,也就是说,我想知道给定公式是否存在模型。 我知道NuSMV也可以用于此目的,因为这在理论上是可能的,而且我在许多关于可满足性的论文中看到了它的引用(其中一篇论文还声称NuSMV是最快的可满足性检查工具之一) 我看到NuSMV附带了一个名为ltl2smv的工具,它显然将LTL公式转换为SMV模块,但我不知道如何使用输出。将其直接提供给NuSMV会返回一条关于“main”未定义的错误消息,因此我想我必须定义一个主模块,并以某种方式使用另一个模块。

我试图使用NuSMV作为LTL公式的可满足性检查工具,也就是说,我想知道给定公式是否存在模型。 我知道NuSMV也可以用于此目的,因为这在理论上是可能的,而且我在许多关于可满足性的论文中看到了它的引用(其中一篇论文还声称NuSMV是最快的可满足性检查工具之一)

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

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

请查看。它附带了一个如何在模块中表达和检查LTL规范的示例:

MODULE main
  VAR
    ...
  ASSIGN
    ...
  LTLSPEC <LTL specification 1>
  LTLSPEC <LTL specification 2>
...
主模块
变量
...
分配
...
LTLSPEC
LTLSPEC
...

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

一种方法是使用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,目前可以从下载。v0.1在现代机器上有点困难,您可能需要将
bison
降级到2.7版(参见示例)。

Ok,因此LTL公式被放入LTLSPEC指令中。ltl2smv工具与此无关?它的用途是什么?@gigabytes:看来是NuSMV内部使用的,看。我看。。。。请您在回答中提供一个最简单的工作示例,好吗?我目前没有安装工作的NuSMV。但是本手册的示例将为
找到一个模型!G(proc1.state=entering->F proc1.state=critical)
。是的,在此期间,我已设法从您的答案和链接的手册部分使其工作。谢谢:)