Logic Continuations

There is a striking analogy between type raising, as introduced by Montague (1973), and the notion of continuation that has been developped in programming language theory in order to give compositional semantics to control operators (Stratchey and Wadsworth, 1974). In fact, this analogy is such that it is possible to see Montague’s semantics as a continuation based semantics. On the other hand, the notion of continuation allows classical logic to be given a Curry-Howard interpretation (Griffin 1990). In particular, the double negation law ((A → ⊥) → ⊥) → A is provided with a computational content, which may be used to give a type logical interpretation of type lowering. Putting the pieces of the picture together, it is possible to use “classical extensions” of the λ-calculus in order to express the semantic components of the lexical entries of Morrill’s (1994) type logical grammars. This solution offers the advantage of not burdening the syntax by enforcing type raising to the worst case. 1 Type raising and continuations Montague (1973) introduced type raising as a way of providing a compositional semantics to constructs that may give rise to scope ambiguities. Such constructs (typically, quantifiers) have semantic scopes that may be wider than their apparent syntactic scopes. Around the same time, computer scientists were trying to provide a compositional semantics to full jumps (i.e., ‘goto’ statements), which led to the discovery of continuations (Stratchey and Wadsworth, 1974). Both problems are similar, and both solutions present striking similitudes. Montague’s type raising is based on Leibniz’s principle, which consists of identifying an entity with the set of its properties. Consequently, the type of entities e is replaced by (e → t) → t, where t is the type of propositions. In programming language theory, a continuation semantics (as opposed to a direct semantics) consists in providing the semantic function with the continuation of the program as an explicit parameter. Let P be a program, let [[−]] be the semantic function, and let s be some initial state. If we consider programs as state transformers, a direct semantics is such that [[P ]] s ∈ State. On the other hand, a continuation semantics gives [[P ]] s ∈ (State → State) → State. In fact, in both cases (type raising and continuation semantics), a type A is replaced by a type (A → O) → O, where O is the type of observable entities or facts. 2 Negative translations and classical logic In the realm of the λ-calculus, the notion of continuation gave rise to the so-called CPS-transformations (Plotkin 1975). These are continuation-based syntactic transformations of the λ-terms that allow given evaluation strategies (typically, call-byname or call-by-value) to be simulated. For instance, Plotkin’s call-by-value CPS-transformation is as follows: c = λk. k c;