diff options
Diffstat (limited to 'macros/latex/contrib/stex/source/stex/stex-proofs.dtx')
-rw-r--r-- | macros/latex/contrib/stex/source/stex/stex-proofs.dtx | 403 |
1 files changed, 53 insertions, 350 deletions
diff --git a/macros/latex/contrib/stex/source/stex/stex-proofs.dtx b/macros/latex/contrib/stex/source/stex/stex-proofs.dtx index c4bf4e48fb..c2cdb3b54e 100644 --- a/macros/latex/contrib/stex/source/stex/stex-proofs.dtx +++ b/macros/latex/contrib/stex/source/stex/stex-proofs.dtx @@ -1,16 +1,16 @@ % \iffalse meta-comment % An Infrastructure for Structural Markup for Proofs % Copyright (c) 2019 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% +% this file is released under the +% LaTeX Project Public License (LPPL) +% % The original of this file is in the public repository at % http://github.com/sLaTeX/sTeX/ -% \fi -% -% \iffalse +% +% TODO update copyright +% %<*driver> -\def\bibfolder{../../lib/bib} +\def\bibfolder#1{../../lib/bib/#1} \input{../../doc/stex-docheader} \begin{document} @@ -18,305 +18,46 @@ \end{document} %</driver> % \fi -% -% \iffalse\CheckSum{341}\fi % -% ^^A \changes{v0.9}{2005/06/14}{First Version with Documentation} -% % \GetFileInfo{sproof.sty} % -% \title{\sTeX-Proofs: Structural Markup for Proofs\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase, Dennis Müller\\ -% FAU Erlangen-N\"urnberg\\ -% \url{http://kwarc.info/kohlhase}} +% \title{\sTeX-Proofs: Structural Markup for Proofs\thanks{Version {\fileversion} (last revised {\filedate})} +% } +% +% \author{Michael Kohlhase, Dennis Müller\\ +% FAU Erlangen-Nürnberg\\ +% \url{http://kwarc.info/} +%c } +% % \maketitle % %\ifinfulldoc\else -% This is the documentation for the \pkg{stex-proofs} package. -% For a more high-level introduction, -% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the -% \href{\basedocurl/stex.pdf}{full \sTeX documentation}. +% \begin{abstract} +% This is the documentation for the \pkg{stex-proofs} package. +% +% The |sproof| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} that +% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document +% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical +% knowledge management (MKM). +% +% The \pkg{stex-proofs} package supplies macros and environment that allow to annotate the +% structure of mathematical proofs in {\stex} files. This structure can be used by MKM +% systems for added-value services, either directly from the \sTeX sources, or after +% translation. +% +% For a more high-level introduction, see \href{\basedocurl/manual.pdf}{the \sTeX Manual} +% or the \href{\basedocurl/stex.pdf}{full \sTeX documentation}. +% \end{abstract} +% +% \tableofcontents % % \input{../../doc/packages/stex-proofs} % \fi % % \begin{documentation} -% -% The |sproof| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% This package supplies macros and environment that allow to annotate the structure of -% mathematical proofs in {\stex} files. This structure can be used by MKM systems for -% added-value services, either directly from the \sTeX sources, or after translation. -% -% \newpage\tableofcontents\newpage -% -%\section{Introduction}\label{sec:sproof} -% -% The |sproof| ({\twintoo{semantic}{proofs}}) package supplies macros and environment that -% allow to annotate the structure of mathematical proofs in {\stex} files. This structure -% can be used by MKM systems for added-value services, either directly from the \sTeX -% sources, or after translation. Even though it is part of the {\stex} collection, it can -% be used independently, like it's sister package |statements|. -% -% {\stex} is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents -% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} into -% a document format for mathematical knowledge management (MKM). -% -% \begin{exfig}\scriptsize -% \begin{verbatim} -% \begin{sproof}[id=simple-proof] -% {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$} -% \begin{spfcases}{For the induction we have to consider the following cases:} -% \begin{spfcase}{$n=1$} -% \begin{spfstep}[type=inline] then we compute $1=1^2$\end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n=2$} -% \begin{sproofcomment}[type=inline] -% This case is not really necessary, but we do it for the -% fun of it (and to get more intuition). -% \end{sproofcomment} -% \begin{spfstep}[type=inline] We compute $1+3=2^{2}=4$.\end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n>1$} -% \begin{spfstep}[type=assumption,id=ind-hyp] -% Now, we assume that the assertion is true for a certain $k\geq 1$, -% i.e. $\sum_{i=1}^k{(2i-1)}=k^{2}$. -% \end{spfstep} -% \begin{sproofcomment} -% We have to show that we can derive the assertion for $n=k+1$ from -% this assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$. -% \end{sproofcomment} -% \begin{spfstep} -% We obtain $\sum_{i=1}^{k+1}{2i-1}=\sum_{i=1}^k{2i-1}+2(k+1)-1$ -% \begin{justification}[method=arith:split-sum] -% by splitting the sum. -% \end{justification} -% \end{spfstep} -% \begin{spfstep} -% Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$ -% \begin{justification}[method=fertilize] -% by inductive hypothesis. -% \end{justification} -% \end{spfstep} -% \begin{spfstep}[type=conclusion] -% We can \begin{justification}[method=simplify]simplify\end{justification} -% the right-hand side to ${k+1}^2$, which proves the assertion. -% \end{spfstep} -% \end{spfcase} -% \begin{spfstep}[type=conclusion] -% We have considered all the cases, so we have proven the assertion. -% \end{spfstep} -% \end{spfcases} -% \end{sproof} -% \end{verbatim} -% \vspace*{-.5cm} -% \caption{A very explicit proof, marked up semantically}\label{fig:proof:src} -% \end{exfig} -% -% We will go over the general intuition by way of our running example (see -% Figure~\ref{fig:proof:src} for the source and Figure~\ref{fig:proof:result} for the -% formatted result).\ednote{talk a bit more about proofs and their structure,... maybe -% copy from OMDoc spec. } -% -% \section{The User Interface} -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |sproof| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If -% this is set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys} for details -% and customization options). -% -% \subsection{Proofs and Proof steps} -% -% \DescribeEnv{sproof} The |proof| environment is the main container for proofs. It takes -% an optional |KeyVal| argument that allows to specify the |id| (identifier) and |for| -% (for which assertion is this a proof) keys. The regular argument of the |proof| -% environment contains an introductory comment, that may be used to announce the proof -% style. The |proof| environment contains a sequence of |\step|, |proofcomment|, and -% |pfcases| environments that are used to markup the proof steps. The |proof| environment -% has a variant |Proof|, which does not use the proof end marker. This is convenient, if a -% proof ends in a case distinction, which brings it's own proof end marker with it. -% \DescribeEnv{sProof} The |Proof| environment is a variant of |proof| that does not mark -% the end of a proof with a little box; presumably, since one of the subproofs already has -% one and then a box supplied by the outer proof would generate an otherwise empty line. -% \DescribeMacro{\spfidea} The |\spfidea| macro allows to give a one-paragraph -% description of the proof idea. -% -% For one-line proof sketches, we use the \DescribeMacro{spfsketch}|\spfsketch| macro, -% which takes the |KeyVal| argument as |sproof| and another one: a natural language text -% that sketches the proof. -% -% \DescribeEnv{spfstep} Regular proof steps are marked up with the |step| environment, which -% takes an optional |KeyVal| argument for annotations. A proof step usually contains a -% local assertion (the text of the step) together with some kind of evidence that this can -% be derived from already established assertions. -% -% Note that both |\premise| and |\justarg| can be used with an empty second argument to -% mark up premises and arguments that are not explicitly mentioned in the text. -% -% \begin{exfig} -% \begin{sproof}[id=simple-proof] -% {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$} -% \begin{spfcases}{For the induction we have to consider the following cases:} -% \begin{spfcase}{$n=1$} -% \begin{spfstep}[type=inline] then we compute $1=1^2$\end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n=2$} -% \begin{sproofcomment}[type=inline] -% This case is not really necessary, but we do it for the fun -% of it (and to get more intuition). -% \end{sproofcomment} -% \begin{spfstep}[type=inline] -% We compute $1+3=2^{2}=4$ -% \end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n>1$} -% \begin{spfstep}[type=hypothesis,id=ind-hyp] -% Now, we assume that the assertion is true for a certain $k\geq 1$, i.e. -% $\sum_{i=1}^k{(2i-1)}=k^{2}$. -% \end{spfstep} -% \begin{sproofcomment} -% We have to show that we can derive the assertion for $n=k+1$ from this -% assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$. -% \end{sproofcomment} -% \begin{spfstep}[id=splitit] -% We obtain $\sum_{i=1}^{k+1}{(2i-1)}=\sum_{i=1}^k{(2i-1)}+2(k+1)-1$ -% \begin{justification}[method=arith:split-sum] -% by splitting the sum -% \end{justification} -% \end{spfstep} -% \begin{spfstep}[id=byindhyp] -% Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$ -% \begin{justification}[method=fertilize] -% by \premise[ind-hyp]{inductive hypothesis}. -% \end{justification} -% \end{spfstep} -% \begin{spfstep}[type=conclusion] -% We can \begin{justification}[method=simplify-eq] -% simplify the {\justarg[rhs]{right-hand side}} -% \end{justification} to $(k+1)^2$, which proves the assertion. -% \end{spfstep} -% \end{spfcase} -% \begin{spfstep}[type=conclusion] -% We have considered all the cases, so we have proven the assertion. -% \end{spfstep} -% \end{spfcases} -% \end{sproof} -% \caption{The formatted result of the proof in Figure~\ref{fig:proof:src}}\label{fig:proof:result} -% \end{exfig} -% -% \subsection{Justifications} +% \changes{v0.9}{2022/02/14}{Moved over from the \pkg{sproofs} package} % -% \DescribeEnv{justification} This evidence is marked up with the |justification| -% environment in the |sproof| package. This environment totally invisible to the formatted -% result; it wraps the text in the proof step that corresponds to the evidence. The -% environment takes an optional |KeyVal| argument, which can have the |method| key, whose -% value is the name of a proof method (this will only need to mean something to the -% application that consumes the semantic annotations). Furthermore, the justification can -% contain ``premises'' (specifications to assertions that were used justify the step) and -% ``arguments'' (other information taken into account by the proof method). -% -% \DescribeMacro{\premise} The |\premise| macro allows to mark up part of the text as -% reference to an assertion that is used in the argumentation. In the example in -% Figure~\ref{fig:proof:src} we have used the |\premise| macro to identify the inductive -% hypothesis. % -% \DescribeMacro{\justarg} The |\justarg| macro is very similar to |\premise| with the -% difference that it is used to mark up arguments to the proof method. Therefore the -% content of the first argument is interpreted as a mathematical object rather than as an -% identifier as in the case of |\premise|. In our example, we specified that the -% simplification should take place on the right hand side of the equation. Other examples -% include proof methods that instantiate. Here we would indicate the substituted object in -% a |\justarg| macro. -% -% \subsection{Proof Structure} -% -% \DescribeEnv{subproof} The |pfcases| environment is used to mark up a subproof. This -% environment takes an optional |KeyVal| argument for semantic annotations and a second -% argument that allows to specify an introductory comment (just like in the |proof| -% environment). The \DescribeMacro{method}|method| key can be used to give the name of the -% proof method executed to make this subproof. -% -% \DescribeEnv{spfcases} The |pfcases| environment is used to mark up a proof by -% cases. Technically it is a variant of the |subproof| where the |method| is -% |by-cases|. Its contents are |spfcase| environments that mark up the cases one by one. -% -% \DescribeEnv{spfcase} The content of a |pfcases| environment are a sequence of case -% proofs marked up in the |pfcase| environment, which takes an optional |KeyVal| argument -% for semantic annotations. The second argument is used to specify the the description of -% the case under consideration. The content of a |pfcase| environment is the same as that -% of a |proof|, i.e. |step|s, |proofcomment|s, and |pfcases| -% environments. \DescribeMacro{\spfcasesketch}|\spfcasesketch| is a variant of the |spfcase| -% environment that takes the same arguments, but instead of the |spfstep|s in the body -% uses a third argument for a proof sketch. -% -% \DescribeEnv{sproofcomment} The |proofcomment| environment is much like a |step|, only -% that it does not have an object-level assertion of its own. Rather than asserting some -% fact that is relevant for the proof, it is used to explain where the proof is going, -% what we are attempting to to, or what we have achieved so far. As such, it cannot be the -% target of a |\premise|. -% -% \subsection{Proof End Markers} -% -% Traditionally, the end of a mathematical proof is marked with a little box at the end of -% the last line of the proof (if there is space and on the end of the next line if there -% isn't), like so:\sproofend -% -% The |sproof| package provides the \DescribeMacro{\sproofend}|\sproofend| macro for -% this. If a different symbol for the proof end is to be used (e.g. {\sl{q.e.d}}), then -% this can be obtained by specifying it using the -% \DescribeMacro{\sProofEndSymbol}|\sProofEndSymbol| configuration macro (e.g. by specifying -% |\sProofEndSymbol{q.e.d}|). -% -% Some of the proof structuring macros above will insert proof end symbols for sub-proofs, -% in most cases, this is desirable to make the proof structure explicit, but sometimes -% this wastes space (especially, if a proof ends in a case analysis which will supply its -% own proof end marker). To suppress it locally, just set |proofend={}| in them or use use -% |\sProofEndSymbol{}|. -% -% \subsection{Configuration of the Presentation}\label{sec:user:conf} -% -% Finally, we provide configuration hooks in Figure~\ref{fig:hooks} for the keywords in -% proofs. These are mainly intended for package authors building on |statements|, e.g. for -% multi-language support.\ednote{we might want to develop an extension -% \texttt{sproof-babel} in the future.}. -%\begin{figure}[ht]\centering -% \begin{tabular}{|lll|}\hline -% Environment & configuration macro & value\\\hline\hline -% \texttt{sproof} & \texttt{\textbackslash spf@proof@kw} & \makeatletter\spf@proof@kw\\\hline -% \texttt{sketchproof} & \texttt{\textbackslash spf@sketchproof@kw} & \makeatletter\spf@proofsketch@kw\\\hline -% \end{tabular} -% \caption{Configuration Hooks for Semantic Proof Markup}\label{fig:hooks} -% \end{figure} -% The proof step labels can be customized via the -% \DescribeMacro{\pstlabelstyle}|\pstlabelstyle| macro: |\pstlabelstyle{|\meta{style}|}| -% sets the style; see Figure~\ref{fig:pstlabel} for an overview of styles. Package writers -% can add additional styles by adding a macro |\pst@make@label@|\meta{style} that takes -% two arguments: a comma-separated list of ordinals that make up the prefix and the current -% ordinal. Note that comma-separated lists can be conveniently iterated over by the -% {\LaTeX} |\@for|\ldots|:=|\ldots|\do{|\ldots|}| macro; see Figure~\ref{fig:pstlabel} for -% examples. -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX issue tracker at \cite{sTeX:github:on}. -% \begin{enumerate} -% \item The numbering scheme of proofs cannot be changed. It is more geared for teaching -% proof structures (the author's main use case) and not for writing papers.\lec{reported -% by Tobias Pfeiffer (fixed)} -% \item currently proof steps are formatted by the {\LaTeX} |description| environment. We -% would like to configure this, e.g. to use the |inparaenum| environment for more -% condensed proofs. I am just not sure what the best user interface would be I can -% imagine redefining an internal environment |spf@proofstep@list| or adding a key -% |prooflistenv| to the |proof| environment that allows to specify the environment -% directly. Maybe we should do both. -% \end{enumerate} % % \end{documentation} % @@ -324,12 +65,6 @@ % % \section{The Implementation} % -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{need an implementation for {\latexml}} -% % \begin{macrocode} %<*package> %<@@=stex_sproof> @@ -385,15 +120,6 @@ % not do automatic numbering, and we have to add keyword arguments all over the place, to % accomodate semantic information. % -% \begin{environment}{pst@with@label} -% This environment manages\footnote{This gets the labeling right but only works 8 levels -% deep} the path labeling of the proof steps in the description environment of the -% outermost |proof| environment. The argument is the label prefix up to now; which we -% cache in |\pst@label| (we need evaluate it first, since are in the right place -% now!). Then we increment the proof depth which is stored in |\count10| (lower counters -% are used by {\TeX} for page numbering) and initialize the next level counter -% |\count\count10| with 1. In the end call for this environment, we just decrease the -% proof depth counter by 1 again. % \begin{macrocode} \intarray_new:Nn\l_@@_counter_intarray{50} \cs_new_protected:Npn \sproofnumber { @@ -449,8 +175,6 @@ \intarray_gset:Nnn \l_@@_counter_intarray \l_tmpa_int { 0 } } % \end{macrocode} -% \end{environment} -% % %\begin{macro}{\sproofend} % This macro places a little box at the end of the line if there is space, or at the @@ -725,7 +449,7 @@ } \cs_new_protected:Nn \_@@_sproof_end: {\sproofend} -\newcommand\stexpatchsproof[3][] { +\newcommand\stexpatchproof[3][] { \str_set:Nx \l_tmpa_str{ #1 } \str_if_empty:NTF \l_tmpa_str { \tl_set:Nn \_@@_sproof_start: { #2 } @@ -767,6 +491,17 @@ } }{ \@in@omtexttrue + \clist_set:No \l_tmpa_clist \spftype + \tl_set:Nn \l_tmpa_tl { + \item[\sproofnumber] + \bool_set_true:N \l_@@_inc_counter_bool + } + \clist_map_inline:Nn \l_tmpa_clist { + \exp_args:No \str_if_eq:nnT \c_@@_flow_str {##1} { + \tl_clear:N \l_tmpa_tl + } + } + \l_tmpa_tl \seq_clear:N \l_tmpa_seq \clist_map_inline:Nn \l_@@_spf_for_clist { \tl_if_empty:nF{ ##1 }{ @@ -781,17 +516,6 @@ \str_if_empty:NF \spftype { \stex_annotate_invisible:nnn{type}{\spftype}{} } - \clist_set:No \l_tmpa_clist \spftype - \tl_set:Nn \l_tmpa_tl { - \item[\sproofnumber] - \bool_set_true:N \l_@@_inc_counter_bool - } - \clist_map_inline:Nn \l_tmpa_clist { - \exp_args:No \str_if_eq:nnT \c_@@_flow_str {##1} { - \tl_clear:N \l_tmpa_tl - } - } - \l_tmpa_tl \tl_if_empty:NF \spftitle { {(\titleemph{\spftitle})\enspace} } @@ -812,9 +536,9 @@ % \end{macrocode} % \end{environment} % -% \begin{environment}{sproofcomment} +% \begin{environment}{spfcomment} % \begin{macrocode} -\newenvironment{sproofcomment}[1][]{ +\newenvironment{spfcomment}[1][]{ \_@@_spf_args:n{#1} \clist_set:No \l_tmpa_clist \spftype \tl_set:Nn \l_tmpa_tl { @@ -1001,11 +725,11 @@ % arguments for now and only display the content.\ednote{need to do something about the % premise in draft mode.} % -% \begin{environment}{justification} +% \begin{macro}{\spfjust} % \begin{macrocode} -\newenvironment{justification}[1][]{}{} +\newcommand\spfjust[1][]{} % \end{macrocode} -% \end{environment} +% \end{macro} % % \begin{macro}{\premise} % \begin{macrocode} @@ -1023,31 +747,10 @@ % \end{macro} % \end{implementation} % \Finale +% \ifinfulldoc\else\printbibliography\fi \endinput + %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End: -% LocalWords: GPL structuresharing STR sproof dtx CPERL keyval methodfalse env -% LocalWords: methodtrue envtrue medhodtrue DefKeyVal Semiverbatim omdoc args -% LocalWords: DefEnvironment OptionalKeyVals KeyVal omtext DefConstructor str -% LocalWords: proofidea KeyVal pfstep DefCMPEnvironment KeyVal proofcomment eq -% LocalWords: KeyVal pfcases KeyVal pfcase KeyVal extractBodyText unlist elsif -% LocalWords: foreach getBody toString str str str LookupValue LastSeenCMP Thu -% LocalWords: appendText getValue undef openElement closeElement DefMacro omd -% LocalWords: afterClose nodeType childNodes firstCMP localname hasChildNodes -% LocalWords: firstChild textContent removeChild iffalse kohlhase sref scsys -% LocalWords: sproofs.sty sc sc mathml openmath latexml cmathml activemath geq -% LocalWords: twintoo atwin atwintoo texttt fileversion maketitle stex newpage -% LocalWords: tableofcontents newpage exfig scriptsize vspace ednote spfidea -% LocalWords: spfidea spfsketch spfsketch spfstep justarg spfcases spfcase rhs -% LocalWords: sproofcomment ind-hyp splitit arith byindhyp sproofend proofend -% LocalWords: printbibliography textsf langle textsf langle ltxml ctancite spf -% LocalWords: srefaddidkey pf.sty newenvironment hbox vrule vbox ifx showmeta -% LocalWords: hrule vskip hrule vrule hfil nobreak hfill smallskip newcommand -% LocalWords: stDMemph newcount endsproof xref doctex showmeta hline lec ldots -% LocalWords: textbackslash makeatletter sketchproof compactenum tracissue -% LocalWords: metakeys addmetakey metasetkeys stylable pstlabelstyle pstlabel -% LocalWords: pstlabelstyle pstlabelstyle ldots ldots ensuremath inparaenum -% LocalWords: nameuse prooflistenv spfcasesketch spfcasesketch spfeq rcll -% LocalWords: displaymath noindent ignorespaces |