🤖 AI Summary
Existing gradual verifiers—such as Gradual C0—effectively verify heap-manipulating programs but lack intuitive support for specifying recursive heap data structures (e.g., lists, trees) in their specification language.
Method: We propose a novel specification mechanism based on *unfolding expressions*, the first integration of such constructs into a gradual verification framework. Implemented atop Gradual C0, it combines a static type system with a stepwise refinement calculus for specifications, enabling users to write recursive specifications in a natural, intuition-guided manner.
Contribution/Results: This mechanism significantly enhances the expressiveness of the specification language for recursive structures while preserving verification precision. Empirical evaluation demonstrates that our approach substantially lowers the formal specification barrier, improving both tool usability and specification expressivity without compromising soundness or automation feasibility.
📝 Abstract
Static verification provides strong correctness guarantees for code; however, fully specifying programs for static verification is a complex, burdensome process for users. Gradual verification was introduced to make this process easier by supporting the verification of partially specified programs. The only currently working gradual verifier, Gradual C0, successfully verifies heap manipulating programs, but lacks expressiveness in its specification language. This paper describes the design and implementation of an extension to Gradual C0 that supports unfolding expressions, which allow more intuitive specifications of recursive heap data structures.