Skip to main content
QUICK REVIEW

[论文解读] Proving or Disproving likely Invariants with Constraint Reasoning

Tristan Denmat, Arnaud Gotlieb|ArXiv.org|Aug 24, 2005
Formal Methods in Verification参考文献 17被引用 5
一句话总结

本文提出一种基于约束的自动验证方法,用于检查可能的不变量(即在某些程序执行中成立但并非所有执行中都成立的性质):通过证明其正确性或通过反例否定其成立。该方法基于CLP(FD)将指令式程序转化为约束系统,将可能的不变量编码为约束,并检查该系统与不变量否定的可满足性;若不可满足,则不变量普遍成立。

ABSTRACT

A program invariant is a property that holds for every execution of the program. Recent work suggest to infer likely-only invariants, via dynamic analysis. A likely invariant is a property that holds for some executions but is not guaranteed to hold for all executions. In this paper, we present work in progress addressing the challenging problem of automatically verifying that likely invariants are actual invariants. We propose a constraint-based reasoning approach that is able, unlike other approaches, to both prove or disprove likely invariants. In the latter case, our approach provides counter-examples. We illustrate the approach on a motivating example where automatically generated likely invariants are verified.

研究动机与目标

  • 为解决验证可能不变量的挑战,这些不变量是通过动态分析推断得出,但不能保证在所有执行中都成立。
  • 开发一种既能证明真不变量又能否定假不变量的方法,与以往仅支持单向验证的方法不同。
  • 通过结合动态分析的精度与基于约束的验证的严谨性,提升静态分析的精度,同时确保结果的正确性。
  • 当可能不变量不成立时提供反例,从而支持程序属性的调试与改进。
  • 克服现有工具(如ESC-Java)和动态分析工具(如Daikon)的局限性,这些工具无法否定虚假不变量,或需要手动添加断言才能完成证明。

提出的方法

  • 基于形式化操作语义模型(捕捉控制流与数据依赖),使用CLP(FD)将指令式程序转化为约束系统。
  • 将由动态分析工具(如Daikon)生成的可能不变量表示为程序变量上的逻辑约束。
  • 构建一个结合程序语义与可能不变量否定的约束系统:CS ∧ ¬I。
  • 使用约束求解器检查该组合系统的可满足性:若可满足,则存在反例;若不可满足,则不变量普遍成立。
  • 利用约束传播技术减少搜索空间,避免全枚举,从而在效率上优于朴素的生成与测试方法。
  • 通过*ite*和*w*等运算符应用受保护的约束,以建模条件与循环结构,实现对程序行为在约束逻辑中的精确建模。

实验结果

研究问题

  • RQ1基于约束的方法是否能够同时证明和否定可能不变量,而非仅支持单向验证?
  • RQ2在验证可能不变量时,约束传播在多大程度上能有效减少搜索空间?
  • RQ3该方法在终止性与可扩展性方面存在哪些局限性,特别是在处理复杂循环的程序时?
  • RQ4该方法能否检测并为通过动态分析推断出的虚假不变量提供反例?
  • RQ5在实际应用中,该方法的性能与静态分析或纯生成与测试方法相比如何?

主要发现

  • 该方法成功证明了一个可能不变量为真不变量,通过表明约束系统CS ∧ ¬I不可满足。
  • 通过约束求解器返回有效反例,成功否定了两个可能不变量,证明了该方法检测虚假正例的能力。
  • 该方法避免依赖近似技术,从而实现证明与反证的双重能力,而不同于仅支持反证的欠近似或仅支持证明的过近似技术。
  • 约束传播显著减少了需枚举的案例数量,但当传播因复杂或非线性约束失败时,性能会下降。
  • 当约束传播不足时,该方法退化为生成与测试策略,对于大输入域而言难以处理。
  • 该方法在约束逻辑与语义上具有形式化基础,其结构类似霍恩逻辑的声明式表达,但通过引入传播机制提升了效率。

更好的研究,从现在开始

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

无需绑定信用卡

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