Coq可以(轻松)用作模型检查器吗?

时间:2014-03-15 01:26:56

标签: coq model-checking

3 个答案:

答案 0 :(得分:24)

Coq这样的证明助理将验证您的证据是否合理,并且您提出的任何定理都可以(或不能)使用公理和先前证明的结果得出。它还将为您提供支持,以提出证明步骤,以减少您必须为放置样张而付出的努力。

相比之下,模型检查器象征性地枚举规范的状态空间,并确定是否违反了任何验证条件。在这种情况下,它将提供一个错误跟踪,显示哪些状态更改序列将触发违规。

这些通常具有非常不同的后端处理要求,但是,虽然它们可以合并为一个工具,但Coq证明者似乎没有这样做。

Temporal Logic of Actions(TLA +)规范语言以及伴侣TLA+ Proof System(TLAPS)由Leslie Lamport开发,用于推理大型正式规范。它已经使用PlusCal算法语言进行了扩展,该语言支持对转换为TLA +表示的算法进行模型检查。

μ-calculus 是一种用于许多正式方法方法的低级基础的符号。您还应该查看Boolean satisfiability problem以获得更强力的方法。定理证明其设计通常更为复杂,并使用传统的专家系统/人工智能概念以及专家定义的证明规则库来提供履行证明义务所需的支持。

作为校对工具的另一个示例,您可以查看Event-B method和随附的Rodin开发平台。在完善规范时,这将更具体地确定证明义务,并试图机械地排除这些义务,留下难以做到的事情。

对于模型检查,您可以查看:

免费提供的选择。

答案 1 :(得分:4)

为了补充@Pekka现有的答案,μ-calculus是一个用于讨论固定点的符号,它代表了可达性问题的解决方案。

  • 最小固定点(μ)的示例是可以从某处(例如,从程序的第一行)开始可以到达的最大状态集。它是一个“最小”的固定点,因为它是可能的其他固定点中最小的。它是通过从空集开始,并添加状态直到达到固定点来获得的。在某些条件下,Knaster-Tarski定理确保了固定点的存在。

  • 最大固定点(ν)的一个例子是我们可以保留在内部的最大集合,不会违反某些安全要求。它是一个“最大”的固定点,因为它是通过从所有状态的集合开始获得的(因此,从上面以子集关系定义的集合的部分顺序),并迭代地限制它,直到我们到达一个固定点。最大的固定点是双重到最小的固定点,因此相同的定理适用于存在性和唯一性。将图搜索视为另一个例子。

通过在微积分公式中交替使用固定点的类型,我们可以表达时间行为,例如:“我希望你在两个位置之间来回走动”,或者“我希望服务器最终保持对每个位置的响应”要求得到“。

然后,我们可以模拟检查(使用枚举或符号模型检查器)我们描述的属性是否由我们设计的系统暗示。

  • SPIN是一个枚举模型检查器:它将它探索的每个状态存储在一个哈希表中,并包含一些算法,用于识别它不需要枚举所有状态,但可以处理一些他们作为其他国家的代表(从被核实财产的角度来看,这些国家是等同的,所以只需要推理其中一个国家就足够了)。这些方法称为partial order reduction

  • NuSMV是一个符号模型检查器。它仍然搜索系统的状态,但它并不是在内存中逐个表示它们。相反,它会跟踪状态的,并将这些集合表示为binary decision diagrams。这些数据结构可以保持很小,即使它们表示具有10**24个状态的集合。虽然有保证。不幸的是,它们的大小仍然很大,遗憾的是几乎所有的布尔函数都是如此(因此,我们可能想要表示的几乎所有集合都是如此),因为Claude Shannonproved

上述工具是为verification设计和使用的。还有一种称为综合的方法。在研究了两者之后,它们之间是否真的有任何区别可能会让人感到困惑。在第一次遭遇时,人们可能会认为模型和公式是有所作为的。但是,这具有欺骗性:模型和公式可以作为描述方法互换,也可以混合使用。

验证和综合之间的区别在于quantifiers

  • 验证具有统一的量化(通常都是通用的)
  • 综合具有交替量化:它涉及嵌套的存在性和通用量词。

当然,也可以验证量化的公式,例如\forall x: \exists y: f(x, y)。这不仅仅是验证吗?嗯,它证明了在问题的核心,综合和验证之间没有任何数学差异。传统上,人们主要遇到上述情况,即量化如何出现在哪些问题被视为综合,以及哪些问题被视为验证。

合成和验证之间的主要真正的区别在于我们使用检查公式是否为真的结果:

  • 在验证中,我们已经实现了我们想要的系统,并检查它是否满足某些所需的属性。如果没有,我们将(手动)尝试修复实现,然后再次检查。

  • 在综合中,最终系统的某些部分尚未详细说明。我们通过我们使用的工具选择细节。换句话说,该工具以一种使公式成立的方式消除了存在量词,并告诉我们它做了什么,以便我们以这种方式完成系统,确保公式为真。

C中的综合工具示例是gr1c,Python中的另一个示例是omega。有几个other tools

但是你遇到了问题,至少要确保你写出了计划是什么,you write a specification

关于这些主题的最佳书籍之一是Leslie Lamport的Specifying systems。并且为了说服各种表述是同一件事的面孔,请考虑阅读Computer science and state machines

答案 2 :(得分:0)

使用Coq作为模型检查器有一些工作,例如参见https://github.com/coq-contribs/smc。但是,我不知道那些在严肃应用中使用过它的人。