paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Counterexample-Guided Inference of Modular Specifications

反例引导的模块化规约推断
OOPSLA 9(OOPSLA1)2025匹配度 4/10 · 论文关注模块化验证中反例引导的规约自动推断,属于形式化验证与程序合成方向,与静态分析/形式化验证有间接关联;但未涉及 LLM/Agent 改进验证、浮点程序分析或贝叶斯程序分析,与当前核心交叉方向不直接匹配。引用 1 inbox
William T. Hallahan, Ranjit Jhala, Ruzica Piskac
crossref: 2026-09-10

AI 速览

一句话:提出反例引导算法,自动推断模块化验证所需的被调函数规约,并在有限与大小受限无限规约空间下给出可靠完备性结果。

模块化验证工具要求程序员为被调函数手动编写规约,才能组合式证明目标函数规约,这构成使用门槛。本文提出一种反例引导的规约推断算法,自动为被调函数合成所需规约;算法以验证器、反例生成器和约束引导合成器为参数,若三者在有限候选规约集上可靠且完备,则整体算法可靠且完备。作者进一步提出大小受限的合成函数,将完备性推广到无限规约集,并针对线性整数算术约束给出具体合成方法。最后在多种基准上评估该技术。

问题
模块化验证中,证明函数 f 的规约需要其被调函数的规约,但现有工具要求程序员手动编写这些被调函数规约。
方法
提出反例引导的规约推断算法,参数化于验证器、反例生成器和约束引导合成器,并引入大小受限合成以处理无限规约空间。
评估
在多种基准上评估该技术,并给出可靠性与完备性理论结果;针对线性整数算术约束实现大小受限合成。
原文摘要(Abstract)

Modular verification tools allow programmers to compositionally specify and prove function specifications. When using a modular verifier, proving a specification about a function f requires additional specifications for the functions called by f . With existing state of the art tools, programmers must manually write the specifications for callee functions. We present a counterexample guided algorithm to automatically infer these specifications. The algorithm is parameterized over a verifier, counterexample generator, and constraint guided synthesizer. We show that if each of these three components is sound and complete over a finite set of possible specifications, our algorithm is sound and complete as well. Additionally, we introduce size-bounded synthesis functions, which extends our completeness result to an infinite set of possible specifications. In particular, we describe a size-bounded synthesis function for linear integer arithmetic constraints. We conclude with an evaluation demonstrating our technique on a variety of benchmarks.

链接与引用

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

BibTeX
@article{paperbot3155,
  title = {Counterexample-Guided Inference of Modular Specifications},
  author = {William T. Hallahan and Ranjit Jhala and Ruzica Piskac},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {9},
  number = {OOPSLA1},
  year = {2025},
  doi = {10.1145/3720505}
}