Higher-order symbolic execution for contract verification and refutation
Phuc C. Nguyen, Sam Tobin-Hochstadt, David Van Horn

TL;DR
This paper introduces a higher-order symbolic execution approach for automated reasoning about higher-order programs, enabling effective verification and refutation of software contracts in dynamic languages like Racket.
Contribution
It develops a sound and relatively complete higher-order symbolic execution method that leverages contracts as symbolic values for program verification.
Findings
Successfully verifies and refutes contracts in Racket programs
Analyzes first-class contracts, recursive data, and control-flow refinements
Competitive with existing verification tools on benchmarks
Abstract
We present a new approach to automated reasoning about higher-order programs by endowing symbolic execution with a notion of higher-order, symbolic values. Our approach is sound and relatively complete with respect to a first-order solver for base type values. Therefore, it can form the basis of automated verification and bug-finding tools for higher-order programs. To validate our approach, we use it to develop and evaluate a system for verifying and refuting behavioral software contracts of components in a functional language, which we call soft contract verification. In doing so, we discover a mutually beneficial relation between behavioral contracts and higher-order symbolic execution. Our system uses higher-order symbolic execution, leveraging contracts as a source of symbolic values including unknown behavioral values, and employs an updatable heap of contract invariants to…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
