6 changed files with 813 additions and 0 deletions
			
			
		- 
					426util/boxproof.sty
- 
					51util/ltl_macros.tex
- 
					212util/math_macros.tex
- 
					31util/packages.tex
- 
					58util/styling_macros.tex
- 
					35util/util.sh
| @ -0,0 +1,426 @@ | |||||
|  | % mangletex (11 May 1992) run at 22:09 GMT Monday 08 November 1993 | ||||
|  | %%\title                {\TeX\ macros for proof boxes} | ||||
|  | %%\author               {Paul Taylor\\ | ||||
|  | %%                      Department of Computing,\\ | ||||
|  | %%                      Imperial College,\\ | ||||
|  | %%                      London SW7 2BZ\\ | ||||
|  | %%                      +44 71 589 5111 {\em ext.} 5057\\ | ||||
|  | %%                      {\tt<pt@doc.ic.ac.uk>}} | ||||
|  | %%\date{8 November 1993} | ||||
|  | %% % to get the provisional user documentation do | ||||
|  | %% % grep ^%% boxproof.tex | sed 's/^%*//' > boxproof-manual.tex | ||||
|  | %%\documentstyle{article} | ||||
|  | %%\input boxproof.tex | ||||
|  | %%\def\meta#1{\mbox{$\langle\hbox{#1}\rangle$}} | ||||
|  | %%\def\macrowitharg#1#2{{\tt\string#1\bra\meta{#2}\ket}} | ||||
|  | %%{\escapechar-1 \xdef\bra{\string\{}\xdef\ket{\string\}}} | ||||
|  | %%\let\subsection\section | ||||
|  | %%\begin{document} | ||||
|  | %%\maketitle | ||||
|  | %% | ||||
|  | %% \subsection{Introduction} | ||||
|  | %% The proof | ||||
|  | %%\begin{proofbox} | ||||
|  | %%  \(\"1"\:\alpha\leftrightarrow\psi(x,\top)\=\\ | ||||
|  | %%        \:\Some\beta.\psi(x,\beta)\=\mathsf{total}\\ | ||||
|  | %%    \[\exists\beta\kern-1em\:\psi(x,\beta)\\ | ||||
|  | %%      \(\:\beta\=\\ | ||||
|  | %%        \:\beta=\top\=(*)\\ | ||||
|  | %%        \:\psi(x,\!\top)\=\mathsf{subs}\\ | ||||
|  | %%        \:\alpha\=\elim\leftrightarrow(\ref{1})\\ | ||||
|  | %%      \*\:\alpha\=\\ | ||||
|  | %%        \:\psi(x,\!\top)\=\elim\leftrightarrow(\ref{1})\\ | ||||
|  | %%        \:\beta=\top\=\mathsf{func}\\ | ||||
|  | %%        \:\beta\=(*)\\ | ||||
|  | %%      \)\:\alpha=\beta\=\intro\leftrightarrow\\ | ||||
|  | %%        \:\psi(x,\alpha)\=\mathsf{subs}\\ | ||||
|  | %%    \]  \:\psi(x,\alpha)\=\elim\exists\\ | ||||
|  | %%    \*  \:\psi(x,\alpha)\=\\ | ||||
|  | %%      \(\:\alpha\=\\ | ||||
|  | %%        \:\alpha=\top\=(*)\\ | ||||
|  | %%        \:\phi(x,\!\top)\=\mathsf{subs}\\ | ||||
|  | %%      \*\:\psi(x,\!\top)\=\\ | ||||
|  | %%        \:\alpha=\top\=\mathsf{func}\\ | ||||
|  | %%        \:\alpha\=(*)\\ | ||||
|  | %%      \)\:\alpha\leftrightarrow\psi(x,\!\top)\=\intro\leftrightarrow\\ | ||||
|  | %%%    \)  \:\psi(x,\alpha)\leftrightarrow(\alpha\leftrightarrow\psi(x,\!\top)) | ||||
|  | %%          \=\intro\leftrightarrow\\ | ||||
|  | %%\end{proofbox} | ||||
|  | %% is produced by | ||||
|  | %%\begin{verbatim} | ||||
|  | %%\begin{proofbox} | ||||
|  | %%  \(\"1"\:\alpha\leftrightarrow\psi(x,\top)\\ | ||||
|  | %%        \:\Some\beta.\psi(x,\beta)                      \=\mathsf{total}\\ | ||||
|  | %%    \[\exists\beta\kern-1em\:\psi(x,\beta)\\ | ||||
|  | %%      \(\:\beta\\ | ||||
|  | %%        \:\beta=\top                                    \=(*)\\ | ||||
|  | %%        \:\psi(x,\!\top)                                \=\mathsf{subs}\\ | ||||
|  | %%        \:\alpha                         \=\elim\leftrightarrow(\ref{1})\\ | ||||
|  | %%      \*\:\alpha\\ | ||||
|  | %%        \:\psi(x,\!\top)                 \=\elim\leftrightarrow(\ref{1})\\ | ||||
|  | %%        \:\beta=\top                                     \=\mathsf{func}\\ | ||||
|  | %%        \:\beta\=(*)\\ | ||||
|  | %%      \)\:\alpha=\beta                           \=\intro\leftrightarrow\\ | ||||
|  | %%        \:\psi(x,\alpha)                                 \=\mathsf{subs}\\ | ||||
|  | %%    \]  \:\psi(x,\alpha)                                  \=\elim\exists\\ | ||||
|  | %%    \*  \:\psi(x,\alpha)\\ | ||||
|  | %%      \(\:\alpha\\ | ||||
|  | %%        \:\alpha=\top                                   \=(*)\\ | ||||
|  | %%        \:\phi(x,\!\top)                                \=\mathsf{subs}\\ | ||||
|  | %%      \*\:\psi(x,\!\top)\\ | ||||
|  | %%        \:\alpha=\top                                   \=\mathsf{func}\\ | ||||
|  | %%        \:\alpha                                        \=(*)\\ | ||||
|  | %%      \)\:\alpha\leftrightarrow\psi(x,\!\top)   \=\intro\leftrightarrow\\ | ||||
|  | %%    \)  \:\psi(x,\alpha)\leftrightarrow | ||||
|  | %%          (\alpha\leftrightarrow\psi(x,\!\top)) \=\intro\leftrightarrow\\ | ||||
|  | %%\end{proofbox} | ||||
|  | %%\end{verbatim} | ||||
|  | %% | ||||
|  | %%  Syntax as follows: | ||||
|  | %%  each line is of the form | ||||
|  | %%  \begin{center} | ||||
|  | %%     \meta{variables} | ||||
|  | %%     \meta{name} | ||||
|  | %%     \verb/\:/ \meta{formula} | ||||
|  | %%     \verb/\=/ \meta{reason} | ||||
|  | %%     \verb/\-/ \meta{use} | ||||
|  | %%     \verb/\\/ | ||||
|  | %%  \end{center} | ||||
|  | %%  where | ||||
|  | %%  \begin{itemize} | ||||
|  | %%  \item \meta{variables} is something like ``$x,y$'' --- | ||||
|  | %%    it's for variables declared at the beginning of $\intro\forall$- and | ||||
|  | %%    $\elim\exists$-boxes. | ||||
|  | %%  \item \meta{name} is a command \verb/\label{fred}/ which | ||||
|  | %%    defines \verb/fred/ to be the label text, which may be used anywhere | ||||
|  | %%    as \verb/\ref{fred}/ --- see {\em The \LaTeX book.} | ||||
|  | %%    Local labels are also available, using \macrowitharg\lbl{name} | ||||
|  | %%    or \verb/\"/\meta{name}\verb/"/; these obey the scoping rules of | ||||
|  | %%    the boxes. | ||||
|  | %%    You may also refer to the previous line as \verb/\ref{-}/. | ||||
|  | %%  \item \meta{formula} is the proposition being asserted. | ||||
|  | %%  \item \meta{reason} is \verb/\intro\land(\ref{john},\ref{mary})/ | ||||
|  | %%         or \verb/\elim\forall(\ref{jim})/. | ||||
|  | %%  \item \meta{use} is provided for linear logic, to record the step | ||||
|  | %%%         which uses this one. How this accords with theory I don't yet know. | ||||
|  | %%  \end{itemize} | ||||
|  | %%  Note that the parts are separated by \verb/\:/, \verb/\=/ and \verb/\\/; | ||||
|  | %%  these correspond to | ||||
|  | %%  \begin{center} | ||||
|  | %%     {\bf let } \meta{name} = \meta{expression} : \meta{type} | ||||
|  | %%  \end{center} | ||||
|  | %%  in a declarative language. | ||||
|  | %%  The \verb/\:/, \verb/\=/ and \verb/\-/ fields are optional and may occur | ||||
|  | %%  in any order. If any of them is repeated the last is taken. | ||||
|  | %%  If none of them is present the \meta{variables} field is also ignored. | ||||
|  | %% | ||||
|  | %%  Proof {\em boxes\/} are ``wrapped up'' as follows: | ||||
|  | %%  \begin{itemize} | ||||
|  | %%%  \item the whole proof in \verb/\begin{proofbox}/...\verb/\end{proofbox}/; | ||||
|  | %%%  \item single-column boxes ($\intro\forall$, $\intro\imp$, $\elim\exists$), | ||||
|  | %%      in \verb/\[/...\verb/\]/. | ||||
|  | %%  \item multiple-column boxes are of two kinds: | ||||
|  | %%    \begin{itemize} | ||||
|  | %%%     \item separate ($\intro\land$) boxes: \verb/\(/...\verb/\*/...\verb/\)/. | ||||
|  | %%     \item stuck together ($\elim\lor$) boxes: | ||||
|  | %%        \verb/\(/...\verb/\+/...\verb/\)/. | ||||
|  | %%    \end{itemize} | ||||
|  | %%  \end{itemize} | ||||
|  | %%  You may put more than two columns in \verb/\(/...\verb/\)/ and even mix | ||||
|  | %%  the \verb/\+/ and \verb/\*/ separators. | ||||
|  | %% | ||||
|  | %%  The whole proof is enclosed in \verb/\proofbox/...\verb/\endproofbox/ | ||||
|  | %%  or \verb/\begin{proofbox}/...\verb/\end{proofbox}/, but the \LaTeX\ | ||||
|  | %%  environment form {\em must not\/} be used for nested boxes. | ||||
|  | %% | ||||
|  | %%  If the proof occurs in paragraph mode (ie in vertical or | ||||
|  | %%  unrestricted horizontal mode) then it is set as a display, using the | ||||
|  | %%  full width of the page. Otherwise it uses only the required width. | ||||
|  | %% | ||||
|  | %%  A lot of the internals are potentially configurable, but there is not | ||||
|  | %%  yet a user interface suitable for doing this. This will be provided | ||||
|  | %%  in the next version. | ||||
|  | %% | ||||
|  | %%  This is a {\em prototype\/} proof-box macro package; | ||||
|  | %%  the syntax and implementation may change. | ||||
|  | %%  It is {\tt boxproof.tex} in the \TeX\ system | ||||
|  | %%  (so just \verb/\input boxproof/). | ||||
|  | %% | ||||
|  | %%  There are some examples in | ||||
|  | %%  \verb+~pt/utilities/proofs/proofboxeg.tex+ and | ||||
|  | %%  \verb+proofboxeg1.tex+. | ||||
|  | %% | ||||
|  | %%  The prototype version was begun on 2 August 1991, the new one on | ||||
|  | %%  4 June 1993. | ||||
|  | %% | ||||
|  | %% | ||||
|  | \message{}\edef\proofboxrestoreat | ||||
|  | {\noexpand\catcode`\noexpand\@\the\catcode`\@}\catcode`\@=11 \count@\year | ||||
|  | \multiply\count@12 \advance\count@\month\ifnum\count@> 23999 \message{}% | ||||
|  | \message{}\fi\let\pb@A\+\let\+\relax\let\pb@B\(\let\pb@C\)\def\pb@D{\pb@B | ||||
|  | \let\)\pb@C}\def\pb@E{\pb@B\displaystyle\let\]\pb@C}%% | ||||
|  | %% The following are user-settable dimensions. | ||||
|  | %%  | ||||
|  | \newdimen\prooflinenowidth\prooflinenowidth1em \newdimen\proofboxfullwidth | ||||
|  | \newdimen\proofboxleftmargin\proofboxleftmargin3em \newdimen | ||||
|  | \proofboxrightmargin\newdimen\proofboxrulebreadth\proofboxrulebreadth.4pt | ||||
|  | \newdimen\proofboxseparation\proofboxseparation.2em \newdimen | ||||
|  | \proofboxbaselineskip\proofboxbaselineskip4ex %% | ||||
|  | %% | ||||
|  | %% The following are user-accessible numbers. | ||||
|  | %% | ||||
|  | \newcount\proofcolumns\newcount\prooflinetotal\newcount\prooflineinbox%% | ||||
|  | %% | ||||
|  | %% These boxes receive the fields of the proof steps. | ||||
|  | %% They are used in \verb/\proofboxmakeleftcolumn/ {\em etc}. | ||||
|  | %% | ||||
|  | \newbox\proofboxproposition\newbox\proofboxreason\newbox\proofboxuse\newbox | ||||
|  | \proofboxvariables%% | ||||
|  | %% The left-most switch is used by | ||||
|  | %%% \verb/\proofboxmakelabel/ to suppress the label in all but the first column. | ||||
|  | %% On the outside it is true. | ||||
|  | \newif\ifleftmostproofbox\leftmostproofboxtrue%% | ||||
|  | %% | ||||
|  | %% The following are obsolete: they are only included for reverse | ||||
|  | %% compatibility with the prototype version. | ||||
|  | \newdimen\proofboxintercol\newdimen\proofboxsurround\newdimen | ||||
|  | \proofboxformulawidth\newdimen\proofboxmargin\newskip\proofboxlefttabskip | ||||
|  | \newskip\proofboxrighttabskip%% | ||||
|  | %% | ||||
|  | %% \subsection{Redefinable macros} | ||||
|  | %% WARNING: most of these commands will be hidden and replaced with | ||||
|  | %% optional arguments to \verb/\proofbox/ in a future version. | ||||
|  | %% Do not rely on them. | ||||
|  | %% | ||||
|  | %% We provide three different ways of numbering the lines of the proof: | ||||
|  | %% \begin{itemize} | ||||
|  | %% \item \verb/\runningproofline/: a global running sequence (default), | ||||
|  | %%  | ||||
|  | \def\runningproofline{\number\prooflinetotal}%% | ||||
|  | %% \item \verb/\nestedproofline/: a hierarchical system with dots, | ||||
|  | %% | ||||
|  | \def\nestedproofline{\relax\ifx\enclosingproofline\empty\else | ||||
|  | \enclosingproofline{.}\fi\number\prooflineinbox}\def\enclosingproofline{}%% | ||||
|  | %% \item \verb/\nestedproofline/: a fully hierarchical system which | ||||
|  | %% also includes the column number | ||||
|  | %% (\verb/\proof@columns/) as a letter (ASCII quote plus number). | ||||
|  | %% | ||||
|  | \def\proofboxcolumn{\ifnum\proofcolumns>\z@{\count@96\advance\count@ | ||||
|  | \proofcolumns\char\count@}\fi}\def\fullynestedproofline{\relax\ifx | ||||
|  | \enclosingproofline\empty\enclosingproofline\proofboxcolumn.\else | ||||
|  | \proofboxcolumn\fi\number\prooflineinbox}%% | ||||
|  | %% \end{itemize} | ||||
|  | %% \verb/\theproofline/ is the default. | ||||
|  | %% | ||||
|  | \let\theproofline\runningproofline%% | ||||
|  | %% The macro \verb/\proofboxmakelabel#1/ is used to print the line label. | ||||
|  | %% We only put it in the leftmost box. | ||||
|  | %% It is printed in small non-ranging Arabic numerals | ||||
|  | %% ({\the\scriptfont1 0123456789}). | ||||
|  | %% Right-justify it in \verb/\prooflinenowidth/ if it will fit, | ||||
|  | %% otherwise let it stick out on the right, {\em i.e.}~left-justify it. | ||||
|  | %% | ||||
|  | \def\proofboxmakelabel#1{{\relax\ifleftmostproofbox\setbox\z@\hbox{\hss\the | ||||
|  | \scriptfont\@ne#1}\ifdim\wd\z@<\prooflinenowidth\setbox\z@\hbox to% | ||||
|  | \prooflinenowidth{\unhbox\z@}\fi\box\z@\quad\fi}}%% | ||||
|  | %% Kill the numbers altogether with \verb/\proofboxnonumbers/. | ||||
|  | %% | ||||
|  | \def\proofboxnonumbers{\def\proofboxmakelabel##1{}}%% | ||||
|  | %% How to make the left column of the proof box: | ||||
|  | %% use the variables field, a space if necessary and the line label. | ||||
|  | %% | ||||
|  | \def\proofboxmakeleftcolumn{\kern\proofboxseparation\hfil\dimen@\wd | ||||
|  | \proofboxvariables\unhbox\proofboxvariables\ifdim\dimen@>\z@\quad\fi | ||||
|  | \proofboxmakelabel\@currentlabel}%% | ||||
|  | %% How to make the middle column of the proof box: | ||||
|  | %% left justify the formula field. | ||||
|  | %% | ||||
|  | \def\proofboxmakemiddlecolumn{\unhbox\proofboxproposition\hfil\quad}%% | ||||
|  | %% How to make the right column of the proof box: | ||||
|  | %% use the reason and use fields. | ||||
|  | %% | ||||
|  | \def\proofboxmakerightcolumn{\box\proofboxreason\box\proofboxuse\hfil\kern | ||||
|  | \proofboxseparation}%% | ||||
|  | %% | ||||
|  | %% Make the four edges of a rectangular box and the separator | ||||
|  | %% between \verb/\+/ columns. | ||||
|  | %% | ||||
|  | \def\proofboxleftside{\leaders\hrule width\proofboxrulebreadth\vfill}\def | ||||
|  | \proofboxrightside{\leaders\hrule width\proofboxrulebreadth\vfill}\def | ||||
|  | \proofboxorseparator{\leaders\hrule width\proofboxrulebreadth\vfill}\def | ||||
|  | \proofboxtopside{\leaders\vrule height\proofboxrulebreadth depth\z@\hfill}% | ||||
|  | \def\proofboxbottomside{\leaders\vrule height\proofboxrulebreadth depth\z@ | ||||
|  | \hfill}%% | ||||
|  | %% | ||||
|  | %% Use dotted lines: \verb/\dottedproofbox/. | ||||
|  | %% | ||||
|  | \def\dottedproofbox{\def\proofboxleftside{\leaders\pb@F\vfill} \def | ||||
|  | \proofboxrightside{\leaders\pb@F\vfill} \def\proofboxorseparator{\leaders | ||||
|  | \pb@F\vfill} \def\proofboxtopside{\leaders\pb@F\hfill}\def\proofboxbottomside | ||||
|  | {\leaders\pb@F\hfill}%% | ||||
|  | }\def\pb@F{\vbox to 5pt{\vss\hbox to 5pt{\hss.\hss}\vss}}%% | ||||
|  | %% Leave the boxes open at the bottom: \verb/\openproofbox/ | ||||
|  | %% | ||||
|  | \def\openproofbox{\def\proofboxbottomside{\hfill}} %% | ||||
|  | %% \subsection{Miscellaneous logical notations} | ||||
|  | %% | ||||
|  | %% Print the names of the introduction and elimination rules, for example: | ||||
|  | %%  \begin{quote} | ||||
|  | %%     \verb/\elim\forall/ $\elim\forall$ \qquad | ||||
|  | %%     \verb/\intro\land/ $\intro\land$ \qquad | ||||
|  | %%  \end{quote} | ||||
|  | \def\intro#1{{{#1}{\cal I}}}\def\elim#1{{{#1}{\cal E}}}%% | ||||
|  | %% Recall that in \TeX\ the logical connectives and quantifiers are called | ||||
|  | %%  \begin{center} | ||||
|  | %%    \verb/\lor/ $\lor$\quad | ||||
|  | %%    \verb/\land/ $\land$\quad | ||||
|  | %%    \verb/\lnot/ $\lnot$\quad | ||||
|  | %%    \verb/\forall/ $\forall$\quad | ||||
|  | %%    \verb/\exists/ $\exists$ | ||||
|  | %%  \end{center} | ||||
|  | %% The following provide macros for the \verb/\implies/ {\em relation\/} | ||||
|  | %% and for the binary {\em operation\/} which yields the abstract | ||||
|  | %% \verb/\implic/ation between formulae. | ||||
|  | %% The point is that \TeX\ spaces them and breaks the lines differently: | ||||
|  | %%  \begin{center} | ||||
|  | %%    \verb/A\implies B/ $A\implies B$\quad{\em versus\/}\quad | ||||
|  | %%    \verb/A\implic B/ $A\implic B$ | ||||
|  | %%  \end{center} | ||||
|  | %% There are forward and reverse, single and Double versions. | ||||
|  | %% | ||||
|  | \mathchardef\implies="3221 \mathchardef\impliedby="3220 \mathchardef\Implies=% | ||||
|  | "3229 \mathchardef\Impliedby="3228 \mathchardef\implic="2221 \mathchardef | ||||
|  | \implicby="2220 \mathchardef\Implic="2229 \mathchardef\Implicby="2228 \let | ||||
|  | \imp\to%% | ||||
|  | %% Handle the spacing after a variable (and optionally its type) | ||||
|  | %% bound by a quantifier symbol. For example | ||||
|  | %%  \begin{quote} | ||||
|  | %%    \verb/\All x:X. \phi(x)/\quad prints as\quad $\All x:X.\phi(x)$\quad | ||||
|  | %%     instead of\quad $\forall x:X.\phi(x)$ | ||||
|  | %%  \end{quote} | ||||
|  | \def\Quantifier#1#2.{\pb@G{#1}#2::.}\def\pb@G#1#2:#3:#4.{{{#1}{#2}\def\next{#% | ||||
|  | 3}\ifx\next\empty{.}\mkern4mu \else\mkern1mu{\colon}\mkern1mu{#3}\mkern.5mu{.% | ||||
|  | }\mkern6mu \fi}}% | ||||
|  | %% We provide some commonly used forms; \verb/\iota/ ($\iota$) is Russell's | ||||
|  | %% description operator and should really be inverted. | ||||
|  | \def\All{\Quantifier\forall}\def\Some{\Quantifier\exists}\def\Function{% | ||||
|  | \Quantifier\lambda}\def\Product{\Quantifier\Pi}\def\Sum{\Quantifier\Sigma}% | ||||
|  | \def\TheOne{\Quantifier\iota}\def\Least{\Quantifier\mu}\def\Greatest{% | ||||
|  | \Quantifier\nu}%% | ||||
|  | %% There are several notations for substitution. | ||||
|  | %% After writing $a[x:=b]$ throughout my book I~thought I~might change to | ||||
|  | %% $[b/x]^*a$. | ||||
|  | %% This macro reads the source in the first form and prints in the second. | ||||
|  | %% If you use it you can, like me, defer the decision about | ||||
|  | %% which notation to use until the final stages, doing | ||||
|  | %% \begin{quote} | ||||
|  | %%    \verb/\renewcommand{\Subst}{\plainsubstitution}/ | ||||
|  | %% \end{quote} | ||||
|  | %% if you finally decide on making substitution act on the right. | ||||
|  | %% This is already an improvement on the literal text, because it | ||||
|  | %% automatically enlarges the brackets according to the text inside. | ||||
|  | %% \verb/\Subst/ itself is (following my book) | ||||
|  | %% defined in terms of the action of a context morphism (\verb/\CtxtMor/) | ||||
|  | %% on a term. Again you can do | ||||
|  | %% \begin{quote} | ||||
|  | %%    \verb/\renewcommand{\CtxtMor}{\plaincontextmorphism}/ | ||||
|  | %% \end{quote} | ||||
|  | %% for something simpler. | ||||
|  | %% This macro interprets its argument as a comma-separated list | ||||
|  | %% of items in the form $x:=b$, which it switches to $b/x$. | ||||
|  | \def\swappingsubstitution#1[#2]{{\CtxtMor[#2]^*{#1}}}% | ||||
|  | %\def\swappingcontextmorphism[#1]{{\let\pb@J\empty\left[\pb@H#1,[],\/\right]}}% | ||||
|  | \def\swappingcontextmorphism[#1]{{\let\pb@J\empty[\pb@H#1,[],\/]}}% | ||||
|  | \def\pb@H#1,{\def\next{#1}\ifx\next\pb@K\else\pb@J\let\pb@J,\pb@I#1:=:=,% | ||||
|  | \expandafter\pb@H\fi}\def\pb@I#1:=#2:=#3,{{\def\next{#2}\ifx\next\empty\else{% | ||||
|  | #2}/\fi{#1} }}\def\pb@K{[]}\def\Subst{\swappingsubstitution}\def\CtxtMor{% | ||||
|  | \swappingcontextmorphism}%% | ||||
|  | %% The simple versions. | ||||
|  | \def\plainsubstitution#1#2{{#1}{\left[{#2}\right]}}\def\plaincontextmorphism#% | ||||
|  | 1{{\left[#1\right]}}\newbox\pb@L\newdimen\pb@T\newdimen\pb@U\newdimen\pb@M | ||||
|  | \newdimen\pb@N\newdimen\pb@O\newdimen\pb@P\newdimen\pb@Q\newdimen\pb@R | ||||
|  | \newdimen\pb@S\def\pb@V#1#2{\relax\ifdim#1<#2\relax#1=#2\relax\fi}\count@ | ||||
|  | \year\multiply\count@12 \advance\count@\month\ifnum\count@> 25000 \message{% | ||||
|  | because this one has expired and will no longer work!}\endinput\fi%% | ||||
|  | \def\proofbox{\relax\ifmmode\let\next\pb@a\else\let\next\pb@b\ifhmode\ifinner | ||||
|  | \let\next\pb@a\fi\fi\fi\next\global\prooflinetotal\@ne\boxmaxdepth\maxdimen | ||||
|  | \def\[{\pb@w\pb@f\pb@W}\def\({\pb@w\pb@f\pb@X}\def\proofbox{\[}\let\lbl\pb@y | ||||
|  | \def\"##1"{\pb@y{##1}}\def\:{\pb@v\proofboxproposition\displaystyle}\def\={% | ||||
|  | \pb@v\proofboxreason}\def\-{\pb@v\proofboxuse}\def\\{\pb@w\pb@u}\let\+\pb@c | ||||
|  | \let\*\pb@c\let\]\pb@c\pb@p\pb@s}\def\endproofbox{\pb@q\pb@IA\box\pb@L\egroup | ||||
|  | }\def\pb@W{\let\+\pb@d\let\*\pb@d\def\){\pb@e\[\)}\let\]\pb@Y\proofcolumns\z@ | ||||
|  | }\def\pb@X{\proofcolumns\@ne\def\+{\pb@j\pb@l}\def\*{\pb@j\pb@m}\def\]{\pb@e | ||||
|  | \(\]}\let\)\pb@Y}\def\pb@Y{\pb@o\pb@u}\def\pb@a{\hbox\bgroup}\def\pb@b{$$% | ||||
|  | \kern-\displayindent\hbox to\hsize\bgroup\proofboxfullwidth\hsize\aftergroup$% | ||||
|  | \aftergroup$}\def\pb@c{\errmessage{Box proofs: \string\+, \string\*, \string | ||||
|  | \) and \string\] may not be used at the top level}}\def\pb@d{\errmessage{Box | ||||
|  | proofs: enclose \string\+ and \string\* in \string\(\string\), not \string\[% | ||||
|  | \string\]}}\def\pb@e#1#2{\errmessage{Box proofs: \string#1 closed by \string#% | ||||
|  | 2}\pb@Y}\def\pb@f#1{\setbox\pb@L\hbox\bgroup#1\let\pb@g\pb@n\let | ||||
|  | \enclosingproofline\@currentlabel\edef\pb@h{\the\prooflinetotal}\let\pb@i | ||||
|  | \pb@h\pb@O\z@\pb@M\z@\pb@N-\maxdimen\pb@P\z@\pb@p\pb@t}\def\pb@j#1{\pb@q\pb@k | ||||
|  | \let\pb@g#1\advance\proofcolumns\@ne\global\prooflinetotal\pb@h | ||||
|  | \leftmostproofboxfalse\pb@p\pb@t}\def\pb@k{\pb@g\pb@V\pb@M{\wd\pb@L}\advance | ||||
|  | \pb@O\wd\pb@L\ifnum\pb@i<\prooflinetotal\edef\pb@i{\the\prooflinetotal}\fi | ||||
|  | \ifdim\pb@N<\dp\pb@L\pb@N\dp\pb@L\pb@P\pb@Q\fi\setbox\z@\hbox{% | ||||
|  | \proofboxtopside}\wd\z@\z@\box\z@\setbox\z@\hbox{\proofboxbottomside}\wd\z@ | ||||
|  | \z@\box\z@\kern\pb@R\box\pb@L\kern\pb@S}\def\pb@l{\vtop{\proofboxorseparator}% | ||||
|  | \penalty\thr@@}\def\pb@m{\vtop{\proofboxrightside}\kern\proofboxseparation | ||||
|  | \vtop{\proofboxleftside}\penalty\tw@}\def\pb@n{\pb@T\pb@R\setbox\z@\vtop{% | ||||
|  | \proofboxleftside}\dimen@\wd\z@\advance\pb@T\dimen@\advance\pb@T | ||||
|  | \proofboxseparation\kern-\pb@T\kern\proofboxseparation\box\z@\penalty\@ne}% | ||||
|  | \def\pb@o{\pb@q\pb@k\setbox\z@\vtop{\proofboxrightside}\global\advance\pb@S | ||||
|  | \wd\z@\box\z@\global\advance\pb@S\proofboxseparation\kern\proofboxseparation | ||||
|  | \global\prooflinetotal\pb@i\global\pb@R\pb@T\global\pb@Q\pb@P\ifnum | ||||
|  | \proofcolumns<\@ne\proofcolumns\@ne\fi\penalty\proofcolumns\kern-\pb@M\kern | ||||
|  | \pb@M\kern-\pb@O\kern\pb@O\kern-\pb@S\penalty\@ne\egroup\pb@r}\def\pb@p#1{% | ||||
|  | \setbox\pb@L\vtop\bgroup\baselineskip\proofboxbaselineskip\prooflineinbox\@ne | ||||
|  | \pb@T\z@\pb@U\z@#1\pb@u}\def\pb@q{\pb@w\global\pb@R\pb@T\global\pb@S\pb@U | ||||
|  | \egroup}\def\pb@r{\pb@V\pb@T\pb@R\pb@V\pb@U\pb@S\box\pb@L\prevdepth\pb@Q}\def | ||||
|  | \pb@s{}\def\pb@t{}\def\pb@u{\edef\@currentlabel{\theproofline}\let\label@name | ||||
|  | \@currentlabel\setbox\proofboxproposition\box\voidb@x\setbox\proofboxreason | ||||
|  | \box\voidb@x\setbox\proofboxuse\box\voidb@x\setbox\proofboxvariables\hbox | ||||
|  | \bgroup\let\pb@z\pb@AA\let\pb@w\pb@x$}\def\pb@v#1{$\egroup\setbox#1\hbox | ||||
|  | \bgroup\let\pb@z\pb@AA$}\def\pb@w{$\egroup\global\advance\prooflinetotal\@ne | ||||
|  | \advance\prooflineinbox\@ne\setbox\pb@L\hbox{\setbox\z@\hbox{% | ||||
|  | \proofboxmakeleftcolumn}\global\pb@R\wd\z@\kern-\pb@R\box\z@\hbox{% | ||||
|  | \proofboxmakemiddlecolumn}\setbox\z@\hbox{\proofboxmakerightcolumn}\global | ||||
|  | \pb@S\wd\z@\box\z@\kern-\pb@S\penalty\tw@}\global\pb@Q\dp\pb@L\pb@r}\def\pb@x | ||||
|  | {$\egroup}\def\pb@y#1{\aftergroup\pb@z\expandafter\aftergroup\csname r@#1% | ||||
|  | \endcsname}\def\pb@z#1{\edef#1{{\@currentlabel}{}}\expandafter\pb@@A\string#1% | ||||
|  | \\}\expandafter\def\expandafter\pb@@A\string\r@#1\\{\def\label@name{#1}}\def | ||||
|  | \pb@AA#1{\aftergroup\pb@z\aftergroup#1}\expandafter\def\csname r@-\endcsname{% | ||||
|  | {\previous@label}{}}\dimendef\pb@BA=\@ne\dimendef\pb@CA=\tw@\dimendef\pb@DA=% | ||||
|  | \thr@@\dimendef\pb@EA=4 \dimendef\pb@FA=5 \dimendef\pb@GA=6 \chardef\pb@HA=9 | ||||
|  | \def\pb@IA{\pb@GA\proofboxfullwidth\pb@T\proofboxleftmargin\pb@V\pb@T\pb@R | ||||
|  | \advance\pb@GA-\pb@T\pb@U\proofboxrightmargin\pb@V\pb@U\pb@S\advance\pb@GA-% | ||||
|  | \pb@U\pb@V\pb@GA{\wd\pb@L}\pb@JA}\def\pb@JA{\setbox\pb@L\vtop{\unvbox\pb@L | ||||
|  | \loop\skip@\lastskip\unskip\setbox\pb@HA\lastbox\ifhbox\pb@HA\pb@KA\repeat | ||||
|  | \unvbox\pb@L\unskip}}\def\pb@KA{\pb@DA\dp\pb@HA\pb@EA\ht\pb@HA\pb@CA\wd\pb@HA | ||||
|  | \setbox\pb@HA\hbox{\unhbox\pb@HA\count@\lastpenalty\unpenalty\unkern\ifodd | ||||
|  | \count@\pb@LA\else\setbox\thr@@\lastbox\setbox\tw@\lastbox\setbox\@ne\lastbox | ||||
|  | \unkern\hbox to\pb@T{\unhbox\@ne}\hbox to\pb@GA{\unhbox\tw@}\hbox to\pb@U{% | ||||
|  | \unhbox\thr@@}\fi}\dp\pb@HA\pb@DA\ht\pb@HA\pb@EA\setbox\pb@L\vtop{\box\pb@HA | ||||
|  | \nointerlineskip\vskip\skip@\unvbox\pb@L}}\def\pb@LA{\pb@O\lastkern\unkern | ||||
|  | \unkern\pb@M\lastkern\unkern\unkern\proofcolumns\lastpenalty\unpenalty\pb@FA | ||||
|  | \pb@T\ifnum\@ne=\proofcolumns\let\pb@MA\pb@NA\else\advance\pb@GA-\pb@CA\pb@BA | ||||
|  | \pb@GA\advance\pb@GA\pb@O\ifdim\pb@GA<\proofcolumns\pb@M\divide\pb@BA | ||||
|  | \proofcolumns\let\pb@MA\pb@PA\else\divide\pb@GA\proofcolumns\let\pb@MA\pb@OA | ||||
|  | \fi\fi\dimen@\lastkern\unkern\setbox\@ne\lastbox\pb@RA\setbox\pb@HA\hbox{\box | ||||
|  | \@ne\kern\dimen@}\advance\pb@U-\wd\pb@HA\unkern\loop\setbox\pb@L\lastbox\pb@T | ||||
|  | \lastkern\unkern\setbox\tw@\lastbox\setbox\thr@@\lastbox\count@\lastpenalty | ||||
|  | \unpenalty\pb@MA\pb@JA\setbox\@ne\vbox{\offinterlineskip\pb@QA\thr@@\vfil | ||||
|  | \pb@QA\tw@}\pb@RA\pb@TA{\box\@ne\box\pb@L}\ifnum\count@>\@ne\pb@SA\pb@U | ||||
|  | \lastkern\unkern\repeat\unhbox\pb@HA}\def\pb@NA{\pb@T\pb@FA\setbox\@ne | ||||
|  | \lastbox\advance\pb@T-\wd\@ne\dimen@\lastkern\unkern\unkern\kern\dimen@\pb@RA | ||||
|  | \box\@ne\advance\pb@T-\dimen@}\def\pb@OA{\ifnum\@ne=\count@\pb@NA\fi}\def | ||||
|  | \pb@PA{\pb@GA\wd\pb@L\advance\pb@GA\pb@BA\pb@OA}\def\pb@QA#1{\setbox#1\hbox to% | ||||
|  | \wd\pb@L{\unhbox#1}\wd#1\z@\box#1\relax}\def\pb@RA{\setbox\@ne\vbox to\pb@EA{% | ||||
|  | \offinterlineskip\vskip-\proofboxseparation\unvbox\@ne\vskip-% | ||||
|  | \proofboxseparation\setbox\z@\null\ht\z@-\pb@DA\dp\z@\pb@DA\box\z@}}\def | ||||
|  | \pb@SA{\setbox\@ne\lastbox\pb@RA\pb@TA{\box\@ne}\ifodd\count@\else\dimen@ | ||||
|  | \lastkern\unkern\setbox\@ne\lastbox\pb@RA\pb@TA{\box\@ne\kern\dimen@}\fi}\def | ||||
|  | \pb@TA#1{\setbox\pb@HA\hbox{#1\unhbox\pb@HA}}\let\+\pb@A\proofboxrestoreat | ||||
|  | \endinput\def\x{}%% | ||||
|  | %% \end{document} | ||||
|  | % \fi | ||||
| @ -0,0 +1,51 @@ | |||||
|  | \newcommand{\ws}[1]{\phantom{#1}} | ||||
|  | 
 | ||||
|  | \newcommand{\event}{\ensuremath{F}} | ||||
|  | \newcommand{\glob}{\ensuremath{G}} | ||||
|  | \newcommand{\nex}{\ensuremath{X}} | ||||
|  | \newcommand{\unt}{\ensuremath{U}} | ||||
|  | \newcommand{\release}{\ensuremath{R}} | ||||
|  | \newcommand{\wrelease}{\ensuremath{W}} | ||||
|  | 
 | ||||
|  | \newenvironment{ltltabular}[1] | ||||
|  |   {\begin{tabular}{ |l|*{#1}{c|} } \hline} | ||||
|  |   {\end{tabular}} | ||||
|  | 
 | ||||
|  | \ExplSyntaxOn | ||||
|  | \NewDocumentCommand{\ltlrow}{m} { | ||||
|  |    \seq_set_split:Nnn \ltl_row {|} { #1 } | ||||
|  |    \seq_use:Nn \ltl_row { & } | ||||
|  |    \\ | ||||
|  |    \hline | ||||
|  |   } | ||||
|  | \seq_new:N \ltl_row % allocate a sequence | ||||
|  | \ExplSyntaxOff | ||||
|  | 
 | ||||
|  | \ExplSyntaxOn | ||||
|  | \NewDocumentCommand{\ltlSteps}{+m +m} { | ||||
|  |   \int_set:Nn \l_end {#1} | ||||
|  |   \int_set:Nn \l_iter {0} | ||||
|  |   \int_do_until:nNnn {\l_iter} = {\l_end} { | ||||
|  |     \seq_put_right:Nx \ltl_steps { \int_use:N \l_iter} | ||||
|  |     \int_incr:N \l_iter | ||||
|  |   } | ||||
|  |   \seq_put_right:Nn \ltl_steps { \multicolumn{#2}{c|}{ $\omega$ } } | ||||
|  |   \seq_put_left:Nn \ltl_steps { Step } | ||||
|  |   \seq_use:Nn \ltl_steps { & } | ||||
|  |   \\ | ||||
|  |   \hline | ||||
|  | } | ||||
|  | \int_new:N \l_end | ||||
|  | \int_new:N \l_iter | ||||
|  | \seq_new:N \ltl_steps % allocate a sequence | ||||
|  | \ExplSyntaxOff | ||||
|  | 
 | ||||
|  | \newcommand{\ltlTrace}[2]{ | ||||
|  |   \def\VARIABLE{#1}% | ||||
|  |   \VARIABLE & \ltlrow{#2} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\ltlFormula}[2]{ | ||||
|  |   \def\FORMULA{#1}% | ||||
|  |   \FORMULA & \ltlrow{#2} | ||||
|  | } | ||||
| @ -0,0 +1,212 @@ | |||||
|  | \renewcommand{\phi}{\varphi} | ||||
|  | \renewcommand{\implies}{\rightarrow} | ||||
|  | \newcommand{\imp}{\rightarrow} | ||||
|  | \newcommand{\entails}{\enspace \vdash \enspace} | ||||
|  | \newcommand{\ent}{\enspace \vdash \enspace} | ||||
|  | \newcommand{\eqv}{\leftrightarrow} | ||||
|  | \newcommand{\biimp}{\leftrightarrow} | ||||
|  | \newcommand{\lxor}{\oplus} | ||||
|  | \newcommand{\nentails}{\nvdash} | ||||
|  | \newcommand{\nmodels}{\nvDash} | ||||
|  | 
 | ||||
|  | \newcommand{\true}{\ensuremath{\top}} | ||||
|  | \newcommand{\false}{\ensuremath{\bot}} | ||||
|  | 
 | ||||
|  | % multiple choice itemize | ||||
|  | \newcommand{\ticked}{\ensuremath{\boxtimes}} | ||||
|  | 
 | ||||
|  | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||||
|  | % TSEITIN rules | ||||
|  | \newcommand{\tseitinAnd}[3]{ | ||||
|  |   \def\CHI{#1}% | ||||
|  |   \def\PHI{#2}% | ||||
|  |   \def\PSI{#3}% | ||||
|  |   \ensuremath{(\lnot \CHI \lor \PHI) \land (\lnot \CHI \lor \PSI) \land (\lnot \PSI \lor \lnot \PSI \lor \CHI)}% | ||||
|  | } | ||||
|  | \newcommand{\tseitinOr}[3]{ | ||||
|  |   \def\CHI{#1}% | ||||
|  |   \def\PHI{#2}% | ||||
|  |   \def\PSI{#3}% | ||||
|  |   \ensuremath{(\lnot \PHI \lor \CHI) \land (\lnot \PSI \lor \CHI) \land (\lnot \CHI \lor \lnot \PHI \lor \PSI)}% | ||||
|  | } | ||||
|  | \newcommand{\tseitinNot}[2]{ | ||||
|  |   \def\CHI{#1}% | ||||
|  |   \def\PHI{#2}% | ||||
|  |   \ensuremath{(\lnot \CHI \lor \lnot \PHI) \land (\CHI \lor \PHI)}% | ||||
|  | } | ||||
|  | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||||
|  | 
 | ||||
|  | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||||
|  | % DPLL helper | ||||
|  | \newenvironment{dplltabular}[1] | ||||
|  |   {\begin{tabular}{ |l|*{#1}{c|} } \hline} | ||||
|  |   {\end{tabular}} | ||||
|  | 
 | ||||
|  | \ExplSyntaxOn | ||||
|  | \NewDocumentCommand{\dpllrow}{m} | ||||
|  |  { | ||||
|  |   \seq_set_split:Nnn \l_row {|} { #1 } | ||||
|  |   \seq_use:Nn \l_row { & } | ||||
|  |   \\ | ||||
|  |   \hline | ||||
|  |  } | ||||
|  | \seq_new:N \l_row % allocate a sequence | ||||
|  | \ExplSyntaxOff | ||||
|  | 
 | ||||
|  | \newcommand{\dpllStep}[1]{ | ||||
|  |   Step & \dpllrow{#1} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\dpllDecL}[1]{ | ||||
|  |   Decision Level & \dpllrow{#1} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\dpllAssi}[1]{ | ||||
|  |   Assignment & \dpllrow{#1} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\dpllBCP}[1]{ | ||||
|  |   BCP & \dpllrow{#1} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\dpllPL}[1]{ | ||||
|  |   PL & \dpllrow{#1} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\dpllDeci}[1]{ | ||||
|  |   Decision & \dpllrow{#1} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\dpllClause}[3]{ | ||||
|  |   \def\ITEM{#1}% | ||||
|  |   \def\CLAUSE{#2}% | ||||
|  |   Cl. \ITEM: \CLAUSE & \dpllrow{#3} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \ExplSyntaxOn | ||||
|  | \NewDocumentCommand{\clause}{m} | ||||
|  |  { | ||||
|  |   \seq_set_split:Nnn \l_clause {;} { #1 } | ||||
|  |   \seq_use:Nn \l_clause { \lor } | ||||
|  |  } | ||||
|  | \seq_new:N \l_clause % allocate a sequence | ||||
|  | \ExplSyntaxOff | ||||
|  | 
 | ||||
|  | \ExplSyntaxOn | ||||
|  | \NewDocumentCommand{\cube}{m} | ||||
|  |  { | ||||
|  |   \seq_set_split:Nnn \l_cube {;} { #1 } | ||||
|  |   \seq_use:Nn \l_cube { \land } | ||||
|  |  } | ||||
|  | \seq_new:N \l_cube % allocate a sequence | ||||
|  | \ExplSyntaxOff | ||||
|  | 
 | ||||
|  | \newcommand{\cmark}{\ding{51}} | ||||
|  | \newcommand{\xmark}{\ding{55}} | ||||
|  | \newcommand{\done}{\cmark} | ||||
|  | \newcommand{\conflict}{\{\} \xmark} | ||||
|  | 
 | ||||
|  | \NewEnviron{conflictgraph}[1][1.5cm]{% | ||||
|  |   \begin{tikzpicture}[->, | ||||
|  |                       >=stealth', | ||||
|  |                       shorten >=1pt, | ||||
|  |                       auto, | ||||
|  |                       node distance=#1, | ||||
|  |                       thick, | ||||
|  |                       base node/.style={circle,draw,minimum size=20pt}, | ||||
|  |                       real node/.style={double,circle,draw,minimum size=20pt}] | ||||
|  |           \BODY | ||||
|  |   \end{tikzpicture} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand*\circled[1]{\tikz[baseline=(char.base)]{ | ||||
|  |             \node[shape=circle,draw,inner sep=1.5pt] (char) {#1};}} | ||||
|  | 
 | ||||
|  | \tikzset{ | ||||
|  |   line/.style={-}, | ||||
|  |   dot/.style={decoration={ | ||||
|  |   markings, | ||||
|  |   mark=at position #1 with {\draw circle (2pt);}},postaction={decorate}}, | ||||
|  |   fulldot/.style={decoration={ | ||||
|  |   markings, | ||||
|  |   mark=at position #1 with {\fill circle (2pt);}},postaction={decorate}}, | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newenvironment{scprooftree}[1]% | ||||
|  |   {\gdef\scalefactor{#1}\begin{center}\proofSkipAmount \leavevmode}% | ||||
|  |   {\scalebox{\scalefactor}{\DisplayProof}\proofSkipAmount \end{center} } | ||||
|  | 
 | ||||
|  | \tikzset{ | ||||
|  |   line/.style={-}, | ||||
|  |   dot/.style={decoration={ | ||||
|  |   markings, | ||||
|  |   mark=at position #1 with {\draw circle (2pt);}},postaction={decorate}}, | ||||
|  |   fulldot/.style={decoration={ | ||||
|  |   markings, | ||||
|  |   mark=at position #1 with {\fill circle (2pt);}},postaction={decorate}}, | ||||
|  | } | ||||
|  | 
 | ||||
|  | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||||
|  | % BDD helper | ||||
|  | 
 | ||||
|  | \newenvironment{cofactors} | ||||
|  |   {\begin{tabbing}} | ||||
|  |   {\end{tabbing}} | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | \NewEnviron{bdd}[1][3em]{% | ||||
|  |   \begin{tikzpicture}[node distance=#1, | ||||
|  |                       base node/.style={circle,draw,minimum size=20pt}, | ||||
|  |                       func node/.style={rectangle,draw,minimum size=10pt}, | ||||
|  |                       cofactor/.style={circle,draw,minimum size=10pt}, | ||||
|  |                       phantom/.style={circle,draw,inner sep=0pt,minimum size=0pt}] | ||||
|  |           \BODY | ||||
|  |   \end{tikzpicture} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\funcEdge}[3][]{ | ||||
|  |   \path[] (#2) edge [#1] (#3); | ||||
|  | } | ||||
|  | \newcommand{\thenEdge}[3][]{ | ||||
|  |   \path[] (#2) edge [#1] (#3); | ||||
|  | } | ||||
|  | \newcommand{\elseEdge}[3][]{ | ||||
|  |   \path[] (#2) edge [#1] node [midway,draw,circle,fill=white,transform shape,inner sep=0pt,minimum size=0.3em] (ref) {} (#3); | ||||
|  | } | ||||
|  | \newcommand{\negatedEdge}[3][]{ | ||||
|  |   \path[] (#2) edge [#1] node [midway,draw,circle,fill=black,transform shape,inner sep=0pt,minimum size=0.3em] (ref) {} (#3); | ||||
|  | } | ||||
|  | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||||
|  | \NewEnviron{egraph}[1][1.5cm]{% | ||||
|  |   \begin{tikzpicture}[-, | ||||
|  |                       >=stealth', | ||||
|  |                       shorten >=1pt, | ||||
|  |                       auto, | ||||
|  |                       node distance=#1, | ||||
|  |                       thick, | ||||
|  |                       base node/.style={circle,draw,minimum size=20pt}] | ||||
|  |           \BODY | ||||
|  |   \end{tikzpicture} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\chord}[2]{ | ||||
|  |   \draw[dashed,red] (#1) -- (#2); | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\egraphFuncConstraint}[3]{% | ||||
|  |   &((e_{#1=#2}~\land~e_{#2=#3})~\imp~e_{#1=#3})~\land\\ | ||||
|  |   &((e_{#1=#2}~\land~e_{#1=#3})~\imp~e_{#2=#3})~\land\\ | ||||
|  |   &((e_{#1=#3}~\land~e_{#2=#3})~\imp~e_{#1=#2}) | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\eq}[2]{ | ||||
|  |   e_{#1=#2} | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand{\ackermannFuncConstraint}[3]{% | ||||
|  |   (#2=#3~\imp~#1_{#2}=#1_{#3}) | ||||
|  | } | ||||
| @ -0,0 +1,31 @@ | |||||
|  | \usepackage[a4paper,margin=3cm]{geometry} | ||||
|  | \usepackage[hide]{cloze} | ||||
|  | \usepackage{a4wide} | ||||
|  | \usepackage{amsmath} | ||||
|  | \usepackage{amssymb} | ||||
|  | \usepackage{booktabs} | ||||
|  | \usepackage{bussproofs} | ||||
|  | \usepackage{enumerate} | ||||
|  | \usepackage{epsfig} | ||||
|  | \usepackage{fancyhdr} | ||||
|  | \usepackage{fmtcount} | ||||
|  | \usepackage{forloop} | ||||
|  | \usepackage{hyperref} | ||||
|  | \usepackage{ifthen} | ||||
|  | \usepackage{lastpage} | ||||
|  | \usepackage{logicproof} | ||||
|  | \usepackage{mathtools} | ||||
|  | \usepackage{mdwlist} | ||||
|  | \usepackage{tikz} | ||||
|  | \usetikzlibrary{arrows,shapes.gates.logic.US,shapes.gates.logic.IEC,calc,decorations.markings} | ||||
|  | \usepackage{forest} | ||||
|  | \usepackage{pifont}  % cmark, xmark for DPLL | ||||
|  | \usepackage{makecell}% beautiful alignment in table cells | ||||
|  | \usepackage{tikz} | ||||
|  | \usetikzlibrary{fit} | ||||
|  | \usetikzlibrary{positioning} | ||||
|  | \usetikzlibrary{calc} | ||||
|  | \usepackage{environ} | ||||
|  | %\usepackage{util/boxproof} | ||||
|  | 
 | ||||
|  | \usepackage{minted} | ||||
| @ -0,0 +1,58 @@ | |||||
|  | \newcommand{\prac}{{\color{red}[Practicals]} } | ||||
|  | \newcommand{\lect}{{\color{blue}[Lecture]} } | ||||
|  | \newcommand{\self}{{\color{teal}[Self-Assessment]} } | ||||
|  | \newcommand{\points}[1]{{\color{red}[#1 Points]}} | ||||
|  | \newcommand{\point}[1]{{\color{red}[#1 Point]}} | ||||
|  | 
 | ||||
|  | \newcommand{\setsectionnum}[1]{% | ||||
|  |   \unless\iftitle% | ||||
|  |     \setcounter{section}{#1}% | ||||
|  |   \fi% | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand\solution[2]{% | ||||
|  |   \def\FILENAME{#1}% | ||||
|  |   \def\SPACING{#2}% | ||||
|  |   \input{solution_boilerplate}% | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand\question[3]{% | ||||
|  |   \def\FILENAME{#1}% | ||||
|  |   \input{\FILENAME}% | ||||
|  |   \solution{#2}{#3}% | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand\mcquestion[2]{% | ||||
|  |   \def\QUESTION{#1}% | ||||
|  |   \def\SOLUTION{#2}% | ||||
|  |   \ifsolution | ||||
|  |     \input{\SOLUTION} | ||||
|  |   \else | ||||
|  |     \input{\QUESTION} | ||||
|  |   \fi | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand\dpllquestion[2]{% | ||||
|  |   \def\QUESTION{#1}% | ||||
|  |   \def\SOLUTION{#2}% | ||||
|  |   \ifsolution | ||||
|  |     \input{\SOLUTION} | ||||
|  |   \else | ||||
|  |     \input{\QUESTION} | ||||
|  |   \fi | ||||
|  | } | ||||
|  | 
 | ||||
|  | \newcommand*\widefbox[1]{% | ||||
|  |   \def\TOPBOTMARGIN{.5} | ||||
|  |   \def\LEFTMARGIN{0.5ex} | ||||
|  |   \def\SOLUTIONTEXT{#1} | ||||
|  |   \fbox{\parbox{% | ||||
|  |     \dimexpr\textwidth-11\fboxsep-4\fboxrule\relax}{ | ||||
|  |     \vspace{\TOPBOTMARGIN\baselineskip}\hspace{\LEFTMARGIN}\SOLUTIONTEXT\vspace{\TOPBOTMARGIN\baselineskip}} | ||||
|  |   } | ||||
|  | } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | \newenvironment{pythonSourceCode} | ||||
|  |   {\VerbatimEnvironment\begin{minted}[mathescape, linenos, numbersep=5pt, gobble=2, frame=lines, framesep=2mm]{python}} | ||||
|  |   {\end{minted}} | ||||
| @ -0,0 +1,35 @@ | |||||
|  | if test -t 1; then | ||||
|  |   if [ $(command -v tput) ]; then | ||||
|  |     ncolors=$(tput colors) | ||||
|  |     if test -n "$ncolors" && test $ncolors -ge 8; then | ||||
|  |       bold="$(tput bold)" | ||||
|  |       underline="$(tput smul)" | ||||
|  |       standout="$(tput smso)" | ||||
|  |       normal="$(tput sgr0)" | ||||
|  |       black="$(tput setaf 0)" | ||||
|  |       red="$(tput setaf 1)" | ||||
|  |       green="$(tput setaf 2)" | ||||
|  |       yellow="$(tput setaf 3)" | ||||
|  |       blue="$(tput setaf 4)" | ||||
|  |       magenta="$(tput setaf 5)" | ||||
|  |       cyan="$(tput setaf 6)" | ||||
|  |       white="$(tput setaf 7)" | ||||
|  |     fi | ||||
|  |   fi | ||||
|  | fi | ||||
|  | 
 | ||||
|  | info() { | ||||
|  |   printf "${green}[INFO   ]${normal}  $1\n" | ||||
|  | } | ||||
|  | 
 | ||||
|  | warning() { | ||||
|  |   printf "${red}[WARNING]${normal}  $1\n" | ||||
|  | } | ||||
|  | 
 | ||||
|  | error() { | ||||
|  |   printf "${standout}${red}[ERROR  ]${normal}  $1\n" | ||||
|  | } | ||||
|  | 
 | ||||
|  | indent() { | ||||
|  |   printf "           $1\n" | ||||
|  | } | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue