Skip to main content
QUICK REVIEW

[论文解读] SymInfer: Inferring Program Invariants using Symbolic States

ThanhVu Nguyen, Matthew B. Dwyer|arXiv (Cornell University)|Mar 28, 2019
Formal Methods in Verification参考文献 33被引用 6
一句话总结

SymInfer 引入了一种基于反例引导的不变式生成技术,利用符号执行生成的符号状态,在 Java 程序的任意代码位置推断精确且复杂的不变式——尤其是非线性数值不变式。通过重用符号状态同时用于候选不变式推断与验证,该方法避免了冗余计算,在可扩展性和精度方面优于现有工具,尤其在涉及非线性算术和复杂度分析的基准测试中表现突出。

ABSTRACT

We introduce a new technique for inferring program invariants that uses symbolic states generated by symbolic execution. Symbolic states, which consist of path conditions and constraints on local variables, are a compact description of sets of concrete program states and they can be used for both invariant inference and invariant verification. Our technique uses a counterexample-based algorithm that creates concrete states from symbolic states, infers candidate invariants from concrete states, and then verifies or refutes candidate invariants using symbolic states. The refutation case produces concrete counterexamples that prevent spurious results and allow the technique to obtain more precise invariants. This process stops when the algorithm reaches a stable set of invariants. We present SymInfer, a tool that implements these ideas to automatically generate invariants at arbitrary locations in a Java program. The tool obtains symbolic states from Symbolic PathFinder and uses existing algorithms to infer complex (potentially nonlinear) numerical invariants. Our preliminary results show that SymInfer is effective in using symbolic states to generate precise and useful invariants for proving program safety and analyzing program runtime complexity. We also show that SymInfer outperforms existing invariant generation systems.

研究动机与目标

  • 为解决动态不变式推断工具的局限性,这些工具常产生虚假不变式,且在处理复杂数值属性(如非线性算术)时表现不佳。
  • 克服现有 CEGIR 框架中黑箱符号验证的低效性,这些框架在验证每个不变式时反复重新计算符号状态空间。
  • 构建一个统一框架,重用符号状态实现不变式推断与验证,从而提升性能与精度。
  • 实现对复杂不变式的发现,例如 $x^2 + y^2 = z^2$ 或 $x_1 = x_2 \cdot y_1 + y_2 + y_3$,这些不变式对程序验证与静态分析至关重要。
  • 证明符号状态相较于具体状态或黑箱符号执行,构成更优的不变式生成基础。

提出的方法

  • 使用 Symbolic PathFinder (SPF) 生成符号状态(路径条件与变量约束),表示大规模具体程序状态集合的紧凑且多样的编码。
  • 利用符号状态通过 DIG 启动动态不变式推断,从符号状态导出的具体状态中推断出表达性强的非线性不变式。
  • 直接使用符号状态构建候选不变式的验证条件,实现基于 SAT/SMT 的高效验证。
  • 在验证过程中集成反例生成,以精炼推断过程并消除虚假不变式,确保收敛到稳定且精确的不变式集合。
  • 在所有推断与验证迭代中重用相同的符号状态表示,避免冗余的符号执行。
  • 应用优化技术,如析取 SMT 公式编码与状态空间重用,以降低验证开销并提升可扩展性。

实验结果

研究问题

  • RQ1来自符号执行的符号状态能否作为 CEGIR 框架中不变式推断与验证的有效且可重用基础?
  • RQ2符号状态在多大程度上能提升复杂数值不变式(如非线性算术关系)推断的精度与可扩展性?
  • RQ3SymInfer 在不变式质量、性能以及对复杂不变式支持方面,与 iDiscovery、PIE、ICE 和 NumInv 等现有工具相比如何?
  • RQ4SymInfer 是否能有效推断出非平凡的程序复杂度边界(如循环迭代次数),这些边界对静态分析与安全推理具有重要意义?
  • RQ5在多个验证检查中重用符号状态是否能带来相较于黑箱符号执行方法的可测量性能提升?

主要发现

  • SymInfer 在 27 个非线性算术(NLA)基准中的 21 个成功推断出复杂非线性不变式,而 iDiscovery 因缺乏对这类关系的支持而失败。
  • 在 HOLA 基准中,SymInfer 对 19 个程序中的 18 个发现了非平凡的复杂度边界,其中 4 个边界优于先前工作的最佳结果。
  • 在 HOLA 基准中,SymInfer 在 46 个程序中的 41 个优于最先进工具 PIE,展现出更优的可扩展性与精度。
  • SymInfer 在所有基准中达到或超过 NumInv 的不变式质量,同时运行速度更快,尽管 SPF 在 C 程序上的性能低于 KLEE,但得益于高效的符号状态重用。
  • 通过反例驱动的精炼机制,该工具避免了虚假不变式,实现了稳定且精确的不变式集合,且无需冗余符号执行。
  • 符号状态的使用使 SymInfer 相较于黑箱验证工具(如 KLEE)获得显著性能优势,因为符号状态仅计算一次并在所有不变式中重用。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。