[Math] [solved] sequent calculus as programming language

lambda-calculuslo.logicreference-request

intuitionistic logic ~ programming

natural deduction ~ lambda-calculus

Hilbert system ~ combinatory logic {S, K}

Gentzen system=sequent calculus ~ ?

What would you write in place of the question mark?

Update 0: Common mathematical tree notation for proofs is too cumbersome and redundant. I need a language as compact as e.g.:


data Proof = Apply Proof Proof | S | K {- Haskell, combinatory logic -}

Update 1: After following the links suggested by commentators I found this perfectly concrete and accessible article: "Hugo Herbelin. A Lambda-calculus Structure Isomorphic to Gentzen-style Sequent Calculus Structure." There, "?" language is named "the usual interpretation of LJ cut-free proofs by normal lambda-terms", i.e. is made out of lambda-calculus.

Best Answer

There is no single answer to this question, because of the high degree of nondeterminism inherent in the sequent calculus -- to get a computational interpretation, you need to resolve the ambiguity, and each way of doing so leads to different operational interpretations. Furthermore, the answers differ somewhat for classical and intuitionistic sequent calculi.

Proof term assignments for classical sequent calculi correspond closely to continuation calculi, such as Herbelin's $\lambda\mu$ calculus. Now continuation transforms correspond to double-negation translations of classical logic into intuitionistic logic, and of there are many different double-negation translations possible. Each choice of double-negation translation gives rise to a different evaluation order, which explains why they are so valuable for the study for abstract machines (as in supercooldave's link) -- you can get the benefits of studying different evaluation orders via CPS transforms, without having to code everything up in functions.

Now, you can also try to eliminate the nondeterminism in another way: by fiat. This relies upon Andreoli's idea of focusing for linear logic. In operational terms, the idea is to define logical connectives either in terms of their values, or their elimination forms (this is called polarity). After picking one, the other is determined by the need to satisfy cut-elimination. For linear logic, each of the connectives has unique polarity. For classical logic, every connective can be given either polarity (ie, every connective can be defined either in terms of values or continuations), and the choice of polarities for the connectives essentially determines the evaluation order. This is very well explained in Noam Zeilberger's PhD thesis, http://www.cs.cmu.edu/~noam/thesis.pdf.

For intuitionistic sequent calculi, the proof term assignments still have a lot of nondeterminism in them. When you resolve this through focalization, you find that the resulting calculi are pattern matching calculi. A beautiful abstract take on this is also in Noam's thesis, and I wrote a very concrete paper about this for POPL 2009, "Focusing on Pattern Matching", which showed how to explain Haskell/ML style pattern matching in terms of proof term assignments for focused sequent calculi.