Build proof tree for Natural Deduction, Sequent Calculus, etc.

Paul Taylor Department of Computing,

Imperial College, London SW7 2BZ

+44 71 589 5111 ext 5057

<pt@doc.ic.ac.uk>

October 3, 1995

Using my Proof Tree macros, you can produce

[(∃y. ((∃n.x_{n} = y) ∧ qy)) ∧ (∀w. ((∃n.x_{n} = w) ⇒ pw))]_{α} ; ∧1E ; ∃y. ((∃n.x_{n} = y) ∧ qy) \begin{matrix}[(∃y. ((∃n.x_{n} = y) ∧ qy)) ∧ (∀w. ((∃n.x_{n} = w) ⇒ pw))]_{α} ; ∧2E ; ∀w. ((∃n.x_{n} = w) ⇒ pw) ; ∀E ; (∃n.x_{n} = y) ⇒ py & [(∃n.x_{n} = y) ∧ qy]_{β} ; ∧1E ; ∃n.x_{n} = y \\ & ⇒E \\ & py \end{matrix} [(∃n.x_{n} = y) ∧ qy]_{β} ; ∧I ; py ∧ ((∃n.x_{n} = y) ∧ qy) ; ∃I ; ∃z.pz ∧ (((∃n.x_{n} = z) ∧ qz))

∃E_{β}

∃z.pz ∧ (((∃n.x_{n} = z) ∧ qz))

⇒I_{α}

(∃y. ((∃n.x_{n} = y) ∧ qy)) ∧ (∀w. ((∃n.x_{n} = w) ⇒ pw)) ⇒ (∃z.pz ∧ (((∃n.x_{n} = z) ∧ qz)))

using the TEX or L^{A}TEX code

\input prooftree
$$
\begin{prooftree}
\[ \[ [(\A y n)\land(\B w n)]_\alpha
\andelim1
\A y n
\]
\kern-26em
\[ \[ \[ \[ \[ [(\A y n)\land(\B w n)]_\alpha
\andelim2 \shiftright60pt
\B w n

               \]
               \allelim
               (\E y n)\imp\P y
            \]
            \[
               [(\E y n)\land\Q y]_\beta
               \andelim1
               \E y n
            \]
            \impelim \shiftright50pt
            \P y
         \]
         \kern-25pt
         [(\E y n)\land\Q y]_\beta
         \andintro
         \P y\land((\E y n)\land\Q y)
      \]
      \existsintro
      \C z n
   \]
   \existselim\beta
   \C z n
\]
\impintro\alpha
(\A yn)\land(\B w n)\imp(\C z n)
\end{prooftree}$$

In fact the commands \allintro, etc., are not primitive; the basic form is

\[
A\quad
B
\justifies
A \land B
\thickness=0.08em
\shiftright 2em
\using
{\land}{\cal I}
\]

which gives

A B ; ∧I ; A ∧ B

The hypotheses may themselves be proof trees (enclosed in \[… \]) and the purpose of the macros is to adjust the length of the horizontal “deduction” line.

When the hypotheses are proof trees, suitable space is put between them, but of course this must be supplied by hand for simple formulae. The \thickness and \shiftright commands are, of course, optional; they apply to the horizontal line and to the positioning of the conclusion relative to it. For a double line,

use \Justifies instead of \justifies.

Notice the overloading of the \[… \]; the outermost proof tree must be

enclosed with \begin{prooftree} and \end{prooftree} or \prooftree and
\endprooftree.

To get a vertical string of dots instead of the proof rule, do

\[
[A]
\using
\pi
\proofdotseparation=1.2ex
\proofdotnumber=4
\leadsto
B
\]

to get [A] ; \begin{matrix}· \\ · \\ · \\ · \end{matrix} π ; B

All of of the keywords except \prooftree and \endprooftree are optional and may appear in any order. They may also be combined in \newcommands, for example

\newcommand\Cut{\using\sf cut\thickness.08em\justifies}

with the abbreviation

\[ A \vdash B \qquad
   B \vdash C
  \Cut
   A \vdash C
\]

\thickness specifies the breadth of the rule in any units, although fontrelative units such as ex or em are preferable. It may optionally be followed

by =. \proofrulebreadth=.08em or \setlength\proofrulebreadth{.08em}

may also be used either in place of \thickness or globally; the default is 0.04em.

\proofdotseparation and \proofdotnumber control the size of the string of

dots.

If proof trees and formulae are mixed, some explicit spacing is needed, but don’t put anything to the left of the left-most (or the right of the right-most) hypothesis, or put it in braces, because this will cause the indentation to be lost.

By default the conclusion is centered wrt the left-most and right-most immediate hypotheses (not their proofs); \shiftright or \shiftleft moves it relative to this position. (Not sure about this specification or how it should affect spreading of proof tree.)