Model Checking 杂谈

在计算机科学中,模型检测或property checking是检查一个系统的有限状态模型是否满足给定的specification(a.k.a. correctness)的方法。这通常与硬件或软件系统相关联,其中规范包含活动性要求(例如,避免活动锁)和安全性要求(例如,避免表示系统崩溃的状态)。

为了从算法上解决这个问题,系统模型及其规范都用某种精确的数学语言来表述。 为此,将问题表述为逻辑上的任务,即检查结构是否满足给定的逻辑公式。 该一般概念适用于多种逻辑以及适当的结构。 一个简单的模型检查问题包括验证给定结构是否满足命题逻辑中的公式。

overview

当两个描述不相等时,将使用属性检查进行验证。在改进过程中,对规范进行了补充,这些细节在高级规范中是不必要的。由于这是不可能的,因此无需根据原始规范验证新引入的属性。因此,严格的双向等效检查放宽到单向属性检查。实现或设计被视为电路的模型,而规格是模型必须满足的特性。

已经开发出一类重要的模型检查方法,用于检查硬件和软件设计的模型,其中规范是由时间逻辑公式给出的。时态逻辑规范的开拓性工作是由Amir Pnueli完成的,他因“将时态逻辑引入计算科学中的先天性工作”而获得1996年的图灵奖。模型检查始于C和D的A,B和A的开创性工作。Clarke,Emerson和Sifakis分享了2007年的图灵奖,以表彰他们在模型检查领域的开拓和发展。[8] [9]

模型检查最常用于硬件设计。对于软件来说,由于不确定性(请参阅可计算性理论),该方法不能完全采用算法。通常,它可能无法证明或反证给定的属性。在嵌入式系统硬件中,有可能通过UML活动图[10]或控制解释的Petri网[11]来验证交付的规范。

通常以工业硬件描述语言或专用语言的源代码描述形式给出该结构。这样的程序对应于有限状态机(FSM),即,由节点(或顶点)和边组成的有向图。一组原子命题与每个节点相关联,通常说明哪些存储元素是一个。节点表示系统的状态,边缘表示可能更改状态的可能过渡,而原子命题表示执行点所具有的基本属性。

形式上,问题可以表述为:给定所需的属性(表示为时间逻辑公式p以及具有初始状态s的结构M),确定是否{\ displaystyle M,s \ models p} M,s \ models p 。如果M是有限的(如在硬件中一样),则模型检查将简化为图形搜索。


symbolic model checking


Techniques

模型检查工具面临着状态空间的组合爆炸,通常被称为状态爆炸问题,必须解决该问题才能解决大多数实际问题。有几种方法可以解决此问题。

  1. Symbolic algorithm避免了显式构造有限状态机(FSM)的图结构。相反,它们使用量化命题逻辑中的公式隐式表示图形。 Ken McMillan [14]的工作以及诸如CUDD [15]和BuDDy。[16]之类的开源BDD操作库的开发使二进制决策图(BDD)的使用变得流行。

  2. Bounded model checking algorithms将FSM展开固定的步数k,并检查是否可以在k步或更短的步长发现属性冲突。这通常涉及将受限模型编码为SAT的实例。可以用越来越大的k值重复该过程,直到排除了所有可能的违规(参见迭代加深深度优先搜索)。

  3. Abstraction试图首先通过简化系统来证明系统的属性。简化的系统通常不满足与原始系统完全相同的属性,因此可能需要refinement过程。通常,人们要求抽象是合理的(抽象证明的属性对原始系统是正确的);但是,有时抽象是不完整的(并非原始系统的所有真实属性都对抽象是正确的)。抽象的一个示例是忽略非布尔变量的值,而仅考虑布尔变量和程序的控制流。这样的抽象虽然看起来可能很粗糙,但实际上足以证明例如。互斥的属性。

  4. 反例指导的抽象细化(CEGAR)开始检查粗略(即不精确)的抽象并对其进行迭代细化。当发现违规(即反例)时,该工具会对其进行可行性分析(即违规是真实的还是抽象不完全的结果?)。如果违反(反例)是真实的,则将其报告给用户。如果不是,则使用不可行证明来完善抽象,然后再次开始检查。

最初开发模型检查工具来推理离散状态系统的逻辑正确性,但此后已扩展为处理实时且有限形式的混合系统。


First-order logic


Tools

Here is a partial list of model-checking tools that have a Wikipedia page:

  • Alloy (Alloy Analyzer)
  • BLAST (Berkeley Lazy Abstraction Software Verification Tool)
  • CADP (Construction and Analysis of Distributed Processes) a toolbox for the design of communication protocols and distributed systems
  • CPAchecker: an open-source software model checker for C programs, based on the CPA framework
  • ECLAIR: a platform for the automatic analysis, verification, testing, and transformation of C and C++ programs
  • FDR2: a model checker for verifying real-time systems modelled and specified as CSP Processes
  • ISP code level verifier for MPI programs
  • Java Pathfinder: an open-source model checker for Java programs
  • Libdmc: a framework for distributed model checking
  • mCRL2 Toolset, Boost Software License, Based on ACP
  • NuSMV: a new symbolic model checker
  • PAT: an enhanced simulator, model checker and refinement checker for concurrent and real-time systems
  • Prism: a probabilistic symbolic model checker
  • Roméo: an integrated tool environment for modelling, simulation, and verification of real-time systems modelled as parametric, time, and stopwatch Petri nets
  • SPIN: a general tool for verifying the correctness of distributed software models in a rigorous and mostly automated fashion
  • TAPAs: a tool for the analysis of process algebra
  • TAPAAL: an integrated tool environment for modelling, validation, and verification of Timed-Arc Petri Nets
  • TLA+ model checker by Leslie Lamport
  • UPPAAL: an integrated tool environment for modelling, validation, and verification of real-time systems modelled as networks of timed automata
  • Zing[19] – experimental tool from Microsoft to validate state models of software at various levels: high-level protocol descriptions, work-flow specifications, web services, device drivers, and protocols in the core of the operating system. Zing is currently being used for developing drivers for Windows.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值