PLJul 16

Gradually Verifying Unfolding Expressions & Pure Functions

arXiv:2607.1538311.5h-index: 6
Predicted impact top 5% in PL · last 90 daysOriginality Synthesis-oriented
AI Analysis

Provides a formal foundation for unfolding expressions and pure functions in gradual verification, benefiting developers of program verifiers like Gradual C0, Gobra, Nagini, and SnaKt.

The paper presents formal semantics for unfolding expressions and pure functions in deductive program verifiers based on implicit dynamic frames, extending them to gradual verification and proving soundness. The results apply to both gradual and static verifiers using symbolic execution.

Unfolding expressions, which temporarily unfold a predicate to leverage its owned fields when evaluating a heap-dependent expression, and pure functions, which are heap-dependent functions that can be used in specifications, are used in deductive program verifiers based on implicit dynamic frames, such as Gradual C0, Gobra, Nagini, and SnaKt, to increase the modularity of specifications involving ownership. In this paper, we present the formal semantics for unfolding expressions and pure functions for a static verifier using symbolic execution, extend it for a gradual verifier, and provide a proof of soundness. To support Gradual C0, our proof is in the setting of gradual verification, a deductive program verification system that combines static and dynamic verification to allow partial specifications. However, because the gradual verifier is a conservative extension of a static verifier, our results also apply to static verifiers that use symbolic execution, such as the Silicon symbolic execution backend for the Viper verification infrastructure used by Gobra, Nagini, and SnaKt.

Foundations

The foundational work for this paper's niche, ranked by how specifically the neighbourhood builds on it — not by global fame.

Your Notes