Satisfiability Modulo Recursive Programs


We present a semi-decision procedure for checking satisfiabil-ity of expressive correctness properties of recursive first-order functional programs. In our approach, both properties and programs are expressed in the same language, a subset of Scala. We implemented our procedure and integrated it with the Z3 SMT solver and the Scala compiler. Our procedure is sound for counterexamples and for proofs of terminating functions. It is terminating and thus complete for many important classes of specifications, including all satisfiable formulas and all formulas where recursive functions satisfy certain syntactic restrictions. Using our system, Leon, we verified detailed correctness properties for functional data structure implementations, as well as syntax tree manipulations. We have found our system to be fast for both finding counterexamples and finding correctness proofs, and to scale to larger programs than alternative techniques.

DOI: 10.1007/978-3-642-23702-7_23

Extracted Key Phrases

3 Figures and Tables


Citations per Year

95 Citations

Semantic Scholar estimates that this publication has received between 69 and 138 citations based on the available data.

See our FAQ for additional information.