Refinement Reflection: Complete Verification with SMT

11/09/2017
by   Niki Vazou, et al.
0

We introduce Refinement Reflection, a new framework for building SMT-based deductive verifiers. The key idea is to reflect 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 instantiated in the SMT logic in a precise fashion that permits decidable verification. Reflection allows the user to write equational proofs of programs just by writing other programs using pattern-matching and recursion to perform case-splitting and induction. Thus, via the propositions-as-types principle, we show that reflection permits the specification of arbitrary functional correctness properties. Finally, we introduce a proof-search algorithm called Proof by Logical Evaluation that uses techniques from model checking and abstract interpretation, to completely automate equational reasoning. We have implemented reflection in Liquid Haskell and used it to verify that the widely used instances of the Monoid, Applicative, Functor, and Monad typeclasses actually satisfy key algebraic laws required to make the clients safe, and have used reflection to build the first library that actually verifies assumptions about associativity and ordering that are crucial for safe deterministic parallelism.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
08/07/2017

Deriving Law-Abiding Instances

Liquid Haskell's refinement-reflection feature augments the Haskell lang...
research
11/25/2017

Refinement Types for Ruby

Refinement types are a popular way to specify and reason about key progr...
research
03/17/2018

Meta-F*: Proof Automation with SMT, Tactics, and Metaprograms

Scripting proofs with tactics has been a tradition in interactive theore...
research
10/09/2021

Toward Hole-Driven Development with Liquid Haskell

Liquid Haskell is an extension to the Haskell programming language that ...
research
12/31/2018

Generic Programming in OCaml

We present a library for generic programming in OCaml, adapting some tec...
research
06/24/2017

Local Refinement Typing

We introduce the Fusion algorithm for local refinement type inference, y...
research
05/10/2021

Identifying Overly Restrictive Matching Patterns in SMT-based Program Verifiers

Universal quantifiers occur frequently in proof obligations produced by ...

Please sign up or login with your details

Forgot password? Click here to reset