首页> 外文期刊>Science of Computer Programming >Program verification via iterated specialization
【24h】

Program verification via iterated specialization

机译:通过迭代专业化进行程序验证

获取原文
获取原文并翻译 | 示例

摘要

We present a method for verifying properties of imperative programs by using techniques based on the specialization of constraint logic programs (CLP). We consider a class of imperative programs with integer variables and we focus our attention on safety properties, stating that no error configuration can be reached from any initial configuration. We introduce a CLP program Ⅰ that encodes the interpreter of the language and defines a predicate unsafe equivalent to the negation of the safety property to be verified. Then, we specialize the CLP program Ⅰ with respect to the given imperative program and the given initial and error configurations, with the objective of deriving a new CLP program J_(sp) that either contains the fact unsafe (and in this case the imperative program is proved unsafe) or contains no clauses with head unsafe (and in this case the imperative program is proved safe). If J_(sp) enjoys neither of these properties, we iterate the specialization process with the objective of deriving a CLP program where we can prove unsafety or safety. During the various specializations we may apply different strategies for propagating information (either propagating forward from an initial configuration to an error configuration, or propagating backward from an error configuration to an initial configuration) and different operators (such as the widening and the convex hull operators) for generalizing predicate definitions. Each specialization step is guaranteed to terminate, but due to the undecidability of program safety, the iterated specialization process may not terminate. By an experimental evaluation carried out on a significant set of examples taken from the literature, we show that our method improves the precision of program verification with respect to state-of-the-art software model checkers.
机译:我们提出一种通过使用基于约束逻辑程序(CLP)专业化的技术来验证命令式程序属性的方法。我们考虑一类具有整数变量的命令式程序,并将我们的注意力集中在安全属性上,指出从任何初始配置都无法实现错误配置。我们引入一个CLP程序Ⅰ,该程序对语言的解释程序进行编码,并定义一个谓词“不安全”,等同于否定要验证的安全性。然后,我们针对给定的命令式程序以及给定的初始和错误配置对CLP程序Ⅰ进行专门化,目的是得出一个新的CLP程序J_(sp),其中包含不安全的事实(在这种情况下,该命令式程序被证明是不安全的)或不包含带有头部不安全的子句(在这种情况下,命令性程序被证明是安全的)。如果J_(sp)都不具有这些特性,则我们将迭代专业化过程,以期得出可以证明不安全或安全的CLP程序。在各种专业领域中,我们可能会采用不同的策略来传播信息(从初始配置向前传播到错误配置,或者从错误配置向后传播到初始配置)以及不同的运算符(例如,加宽和凸包运算符) )以概括谓词定义。每个专业化步骤都可以保证终止,但是由于程序安全性尚不确定,因此迭代的专业化流程可能不会终止。通过对从文献中摘录的大量示例进行的实验评估,我们表明,相对于最新的软件模型检查器,我们的方法提高了程序验证的精度。

著录项

相似文献

  • 外文文献
  • 中文文献
  • 专利
获取原文

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号