posted on 2004-10-01, 00:00authored byDaniel R. Licata, Noam Zeilberger, Robert Harper
Variable binding is a prevalent feature of the syntax and proof theory of many logical systems. In this paper,
we define a programming language that provides intrinsic support for both representing and computing with
binding. This language is extracted as the Curry-Howard interpretation of a focused sequent calculus with
two kinds of implication, of opposite polarity. The representational arrow extends systems of definitional
reflection with the notion of a scoped inference rule, which permits the adequate representation of binding
via higher-order abstract syntax. On the other hand, the usual computational arrow classifies recursive
functions over such higher-order data. Unlike many previous approaches, both binding and computation can
mix freely. Following Zeilberger [POPL 2008], the computational function space admits a form of openendedness,
in that it is represented by an abstract map from patterns to expressions. As we demonstrate
with Coq and Agda implementations, this has the important practical benefit that we can reuse the pattern
coverage checking of these tools.