Combining proofs and programs in a dependently typed language

16Citations
Citations of this article
9Readers
Mendeley users who have this article in their library.

Abstract

Most dependently-typed programming languages either require that all expressions terminate (e.g. Coq, Agda, and Epigram), or allow infinite loops but are inconsistent when viewed as logics (e.g. Haskell, ATS, mega). Here, we combine these two approaches into a single dependently-typed core language. The language is composed of two fragments that share a common syntax and overlapping semantics: a logic that guarantees total correctness, and a call-by-value programming language that guarantees type safety but not termination. The two fragments may interact: logical expressions may be used as programs; the logic may soundly reason about potentially nonterminating programs; programs can require logical proofs as arguments; and mobile program values, including proofs computed at runtime, may be used as evidence by the logic. This language allows programmers to work with total and partial functions uniformly, providing a smooth path from functional programming to dependently-typed programming.

Cite

CITATION STYLE

APA

Casinghino, C., Sjöberg, V., & Weirich, S. (2014). Combining proofs and programs in a dependently typed language. In ACM SIGPLAN Notices (Vol. 49, pp. 33–45). https://doi.org/10.1145/2578855.2535883

Register to see more suggestions

Mendeley helps you to discover research relevant for your work.

Already have an account?

Save time finding and organizing research with Mendeley

Sign up for free