Structural Cut Elimination I: Intuitionistic and Classical Logic^{∗}

Frank Pfenning Department of Computer Science Carnegie Mellon University November 1994, revised Octover 1995

Abstract We present new variants of known proofs of cut elimination for intuitionistic and classical sequent calculi. In both cases the proofs proceed by three nested structural inductions, avoiding the explicit use of multi-sets and termination measures on sequent derivations. This makes them amenable to elegant and concise representations in LF, which are given in full detail.

Contents

1 Introduction 1 2 Intuitionistic Sequent Calculus 2 3 Proof Terms for the Sequent Calculus 9 4 Representing Sequent Derivations in LF 11 5 Admissibility of Cut 14 6 Extension to Classical Logic 19 7 Conclusion 25 A Detailed Admissibility Proofs for Cut 27

A.1 Intuitionistic Calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 A.2 Classical Calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

B Cut Elimination 56 B.1 Intuitionistic Calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 B.2 Classical Calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Acknowledgments 63 References 63

∗This work was supported by NSF Grant CCR-9303383

1 Introduction

Gentzen’s sequent calculi [Gen35] for intuitionistic and classical logic have been the central tool in many proof-theoretical investigations and applications of logic in computer science such as logic programming (e.g. [MNPS91]) or automated theorem proving (e.g. [Wal90]). The central property of sequent calculi is cut elimination (Gentzen’s Hauptsatz) which yields consistency of the logic as a corollary. The algorithm for cut elimination may be interpreted computationally, similar to the way that normalization for natural deduction may be viewed as functional computation. For the case of linear logic, this point was made by Girard [Gir87] and later elaborated by Abramsky [Abr93]; see also [Gal93] for a tutorial introduction.

Many proofs of cut elimination have been given in the literature (see, for example, [ML68, Sch77, Dra87, Her95]) yet, to our knowledge, none of them have been formalized even though this is clearly possible in principle (see, for example, Matthews [Mat94] pencil-and-paper analysis of cut elimination for the (∨, ¬) fragment of classical propositional logic in F S_{0}). They are difficult to mechanize for a number of reasons which in combination are quite intimidating. Most proofs require tedious data structures (such as multi-sets) and use complex termination measures. They also involve global conditions on occurrences of parameters in sequent derivations. In this paper we present new proofs of cut elimination for intuitionistic and classical sequent calculi and give their representations in the logical framework LF [HHP93] as implemented in the Elf system [Pfe91]. Multi-sets are avoided altogether in these proofs, and termination measures are replaced by three nested structural inductions. Parameters are treated as variables bound in derivations, thus naturally capturing occurrence conditions. Starting point for the proofs is Kleene’s sequent system G_{3} [Kle52], which we derive systematically from the point of view that a sequent calculus should be a calculus of proof search for natural deductions. It can easily be related to Gentzen’s original and other sequent calculi. We augment G_{3} with proof terms that are stable under weakening. These proof terms enable the structural induction and furthermore form the basis of the representation of the proof in LF.

The most closely related work on cut elimination is Martin-Löf’s proof of admissibility [ML68]. In Martin-Löf’s system the cut rule incorporates aspects of both weakening and contraction which enables a structural induction argument closely related to ours. However, without the introduction of proof terms, the implicit weakening in the cut rule makes it difficult to implement this proof directly. Herbelin [Her95] restates this proof and proceeds by assigning proof terms only to restricted sequent calculi LJT and LKT which correspond more immediately to λ-calculi for intuitionistic and classical natural deduction [Par92].

The reader interested in structural cut elimination for intuitionistic or classical logic, but not its formalization, should be able to follow this paper by ignoring the material regarding its implementation. In order to understand and appreciate the representation of the sequent calculus and the proof of cut elimination the reader should have a basic knowledge of the representation methodology of LF and the Elf meta-language; the interested reader is referred to [HHP93] and [MP91, Pfe91].

The remainder of the paper is organized as follows. In Section 2 we introduce a formulation of the intuitionistic sequent calculus motivated from natural deduction. In Section 3 we give a notation for proof terms that record the structure of the sequent derivation. This is an important intermediate step towards the representation of sequents in LF shown in Section 4. The proof of admissibility of cut in the intuitionistic sequent calculus and its implementation are the subject of Section 5. In Section 6 we extend these results to the classical case. We conclude with an assessment and some remarks about future work in Section 7. In Appendices A.1 (intuitionistic) and A.2 (classical) we give the complete implementations of admissibility of cut in Elf together with an automatically generated informal version of each case in the proof. Appendix B gives a formulation of cut elimination as a translation from a sequent calculus with cut to a sequent calculus without cut. For both, intuitionistic and classical logic, this is a direct corollary of the admissibility of cut in the corresponding cut-free system.

2 Intuitionistic Sequent Calculus

Logical frameworks such as hereditary Harrop formulas [MNPS91] and LF [HHP93] are inherently biased towards natural deduction because of the strong correspondence between natural deductions and the typed λ-expressions used for their representation. Finding an elegant encoding of sequents and sequent derivations in a logical framework is therefore the first critical issue in an implementation of a proof of cut elimination. Felty’s representation [Fel89] in λProlog, for example, uses lists of hypotheses which is advantageous for search but makes a formal meta-theory prohibitively complex. Frameworks based on sequent calculi such as LU [Gir93] or Forum [Mil94] allow direct encodings, but they lack a notation for the proof terms that are required to describe cut elimination.

In this section we develop a formulation of the sequent calculus for intuitionistic logic by transcribing the process of searching for a natural deduction into an inference system. The proximity to natural deduction then allows a high-level encoding of sequent derivations in LF. The resulting sequent calculus is basically Kleene’s system G_{3} [Kle52] which he introduced to obtain a simple decidability proof for its propositional fragment. We assume familiarity with natural deduction.

We consider a complete set of logical connectives and quantifiers so that we do not miss any important issues. Atomic formulas p(t_{1}, …, t_{n}) for first-order terms t_{1}, …, t_{n} are denoted by P.

Formulas A ::= P | A_{1} ∧ A_{2} | A_{1} ⊃ A_{2} | A_{1} ∨ A_{2} | ¬A | ⊤ | ⊥ | ∀x. A | ∃x. A

The notions of free and bound variable are defined as usual. We identify formulas that differ only in the names of their bound variables and write [t/x]A for capture-avoiding substitution of t for x in A. We use A, B, and C to range over formulas.

The main judgment of natural deduction is derivability of a formula A, written as ⊢ A, but we follow custom and mostly omit the turnstile in the presentation. In natural deduction the meaning of each logical connective or quantifier is given by introduction and elimination rules. The introduction rule specifies how to infer a formula with a given principal connective. The elimination rule specifies how we may use an assumption with a given principal connective. During search for a natural deduction our goal is to deduce C from hypotheses A_{1}, …, A_{n}. We may take four kinds of actions.

1. We may solve the goal immediately when a hypothesis A_{i} is equal to C.

2. We may use an introduction rule to infer C. Each premise yields a new subgoal.

3. We may apply an elimination rule to a hypothesis A_{i}. Typically, this yields a new subgoal with an additional hypothesis.

4. We may introduce a lemma into the derivation.

We also observe from the nature of hypothetical reasoning:

1. The order in which hypotheses are assumed is irrelevant.

2. Hypotheses may be used arbitrarily often.

3. Hypothesis need not be used.

We abbreviate hypotheses A_{1}, …, A_{n} by Γ. Since the order of hypothesis is irrelevant we write Γ = Γ′, A if A occurs in Γ and Γ′ consists of the remaining hypotheses. Note that the same hypothesis may occur more than once.

A sequent Γ ⟶ C is a judgment representing the goal of deriving C from Γ. A derivation of Γ ⟶ C represents a trace of a particular successful search, although in this paper we do not show the routine extraction of a natural deduction C from a sequent derivation. The proof search actions listed above give rise to various inference rules for the sequent calculus. Using our obervations about natural deduction we eliminate all structural rules from Gentzen’s system by building them into each rule. Intuitively, weakening is incorporated into initial sequents and contraction is built into each left rule. Exchange remains implicit in the notation Γ, A.

Initial Sequents. The goal may be solved immediately when a hypothesis A matches the conclusion. In sequent form:

\frac{I}{Γ, A ⟶ A}

Introduction rules are used to reason backwards from the conclusion during search for a natural deduction. Consequently, they apply to the formula on the right-hand side of the sequent arrow. Dually, elimination rules are used to reason forward from hypotheses and thus apply to a formula on the left-hand side of the sequent arrow. Therefore, the sequent rules for each connective can be divided into right and left rules. We examine each of the connectives and quantifiers, showing the introduction and elimination and corresponding right and left sequent rules.

Conjunction. The introduction/right rules are straightforward.

\begin{aligned}A  B \\ & ∧I \\ A ∧ B \end{aligned}  \begin{aligned}Γ ⟶ A  Γ ⟶ B \\ & ∧R \\ Γ ⟶ A ∧ B \end{aligned}

For the elimination/left rules we have to remember to keep the hypothesis A ∧ B, since hypotheses may be used arbitrarily often in a natural deduction.

\begin{aligned}A ∧ B \\ & ∧E_{L} \\ A \end{aligned}  \begin{aligned}Γ, A ∧ B, A ⟶ C \\ & ∧L_{1} \\ Γ, A ∧ B ⟶ C \end{aligned}

\begin{aligned}A ∧ B \\ & ∧E_{R} \\ B \end{aligned}  \begin{aligned}Γ, A ∧ B, B ⟶ C \\ & ∧L_{2} \\ Γ, A ∧ B ⟶ C \end{aligned}

Implication. The premise of the introduction rule for an implication A ⊃ B is a judgment hypothetical in A labelled u. The hypothesis is discharged at this inference which we indicate by a superscript on the instance of the inference rule. In the sequent formulation on the right, we add A to Γ: we have reduced the goal of deriving A ⊃ B from Γ to the goal of deriving B from Γ and A.

\frac{u}{A} ; ⋮ ; B ; ⊃I^{u} ; A ⊃ B  \begin{aligned}Γ, A ⟶ B \\ & ⊃R \\ Γ ⟶ A ⊃ B \end{aligned}

If we have an implication A ⊃ B as a hypothesis while deriving C we use it by proving A (from the same hypotheses) and then assuming B as additional hypothesis for proving C.

\begin{aligned}A ⊃ B  A \\ & ⊃E \\ B \end{aligned}  \begin{aligned}Γ, A ⊃ B ⟶ A  Γ, A ⊃ B, B ⟶ C \\ & ⊃L \\ Γ, A ⊃ B ⟶ C \end{aligned}

In order to maintain the correspondence to natural deduction it is important to copy the implicational assumption A ⊃ B to both premises, even though it is redundant in the right premise.

Disjunction. There are two introduction rules for disjunction in natural deduction and consequently two right rules for disjunction in the sequent calculus.

\begin{aligned}A \\ & ∨I_{L} \\ A ∨ B \end{aligned}  \begin{aligned}Γ ⟶ A \\ & ∨R_{1} \\ Γ ⟶ A ∨ B \end{aligned}

\begin{aligned}B \\ & ∨I_{R} \\ A ∨ B \end{aligned}  \begin{aligned}Γ ⟶ B \\ & ∨R_{2} \\ Γ ⟶ A ∨ B \end{aligned}

The elimination rule for disjunction explicitly refers to a conclusion C and is thus already closer to a sequent rule.

\begin{matrix}A ∨ B \frac{u_{1}}{A} ; ⋮ ; C  \frac{u_{2}}{B} ; ⋮ ; C \\ ∨E^{u_{1},u_{2}} \\ C \end{matrix} \begin{aligned}Γ, A ∨ B, A ⟶ C  Γ, A ∨ B, B ⟶ C \\ & ∨L \\ Γ, A ∨ B ⟶ C \end{aligned}

Negation. Negation in intuitionistic natural deduction is usually explained by considering ¬A as an abbreviation of A ⊃ ⊥. In sequent calculi, on the other hand, it is modeled by an empty right-hand side. These do not correspond so we need to find another formulation for negation. The goal is to find an introduction rule for ¬A that does not require another logical symbol (such as ⊥). We use the idea of a judgment parametric in a propositional variable p to achieve this. For the sequent calculus this means that p may not occur in Γ or A.

\frac{u}{A} ; ⋮ ; p ; ¬I^{p,u} ; ¬A  \begin{aligned}Γ, A ⟶ p \\ & ¬R^{p} \\ Γ ⟶ ¬A \end{aligned}

The elimination rule is simpler.

\begin{aligned}¬A  A \\ & ¬E \\ C \end{aligned}  \begin{aligned}Γ, ¬A ⟶ A \\ & ¬L \\ Γ, ¬A ⟶ C \end{aligned}

It may not be obvious at first, but the introduction and elimination rule (and also the left and right rules) match up precisely. We will see this in the proof of cut-elimination.

Truth. There is only an introduction rule for ⊤ in natural deduction. Correspondingly, we only have a right rule in the sequent calculus.

\frac{⊤I}{⊤}  \frac{⊤R}{Γ ⟶ ⊤}

Falsehood. Dually, there is only an elimination and corresponding left rule for ⊥.

\begin{aligned}⊥ \\ & ⊥E \\ C \end{aligned}  \frac{⊥L}{Γ, ⊥ ⟶ C}

Universal Quantification. Universal quantification employs an individual parameter. In the sequent calculus, this means that the parameter a must be new, that is, it may not appear in Γ or ∀x. A.

\begin{aligned}[a/x]A \\ & ∀I^{a} \\ ∀x. A \end{aligned}  \begin{aligned}Γ ⟶ [a/x]A \\ & ∀R^{a} \\ Γ ⟶ ∀x. A \end{aligned}

In the elimination rule we substitute an arbitrary term t for a universally quantified variable x. This substitution may need to rename bound variables so that no variable free in t is captured by a quantifier in A.

\begin{aligned}∀x. A \\ & ∀E \\ [t/x]A \end{aligned}  \begin{aligned}Γ, ∀x. A, [t/x]A ⟶ C \\ & ∀L \\ Γ, ∀x. A ⟶ C \end{aligned}

In the customary notation for this elimination and right rules, the term t is not uniquely determined if x does not occur free in A. In the proof term calculus in Section 3 we make sure that t occurs explicitly in order to avoid potential ambiguities.

Existential Quantification. The introduction/right rules are straightforward.

\begin{aligned}[t/x]A \\ & ∃I \\ ∃x. A \end{aligned}  \begin{aligned}Γ ⟶ [t/x]A \\ & ∃R \\ Γ ⟶ ∃x. A \end{aligned}

The apparent complexity of the elimination rule vanishes when viewed in the sequent calculus. Once again, a must be a new parameter, that is, it may not occur in Γ, ∃x. A, or C.

\begin{aligned}∃x. A  \frac{u}{[a/x]A} ; ⋮ ; C \\ & ∃E^{a,u} \\ C \end{aligned}  \begin{aligned}Γ, ∃x. A, [a/x]A ⟶ C \\ & ∃L^{a} \\ Γ, ∃x. A ⟶ C \end{aligned}

Lemma Introduction. Introducing a lemma A during the search for a natural deduction corresponds directly to the cut rule in the sequent calculus: in order to derive C from Γ we derive A and show that with the additional hypothesis A we can derive C.

Γ ⟶ A Γ, A ⟶ C

Cut Γ ⟶ C

The theorem of cut elimination states that every sequent Γ ⟶ C that is derivable in the system with cut, can also be derived in the system without cut. An equivalent, but slightly more convenient way of stating this is that cut is admissible in the system without cut, that is, whenever we can derive the premisses of this rule without using cut, we can also derive the conclusion without using cut. We concentrate our development on admissibility of cut and relegate cut elimination in the sense of Gentzen to Appendix B.

We summarize the rules for the cut-free calculus G_{3}. They are sound and complete in the usual sense, which can easily be shown by relating them to Gentzen’s sequent calculus or to natural deduction (see Theorem 2).

\frac{I}{Γ, A ⟶ A}

\begin{aligned}Γ ⟶ A  Γ ⟶ B \\ & ∧R \\ Γ ⟶ A ∧ B \end{aligned}  \begin{aligned}Γ, A ∧ B, A ⟶ C \\ & ∧L_{1} \\ Γ, A ∧ B ⟶ C \end{aligned} ; \begin{aligned}Γ, A ∧ B, B ⟶ C \\ & ∧L_{2} \\ Γ, A ∧ B ⟶ C \end{aligned}

\begin{aligned}Γ, A ⟶ B \\ & ⊃R \\ Γ ⟶ A ⊃ B \end{aligned}  \begin{aligned}Γ, A ⊃ B ⟶ A  Γ, A ⊃ B, B ⟶ C \\ & ⊃L \\ Γ, A ⊃ B ⟶ C \end{aligned}

\begin{aligned}Γ ⟶ A \\ & ∨R_{1} \\ Γ ⟶ A ∨ B \end{aligned} ; \begin{aligned}Γ ⟶ B \\ & ∨R_{2} \\ Γ ⟶ A ∨ B \end{aligned}  \begin{aligned}Γ, A ∨ B, A ⟶ C  Γ, A ∨ B, B ⟶ C \\ & ∨L \\ Γ, A ∨ B ⟶ C \end{aligned}

\begin{aligned}Γ, A ⟶ p \\ & ¬R^{p} \\ Γ ⟶ ¬A \end{aligned}  \begin{aligned}Γ, ¬A ⟶ A \\ & ¬L \\ Γ, ¬A ⟶ C \end{aligned}

\frac{⊤R}{Γ ⟶ ⊤} ; \frac{⊥L}{Γ, ⊥ ⟶ C}

\begin{aligned}Γ ⟶ [a/x]A \\ & ∀R^{a} \\ Γ ⟶ ∀x. A \end{aligned}  \begin{aligned}Γ, ∀x. A, [t/x]A ⟶ C \\ & ∀L \\ Γ, ∀x. A ⟶ C \end{aligned}

\begin{aligned}Γ ⟶ [t/x]A \\ & ∃R \\ Γ ⟶ ∃x. A \end{aligned}  \begin{aligned}Γ, ∃x. A, [a/x]A ⟶ C \\ & ∃L^{a} \\ Γ, ∃x. A ⟶ C \end{aligned}

The principal formula of an inference is either the formula being introduced on the left or the right, or the formula occurring on the left and the right in an initial sequent. All other formulas are side formulas of the last inference. These notions also apply to individual formula occurrences.

The system without cut is easily seen to be consistent, since there is no rule with which one could infer the sequent ⟶ ⊥. In terms of natural deduction this means that introducing a lemma during search is never necessary: If there is a deduction of C from hypotheses Γ we can find it by using only introduction rules reasoning backwards from C and using only elimination rules reasoning forward from the hypothesis Γ. This yields consistency of natural deduction as an easy corollary, since there is no introduction rule for ⊥.

Our formulation of the sequent calculus has the following elementary properties. It is not important for our main development, but these properties also hold for the system with the cut rule.

Lemma 1 (Elementary Properties of Sequent Calculus)

1. (Weakening) If Γ ⟶ C then Γ, A ⟶ C.

2. (Contraction) If Γ, A, A ⟶ C then Γ, A ⟶ C.

3. (Term Substitution) If Γ ⟶ C with free individual parameter a then [t/a]Γ ⟶ [t/a]C for any term t.

4. (Formula Substitution) If Γ ⟶ C with free propositional parameter p then [A/p]Γ ⟶ [A/p]C for any formula A.

Proof: All are immediate by induction over the structure of the derivation of the assumption. In all cases the structure of the derivation is not changed—a property made explicit in Lemma 3. □

Now let Γ ⟶^{LJ^{−}} C stand for derivability in Gentzen’s sequent calculus LJ without cut (LJ^{−}), but augmented with rules for truth and falsehood. We can easily translate between derivations in LJ^{−} and G_{3} by removing or inserting instances of the structural rules in LJ^{−}. Empty right-hand sides as permitted in LJ present only a small complication.

Theorem 2 (Equivalence of G_{3} and LJ^{−})

1. Γ ⟶ C iff Γ ⟶^{LJ^{−}} C, and

2. Γ ⟶ p for a parameter p that does not occur in Γ iff Γ ⟶^{LJ^{−}} .

Proof: The proof in both directions proceeds by induction over the structure of the given derivation. We require weakening and contraction lemmas for G_{3} (Lemma 1) to model the structural rules of weakening and contraction in LJ. □

At this point we could define the size of a formula A as the number of its connectives and quantifiers, the length of a derivation as the number of inference rules it contains, and then prove the admissibility of cut in the cut-free system by three nested inductions over the size of the cut formula and the lengths of the derivations of Γ ⟶ A and Γ, A ⟶ C. However, such a proof is not well-suited for implementation. The first difficulty is the implementation of the sequent calculus itself and the notions of multi-set it requires. The second difficulty is that most proof checkers or theorem provers use structural induction more effectively than proofs with termination measures. We will return to both points in the next section.

A related proof idea is due to Martin-Löf [ML68, Her95]: We can simplify the induction argument if the cut rule itself incorporates aspects of both weakening and contraction. More precisely, for the intuitionistic calculus it has the form

Γ, Δ_{1} ⟶ A Γ, Δ_{2}, A ⟶ C Cut_{ML}.

Γ, Δ_{1}, Δ_{2} ⟶ C

In the top-down view of proof construction, this corresponds to permitting contraction of Γ when compared to Gentzen’s rule

Δ_{1} ⟶ A Δ_{2}, A ⟶ C Cut_{G}.

Δ_{1}, Δ_{2} ⟶ C

In the bottom-up view of proof construction, it corresponds to permitting weakening when compared to our rule

Γ ⟶ A Γ, A ⟶ C

Cut. Γ ⟶ C

The rule we have chosen follows directly from our intuition of sequent calculus as a calculus of proof search for natural deduction. It also seems the best basis for a natural and systematic proof term assignment and ultimately the representation of its admissibility proof in LF.

3 Proof Terms for the Sequent Calculus

The sequent rules as given so far do not preserve all the information present in a natural deduction. For example, the two different natural deductions of A⊃(A⊃A) below are mapped to same sequent derivation.

\frac{u}{A} ; ⊃I^{w} ; A ⊃ A ; ⊃I^{u} ; A ⊃ (A ⊃ A)  \frac{w}{A} ; ⊃I^{w} ; A ⊃ A ; ⊃I^{u} ; A ⊃ (A ⊃ A)  \frac{I}{A, A ⟶ A} ; ⊃R ; A ⟶ A ⊃ A ; ⊃R ; ⟶ A ⊃ (A ⊃ A)

In the sequent notation we cannot tell which of the two identical hypotheses was used in the initial sequent. If we are only interested in derivability (or truth), then this is tolerable. However, if we are interested in the structure of derivations such ambiguities should be resolved. Clearly, for many applications in computer science and, of course, also for the proof of cut elimination the structure of derivations is of central importance. We therefore endow sequent derivations with proof terms that resolve this kind of ambiguity. This is also an important intermediate step toward the representation of the rules in LF.

There are at least three distinct roles that proof terms may play for a sequent calculus, an issue recognized by Gallier [Gal93] and Breazu-Tannen et al. [BTKP93]. The most immediate perhaps is to annotate sequent derivations with λ-terms that represent the natural deductions they correspond to. The second is to think of proof terms as expressions in a programming language and view a sequent derivation as a typing derivation. The third is to view proof terms as a compact notation for sequent derivations from which they may essentially be reconstructed. This view is particularly useful for our endeavor, since the representation in a logical framework should also have this property.

The first step is to label hypotheses. The second is to record a proof term d on the right of the sequent arrow. A sequent then has the form Γ ⟶ d : A where Γ has the form h_{1}:A_{1}, …, h_{n}:A_{n}. We assume that all hypothesis labels in a context are distinct. In order to avoid confusion with similar, but subtly different proof term notations in the literature, we systematically introduce precisely one new proof term constructor for each inference rule of the sequent calculus and give each a descriptive name. Rules that introduce parameters or hypotheses bind variables at the level of proof terms—a phenomenon which should be familiar from the Curry-Howard isomorphism. The idea of higher-order abstract syntax (here applied to a syntax for proof terms) is to reduce all binding operators to one, namely λ. This makes it immediately syntactically apparent which variables are bound and where. We also indicate the “type” of bound variables: they may bind individuals (x:i), formulas (p:o) or hypotheses (h:A).

\frac{I}{Γ, h:A ⟶ axiom h : A}

\begin{aligned}Γ ⟶ d_{1} : A Γ ⟶ d_{2} : B \\ & ∧R \\ Γ ⟶ andr d_{1} d_{2} : A ∧ B \end{aligned}

Γ, h:A ∧ B, h_{1}:A ⟶ d : C ∧L_{1}

Γ, h:A ∧ B ⟶ andl_{1} (λh_{1}:A. d) h : C

Γ, h:A ∧ B, h_{2}:B ⟶ d : C ∧L_{2}

Γ, h:A ∧ B ⟶ andl_{2} (λh_{2}:B. d) h : C

\begin{aligned}Γ, h:A ⟶ d : B \\ & ⊃R \\ Γ ⟶ impr (λh:A. d) : A ⊃ B \end{aligned}  \begin{aligned}Γ, h:A ⊃ B ⟶ d_{1} : A  Γ, h:A ⊃ B, h_{2}:B ⟶ d_{2} : C \\ & ⊃L \\ Γ, h:A ⊃ B ⟶ impl d_{1} (λh_{2}:B. d_{2}) h : C \end{aligned}

Γ ⟶ d : A ∨R_{1}

Γ ⟶ orr_{1}^{B} d : A ∨ B

Γ ⟶ d : B ∨R_{2}

Γ ⟶ orr_{2}^{A} d : A ∨ B

\begin{aligned}Γ, h:A ∨ B, h_{1}:A ⟶ d_{1} : C Γ, h:A ∨ B, h_{2}:B ⟶ d_{2} : C \\ & ∨L \\ Γ, h:A ∨ B ⟶ orl (λh_{1}:A. d_{1}) (λh_{2}:B. d_{2}) h : C \end{aligned}

\begin{aligned}Γ, h:A ⟶ d : p \\ & ¬R^{p} \\ Γ ⟶ notr (λp:o. λh:A. d) : ¬A \end{aligned}  \begin{aligned}Γ, h:¬A ⟶ d : A \\ & ¬L \\ Γ, h:¬A ⟶ notl^{C} d h : C \end{aligned}

\frac{⊤R}{Γ ⟶ truer : ⊤}

\frac{⊥L}{Γ, h:⊥ ⟶ falsel^{C} h : C}

Γ ⟶ d : [a/x]A

∀R^{a} Γ ⟶ forallr (λa:i. d) : ∀x. A

Γ, h:∀x. A, h_{1}:[t/x]A ⟶ d : C

∀L Γ, h:∀x. A ⟶ foralll t (λh_{1}:[t/x]A. d) h : C

Γ ⟶ d : [t/x]A

∃R Γ ⟶ existsr t d : ∃x. A

Γ, h:∃x. A, h_{1}:[a/x]A ⟶ d : C

∃L^{a} Γ, h:∃x. A ⟶ existsl (λa:i. λh_{1}:[a/x]A. d) h : C

Cut is not included as a primitive rule of inference, but its proof term (see Appendix B.1) would once again only reflect the structure of the derivation.

Γ ⟶ d : A Γ, h:A ⟶ e : C

Cut Γ ⟶ cut d (λh:A. e) : C

Erasure of the proof terms from a sequent derivation in this calculus yields derivations from the rules given in the previous section. The proofs of the following properties are all immediate structural inductions. For typographical reasons we often write D :: (J) if D is a derivation of judgment J. The notion of substitution into a derivation should be self-explanatory, perhaps with the exception of [h_{1}/h_{2}]D, where h_{1}:A and h_{2}:A are hypotheses. Here we mean the result of erasing hypothesis h_{2} on the left-hand side of every sequent occurring in D and substituting h_{1} in every place where h_{2} occurs on the right-hand side of a sequent. This may require renaming some locally bound hypotheses to avoid capture of h_{1}. We write (D, h:A) for the result of adding hypothesis h:A to every sequent in D, possibly renaming parameters introduced in D so as not to conflict with parameters in A.

Lemma 3 (Basic Properties of Sequent Calculus with Proof Terms) The intuitionistic sequent calculus with proof terms satisfies the following properties.

1. (Weakening) If D :: (Γ ⟶ d : C) then (D, h:A) :: (Γ, h:A ⟶ d : C) where h is a new label.

2. (Contraction or Hypothesis Substitution) If D :: (Γ, h_{1}:A, h_{2}:A ⟶ d : C) then [h_{1}/h_{2}]D :: (Γ, h_{1}:A ⟶ [h_{1}/h_{2}]d : C).

3. (Term Substitution) If D :: (Γ ⟶ d : C) is a derivation with free individual parameter a then [t/a]D :: ([t/a]Γ ⟶ [t/a]d : [t/a]C).

4. (Formula Substitution) If D :: (Γ ⟶ d : C) is a derivation with free formula parameter p then [A/p]D :: ([A/p]Γ ⟶ [A/p]d : [A/p]C).

5. (Uniqueness) If D :: (Γ ⟶ d : C) and D′ :: (Γ ⟶ d : C′) then D = D′ and C = C′ (modulo variable renaming).

4 Representing Sequent Derivations in LF

In this section we briefly summarize the representation of formulas in LF using the idea of higherorder abstract syntax and show how the proof terms of the previous section can be converted to an adequate encoding of the sequent calculus. Readers interested primarily in the proof of cut elimination itself may safely skip this section.

For the sake of brevity we show the actual code in Elf [Pfe91], an implementation of LF which permits type declarations with implicit quantifiers. Elf also gives an operational interpretation to signatures as logic programs which will be of interest later in the implementation of cut elimination. First, the representation of formulas. The obvious representation function ⌜·⌝ is a compositional bijection between canonical (= long βη) LF objects of type o (in an appropriate context) and formulas (see [HHP93]). An important characteristic of this encoding (and the others we give below) is that variables of the object language are mapped to variables of the meta-language. Consequently, variables that are bound in the object language must be bound with corresponding scope in the meta-language.

i : type.  % individuals
o : type.  % formulas
and    : o -> o -> o.              true   : o.
imp    : o -> o -> o.              false  : o.

or     : o -> o -> o.              forall : (i -> o) -> o.
not    : o -> o.                   exists : (i -> o) -> o.

As an example, consider the formula

(∀x. (Ax ⊃ B)) ⊃ ((∃x. Ax) ⊃ B).

Here, A and B are meta-variables, and Ax indicates that A may contain free occurrences of x while B may not. In the LF meta-language, this is implemented by an explicit abstraction. Using infix notation (which is supported in Elf) the formula above is represented by

((forall [x:i] (A x imp B)) imp ((exists [x:i] A x) imp B).

in a context with A:i -> o and B:o. The concrete syntax [x:U] M stands for λx:U. M in the logical framework.

Before giving the signature for the sequent calculus we state the adequacy theorem since it is a useful guide in interpreting the declarations. We use ⊢^{LF} for derivability in LF under the signature consisting of the declarations yet to come. Assume we have a derivation

\begin{matrix}D \\ h_{1}:A_{1}, …, h_{n}:A_{n} ⟶ d : C \end{matrix}

with free individual parameters among a_{1}, …, a_{k} and propositional parameters among p_{1}, …, p_{m}. Its representation ⌜D⌝ is a canonical object M such that

a_{1}:i, …, a_{k}:i, p_{1}:o, … p_{m}:o, h_{1}:hyp ⌜A_{1}⌝, …, h_{n}:hyp ⌜A_{n}⌝ ⊢^{LF} M : conc ⌜C⌝,

where hyp and conc are type families indexed by formulas. We call the representation adequate if ⌜·⌝ is a bijection between cut-free sequent derivations and such well-typed canonical objects and if it is also compositional in sense that

⌜[t/a]D⌝ = [⌜t⌝/a]⌜D⌝,
⌜[C/p]D⌝ = [⌜C⌝/p]⌜D⌝,  and
⌜[h_{1}/h_{2}]D⌝ = [h_{1}/h_{2}]⌜D⌝.

One observes a strong similarity between the proof terms d and the representing LF objects M. In transcribing the proof terms into LF, we mainly have to take care to distinguish between hypotheses and conclusions via the type families hyp and conc. We do not give an explicit definition of ⌜D⌝— the declarations below and their correspondence to proof terms are suggestive so that the diligent reader should be able to write it out without any problems. Note that % begins a comment that extends to the end of the line, that {x:U}V is Elf’s concrete syntax for Πx:U. V, and that [x:U]M stands for λx:U. M. Most Π-quantifiers are left implicit and are reconstructed by Elf’s front end in proper dependency order and with their most general types.

hyp  : o -> type.  % Hypotheses (left)
conc : o -> type.  % Conclusion (right)
axiom : (hyp A -> conc A).
                                     andl1 : (hyp A -> conc C)

andr  : conc A                                -> (hyp (A and B) -> conc C).
         -> conc B
         -> conc (A and B).          andl2 : (hyp B -> conc C)
                                              -> (hyp (A and B) -> conc C).
impr  : (hyp A -> conc B)            impl  : conc A
         -> conc (A imp B).                   -> (hyp B -> conc C)
                                              -> (hyp (A imp B) -> conc C).
orr1  : conc A
         -> conc (A or B).           orl   : (hyp A -> conc C)
                                              -> (hyp B -> conc C)
orr2  : conc B                                -> (hyp (A or B) -> conc C).
         -> conc (A or B).
notr  : ({p:o} hyp A -> conc p)      notl  : conc A
         -> conc (not A).                     -> (hyp (not A) -> conc C).
truer : conc (true).
                                     falsel : (hyp (false) -> conc C).
forallr : ({a:i} conc (A a))         foralll : {T:i} (hyp (A T) -> conc C)
           -> conc (forall A).                  -> (hyp (forall A) -> conc C).
existsr : {T:i} conc (A T)           existsl : ({a:i} hyp (A a) -> conc C)
           -> conc (exists A).                  -> (hyp (exists A) -> conc C).

The encoding satisfies the representation theorem as outlined above. It circumvents many of the problems that ordinarily arise in representations of the sequent calculus. Multi-sets are avoided, since hypotheses on the left-hand side of the sequent arrow are transported into the LF context. Variable naming conditions are encoded through the usual functional representation of parametric judgments.

Theorem 4 (Adequacy of Sequent Representation) The representation of sequent derivations in LF is adequate.

Proof: By inductions over the structure of sequent derivations and canonical forms in LF. The proof requires Lemma 3. □

Since the representation is adequate, checking the validity of sequent derivations can be accomplished by type-checking their representations in LF. As an example, consider the following cut-free sequent derivation.

\frac{I}{(∀x. (Ax ⊃ B)), (∃x. Ax), Aa, (Aa ⊃ B) ⟶ Aa} \frac{I}{(∀x. (Ax ⊃ B)), (∃x. Ax), Aa, (Aa ⊃ B), B ⟶ B}
⊃L
∀L
∃L^{a}
⊃R

(∀x. (Ax ⊃ B)), (∃x. Ax), Aa, (Aa ⊃ B) ⟶ B

(∀x. (Ax ⊃ B)), (∃x. Ax), Aa ⟶ B

(∀x. (Ax ⊃ B)), (∃x. Ax) ⟶ B (∀x. (Ax ⊃ B)) ⟶ ((∃x. Ax) ⊃ B)

⊃R ⟶ ((∀x. (Ax ⊃ B)) ⊃ ((∃x. Ax) ⊃ B))

Its representation in Elf is the following term.

[A:i -> o] [B:o]
(impr [h1:hyp (forall [x:i] A x imp B)]
   (impr [h2:hyp (exists [x:i] A x)]
      (existsl ([a:i] [h3:hyp (A a)]
                  foralll a ([h4:hyp (A a imp B)]
                               impl (axiom h3)
                               ([h5:hyp B] axiom h5)
                               h4)
                  h1)
         h2)))

Note that the values of variables that were implicitly quantified in the constant declarations are not explicitly supplied here, but reconstructed by Elf’s front end.

5 Admissibility of Cut

The proof of cut elimination uses one principal lemma: the admissibility of cut in the cut-free system. From this, cut elimination follows by a simple structural induction (see Appendix B).

Theorem 5 (Admissibility of Cut) Let D :: (Γ ⟶ d : A) and E :: (Γ, h:A ⟶ e : C) be cut-free sequent derivations. Then there exists a proof term f and a cut-free sequent derivation F :: (Γ ⟶ f : C).

Proof: The proof proceeds by three nested structural inductions on A, d, and e. In other words, we may use the induction hypothesis for (immediate) subformulas of A and arbitrary d and e, or for A, a subterm of d and arbitrary e, and for A, d, and a subterm of e. We distinguish cases for D and E, which is the same as distinguishing cases for the proof terms d and e, since they determine the derivation (Lemma 3(5)). The proof is constructive so that it describes an algorithm that computes a derivation F given the derivations D and E.

The cases can be divided into four categories: (1) Either D or E is initial with A as its principal formula, (2) A is the principal formula of the last inference in both D and E, (3) A is a side formula of the last inference in D, and (4) A is a side formula of the last inference in E. These classes are not mutually exclusive, so the algorithm induced by our proof is non-deterministic. We capture this non-determinism as a relation between ⌜A⌝, ⌜D⌝, ⌜E⌝, and ⌜F⌝, which is implemented by a type family

ca : {A:o} conc A -> (hyp A -> conc C) -> conc C -> type.

Note that ⌜E⌝ may use the hypothesis A in addition to the ambient hypotheses Γ which are implicit. We show how each case in the proof contributes a declaration to ce. First, the two cases where either D or E is an initial sequent with principal formula A.

Case:

D = \frac{I}{Γ′, H:A ⟶ axiom H : A}

and E :: (Γ′, H:A, h:A ⟶ e : C) is arbitrary. Here Γ = Γ′, H:A and d = axiom H. Then we let f = [H/h]e and

F = \begin{matrix}[H/h]E \\ Γ′, H:A ⟶ [H/h]e : C \end{matrix} .

The substitution of H for h in E is represented by applying the function that represents E to the representation of H. This gives the correct representation of the result by compositionality of ⌜·⌝ and Lemma 3(2).

ca_axiom_l : ca A (axiom H) E (E H).

Case:

E = \frac{I}{Γ, h:A ⟶ axiom h : A}

and D :: (Γ ⟶ d : A) is arbitrary. Then we let f = d and F = D. The representation of this case is immediate.

ca_axiom_r : ca A D ([h:hyp A] axiom h) D.

Next we consider a case where the cut formula A is the principal formula of the last inference in both D and E.

Case:

D = \begin{matrix}D_{2} \\ Γ, h_{1}:A_{1} ⟶ d_{2} : A_{2} \end{matrix} ; ⊃R ; Γ ⟶ impr (λh_{1}:A_{1}. d_{2}) : A_{1} ⊃ A_{2}

and

E = \begin{aligned}\begin{matrix}E_{1} \\ Γ, h:A_{1} ⊃ A_{2} ⟶ e_{1} : A_{1} \end{matrix} & \begin{matrix}E_{2} \\ Γ, h:A_{1} ⊃ A_{2}, h_{2}:A_{2} ⟶ e_{2} : C \end{matrix} \\ & ⊃L. \\ Γ, h:A_{1} ⊃ A_{2} ⟶ impl e_{1} (λh_{2}:A_{2}. e_{2}) h : C \end{aligned}

Here d = impr (λh_{1}:A_{1}. d_{2}) and e = impl e_{1} (λh_{2}:A_{2}. e_{2}) h. In this case we first need to eliminate the remaining copies of A_{1} ⊃ A_{2} from the hypotheses of E_{1} and E_{2}. To this end we apply the induction hypothesis with all of D and the subderivation E_{1} to obtain an e′_{1} and E′_{1} such that

E′_{1} :: (Γ ⟶ e′_{1} : A_{1})  By i.h. on A_{1} ⊃ A_{2}, d, and e_{1}

Similarly, we would like to eliminate the hypothesis h from E_{2}, but E_{2} has an additional hypothesis h_{2}. Thus we must first weaken D to (D, h_{2}:A_{2}) :: (Γ, h_{2}:A_{2} ⟶ d : A_{1} ⊃ A_{2}). By Lemma 3(1), this does not change the proof term d. We can thus apply the induction hypothesis and obtain

E′_{2} :: (Γ, h_{2}:A_{2} ⟶ e′_{2} : C)  By i.h. on A_{1} ⊃ A_{2}, d, and e_{2}

Now that we have eliminated the additional copies of A_{1} ⊃ A_{2} we can apply the ordinary step of reducing the cut to two new cuts, but both on smaller formulas (A_{1} and A_{2}). Note that the proof terms e′_{1}, e′_{2}, and d′_{2} involved in these cuts may be much bigger, since they are the result of earlier appeals to the induction hypothesis.

D′_{2} :: (Γ ⟶ d′_{2} : A_{2})  By i.h. on A_{1}, e′_{1}, and d_{2}
F :: (Γ ⟶ f : C)  By i.h. on A_{2}, d′_{2}, and e′_{2}

In the Elf representation, each of the four appeals to the induction hypothesis are implemented as recursive calls to ca. We use A <- B for B -> A to emphasize the operational reading of this declaration as part of a logic program in Elf to perform cut elimination. The backwards arrow associates to the left.

ca_imp  : ca (A1 imp A2) (impr D2)
           ([h:hyp (A1 imp A2)] impl (E1 h) (E2 h) h) F
           <- ca (A1 imp A2) (impr D2) E1 E1'
           <- ({h2:hyp A2}
                 ca (A1 imp A2) (impr D2)
                 ([h:hyp (A1 imp A2)] E2 h h2) (E2' h2))
           <- ca A1 E1' D2 D2'
           <- ca A2 D2' E2' F.

The weakening we mentioned above is implemented by the weakening which holds for LF: in the second subgoal, D2 slips inside the scope of h2, but it may not actually depend on it.

Next we show a case where the cut formula A is a side formula of the last inference in E. The idea in all cases where the cut formula is a side formula of the last inference R is the same: we appeal to the induction hypothesis on the premise(s) and then apply R to the resulting derivation(s).

Case:

E = \begin{matrix}E_{1} \\ Γ′, H:B_{1} ∧ B_{2}, h_{1}:B_{1}, h:A ⟶ e_{1} : C \end{matrix} ; ∧L_{1} ; Γ′, H:B_{1} ∧ B_{2}, h:A ⟶ andl_{1} (λh_{1}:B_{1}. e_{1}) H : C

and D :: (Γ′, H:B_{1} ∧ B_{2} ⟶ d : A) is arbitrary. In this case, Γ = Γ′, H:B_{1} ∧ B_{2} and e = andl_{1} (λh_{1}:B_{1}. e_{1}) H. After weakening D (without changing the proof term d!) we “cut” (D, h_{1}:B_{1}) and E_{1} to obtain

E′_{1} :: (Γ′, H:B_{1} ∧ B_{2}, h_{1}:B_{1} ⟶ e′_{1} : C)  By i.h. on A, d, e_{1}

We now obtain F by applying the ∧L_{1} to E′_{1}.

F = \begin{matrix}E′_{1} \\ Γ′, H:B_{1} ∧ B_{2}, h_{1}:B_{1} ⟶ e′_{1} : C \end{matrix} ; ∧L_{1} ; Γ′, H:B_{1} ∧ B_{2} ⟶ andl_{1} (λh_{1}:B_{1}. e′_{1}) H : C

Note how explicit abstractions and applications are employed to represent scoping of hypotheses in the Elf implementation of this case.

car_andl1: ca A D ([h:hyp A] andl1 (E1 h) H) (andl1 E1' H)
            <- ({h1:hyp B1} ca A D ([h:hyp A] E1 h h1) (E1' h1)).

All the remaining cases (there are 35 altogether) follow similar patterns. They are given in a more compact form in Appendix A.1. They require the usual substitution of terms for individual parameters in the cases for quantifiers, and formulas for propositional parameters in the case of negation. In the quantifier case we need that [t/x]A is a subformula of ∀x. A for any t. This is precisely the inference allowed by the structural induction principle for first-order formulas, although it is often stated as an induction on the number of quantifiers and connectives in a formula. □

What does the proof representation we show above achieve? First of all, it is operationally adequate, that is, it provides an implementation of a non-deterministic algorithm that eliminates cuts from sequent derivations. Execution of the signature above as an Elf program is illustrated through an example below. Furthermore, the implementation describes not just any admissibility proof of cut, but captures the computational content of the particular, informal constructive proof we presented. Clearly, this must remain an informal statement, since our “constructive proof” is not a formal, mathematical object.

Our implementation is partially verified by the type checker which ensures correctness of the result of applying cut to the two given derivations. Here the dependent types play a critical role in guaranteeing the validity of all sequent derivations in the signature statically, which is the subject of the adequacy theorem (Theorem 4). On the other hand, due to the absence of induction principles in LF, parts of the informal argument are not formally verified through the type checker. They require an additional argument external to LF which is possible to carry out by hand, but exceedingly tedious. Automation of this external check is the subject of ongoing research [Roh94].

Even if an external checker would verify that the signature represented a proof of admissibility of cut, there would still remain the issue if such a check can always be trusted (there may be bugs in the implementation, for example). Thus we believe that it is important that we should be able to recover informal, mathematical proofs from their formalization in a framework, that is, a proof checker should be able to “explain itself”. For this particular case study we have implemented a program that translates the Elf signature into the critical parts of the informal argument, namely the sequences of appeals to the induction hypotheses in each case of the admissibility proof. We then inspected each of the 35 cases in the same way we would judge a proof in a paper submitted to a journal and verified the correctness of the implementation of the proof in Elf. The complete implementation and the informal presentation of each case are given in full detail in Appendix A.1. It remains to convince oneself that all cases are covered, which is not difficult since they are enumerated systematically.

In the remainder of this section, we illustrate how Elf can be used to execute the (constructive) proof of the admissibility theorem for cut. The first derivation (called D in the statement of the theorem) is

\frac{I}{(∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Aa ⟶ Aa} ; ∃R ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Aa ⟶ (∃x. Ax) ; ∨R_{1} ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Aa ⟶ ((∃x. Ax) ∨ (∃x. Bx)) \frac{I}{(∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Ba ⟶ Ba} ; ∃R ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Ba ⟶ (∃x. Bx) ; ∨R_{2} ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Ba ⟶ ((∃x. Ax) ∨ (∃x. Bx))
∨L

(∃x. (Ax ∨ Bx)), (Aa ∨ Ba) ⟶ ((∃x. Ax) ∨ (∃x. Bx))

∃L^{a} (∃x. (Ax ∨ Bx)) ⟶ ((∃x. Ax) ∨ (∃x. Bx))

which is represented by

[A:i -> o] [B:i -> o]
[h1:hyp (exists [x:i] (A x or B x))]
(existsl ([a:i] [h2:hyp (A a or B a)]
            (orl ([h3:hyp (A a)] orr1 (existsr a (axiom h3)))
               ([h4:hyp (B a)] orr2 (existsr a (axiom h4)))
               h2))
   h1)

The second derivation (slightly more general than what we need) is

\frac{I}{(A′ ∨ B′), A′ ⟶ A′} ; ∨R_{2} ; (A′ ∨ B′), A′ ⟶ (B′ ∨ A′) \frac{I}{(A′ ∨ B′), B′ ⟶ B′} ; ∨R_{1} ; (A′ ∨ B′), B′ ⟶ (B′ ∨ A′)
∨L
(A′ ∨ B′) ⟶ (B′ ∨ A′)

which is represented by

[A':o] [B':o]
[h:hyp (A' or B')]
(orl ([h2:hyp A'] orr2 (axiom h2))
   ([h3:hyp B'] orr1 (axiom h3))
   h)

In this second derivation we instantiate the meta-variables A′ and B′ to ∃x. Ax and ∃x. Bx, respectively. To obtain a cut-free derivation of ∃x. (Ax ∨ Bx) ⟶ (∃x. Bx) ∨ (∃x. Ax) we then pose the following query.

?- {A:i -> o} {B:i -> o}
   {h1:hyp (exists [x:i] (A x or B x))}
   ca ((exists [x:i] A x) or (exists [x:i] B x))
      (existsl ([a:i] [h2:hyp (A a or B a)]
                  (orl ([h3:hyp (A a)] orr1 (existsr a (axiom h3)))
                     ([h4:hyp (B a)] orr2 (existsr a (axiom h4)))
                     h2))
         h1)
      ([h:hyp ((exists [x:i] A x) or (exists [x:i] B x))]
         (orl ([h2:hyp (exists [x:i] A x)] orr2 (axiom h2))
            ([h3:hyp (exists [x:i] B x)] orr1 (axiom h3))
            h))
      (F A B h1).

The only free variable in this query is F which may depend on A, B, and the hypothesis h1. The first (and in this case only) answer we obtain is the substitution

F =
   [A:i -> o] [B:i -> o] [h1:hyp (exists [x:i] A x or B x)]
      existsl
         ([a:i] [h:hyp (A a or B a)]
             orl ([h11:hyp (A a)] orr2 (existsr a (axiom h11)))
                 ([h2:hyp (B a)] orr1 (existsr a (axiom h2))) h) h1.

which represents the expected derivation

\frac{I}{(∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Aa ⟶ Aa} ; ∃R ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Aa ⟶ (∃x. Ax) ; ∨R_{2} ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Aa ⟶ ((∃x. Bx) ∨ (∃x. Ax)) \frac{I}{(∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Ba ⟶ Ba} ; ∃R ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Ba ⟶ (∃x. Bx) ; ∨R_{1} ; (∃x. (Ax ∨ Bx)), (Aa ∨ Ba), Ba ⟶ ((∃x. Bx) ∨ (∃x. Ax))
∨L
(∃x. (Ax ∨ Bx)), (Aa ∨ Ba) ⟶ ((∃x. Bx) ∨ (∃x. Ax))
∃L^{a}
(∃x. (Ax ∨ Bx)) ⟶ ((∃x. Bx) ∨ (∃x. Ax))

6 Extension to Classical Logic

In natural deduction we obtain classical logic by adding another inference rule that breaks the symmetry of introduction and elimination rules. This rule might be excluded middle, indirect proof, or double negation elimination. In sequent calculus, classical logic is usually handled by allowing multiple conclusions, that is, a sequent has the form Γ ⟶ Δ, where both Γ and Δ are lists (or multi-sets) of formulas. This exhibits deep symmetries in classical logic which are not so obvious in natural deduction form. The duality between left and right rules is now perfect, as is the duality of conjunction and disjunction, truth and falsehood, universal and existential quantification, and the self-duality of negation. Unfortunately, the gap between natural deduction and sequent calculus has become wider, so our rules are motivated by an extension of the intuitionistic case to multiple conclusions, rather than directly from natural deduction. For the proof of cut elimination and our representation it is important that Gentzen’s structural rules remain implicit: The principal formula of an inference must always be copied to all premises along with all side formulas.

\frac{I}{Γ, A ⟶ A, Δ}

\begin{aligned}Γ ⟶ A, A ∧ B, Δ Γ ⟶ B, A ∧ B, Δ \\ & ∧R \\ Γ ⟶ A ∧ B, Δ \end{aligned}

Γ, A ∧ B, A ⟶ Δ ∧L_{1}

Γ, A ∧ B ⟶ Δ

Γ, A ∧ B, B ⟶ Δ ∧L_{2}

Γ, A ∧ B ⟶ Δ

\begin{aligned}Γ, A ⟶ B, A ⊃ B, Δ \\ & ⊃R \\ Γ ⟶ A ⊃ B, Δ \end{aligned}  \begin{aligned}Γ, A ⊃ B ⟶ A, Δ  Γ, A ⊃ B, B ⟶ Δ \\ & ⊃L \\ Γ, A ⊃ B ⟶ Δ \end{aligned}

Γ ⟶ A, A ∨ B, Δ ∨R_{1}

Γ ⟶ A ∨ B, Δ

Γ ⟶ B, A ∨ B, Δ ∨R_{2}

Γ ⟶ A ∨ B, Δ

\begin{aligned}Γ, A ∨ B, A ⟶ Δ Γ, A ∨ B, B ⟶ Δ \\ & ∨L \\ Γ, A ∨ B ⟶ Δ \end{aligned}

\begin{aligned}Γ, A ⟶ ¬A, Δ \\ & ¬R \\ Γ ⟶ ¬A, Δ \end{aligned}  \begin{aligned}Γ, ¬A ⟶ A, Δ \\ & ¬L \\ Γ, ¬A ⟶ Δ \end{aligned}

\frac{⊤R}{Γ ⟶ ⊤, Δ} ; \frac{⊥L}{Γ, ⊥ ⟶ Δ}

\begin{aligned}Γ ⟶ [a/x]A, ∀x. A, Δ \\ & ∀R^{a} \\ Γ ⟶ ∀x. A, Δ \end{aligned}  \begin{aligned}Γ, ∀x. A, [t/x]A ⟶ Δ \\ & ∀L \\ Γ, ∀x. A ⟶ Δ \end{aligned}

\begin{aligned}Γ ⟶ [t/x]A, ∃x. A, Δ \\ & ∃R \\ Γ ⟶ ∃x. A, Δ \end{aligned}  \begin{aligned}Γ, ∃x. A, [a/x]A ⟶ Δ \\ & ∃L^{a} \\ Γ, ∃x. A ⟶ Δ \end{aligned}

As in the intuitionistic case, we exclude cut from the system and show that it is admissible. It has the form

Γ ⟶ A, Δ Γ, A ⟶ Δ

Cut Γ ⟶ Δ

The classical calculus satisfies weakening and contraction on both sides, and also the usual substitution properties. Weakening and contraction do not change the structure of the proof, which is made explicit below in Lemma 6. The equivalence to Gentzen’s calculus LK is also easy to establish by inserting or removing appropriate structural rules; we skip the routine details here.

The assignment of proof terms reflects the symmetry between the left- and right-hand sides of a sequent in that we label both negative (left-hand side) and positive (right-hand side) formulas with variables. A proof term d then annotates the whole sequent; we write it above the sequent arrow:

n_{1}:A_{1}, …, n_{j}:A_{j} ⟶^{d} p_{1}:C_{1}, …, p_{k}:C_{k}.

We use n (negative) for labels of formulas occurring on the left of the sequent arrow and p (positive) for labels of formulas occurring on the right of the sequent arrow. As in the intuitionistic calculus, our proof terms faithfully record the structure of the sequent derivation and have no immediate connection to computational interpretations. We again use λ and the idea of higher-order abstract syntax to delimit scope.

\frac{I}{Γ, n:A ⟶^{axiom n p} p:A, Δ}

Γ ⟶^{d_{1}} p_{1}:A, p:A ∧ B, Δ Γ ⟶^{d_{2}} p_{2}:B, p:A ∧ B, Δ

∧R

Γ ⟶^{andr (λp_{1}:A. d_{1}) (λp_{2}:B. d_{2}) p} p:A ∧ B, Δ

Γ, n:A ∧ B, n_{1}:A ⟶^{d_{1}} Δ ∧L_{1}

Γ, n:A ∧ B ⟶^{andl_{1} (λn_{1}:A. d_{1}) n} Δ

Γ, n:A ∧ B, n_{2}:B ⟶^{d_{2}} Δ ∧L_{2}

Γ, n:A ∧ B ⟶^{andl_{2} (λn_{2}:B. d_{2}) n} Δ

Γ, n_{1}:A ⟶^{d} p_{2}:B, p:A ⊃ B, Δ

⊃R

Γ ⟶^{impr (λn_{1}:A. λp_{2}:B. d) p} p:A ⊃ B, Δ

Γ, n:A ⊃ B ⟶^{d_{1}} p_{1}:A, Δ Γ, n:A ⊃ B, n_{2}:B ⟶^{d_{2}} Δ

⊃L

Γ, n:A ⊃ B ⟶^{impl (λp_{1}:A. d_{1}) (λn_{2}:B. d_{2}) n} Δ

Γ ⟶^{d_{1}} p_{1}:A, p:A ∨ B, Δ ∨R_{1}

Γ ⟶^{orr_{1} (λp_{1}:A. d_{1}) p} p:A ∨ B, Δ

Γ ⟶^{d_{2}} p_{2}:B, p:A ∨ B, Δ ∨R_{2}

Γ ⟶^{orr_{2} (λp_{2}:B. d_{2}) p} p:A ∨ B, Δ

Γ, n:A ∨ B, n_{1}:A ⟶^{d_{1}} Δ Γ, n:A ∨ B, n_{2}:B ⟶^{d_{2}} Δ

∨L

Γ, n:A ∨ B ⟶^{orl (λn_{1}:A. d_{1}) (λn_{2}:B. d_{2}) n} Δ

Γ, n:A ⟶^{d} p:¬A, Δ

¬R

Γ ⟶^{notr (λn:A. d) p} p:¬A, Δ

Γ, n:¬A ⟶^{d} p:A, Δ

¬L

Γ, n:¬A ⟶^{notr (λp:A. d) n} Δ

\frac{⊤R}{Γ ⟶^{truer p} p:⊤, Δ}

\frac{⊥L}{Γ, n:⊥ ⟶^{falsel n} Δ}

Γ ⟶^{d} p_{1}:[a/x]A, p:∀x. A, Δ

∀R^{a}

Γ ⟶^{forallr (λa:i. λp_{1}:[a/x]A. d) p} p:∀x. A, Δ

Γ, n:∀x. A, n_{1}:[t/x]A ⟶^{d} Δ

∀L

Γ, n:∀x. A ⟶^{foralll t (λn_{1}:[t/x]A. d) n} Δ

Γ ⟶^{d} p_{1}:[t/x]A, p:∃x. A, Δ

∃R

Γ ⟶^{existsr t (λp_{1}:[t/x]A. d) p} p:∃x. A, Δ

Γ, n:∃x. A, n_{1}:[a/x]A ⟶^{d} Δ

∃L^{a}

Γ, n:∃x. A ⟶^{existsl (λa:i. λn_{1}:[a/x]A. d) n} Δ

We generalize the various notions of substitution and weakening from the intuitionistic case in the obvious way. Substitution for formula parameters is not necessary here, since negation is handled in a different way. We then have:

Lemma 6 (Basic Properties of Classical Sequent Calculus with Proof Terms) The classical sequent calculus with proof terms satisfies the following properties.

1. (Weakening) If D :: (Γ ⟶^{d} Δ) then (D, n:A) :: (Γ, n:A ⟶^{d} Δ) and (D, p:A) :: (Γ ⟶^{d} p:A, Δ), where n and p are new labels.

2. (Contraction) If D :: (Γ, n_{1}:A, n_{2}:A ⟶^{d} Δ) then [n_{1}/n_{2}]D :: (Γ, n_{1}:A ⟶^{[n_{1}/n_{2}]d} Δ). Further-

more, if D :: (Γ ⟶^{d} p_{1}:A, p_{2}:A, Δ) then [p_{1}/p_{2}]D :: (Γ ⟶^{[p_{1}/p_{2}]d} p_{1}:A, Δ).

3. (Term Substitution) If D :: (Γ ⟶^{d} Δ) is a derivation with free individual parameter a then

[t/a]D :: ([t/a]Γ ⟶^{[t/a]d} [t/a]Δ).

4. (Uniqueness) If D :: (Γ ⟶^{d} Δ) and D′ :: (Γ ⟶^{d} Δ) then D = D′.

Proof: By simple structural inductions. □

The LF representation closely models proof terms and is thus also symmetric with respect to formulas on the left and right: Both appear in the context of the LF typing judgment. That is, a cut-free derivation

\begin{matrix}D \\ n_{1}:A_{1}, …, n_{j}:A_{j} ⟶^{d} p_{1}:C_{1}, …, p_{k}:C_{k} \end{matrix}

with free individual parameters among a_{1}, …, a_{m} is represented by a term M = ⌜D⌝ such that

a_{1}:i, …, a_{m}:i, n_{1}:neg ⌜A_{1}⌝, …, n_{j}:neg ⌜A_{j}⌝, p_{1}:pos ⌜C_{1}⌝, …, p_{k}:pos ⌜C_{k}⌝ ⊢^{LF} M : #,

where neg and pos are type families indexed by formulas, and # is a new type, the type of every valid proof term. If we interpreted a sequent calculus as a refutational calculus, # would represent a contradiction. Below we show the representation of cut-free sequent derivations as an LF signature in the concrete syntax of Elf.

# : type.
neg : o -> type.
pos : o -> type.
axiom' : (neg A -> pos A -> #).
                                         andl1' : (neg A -> #)
andr'  : (pos A -> #)                              -> (neg (A and B) -> #).
          -> (pos B -> #)

6 EXTENSION TO CLASSICAL LOGIC  23

          -> (pos (A and B) -> #).       andl2' : (neg B -> #)
                                                   -> (neg (A and B) -> #).
impr'  : (neg A -> pos B -> #)           impl'  : (pos A -> #)
          -> (pos (A imp B) -> #).                 -> (neg B -> #)
                                                   -> (neg (A imp B) -> #).
orr1'  : (pos A -> #)
         -> (pos (A or B) -> #).         orl'   : (neg A -> #)
                                                  -> (neg B -> #)
orr2'  : (pos B -> #)                             -> (neg (A or B) -> #).
          -> (pos (A or B) -> #).
notr'  : (neg A -> #)                    notl'  : (pos A -> #)
          -> (pos (not A) -> #).                   -> (neg (not A) -> #).
truer' : (pos (true) -> #).
                                         falsel' : (neg (false) -> #).
forallr' : ({a:i} pos (A a) -> #)        foralll' : {T:i} (neg (A T) -> #)
            -> (pos (forall A) -> #).                -> (neg (forall A) -> #).
existsr' : {T:i} (pos (A T) -> #)        existsl' : ({a:i} neg (A a) -> #)
            -> (pos (exists A) -> #).                -> (neg (exists A) -> #).

The cut rule can be added in a similar style (see Appendix B.2). The representations is adequate and compositional, we skip the routine formulation of such a theorem.

We consider two examples of classical sequent derivations and their representation in Elf. The first is the law of excluded middle.

\frac{I}{A ⟶ ¬(A), A, (A ∨ ¬(A))}

¬R ⟶ ¬(A), A, (A ∨ ¬(A))

∨R_{2}

⟶ A, (A ∨ ¬(A))
∨R_{1}
⟶ (A ∨ ¬(A))

Note how multiple conclusions are necessary so that both right rules for disjunction may be applied in succession. This derivation is represented by the term

([A:o] [p:pos (A or not A)]
   orr1' ([p1:pos A]
            orr2' ([p2:pos (not A)]
                     notr' ([n1:neg A] axiom' n1 p1)
                     p2)
            p)
   p)
:
{A:o} pos (A or not A) -> #.

The following example provides another illustration of the differences between intuitionistic and classical reasoning in the sequent calculus.

\frac{I}{¬((∀x. Ax)), Aa ⟶ ¬(Aa), Aa, (∀x. Ax), (∃x. ¬(Ax))}

¬R ¬((∀x. Ax)) ⟶ ¬(Aa), Aa, (∀x. Ax), (∃x. ¬(Ax))

∃R ¬((∀x. Ax)) ⟶ Aa, (∀x. Ax), (∃x. ¬(Ax))

∀R^{a} ¬((∀x. Ax)) ⟶ (∀x. Ax), (∃x. ¬(Ax))

¬L ¬((∀x. Ax)) ⟶ (∃x. ¬(Ax))

It is represented by the term

([A:i -> o]
   [n:neg (not (forall [x] A x))]
   [p:pos (exists [x] not (A x))]
   notl' ([p1:pos (forall [x] A x)]
            forallr' ([a:i] [p2:pos (A a)]
                        existsr' a ([p3:pos (not (A a))]
                                      notr' ([n1:neg (A a)]
                                               axiom' n1 p2)
                                      p3)
                        p)
            p1)
   n)
:
{A:i -> o}
   neg (not (forall [x] A x))
   -> pos (exists [x] not (A x))
   -> #.

The admissibility of the cut rule for the cut-free calculus is once again the central lemma for cut elimination. There are now more cases, since there may be side formulas on the right-hand sides of sequents. However, due to the symmetry of the rules, the proof is even more systematic than in the intuitionistic case. It also follows by three nested structural inductions.

Theorem 7 (Classical Admissibility of Cut) Let D :: (Γ ⟶^{d} p:A, Δ) and E :: (Γ, n:A ⟶^{e} Δ) be cut-free derivations in the classical sequent calculus G_{3}. Then there is a proof term f and a cut-free sequent derivation of F :: (Γ ⟶^{f} Δ).

Proof: By three nested structural inductions on A, d, and e as in the intuitionistic case. See Appendix A.2 for the proof details. □

The notion of a cross-cut [ML68, Gal93, Her95] (without multiplicities), surfaces naturally in this proof: Since formulas are never discarded they must be eliminated explicitly from both premises of a cut in a “cross-cut” fashion before the essential cut reduction can take place. The implementation of the proof is by a type family

ca' : {A:o} (pos A -> #) -> (neg A -> #) -> # -> type.

that implements the relation between A, the derivation D, the derivation E and the resulting derivation F.

We only show the representation of one case in the proof of admissibility here. The complete proof representation including an informal version of each case may be found in Appendix A.2. The first three appeals to the induction hypothesis below are cross-cuts.

ca_imp' :
  ca' (A imp B) ([p] impr' (D1 p) p) ([n] impl' (E1 n) (E2 n) n) F
     <- ({p1:pos A} ca' (A imp B) ([p] impr' (D1 p) p) ([n] E1 n p1) (E1' p1))
     <- ({n2:neg B} ca' (A imp B) ([p] impr' (D1 p) p) ([n] E2 n n2) (E2' n2))
     <- ({n1:neg A} {p2:pos B}
           ca' (A imp B) ([p] D1 p n1 p2) ([n] impl' (E1 n) (E2 n) n)
           (D1' n1 p2))
     <- ({p2:pos B} ca' A ([p1] E1' p1) ([n1] D1' n1 p2) (F2 p2))
     <- ca' B ([p2] F2 p2) ([n2] E2' n2) F.

7 Conclusion

We have presented variants of Martin-Löf’s proof of cut elimination [ML68] for intuitionistic and classical sequent calculi. The proof in the intuitionistic case is motivated by maintaining a close correspondence between proof search for natural deduction and sequent derivations. It is this proximity that permits a natural representation of the sequent calculus in LF. Furthermore, we show how the proof of cut elimination can be implemented in Elf, although the fact that this implementation models the informal argument is still partly an informal property, just like the adequacy of the LF encoding of derivations. The proof representation is extremely concise and much shorter than an informal proof of the same argument (if all the cases were given, of course). In the two appendices below we give the details of the proofs which were obtained via a program that translates the internal form of Elf declarations to LaTeX source. This “informalized” version of the proof representation can be inspected for correctness like ordinary informal mathematical proofs.

Another analysis of cut elimination for a small propositional fragment of classical logic is given by Matthews [Mat94] in F S_{0}. His proof is traditional—sequents are represented as lists, and termination is proved by induction on a standard complexity measure. It has not yet been implemented, but it is clear from the sketched development that it would require much time and effort just to prove basic properties of sequent derivations, their lengths, etc. For the predicate calculus this overhead would be even higher, since a theory of binding would have to be developed first. Also related is Herbelin’s development [Her95] who, after reprising Martin-Löf’s proof, proceeds to assign proof terms to restricted sequent calculi which he then analyzes in depth. He shows that the restricted calculi (LJT and LKT for intuitionistic and classical logics, respectively) correspond more strongly to natural deduction in both cases. He also presents an implementation of normalization in ML, but gives no formal analysis of cut elimination or normalization in a theorem prover or logical framework.

Once the structural proof of admissibility has been found and implemented, it is natural to ask if it can also be encoded in stronger frameworks such as Coq [DFH^{+}93] so that structural inductions are made explicit and the proof is fully formally verified. There are several aspects of our proof which make this difficult. The first is the use of higher-order abstract syntax, which is not available in a similarly straightforward fashion in other candidate environments. Thus one either has to try ideas from [DH94, DFH95] (which we have not attempted) or use an encoding such as de Bruijn indices and explicitly represent contexts. In either case one has to prove a number of auxiliary lemmas regarding substitutions which are not needed in our representation. The second difficulty arises from the non-deterministic nature of the cut elimination algorithm contained in the proof. Making it deterministic in the form of a primitive recursion (which would be required for a functional framework) would lead to an explosion in the number of cases that would have to be considered. It appears the only way to avoid at least some of this combinatorial explosion is to introduce termination measures after all, which requires a new sequence of lemmas regarding sizes of formulas and derivations. We conclude that a similarly elegant representation of cut elimination in other systems is a non-trivial challenge which, we hope, others will take up.

In future work we plan to verify mechanically that the given signatures indeed implement meta-theoretic proofs. The prototype implementation of the schema-checker sketched in [Roh94] currently accepts them, but the (meta-meta-)theoretical analysis of schema-checker itself is not yet complete. In other future work we plan to reexamine the connection between normalization and cut elimination (see, for example, [Zuc74, Her95]) in the same framework. Another direction is to study cut elimination in a formulation as a higher-order rewrite system along the lines of Nipkow [Nip91], but using dependent types. We first note that our system of rules is terminating (note that we cannot permute adjacent cuts!). Using the completeness of a critical pair criterion for the dependently typed pattern calculus [Vir95] the intuitionistic system is confluent modulo Kleene’s permutations of adjacent inference rules in the cut-free system. This means that our cut conversions do not identify intuitively unrelated sequent derivations. Without further restriction, however, this method fails for the classical calculus since it is inherently too non-deterministic and simply not confluent. The critical case here is a cut between two initial sequents with the cut formula as a side-formula.

Finally, we have applied the ideas in this paper to obtain similar structural cut elimination results for intuitionistic and classical linear logics. These are sketched in [Pfe95] and given in more detail in [Pfe94]. They will be the subject of a sequel to this paper [Pfe].

A Detailed Admissibility Proofs for Cut

In this appendix we give the details of the admissibility of cut for intuitionistic and classical sequent calculi. For each case in the two proofs we show the formalization as an Elf declaration, followed by an automatically generated informal rendering of the case. In order to make the informal proof cases more readable we omit explicit proof terms. This means that appeals to weakening and contraction lemmas are not visible (see the implicit contraction in the first case, for example). We apologize for the unintuitive naming of variables. Variable names are chosen by Elf during type reconstruction and printing, and our naming heuristics are currently too simplistic.

Substitution for individual and propositional parameters arises in the admissibility proof for cut in a few cases. When a formula or derivation may depend on a variable x or parameter a we indicate this, for example, by writing Ax or Da. Instead of [t/x]A or [t/a]D we then write At or Dt for the result of a substitution t for x or a. This is more perspicuous and also closer to the Elf implementation and therefore much easier to generate.

A.1 Intuitionistic Calculus

A case in the proof of admissibility of cut in the intuitionistic sequent calculus is represented as a transformation

\begin{matrix}D \\ Γ ⟶ A \end{matrix} ⨂ \begin{matrix}E \\ Γ, A ⟶ C \end{matrix} ⟹ \begin{matrix}F \\ Γ ⟶ C \end{matrix}

where F may refer to derivations constructed by appeals to the induction hypothesis. These are given below the first line (which identifies the case under consideration) in an appropriate order. In all cases the decreasing structural component should be apparent; it would have been awkward to include this information, since proof terms have been omitted. In the remarks we loosely refer to the principal formula or side formula when properly speaking we mean the principal formula occurrence or side formula occurrence. We could be pedantic using labelled hypotheses, but only at a heavy cost in legibility.

The relation between D, E, and F is implemented as a type family

ca : {A:o} conc A -> (hyp A -> conc C) -> conc C -> type.

The cases below are divided into the four classes mentioned in the proof of Theorem 5. In analogy to other published proofs we call them initial conversions (one of D or E is initial with the cut formula as a principal formula), essential conversions (cut formula is principal in D and E), left commutative conversions (cut formula is side formula in D), and right commutative conversions (cut formula is side formula in E).

Initial Conversions. These are the cases in the proof where either D or E is an initial sequent with principal formula being the cut formula A.

ca_axiom_l : ca A (axiom H) E (E H).

\frac{I}{Γ, A_{1} ⟶ A_{1}} ⨂ \begin{matrix}N \\ Γ, A_{1}, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N \\ Γ, A_{1} ⟶ A \end{matrix}

A DETAILED ADMISSIBILITY PROOFS FOR CUT  28

ca_axiom_r : ca A D ([h:hyp A] axiom h) D.

\begin{matrix}N \\ Γ ⟶ A \end{matrix} ⨂ \frac{I}{Γ, A ⟶ A} ⟹ \begin{matrix}N \\ Γ ⟶ A \end{matrix}

Essential Conversions. These are the steps in the proof where the cut formula is the principal formula of the last inference in both D and E.

ca_and1 : ca (A1 and A2) (andr D1 D2)
([h:hyp (A1 and A2)] andl1 (E1 h) h) F
<- ({h1:hyp A1}
      ca (A1 and A2) (andr D1 D2)
      ([h:hyp (A1 and A2)] E1 h h1) (E1' h1))
<- ca A1 D1 E1' F.

\begin{matrix}\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} & \begin{matrix}N_{3} \\ Γ ⟶ A_{2} \end{matrix} \\ & ∧R \\ Γ ⟶ (A_{1} ∧ A_{2}) \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, (A_{1} ∧ A_{2}), A_{1} ⟶ A \end{matrix} ; ∧L_{1} ; Γ, (A_{1} ∧ A_{2}) ⟶ A ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}\begin{matrix}N \\ Γ, A_{1} ⟶ A_{1} \end{matrix} & \begin{matrix}N_{3} \\ Γ, A_{1} ⟶ A_{2} \end{matrix} \\ & ∧R \\ Γ, A_{1} ⟶ (A_{1} ∧ A_{2}) \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, A_{1}, (A_{1} ∧ A_{2}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

ca_and2 : ca (A1 and A2) (andr D1 D2)
([h:hyp (A1 and A2)] andl2 (E2 h) h) F
<- ({h2:hyp A2}
      ca (A1 and A2) (andr D1 D2)
      ([h:hyp (A1 and A2)] E2 h h2) (E2' h2))
<- ca A2 D2 E2' F.

\begin{matrix}\begin{matrix}N_{3} \\ Γ ⟶ A_{2} \end{matrix} & \begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} \\ & ∧R \\ Γ ⟶ (A_{2} ∧ A_{1}) \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, (A_{2} ∧ A_{1}), A_{1} ⟶ A \end{matrix} ; ∧L_{2} ; Γ, (A_{2} ∧ A_{1}) ⟶ A ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}\begin{matrix}N_{3} \\ Γ, A_{1} ⟶ A_{2} \end{matrix} & \begin{matrix}N \\ Γ, A_{1} ⟶ A_{1} \end{matrix} \\ & ∧R \\ Γ, A_{1} ⟶ (A_{2} ∧ A_{1}) \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, A_{1}, (A_{2} ∧ A_{1}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

ca_imp  : ca (A1 imp A2) (impr D2)
([h:hyp (A1 imp A2)] impl (E1 h) (E2 h) h) F
<- ca (A1 imp A2) (impr D2) E1 E1'
<- ({h2:hyp A2}
      ca (A1 imp A2) (impr D2)
      ([h:hyp (A1 imp A2)] E2 h h2) (E2' h2))
<- ca A1 E1' D2 D2'
<- ca A2 D2' E2' F.

\begin{matrix}N_{4} \\ Γ, A_{2} ⟶ A_{1} \end{matrix} ; ⊃R ; Γ ⟶ (A_{2} ⊃ A_{1}) ⨂ \begin{matrix}\begin{matrix}N_{6} \\ Γ, (A_{2} ⊃ A_{1}) ⟶ A_{2} \end{matrix} & \begin{matrix}N_{5} \\ Γ, (A_{2} ⊃ A_{1}), A_{1} ⟶ A \end{matrix} \\ & ⊃L \\ Γ, (A_{2} ⊃ A_{1}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}N_{4} \\ Γ, A_{2} ⟶ A_{1} \end{matrix} ; ⊃R ; Γ ⟶ (A_{2} ⊃ A_{1}) ⨂ \begin{matrix}N_{6} \\ Γ, (A_{2} ⊃ A_{1}) ⟶ A_{2} \end{matrix} ⟹ \begin{matrix}N_{3} \\ Γ ⟶ A_{2} \end{matrix}

\begin{matrix}N_{4} \\ Γ, A_{1}, A_{2} ⟶ A_{1} \end{matrix} ; ⊃R ; Γ, A_{1} ⟶ (A_{2} ⊃ A_{1}) ⨂ \begin{matrix}N_{5} \\ Γ, A_{1}, (A_{2} ⊃ A_{1}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix}

\begin{matrix}N_{3} \\ Γ ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

ca_or1  : ca (A1 or A2) (orr1 D1)
([h:hyp (A1 or A2)] orl (E1 h) (E2 h) h) F
<- ({h1:hyp A1}
      ca (A1 or A2) (orr1 D1)
      ([h:hyp (A1 or A2)] E1 h h1) (E1' h1))
<- ca A1 D1 E1' F.

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ; ∨R_{1} ; Γ ⟶ (A_{1} ∨ A_{2}) ⨂ \begin{matrix}\begin{matrix}N_{3} \\ Γ, (A_{1} ∨ A_{2}), A_{1} ⟶ A \end{matrix} & \begin{matrix}N_{4} \\ Γ, (A_{1} ∨ A_{2}), A_{2} ⟶ A \end{matrix} \\ & ∨L \\ Γ, (A_{1} ∨ A_{2}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}N \\ Γ, A_{1} ⟶ A_{1} \end{matrix} ; ∨R_{1} ; Γ, A_{1} ⟶ (A_{1} ∨ A_{2}) ⨂ \begin{matrix}N_{3} \\ Γ, A_{1}, (A_{1} ∨ A_{2}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

ca_or2  : ca (A1 or A2) (orr2 D2)
([h:hyp (A1 or A2)] orl (E1 h) (E2 h) h) F
<- ({h2:hyp A2}
      ca (A1 or A2) (orr2 D2)
      ([h:hyp (A1 or A2)] E2 h h2) (E2' h2))
<- ca A2 D2 E2' F.

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ; ∨R_{2} ; Γ ⟶ (A_{2} ∨ A_{1}) ⨂ \begin{matrix}\begin{matrix}N_{4} \\ Γ, (A_{2} ∨ A_{1}), A_{2} ⟶ A \end{matrix} & \begin{matrix}N_{3} \\ Γ, (A_{2} ∨ A_{1}), A_{1} ⟶ A \end{matrix} \\ & ∨L \\ Γ, (A_{2} ∨ A_{1}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}N \\ Γ, A_{1} ⟶ A_{1} \end{matrix} ; ∨R_{2} ; Γ, A_{1} ⟶ (A_{2} ∨ A_{1}) ⨂ \begin{matrix}N_{3} \\ Γ, A_{1}, (A_{2} ∨ A_{1}) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

ca_not  : ca (not A1) (notr D1)
([h:hyp (not A1)] notl (E1 h) h) (F2 C)
<- ca (not A1) (notr D1) E1 F1
<- ({p:o} ca A1 F1 ([h1:hyp A1] D1 p h1) (F2 p)).

\begin{matrix}N_{1}p_{1} \\ Γ, A ⟶ p_{1} \end{matrix} ; ¬R^{p_{1}} ; Γ ⟶ ¬(A) ⨂ \begin{matrix}N_{3} \\ Γ, ¬(A) ⟶ A \end{matrix} ; ¬L ; Γ, ¬(A) ⟶ A_{1} ⟹ \begin{matrix}N_{2}A_{1} \\ Γ ⟶ A_{1} \end{matrix}

\begin{matrix}N_{1}p_{1} \\ Γ, A ⟶ p_{1} \end{matrix} ; ¬R^{p_{1}} ; Γ ⟶ ¬(A) ⨂ \begin{matrix}N_{3} \\ Γ, ¬(A) ⟶ A \end{matrix} ⟹ \begin{matrix}N \\ Γ ⟶ A \end{matrix}

\begin{matrix}N \\ Γ ⟶ A \end{matrix} ⨂ \begin{matrix}N_{1}p \\ Γ, A ⟶ p \end{matrix} ⟹ \begin{matrix}N_{2}p \\ Γ ⟶ p \end{matrix}

ca_forall : ca (forall A1) (forallr D1)
([h:hyp (forall A1)] foralll T (E1 h) h) F
<- ({h2:hyp (A1 T)}
      ca (forall A1) (forallr D1)
      ([h:hyp (forall A1)] E1 h h2) (E1' h2))
<- ca (A1 T) (D1 T) E1' F.

\begin{matrix}Na \\ Γ ⟶ A_{1}a \end{matrix} ; ∀R^{a} ; Γ ⟶ (∀x. A_{1}x) ⨂ \begin{matrix}N_{3} \\ Γ, (∀x. A_{1}x), A_{1}t ⟶ A \end{matrix} ; ∀L ; Γ, (∀x. A_{1}x) ⟶ A ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}Na \\ Γ, A_{1}t ⟶ A_{1}a \end{matrix} ; ∀R^{a} ; Γ, A_{1}t ⟶ (∀x. A_{1}x) ⨂ \begin{matrix}N_{3} \\ Γ, A_{1}t, (∀x. A_{1}x) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A_{1}t ⟶ A \end{matrix}

\begin{matrix}Nt \\ Γ ⟶ A_{1}t \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1}t ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

ca_exists : ca (exists A1) (existsr T D1)
([h:hyp (exists A1)] existsl (E1 h) h) F
<- ({a:i} {h1:hyp (A1 a)}
      ca (exists A1) (existsr T D1)
      ([h:hyp (exists A1)] E1 h a h1) (E1' a h1))
<- ca (A1 T) D1 (E1' T) F.

\begin{matrix}N \\ Γ ⟶ A_{1}t \end{matrix} ; ∃R ; Γ ⟶ (∃x. A_{1}x) ⨂ \begin{matrix}N_{3}a_{2} \\ Γ, (∃x. A_{1}x), A_{1}a_{2} ⟶ A \end{matrix} ; ∃L^{a_{2}} ; Γ, (∃x. A_{1}x) ⟶ A ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

\begin{matrix}N \\ Γ, A_{1}a ⟶ A_{1}t \end{matrix} ; ∃R ; Γ, A_{1}a ⟶ (∃x. A_{1}x) ⨂ \begin{matrix}N_{3}a \\ Γ, A_{1}a, (∃x. A_{1}x) ⟶ A \end{matrix} ⟹ \begin{matrix}N_{1}a \\ Γ, A_{1}a ⟶ A \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1}t \end{matrix} ⨂ \begin{matrix}N_{1}t \\ Γ, A_{1}t ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

Left Commutative Conversions. In these cases the cut formula is a side formula in the deduction D :: (Γ ⟶ A). Note that the deduction D must end in a left rule, since otherwise A would be its principal formula.

cal_andl1  : ca A (andl1 D1 H) E (andl1 D1' H)
              <- {h1:hyp B1} ca A (D1 h1) E (D1' h1).

\begin{matrix}N \\ Γ, (A ∧ A_{3}), A ⟶ A_{2} \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{3}) ⟶ A_{2} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{3}), A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{3}), A ⟶ A_{1} \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{3}) ⟶ A_{1}

\begin{matrix}N \\ Γ, (A ∧ A_{3}), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{3}), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{3}), A ⟶ A_{1} \end{matrix}

cal_andl2  : ca A (andl2 D2 H) E (andl2 D2' H)
              <- {h2:hyp B2} ca A (D2 h2) E (D2' h2).

\begin{matrix}N \\ Γ, (A_{3} ∧ A), A ⟶ A_{2} \end{matrix} ; ∧L_{2} ; Γ, (A_{3} ∧ A) ⟶ A_{2} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∧ A), A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ∧ A), A ⟶ A_{1} \end{matrix} ; ∧L_{2} ; Γ, (A_{3} ∧ A) ⟶ A_{1}

\begin{matrix}N \\ Γ, (A_{3} ∧ A), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∧ A), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ∧ A), A ⟶ A_{1} \end{matrix}

cal_impl   : ca A (impl D1 D2 H) E (impl D1 D2' H)
              <- ({h2:hyp B2} ca A (D2 h2) E (D2' h2)).

\begin{matrix}\begin{aligned}\begin{matrix}N_{3} \\ Γ, (A_{3} ⊃ A) ⟶ A_{3} \end{matrix} & \begin{matrix}N \\ Γ, (A_{3} ⊃ A), A ⟶ A_{2} \end{matrix} \\ & ⊃L \\ Γ, (A_{3} ⊃ A) ⟶ A_{2} \end{aligned} & ⨂ & \begin{matrix}N_{1} \\ Γ, (A_{3} ⊃ A), A_{2} ⟶ A_{1} \end{matrix} \\ ⟹ \begin{aligned}\begin{matrix}N_{3} \\ Γ, (A_{3} ⊃ A) ⟶ A_{3} \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{3} ⊃ A), A ⟶ A_{1} \end{matrix} \\ & ⊃L \\ Γ, (A_{3} ⊃ A) ⟶ A_{1} \end{aligned} \end{matrix}

\begin{matrix}N \\ Γ, (A_{3} ⊃ A), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ⊃ A), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ⊃ A), A ⟶ A_{1} \end{matrix}

cal_orl    : ca A (orl D1 D2 H) E (orl D1' D2' H)
              <- ({h1:hyp B1} ca A (D1 h1) E (D1' h1))
              <- ({h2:hyp B2} ca A (D2 h2) E (D2' h2)).

\begin{matrix}\begin{aligned}\begin{matrix}N_{3} \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{2} \end{matrix} & \begin{matrix}N \\ Γ, (A_{3} ∨ A), A ⟶ A_{2} \end{matrix} \\ & ∨L \\ Γ, (A_{3} ∨ A) ⟶ A_{2} \end{aligned} & ⨂ & \begin{matrix}N_{1} \\ Γ, (A_{3} ∨ A), A_{2} ⟶ A_{1} \end{matrix} \\ ⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{1} \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{3} ∨ A), A ⟶ A_{1} \end{matrix} \\ & ∨L \\ Γ, (A_{3} ∨ A) ⟶ A_{1} \end{aligned} \end{matrix}

\begin{matrix}N_{3} \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∨ A), A_{3}, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{1} \end{matrix}

\begin{matrix}N \\ Γ, (A_{3} ∨ A), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∨ A), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ∨ A), A ⟶ A_{1} \end{matrix}

cal_notl : ca A (notl D1 H) E (notl D1 H).

\begin{matrix}N \\ Γ, ¬(A_{2}) ⟶ A_{2} \end{matrix} ; ¬L ; Γ, ¬(A_{2}) ⟶ A_{1} ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A_{2}), A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N \\ Γ, ¬(A_{2}) ⟶ A_{2} \end{matrix} ; ¬L ; Γ, ¬(A_{2}) ⟶ A

cal_falsel  : ca A (falsel H) E (falsel H).

\frac{⊥L}{Γ, ⊥ ⟶ A_{1}} ⨂ \begin{matrix}N \\ Γ, ⊥, A_{1} ⟶ A \end{matrix} ⟹ \frac{⊥L}{Γ, ⊥ ⟶ A}

cal_foralll : ca A (foralll T D1 H) E (foralll T D1' H)
               <- ({h} ca A (D1 h) E (D1' h)).

\begin{matrix}N \\ Γ, (∀x. Ax), At ⟶ A_{2} \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ A_{2} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ A_{1} \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ A_{1}

\begin{matrix}N \\ Γ, (∀x. Ax), At ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), At, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ A_{1} \end{matrix}

cal_existsl : ca A (existsl D1 H) E (existsl D1' H)
               <- ({a:i} {h:hyp (B1 a)}
                     ca A (D1 a h) E (D1' a h)).

\begin{matrix}Na_{1} \\ Γ, (∃x. Ax), Aa_{1} ⟶ A_{2} \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax) ⟶ A_{2} ⨂ \begin{matrix}N_{1} \\ Γ, (∃x. Ax), A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2}a_{1} \\ Γ, (∃x. Ax), Aa_{1} ⟶ A_{1} \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax) ⟶ A_{1}

\begin{matrix}Na \\ Γ, (∃x. Ax), Aa ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∃x. Ax), Aa, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ, (∃x. Ax), Aa ⟶ A_{1} \end{matrix}

Right Commutative Conversions. In these cases, the formula A in E :: (Γ, A ⟶ C) is a side formula of the last inference in E. These cases are not necessarily exclusive with the left commutative conversions above. There are three classes of subcases: The last inference in E may be an axiom, a left rule, or a right rule.

car_axiom : ca A D ([h:hyp A] axiom H1) (axiom H1).

\begin{matrix}N \\ Γ, A ⟶ A_{1} \end{matrix} ⨂ \frac{I}{Γ, A, A_{1} ⟶ A} ⟹ \frac{I}{Γ, A ⟶ A}

car_andr : ca A D ([h:hyp A] andr (E1 h) (E2 h)) (andr E1' E2')
            <- ca A D E1 E1'
            <- ca A D E2 E2'.

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{3} \\ Γ, A_{1} ⟶ A_{2} \end{matrix} & \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} \\ & ∧R \\ Γ, A_{1} ⟶ (A_{2} ∧ A) \end{matrix} ⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ ⟶ A_{2} \end{matrix} & \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix} \\ & ∧R \\ Γ ⟶ (A_{2} ∧ A) \end{aligned}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{3} \\ Γ, A_{1} ⟶ A_{2} \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ ⟶ A_{2} \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

car_andl1: ca A D ([h:hyp A] andl1 (E1 h) H) (andl1 E1' H)
            <- ({h1:hyp B1} ca A D ([h:hyp A] E1 h h1) (E1' h1)).

\begin{matrix}N \\ Γ, (A ∧ A_{3}) ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{3}), A_{2}, A ⟶ A_{1} \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{3}), A_{2} ⟶ A_{1} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{3}), A ⟶ A_{1} \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{3}) ⟶ A_{1}

\begin{matrix}N \\ Γ, (A ∧ A_{3}), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{3}), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{3}), A ⟶ A_{1} \end{matrix}

car_andl2: ca A D ([h:hyp A] andl2 (E2 h) H) (andl2 E2' H)
            <- ({h2:hyp B2} ca A D ([h:hyp A] E2 h h2) (E2' h2)).

\begin{matrix}N \\ Γ, (A_{3} ∧ A) ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∧ A), A_{2}, A ⟶ A_{1} \end{matrix} ; ∧L_{2} ; Γ, (A_{3} ∧ A), A_{2} ⟶ A_{1} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ∧ A), A ⟶ A_{1} \end{matrix} ; ∧L_{2} ; Γ, (A_{3} ∧ A) ⟶ A_{1}

\begin{matrix}N \\ Γ, (A_{3} ∧ A), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∧ A), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ∧ A), A ⟶ A_{1} \end{matrix}

car_impr : ca A D ([h:hyp A] impr (E2 h)) (impr E2')
            <- ({h1:hyp B1} ca A D ([h:hyp A] E2 h h1) (E2' h1)).

\begin{matrix}N \\ Γ ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{2}, A ⟶ A_{1} \end{matrix} ; ⊃R ; Γ, A_{2} ⟶ (A ⊃ A_{1}) ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ A_{1} \end{matrix} ; ⊃R ; Γ ⟶ (A ⊃ A_{1})

\begin{matrix}N \\ Γ, A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ A_{1} \end{matrix}

car_impl : ca A D ([h:hyp A] impl (E1 h) (E2 h) H) (impl E1' E2' H)
<- ca A D E1 E1'
<- ({h2:hyp B2} ca A D ([h:hyp A] E2 h h2) (E2' h2)).

\begin{matrix}\begin{matrix}N \\ Γ, (A_{3} ⊃ A) ⟶ A_{2} \end{matrix} & ⨂ & \begin{aligned}\begin{matrix}N_{3} \\ Γ, (A_{3} ⊃ A), A_{2} ⟶ A_{3} \end{matrix} & \begin{matrix}N_{1} \\ Γ, (A_{3} ⊃ A), A_{2}, A ⟶ A_{1} \end{matrix} \\ & ⊃L \\ Γ, (A_{3} ⊃ A), A_{2} ⟶ A_{1} \end{aligned} \\ ⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{3} ⊃ A) ⟶ A_{3} \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{3} ⊃ A), A ⟶ A_{1} \end{matrix} \\ & ⊃L \\ Γ, (A_{3} ⊃ A) ⟶ A_{1} \end{aligned} \end{matrix}

\begin{matrix}N \\ Γ, (A_{3} ⊃ A) ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{3} \\ Γ, (A_{3} ⊃ A), A_{2} ⟶ A_{3} \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{3} ⊃ A) ⟶ A_{3} \end{matrix}

\begin{matrix}N \\ Γ, (A_{3} ⊃ A), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ⊃ A), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ⊃ A), A ⟶ A_{1} \end{matrix}

car_orr1 : ca A D ([h:hyp A] orr1 (E1 h)) (orr1 E1')
<- ca A D E1 E1'.

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ; ∨R_{1} ; Γ, A_{1} ⟶ (A ∨ A_{2}) ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix} ; ∨R_{1} ; Γ ⟶ (A ∨ A_{2})

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

car_orr2 : ca A D ([h:hyp A] orr2 (E2 h)) (orr2 E2')
<- ca A D E2 E2'.

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ; ∨R_{2} ; Γ, A_{1} ⟶ (A_{2} ∨ A) ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix} ; ∨R_{2} ; Γ ⟶ (A_{2} ∨ A)

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A \end{matrix}

car_orl  : ca A D ([h:hyp A] orl (E1 h) (E2 h) H) (orl E1' E2' H)
<- ({h1:hyp B1} ca A D ([h:hyp A] E1 h h1) (E1' h1))
<- ({h2:hyp B2} ca A D ([h:hyp A] E2 h h2) (E2' h2)).

\begin{matrix}\begin{matrix}N \\ Γ, (A_{3} ∨ A) ⟶ A_{2} \end{matrix} & ⨂ & \begin{aligned}\begin{matrix}N_{3} \\ Γ, (A_{3} ∨ A), A_{2}, A_{3} ⟶ A_{1} \end{matrix} & \begin{matrix}N_{1} \\ Γ, (A_{3} ∨ A), A_{2}, A ⟶ A_{1} \end{matrix} \\ & ∨L \\ Γ, (A_{3} ∨ A), A_{2} ⟶ A_{1} \end{aligned} \\ ⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{1} \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{3} ∨ A), A ⟶ A_{1} \end{matrix} \\ & ∨L \\ Γ, (A_{3} ∨ A) ⟶ A_{1} \end{aligned} \end{matrix}

\begin{matrix}N \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{3} \\ Γ, (A_{3} ∨ A), A_{3}, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{3} ∨ A), A_{3} ⟶ A_{1} \end{matrix}

\begin{matrix}N \\ Γ, (A_{3} ∨ A), A ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{3} ∨ A), A, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{3} ∨ A), A ⟶ A_{1} \end{matrix}

car_notr : ca A D ([h:hyp A] notr (E1 h)) (notr E1')
<- ({p:o} {h1:hyp B1} ca A D ([h:hyp A] E1 h p h1) (E1' p h1)).

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1}p_{1} \\ Γ, A_{1}, A ⟶ p_{1} \end{matrix} ; ¬R^{p_{1}} ; Γ, A_{1} ⟶ ¬(A) ⟹ \begin{matrix}N_{2}p_{1} \\ Γ, A ⟶ p_{1} \end{matrix} ; ¬R^{p_{1}} ; Γ ⟶ ¬(A)

\begin{matrix}N \\ Γ, A ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1}p \\ Γ, A, A_{1} ⟶ p \end{matrix} ⟹ \begin{matrix}N_{2}p \\ Γ, A ⟶ p \end{matrix}

car_notl : ca A D ([h:hyp A] notl (E1 h) H) (notl E1' H)
<- ca A D E1 E1'.

\begin{matrix}N \\ Γ, ¬(A) ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A), A_{1} ⟶ A \end{matrix} ; ¬L ; Γ, ¬(A), A_{1} ⟶ A_{2} ⟹ \begin{matrix}N_{2} \\ Γ, ¬(A) ⟶ A \end{matrix} ; ¬L ; Γ, ¬(A) ⟶ A_{2}

\begin{matrix}N \\ Γ, ¬(A) ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A), A_{1} ⟶ A \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, ¬(A) ⟶ A \end{matrix}

car_truer: ca A D ([h:hyp A] truer) (truer).

\begin{matrix}N \\ Γ ⟶ A \end{matrix} ⨂ \frac{⊤R}{Γ, A ⟶ ⊤} ⟹ \frac{⊤R}{Γ ⟶ ⊤}

car_falsel : ca A D ([h:hyp A] falsel H) (falsel H).

\begin{matrix}N \\ Γ, ⊥ ⟶ A_{1} \end{matrix} ⨂ \frac{⊥L}{Γ, ⊥, A_{1} ⟶ A} ⟹ \frac{⊥L}{Γ, ⊥ ⟶ A}

car_forallr : ca A D ([h:hyp A] forallr (E1 h)) (forallr E1')
               <- ({a:i} ca A D ([h:hyp A] E1 h a) (E1' a)).

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1}a_{1} \\ Γ, A_{1} ⟶ Aa_{1} \end{matrix} ; ∀R^{a_{1}} ; Γ, A_{1} ⟶ (∀x. Ax) ⟹ \begin{matrix}N_{2}a_{1} \\ Γ ⟶ Aa_{1} \end{matrix} ; ∀R^{a_{1}} ; Γ ⟶ (∀x. Ax)

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1}a \\ Γ, A_{1} ⟶ Aa \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ ⟶ Aa \end{matrix}

car_foralll: ca A D ([h:hyp A] foralll T (E1 h) H) (foralll T E1' H)
              <- ({h1} ca A D ([h:hyp A] E1 h h1) (E1' h1)).

\begin{matrix}N \\ Γ, (∀x. Ax) ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), A_{2}, At ⟶ A_{1} \end{matrix} ; ∀L ; Γ, (∀x. Ax), A_{2} ⟶ A_{1} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ A_{1} \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ A_{1}

\begin{matrix}N \\ Γ, (∀x. Ax), At ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), At, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ A_{1} \end{matrix}

car_existsr : ca A D ([h:hyp A] existsr T (E1 h)) (existsr T E1')
               <- ca A D E1 E1'.

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ At \end{matrix} ; ∃R ; Γ, A_{1} ⟶ (∃x. Ax) ⟹ \begin{matrix}N_{2} \\ Γ ⟶ At \end{matrix} ; ∃R ; Γ ⟶ (∃x. Ax)

\begin{matrix}N \\ Γ ⟶ A_{1} \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ At \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ At \end{matrix}

car_existsl : ca A D ([h:hyp A] existsl (E1 h) H) (existsl E1' H)
               <- ({a:i} {h1:hyp (B1 a)}
                     ca A D ([h:hyp A] E1 h a h1) (E1' a h1)).

\begin{matrix}N \\ Γ, (∃x. Ax) ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1}a_{1} \\ Γ, (∃x. Ax), A_{2}, Aa_{1} ⟶ A_{1} \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax), A_{2} ⟶ A_{1} ⟹ \begin{matrix}N_{2}a_{1} \\ Γ, (∃x. Ax), Aa_{1} ⟶ A_{1} \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax) ⟶ A_{1}

\begin{matrix}N \\ Γ, (∃x. Ax), Aa ⟶ A_{2} \end{matrix} ⨂ \begin{matrix}N_{1}a \\ Γ, (∃x. Ax), Aa, A_{2} ⟶ A_{1} \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ, (∃x. Ax), Aa ⟶ A_{1} \end{matrix}

A.2 Classical Calculus

We list the cases using the same conventions as for the intuitionistic calculus above. A transformation now has the form

\begin{matrix}D \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}E \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}F \\ Γ ⟶ Δ \end{matrix}

where F may refer to derivations constructed by appeals to the induction hypothesis. This relation is implemented by a type family

ca' : {A:o} (pos A -> #) -> (neg A -> #) -> # -> type.

Initial Conversions. Here either D or E is initial with the cut formula A as the principal formula. Note that appeals to contraction are implicit since we omit proof terms in this presentation. Recall that contraction does not change the structure of the derivation (only the proof term by substituting one formula label for another).

ca_axiom'l : ca' A ([p] axiom' N p) E (E N).

\frac{I}{Γ, A ⟶ A, Δ} ⨂ \begin{matrix}N \\ Γ, A, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N \\ Γ, A ⟶ Δ \end{matrix}

ca_axiom'r : ca' A D ([n] axiom' n P) (D P).

\begin{matrix}N \\ Γ ⟶ A, A, Δ \end{matrix} ⨂ \frac{I}{Γ, A ⟶ A, Δ} ⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

Essential Conversions. Here the cut formula A is the principal formula of the last inference in both D and E.

ca_and1' :
  ca' (A and B) ([p] andr' (D1 p) (D2 p) p) ([n] andl1' (E1 n) n) F
     <- ({p1:pos A} ca' (A and B) ([p] D1 p p1) ([n] andl1' (E1 n) n) (D1' p1))
     <- ({n1:neg A}
           ca' (A and B) ([p] andr' (D1 p) (D2 p) p)
           ([n] E1 n n1) (E1' n1))
     <- ca' A ([p1] D1' p1) ([n1] E1' n1) F.

\begin{matrix}\begin{matrix}N_{3} \\ Γ ⟶ A, (A ∧ A_{1}), Δ \end{matrix} & \begin{matrix}N_{4} \\ Γ ⟶ A_{1}, (A ∧ A_{1}), Δ \end{matrix} \\ & ∧R \\ Γ ⟶ (A ∧ A_{1}), Δ \end{matrix} ⨂ \begin{matrix}N_{5} \\ Γ, (A ∧ A_{1}), A ⟶ Δ \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{1}) ⟶ Δ

⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ ⟶ (A ∧ A_{1}), A, Δ \end{matrix} ⨂ \begin{matrix}N_{5} \\ Γ, (A ∧ A_{1}), A ⟶ A, Δ \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{1}) ⟶ A, Δ ⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

\begin{matrix}\begin{matrix}N_{3} \\ Γ, A ⟶ A, (A ∧ A_{1}), Δ \end{matrix} & \begin{matrix}N_{4} \\ Γ, A ⟶ A_{1}, (A ∧ A_{1}), Δ \end{matrix} \\ & ∧R \\ Γ, A ⟶ (A ∧ A_{1}), Δ \end{matrix} ⨂ \begin{matrix}N_{5} \\ Γ, A, (A ∧ A_{1}) ⟶ Δ \end{matrix}

⟹ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_and2' :
ca' (A and B) ([p] andr' (D1 p) (D2 p) p) ([n] andl2' (E2 n) n) F
<- ({p2:pos B} ca' (A and B) ([p] D2 p p2) ([n] andl2' (E2 n) n) (D2' p2))
<- ({n2:neg B}
      ca' (A and B) ([p] andr' (D1 p) (D2 p) p)
      ([n] E2 n n2) (E2' n2))
<- ca' B ([p2] D2' p2) ([n2] E2' n2) F.

\begin{matrix}\begin{matrix}N_{3} \\ Γ ⟶ A_{1}, (A_{1} ∧ A), Δ \end{matrix} & \begin{matrix}N_{4} \\ Γ ⟶ A, (A_{1} ∧ A), Δ \end{matrix} \\ & ∧R \\ Γ ⟶ (A_{1} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{5} \\ Γ, (A_{1} ∧ A), A ⟶ Δ \end{matrix} ; ∧L_{2} ; Γ, (A_{1} ∧ A) ⟶ Δ

⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{4} \\ Γ ⟶ (A_{1} ∧ A), A, Δ \end{matrix} ⨂ \begin{matrix}N_{5} \\ Γ, (A_{1} ∧ A), A ⟶ A, Δ \end{matrix} ; ∧L_{2} ; Γ, (A_{1} ∧ A) ⟶ A, Δ ⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

\begin{matrix}\begin{matrix}N_{3} \\ Γ, A ⟶ A_{1}, (A_{1} ∧ A), Δ \end{matrix} & \begin{matrix}N_{4} \\ Γ, A ⟶ A, (A_{1} ∧ A), Δ \end{matrix} \\ & ∧R \\ Γ, A ⟶ (A_{1} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{5} \\ Γ, A, (A_{1} ∧ A) ⟶ Δ \end{matrix}

⟹ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_imp' :
ca' (A imp B) ([p] impr' (D1 p) p) ([n] impl' (E1 n) (E2 n) n) F
<- ({p1:pos A} ca' (A imp B) ([p] impr' (D1 p) p) ([n] E1 n p1) (E1' p1))
<- ({n2:neg B} ca' (A imp B) ([p] impr' (D1 p) p) ([n] E2 n n2) (E2' n2))
<- ({n1:neg A} {p2:pos B}
      ca' (A imp B) ([p] D1 p n1 p2) ([n] impl' (E1 n) (E2 n) n)
      (D1' n1 p2))
<- ({p2:pos B} ca' A ([p1] E1' p1) ([n1] D1' n1 p2) (F2 p2))
<- ca' B ([p2] F2 p2) ([n2] E2' n2) F.

\begin{matrix}N_{5} \\ Γ, A_{1} ⟶ A, (A_{1} ⊃ A), Δ \end{matrix} ; ⊃R ; Γ ⟶ (A_{1} ⊃ A), Δ ⨂ \begin{matrix}\begin{matrix}N_{6} \\ Γ, (A_{1} ⊃ A) ⟶ A_{1}, Δ \end{matrix} & \begin{matrix}N_{7} \\ Γ, (A_{1} ⊃ A), A ⟶ Δ \end{matrix} \\ & ⊃L \\ Γ, (A_{1} ⊃ A) ⟶ Δ \end{matrix}

⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{5} \\ Γ, A_{1} ⟶ A, (A_{1} ⊃ A), A_{1}, Δ \end{matrix} ; ⊃R ; Γ ⟶ (A_{1} ⊃ A), A_{1}, Δ ⨂ \begin{matrix}N_{6} \\ Γ, (A_{1} ⊃ A) ⟶ A_{1}, Δ \end{matrix} ⟹ \begin{matrix}N_{3} \\ Γ ⟶ A_{1}, Δ \end{matrix}

\begin{matrix}N_{5} \\ Γ, A, A_{1} ⟶ A, (A_{1} ⊃ A), Δ \end{matrix} ; ⊃R ; Γ, A ⟶ (A_{1} ⊃ A), Δ ⨂ \begin{matrix}N_{7} \\ Γ, A, (A_{1} ⊃ A) ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix}

\begin{matrix}N_{5} \\ Γ, A_{1} ⟶ (A_{1} ⊃ A), A, Δ \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{6} \\ Γ, A_{1}, (A_{1} ⊃ A) ⟶ A_{1}, A, Δ \end{matrix} & \begin{matrix}N_{7} \\ Γ, A_{1}, (A_{1} ⊃ A), A ⟶ A, Δ \end{matrix} \\ & ⊃L \\ Γ, A_{1}, (A_{1} ⊃ A) ⟶ A, Δ \end{matrix}

⟹ \begin{matrix}N_{4} \\ Γ, A_{1} ⟶ A, Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ ⟶ A_{1}, A, Δ \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, A_{1} ⟶ A, Δ \end{matrix} ⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_or1' :
ca' (A or B) ([p] orr1' (D1 p) p) ([n] orl' (E1 n) (E2 n) n) F
<- ({n1:neg A} ca' (A or B) ([p] orr1' (D1 p) p) ([n] E1 n n1) (E1' n1))
<- ({p1:pos A} ca' (A or B) ([p] D1 p p1) ([n] orl' (E1 n) (E2 n) n)
      (D1' p1))
<- ca' A D1' E1' F.

\begin{matrix}N_{3} \\ Γ ⟶ A, (A ∨ A_{1}), Δ \end{matrix} ; ∨R_{1} ; Γ ⟶ (A ∨ A_{1}), Δ ⨂ \begin{matrix}\begin{matrix}N_{4} \\ Γ, (A ∨ A_{1}), A ⟶ Δ \end{matrix} & \begin{matrix}N_{5} \\ Γ, (A ∨ A_{1}), A_{1} ⟶ Δ \end{matrix} \\ & ∨L \\ Γ, (A ∨ A_{1}) ⟶ Δ \end{matrix}

⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ, A ⟶ A, (A ∨ A_{1}), Δ \end{matrix} ; ∨R_{1} ; Γ, A ⟶ (A ∨ A_{1}), Δ ⨂ \begin{matrix}N_{4} \\ Γ, A, (A ∨ A_{1}) ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ ⟶ (A ∨ A_{1}), A, Δ \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{4} \\ Γ, (A ∨ A_{1}), A ⟶ A, Δ \end{matrix} & \begin{matrix}N_{5} \\ Γ, (A ∨ A_{1}), A_{1} ⟶ A, Δ \end{matrix} \\ & ∨L \\ Γ, (A ∨ A_{1}) ⟶ A, Δ \end{matrix}

⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_or2' :
ca' (A or B) ([p] orr2' (D2 p) p) ([n] orl' (E1 n) (E2 n) n) F
<- ({n2:neg B} ca' (A or B) ([p] orr2' (D2 p) p) ([n] E2 n n2) (E2' n2))
<- ({p2:pos B} ca' (A or B) ([p] D2 p p2) ([n] orl' (E1 n) (E2 n) n)
      (D2' p2))
<- ca' B D2' E2' F.

\begin{matrix}N_{3} \\ Γ ⟶ A, (A_{1} ∨ A), Δ \end{matrix} ; ∨R_{2} ; Γ ⟶ (A_{1} ∨ A), Δ ⨂ \begin{matrix}\begin{matrix}N_{4} \\ Γ, (A_{1} ∨ A), A_{1} ⟶ Δ \end{matrix} & \begin{matrix}N_{5} \\ Γ, (A_{1} ∨ A), A ⟶ Δ \end{matrix} \\ & ∨L \\ Γ, (A_{1} ∨ A) ⟶ Δ \end{matrix}

⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ, A ⟶ A, (A_{1} ∨ A), Δ \end{matrix} ; ∨R_{2} ; Γ, A ⟶ (A_{1} ∨ A), Δ ⨂ \begin{matrix}N_{5} \\ Γ, A, (A_{1} ∨ A) ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ ⟶ (A_{1} ∨ A), A, Δ \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{4} \\ Γ, (A_{1} ∨ A), A_{1} ⟶ A, Δ \end{matrix} & \begin{matrix}N_{5} \\ Γ, (A_{1} ∨ A), A ⟶ A, Δ \end{matrix} \\ & ∨L \\ Γ, (A_{1} ∨ A) ⟶ A, Δ \end{matrix}

⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_not' :
ca' (not A) ([p] notr' (D1 p) p) ([n] notl' (E1 n) n) F
<- ({p1:pos A} ca' (not A) ([p] notr' (D1 p) p) ([n] E1 n p1) (E1' p1))
<- ({n1:neg A} ca' (not A) ([p] D1 p n1) ([n] notl' (E1 n) n) (D1' n1))
<- ca' A E1' D1' F.

\begin{matrix}N_{3} \\ Γ, A ⟶ ¬(A), Δ \end{matrix} ; ¬R ; Γ ⟶ ¬(A), Δ ⨂ \begin{matrix}N_{4} \\ Γ, ¬(A) ⟶ A, Δ \end{matrix} ; ¬L ; Γ, ¬(A) ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ, A ⟶ ¬(A), A, Δ \end{matrix} ; ¬R ; Γ ⟶ ¬(A), A, Δ ⨂ \begin{matrix}N_{4} \\ Γ, ¬(A) ⟶ A, Δ \end{matrix} ⟹ \begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ, A ⟶ ¬(A), Δ \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, A, ¬(A) ⟶ A, Δ \end{matrix} ; ¬L ; Γ, A, ¬(A) ⟶ Δ ⟹ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_forall' :
ca' (forall A) ([p] forallr' (D1 p) p) ([n] foralll' T (E1 n) n) F
<- ({n1} ca' (forall A) ([p] forallr' (D1 p) p) ([n] E1 n n1) (E1' n1))
<- ({p1} ca' (forall A) ([p] D1 p T p1) ([n] foralll' T (E1 n) n) (D1' p1))
<- ca' (A T) D1' E1' F.

\begin{matrix}N_{3}a \\ Γ ⟶ Aa, (∀x. Ax), Δ \end{matrix} ; ∀R^{a} ; Γ ⟶ (∀x. Ax), Δ ⨂ \begin{matrix}N_{4} \\ Γ, (∀x. Ax), At ⟶ Δ \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{3}a \\ Γ, At ⟶ Aa, (∀x. Ax), Δ \end{matrix} ; ∀R^{a} ; Γ, At ⟶ (∀x. Ax), Δ ⨂ \begin{matrix}N_{4} \\ Γ, At, (∀x. Ax) ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, At ⟶ Δ \end{matrix}

\begin{matrix}N_{3}t \\ Γ ⟶ (∀x. Ax), At, Δ \end{matrix} ⨂ \begin{matrix}N_{4} \\ Γ, (∀x. Ax), At ⟶ At, Δ \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ At, Δ ⟹ \begin{matrix}N \\ Γ ⟶ At, Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ At, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, At ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

ca_exists' :
  ca' (exists A) ([p] existsr' T (D1 p) p) ([n] existsl' (E1 n) n) F
     <- ({n1} ca' (exists A) ([p] existsr' T (D1 p) p) ([n] E1 n T n1) (E1' n1))
     <- ({p1} ca' (exists A) ([p] D1 p p1) ([n] existsl' (E1 n) n) (D1' p1))
     <- ca' (A T) D1' E1' F.

\begin{matrix}N_{3} \\ Γ ⟶ At, (∃x. Ax), Δ \end{matrix} ; ∃R ; Γ ⟶ (∃x. Ax), Δ ⨂ \begin{matrix}N_{4}a \\ Γ, (∃x. Ax), Aa ⟶ Δ \end{matrix} ; ∃L^{a} ; Γ, (∃x. Ax) ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ, At ⟶ At, (∃x. Ax), Δ \end{matrix} ; ∃R ; Γ, At ⟶ (∃x. Ax), Δ ⨂ \begin{matrix}N_{4}t \\ Γ, At, (∃x. Ax) ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{1} \\ Γ, At ⟶ Δ \end{matrix}

\begin{matrix}N_{3} \\ Γ ⟶ (∃x. Ax), At, Δ \end{matrix} ⨂ \begin{matrix}N_{4}a \\ Γ, (∃x. Ax), Aa ⟶ At, Δ \end{matrix} ; ∃L^{a} ; Γ, (∃x. Ax) ⟶ At, Δ ⟹ \begin{matrix}N \\ Γ ⟶ At, Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ At, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, At ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ Δ \end{matrix}

Right Commutative Conversions. Here the cut formula is a side formula of the last inference in E.

car_axiom' : ca' A D ([n] axiom' N P) (axiom' N P).

\begin{matrix}N \\ Γ, A_{1} ⟶ A, A_{1}, Δ \end{matrix} ⨂ \frac{I}{Γ, A_{1}, A ⟶ A_{1}, Δ} ⟹ \frac{I}{Γ, A_{1} ⟶ A_{1}, Δ}

car_andr' :
ca' A D ([n] andr' (E1 n) (E2 n) P) (andr' F1 F2 P)
<- ({p1:pos B1} ca' A D ([n] E1 n p1) (F1 p1))
<- ({p2:pos B2} ca' A D ([n] E2 n p2) (F2 p2)).

\begin{matrix}N \\ Γ ⟶ A_{1}, (A_{2} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{3} \\ Γ, A_{1} ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix} & \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A_{2} ∧ A), Δ \end{matrix} \\ & ∧R \\ Γ, A_{1} ⟶ (A_{2} ∧ A), Δ \end{matrix}

⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix} & \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∧ A), Δ \end{matrix} \\ & ∧R \\ Γ ⟶ (A_{2} ∧ A), Δ \end{aligned}

\begin{matrix}N \\ Γ ⟶ A_{1}, A_{2}, (A_{2} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{3} \\ Γ, A_{1} ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1}, A, (A_{2} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A_{2} ∧ A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∧ A), Δ \end{matrix}

car_andl1' :
ca' A D ([n] andl1' (E1 n) N) (andl1' F1 N)
<- ({n1:neg B1} ca' A D ([n] E1 n n1) (F1 n1)).

\begin{matrix}N \\ Γ, (A ∧ A_{2}) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{2}), A_{1}, A ⟶ Δ \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{2}), A_{1} ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{2}), A ⟶ Δ \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{2}) ⟶ Δ

\begin{matrix}N \\ Γ, (A ∧ A_{2}), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{2}), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{2}), A ⟶ Δ \end{matrix}

car_andl2' :
ca' A D ([n] andl2' (E2 n) N) (andl2' F2 N)
<- ({n2:neg B2} ca' A D ([n] E2 n n2) (F2 n2)).

\begin{matrix}N \\ Γ, (A_{2} ∧ A) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∧ A), A_{1}, A ⟶ Δ \end{matrix} ; ∧L_{2} ; Γ, (A_{2} ∧ A), A_{1} ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ∧ A), A ⟶ Δ \end{matrix} ; ∧L_{2} ; Γ, (A_{2} ∧ A) ⟶ Δ

\begin{matrix}N \\ Γ, (A_{2} ∧ A), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∧ A), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ∧ A), A ⟶ Δ \end{matrix}

car_impr' :
ca' A D ([n] impr' (E1 n) P) (impr' F1 P)
<- ({n1:neg B1} {p2:pos B2}
      ca' A D ([n] E1 n n1 p2) (F1 n1 p2)).

\begin{matrix}N \\ Γ ⟶ A_{2}, (A ⊃ A_{1}), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{2}, A ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ; ⊃R ; Γ, A_{2} ⟶ (A ⊃ A_{1}), Δ ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ; ⊃R ; Γ ⟶ (A ⊃ A_{1}), Δ

\begin{matrix}N \\ Γ, A ⟶ A_{2}, A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A, A_{2} ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix}

car_impl' :
ca' A D ([n] impl' (E1 n) (E2 n) N) (impl' F1 F2 N)
<- ({p1:pos B1} ca' A D ([n] E1 n p1) (F1 p1))
<- ({n2:neg B2} ca' A D ([n] E2 n n2) (F2 n2)).

\begin{matrix}N \\ Γ, (A_{2} ⊃ A) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{3} \\ Γ, (A_{2} ⊃ A), A_{1} ⟶ A_{2}, Δ \end{matrix} & \begin{matrix}N_{1} \\ Γ, (A_{2} ⊃ A), A_{1}, A ⟶ Δ \end{matrix} \\ & ⊃L \\ Γ, (A_{2} ⊃ A), A_{1} ⟶ Δ \end{matrix}

⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{2} ⊃ A) ⟶ A_{2}, Δ \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{2} ⊃ A), A ⟶ Δ \end{matrix} \\ & ⊃L \\ Γ, (A_{2} ⊃ A) ⟶ Δ \end{aligned}

\begin{matrix}N \\ Γ, (A_{2} ⊃ A) ⟶ A_{1}, A_{2}, Δ \end{matrix} ⨂ \begin{matrix}N_{3} \\ Γ, (A_{2} ⊃ A), A_{1} ⟶ A_{2}, Δ \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{2} ⊃ A) ⟶ A_{2}, Δ \end{matrix}

\begin{matrix}N \\ Γ, (A_{2} ⊃ A), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ⊃ A), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ⊃ A), A ⟶ Δ \end{matrix}

car_orr1' :
ca' A D ([n] orr1' (E1 n) P) (orr1' F1 P)
<- ({p1:pos B1} ca' A D ([n] E1 n p1) (F1 p1)).

\begin{matrix}N \\ Γ ⟶ A_{1}, (A ∨ A_{2}), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A ∨ A_{2}), Δ \end{matrix} ; ∨R_{1} ; Γ, A_{1} ⟶ (A ∨ A_{2}), Δ ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A ∨ A_{2}), Δ \end{matrix} ; ∨R_{1} ; Γ ⟶ (A ∨ A_{2}), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, A, (A ∨ A_{2}), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A ∨ A_{2}), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A ∨ A_{2}), Δ \end{matrix}

car_orr2' :
ca' A D ([n] orr2' (E2 n) P) (orr2' F2 P)
<- ({p2:pos B2} ca' A D ([n] E2 n p2) (F2 p2)).

\begin{matrix}N \\ Γ ⟶ A_{1}, (A_{2} ∨ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A_{2} ∨ A), Δ \end{matrix} ; ∨R_{2} ; Γ, A_{1} ⟶ (A_{2} ∨ A), Δ ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∨ A), Δ \end{matrix} ; ∨R_{2} ; Γ ⟶ (A_{2} ∨ A), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, A, (A_{2} ∨ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A_{2} ∨ A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∨ A), Δ \end{matrix}

car_orl' :
ca' A D ([n] orl' (E1 n) (E2 n) N) (orl' F1 F2 N)
<- ({n1:neg B1} ca' A D ([n] E1 n n1) (F1 n1))
<- ({n2:neg B2} ca' A D ([n] E2 n n2) (F2 n2)).

\begin{matrix}N \\ Γ, (A_{2} ∨ A) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}\begin{matrix}N_{3} \\ Γ, (A_{2} ∨ A), A_{1}, A_{2} ⟶ Δ \end{matrix} & \begin{matrix}N_{1} \\ Γ, (A_{2} ∨ A), A_{1}, A ⟶ Δ \end{matrix} \\ & ∨L \\ Γ, (A_{2} ∨ A), A_{1} ⟶ Δ \end{matrix}

⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{2} ∨ A), A_{2} ⟶ Δ \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{2} ∨ A), A ⟶ Δ \end{matrix} \\ & ∨L \\ Γ, (A_{2} ∨ A) ⟶ Δ \end{aligned}

\begin{matrix}N \\ Γ, (A_{2} ∨ A), A_{2} ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{3} \\ Γ, (A_{2} ∨ A), A_{2}, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{2} ∨ A), A_{2} ⟶ Δ \end{matrix}

\begin{matrix}N \\ Γ, (A_{2} ∨ A), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∨ A), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ∨ A), A ⟶ Δ \end{matrix}

car_notr' :
ca' A D ([n] notr' (E1 n) P) (notr' F1 P)
<- ({n1:neg B1} ca' A D ([n] E1 n n1) (F1 n1)).

\begin{matrix}N \\ Γ ⟶ A_{1}, ¬(A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1}, A ⟶ ¬(A), Δ \end{matrix} ; ¬R ; Γ, A_{1} ⟶ ¬(A), Δ ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ ¬(A), Δ \end{matrix} ; ¬R ; Γ ⟶ ¬(A), Δ

\begin{matrix}N \\ Γ, A ⟶ A_{1}, ¬(A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A, A_{1} ⟶ ¬(A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ ¬(A), Δ \end{matrix}

car_notl' :
  ca' A D ([n] notl' (E1 n) N) (notl' F1 N)
     <- ({p1:pos B1} ca' A D ([n] E1 n p1) (F1 p1)).

\begin{matrix}N \\ Γ, ¬(A) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A), A_{1} ⟶ A, Δ \end{matrix} ; ¬L ; Γ, ¬(A), A_{1} ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ, ¬(A) ⟶ A, Δ \end{matrix} ; ¬L ; Γ, ¬(A) ⟶ Δ

\begin{matrix}N \\ Γ, ¬(A) ⟶ A_{1}, A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A), A_{1} ⟶ A, Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, ¬(A) ⟶ A, Δ \end{matrix}

car_truer' :
  ca' A D ([n] truer' P) (truer' P).

\begin{matrix}N \\ Γ ⟶ A, ⊤, Δ \end{matrix} ⨂ \frac{⊤R}{Γ, A ⟶ ⊤, Δ} ⟹ \frac{⊤R}{Γ ⟶ ⊤, Δ}

car_falsel' :
  ca' A D ([n] falsel' N) (falsel' N).

\begin{matrix}N \\ Γ, ⊥ ⟶ A, Δ \end{matrix} ⨂ \frac{⊥L}{Γ, ⊥, A ⟶ Δ} ⟹ \frac{⊥L}{Γ, ⊥ ⟶ Δ}

car_forallr' :
  ca' A D ([n] forallr' (E1 n) P) (forallr' F1 P)
     <- ({a:i} {p1:pos (B1 a)}
           ca' A D ([n] E1 n a p1) (F1 a p1)).

\begin{matrix}N \\ Γ ⟶ A_{1}, (∀x. Ax), Δ \end{matrix} ⨂ \begin{matrix}N_{1}a_{1} \\ Γ, A_{1} ⟶ Aa_{1}, (∀x. Ax), Δ \end{matrix} ; ∀R^{a_{1}} ; Γ, A_{1} ⟶ (∀x. Ax), Δ ⟹ \begin{matrix}N_{2}a_{1} \\ Γ ⟶ Aa_{1}, (∀x. Ax), Δ \end{matrix} ; ∀R^{a_{1}} ; Γ ⟶ (∀x. Ax), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, Aa, (∀x. Ax), Δ \end{matrix} ⨂ \begin{matrix}N_{1}a \\ Γ, A_{1} ⟶ Aa, (∀x. Ax), Δ \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ ⟶ Aa, (∀x. Ax), Δ \end{matrix}

car_foralll' :
  ca' A D ([n] foralll' T (E1 n) N) (foralll' T F1 N)
     <- ({n1} ca' A D ([n] E1 n n1) (F1 n1)).

\begin{matrix}N \\ Γ, (∀x. Ax) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), A_{1}, At ⟶ Δ \end{matrix} ; ∀L ; Γ, (∀x. Ax), A_{1} ⟶ Δ ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ Δ \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ Δ

\begin{matrix}N \\ Γ, (∀x. Ax), At ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), At, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ Δ \end{matrix}

car_existsr' :
  ca' A D ([n] existsr' T (E1 n) P) (existsr' T F1 P)
     <- ({p1} ca' A D ([n] E1 n p1) (F1 p1)).

\begin{matrix}N \\ Γ ⟶ A_{1}, (∃x. Ax), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ At, (∃x. Ax), Δ \end{matrix} ; ∃R ; Γ, A_{1} ⟶ (∃x. Ax), Δ ⟹ \begin{matrix}N_{2} \\ Γ ⟶ At, (∃x. Ax), Δ \end{matrix} ; ∃R ; Γ ⟶ (∃x. Ax), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, At, (∃x. Ax), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ At, (∃x. Ax), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ At, (∃x. Ax), Δ \end{matrix}

car_existsl' :
  ca' A D ([n] existsl' (E1 n) N) (existsl' F1 N)
     <- ({a:i} {n1:neg (B1 a)}
           ca' A D ([n] E1 n a n1) (F1 a n1)).

\begin{matrix}N \\ Γ, (∃x. Ax) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1}a_{1} \\ Γ, (∃x. Ax), A_{1}, Aa_{1} ⟶ Δ \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax), A_{1} ⟶ Δ ⟹ \begin{matrix}N_{2}a_{1} \\ Γ, (∃x. Ax), Aa_{1} ⟶ Δ \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax) ⟶ Δ

\begin{matrix}N \\ Γ, (∃x. Ax), Aa ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1}a \\ Γ, (∃x. Ax), Aa, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ, (∃x. Ax), Aa ⟶ Δ \end{matrix}

Left Commutative Conversions. Here the cut formula A is a side formula of the last inference in D.

cal_axiom' : ca' A ([p] axiom' N P) E (axiom' N P).

\begin{matrix}N \\ Γ, A_{1} ⟶ A, A_{1}, Δ \end{matrix} ⨂ \frac{I}{Γ, A_{1}, A ⟶ A_{1}, Δ} ⟹ \frac{I}{Γ, A_{1} ⟶ A_{1}, Δ}

cal_andr' :
ca' A ([p] andr' (D1 p) (D2 p) P) E (andr' F1 F2 P)
<- ({p1:pos B1} ca' A ([p] D1 p p1) E (F1 p1))
<- ({p2:pos B2} ca' A ([p] D2 p p2) E (F2 p2)).

\begin{matrix}\begin{matrix}N_{3} \\ Γ ⟶ A_{2}, A_{1}, (A_{2} ∧ A), Δ \end{matrix} & \begin{matrix}N \\ Γ ⟶ A, A_{1}, (A_{2} ∧ A), Δ \end{matrix} \\ & ∧R \\ Γ ⟶ A_{1}, (A_{2} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ (A_{2} ∧ A), Δ \end{matrix}

⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix} & \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∧ A), Δ \end{matrix} \\ & ∧R \\ Γ ⟶ (A_{2} ∧ A), Δ \end{aligned}

\begin{matrix}N_{3} \\ Γ ⟶ A_{1}, A_{2}, (A_{2} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ ⟶ A_{2}, (A_{2} ∧ A), Δ \end{matrix}

\begin{matrix}N \\ Γ ⟶ A_{1}, A, (A_{2} ∧ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A_{2} ∧ A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∧ A), Δ \end{matrix}

cal_andl1' :
ca' A ([p] andl1' (D1 p) N) E (andl1' F1 N)
<- ({n1:neg B1} ca' A ([p] D1 p n1) E (F1 n1)).

\begin{matrix}N \\ Γ, (A ∧ A_{2}), A ⟶ A_{1}, Δ \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{2}) ⟶ A_{1}, Δ ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{2}), A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{2}), A ⟶ Δ \end{matrix} ; ∧L_{1} ; Γ, (A ∧ A_{2}) ⟶ Δ

\begin{matrix}N \\ Γ, (A ∧ A_{2}), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A ∧ A_{2}), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A ∧ A_{2}), A ⟶ Δ \end{matrix}

cal_andl2' :
ca' A ([p] andl2' (D2 p) N) E (andl2' F2 N)
<- ({n2:neg B2} ca' A ([p] D2 p n2) E (F2 n2)).

\begin{matrix}N \\ Γ, (A_{2} ∧ A), A ⟶ A_{1}, Δ \end{matrix} ; ∧L_{2} ; Γ, (A_{2} ∧ A) ⟶ A_{1}, Δ ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∧ A), A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ∧ A), A ⟶ Δ \end{matrix} ; ∧L_{2} ; Γ, (A_{2} ∧ A) ⟶ Δ

\begin{matrix}N \\ Γ, (A_{2} ∧ A), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∧ A), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ∧ A), A ⟶ Δ \end{matrix}

cal_impr' :
ca' A ([p] impr' (D1 p) P) E (impr' F1 P)
<- ({n1:neg B1} {p2:pos B2}
      ca' A ([p] D1 p n1 p2) E (F1 n1 p2)).

\begin{matrix}N \\ Γ, A ⟶ A_{1}, A_{2}, (A ⊃ A_{1}), Δ \end{matrix} ; ⊃R ; Γ ⟶ A_{2}, (A ⊃ A_{1}), Δ ⨂ \begin{matrix}N_{1} \\ Γ, A_{2} ⟶ (A ⊃ A_{1}), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ; ⊃R ; Γ ⟶ (A ⊃ A_{1}), Δ

\begin{matrix}N \\ Γ, A ⟶ A_{2}, A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A, A_{2} ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ A_{1}, (A ⊃ A_{1}), Δ \end{matrix}

cal_impl' :
ca' A ([p] impl' (D1 p) (D2 p) N) E (impl' F1 F2 N)
<- ({p1:pos B1} ca' A ([p] D1 p p1) E (F1 p1))
<- ({n2:neg B2} ca' A ([p] D2 p n2) E (F2 n2)).

\begin{matrix}\begin{matrix}N_{3} \\ Γ, (A_{2} ⊃ A) ⟶ A_{2}, A_{1}, Δ \end{matrix} & \begin{matrix}N \\ Γ, (A_{2} ⊃ A), A ⟶ A_{1}, Δ \end{matrix} \\ & ⊃L \\ Γ, (A_{2} ⊃ A) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ⊃ A), A_{1} ⟶ Δ \end{matrix}

⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{2} ⊃ A) ⟶ A_{2}, Δ \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{2} ⊃ A), A ⟶ Δ \end{matrix} \\ & ⊃L \\ Γ, (A_{2} ⊃ A) ⟶ Δ \end{aligned}

\begin{matrix}N_{3} \\ Γ, (A_{2} ⊃ A) ⟶ A_{1}, A_{2}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ⊃ A), A_{1} ⟶ A_{2}, Δ \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{2} ⊃ A) ⟶ A_{2}, Δ \end{matrix}

\begin{matrix}N \\ Γ, (A_{2} ⊃ A), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ⊃ A), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ⊃ A), A ⟶ Δ \end{matrix}

cal_orr1' :
ca' A ([p] orr1' (D1 p) P) E (orr1' F1 P)
<- ({p1:pos B1} ca' A ([p] D1 p p1) E (F1 p1)).

\begin{matrix}N \\ Γ ⟶ A, A_{1}, (A ∨ A_{2}), Δ \end{matrix} ; ∨R_{1} ; Γ ⟶ A_{1}, (A ∨ A_{2}), Δ ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ (A ∨ A_{2}), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A ∨ A_{2}), Δ \end{matrix} ; ∨R_{1} ; Γ ⟶ (A ∨ A_{2}), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, A, (A ∨ A_{2}), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A ∨ A_{2}), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A ∨ A_{2}), Δ \end{matrix}

cal_orr2' :
ca' A ([p] orr2' (D2 p) P) E (orr2' F2 P)
<- ({p2:pos B2} ca' A ([p] D2 p p2) E (F2 p2)).

\begin{matrix}N \\ Γ ⟶ A, A_{1}, (A_{2} ∨ A), Δ \end{matrix} ; ∨R_{2} ; Γ ⟶ A_{1}, (A_{2} ∨ A), Δ ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ (A_{2} ∨ A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∨ A), Δ \end{matrix} ; ∨R_{2} ; Γ ⟶ (A_{2} ∨ A), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, A, (A_{2} ∨ A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ A, (A_{2} ∨ A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ A, (A_{2} ∨ A), Δ \end{matrix}

cal_orl' :
ca' A ([p] orl' (D1 p) (D2 p) N) E (orl' F1 F2 N)
<- ({n1:neg B1} ca' A ([p] D1 p n1) E (F1 n1))
<- ({n2:neg B2} ca' A ([p] D2 p n2) E (F2 n2)).

\begin{matrix}\begin{matrix}N_{3} \\ Γ, (A_{2} ∨ A), A_{2} ⟶ A_{1}, Δ \end{matrix} & \begin{matrix}N \\ Γ, (A_{2} ∨ A), A ⟶ A_{1}, Δ \end{matrix} \\ & ∨L \\ Γ, (A_{2} ∨ A) ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∨ A), A_{1} ⟶ Δ \end{matrix}

⟹ \begin{aligned}\begin{matrix}N_{4} \\ Γ, (A_{2} ∨ A), A_{2} ⟶ Δ \end{matrix} & \begin{matrix}N_{2} \\ Γ, (A_{2} ∨ A), A ⟶ Δ \end{matrix} \\ & ∨L \\ Γ, (A_{2} ∨ A) ⟶ Δ \end{aligned}

\begin{matrix}N_{3} \\ Γ, (A_{2} ∨ A), A_{2} ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∨ A), A_{2}, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{4} \\ Γ, (A_{2} ∨ A), A_{2} ⟶ Δ \end{matrix}

\begin{matrix}N \\ Γ, (A_{2} ∨ A), A ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (A_{2} ∨ A), A, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (A_{2} ∨ A), A ⟶ Δ \end{matrix}

cal_notr' :
ca' A ([p] notr' (D1 p) P) E (notr' F1 P)
<- ({n1:neg B1} ca' A ([p] D1 p n1) E (F1 n1)).

\begin{matrix}N \\ Γ, A ⟶ A_{1}, ¬(A), Δ \end{matrix} ; ¬R ; Γ ⟶ A_{1}, ¬(A), Δ ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ ¬(A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ ¬(A), Δ \end{matrix} ; ¬R ; Γ ⟶ ¬(A), Δ

\begin{matrix}N \\ Γ, A ⟶ A_{1}, ¬(A), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A, A_{1} ⟶ ¬(A), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, A ⟶ ¬(A), Δ \end{matrix}

cal_notl' :
  ca' A ([p] notl' (D1 p) N) E (notl' F1 N)
     <- ({p1:pos B1} ca' A ([p] D1 p p1) E (F1 p1)).

\begin{matrix}N \\ Γ, ¬(A) ⟶ A, A_{1}, Δ \end{matrix} ; ¬L ; Γ, ¬(A) ⟶ A_{1}, Δ ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A), A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, ¬(A) ⟶ A, Δ \end{matrix} ; ¬L ; Γ, ¬(A) ⟶ Δ

\begin{matrix}N \\ Γ, ¬(A) ⟶ A_{1}, A, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, ¬(A), A_{1} ⟶ A, Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, ¬(A) ⟶ A, Δ \end{matrix}

cal_truer' :
  ca' A ([p] truer' P) E (truer' P).

\frac{⊤R}{Γ ⟶ A, ⊤, Δ} ⨂ \begin{matrix}N \\ Γ, A ⟶ ⊤, Δ \end{matrix} ⟹ \frac{⊤R}{Γ ⟶ ⊤, Δ}

cal_falsel' :
  ca' A ([p] falsel' N) E (falsel' N).

\frac{⊥L}{Γ, ⊥ ⟶ A, Δ} ⨂ \begin{matrix}N \\ Γ, ⊥, A ⟶ Δ \end{matrix} ⟹ \frac{⊥L}{Γ, ⊥ ⟶ Δ}

cal_forallr' :
  ca' A ([p] forallr' (D1 p) P) E (forallr' F1 P)
     <- ({a:i} {p1:pos (B1 a)}
           ca' A ([p] D1 p a p1) E (F1 a p1)).

\begin{matrix}Na_{1} \\ Γ ⟶ Aa_{1}, A_{1}, (∀x. Ax), Δ \end{matrix} ; ∀R^{a_{1}} ; Γ ⟶ A_{1}, (∀x. Ax), Δ ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ (∀x. Ax), Δ \end{matrix} ⟹ \begin{matrix}N_{2}a_{1} \\ Γ ⟶ Aa_{1}, (∀x. Ax), Δ \end{matrix} ; ∀R^{a_{1}} ; Γ ⟶ (∀x. Ax), Δ

\begin{matrix}Na \\ Γ ⟶ A_{1}, Aa, (∀x. Ax), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ Aa, (∀x. Ax), Δ \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ ⟶ Aa, (∀x. Ax), Δ \end{matrix}

cal_foralll' :
  ca' A ([p] foralll' T (D1 p) N) E (foralll' T F1 N)
     <- ({n1} ca' A ([p] D1 p n1) E (F1 n1)).

B CUT ELIMINATION  56

\begin{matrix}N \\ Γ, (∀x. Ax), At ⟶ A_{1}, Δ \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ A_{1}, Δ ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ Δ \end{matrix} ; ∀L ; Γ, (∀x. Ax) ⟶ Δ

\begin{matrix}N \\ Γ, (∀x. Ax), At ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∀x. Ax), At, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ, (∀x. Ax), At ⟶ Δ \end{matrix}

cal_existsr' :
  ca' A ([p] existsr' T (D1 p) P) E (existsr' T F1 P)
     <- ({p1} ca' A ([p] D1 p p1) E (F1 p1)).

\begin{matrix}N \\ Γ ⟶ At, A_{1}, (∃x. Ax), Δ \end{matrix} ; ∃R ; Γ ⟶ A_{1}, (∃x. Ax), Δ ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ (∃x. Ax), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ At, (∃x. Ax), Δ \end{matrix} ; ∃R ; Γ ⟶ (∃x. Ax), Δ

\begin{matrix}N \\ Γ ⟶ A_{1}, At, (∃x. Ax), Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, A_{1} ⟶ At, (∃x. Ax), Δ \end{matrix} ⟹ \begin{matrix}N_{2} \\ Γ ⟶ At, (∃x. Ax), Δ \end{matrix}

cal_existsl' :
  ca' A ([p] existsl' (D1 p) N) E (existsl' F1 N)
     <- ({a:i} {n1:neg (B1 a)}
           ca' A ([p] D1 p a n1) E (F1 a n1)).

\begin{matrix}Na_{1} \\ Γ, (∃x. Ax), Aa_{1} ⟶ A_{1}, Δ \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax) ⟶ A_{1}, Δ ⨂ \begin{matrix}N_{1} \\ Γ, (∃x. Ax), A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2}a_{1} \\ Γ, (∃x. Ax), Aa_{1} ⟶ Δ \end{matrix} ; ∃L^{a_{1}} ; Γ, (∃x. Ax) ⟶ Δ

\begin{matrix}Na \\ Γ, (∃x. Ax), Aa ⟶ A_{1}, Δ \end{matrix} ⨂ \begin{matrix}N_{1} \\ Γ, (∃x. Ax), Aa, A_{1} ⟶ Δ \end{matrix} ⟹ \begin{matrix}N_{2}a \\ Γ, (∃x. Ax), Aa ⟶ Δ \end{matrix}

B Cut Elimination

In this appendix we define intuitionistic and classical sequent calculi with a primitive rule of cut and show that they can be translated to cut-free derivations. In both cases the proof is a straightforward induction on the structure of derivations, taking advantage of admissibility of cut in the cut-free system.

B.1 Intuitionistic Calculus

We use Γ ⟶_{+} C for sequents in the system G_{3}^{+} with cut which is obtained by adding

Γ ⟶_{+} A Γ, A ⟶_{+} C

Cut Γ ⟶_{+} C

to the rules of the cut-free system G_{3}. With proof terms this rule reads

Γ ⟶_{+} d : A Γ, h:A ⟶_{+} e : C

Cut. Γ ⟶_{+} cut d (λh:A. e) : C

In order to represent derivations in G_{3}^{+} we introduce another judgment, conc* A, rename all the rules for the cut-free calculus and add

cut* : {A:o} conc* A
        -> (hyp A -> conc* C)
        -> conc* C.

The complete implementation is given below. Note that we do not need to rename the hypothesis judgment hyp, since hypothesis play the same role in both systems. The main lemmas concerning G_{3}^{+} such as weakening, contraction, substitution, and the adequacy of the encoding follow as before.

conc* : o -> type.
cut* : {A:o} conc* A
        -> (hyp A -> conc* C)
        -> conc* C.
axiom* : (hyp A -> conc* A).
andr*  : conc* A
          -> conc* B
          -> conc* (A and B).
andl1* : (hyp A -> conc* C)
          -> (hyp (A and B) -> conc* C).
andl2* : (hyp B -> conc* C)
          -> (hyp (A and B) -> conc* C).
impr*  : (hyp A -> conc* B)
          -> conc* (A imp B).
impl*  : conc* A
          -> (hyp B -> conc* C)
          -> (hyp (A imp B) -> conc* C).
orr1*  : conc* A
          -> conc* (A or B).

orr2*  : conc* B
          -> conc* (A or B).
orl*   : (hyp A -> conc* C)
          -> (hyp B -> conc* C)
          -> (hyp (A or B) -> conc* C).
notr*  : ({p:o} hyp A -> conc* p)
         -> conc* (not A).
notl*  : conc* A
         -> (hyp (not A) -> conc* C).
truer* : conc* (true).
falsel* : (hyp (false) -> conc* C).
forallr* : ({a:i} conc* (A a))
            -> conc* (forall A).
foralll* : {T:i} (hyp (A T) -> conc* C)
            -> (hyp (forall A) -> conc* C).
existsr* : {T:i} conc* (A T)
            -> conc* (exists A).
existsl* : ({a:i} hyp (A a) -> conc* C)
            -> (hyp (exists A) -> conc* C).

The theorem of cut elimination explicitly relates derivations in G_{3}^{+} to G_{3}.

Theorem 8 (Cut Elimination) If D^{∗} :: (Γ ⟶_{+} d^{∗} : C) is a derivation in G_{3}^{+} then there exists a cut-free derivation D :: (Γ ⟶ d : C) in G_{3}.

Proof: By structural induction on d. When the last inference R is not a cut we appeal to the induction hypothesis on the premise(s) of the last inference and combine the resulting cut-free derivation(s) with R. If the last inference is a cut we generate cut-free derivations of the premises by induction hypothesis and then use admissibility of cut to obtain a cut-free derivation for the conclusion. □

This proof is implemented by a relation between sequent derivations in the system with cut and sequent derivations in the system without cut. We use the convention that variables whose name ends in a star (*) represent derivations that may contain cut.

ce : conc* C -> conc C -> type.
ce_cut   : ce (cut* A D1* D2*) D
            <- ce D1* D1
            <- ({h1:hyp A} ce (D2* h1) (D2 h1))
            <- ca A D1 D2 D.

ce_axiom : ce (axiom* H) (axiom H).
ce_andr  : ce (andr* D1* D2*) (andr D1 D2)
            <- ce D1* D1
            <- ce D2* D2.
ce_andl1 : ce (andl1* D1* H) (andl1 D1 H)
            <- ({h1:hyp A} ce (D1* h1) (D1 h1)).
ce_andl2 : ce (andl2* D2* H) (andl2 D2 H)
            <- ({h2:hyp B} ce (D2* h2) (D2 h2)).
ce_impr  : ce (impr* D1*) (impr D1)
            <- ({h1:hyp A} ce (D1* h1) (D1 h1)).
ce_impl  : ce (impl* D1* D2* H) (impl D1 D2 H)
            <- ce D1* D1
            <- ({h2:hyp B} ce (D2* h2) (D2 h2)).
ce_orr1  : ce (orr1* D1*) (orr1 D1)
            <- ce D1* D1.
ce_orr2  : ce (orr2* D2*) (orr2 D2)
            <- ce D2* D2.
ce_orl   : ce (orl* D1* D2* H) (orl D1 D2 H)
            <- ({h1:hyp A} ce (D1* h1) (D1 h1))
            <- ({h2:hyp B} ce (D2* h2) (D2 h2)).
ce_notr  : ce (notr* D1*) (notr D1)
            <- ({p:o} {h1:hyp A} ce (D1* p h1) (D1 p h1)).
ce_notl  : ce (notl* D1* H) (notl D1 H)
            <- ce D1* D1.
ce_truer : ce (truer*) (truer).
ce_falsel : ce (falsel* H) (falsel H).
ce_forallr : ce (forallr* D1*) (forallr D1)
              <- {a:i} ce (D1* a) (D1 a).
ce_foralll : ce (foralll* T D1* H) (foralll T D1 H)
              <- ({h1} ce (D1* h1) (D1 h1)).
ce_existsr : ce (existsr* T D1*) (existsr T D1)
              <- ce D1* D1.
ce_existsl : ce (existsl* D1* H) (existsl D1 H)
              <- ({a:i} {h1:hyp (A1 a)} ce (D1* a h1) (D1 a h1)).

B.2 Classical Calculus

We write Γ ⟶_{+} Δ for a sequent in the classical system with cut as a primitive rule of inference. It is obtained by adding

Γ ⟶_{+} A, Δ Γ, A ⟶_{+} Δ

Cut Γ ⟶_{+} Δ

to the other rules of inference. With proof terms we have

Γ ⟶^{d}_{+} p:A, Δ Γ, n:A ⟶^{e}_{+} Δ

Cut

Γ ⟶^{cut (λp:A. d) (λn:A. e)}_{+} Δ

This system continues to satisfy weakening, contraction, and substitution lemmas. The signature below specifies an adequate encoding of this extended calculus in LF. We need a new judgment @ that replaces # as the type of proof terms in the representation. We systematically copy all declarations from the cut-free system (appending ^to their name) and add the cut rule as

cut^.
@ : type.
cut^: (pos A -> @)
        -> (neg A -> @)
        -> @.
axiom^: (neg A -> pos A -> @).
andr^: (pos A -> @)
          -> (pos B -> @)
          -> (pos (A and B) -> @).
andl1^: (neg A -> @)
          -> (neg (A and B) -> @).
andl2^: (neg B -> @)
          -> (neg (A and B) -> @).
impr^: (neg A -> pos B -> @)
          -> (pos (A imp B) -> @).
impl^: (pos A -> @)
          -> (neg B -> @)
          -> (neg (A imp B) -> @).
orr1^: (pos A -> @)
         -> (pos (A or B) -> @).
orr2^: (pos B -> @)
          -> (pos (A or B) -> @).
orl^: (neg A -> @)

         -> (neg B -> @)
         -> (neg (A or B) -> @).
notr^: (neg A -> @)
          -> (pos (not A) -> @).
notl^: (pos A -> @)
          -> (neg (not A) -> @).
truer^: (pos (true) -> @).
falsel^: (neg (false) -> @).
forallr^: ({a:i} pos (A a) -> @)
            -> (pos (forall A) -> @).
foralll^: {T:i} (neg (A T) -> @)
            -> (neg (forall A) -> @).
existsr^: {T:i} (pos (A T) -> @)
            -> (pos (exists A) -> @).
existsl^: ({a:i} neg (A a) -> @)
            -> (neg (exists A) -> @).

Cut elimination follows by a simple structural induction from the admissibility of cut in the cut-free system. We present here only the Elf code implementing this proof.

Theorem 9 (Classical Cut Elimination) Let D :: (Γ ⟶^{d}_{+} Δ) be a classical sequent derivation possibly containing cut. Then there exists a cut-free derivation D′ :: (Γ ⟶^{d′} Δ)

Proof: By structural induction on d. For each inference rule except cut we apply the induction hypothesis to the premises and then reconstruct a cut-free derivation with the same inference rule. In the case of cut, we appeal to the induction hypothesis and then to admissibility of cut on the resulting two cut-free derivations. □

This proof is implementated as a type family relating derivations with cut to cut-free derivations. Note how the appeal to admissibility in the case of a cut is implemented as a call to ca'.

ce' : @ -> # -> type.
ce_cut'  : ce' (cut^D E) F
            <- ({p:pos A} ce' (D p) (D' p))
            <- ({n:neg A} ce' (E n) (E' n))
            <- ca' A D' E' F.
ce_axiom': ce' (axiom^N P) (axiom' N P).
ce_andr' : ce' (andr^D1 D2 P) (andr' D1' D2' P)
            <- ({p1} ce' (D1 p1) (D1' p1))

            <- ({p2} ce' (D2 p2) (D2' p2)).
ce_andl1': ce' (andl1^N1 N) (andl1' N1' N)
            <- ({n1} ce' (N1 n1) (N1' n1)).
ce_andl2': ce' (andl2^N2 N) (andl2' N2' N)
            <- ({n2} ce' (N2 n2) (N2' n2)).
ce_impr' : ce' (impr^D1 P) (impr' D1' P)
            <- ({n1}{p2} ce' (D1 n1 p2) (D1' n1 p2)).
ce_impl' : ce' (impl^D1 D2 N) (impl' D1' D2' N)
            <- ({p1} ce' (D1 p1) (D1' p1))
            <- ({n2} ce' (D2 n2) (D2' n2)).
ce_orr1' : ce' (orr1^D1 P) (orr1' D1' P)
            <- ({p1} ce' (D1 p1) (D1' p1)).
ce_orr2' : ce' (orr2^D2 P) (orr2' D2' P)
            <- ({p2} ce' (D2 p2) (D2' p2)).
ce_orl'  : ce' (orl^D1 D2 N) (orl' D1' D2' N)
            <- ({n1} ce' (D1 n1) (D1' n1))
            <- ({n2} ce' (D2 n2) (D2' n2)).
ce_notr' : ce' (notr^D1 P) (notr' D1' P)
            <- ({n1} ce' (D1 n1) (D1' n1)).
ce_norl' : ce' (notl^D1 N) (notl' D1' N)
            <- ({p1} ce' (D1 p1) (D1' p1)).
ce_truer': ce' (truer^P) (truer' P).
ce_falsel': ce' (falsel^N) (falsel' N).
ce_forallr': ce' (forallr^D1 P) (forallr' D1' P)
              <- ({a:i} {p1:pos (A1 a)} ce' (D1 a p1) (D1' a p1)).
ce_foralll': ce' (foralll^T D1 N) (foralll' T D1' N)
              <- ({n1} ce' (D1 n1) (D1' n1)).
ce_existsr': ce' (existsr^T D1 P) (existsr' T D1' P)
              <- ({p1} ce' (D1 p1) (D1' p1)).
ce_existsl': ce' (existsl^D1 N) (existsl' D1' N)
              <- ({a:i} {n1:neg (A1 a)} ce' (D1 a n1) (D1' a n1)).

Acknowledgments

I would like to thank Iliano Cervesato, Jean Gallier, Hugo Herbelin, Dale Miller, Richard Statman, A.S. Troelstra, and Roberto Virga for discussions regarding the topic of this paper and David Basin and Seán Matthews for comments on a draft.

References

[Abr93] Samson Abramsky. Computational interpretations of linear logic. Theoretical Computer Science, 111:3–57, 1993.

[BTKP93] Val Breazu-Tannen, Delia Kesner, and Laurence Puel. A typed pattern calculus. In Moshe Y. Vardi, editor, Proceedings of the Eight Annual IEEE Symposium on Logic in Computer Science, pages 262–274, Montreal, Canada, June 1993.

[DFH^{+}93] Gilles Dowek, Amy Felty, Hugo Herbelin, Gérard Huet, Chet Murthy, Catherine Parent, Christine Paulin-Mohring, and Benjamin Werner. The Coq proof assistant user’s guide. Rapport Techniques 154, INRIA, Rocquencourt, France, 1993. Version 5.8.

[DFH95] Joëlle Despeyroux, Amy Felty, and André Hirschowitz. Higher-order abstract syntax in Coq. In M. Dezani-Ciancaglini and G. Plotkin, editors, Proceedings of the International Conference on Typed Lambda Calculi and Applications, pages 124–138, Edinburgh, Scotland, April 1995. Springer-Verlag LNCS 902.

[DH94] Joëlle Despeyroux and André Hirschowitz. Higher-order abstract syntax with induction in Coq. In Frank Pfenning, editor, Proceedings of the 5th International Conference on Logic Programming and Automated Reasoning, pages 159–173, Kiev, Ukraine, July 1994. Springer-Verlag LNAI 822.

[Dra87] A. G. Dragalin. Mathematical Intuitionism: Introduction to Proof Theory, volume 67 of Translations of Mathematical Monographs. American Mathematical Society, Providence, Rhode Island, 1987.

[Fel89] Amy Felty. Specifying and Implementing Theorem Provers in a Higher-Order Logic Programming Language. PhD thesis, University of Pennsylvania, August 1989. Available as Technical Report MS-CIS-89-53.

[Gal93] Jean Gallier. Constructive logics Part I: A tutorial on proof systems and typed λ-calculi. Theoretical Computer Science, 110:249–339, 1993.

[Gen35] Gerhard Gentzen. Untersuchungen über das logische Schließen. Mathematische Zeitschrift, 39:176–210, 405–431, 1935. English translation in M. E. Szabo, editor, The Collected Papers of Gerhard Gentzen, pages 68–131, North-Holland, 1969.

[Gir87] Jean-Yves Girard. Linear logic. Theoretical Computer Science, 50:1–102, 1987.

[Gir93] Jean-Yves Girard. On the unity of logic. Annals of Pure and Applied Logic, 59:201–217, [Her95] Hugo Herbelin. Séquents qu’on calcule. PhD thesis, Universite Paris 7, January 1995.

[HHP93] Robert Harper, Furio Honsell, and Gordon Plotkin. A framework for defining logics. Journal of the Association for Computing Machinery, 40(1):143–184, January 1993.

[Kle52] Stephen Cole Kleene. Introduction to Metamathematics. North-Holland, 1952.

[Mat94] Seán Matthews. A theory and its metatheory in F S_{0}. In Dov Gabbay and Franz Guenthner, editors, What is a Logical System? Oxford University Press, 1994. To appear.

[Mil94] Dale Miller. A multiple-conclusion meta-logic. In S. Abramsky, editor, Ninth Annual IEEE Symposium on Logic in Computer Science, pages 272–281, Paris, France, July 1994.

[ML68] Per Martin-Löf. Notes on Constructive Mathematics. Almqvist & Wiksell, Stockholm, 1968.

[MNPS91] Dale Miller, Gopalan Nadathur, Frank Pfenning, and Andre Scedrov. Uniform proofs as a foundation for logic programming. Annals of Pure and Applied Logic, 51:125–157, 1991.

[MP91] Spiro Michaylov and Frank Pfenning. Natural semantics and some of its meta-theory in Elf. In L.-H. Eriksson, L. Hallnäs, and P. Schroeder-Heister, editors, Proceedings of the Second International Workshop on Extensions of Logic Programming, pages 299–344, Stockholm, Sweden, January 1991. Springer-Verlag LNAI 596.

[Nip91] Tobias Nipkow. Higher-order critical pairs. In G. Kahn, editor, Sixth Annual IEEE Symposium on Logic in Computer Science, pages 342–349, Amsterdam, The Netherlands, July 1991.

[Par92] Michel Parigot. λμ-calculus: An algorithmic interpretation of classical natural deduction. In A. Voronkov, editor, Proceedings of the International Conference on Logic Programming and Automated Reasoning, pages 190–201, St. Petersburg, Russia, July 1992. Springer-Verlag LNCS 624.

[Pfe] Frank Pfenning. Structural cut elimination II: Linear logic. In preparation.

[Pfe91] Frank Pfenning. Logic programming in the LF logical framework. In Gérard Huet and Gordon Plotkin, editors, Logical Frameworks, pages 149–181. Cambridge University Press, 1991.

[Pfe94] Frank Pfenning. Structural cut elimination in linear logic. Technical Report CMU-CS-94-222, Department of Computer Science, Carnegie Mellon University, December 1994.

[Pfe95] Frank Pfenning. Structural cut elimination. In D. Kozen, editor, Proceedings of the Tenth Annual Symposium on Logic in Computer Science, pages 156–166, San Diego, California, June 1995. IEEE Computer Society Press.

[Roh94] Ekkehard Rohwedder. Verifying the meta-theory of deductive systems. Thesis Proposal, February 1994.

[Sch77] Helmut Schwichtenberg. Proof theory: Some applications of cut-elimination. In Jon Barwise, editor, Handbook of Mathematical Logic, pages 867–895. North-Holland, Amsterdam, 1977.

[Vir95] Roberto Virga. Higher-order superposition for dependent types. Technical Report CMU-CS-95-150, Carnegie Mellon University, 1995. To appear.

[Wal90] Lincoln A. Wallen. Automated Deduction in Non-Classical Logics. MIT Press, 1990.

[Zuc74] Jeffrey Zucker. The correspondence between cut-elimination and normalization I. Annals of Mathematical Logic, 7:1–112, 1974.