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.
翻译:用于存储和处理环状数据的各种软件通常使用阵列。 自动证明操作阵列的这种程序的安全性是具有挑战性的。 我们展示了一种新型的核查技术, 称为全程序上演, 用来证明( 亚类的)量化的和无量化的、 量化的和无量化的, 以证明操作参数大小的阵列的程序的特性。 有意义的是, 完整程序上演不需要通过单个环状输入, 而是直接通过程序参数输入整个程序( 可能包含多个环状) 。 该技术通过程序参数直接在程序( $N$ ) 上输入。 该技术在演化步骤期间对给定的程序和预设条件进行了非三进制的转换。 这些转换有助于通过将一个多圈程序转换成一个程序来有效减少断言检查问题, 以更少、更简单的环状或无环状的程序。 值得注意的是, 完整程序上不需要生成或使用特定圆形的变异体。 为了评估我们技术的功效, 我们开发了一种原型工具, 叫做Vajra。 我们展示了Vajra相对于若干州P- 艺术的状态转换工具的性测试, 通过一系列国际测试工具, 通过一个大型的模型测试, 测试了一套大型的模型, 测试了一套大型的模型, 运行了数级的模型, 测试了数压式的模型的模型的模型的模型的模型, 。