pith. sign in

arxiv: 1610.04641 · v1 · pith:72ADNURCnew · submitted 2016-10-14 · 💻 cs.PL · cs.LO

Refinement Reflection (or, how to turn your favorite language into a proof assistant using SMT)

classification 💻 cs.PL cs.LO
keywords functionrefinementassistantlanguageprooffavoritefunctionshaskell
0
0 comments X
read the original abstract

Refinement Reflection turns your favorite programming language into a proof assistant by reflecting the code implementing a user-defined function into the function's (output) refinement type. As a consequence, at uses of the function, the function definition is unfolded into the refinement logic in a precise, predictable and most importantly, programmer controllable way. In the logic, we encode functions and lambdas using uninterpreted symbols preserving SMT-based decidable verification. In the language, we provide a library of combinators that lets programmers compose proofs from basic refinements and function definitions. We have implemented our approach in the Liquid Haskell system, thereby converting Haskell into an interactive proof assistant, that we used to verify a variety of properties ranging from arithmetic properties of higher order, recursive functions to the Monoid, Applicative, Functor and Monad type class laws for a variety of instances.

This paper has not been read by Pith yet.

discussion (0)

Sign in with ORCID, Apple, or X to comment. Anyone can read and Pith papers without signing in.