Commit 511f26a4 by Ralf Jung

### Add Dave's proof macros

parent 2c1c1ab8
 ../locallabel.sty \ No newline at end of file
 ... ... @@ -82,7 +82,7 @@ action on morphisms). \begin{array}[t]{rcl} % \protStatus &::=& \enabled \ALT \disabled \0.4em] \textdom{Res} &\eqdef& \{\, \res = (\pres, \ghostRes) \mid \{\, \rs = (\pres, \ghostRes) \mid \pres \in \textdom{State} \uplus \{\munit\} \land \ghostRes \in \mcarp{\monoid} \,\} \\[0.5em] (\pres, \ghostRes) \rsplit (\pres', \ghostRes') &\eqdef& ... ... @@ -92,17 +92,17 @@ action on morphisms). \end{cases} \\[0.5em] % \res \leq \res' & \eqdef & \Exists \res''. \res' = \res \rsplit \res''\\[1em] \rs \leq \rs' & \eqdef & \Exists \rs''. \rs' = \rs \rsplit \rs''\\[1em] % \UPred(\textdom{Res}) &\eqdef& \{\, p \subseteq \mathbb{N} \times \textdom{Res} \mid \All (k,\res) \in p. \All (k,\rs) \in p. \All j\leq k. \All \res' \geq \res. (j,\res')\in p \,\}\\[0.5em] \All \rs' \geq \rs. (j,\rs')\in p \,\}\\[0.5em] \restr{p}{k} &\eqdef& \{\, (j, \res) \in p \mid j < k \,\}\\[0.5em] \{\, (j, \rs) \in p \mid j < k \,\}\\[0.5em] p \nequiv{n} q & \eqdef & \restr{p}{n} = \restr{q}{n}\\[1em] % \textdom{PreProp} & \cong & ... ... @@ -187,7 +187,7 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land %\typedsection{Validity}{valid : \pset{\textdom{Prop}} \in Sets} % %\begin{align*} %valid(p) &\iff \All n \in \mathbb{N}. \All \res \in \textdom{Res}. \All W \in \textdom{World}. (n, \res) \in p(W) %valid(p) &\iff \All n \in \mathbb{N}. \All \rs \in \textdom{Res}. \All W \in \textdom{World}. (n, \rs) \in p(W) %\end{align*} \typedsection{Later modality}{\later : \textdom{Prop} \to \textdom{Prop} \in {\cal U}} ... ... @@ -213,7 +213,7 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land %\begin{align*} %&\forall p, q \in \textdom{Prop}.~\\ %&\qquad % (\forall n \in \mathbb{N}.~\forall \res \in \textdom{Res}.~\forall W \in \textdom{World}.~(n, \res) \in p(W) \Rightarrow (n, \res) \in q(W)) \Leftrightarrow~valid(\always{(p \Rightarrow q)}) % (\forall n \in \mathbb{N}.~\forall \rs \in \textdom{Res}.~\forall W \in \textdom{World}.~(n, \rs) \in p(W) \Rightarrow (n, \rs) \in q(W)) \Leftrightarrow~valid(\always{(p \Rightarrow q)}) %\end{align*} %\end{lem} ... ... @@ -232,11 +232,11 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \textdom{World} \to \psetdown{\mathbb{N}} \in {\cal U}} \ralf{Make this Dave-compatible: Explicitly compose all the things in s} \begin{align*} \fullSat{\state}{\mask}{\res}{W} &= \fullSat{\state}{\mask}{\rs}{W} &= \begin{aligned}[t] \{\, n + 1 \in \mathbb{N} \mid &\Exists \resB:\mathbb{N} \fpfn \textdom{Res}. (\res \rsplit \resB).\pres = \state \land{}\\ &\quad \All \iota \in \dom(W). \iota \in \dom(W) \leftrightarrow \iota \in \dom(\resB) \land {}\\ &\quad\quad \iota \in \mask \ra (n, \resB(\iota)) \in \wIso^{-1}(W(\iota))(W) \,\} \cup \{ 0 \} \{\, n + 1 \in \mathbb{N} \mid &\Exists \rsB:\mathbb{N} \fpfn \textdom{Res}. (\rs \rsplit \rsB).\pres = \state \land{}\\ &\quad \All \iota \in \dom(W). \iota \in \dom(W) \leftrightarrow \iota \in \dom(\rsB) \land {}\\ &\quad\quad \iota \in \mask \ra (n, \rsB(\iota)) \in \wIso^{-1}(W(\iota))(W) \,\} \cup \{ 0 \} \end{aligned} \end{align*} \begin{lem}\label{lem:fullsat-nonexpansive} ... ... @@ -248,9 +248,9 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \MoveEqLeft \All \state \in \Delta(\textdom{State}). \All \mask_1, \mask_2 \in \Delta(\pset{\mathbb{N}}). \All \res, \resB \in \Delta(\textdom{Res}). \All \rs, \rsB \in \Delta(\textdom{Res}). \All W \in \textdom{World}. \\& \mask_1 \subseteq \mask_2 \implies (\fullSat{\state}{\mask_2}{\res}{W}) \subseteq (\fullSat{\state}{\mask_1}{\res}{W}) \mask_1 \subseteq \mask_2 \implies (\fullSat{\state}{\mask_2}{\rs}{W}) \subseteq (\fullSat{\state}{\mask_1}{\rs}{W}) \end{align*} \end{lem} ... ... @@ -293,11 +293,11 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \begin{align*} \mathit{vs}_{\mask_1}^{\mask_2}(q) &= \Lam W. \begin{aligned}[t] \{\, (n, \res) &\mid \All W_F \geq W. \All \res_F, \mask_F, \state. \All k \leq n.\\ \{\, (n, \rs) &\mid \All W_F \geq W. \All \rs_F, \mask_F, \state. \All k \leq n.\\ &\qquad k \in (\fullSat{\state}{\mask_1 \cup \mask_F}{\res \rsplit \res_F}{W_F}) \land k > 0 \land \mask_F \sep (\mask_1 \cup \mask_2) \implies{} \\ k \in (\fullSat{\state}{\mask_1 \cup \mask_F}{\rs \rsplit \rs_F}{W_F}) \land k > 0 \land \mask_F \sep (\mask_1 \cup \mask_2) \implies{} \\ &\qquad \Exists W' \geq W_F. \Exists \res'. k \in (\fullSat{\state}{\mask_2 \cup \mask_F}{\res' \rsplit \res_F}{W'}) \land (k, \res') \in q(W') \Exists W' \geq W_F. \Exists \rs'. k \in (\fullSat{\state}{\mask_2 \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land (k, \rs') \in q(W') \,\} \end{aligned} \end{align*} ... ... @@ -338,10 +338,10 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land % \All \iota \in \mathbb{N}. % \All p \in \textdom{Prop}. % \All W \in \textdom{World}. % \All \res \in \textdom{Res}. % \All \rs \in \textdom{Res}. % \All n \in \mathbb{N}. \\ %& % (n, \res) \in inv(\iota, p)(W) \implies (n, \res) \in vs_{\{ \iota \}}^{\emptyset}(\later p)(W) % (n, \rs) \in inv(\iota, p)(W) \implies (n, \rs) \in vs_{\{ \iota \}}^{\emptyset}(\later p)(W) %\end{align*} %\end{lem} ... ... @@ -352,10 +352,10 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land % \forall \iota \in \mathbb{N}.~ % \forall p \in \textdom{Prop}.~ % \forall W \in \textdom{World}.~ % \forall \res \in \textdom{Res}.~ % \forall \rs \in \textdom{Res}.~ % \forall n \in \mathbb{N}.~\\ %&\qquad % (n, \res) \in (inv(\iota, p) * \later p)(W) \Rightarrow (n, \res) \in vs^{\{ \iota \}}_{\emptyset}(\top)(W) % (n, \rs) \in (inv(\iota, p) * \later p)(W) \Rightarrow (n, \rs) \in vs^{\{ \iota \}}_{\emptyset}(\top)(W) %\end{align*} %\end{lem} ... ... @@ -392,22 +392,22 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \begin{align*} \mathit{wp}_\mask(\expr, q) &\eqdef \Lam W. \begin{aligned}[t] \{\, (n, \res) &\mid \All W_F \geq W; k \leq n; \res_F; \state; \mask_F \sep \mask. k > 0 \land k \in (\fullSat{\state}{\mask \cup \mask_F}{\res \rsplit \res_F}{W_F}) \implies{}\\ \{\, (n, \rs) &\mid \All W_F \geq W; k \leq n; \rs_F; \state; \mask_F \sep \mask. k > 0 \land k \in (\fullSat{\state}{\mask \cup \mask_F}{\rs \rsplit \rs_F}{W_F}) \implies{}\\ &\qquad (\expr \in \textdom{Val} \implies \Exists W' \geq W_F. \Exists \res'. \\ (\expr \in \textdom{Val} \implies \Exists W' \geq W_F. \Exists \rs'. \\ &\qquad\qquad k \in (\fullSat{\state}{\mask \cup \mask_F}{\res' \rsplit \res_F}{W'}) \land (k, \res') \in q(\expr)(W'))~\land \\ k \in (\fullSat{\state}{\mask \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land (k, \rs') \in q(\expr)(W'))~\land \\ &\qquad (\All\ectx,\expr_0,\expr'_0,\state'. \expr = \ectx[\expr_0] \land \cfg{\state}{\expr_0} \step \cfg{\state'}{\expr'_0} \implies \Exists W' \geq W_F. \Exists \res'. \\ (\All\ectx,\expr_0,\expr'_0,\state'. \expr = \ectx[\expr_0] \land \cfg{\state}{\expr_0} \step \cfg{\state'}{\expr'_0} \implies \Exists W' \geq W_F. \Exists \rs'. \\ &\qquad\qquad k - 1 \in (\fullSat{\state'}{\mask \cup \mask_F}{\res' \rsplit \res_F}{W'}) \land (k-1, \res') \in wp_\mask(\ectx[\expr_0'], q)(W'))~\land \\ k - 1 \in (\fullSat{\state'}{\mask \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land (k-1, \rs') \in wp_\mask(\ectx[\expr_0'], q)(W'))~\land \\ &\qquad (\All\ectx,\expr'. \expr = \ectx[\fork{\expr'}] \implies \Exists W' \geq W_F. \Exists \res', \res_1', \res_2'. \\ (\All\ectx,\expr'. \expr = \ectx[\fork{\expr'}] \implies \Exists W' \geq W_F. \Exists \rs', \rs_1', \rs_2'. \\ &\qquad\qquad k - 1 \in (\fullSat{\state}{\mask \cup \mask_F}{\res' \rsplit \res_F}{W'}) \land \res' = \res_1' \rsplit \res_2'~\land \\ k - 1 \in (\fullSat{\state}{\mask \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land \rs' = \rs_1' \rsplit \rs_2'~\land \\ &\qquad\qquad (k-1, \res_1') \in \mathit{wp}_\mask(\ectx[\textsf{fRet}], q)(W') \land (k-1, \res_2') \in \mathit{wp}_\top(\expr', \Lam\any. \top)(W')) (k-1, \rs_1') \in \mathit{wp}_\mask(\ectx[\textsf{fRet}], q)(W') \land (k-1, \rs_2') \in \mathit{wp}_\top(\expr', \Lam\any. \top)(W')) \,\} \end{aligned} \end{align*} ... ... @@ -491,9 +491,9 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \semTerm{\vctx \proves \knowInv{\iname}{\prop} : \Prop}_\gamma &= inv(\semTerm{\vctx \proves \iname : \textsort{InvName}}_\gamma, \semTerm{\vctx \proves \prop : \Prop}_\gamma) \\ \semTerm{\vctx \proves \ownGGhost{\melt} : \Prop}_\gamma &= \Lam W. \{\, (n, \res) \mid \res.\ghostRes \geq \semTerm{\vctx \proves \melt : \textsort{Monoid}}_\gamma \,\} \\ \Lam W. \{\, (n, \rs) \mid \rs.\ghostRes \geq \semTerm{\vctx \proves \melt : \textsort{Monoid}}_\gamma \,\} \\ \semTerm{\vctx \proves \ownPhys{\state} : \Prop}_\gamma &= \Lam W. \{\, (n, \res) \mid \res.\pres = \semTerm{\vctx \proves \state : \textsort{State}}_\gamma \,\} \Lam W. \{\, (n, \rs) \mid \rs.\pres = \semTerm{\vctx \proves \state : \textsort{State}}_\gamma \,\} \end{align*} % \begin{align*} ... ... @@ -513,10 +513,10 @@ \rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \MoveEqLeft \forall n \in \mathbb{N}.\; \forall W \in \textdom{World}.\; \forall \res \in \textdom{Res}.\; \forall \rs \in \textdom{Res}.\; \forall \gamma \in \semSort{\vctx},\; \\& \bigl(\All \propB \in \pfctx. (n, \res) \in \semTerm{\vctx \proves \propB : \Prop}_\gamma(W)\bigr) \implies (n, \res) \in \semTerm{\vctx \proves \prop : \Prop}_\gamma(W) \bigl(\All \propB \in \pfctx. (n, \rs) \in \semTerm{\vctx \proves \propB : \Prop}_\gamma(W)\bigr) \implies (n, \rs) \in \semTerm{\vctx \proves \prop : \Prop}_\gamma(W) \end{aligned}
 ../pfsteps.sty \ No newline at end of file
 ../pftools.sty \ No newline at end of file
 % Locallabel % % Copyright (C) 2001, 2002, 2003 Didier Rmy % % Author : Didier Remy % Version : 1.1.1 % Bug Reports : to author % Web Site : http://pauillac.inria.fr/~remy/latex/ % % Locallabel is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2, or (at your option) % any later version. % % Locallabel is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details % (http://pauillac.inria.fr/~remy/license/GPL). % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % File locallabel.sty (LaTeX macros) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Identification \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{locallabel} [2001/23/02 v0.92 Locallabel] %% Preliminary declarations %% Options %% More declarations %% We use two counters: The global counter is incremented at each reset. %% Its value is the group'' of a local. %% The local counter is the last numeric value of a bound label in the %% current group. The value of a label #1 is globally set to %% \csname llb@\the\c@llb@global-#1\endcsname %% The global command \csname llb@\the\c@llb@global-#1*\endcsname is %% use to ensure that a label is only bound once. Usually a label is %% bound and declared at the same time with \llabel. It may also be bound in %% advance, with \lbind, for instance so as to control the numbering. %% Then, another \llabel must be used to declare it in the text. %% If no \lbind has been used before, the \llabel calls \lbind implicitlt. \newcounter{llb@global} \newcounter{llb@local} \newcommand \llb@find [1] {\expandafter \ifx \csname llb@\the\c@llb@global-#1\endcsname \relax \message {*** Local label #1 undefined in this context}% \edef \llb@current {#1??}% \else \edef \llb@current {\csname llb@\the\c@llb@global-#1\endcsname}% \fi} \newcommand \llb@make [1] {\expandafter \ifx \csname llb@\the\c@llb@global-#1\endcsname \relax \stepcounter{llb@local}\relax \expandafter \xdef \csname llb@\the\c@llb@global-#1\endcsname {\the\c@llb@local}% \edef \llb@current {\the\c@llb@local}% \else \expandafter \ifx \csname llb@\the\c@llb@global-#1*\endcsname \relax \message {*** Local label #1 already defined in this countext!}% \edef \llb@current {\csname llb@\the\c@llb@global-#1\endcsname ??}% \else \expandafter \global \expandafter \let \csname llb@\the\c@llb@global-#1*\endcsname \relax \edef \llb@current {\csname llb@\the\c@llb@global-#1\endcsname} \fi \fi } %%% Redefine those macros to change typsetting \newcommand \thelocallabel {\the \c@llb@local} \newcommand \LlabelTypeset [1] {(\textrm {\bfseries #1})} \newcommand \LrefTypeset [1] {(\textrm {#1)}} \newcommand \glabel [1]{\LlabelTypeset{\softtarget {#1}{#1}}} \newcommand \gref [1]{\LrefTypeset{\softlink {#1}{#1}}} %%% To reset all local labels---which just increment a global prefix. \newcommand \locallabelreset[1][0]% {\stepcounter {llb@global}\setcounter {llb@local}{#1}} %%% Make a new local label, typeset it, and bind to the given name \def \llb@relax {\relax} \newcommand {\llabel}[2][\relax]% {\llb@make{#2}% \def \@test {#1}\ifx \@test\llb@relax\else \edef \@currentlabel {\the\c@llb@local}% \def \@test {#1}\ifx \@test\empty \def \@test{#2}\fi \label{\@test}% \fi% \LlabelTypeset {\softtarget{llb@\the\c@llb@global-#2}{\llb@current}}} %%% Retreive the local label of given name and type set it. \newcommand \lref [1] {\llb@find {#1}% \LrefTypeset {\softlink {llb@\the\c@llb@global-#1}{\llb@current}}} %%% Make a new local label and bind it to the given name but do not typeset %%% it. Typesetting may then be done with \llabel non locally. Useful to %%% control the order of numberring. \newcommand \lbind [1] {\llb@make {#1}% \expandafter \global \expandafter \let \csname llb@\the\c@llb@global-#1*\endcsname \empty} \AtBeginDocument {% \@ifundefined{softlink}{\let \softlink \@secondoftwo}{}% \@ifundefined{softtarget}{\let \softtarget \@secondoftwo}{}% }
 %% %% This is file pfsteps.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% pfsteps.dtx (with options: package') %% %% Copyright (C) 2011 by Jesse A. Tov %% %% This file may be distributed and/or modified under the conditions of the %% LaTeX Project Public License, either version 1.2 of this license or (at %% your option) any later version. The latest version of this license is %% in: %% %% http://www.latex-project.org/lppl.txt %% %% and version 1.2 or later is part of all distributions of LaTeX %% version 1999/12/01 or later. %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{pfsteps} [2011/04/04 v0.4 proof tools] \RequirePackage{listproc} \newcommand*\pfsteps@set[3][]{ \expandafter\let\csname #1pfsteps@#2\endcsname#3 } \newcommand*\pfsteps@option[2][\iffalse]{ \pfsteps@set[if]{#2}#1 \pfsteps@set[if]{#2@set}\iffalse \DeclareOption{#2}{ \pfsteps@set[if]{#2}\iftrue \pfsteps@set[if]{#2@set}\iftrue } \DeclareOption{no#2}{ \pfsteps@set[if]{#2}\iffalse \pfsteps@set[if]{#2@set}\iftrue } } \pfsteps@option[\iftrue]{atsign} \pfsteps@option[\iftrue]{hyperref} \pfsteps@option[\iftrue]{loadunicode} \pfsteps@option[\iftrue]{mathpartir} \pfsteps@option{unicode} \ProcessOptions \ifpfsteps@unicode \ifpfsteps@loadunicode \RequirePackage{ucs} \RequirePackage[utf8x]{inputenc} \fi \fi \ifpfsteps@mathpartir \ifpfsteps@mathpartir@set \RequirePackage{mathpartir} \fi \fi \ifpfsteps@hyperref \ifpfsteps@hyperref@set \RequirePackage{hyperref} \fi \fi \newcommand{\pfcounteranchor}[1]{(#1)} \newcommand{\pfcounterref}[1]{(#1)} \newcounter{pfsteps@pfc@global} \newcounter{pfsteps@pfc@local} \newcommand{\resetpfcounter}[1][0] {\stepcounter{pfsteps@pfc@global}\setcounter{pfsteps@pfc@local}{#1}} \newcommand{\thepfcounter} {\the\value{pfsteps@pfc@local}} \newcommand{\thepfsectioncounter} {\the\value{pfsteps@pfc@global}} \newcommand{\steppfcounter}[1][\relax]{% \addtocounter{pfsteps@pfc@local}{1}% \ifx\relax#1\relax\else \pflabel{#1}% \fi } \newcommand{\usepfcounter}[1][\relax]{% \steppfcounter[#1]% \pfsteps@hypertarget{pfc:\thepfsectioncounter:\thepfcounter}{% \pfcounteranchor{\thepfcounter}% }% } \newcommand{\pfsteps@pfc@cs}[1] {\csname\pfsteps@pfc@{\pfsteps@strip#1 \@empty}\endcsname} \newcommand{\pfsteps@pfc@}[1] {pfsteps@pfc@\pfsteps@strip#1 \@empty @\thepfsectioncounter} \def\pfsteps@strip#1 #2{% #1% \ifx#2\@empty\else\expandafter\pfsteps@strip\fi #2} \newcommand{\pflabel}[1] {\expandafter\ifx\csname\pfsteps@pfc@{#1}@thisrun\endcsname\relax \expandafter\xdef\csname\pfsteps@pfc@{#1}\endcsname {\thepfcounter}% \expandafter\gdef\csname\pfsteps@pfc@{#1}@thisrun\endcsname {}% \immediate\write\@auxout{ \noexpand\pfsteps@def@label {#1}{\thepfsectioncounter}{\thepfcounter} }% \else \PackageWarning{pfsteps} {Proof step (#1) already defined in this section}% \fi} \newcommand*{\pfsteps@def@label}[3]{ \expandafter\gdef \csname pfsteps@pfc@#1@#2\endcsname {#3} } \newcommand*{\pfref}[1] {{\ListExprTo {\Compress[\@apply@group\@firstoftwo] {\Sort[\@apply@group\@firstoftwo] {\Map {% {\@ifundefined{\pfsteps@pfc@{##1}} {-1} {\csname\pfsteps@pfc@{##1}\endcsname}}% {\@ifundefined{\pfsteps@pfc@{##1}} {\PackageWarning{pfsteps} {Proof step (##1) not yet defined in this section}% \textbf{?}} {\pfsteps@hyperlink {pfc:\thepfsectioncounter:\pfsteps@pfc@cs{##1}} {\pfsteps@pfc@cs{##1}}}}} {\List{#1}}}}} \pfsteps@pfref@list \let\listitem\pfsteps@pfref@listitem@first \def\@single##1{\@secondoftwo##1}% \def\@range##1##2{\@secondoftwo##1--\@secondoftwo##2}% \pfcounterref{\pfsteps@pfref@list}% }} \newcommand\pfsteps@pfref@listitem@first[1]{% #1\let\listitem\pfsteps@pfref@listitem@rest } \newcommand\pfsteps@pfref@listitem@rest[1]{% , #1\let\listitem\pfsteps@pfref@listitem@rest } \newcommand\pfsteps@hypertarget[2]{#2} \newcommand\pfsteps@hyperlink[2]{#2} \ifpfsteps@hyperref \AtBeginDocument{ \ifcsname hypertarget\endcsname \let\pfsteps@hypertarget=\hypertarget \let\pfsteps@hyperlink=\hyperlink \fi } \fi \newlength{\proofleftskip} \newlength{\proofrightwidth} \setlength{\proofleftskip}{2pc} \setlength{\proofrightwidth}{0.3\linewidth} \newenvironment{pfsteps} {\begin{pfsteps@with}$} {\end{pfsteps@with}} \newenvironment{pfsteps*} {\begin{pfsteps@with}{}} {\end{pfsteps@with}} \newenvironment{pfsteps@with}[1] { \leavevmode\begingroup \setlength{\parskip}{0pt}% \trivlist \raggedright \setlength{\leftskip}{1.5\proofleftskip} \let\pfstepsSavedItem\item \let\pfstepsSavedLabel\label \let\pfstepsSavedQedhere\qedhere \newcommand\AND[1][and]{\mathrel{\mbox{##1}}} \newcommand\BY[2][by] {\pfsteps@unmath{\penalty-1 \mbox{~}\hfill% \begin{minipage}[t]{\proofrightwidth}% \raggedright##1 ##2% \end{minipage}}} \def\pfstepsItem{% \pfsteps@stopmath \pfstepsSavedItem\mbox{}\kern-1.25\proofleftskip \makebox[\proofleftskip]{\hfill\usepfcounter}\kern0.25\proofleftskip #1\relax} \def\pfstepsQedhere{\pfsteps@unmath{\pfstepsSavedQedhere}} \let\item\pfstepsItem \let\label\pflabel \let\qedhere\pfstepsQedhere \ifpfsteps@atsign \pfsteps@setup@atsign \fi \relax } { \pfsteps@stopmath \endtrivlist\endgroup \noindent\ignorespaces } \newcommand\pfsteps@stopmath{\ifmmode$\fi} \newcommand\pfsteps@unmath[1]{\ifmmode$\relax#1\relax$\else\relax#1\relax\fi} { \def\atsign{@} \catcode\@=\active\relax \expandafter\gdef\csname pfsteps\atsign setup\atsign atsign\endcsname{ \catcode\@=\active\relax \gdef@##1 {\pflabel{##1}} } } \newcommand\pfstepsmathmode{\def\pfsteps@unicode@arg{$}} \newcommand\pfstepstextmode{\def\pfsteps@unicode@arg{\relax}} \newcommand\pfstepsSetupUnicode[3]{ \DeclareUnicodeCharacter{#1}{\pfsteps@unicode@startpfsteps} \DeclareUnicodeCharacter{#3}{\pfsteps@unicode@item} \def\pfsteps@unicode@startpfsteps {\begingroup \ifpfsteps@atsign\catcode\@=\active\relax\fi \pfsteps@unicode@startpfsteps@kont} \def\pfsteps@unicode@startpfsteps@kont##1#2 {\begin{pfsteps@with}\pfsteps@unicode@arg\item##1\end{pfsteps@with}% \endgroup} \def\pfsteps@unicode@item{\item} \pfstepsmathmode } \ifpfsteps@unicode \pfstepsSetupUnicode{171}{»}{8226} % « » • \fi \newcommand\byCasesEveryCase{\resetpfcounter} \newcommand\byCasesEveryOtherwise{\byCasesEveryCase} \providecommand{\byCasesOtherwiseTemplate}{\textbf{Otherwise:}} \providecommand{\byCasesCaseTemplate}[1]{\textbf{Case\ \ \fbox{#1}}} \providecommand{\byCasesWhereTemplate}{\textbf{where}} \newenvironment{byCases} {% \begingroup \let\case\byCases@case \let\otherwise\byCases@otherwise \ifpfsteps@mathpartir \ifcsname inferrule\endcsname\let\icase\byCases@icase\fi \fi \list{}{\labelwidth\z@ \itemindent-\leftmargin \let\makelabel\byCases@label}% } {% \endlist \endgroup } \newcommand*\byCases@label[1]{% \hspace\labelsep \normalfont~\strut \expandafter\ifx#1\relax\relax \byCasesOtherwiseTemplate \else \byCasesCaseTemplate{\normalfont${#1}}% \fi } \newcommand*\byCases@case[2][\byCasesEveryCase] {\item[{\let\AND\byCases@and #2}]\strut#1\pfsteps@reallynopagebreak} \newcommand*\byCases@otherwise[1][\byCasesEveryOtherwise] {\item[]\strut#1\pfsteps@reallynopagebreak} \newcommand\pfsteps@reallynopagebreak{\par\nopagebreak\@nobreaktrue} \newcommand\byCases@and[1][and]{\mathrel{\mbox{\textbf{#1}}}} \newcommand*\byCases@icase{ \@ifnextchar* \byCases@icase@star \byCases@icase@nostar } \def\byCases@icase@nostar{\byCases@icase@i{\inferrule}} \def\byCases@icase@star*{\byCases@icase@i{\inferrule*}} \newcommand*\byCases@icase@i[1]{ \@ifnextchar [{\byCases@icase@opts{#1}}{\byCases@icase@noopts{#1}} } \def\byCases@icase@opts#1[#2]{\byCases@icase@ii{#1[#2]}} \def\byCases@icase@noopts#1{\byCases@icase@ii{#1}} \newcommand*\byCases@icase@ii[3]{ \@ifnextchar [ {\byCases@icase@where{#1}{#2}{#3}} {\byCases@icase@nowhere{#1}{#2}{#3}} } \def\byCases@icase@where#1#2#3[#4]{ \case{#1{#2}{#3}\AND[\byCasesWhereTemplate]#4}% } \def\byCases@icase@nowhere#1#2#3{\case{#1{#2}{#3}}} \endinput %% %% End of file pfsteps.sty'. docs/pftools.sty 0 → 100644  \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{pftools} \RequirePackage{locallabel} \RequirePackage{Tabbing} % Avoid the standard tabbing environment. Its \< conflicts with the semantic package. \RequirePackage{xparse} \RequirePackage{xcolor} \RequirePackage{locallabel} %% Biimplication inference rules % \biimp above below % The double lines obtained by the simpler % "\mprset{fraction={===}}" overlap the conclusion (e.g., the % mask E_M in an atomic triple). \newcommand*{\biimp}[2]{% \hbox{% \ooalign{%\genfrac{}{}{1.6pt}1{#1}{#2}$\cr%$\color{white}\genfrac{}{}{0.8pt}1{\phantom{#1}}{\phantom{#2}}$% }% }% } \newcommand{\BIIMP}{\mprset{myfraction=\biimp}} %% inferH is infer with hyperlinked names. % \savelabel lab text: Arrange for \ref{lab} to print text and to link to the current spot. \newcommand*{\savelabel}[2]{% % Think @currentlabel : text ref. \edef\@currentlabel{#2}% Save text \phantomsection% Correct hyper reference link \label{#1}% Print text and store name↦text. } % \textlabel label text: Print and label text. \newcommand*{\textlabel}[2]{{#2}\savelabel{#1}{#2}} % \rulenamestyle visible \newcommand*{\rulenamestyle}[1]{{\TirNameStyle{#1}}} % From mathpartir.sty. % \ruleref [discharged] lab \def\optionaldischarge#1{% \if\relax\detokenize{#1}\relax\else\ensuremath{^{#1}}\fi} \newcommand*{\ruleref}[2][]{\textmd{\rulenamestyle{\ref{#2}}}\optionaldischarge{#1}} \newcommand*{\fakeruleref}[2][]{\rulenamestyle{#2}\optionaldischarge{#1}} % \rulename label \newcommand*{\rulename}[1]{\rulenamestyle{\textlabel{#1}{#1}}} % \inferhref name lab premise conclusion \newcommand*{\inferhref}[4]{% \inferrule*[lab=\textlabel{#2}{#1}]{#3}{#4}% } % \infernH name premise conclusion, if name a valid label. \newcommand*{\inferH}[3]{\inferhref{#1}{#1}{#2}{#3}} \newcommand*{\axiom}[1]{\infer{}{#1}} \newcommand*{\axiomhref}[3]{\inferhref{#1}{#2}{}{#3}} \newcommand*{\axiomH}[2]{\inferH{#1}{}{#2}} \newcommand*{\inferhrefB}[4]{{\BIIMP\inferhref{#1}{#2}{#3}{#4}}} \newcommand*{\inferHB}[3]{{\BIIMP\inferH{#1}{#2}{#3}}} \newcommand*{\taghref}[2]{\label{#2}\tag{\rulenamestyle{#1}}} \newcommand*{\tagH}[1]{\taghref{#1}{#1}} % The sanity checks in \lbind and \llabel % don't work properly in amsmath environments % which perhaps lay out their contents more % than once. Use \lbind in such cases. % Sigh. \newcommand*{\tagL}[1]{\lbind{#1}\tag*{\llabel{#1}}} \newcommand*\ind[1][\quad]{#1\TAB=\TAB+} \newcommand*\unind{\TAB-} \newcommand\IND[1][\quad]{\\*\ind[#1]} \newcommand\UNIND{\unind \\} % Attribution: http://tex.stackexchange.com/questions/119473/tabbing-and-line-wrapping \newlength\pf@width \newcommand*{\CMT}[1]{% \setlength\pf@width{\linewidth}% \addtolength\pf@width{\@totalleftmargin}% \addtolength\pf@width{-\dimen\@curtab}% \parbox[t]{\pf@width}{\nobelowdisplayskip{#1}\ifhmode\strut\fi}} \colorlet{rescolor}{rgb:red,0;green,30;blue,55} \colorlet{ctxcolor}{black} \colorlet{codecolor}{rgb:red,76;green,177;blue,36} \newcommand*\res[1]{{\color{rescolor}\ensuremath{#1}}} %When \left\{ … \right\} looks ugly, remember Dave says you want \bracket. \NewDocumentCommand{\RES}{s m O{}}{%$\displaystyle{{\left\{\res{% \IfBooleanTF{#1}{\begin{inbox}[l]#2\end{inbox}}{#2}% }\right\}}_{#3}}$} \NewDocumentCommand{\ARES}{m O{}}{%${\displaystyle{\bracket\langle\rangle{\color{rescolor}{#1}}}_{#2}}$} \newcommand*{\CODE}[1]{%${\displaystyle{\color{codecolor}#1}}$} \newcommand*{\VARS}[1]{% Vars:${\color{ctxcolor}\displaystyle{#1}}$} \newcommand*{\CTX}[1]{% Context:${\color{ctxcolor}\displaystyle{#1}}$} \newcommand*{\GOAL}[1]{% Goal:${\displaystyle{#1}}$} \newcommand*{\SUFF}[1]{% Suff:${\displaystyle{#1}}$} \newcommand*{\PFHAVE}[1]{% Have:${\displaystyle{#1}}} \let\pf@origqedhere\qedhere \def\pf@setup{% % A version of \qedhere that accounts for tabbing. \def\qedhere{\TAB\pf@origqedhere}% } \newcommand*{\TAGL}[1]{\TAB\llabel{#1}} % The starred version lacks leading and trailing vertical space. \newenvironment{proofoutline*} {\partopsep=\z@skip \topsep=\z@skip% avoid initial space \parskip\z@skip% avoid trailing space \pf@setup\par\begingroup\Tabbing\ignorespaces} {\endTabbing\endgroup\unskip\ignorespacesafterend} \newenvironment{proofoutline} {\pf@setup\par\begingroup\Tabbing\ignorespaces} {\endTabbing\endgroup\ignorespacesafterend} \endinput  ... ... @@ -27,56 +27,6 @@ %\setlength{\dashlinegap}{1pt} %\setlength{\dashlinedash}{3pt} % \biimp above below % The double lines obtained by the simpler % "\mprset{fraction={===}}" overlap the conclusion (e.g., the % mask E_M in an atomic triple). \newcommand*{\biimp}[2]{% \hbox{% \ooalign{%\genfrac{}{}{1.6pt}1{#1}{#2}\$\cr%