Learn More
We present <i>Logically Qualified Data Types</i>, abbreviated to <i>Liquid Types</i>, a system that combines <i>Hindley-Milner</i> type inference with <i>Predicate Abstraction</i> to automatically infer dependent types precise enough to prove a variety of safety properties. Liquid types allow programmers to reap many of the benefits of dependent types,(More)
In this paper, we formalize mutual summaries as a contract mechanism for comparing two programs, and provide a method for checking such contracts modularly. We show that mutual summary checking generalizes equivalence checking, conditional equivalence checking and translation validation. More interestingly, it enables comparing programs where the changes(More)
In this paper, we describe SymDiff, a language-agnostic tool for equivalence checking and displaying semantic (behavioral) differences over imperative programs. The tool operates on an intermediate verification language Boogie, for which translations exist from various source languages such as C, C# and x86. We discuss the tool and the front-end interface(More)
In this paper, we present a general framework for modularly comparing two (imperative) programs that can leverage single-program verifiers based on automated theorem provers. We formalize (i) mutual summaries for comparing the summaries of two programs, and (ii) relative termination to describe conditions under which two programs relatively terminate. The(More)
Shared memory multithreading is a popular approach to parallel programming, but also fiendishly hard to get right. We present <i>Liquid Effects</i>, a type-and-effect system based on refinement types which allows for fine-grained, low-level, shared memory multi-threading while statically guaranteeing that a program is deterministic. Liquid Effects records(More)
We present Dsolve, a verification tool for OCaml. Dsolve automates verification by inferring " Liquid " refinement types that are expressive enough to verify a variety of complex safety properties. 1 Overview Refinement types are a means of expressing rich program invariants by combining classical types with logical predicates. For example, using refinement(More)
  • 1