Abstract Refinement Types

Niki Vazou, Patrick Rondon, Ranjit Jhala.

We present abstract refinement types which enable quantification over the refinements of data- and function-types. Our key insight is that we can avail of quantification while preserving SMT-based decidability, simply by encoding refinement parameters as uninterpreted propositions within the refinement logic. We illustrate how this mechanism yields a variety of sophisticated means for reasoning about programs, including: parametric refinements for reasoning with type classes, index-dependent refinements for reasoning about key-value maps, recursive refinements for reasoning about recursive data types, and inductive refinements for reasoning about higher-order traversal routines. We have implemented our approach in a refinement type checker for Haskell, and present experiments using our tool to verify correctness invariants of various programs.

22nd European Symposium on Programming, (ESOP 2013).


Online Demo PostScript PDF © 2013.