一句话:提出 Quiver,在 Coq 中以用户规约草图为引导,溯因推断分离逻辑功能正确性规约并同时进行基础性验证。
使用分离逻辑验证程序完整功能正确性已取得很大进展,甚至可在 Coq 等证明助手中产生基础性证明,但用户仍需承担沉重的规约编写负担:必须提供冗长、复杂且繁琐的分离逻辑规约。为此,作者提出 Quiver,首个既能推断分离逻辑功能正确性规约、又能同时在证明助手中基础性地验证其正确性的技术。Quiver 接受用户给出的规约草图作为引导,并通过推断补全草图;其核心是一种新的溯因演绎验证技术,将用于规约推断的溯因推理与用于基础验证的分离逻辑演绎自动化相结合。这样用户只需提供少量引导,显著少于传统基于分离逻辑的演绎验证。作者在多个案例研究(包括流行开源库代码)上评估了 Quiver。
Over the past two decades, there has been a great deal of progress on verification of full functional correctness of programs using separation logic, sometimes even producing “foundational” proofs in proof assistants like Coq. Unfortunately, even though existing approaches to this problem provide significant support for automated verification, they still incur a significant specification overhead : the user must supply the specification against which the program is verified, and the specification may be long, complex, or tedious to formulate. In this paper, we introduce Quiver, the first technique for inferring functional correctness specifications in separation logic while simultaneously verifying foundationally that they are correct. To guide Quiver towards the final specification, we take hints from the user in the form of a specification sketch , and then complete the sketch using inference. To do so, Quiver introduces a new abductive deductive verification technique, which integrates ideas from abductive inference (for specification inference) together with deductive separation logic automation (for foundational verification). The result is that users have to provide some guidance, but significantly less than with traditional deductive verification techniques based on separation logic. We have evaluated Quiver on a range of case studies, including code from popular open-source libraries.
@article{paperbot2503,
title = {Quiver: Guided Abductive Inference of Separation Logic Specifications in Coq},
author = {Simon Spies and Lennard Gäher and Michael Sammler and Derek Dreyer},
journal = {Proceedings of the ACM on Programming Languages},
volume = {8},
number = {PLDI},
year = {2024},
doi = {10.1145/3656413}
}