首页> 外文期刊>Automated software engineering >Counterexample-guided abstraction refinement for linear programs with arrays
【24h】

Counterexample-guided abstraction refinement for linear programs with arrays

机译:带有数组的线性程序的反例指导的抽象优化

获取原文

摘要

Predicate abstraction refinement is one of the leading approaches to software verification. The key idea is to the input program into a Boolean Program (i.e. a program whose variables range over the Boolean values only and model the truth values of predicates corresponding to properties of the program state), and refinement searches for new predicates in order to build a new, more refined abstraction. Thus Boolean programs are commonly employed as a simple, yet useful abstraction. However, the effectiveness of predicate abstraction refinement on programs that involve a tight interplay between data-flow and control-flow is still to be ascertained. We present a novel counterexample guided abstraction refinement procedure for Linear Programs with arrays, a fragment of the C programming language where variables and array elements range over a numeric domain and expressions involve linear combinations of variables and array elements. In our procedure the input program is abstracted w.r.t. a family of sets of array indices, the abstraction is a Linear Program (without arrays), and refinement searches for new array indices. We use Linear Programs as the target of the abstraction (instead of Boolean programs) as they allow to express complex correlations between data and control. Thus, unlike the approaches based on predicate abstraction, our approach treats arrays precisely.This is an important feature as arrays are ubiquitous in programming. We provide a precise account of the abstraction, Model Checking, and refinement processes, discuss their implementation in the EUREKA tool, and present a detailed analysis of the experimental results confirming the effectiveness of our approach on a number of programs of interest.
机译:谓词抽象细化是软件验证的主要方法之一。关键思想是将输入程序转换为布尔程序(即,其变量仅在布尔值范围内并且对与程序状态的属性相对应的谓词的真值进行建模的程序),并且细化搜索新谓词以构建一个新的,更精致的抽象。因此,布尔程序通常被用作简单但有用的抽象。但是,对于包含数据流和控制流之间紧密相互作用的程序,谓词抽象细化的有效性仍有待确定。我们为带有数组的线性程序提供了一个新颖的反例指导抽象精炼程序,这是C编程语言的一个片段,其中变量和数组元素在数值域内变化,表达式涉及变量和数组元素的线性组合。在我们的过程中,输入程序被抽象为w.r.t.一个数组索引集的集合,抽象是一个线性程序(无数组),并且细化搜索新的数组索引。我们使用线性程序作为抽象的目标(而不是布尔程序),因为它们可以表示数据和控件之间的复杂关联。因此,与基于谓词抽象的方法不同,我们的方法可以精确地处理数组。这是重要的功能,因为数组在编程中无处不在。我们提供了抽象,模型检查和优化过程的精确说明,讨论了它们在EUREKA工具中的实现,并提供了对实验结果的详细分析,确认了我们的方法在许多感兴趣的程序中的有效性。

著录项

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号