English

Manifest Contracts with Intersection Types

Programming Languages 2019-09-06 v2

Abstract

We present a manifest contract system PCFvΔ\DeltaH with intersection types. A manifest contract system is a typed functional calculus in which software contracts are integrated into a refinement type system and consistency of contracts is checked by combination of compile- and run-time type checking. Intersection types naturally arise when a contract is expressed by a conjunction of smaller contracts. Run-time contract checking for conjunctive higher-order contracts in an untyped language has been studied but our typed setting poses an additional challenge due to the fact that an expression of an intersection type τ1τ2\tau_1 \wedge \tau_2 may have to perform different run-time checking whether it is used as τ1\tau_1 or τ2\tau_2. We build PCFvΔ\DeltaH on top of the Δ\Delta-calculus, a Church-style intersection type system by Liquori and Stolze. In the Δ\Delta-calculus, a canonical expression of an intersection type is a strong pair, whose elements are the same expressions except for type annotations. To address the challenge above, we relax strong pairs so that expressions in a pair are the same except for type annotations and casts, which are a construct for run-time checking. We give a formal definition of PCFvΔ\DeltaH and show its basic properties as a manifest contract system: preservation, progress, and value inversion. Furthermore, we show that run-time checking does not affect essential computation.

Cite

@article{arxiv.1908.03010,
  title  = {Manifest Contracts with Intersection Types},
  author = {Yuki Nishida and Atsushi Igarashi},
  journal= {arXiv preprint arXiv:1908.03010},
  year   = {2019}
}
R2 v1 2026-06-23T10:42:50.888Z