Verifying Safety of Functional Programs with Rosette/Unbound

Dmitry Mordvinov,Grigory Fedyukovich
DOI: https://doi.org/10.48550/arXiv.1704.04558
2017-04-15
Software Engineering
Abstract:The goal of unbounded program verification is to discover an inductive invariant that safely over-approximates all possible program behaviors. Functional languages featuring higher order and recursive functions become more popular due to the domain-specific needs of big data analytics, web, and security. We present Rosette/Unbound, the first program verifier for Racket exploiting the automated constrained Horn solver on its backend. One of the key features of Rosette/Unbound is the ability to synchronize recursive computations over the same inputs allowing to verify programs that iterate over unbounded data streams multiple times. Rosette/Unbound is successfully evaluated on a set of non-trivial recursive and higher order functional programs.
What problem does this paper attempt to address?