paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Gradual C0: Symbolic Execution for Gradual Verification

Gradual C0:用于渐进验证的符号执行
TOPLAS 46(4)2024匹配度 3/10 · 论文属于程序验证与符号执行方向,虽与形式化验证/静态分析相关,但未涉及用户核心关注的 LLM/Agent 与静态分析交叉、浮点程序分析或贝叶斯程序分析,因此仅构成间接基础参考。引用 2 inbox
Jenna DiVincenzo, Ian McCormack, Conrad Zimmerman, Hemant Gouni, Jacob Gorenburg, Jan-Paul Ramos-Dávila, Mona Zhang, Joshua Sunshine, Éric Tanter, Jonathan Aldrich
crossref: 2026-09-10

AI 速览

一句话:首个实用递归堆数据结构渐进验证器 Gradual C0,用符号执行减少动态检查开销。

静态验证(如分离逻辑)支持广泛程序,但要求完整详细规约,用户负担重。已有渐进验证可靠结合静态与动态检查处理完整、部分或缺失规约,并扩展到递归可变堆结构,但其动态检查不随静态保证增加而减少,且缺乏完整实现。本文提出 Gradual C0:首个实用的递归堆数据结构渐进验证器,面向教育用 C 安全子集 C0,核心采用符号执行而非最弱自由前置条件。方法处理不精确规约、堆所有权、程序语句与规约公式的分支,并尽量减少动态检查插入。首次实证评估显示,平均比先前全动态方法降低 7.1%–40.2% 运行时开销,最坏情形可预测且可避免。

问题
现有静态验证要求完整详细规约,给用户带来沉重负担;已有渐进验证扩展到递归堆结构后,动态检查不随静态保证增加而减少,且缺少完整实现。
方法
提出 Gradual C0,在支持分离逻辑/隐式动态帧的静态验证器基础上采用符号执行,处理不精确规约、堆所有权以及程序语句和规约公式中的分支,并尽量减少动态检查插入。
评估
首次对渐进验证器进行实证性能评估,平均比先前全动态方法降低 7.1%–40.2% 运行时开销,最坏情形可预测且可避免。
原文摘要(Abstract)

Current static verification techniques such as separation logic support a wide range of programs. However, such techniques only support complete and detailed specifications, which places an undue burden on users. To solve this problem, prior work proposed gradual verification, which handles complete, partial, or missing specifications by soundly combining static and dynamic checking. Gradual verification has also been extended to programs that manipulate recursive, mutable data structures on the heap. Unfortunately, this extension does not reward users with decreased dynamic checking as more specifications are written and more static guarantees are made. In fact, all properties are checked dynamically regardless of any static guarantees. Additionally, no full-fledged implementation of gradual verification exists so far, which prevents studying its performance and applicability in practice. We present Gradual C0, the first practicable gradual verifier for recursive heap data structures, which targets C0, a safe subset of C designed for education. Static verifiers supporting separation logic or implicit dynamic frames use symbolic execution for reasoning; so Gradual C0, which extends one such verifier, adopts symbolic execution at its core instead of the weakest liberal precondition approach used in prior work. Our approach addresses technical challenges related to symbolic execution with imprecise specifications, heap ownership, and branching in both program statements and specification formulas. We also deal with challenges related to minimizing insertion of dynamic checks and extensibility to other programming languages beyond C0. Finally, we provide the first empirical performance evaluation of a gradual verifier, and found that on average, Gradual C0 decreases run-time overhead between 7.1 and 40.2% compared to the fully dynamic approach used in prior work (for context, the worst cases for the approach by Wise et al. [ 2020 ] range from 0.1 to 4.5 seconds depending on the benchmark). Further, the worst-case scenarios for performance are predictable and avoidable. This work paves the way towards evaluating gradual verification at scale.

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot2668,
  title = {Gradual C0: Symbolic Execution for Gradual Verification},
  author = {Jenna DiVincenzo and Ian McCormack and Conrad Zimmerman and Hemant Gouni and Jacob Gorenburg and Jan-Paul Ramos-Dávila and Mona Zhang and Joshua Sunshine and Éric Tanter and Jonathan Aldrich},
  journal = {ACM Transactions on Programming Languages and Systems},
  volume = {46},
  number = {4},
  year = {2024},
  doi = {10.1145/3704808}
}