Semantic subtyping with an smt solver

  • Authors:
  • Gavin m. Bierman;Andrew d. Gordon;Cătălin Hriţcu;David Langworthy

  • Affiliations:
  • Microsoft research, cambridge, uk (e-mail: gmb@microsoft.com, adg@microsoft.com);Microsoft research, cambridge, uk (e-mail: gmb@microsoft.com, adg@microsoft.com);Saarland university and university of pennyslvania, philadelphia, pa, usa (e-mail: catalin.hritcu@gmail.com);Microsoft corporation, redmond, wa (e-mail: dlan@microsoft.com)

  • Venue:
  • Journal of Functional Programming
  • Year:
  • 2012

Quantified Score

Hi-index 0.00

Visualization

Abstract

We study a first-order functional language with the novel combination of the ideas of refinement type (the subset of a type to satisfy a Boolean expression) and type-test (a Boolean expression testing whether a value belongs to a type). Our core calculus can express a rich variety of typing idioms; for example, intersection, union, negation, singleton, nullable, variant, and algebraic types are all derivable. We formulate a semantics in which expressions denote terms, and types are interpreted as first-order logic formulas. Subtyping is defined as valid implication between the semantics of types. The formulas are interpreted in a specific model that we axiomatize using standard first-order theories. On this basis, we present a novel type-checking algorithm able to eliminate many dynamic tests and to detect many errors statically. The key idea is to rely on a Satisfiability Modulo Theories solver to compute subtyping efficiently. Moreover, using a satisfiability modulo theories solver allows us to show the uniqueness of normal forms for non-deterministic expressions, provide precise counterexamples when type-checking fails, detect empty types, and compute instances of types statically and at run-time.