Abstract
In this article, we investigate the automated verification of temporal properties of heap-aware programs. We propose a deductive reasoning approach based on cyclic proof. Judgements in our proof system assert that a program has a certain temporal property over memory state assertions, written in separation logic with user-defined inductive predicates, while the proof rules of the system unfold temporal modalities and predicate definitions as well as symbolically executing programs. Cyclic proofs in our system are, as usual, finite proof graphs subject to a natural, decidable soundness condition, encoding a form of proof by infinite descent. We present a proof system tailored to proving CTL properties of nondeterministic pointer programs, and then adapt this system to handle fair execution conditions. We show both versions of the system to be sound, and provide an implementation of each in the Cyclist theorem prover, yielding an automated tool that is capable of automatically discovering proofs of (fair) temporal properties of pointer programs. Experimental evaluation of our tool indicates that our approach is viable, and offers an interesting alternative to traditional model checking techniques.
Highlights
Program verification can be described as the problem of deciding whether a given program exhibits a desired behaviour, often called its specification
Our proof system is tailored to proving standard CTL program properties over separation logic assertions; subsequently, we show how to adapt this system to handle fairness constraints, where nondeterministic branching may not unfairly favour one branch over another
We provide an implementation of our proof system as an automated verification tool within the Cyclist theorem proving framework [9] and evaluate its performance on a range of examples
Summary
Program verification can be described as the problem of deciding whether a given program exhibits a desired behaviour, often called its specification. In its various flavours [24], is a very popular and widely studied specification formalism due to its relative simplicity and expressive power: a wide variety of safety (“something bad cannot happen”) and liveness properties (“something good eventually happens”) can be captured [20]. Perhaps the most popular approach to automatically verify temporal properties of programs has been model checking: one first builds an abstract model that
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have