English

Refinements of Futures Past: Higher-Order Specification with Implicit Refinement Types (Extended Version)

Programming Languages 2021-05-06 v1

Abstract

Refinement types decorate types with assertions that enable automatic verification. Like assertions, refinements are limited to binders that are in scope, and hence, cannot express higher-order specifications. Ghost variables circumvent this limitation but are prohibitively tedious to use as the programmer must divine and explicate their values at all call-sites. We introduce Implicit Refinement Types which turn ghost variables into implicit pair and function types, in a way that lets the refinement typechecker automatically synthesize their values at compile time. Implicit Refinement Types further take advantage of refinement type information, allowing them to be used as a lightweight verification tool, rather than merely as a technique to automate programming tasks. We evaluate the utility of Implicit Refinement Types by showing how they enable the modular specification and automatic verification of various higher-order examples including stateful protocols, access control, and resource usage.

Keywords

Cite

@article{arxiv.2105.01954,
  title  = {Refinements of Futures Past: Higher-Order Specification with Implicit Refinement Types (Extended Version)},
  author = {Anish Tondwalkar and Matthew Kolosick and Ranjit Jhala},
  journal= {arXiv preprint arXiv:2105.01954},
  year   = {2021}
}

Comments

To appear at the 35th European Conference on Object-Oriented Programming (ECOOP 2021) Artifact available at: https://github.com/ucsd-progsys/mist/tree/ecoop21

R2 v1 2026-06-24T01:47:44.979Z