diff options
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/bussproofs/BussGuide2.pdf | bin | 0 -> 75218 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/bussproofs/BussGuide2.tex | 775 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/bussproofs/README.txt | 31 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/bussproofs/testbp2.pdf | bin | 51637 -> 43839 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/bussproofs/testbp2.tex | 62 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/bussproofs/bussproofs.sty | 233 |
6 files changed, 1088 insertions, 13 deletions
diff --git a/Master/texmf-dist/doc/latex/bussproofs/BussGuide2.pdf b/Master/texmf-dist/doc/latex/bussproofs/BussGuide2.pdf Binary files differnew file mode 100644 index 00000000000..84b9556c8a4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/bussproofs/BussGuide2.pdf diff --git a/Master/texmf-dist/doc/latex/bussproofs/BussGuide2.tex b/Master/texmf-dist/doc/latex/bussproofs/BussGuide2.tex new file mode 100644 index 00000000000..35bb699f4b3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/bussproofs/BussGuide2.tex @@ -0,0 +1,775 @@ +% +%Documentation by Peter Smith, July 2004, March 2012 +% +%comments to peter_smith@me.com +% + +\documentclass[11pt]{article} +\usepackage{graphicx} +\usepackage{amssymb} +%\usepackage{epstopdf} + +\usepackage{bussproofs} +\def\fCenter{{\mbox{$\vdash$}}} + +\DeclareGraphicsRule{.tif}{png}{.png}{`convert #1 `basename #1 .tif`.png} + +\textwidth = 6.5 in +\textheight = 9 in +\oddsidemargin = 0.0 in +\evensidemargin = 0.0 in +\topmargin = 0.0 in +\headheight = 0.0 in +\headsep = 0.0 in +\parskip = 0.0in +\parindent = 0.2in + + +\newtheorem{theorem}{Theorem} +\newtheorem{corollary}[theorem]{Corollary} +\newtheorem{definition}{Definition} + +\begin{document} + +%%%%%%%%%%%%%%%%%% +%%% +%%% front matter +%%% +%%%%%%%%%%%%%%%%%% + +\thispagestyle{empty} +\begin{center} + \Huge{\LaTeX\ for Logicians}\\[16pt] + \huge{\texttt{bussproofs.sty}}\\[8pt] + \huge{A User Guide}\\[16pt] +\end{center} +\vspace{0.5in} +\tableofcontents +\vspace{0.3in} +\begin{center} + \fbox{\parbox{4.5in}{\begin{center}The latest version of \texttt{bussproofs.sty} + is 1.1, July 2011.\end{center}}} +\end{center} +\vspace{0.4in} +\begin{center} + \small{Guide version 1.1 March 2012. Corrections/suggestions to + \texttt{peter}\_$\!$\_\texttt{smith@me.com}} + \\ + \small{\LaTeX\ for Logicians is at \texttt{http://www.logicmatters.net}} +\end{center} +\newpage + +%%%%%%%%%%%%%%%%%% +%%% +%%% main matter +%%% +%%%%%%%%%%%%%%%%%% +\section{Introduction} + +\noindent Sam Buss's powerful and flexible package {\texttt{bussproofs.sty}} offers macros for setting natural deduction and sequent proofs in two different styles. The key difference between the two styles is illustrated by the difference between +\begin{prooftree} +\AxiomC{$\Gamma, A, B \vdash C$} +\UnaryInfC{$\Gamma, A \vdash (B \to C)$} +\UnaryInfC{$\Gamma \vdash (A \to (B \to C))$} +\end{prooftree} +and +\begin{prooftree} +\Axiom$\Gamma, A, B\ \fCenter\ C$ +\UnaryInf$\Gamma, A\ \fCenter\ (B \to C)$ +\UnaryInf$\Gamma\ \fCenter\ (A \to (B \to C))$ +\end{prooftree} +In one style, the sequents above and below the inference line are centered; in the other, the sequents are placed so as to align their deducibility signs. + +We can divide {\texttt{bussproofs.sty}}'s commands for building proofs into four types: +\begin{itemize}\setlength{\itemsep}{0.0in} +\item \emph{the structural commands} for producing proof trees in the \emph{centering} style; +\item \emph{more structural commands} for producing proof trees in the \emph{sequent-aligning} style; +\item \emph{additional commands} for adding labels, and changing the setting of inference lines (selecting double, dashed lines, etc.); +\item \emph{fine-tuning commands} for adjusting the spacing and layout of the proof. +\end{itemize} +{\texttt{bussproofs.sty}} also provides an additional command which enables some very laconic shorthand for the most commonly used commands. We describe these in Section~\ref{abbrev}; but we avoid using shorthand until the full commands have been explained and made familiar. + + + +\section{`Centered' proofs: the structural commands} +\subsection{The commands} There are four basic proof-building commands for producing proofs in the centered style: +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\AxiomC{=\textit{form}\verb=}= +\item \verb=\UnaryInfC{=\textit{form}\verb=}= +\item \verb=\BinaryInfC{=\textit{form}\verb=}= +\item \verb=\TrinaryInfC{=\textit{form}\verb=}= +\end{description} +\end{quote} +where `\textit{form}' holds the place for a formula or sequent. Note +\begin{itemize}\setlength{\itemsep}{0.0in} +\item The use of the surrounding `\verb={}='s is mandatory. +\item By default, \textit{form} is set in text mode: if you want to set some or all of \textit{form} in math mode, then you need to use \verb=$='s in the usual way. +\end{itemize} +Chaining a series of those commands, however, is not enough to cause a proof to be set. To display a proof you must use one of +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\DisplayProof=, a command placed at the end of a list of proof-building commands, which produces an in-line proof at the current insertion point. +\item \verb=\begin{prooftree} ... \end{prooftree}=, an environment which contains a list of proof-building commands, and which produces a proof in a centered display. +\end{description} +\end{quote} +Again, note +\begin{itemize}\setlength{\itemsep}{0.0in} +\item The \verb=\DisplayProof= command allows you to put proofs anywhere normal text might appear; for example, in a paragraph, in a table, in a tabbing environment, etc. +\item To generate a proof in a centered display, do \emph{not} use \verb=$$ ... $$= or \verb=\[ ... \]=. +\end{itemize} + +\subsection{Usage} It will be a \emph{lot} clearer if we start with examples rather than begin with an abstract description of the principles for chaining proof-building commands! So here goes \ldots +\begin{quote} +\begin{verbatim} +\AxiomC{A} +\UnaryInfC{D} +\DisplayProof +\end{verbatim} +\end{quote} +produces the one-step proof +\AxiomC{A} +\UnaryInfC{D} +\DisplayProof +in the current line. While +\begin{quote} +\begin{verbatim} +\begin{prooftree} +\AxiomC{A} +\AxiomC{B} +\BinaryInfC{D} +\end{prooftree} +\end{verbatim} +\end{quote} +displays the proof +\begin{prooftree} +\AxiomC{A} +\AxiomC{B} +\BinaryInfC{D} +\end{prooftree} +centered and set off from the surrounding text. So it will be no surprise to learn that +\begin{quote} +\begin{verbatim} +\begin{prooftree} +\AxiomC{A} +\AxiomC{B} +\AxiomC{C} +\TrinaryInfC{D} +\end{prooftree} +\end{verbatim} +\end{quote} +produces the proof +\begin{prooftree} +\AxiomC{A} +\AxiomC{B} +\AxiomC{C} +\TrinaryInfC{D} +\end{prooftree} +Two comments: +\begin{itemize}\setlength{\itemsep}{0.0in} +\item You'll get an error message if there's a mismatch between the arity of the \verb=\...aryInfC= command and the number of inputs. +\item \texttt{bussproof.sty} does not allow arbitrary numbers of premisses appearing as separate \textit{form} items above the inference line. +\end{itemize} + +So much for one-step proofs. Now things get a little more fun \ldots. +Consider +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{A} + \AxiomC{B} + \AxiomC{C} + \BinaryInfC{D} + \BinaryInfC{E} +\end{prooftree} +\end{verbatim} +\end{quote} +This produces the proof +\begin{quote} +\begin{prooftree} +\AxiomC{A} +\AxiomC{B} +\AxiomC{C} +\BinaryInfC{D} +\BinaryInfC{E} +\end{prooftree} +\end{quote} +Why? Think of the first \verb=\BinaryInfC= command as `using up' as premisses the two axioms immediately above it. Then the second \verb=\BinaryInfC= command takes as premisses `D' immediately above it and then searches up to the next `unused' item, i.e. `A'. The inputs to a particular \verb=\BinaryInfC= command are then set right-to-left in the order in which the {command} finds them as it looks {up} the series of commands. Which means, as we want, that {the inputs to a particular inference are set left-to-right in the same order as they occur in the chain of commands}. + +It probably helps if we set out the proof-building commands like this: +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{A} + \AxiomC{B} + \AxiomC{C} + \BinaryInfC{D} + \BinaryInfC{E} +\end{prooftree} +\end{verbatim} +\end{quote} +That pretty much replicates the layout of the tree we want. This indeed is one of the \emph{very} nice features of \texttt{bussproofs.sty} -- the instructions to build a proof-tree can be set out to look very like the proof we want. + +Suppose then that we want to set a tree that is arranged like this: +\begin{prooftree} +\AxiomC{A} +\UnaryInfC{B} +\AxiomC{C} +\BinaryInfC{D} +\AxiomC{E} +\AxiomC{F} +\BinaryInfC{G} +\UnaryInfC{H} +\BinaryInfC{J} +\end{prooftree} +The following does the trick: +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{A} + \UnaryInfC{B} + \AxiomC{C} + \BinaryInfC{D} + \AxiomC{E} + \AxiomC{F} + \BinaryInfC{G} + \UnaryInfC{H} + \BinaryInfC{J} +\end{prooftree} +\end{verbatim} +\end{quote} +In sum, then, the rule to produce a given tree is +\begin{quote} +\emph{Set out the commands for the left-hand sub-proof first; and then within a sub-proof, do its left-hand sub-sub-proof first; and so on.} +\end{quote} +Two more points about general structure: +\begin{itemize}\setlength{\itemsep}{0.0in} +\item The command \verb=\noLine= can be inserted before any inference command to suppress the drawing of an inference line. +\item Null axioms are allowed! +\end{itemize} +Hence, the commands +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{$A \lor B$} + \AxiomC{[$A$]} + \noLine + \UnaryInfC{$C$} + \AxiomC{[$B$]} + \noLine + \UnaryInfC{$C$} + \TrinaryInfC{$C$} +\end{prooftree} +\end{verbatim} +\end{quote} +yield +\begin{prooftree} +\AxiomC{$A \lor B$} +\AxiomC{[$A$]} +\noLine +\UnaryInfC{$C$} +\AxiomC{[$B$]} +\noLine +\UnaryInfC{$C$} +\TrinaryInfC{$C$} +\end{prooftree} +And we can use the fact that null axioms are allowed to generate natural deduction proofs with formulae overlined to indicate the discharge of premisses (by treating the formula to be overlined as a unary inference from a null axiom). For example: +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{$P$} + \AxiomC{} + \UnaryInfC{$\neg P$} + \BinaryInfC{$\bot$} + \UnaryInfC{$\neg\neg P$} +\end{prooftree} +\end{verbatim} +\end{quote} +generates the proof +\begin{prooftree} + \AxiomC{$P$} + \AxiomC{} + \UnaryInfC{$\neg P$} + \BinaryInfC{$\bot$} + \UnaryInfC{$\neg\neg P$} +\end{prooftree} + +\subsection{More than three premisses} + +So far we've only considered inference steps that take one premiss (like double negation), two premisses (like modus ponens), or three inputs (like or-elimination). But Buss proofs in fact supplies -- should you want it -- the capacity to deal with four or five premisses. The syntax is as you would expect. We have the two commands +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\QuaternaryInfC{=\textit{form}\verb=}= +\item \verb=\QuinaryInfC{=\textit{form}\verb=}= +\end{description} +\end{quote} +These aren't pointless! After all, you might want to illustrate the $\omega$-rule thus: +\begin{quote} +\begin{verbatim} +\begin{prooftree} +\AxiomC{$\varphi(0)$} +\AxiomC{$\varphi(1)$} +\AxiomC{$\varphi(2)$} +\AxiomC{$\varphi(3)$} +\AxiomC{$\ldots$} +\QuinaryInfC{$\forall n\varphi(n)$} +\end{prooftree} +\end{verbatim} +\end{quote} +to give +\begin{quote} +\begin{prooftree} +\AxiomC{$\varphi(0)$} +\AxiomC{$\varphi(1)$} +\AxiomC{$\varphi(2)$} +\AxiomC{$\varphi(3)$} +\AxiomC{$\ldots$} +\QuinaryInfC{$\forall n\varphi(n)$} +\end{prooftree} +\end{quote} + + + + +\section{`Sequent-aligned' proofs: the structural commands} +\subsection{The commands} There are four basic proof-building commands for producing proofs in the second style: +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\Axiom$= \textit{form} \verb=\fCenter= \textit{form} \verb=$= +\item \verb=\UnaryInf$= \textit{form} \verb=\fCenter= \textit{form} \verb=$= +\item \verb=\BinaryInf$= \textit{form} \verb=\fCenter= \textit{form} \verb=$= +\item \verb=\TrinaryInf$= \textit{form} \verb=\fCenter= \textit{form} \verb=$= +\end{description} +\end{quote} +where `\textit{form}' holds the place for a formula or formulae, and \verb=\fCenter= marks the point of alignment. +\begin{itemize}\setlength{\itemsep}{0.0in} +\item This time, the use of the surrounding `\verb=$='s is mandatory; and material between the `\verb=$='s is set in math mode. +\item The `\verb=\fCenter=' is by default just a place-marker; however, it can be redefined to be printed character such as a sequent arrow or turnstile. +\end{itemize} +And for multi-premiss usage, we also have the additional commands: +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\QuaternaryInf$= \textit{form} \verb=\fCenter= \textit{form} \verb=$= +\item \verb=\QuinaryInf$= \textit{form} \verb=\fCenter= \textit{form} \verb=$=\end{description} +\end{quote} + +\subsection{Usage} +The basic usage is illustrated by the following: +\def\fCenter{} +\begin{quote} +\begin{verbatim} +\begin{prooftree} +\Axiom$A, B, C, D,\fCenter\ E, F$ +\UnaryInf$A, B,\fCenter\ C, D, E, F$ +\end{prooftree} +\end{verbatim} +\end{quote} +\begin{prooftree} +\Axiom$A, B, C, D,\fCenter\ E, F$ +\UnaryInf$A, B,\fCenter\ C, D, E, F$ +\end{prooftree} +Now let's redefine \verb=\fCenter= to be the turnstile surrounded by spaces. Then +\begin{quote} +\begin{verbatim} +\begin{prooftree} +\def\fCenter{\ \vdash\ } +\Axiom$A, B, C, D \fCenter E, F$ +\UnaryInf$A, B \fCenter C, D, E, F$ +\end{prooftree} +\end{verbatim} +\end{quote} +produces +\begin{prooftree} +\def\fCenter{\ \vdash\ } +\Axiom$A, B, C, D \fCenter E, F$ +\UnaryInf$A, B \fCenter C, D, E, F$ +\end{prooftree} +However, it is in general preferable to redefine \verb=\fCenter= using an \verb=\mbox= as in the next example (this allows more options): +\begin{quote} +\begin{verbatim} +\def\fCenter{\mbox{\Large$\rightarrow$}} +\begin{prooftree} +\Axiom$\Gamma, A, B\ \fCenter\ B$ +\UnaryInf$\Gamma, A\ \fCenter\ (B \to C)$ +\UnaryInf$\Gamma\ \fCenter\ (A \to (B \to C))$ +\end{prooftree} +\end{verbatim} +\end{quote} +produces +\def\fCenter{\mbox{\Large$\rightarrow$}} +\begin{prooftree} +\Axiom$\Gamma, A, B\ \fCenter\ B$ +\UnaryInf$\Gamma, A\ \fCenter\ (B \to C)$ +\UnaryInf$\Gamma\ \fCenter\ (A \to (B \to C))$ +\end{prooftree} +And this time, since the \verb=\def\fCenter{...}= command precedes the following \verb=prooftree= environment, it will stay in effect until overridden later in the document. +\begin{itemize} +\item The chaining of multiple sequent-aligning commands to build complex proofs works just as with the earlier centering-style commands. +\item It should go without saying that the point of the \verb=\BinaryInf$...$= command is not to align the sequent turnstile, (arrow, or whatever) in the conclusion of the two-premiss inference with the turnstiles in the premisses, but to provide a new alignment point for later sequents. +\item Mixing and matching sensible combinations of \verb=C{...}=-type centering commands and \verb=$...$=-type sequent-aligning commands is in fact legitimate. +\end{itemize} +Thus, to illustrate the last point, +\begin{quote} +\begin{verbatim} +\begin{prooftree} +\def\fCenter{\mbox{\ $\vdash$\ }} +\AxiomC{$\Gamma \vdash A$} +\AxiomC{$A, B \vdash C$} +\BinaryInf$\Gamma, B \fCenter C$ +\UnaryInf$\Gamma \fCenter B \to C$ +\end{prooftree} +\end{verbatim} +\end{quote} +is acceptable, and yields +\begin{prooftree} +\def\fCenter{\mbox{\ $\vdash$\ }} +\AxiomC{$\Gamma \vdash A$} +\AxiomC{$A, B \vdash C$} +\BinaryInf$\Gamma, B \fCenter C$ +\UnaryInf$\Gamma \fCenter B \to C$ +\end{prooftree} + + + +\section{Additional layout commands} +Conventionally, the proof +\begin{prooftree} + \AxiomC{$P$} + \AxiomC{} + \UnaryInfC{$\neg P$} + \BinaryInfC{$\bot$} + \UnaryInfC{$\neg\neg P$} +\end{prooftree} +needs labelling. This section describes how to add labels to proofs, and also how to change the style of inference-line (to double lines, etc.). + +\subsection{Adding labels} There are two commands for decorating a proof with labels: +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\LeftLabel{text}= +\item \verb=\RightLabel{text}= + \end{description} +\end{quote} +These put \verb=text= as a label to the left/right of the next inference line (and they work even if \verb=\noLine= is used and line isn't actually drawn). + +So, for example, the commands +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{$\Gamma, A \vdash B$} + \LeftLabel{Conditional Proof:} + \UnaryInfC{$\Gamma \vdash A \rightarrow B$} +\end{prooftree} +\end{verbatim} +\end{quote} +will generate +\begin{prooftree} + \AxiomC{$\Gamma, A \vdash B$} + \LeftLabel{Conditional Proof:} + \UnaryInfC{$\Gamma \vdash A \rightarrow B$} +\end{prooftree} +You can insert spacing commands and other text commands into the label text, so e.g. substituting \verb=\LeftLabel{Conditional Proof:\quad}= will generate +\begin{prooftree} + \AxiomC{$\Gamma, A \vdash B$} + \LeftLabel{Conditional Proof:\quad} + \UnaryInfC{$\Gamma \vdash A \rightarrow B$} +\end{prooftree} +However, there is also a global command for adjusting the position of labels, and in general it might be better to use that. + +You can reduce the size of the label font, so that +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{$P$} + \AxiomC{} + \RightLabel{\scriptsize(1)} + \UnaryInfC{$\neg P$} + \BinaryInfC{$\bot$} + \RightLabel{\scriptsize(1)} + \UnaryInfC{$\neg\neg P$} +\end{prooftree} +\end{verbatim} +\end{quote} +will set the conventionally annotated proof +\begin{prooftree} + \AxiomC{$P$} + \AxiomC{} + \RightLabel{\scriptsize(1)} + \UnaryInfC{$\neg P$} + \BinaryInfC{$\bot$} + \RightLabel{\scriptsize(1)} + \UnaryInfC{$\neg\neg P$} +\end{prooftree} +\subsection{Varieties of inference lines} The inference line between premiss and derived conclusion defaults, as we've seen, to a single solid line. But this can be changed, either locally or more globally. The local change commands are +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\noLine= +\item \verb=\singleLine= +\item \verb=\doubleLine= +\item \verb=\solidLine= +\item \verb=\dottedLine= +\item \verb=\dashedLine= +\end{description} +\end{quote} +Each applies to the next inference, and line-\emph{number} and line-\emph{type} commands can be combined: so, for example, +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \AxiomC{$\Gamma, A \vdash B$} + \doubleLine\dashedLine + \UnaryInfC{$\Gamma \vdash A \rightarrow B$} +\end{prooftree} +\end{verbatim} +\end{quote} +produces the following: +\begin{prooftree} + \AxiomC{$\Gamma, A \vdash B$} + \doubleLine\dashedLine + \UnaryInfC{$\Gamma \vdash A \rightarrow B$} +\end{prooftree} +There are corresponding global commands that can be placed anywhere in a proof and will affect all succeeding lines unless and until overridden. +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\alwaysNoLine= +\item \verb=\alwaysSingleLine= +\item \verb=\alwaysDoubleLine= +\item \verb=\alwaysSolidLine= +\item \verb=\alwaysDottedLine= +\item \verb=\alwaysDashedLine= +\end{description} +\end{quote} +Here `succeeding lines' means `succeeding in the (vertical) order that commands are given' not `logically succeeding'. (Note: Sam Buss comments that \verb=\alwaysNoLine= is `untested': but it seems to work fine on my trials.) + +So, for example, the commands +\begin{quote} +\begin{verbatim} +\begin{prooftree} + \alwaysNoLine + \AxiomC{$\Pi_1$} + \UnaryInfC{$A$} + \AxiomC{[$A$]} + \UnaryInfC{$\Pi_2$} + \UnaryInfC{$B$} + \alwaysSingleLine + \UnaryInfC{$A \to B$} + \BinaryInfC{$B$} +\end{prooftree} +\end{verbatim} +\end{quote} +produces the following: +\begin{prooftree} + +\alwaysNoLine +\AxiomC{$\Pi_1$} +\UnaryInfC{$A$} +\AxiomC{[$A$]} +\UnaryInfC{$\Pi_2$} +\UnaryInfC{$B$} +\alwaysSingleLine +\UnaryInfC{$A \to B$} +\BinaryInfC{$B$} +\end{prooftree} + +\subsection{Turning a proof upside down} + +Suppose you want to set a proof-tree the other way up, i.e. get a \emph{downward} branching tree with the root at the \emph{top}. Then you need the command \verb=\rootAtTop=. Note, this applies only to the current proof. If you want to make this behaviour persistent, then use \verb=\alwaysRootAtTop=. (The default behaviour can be restored using \verb=\rootAtBottom= and \verb=\alwaysRootAtBottom=.) + + +\section{Fine-tuning the proof layout} +\texttt{bussproofs.sty} allows a lot of user-modification of the default style of proof lay-out, either by global modifications of parameters, or by local tweakings within a proof. We'll divide these commands into +\begin{itemize}\setlength{\itemsep}{0.0in} +\item commands for determining \emph{where a whole proof is set}; +\item commands for \emph{adjusting the `geometry' within a proof}; +\item commands for \emph{redefining line styles}. +\end{itemize} + +\subsection{Where a proof is set} + +\noindent\textbf{i}\quad The amount of \emph{space above and below} a proof-tree display is set by the parameter +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\proofSkipAmount= +\end{description} +\end{quote} +Its default setting is \verb={\vskip.8ex plus.8ex minus.4ex}=. This can be modified, and negative values of \verb=\vskip= are accepted. + +To change the space above the tree (which you'll want to do if the top lines are null axioms, which generate additional white space), use \verb=\def\proofSkipAmount{\vskip= \emph{new-skip}\verb=}= \emph{before} the opening command \verb=\begin{prooftree}=; the size of the skip after the proof can then be reset by another \verb=\def\proofSkipAmount{...}= command before the proof closes. + +\vspace{12pt}\noindent\textbf{ii}\quad Whole proofs set using the proof-tree environment can be \emph{nudged sideways} by using the command \verb=\hskip= \emph{nudge} (no brackets!) placed e.g. immediately after the command \verb=\begin{prooftree}=. A positive value of \emph{nudge} such as \verb=0.5in= shifts the proof to the right, a negative value such as \verb=-20pt= shifts the proof left. + +\EnableBpAbbreviations +\vspace{4pt}\noindent\textbf{iii}\quad For \emph{vertical positioning of in-line proofs}, compare \AXC{$\phi \land \psi$}\UIC{$\phi$}\DP with \centerAlignProof\AXC{$\phi \land \psi$}\UIC{$\phi$}\DP and \bottomAlignProof\AXC{$\phi \land \psi$}\UIC{$\phi$}\DP\hspace{-6pt}. The first is set vertically centered within the current line (the default position), the second is set rather lower so (at least with a one-step proof) the inference line is on a level with the foot of the current line, and the third is set with the conclusion aligned to the current line. To produce the second tree, use the command \verb=\centerAlignProof=; to produce the third tree, use \verb=\bottomAlignProof=; to restore the default positioning +use \verb=\normalAlignProof=. + +\subsection{Layout within a proof} +In this section, we consider the use of + +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\ScoreOverhang= (controls how far inference lines `overhang' the premisses/conclusion) +\item \verb=\extraVskip= (controls the extra space above and below lines) +\item \verb=\labelSpacing= (controls horizontal space separating labels and inference lines) +\item \verb=\defaultHypSeparation= (controls horizontal spread of proof tree) +\item \verb=\insertBetweenHyps= (can be used to adjust position of hypotheses in next inference) +\item \verb=\kernHyps= (nudges hypotheses left or right) +\end{description} +\end{quote} + +\noindent\textbf{i}\quad The default setting of \verb=\ScoreOverhang= is \verb={4pt}=. This produces e.g. the tree +\begin{prooftree} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\psi$} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\phi$} +\BinaryInfC{$\psi \land \phi$} +\end{prooftree} +Inserting, for example, the line \verb=\def\ScoreOverhang{1pt}= at the beginning of the chain of proof-commands changes (improves!?) the look of the tree by reducing the `overhang' of inference lines: +\begin{prooftree} +\def\ScoreOverhang{1pt} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\psi$} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\phi$} +\BinaryInfC{$\psi \land \phi$} +\end{prooftree} +\vspace{12pt} +\noindent\textbf{ii}\quad The default setting of \verb=\extraVskip= is \verb={2pt}=, which inserts 2 pt spacing above and below an inference line, as in the last two proofs. To increase this throughout the proof, use e.g. the line \verb=\def\extraVskip{3pt}= at the beginning of the chain of proof-commands to get +\begin{prooftree} +\def\extraVskip{3pt} +\def\ScoreOverhang{1pt} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\psi$} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\phi$} +\BinaryInfC{$\psi \land \phi$} +\end{prooftree} +You can also change the interline skip on the fly, during a proof, to improve alignments. Thus compare +\begin{center} +\alwaysNoLine +\AxiomC{$\Pi_1$} +\UnaryInfC{$A$} +\AxiomC{[$A$]} +\UnaryInfC{$\Pi_2$} +\UnaryInfC{$B$} +\alwaysSingleLine +\UnaryInfC{$A \to B$} +\BinaryInfC{$B$} +\DisplayProof +\hspace{24pt} +\alwaysNoLine +\AxiomC{$\Pi_1$} +\def\extraVskip{1pt}\UnaryInfC{$A$} +\AxiomC{[$A$]} +\def\extraVskip{2pt} +\UnaryInfC{$\Pi_2$} +\UnaryInfC{$B$} +\def\extraVskip{2.5pt} +\alwaysSingleLine +\UnaryInfC{$A \to B$} +\BinaryInfC{$B$} +\DisplayProof +\end{center} +Here, the proof on the left was created by using the default settings, and the one on the right was created by the following commands (with the two proofs being set in the same line in a \verb=\begin{center} ... \end{center}= environment): +\begin{quote} +\begin{verbatim} +\alwaysNoLine +\AxiomC{$\Pi_1$} +\def\extraVskip{1pt} +\UnaryInfC{$A$} + \AxiomC{[$A$]} + \def\extraVskip{2pt} + \UnaryInfC{$\Pi_2$} + \UnaryInfC{$B$} + \def\extraVskip{2.5pt} + \alwaysSingleLine + \UnaryInfC{$A \to B$} + \BinaryInfC{$B$} +\DisplayProof +\end{verbatim} +\end{quote} + +\vspace{4pt} +\noindent\textbf{iii}\quad The default setting of \verb=\labelSpacing= is \verb={3pt}=, which inserts 3 pt between inference lines and their associated labels. To change this, use the command \verb=\def\labelSpacing{=\emph{new-space}\verb=}= at the beginning of a chain of proof-commands. For example +\begin{prooftree} +\def\extraVskip{2pt} +\def\labelSpacing{8pt} +\def\ScoreOverhang{1.2pt} +\AxiomC{$(\phi \land \psi)$} +\UnaryInfC{$\psi$} +\AxiomC{} +\RightLabel{\scriptsize(1)} +\def\extraVskip{1pt} +\UnaryInfC{$\neg\psi$} +\def\extraVskip{2pt} +\BinaryInfC{$\bot$} +\RightLabel{\scriptsize(1)} +\UnaryInfC{$\neg(\psi \land \phi)$} +\end{prooftree} +is set with \verb=\def\labelSpacing{8pt}=. + + + + +\vspace{12pt} + +\noindent\textbf{iv}\quad The default setting of \verb=\defaultHypSeparation= is \verb={\hskip.2in}=. Increase this to spread out a spread out a proof horizontally, decrease it to squeeze the proof. Thus compare +\begin{center} +\def\defaultHypSeparation{\hskip .1in} +\def\ScoreOverhang{1pt} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\psi$} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\phi$} +\BinaryInfC{$\psi \land \phi$} +\DisplayProof +\hspace{24pt} +\def\defaultHypSeparation{\hskip.5in} +\def\ScoreOverhang{1pt} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\psi$} +\AxiomC{$\phi \land \psi$} +\UnaryInfC{$\phi$} +\BinaryInfC{$\psi \land \phi$} +\DisplayProof +\end{center} +where the proof commands for the left tree start \verb=\def\defaultHypSeparation{\hskip .1in}=, and for the right tree start \verb=\def\defaultHypSeparation{\hskip .5in}=. + +\vspace{12pt} +\noindent\textbf{v}\quad Use the command \verb=\insertBetweenHyps{=\emph{stuff}\verb=}= before a binary or trinary inference command to insert \emph{stuff} between the hypotheses of that inference. The obvious use of this is to adjust the spacing between the hypotheses of that inference, by using e.g. +\verb=\insertBetweenHyps{\hskip -4pt}=. + +\vspace{12pt} +\noindent\textbf{vi}\quad Use the command \verb=\kernHyps{=\emph{kern}\verb=}= before an inference command to nudge the hypotheses of that inference right by the distance \emph{kern}, e.g. \verb=4pt=. Negative values of \emph{kern} nudge the hypotheses to the left. + +\subsection{Inference-line styles} + +In this section, we consider the use of + +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\ruleScoreFiller= (sets the style of solid rules) +\item \verb=\dottedScoreFiller= (sets the style of dotted rules) +\item \verb=\dashedBuildScore= (sets the style of dashed rules) +\end{description} +\end{quote} +\noindent\textbf{i}\quad The default setting of \verb=\ruleScoreFiller= is \verb={\hrule}=, and in \LaTeX\ an unqualified \verb=\hrule= command produces a horizontal line of thickness 0.4 pt. To change the rule's thickness, use the command \verb=\def\ruleScoreFiller{\hrule height= \emph{new-thickness}\verb=}=. + +\vspace{12pt} +\noindent\textbf{ii}\quad The default setting of \verb=\dottedScoreFiller= is \verb={\hbox to4pt{\hss.\hss}}=. The default for \verb=\dashedBuildScore= is \begin{quote} +\verb={\hbox to2.8mm{\hss\vrule width1.4mm height0.4pt depth0.0pt\hss}}= +\end{quote} Both defaults can be altered to produce any other desired type of line. + +\section{Abbreviating the commands}\label{abbrev} +Using the command \verb=\EnableBpAbbreviations= enables some laconic shorthand for various commands: +\begin{quote} +\begin{description}\setlength{\itemsep}{0.0in} +\item \verb=\AX= and \verb=\AXC= abbreviate \verb=\Axiom= and \verb=\AxiomC= +\item \verb=\UI= and \verb=\UIC= abbreviate \verb=\UnaryInf= and \verb=\UnaryInfC= +\item \verb=\BI= and \verb=\BIC= abbreviate \verb=\BinaryInf= and \verb=\BinaryInfC= +\item \verb=\TI= and \verb=\TIC= abbreviate \verb=\TrinaryInf= and \verb=\TrinaryInfC= +\item \verb=\DP= abbreviates \verb=\DisplayProof= +\end{description} +\end{quote} +The enabling of these short abbreviations is optional, and users should guard against conflicts with commands from other +macro packages or their own defined abbreviations. + +\end{document} diff --git a/Master/texmf-dist/doc/latex/bussproofs/README.txt b/Master/texmf-dist/doc/latex/bussproofs/README.txt new file mode 100644 index 00000000000..8690625e9a0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/bussproofs/README.txt @@ -0,0 +1,31 @@ +bussproofs, version 1.1. + +Proof trees in the style of the sequent calculus and other proof systems. + +The package allows the construction of proof trees in the style of +the sequent calculus and many other proof systems. One novel +feature of the macros is they support the horizontal alignment +according to some centre point specified with the command \fCenter. +This is the style often used in sequent calculus proofs. + +The package works in a Plain TeX document, as well as in LaTeX; an +exposition of the commands available is given in the package file +itself. Documentation is also given in a separate LaTeX/FILE, +BussGuide2.tex/BussGuide2.pdf. + +Distribution under the LaTeX Project Public License + +The CTAN distribution includes: + +bussproofs.sty - version 1.1 of the style files. + +BussGuide2.pdf - The documentation by Peter Smith. +BussGuide2.tex - LaTeX source for the documentation. + +testbp2.tex - A file used for testing, with examples of usage. +testbp2.pdf - The output of the testbp2.tex + +README.txt - This file. + +Maintained by Sam Buss +sbuss@math.ucsd.edu diff --git a/Master/texmf-dist/doc/latex/bussproofs/testbp2.pdf b/Master/texmf-dist/doc/latex/bussproofs/testbp2.pdf Binary files differindex 9aef7cf5f47..03a7f7a7a31 100644 --- a/Master/texmf-dist/doc/latex/bussproofs/testbp2.pdf +++ b/Master/texmf-dist/doc/latex/bussproofs/testbp2.pdf diff --git a/Master/texmf-dist/doc/latex/bussproofs/testbp2.tex b/Master/texmf-dist/doc/latex/bussproofs/testbp2.tex index 8bbdef5375a..3dd30d98bd5 100644 --- a/Master/texmf-dist/doc/latex/bussproofs/testbp2.tex +++ b/Master/texmf-dist/doc/latex/bussproofs/testbp2.tex @@ -235,6 +235,68 @@ Another upside-down example, from Alex Hertel: \bigskip + +\alwaysRootAtBottom +Testing of quaternary and quinary inferences (a bit scrunched due a use of +\verb+\insertBetweenHyps+): +\begin{prooftree} +\insertBetweenHyps{\hskip-1em} +\AxiomC{$A^B$} +\Axiom$A_B\fCenter A_{B_C}$ +\Axiom$A^B\fCenter A^{B^C}$ +\Axiom$A^{B^C}\fCenter A^{B^{C^D}}$ +\Axiom$A^{B^{C^D}}\fCenter A^{B^{C^{D^E}}}A^{B^{C^{D^E}}}$ +\QuinaryInf$X\fCenter XXXXX$ +\UnaryInf$YYYY\fCenter Y$ +\insertBetweenHyps{\hskip-1em} +\Axiom$A^B\fCenter A^{B^C}$ +\Axiom$A^{B^C}\fCenter A^{B^{C^D}}$ +\Axiom$A^{B^{C^D}}\fCenter A^{B^{C^{D^E}}}A^{B^{C^{D^E}}}$ +\QuaternaryInf$X\fCenter XXXXX$ +\UnaryInf$YYYY\fCenter Y$ +\end{prooftree} + +\alwaysRootAtTop +Testing of quaternary and quinary inferences (a bit scrunched due a use of +\verb+\insertBetweenHyps+): +\begin{prooftree} +\insertBetweenHyps{\hskip-1em} +\AxiomC{$A^B$} +\Axiom$A_B\fCenter A_{B_C}$ +\Axiom$A^B\fCenter A^{B^C}$ +\Axiom$A^{B^C}\fCenter A^{B^{C^D}}$ +\Axiom$A^{B^{C^D}}\fCenter A^{B^{C^{D^E}}}A^{B^{C^{D^E}}}$ +\QuinaryInf$X\fCenter XXXXX$ +\UnaryInf$YYYY\fCenter Y$ +\insertBetweenHyps{\hskip-1em} +\Axiom$A^B\fCenter A^{B^C}$ +\Axiom$A^{B^C}\fCenter A^{B^{C^D}}$ +\Axiom$A^{B^{C^D}}\fCenter A^{B^{C^{D^E}}}A^{B^{C^{D^E}}}$ +\QuaternaryInf$X\fCenter XXXXX$ +\UnaryInf$YYYY\fCenter Y$ +\end{prooftree} + +\begin{prooftree} +\insertBetweenHyps{\hskip-1em} +\Axiom$A^B\fCenter A^{B^C}$ +\Axiom$A^{B^C}\fCenter A^{B^{C^D}}$ +\Axiom$A^{B^{C^D}}\fCenter A^{B^{C^{D^E}}}A^{B^{C^{D^E}}}$ +\TrinaryInf$X\fCenter XXXXX$ +\end{prooftree} + +\newenvironment{proof}{\begin{trivlist}\item[]{\bf Proof\ }}% +{\end{trivlist}} +\newenvironment{proofX}{\noindent{\bf Proof\ }}% +{} + +\begin{proofX} +\begin{prooftree} +\Axiom$A^{B^C}\fCenter A^{B^{C^D}}$ +\Axiom$A^{B^{C^D}}\fCenter A^{B^{C^{D^E}}}A^{B^{C^{D^E}}}$ +\BinaryInf$X\fCenter XXXXX$ +\end{prooftree} +\end{proofX} + \newbox\gnBoxA \newdimen\gnCornerHgt \setbox\gnBoxA=\hbox{$\ulcorner$} diff --git a/Master/texmf-dist/tex/latex/bussproofs/bussproofs.sty b/Master/texmf-dist/tex/latex/bussproofs/bussproofs.sty index 8d2d4481a10..d5b46d389cf 100644 --- a/Master/texmf-dist/tex/latex/bussproofs/bussproofs.sty +++ b/Master/texmf-dist/tex/latex/bussproofs/bussproofs.sty @@ -1,7 +1,8 @@ % -\def\BPmessage{Proof Tree (bussproofs) style macros. Version 1.0.} -% bussproofs.sty. Version 1.0 -% (c) 1994,1995,1996,2004,2005,2006. Copyright retained by Samuel R. Buss. +\def\BPmessage{Proof Tree (bussproofs) style macros. Version 1.1.} +% bussproofs.sty. Version 1.1 +% (c) 1994,1995,1996,2004,2005,2006, 2011. +% Copyright retained by Samuel R. Buss. % % ==== Legal statement: ==== % This work may be distributed and/or modified under the @@ -15,7 +16,7 @@ % This work has the LPPL maintenance status 'maintained'. % % The Current Maintainer of the work is Sam Buss. -% +% % This work consists of bussproofs.sty. % ===== % Informal summary of legal situation: @@ -48,9 +49,16 @@ % New feature: root of proof may now be at the bottom instead of % at just the top. Thanks to Alex Hertel for the suggestion to implement % this. +% June 2011, version 1.1. +% New feature: 4-ary and 5-ary inferences. Thanks to Thomas Strathmann +% for taking the initiative to implement these. +% Four new commands: QuaternaryInf(C) and QuinaryInf(C). +% Bug fix: \insertBetweenHyps now works for proofs with root at top and +% three or more hypotheses.. % A good exposition of how to use bussproofs.sty (version 0.9) has been written -% by Peter Smith and is available on the internet. +% by Peter Smith and is available on the internet and in the CTAN +% distribution. % The comments below also describe the features of bussproofs.sty, % including user-modifiable parameters. @@ -102,13 +110,15 @@ % lines may be combined in a single proof. % % By using the optional \EnableBpAbbreviations command, various -% abbreviated two letter commands are enabled. This allows +% abbreviated two or three letter commands are enabled. This allows, +% in particular: % \AX and \AXC for \Axiom and \AxiomC, (resp.), % \DP for \DisplayProof, % \BI and \BIC for \BinaryInf and \BinaryInfC, % \UI and \UIC for \UnaryInf and \UnaryInfC, % \TI and \TIC for \TrinaryInf and \TrinaryInfC, % \LL and \RL for \LeftLabel and \RightLabel. +% See the source code below for additional abbreviations. % The enabling of these short abbreviations is OPTIONAL, since % there is the possibility of conflicting with names from other % macro packages. @@ -144,7 +154,7 @@ % --------- X % C % -% use the commands +% use the commands % \AxiomC{A} % \AxiomC{B} % \RightLabel{X} @@ -187,6 +197,7 @@ % is prohibited in $\Axiom. On the other hand, the $'s are optional % in \AxiomC and are mandatory in \Axiom. To typeset the argument % to \AxiomC in math mode, you must use $'s (or \(...\) ). +% The same comments apply to the inference commands below. % % \UnaryInf$<antecendent>\fCenter<succedent>$ % @@ -200,6 +211,14 @@ % % \TrinaryInfC{<whole sequent or formula>} % +% \QuaternaryInf$<antecendent>\fCenter<succedent>$ +% +% \QuaternaryInfC{<whole sequent or formula>} +% +% \QuinaryInf$<antecendent>\fCenter<succedent>$ +% +% \QuinaryInfC{<whole sequent or formula>} +% % \LeftLabel{<text>} - Puts <text> as a label to the left % of the next inference line. (Works even if % \noLine is used too.) @@ -275,6 +294,10 @@ \let\BIC\BinaryInfC \let\TI\TrinaryInf \let\TIC\TrinaryInfC + \let\QI\QuaternaryInf + \let\QIC\QuaternaryInfC + \let\QuI\QuinaryInf + \let\QuIC\QuinaryInfC \let\LL\LeftLabel \let\RL\RightLabel \let\DP\DisplayProof @@ -284,8 +307,8 @@ % The user may wish to override these parameters locally or globally. % BUT DON'T CHANGE THE PARAMETERS BY CHANGING THIS FILE (to avoid % future incompatibilities). Instead, you should change them in your -% TeX document right after including this style file in the -% header material of your LaTeX document. +% TeX document right after including this style file in the +% header material of your LaTeX document. \def\ScoreOverhang{4pt} % How much underlines extend out \def\ScoreOverhangLeft{\ScoreOverhang} @@ -380,6 +403,8 @@ \newdimen\scoreDepth% Score Depth \newdimen\htLbox% \newdimen\htRbox% +\newdimen\htRRbox% +\newdimen\htRRRbox% \newdimen\htAbox% \newdimen\htCbox% @@ -532,6 +557,187 @@ \ignorespaces% } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\prepQuaternary{% + \ifnum\theLevel<4 + \errmessage{Hypotheses missing!} + \fi% + \edef\rrcurBox{\thecur{myBox}}% Set up names of very right hypothesis + \edef\rrcurScoreStart{\thecur{myScoreStart}}% + \edef\rrcurCenter{\thecur{myCenter}}% + \edef\rrcurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\rcurBox{\thecur{myBox}}% Set up names of right hypothesis + \edef\rcurScoreStart{\thecur{myScoreStart}}% + \edef\rcurCenter{\thecur{myCenter}}% + \edef\rcurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\ccurBox{\thecur{myBox}}% Set up names of center hypothesis + \edef\ccurScoreStart{\thecur{myScoreStart}}% + \edef\ccurCenter{\thecur{myCenter}}% + \edef\ccurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\lcurBox{\thecur{myBox}}% Set up names of left hypothesis + \edef\lcurScoreStart{\thecur{myScoreStart}}% + \edef\lcurCenter{\thecur{myCenter}}% + \edef\lcurScoreEnd{\thecur{myScoreEnd}}% +} + +\def\QuaternaryInf$#1\fCenter#2${% + \prepQuaternary% + \buildConclusion{#1}{#2}% + \joinQuaternary% + \resetInferenceDefaults% + \ignorespaces% +} + +\def\QuaternaryInfC#1{% + \prepQuaternary% + \buildConclusionC{#1}% + \joinQuaternary% + \resetInferenceDefaults% + \ignorespaces% +} + +\def\joinQuaternary{% Construct the quarterary inference into a vbox. + % Join the four hypotheses's boxes into one hbox. + \setbox\myBoxA=\hbox{\theHypSeparation}% + \lcurScoreEnd=\rrcurScoreEnd% + \advance\lcurScoreEnd by\wd\rcurBox% + \advance\lcurScoreEnd by\wd\lcurBox% + \advance\lcurScoreEnd by\wd\ccurBox% + \advance\lcurScoreEnd by3\wd\myBoxA% + \displace=\lcurScoreEnd% + \advance\displace by -\lcurScoreStart% + \lcurCenter=.5\displace% + \advance\lcurCenter by\lcurScoreStart% + \ifx\rootAtBottomFlag\myTrue% + \setbox\lcurBox=% + \hbox{\box\lcurBox\unhcopy\myBoxA\box\ccurBox% + \unhcopy\myBoxA\box\rcurBox + \unhcopy\myBoxA\box\rrcurBox}% + \else% + \htLbox = \ht\lcurBox% + \htAbox = \ht\myBoxA% + \htCbox = \ht\ccurBox% + \htRbox = \ht\rcurBox% + \htRRbox = \ht\rrcurBox% + \setbox\lcurBox=% + \hbox{\lower\htLbox\box\lcurBox% + \lower\htAbox\copy\myBoxA\lower\htCbox\box\ccurBox% + \lower\htAbox\copy\myBoxA\lower\htRbox\box\rcurBox% + \lower\htAbox\copy\myBoxA\lower\htRRbox\box\rrcurBox}% + \fi% + % Adjust center of upper hypotheses according to how much + % the lower sequent is off-center. + \displace=\newCenter% + \advance\displace by -.5\newScoreStart% + \advance\displace by -.5\newScoreEnd% + \advance\lcurCenter by \displace% + %Align and join the curBox and the two hypotheses's box into one vbox. + \edef\curBox{\lcurBox}% + \edef\curScoreStart{\lcurScoreStart}% + \edef\curScoreEnd{\lcurScoreEnd}% + \edef\curCenter{\lcurCenter}% + \joinUnary% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\prepQuinary{% + \ifnum\theLevel<5 + \errmessage{Hypotheses missing!} + \fi% + \edef\rrrcurBox{\thecur{myBox}}% Set up names of very very right hypothesis + \edef\rrrcurScoreStart{\thecur{myScoreStart}}% + \edef\rrrcurCenter{\thecur{myCenter}}% + \edef\rrrcurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\rrcurBox{\thecur{myBox}}% Set up names of very right hypothesis + \edef\rrcurScoreStart{\thecur{myScoreStart}}% + \edef\rrcurCenter{\thecur{myCenter}}% + \edef\rrcurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\rcurBox{\thecur{myBox}}% Set up names of right hypothesis + \edef\rcurScoreStart{\thecur{myScoreStart}}% + \edef\rcurCenter{\thecur{myCenter}}% + \edef\rcurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\ccurBox{\thecur{myBox}}% Set up names of center hypothesis + \edef\ccurScoreStart{\thecur{myScoreStart}}% + \edef\ccurCenter{\thecur{myCenter}}% + \edef\ccurScoreEnd{\thecur{myScoreEnd}}% + \advance\theLevel by-1% + \edef\lcurBox{\thecur{myBox}}% Set up names of left hypothesis + \edef\lcurScoreStart{\thecur{myScoreStart}}% + \edef\lcurCenter{\thecur{myCenter}}% + \edef\lcurScoreEnd{\thecur{myScoreEnd}}% +} + +\def\QuinaryInf$#1\fCenter#2${% + \prepQuinary% + \buildConclusion{#1}{#2}% + \joinQuinary% + \resetInferenceDefaults% + \ignorespaces% +} + +\def\QuinaryInfC#1{% + \prepQuinary% + \buildConclusionC{#1}% + \joinQuinary% + \resetInferenceDefaults% + \ignorespaces% +} + +\def\joinQuinary{% Construct the quinary inference into a vbox. + % Join the five hypotheses's boxes into one hbox. + \setbox\myBoxA=\hbox{\theHypSeparation}% + \lcurScoreEnd=\rrrcurScoreEnd% + \advance\lcurScoreEnd by\wd\rrcurBox% + \advance\lcurScoreEnd by\wd\rcurBox% + \advance\lcurScoreEnd by\wd\lcurBox% + \advance\lcurScoreEnd by\wd\ccurBox% + \advance\lcurScoreEnd by4\wd\myBoxA% + \displace=\lcurScoreEnd% + \advance\displace by -\lcurScoreStart% + \lcurCenter=.5\displace% + \advance\lcurCenter by\lcurScoreStart% + \ifx\rootAtBottomFlag\myTrue% + \setbox\lcurBox=% + \hbox{\box\lcurBox\unhcopy\myBoxA\box\ccurBox% + \unhcopy\myBoxA\box\rcurBox + \unhcopy\myBoxA\box\rrcurBox + \unhcopy\myBoxA\box\rrrcurBox}% + \else% + \htLbox = \ht\lcurBox% + \htAbox = \ht\myBoxA% + \htCbox = \ht\ccurBox% + \htRbox = \ht\rcurBox% + \htRRbox = \ht\rrcurBox% + \htRRRbox = \ht\rrrcurBox% + \setbox\lcurBox=% + \hbox{\lower\htLbox\box\lcurBox% + \lower\htAbox\copy\myBoxA\lower\htCbox\box\ccurBox% + \lower\htAbox\copy\myBoxA\lower\htRbox\box\rcurBox% + \lower\htAbox\copy\myBoxA\lower\htRRbox\box\rrcurBox% + \lower\htAbox\copy\myBoxA\lower\htRRRbox\box\rrrcurBox}% + \fi% + % Adjust center of upper hypotheses according to how much + % the lower sequent is off-center. + \displace=\newCenter% + \advance\displace by -.5\newScoreStart% + \advance\displace by -.5\newScoreEnd% + \advance\lcurCenter by \displace% + %Align and join the curBox and the two hypotheses's box into one vbox. + \edef\curBox{\lcurBox}% + \edef\curScoreStart{\lcurScoreStart}% + \edef\curScoreEnd{\lcurScoreEnd}% + \edef\curCenter{\lcurCenter}% + \joinUnary% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \def\buildConclusion#1#2{% Build lower sequent w/ center at \fCenter position. % Define the boxes \setbox\myBoxA=\hbox{$\mathord{#1}\fCenter\mathord{\relax}$}% @@ -587,7 +793,7 @@ % Form the score and labels into a box. \buildScoreLabels% % Form the new box and its dimensions - \ifx\rootAtBottomFlag\myTrue% + \ifx\rootAtBottomFlag\myTrue% \buildRootBottom% \else% \buildRootTop% @@ -597,7 +803,7 @@ \global \curCenter=\newCenter% } -\def\buildRootBottom{% +\def\buildRootBottom{% \global \setbox \curBox =% \vbox{\box\curBox% \vskip\thisAboveSkip \relax% @@ -688,8 +894,8 @@ \htRbox = \ht\rcurBox% \setbox\lcurBox=% \hbox{\lower\htLbox\box\lcurBox% - \lower\htAbox\box\myBoxA\lower\htCbox\box\ccurBox% - \lower\htAbox\box\myBoxA\lower\htRbox\box\rcurBox}% + \lower\htAbox\copy\myBoxA\lower\htCbox\box\ccurBox% + \lower\htAbox\copy\myBoxA\lower\htRbox\box\rcurBox}% \fi% % Adjust center of upper hypotheses according to how much % the lower sequent is off-center. @@ -928,3 +1134,4 @@ \rootAtTop } + |