论文标题
全程诱导:验证阵列程序无循环不变
Full-Program Induction: Verifying Array Programs sans Loop Invariants
论文作者
论文摘要
数组通常在各种软件中用于存储和处理循环中的数据。自动证明操纵阵列的此类程序的安全性是具有挑战性的。我们提出了一种新颖的验证技术,称为全程诱导,用于证明(一个子类)量化的(子类)以及操纵参数尺寸$ n $的阵列的程序的无量词属性。我们的技术没有直接通过程序参数$ n $引入整个程序(可能包含多个循环),而不是在单个循环中诱导。该技术在归纳步骤中对给定程序和前条件进行非平凡的转换。转换有助于通过将多个循环的程序转换为一个程序较少,更简单或无循环的程序来有效地减少断言检查问题。值得注意的是,完整的诱导不需要生成或使用特定于循环的不变性。为了评估我们技术的功效,我们开发了一种名为Vajra的原型工具。我们证明了Vajra Vis-a-vis在一系列来自国际软件验证竞赛(SV-COMP)的基准以及受到执行多项式计算的代数函数启发的几个程序上的大量阵列操纵基准的演示。
Arrays are commonly used in a variety of software to store and process data in loops. Automatically proving safety properties of such programs that manipulate arrays is challenging. We present a novel verification technique, called full-program induction, for proving (a sub-class of) quantified as well as quantifier-free properties of programs manipulating arrays of parametric size $N$. Instead of inducting over individual loops, our technique inducts over the entire program (possibly containing multiple loops) directly via the program parameter $N$. The technique performs non-trivial transformations of the given program and pre-conditions during the inductive step. The transformations assist in effectively reducing the assertion checking problem by transforming a program with multiple loops to a program which has fewer and simpler loops or is loop-free. Significantly, full-program induction does not require generation or use of loop-specific invariants. To assess the efficacy of our technique, we have developed a prototype tool called Vajra. We demonstrate the performance of Vajra vis-a-vis several state-of-the-art tools on a large set of array manipulating benchmarks from the international software verification competition (SV-COMP) and on several programs inspired by algebraic functions that perform polynomial computations.