We present a novel verification technique to prove interesting properties of a class of array programs with a symbolic parameter N denoting the size of arrays. The technique relies on constructing two slightly different versions of the same program. It infers difference relations between the corresponding variables at key control points of the joint control-flow graph of the two program versions. The desired post-condition is then proved by inducting on the program parameter $N$, wherein the difference invariants are crucially used in the inductive step. This contrasts with classical techniques that rely on finding potentially complex loop invaraints for each loop in the program. Our synergistic combination of inductive reasoning and finding simple difference invariants helps prove properties of programs that cannot be proved even by the winner of Arrays sub-category from SV-COMP 2021. We have implemented a prototype tool called diffy to demonstrate these ideas. We present results comparing the performance of diffy with that of state-of-the-art tools.
翻译:我们提出了一个新颖的验证技术, 以证明一组阵列程序有趣的属性, 其符号参数N 说明阵列的大小。 该技术依赖于构建两个稍有不同版本的相同程序。 它推算出两个程序版本联合控制流程图关键控制点的对应变量之间的关系。 然后, 通过引入程序参数 $N 来证明理想的后期条件, 其中差异在感应步骤中至关重要地使用。 这与传统技术形成对照, 这些传统技术依赖于为每个程序循环寻找潜在的复杂循环输空。 我们的感知推理和简单变量的协同组合有助于证明程序属性的特性,即使是SV- COMP 2021 的Arrays子类的赢家也无法证明这一点。 我们应用了一个名为“ diffy” 的原型工具来演示这些想法。 我们展示了将光速和最先进的工具的性能进行比较的结果 。