如标题所示,Coq能用作模型检查器吗?我能将模型检查与Coq证明混合使用吗?这种做法常见吗?Google提到了“µ-演算”,有人对此或类似的东西有经验吗?建议以这种方式使用Coq,还是应该寻找其他工具?
如标题所示,Coq能用作模型检查器吗?我能将模型检查与Coq证明混合使用吗?这种做法常见吗?Google提到了“µ-演算”,有人对此或类似的东西有经验吗?建议以这种方式使用Coq,还是应该寻找其他工具?
行动的时间逻辑(TLA+)规范语言,以及伴随的TLA+证明系统(TLAPS),是由Leslie Lamport开发的用于推理大型形式化规范的工具。它已经通过PlusCal算法语言进行了扩展,支持将转换为TLA+表示的算法进行模型检查。
μ-演算是许多形式化方法方法的底层基础符号。您还应该查看布尔可满足性问题以获取更加暴力的方法。定理证明器通常在设计上更为复杂,并使用传统的专家系统/人工智能概念以及由专家定义的证明规则库来提供所需的支持以满足证明义务。
作为一个证明工具的另一个例子,你可以看看Event-B方法和相应的Rodin开发平台。当更具体地细化规范时,它将识别证明义务并尝试机械地解决这些问题,留下困难的问题供您解决。SPIN是一个枚举模型检查器:它将探索的每个状态存储在哈希表中,并包括一些算法,用于识别它不需要枚举所有状态,而是可以将其中一些状态视为代表其他状态(从验证的属性的角度来看,这些状态是等价的,因此只需要对其中一个进行推理)。这些方法称为部分顺序约简。
NuSMV是一种符号模型检查器。它仍然搜索系统的状态,但不会逐个在内存中表示它们。相反,它跟踪状态的集合,将这些集合表示为二元决策图。这些数据结构可以保持较小的大小,即使它们表示具有10**24
个状态的集合。然而,不能保证这一点。不幸的是,它们仍然可能会增长到很大的尺寸,而几乎所有布尔函数(因此,我们可能想要表示的几乎所有集合)都是如此,正如Claude Shannon已经证明的那样。
\forall x:\exists y:f(x,y)
。这难道不就是验证吗?好吧,确实如此,证明了在合成和验证之间,本质上没有任何数学上的区别。传统上,人们主要遇到上述量词出现方式的问题,将其视为合成或验证的问题。gr1c
,Python中的另一个例子是omega
。还有其他工具。有关使用 Coq 作为模型检查器的一些工作,例如请参见 https://github.com/coq-contribs/smc。但是,我不知道有没有人在重要应用中使用过它。