BI as an assertion language for mutable data structures
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Local Reasoning about Programs that Alter Data Structures
CSL '01 Proceedings of the 15th International Workshop on Computer Science Logic
Syntactic Considerations on Recursive Types
LICS '96 Proceedings of the 11th Annual IEEE Symposium on Logic in Computer Science
Transition predicate abstraction and fair termination
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Permission accounting in separation logic
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Separation logic, abstraction and inheritance
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Separation Logic Contracts for a Java-Like Language with Fork/Join
AMAST 2008 Proceedings of the 12th international conference on Algebraic Methodology and Software Technology
jStar: towards practical verification for java
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
A Basis for Verifying Multi-threaded Programs
ESOP '09 Proceedings of the 18th European Symposium on Programming Languages and Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Implicit Dynamic Frames: Combining Dynamic Frames and Separation Logic
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Verification of Concurrent Programs with Chalice
Foundations of Security Analysis and Design V
Proceedings of the 7th International Workshop on Satisfiability Modulo Theories
Checking interference with fractional permissions
SAS'03 Proceedings of the 10th international conference on Static analysis
VeriFast: a powerful, sound, predictable, fast verifier for C and java
NFM'11 Proceedings of the Third international conference on NASA Formal methods
The relationship between separation logic and implicit dynamic frames
ESOP'11/ETAPS'11 Proceedings of the 20th European conference on Programming languages and systems: part of the joint European conferences on theory and practice of software
Proceedings of the 13th Workshop on Formal Techniques for Java-Like Programs
Smallfoot: modular automatic assertion checking with separation logic
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
Methodologies for static program verification and analysis often support recursive predicates in specifications, in order to reason about recursive data structures. Intuitively, a predicate instance represents the complete unrolling of its definition; this is the equirecursive interpretation. However, this semantics is unsuitable for static verification, when the recursion becomes unbounded. For this reason, most static verifiers differentiate between, e.g., a predicate instance and its corresponding body, while providing a facility to map between the two; this is the isorecursive semantics. While this latter interpretation is usually implemented in practice, only the equirecursive semantics is typically treated in theoretical work. In this paper, we provide both an isorecursive and an equirecursive formal semantics for recursive definitions in the context of Chalice, a verification methodology based on implicit dynamic frames. We show that development of such formalisations requires addressing several subtle issues, such as the possibility of infinitely-recursive definitions and the need for the isorecursive semantics to correctly reflect the restrictions that make it readily implementable. These questions are made more challenging still in the context of implicit dynamic frames, where the use of heap-dependent expressions provides further pitfalls for a correct formal treatment.