Skip to main content
QUICK REVIEW

[论文解读] Verifying Safety of Functional Programs with Rosette/Unbound

Dmitry Mordvinov, Grigory Fedyukovich|arXiv (Cornell University)|Apr 15, 2017
Formal Methods in Verification参考文献 6被引用 7
一句话总结

Rosette/Unbound 是首个针对 Racket 的验证器,采用受限霍恩子句(CHC)求解技术,自动合成函数式程序的归纳不变式,从而实现对高阶、递归及多遍处理未 bound 数据流的程序的验证。它支持符号执行、符号状态合并,以及一种新颖的多迭代器同步机制,可对同一列表进行同步操作,从而验证复杂的正确性属性,例如排序列表的最小元素即为其首元素。

ABSTRACT

The goal of unbounded program verification is to discover an inductive invariant that safely over-approximates all possible program behaviors. Functional languages featuring higher order and recursive functions become more popular due to the domain-specific needs of big data analytics, web, and security. We present Rosette/Unbound, the first program verifier for Racket exploiting the automated constrained Horn solver on its backend. One of the key features of Rosette/Unbound is the ability to synchronize recursive computations over the same inputs allowing to verify programs that iterate over unbounded data streams multiple times. Rosette/Unbound is successfully evaluated on a set of non-trivial recursive and higher order functional programs.

研究动机与目标

  • 实现对具有未 bound 数据流和复杂递归行为的 Racket 函数式程序的自动化验证。
  • 解决现有工具在缺乏迭代器间同步机制的情况下,难以验证多次遍历同一列表的程序的问题。
  • 将受限霍恩子句求解集成到函数式编程验证流程中,实现归纳不变式的全自动合成。
  • 在保持精度与可扩展性的符号执行框架中,支持高阶函数、可变性及全局状态。

提出的方法

  • 在控制流合并点进行状态合并的符号执行,以保留路径信息。
  • 将程序行为编码为一组受限霍恩子句(CHCs),其中每个函数由一个新关系符号表示。
  • 使用符号调用图追踪函数依赖关系,并生成捕捉控制流与数据依赖关系的 CHC 蕴含式。
  • 引入一种同步机制,使多个列表迭代器在同一个符号列表上对齐,通过共享符号头确保它们同时访问相同元素。
  • 将验证条件转化为带有前提条件和后置条件的 CHC 系统,并使用外部求解器(如 Spacer3 或 Z3)进行求解。
  • 通过在关系符号中扩展状态参数,支持全局状态和可变性,从而在函数式程序中推理可变变量。

实验结果

研究问题

  • RQ1函数式程序验证器能否有效处理具有未 bound 数据流的递归和高阶程序?
  • RQ2如何对同一符号列表的多次遍历进行同步,以确保迭代器间推理的一致性?
  • RQ3受限霍恩子句求解能否有效集成到函数式语言的符号执行框架中,以实现不变式的自动化合成?
  • RQ4该系统在具有复杂数据操作的非平凡函数式程序上的可扩展性与正确性如何?

主要发现

  • Rosette/Unbound 成功验证了其全部 30 个基准测试,包括高阶和多遍列表处理程序,平均求解时间为 0.115 秒。
  • 在安全程序上,该工具优于 MoCHi:在全部 12 个验证基准中均成功证明正确性,而 MoCHi 仅在 1 个基准中成功(其余因超时或内部错误失败)。
  • 对于含错程序,MoCHi 在 9 个案例中找到了反例,但 Rosette/Unbound 验证安全属性的能力未受此影响。
  • 同步机制使验证诸如‘排序列表的首元素即为最小元素’等属性成为可能,这需要多个迭代器间的一致访问。
  • 该系统在支持有界推理的同时扩展至未 bound 符号列表,而 Rosette 及其他先前工具均不具备此能力。
  • 通过 Spacer3 和 Z3 集成 CHC 求解,实现了可扩展且精确的验证,评估中未报告任何误报。

更好的研究,从现在开始

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

无需绑定信用卡

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