doc-src/LaTeXsugar/Sugar/generated/Sugar.tex
author wenzelm
Sat, 23 Apr 2005 19:51:24 +0200
changeset 15833 78109c7012ed
parent 15728 a6a74062ffb0
permissions -rw-r--r--
removed token_trans.ML (some content moved to syn_ext.ML);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15728
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     1
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     2
\begin{isabellebody}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     3
\def\isabellecontext{Sugar}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     4
\isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     5
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     6
\isamarkupsection{Introduction%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     7
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     8
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
     9
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    10
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    11
This document is for those Isabelle users who have mastered
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    12
the art of mixing \LaTeX\ text and Isabelle theories and never want to
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    13
typeset a theorem by hand anymore because they have experienced the
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    14
bliss of writing \verb!@!\verb!{thm[display]setsum_cartesian_product[no_vars]}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    15
and seeing Isabelle typeset it for them:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    16
\begin{isabelle}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    17
{\isacharparenleft}{\isasymSum}x{\isasymin}A{\isachardot}\ {\isasymSum}y{\isasymin}B{\isachardot}\ f\ x\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isasymSum}z{\isasymin}A\ {\isasymtimes}\ B{\isachardot}\ f\ {\isacharparenleft}fst\ z{\isacharparenright}\ {\isacharparenleft}snd\ z{\isacharparenright}{\isacharparenright}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    18
\end{isabelle}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    19
No typos, no omissions, no sweat.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    20
If you have not experienced that joy, read Chapter 4, \emph{Presenting
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    21
Theories}, \cite{LNCS2283} first.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    22
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    23
If you have mastered the art of Isabelle's \emph{antiquotations},
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    24
i.e.\ things like the above \verb!@!\verb!{thm...}!, beware: in your vanity
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    25
you may be tempted to think that all readers of the stunning ps or pdf
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    26
documents you can now produce at the drop of a hat will be struck with
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    27
awe at the beauty unfolding in front of their eyes. Until one day you
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    28
come across that very critical of readers known as the ``common referee''.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    29
He has the nasty habit of refusing to understand unfamiliar notation
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    30
like Isabelle's infamous \isa{{\isasymlbrakk}\ {\isasymrbrakk}\ {\isasymLongrightarrow}} no matter how many times you
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    31
explain it in your paper. Even worse, he thinks that using \isa{{\isasymlbrakk}\ {\isasymrbrakk}} for anything other than denotational semantics is a cardinal sin
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    32
that must be punished by instant rejection.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    33
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    34
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    35
This document shows you how to make Isabelle and \LaTeX\ cooperate to
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    36
produce ordinary looking mathematics that hides the fact that it was
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    37
typeset by a machine. You merely need to load the right files:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    38
\begin{itemize}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    39
\item Import theory \texttt{LaTeXsugar} in the header of your own
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    40
theory.  You may also want bits of \texttt{OptionalSugar}, which you can
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    41
copy selectively into your own theory or import as a whole.  Both
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    42
theories live in \texttt{HOL/Library} and are found automatically.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    43
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    44
\item Should you need additional \LaTeX\ packages (the text will tell
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    45
you so), you include them at the beginning of your \LaTeX\ document,
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    46
typically in \texttt{root.tex}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    47
\end{itemize}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    48
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    49
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    50
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    51
\isamarkupsection{HOL syntax%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    52
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    53
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    54
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    55
\isamarkupsubsection{Logic%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    56
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    57
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    58
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    59
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    60
The predefined constructs \isa{if}, \isa{let} and
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    61
\isa{case} are set in sans serif font to distinguish them from
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    62
other functions. This improves readability:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    63
\begin{itemize}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    64
\item \isa{\textsf{if}\ b\ \textsf{then}\ e\isactrlisub {\isadigit{1}}\ \textsf{else}\ e\isactrlisub {\isadigit{2}}} instead of \isa{if\ b\ then\ e\isactrlisub {\isadigit{1}}\ else\ e\isactrlisub {\isadigit{2}}}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    65
\item \isa{\textsf{let}\ x\ {\isacharequal}\ e\isactrlisub {\isadigit{1}}\ \textsf{in}\ e\isactrlisub {\isadigit{2}}} instead of \isa{let\ x\ {\isacharequal}\ e\isactrlisub {\isadigit{1}}\ in\ e\isactrlisub {\isadigit{2}}}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    66
\item \isa{\textsf{case}\ x\ \textsf{of}\ True\ {\isasymRightarrow}\ e\isactrlisub {\isadigit{1}}\ {\isacharbar}\ False\ {\isasymRightarrow}\ e\isactrlisub {\isadigit{2}}} instead of\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    67
      \isa{case\ x\ of\ True\ {\isasymRightarrow}\ e\isactrlisub {\isadigit{1}}\ {\isacharbar}\ False\ {\isasymRightarrow}\ e\isactrlisub {\isadigit{2}}}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    68
\end{itemize}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    69
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    70
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    71
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    72
\isamarkupsubsection{Sets%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    73
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    74
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    75
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    76
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    77
Although set syntax in HOL is already close to
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    78
standard, we provide a few further improvements:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    79
\begin{itemize}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    80
\item \isa{{\isacharbraceleft}x\ {\isacharbar}\ P{\isacharbraceright}} instead of \isa{{\isacharbraceleft}x{\isachardot}\ P{\isacharbraceright}}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    81
\item \isa{{\isasymemptyset}} instead of \isa{{\isacharbraceleft}{\isacharbraceright}}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    82
\item \isa{{\isacharbraceleft}a{\isacharcomma}\ b{\isacharcomma}\ c{\isacharbraceright}\ {\isasymunion}\ M} instead of \isa{insert\ a\ {\isacharparenleft}insert\ b\ {\isacharparenleft}insert\ c\ M{\isacharparenright}{\isacharparenright}}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    83
\end{itemize}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    84
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    85
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    86
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    87
\isamarkupsubsection{Lists%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    88
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    89
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    90
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    91
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    92
If lists are used heavily, the following notations increase readability:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    93
\begin{itemize}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    94
\item \isa{x{\isasymcdot}xs} instead of \isa{x\ {\isacharhash}\ xs}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    95
      Exceptionally, \isa{x{\isasymcdot}xs} is also input syntax.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    96
If you prefer more space around the $\cdot$ you have to redefine
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    97
\verb!\isasymcdot! in \LaTeX:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    98
\verb!\renewcommand{\isasymcdot}{\isamath{\,\cdot\,}}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
    99
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   100
\item \isa{{\isacharbar}xs{\isacharbar}} instead of \isa{length\ xs}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   101
\item \isa{xs\ensuremath{_{[\mathit{n}]}}} instead of \isa{nth\ xs\ n},
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   102
      the $n$th element of \isa{xs}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   103
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   104
\item The \isa{{\isacharat}} operation associates implicitly to the right,
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   105
which leads to unpleasant line breaks if the term is too long for one
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   106
line. To avoid this, \texttt{OptionalSugar} contains syntax to group
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   107
\isa{{\isacharat}}-terms to the left before printing, which leads to better
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   108
line breaking behaviour:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   109
\begin{isabelle}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   110
term\isactrlisub {\isadigit{0}}\ \isacharat\ term\isactrlisub {\isadigit{1}}\ \isacharat\ term\isactrlisub {\isadigit{2}}\ \isacharat\ term\isactrlisub {\isadigit{3}}\ \isacharat\ term\isactrlisub {\isadigit{4}}\ \isacharat\ term\isactrlisub {\isadigit{5}}\ \isacharat\ term\isactrlisub {\isadigit{6}}\ \isacharat\ term\isactrlisub {\isadigit{7}}\ \isacharat\ term\isactrlisub {\isadigit{8}}\ \isacharat\ term\isactrlisub {\isadigit{9}}\ \isacharat\ term\isactrlisub {\isadigit{1}}\isactrlisub {\isadigit{0}}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   111
\end{isabelle}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   112
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   113
\end{itemize}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   114
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   115
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   116
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   117
\isamarkupsection{Printing theorems%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   118
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   119
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   120
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   121
\isamarkupsubsection{Question marks%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   122
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   123
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   124
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   125
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   126
If you print anything, especially theorems, containing
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   127
schematic variables they are prefixed with a question mark:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   128
\verb!@!\verb!{thm conjI}! results in \isa{{\isasymlbrakk}{\isacharquery}P{\isacharsemicolon}\ {\isacharquery}Q{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharquery}P\ {\isasymand}\ {\isacharquery}Q}. Most of the time
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   129
you would rather not see the question marks. There is an attribute
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   130
\verb!no_vars! that you can attach to the theorem that turns its
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   131
schematic into ordinary free variables: \verb!@!\verb!{thm conjI[no_vars]}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   132
results in \isa{{\isasymlbrakk}P{\isacharsemicolon}\ Q{\isasymrbrakk}\ {\isasymLongrightarrow}\ P\ {\isasymand}\ Q}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   133
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   134
This \verb!no_vars! business can become a bit tedious.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   135
If you would rather never see question marks, simply put
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   136
\begin{verbatim}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   137
reset show_var_qmarks;
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   138
\end{verbatim}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   139
at the beginning of your file \texttt{ROOT.ML}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   140
The rest of this document is produced with this flag reset.%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   141
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   142
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   143
\isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   144
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   145
\isamarkupsubsection{Inference rules%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   146
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   147
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   148
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   149
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   150
To print theorems as inference rules you need to include Didier
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   151
R\'emy's \texttt{mathpartir} package~\cite{mathpartir}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   152
for typesetting inference rules in your \LaTeX\ file.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   153
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   154
Writing \verb!@!\verb!{thm[mode=Rule] conjI}! produces
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   155
\isa{\mbox{}\inferrule{\mbox{P}\\\ \mbox{Q}}{\mbox{P\ {\isasymand}\ Q}}}, even in the middle of a sentence.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   156
If you prefer your inference rule on a separate line, maybe with a name,
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   157
\begin{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   158
\isa{\mbox{}\inferrule{\mbox{P}\\\ \mbox{Q}}{\mbox{P\ {\isasymand}\ Q}}} {\sc conjI}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   159
\end{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   160
is produced by
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   161
\begin{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   162
\verb!\begin{center}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   163
\verb!@!\verb!{thm[mode=Rule] conjI} {\sc conjI}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   164
\verb!\end{center}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   165
\end{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   166
It is not recommended to use the standard \texttt{display} attribute
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   167
together with \texttt{Rule} because centering does not work and because
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   168
the line breaking mechanisms of \texttt{display} and \texttt{mathpartir} can
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   169
clash.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   170
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   171
Of course you can display multiple rules in this fashion:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   172
\begin{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   173
\verb!\begin{center}\isastyle!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   174
\verb!@!\verb!{thm[mode=Rule] conjI} {\sc conjI} \\[1ex]!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   175
\verb!@!\verb!{thm[mode=Rule] conjE} {\sc disjI$_1$} \qquad!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   176
\verb!@!\verb!{thm[mode=Rule] disjE} {\sc disjI$_2$}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   177
\verb!\end{center}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   178
\end{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   179
yields
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   180
\begin{center}\isastyle
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   181
\isa{\mbox{}\inferrule{\mbox{P}\\\ \mbox{Q}}{\mbox{P\ {\isasymand}\ Q}}} {\sc conjI} \\[1ex]
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   182
\isa{\mbox{}\inferrule{\mbox{P}}{\mbox{P\ {\isasymor}\ Q}}} {\sc disjI$_1$} \qquad
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   183
\isa{\mbox{}\inferrule{\mbox{Q}}{\mbox{P\ {\isasymor}\ Q}}} {\sc disjI$_2$}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   184
\end{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   185
Note that we included \verb!\isastyle! to obtain
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   186
the smaller font that otherwise comes only with \texttt{display}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   187
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   188
The \texttt{mathpartir} package copes well if there are too many
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   189
premises for one line:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   190
\begin{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   191
\isa{\mbox{}\inferrule{\mbox{A\ {\isasymlongrightarrow}\ B}\\\ \mbox{B\ {\isasymlongrightarrow}\ C}\\\ \mbox{C\ {\isasymlongrightarrow}\ D}\\\ \mbox{D\ {\isasymlongrightarrow}\ E}\\\ \mbox{E\ {\isasymlongrightarrow}\ F}\\\ \mbox{F\ {\isasymlongrightarrow}\ G}\\\ \mbox{G\ {\isasymlongrightarrow}\ H}\\\ \mbox{H\ {\isasymlongrightarrow}\ I}\\\ \mbox{I\ {\isasymlongrightarrow}\ J}\\\ \mbox{J\ {\isasymlongrightarrow}\ K}}{\mbox{A\ {\isasymlongrightarrow}\ K}}}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   192
\end{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   193
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   194
Limitations: 1. Premises and conclusion must each not be longer than
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   195
the line.  2. Premises that are \isa{{\isasymLongrightarrow}}-implications are again
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   196
displayed with a horizontal line, which looks at least unusual.%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   197
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   198
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   199
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   200
\isamarkupsubsection{If-then%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   201
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   202
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   203
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   204
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   205
If you prefer a fake ``natural language'' style you can produce
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   206
the body of
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   207
\newtheorem{theorem}{Theorem}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   208
\begin{theorem}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   209
\isa{{\rmfamily\upshape\normalsize{}If\,}\ \mbox{i\ {\isasymle}\ j}\ {\rmfamily\upshape\normalsize \,and\,}\ \mbox{j\ {\isasymle}\ k}\ {\rmfamily\upshape\normalsize \,then\,}\ i\ {\isasymle}\ k{\isachardot}}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   210
\end{theorem}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   211
by typing
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   212
\begin{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   213
\verb!@!\verb!{thm[mode=IfThen] le_trans}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   214
\end{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   215
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   216
In order to prevent odd line breaks, the premises are put into boxes.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   217
At times this is too drastic:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   218
\begin{theorem}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   219
\isa{{\rmfamily\upshape\normalsize{}If\,}\ \mbox{longpremise}\ {\rmfamily\upshape\normalsize \,and\,}\ \mbox{longerpremise}\ {\rmfamily\upshape\normalsize \,and\,}\ \mbox{P\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ x{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}}\ {\rmfamily\upshape\normalsize \,and\,}\ \mbox{longestpremise}\ {\rmfamily\upshape\normalsize \,then\,}\ conclusion{\isachardot}}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   220
\end{theorem}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   221
In which case you should use \texttt{mode=IfThenNoBox} instead of
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   222
\texttt{mode=IfThen}:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   223
\begin{theorem}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   224
\isa{{\rmfamily\upshape\normalsize{}If\,}\ longpremise\ {\rmfamily\upshape\normalsize \,and\,}\ longerpremise\ {\rmfamily\upshape\normalsize \,and\,}\ P\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ {\isacharparenleft}f\ x{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isacharparenright}\ {\rmfamily\upshape\normalsize \,and\,}\ longestpremise\ {\rmfamily\upshape\normalsize \,then\,}\ conclusion{\isachardot}}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   225
\end{theorem}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   226
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   227
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   228
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   229
\isamarkupsubsection{Definitions and Equations%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   230
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   231
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   232
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   233
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   234
The \verb!thm! antiquotation works nicely for proper theorems, but
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   235
  sets of equations as used in definitions are more difficult to
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   236
  typeset nicely: for some reason people tend to prefer aligned 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   237
  \isa{{\isacharequal}} signs.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   238
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   239
  Isabelle2005 has a nice mechanism for this, namely the two
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   240
  antiquotations \verb!@!\verb!{lhs thm}! and \verb!@!\verb!{rhs thm}!.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   241
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   242
  \begin{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   243
  \begin{tabular}{l@ {~~\isa{{\isacharequal}}~~}l}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   244
  \isa{foldl\ f\ a\ {\isacharbrackleft}{\isacharbrackright}} & \isa{a}\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   245
  \isa{foldl\ f\ a\ {\isacharparenleft}x{\isasymcdot}xs{\isacharparenright}} & \isa{foldl\ f\ {\isacharparenleft}f\ a\ x{\isacharparenright}\ xs}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   246
  \end{tabular}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   247
  \end{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   248
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   249
  \noindent 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   250
  is produced by the following code:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   251
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   252
\begin{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   253
  \verb!\begin{center}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   254
  \verb!\begin{tabular}{l@ {~~!\verb!@!\verb!{text "="}~~}l}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   255
  \verb!@!\verb!{lhs foldl_Nil} & @!\verb!{rhs foldl_Nil}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   256
  \verb!@!\verb!{lhs foldl_Cons} & @!\verb!{rhs foldl_Cons}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   257
  \verb!\end{tabular}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   258
  \verb!\end{center}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   259
\end{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   260
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   261
  \noindent
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   262
  Note the space between \verb!@! and \verb!{! in the tabular argument.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   263
  It prevents Isabelle from interpreting \verb!@ {~~...~~}! 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   264
  as antiquotation. \verb!@!\verb!{lhs thm}! and \verb!@!\verb!{rhs thm}! 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   265
  try to be smart about the interpretation of the theorem they
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   266
  print, they work just as well for meta equality \isa{{\isasymequiv}} and other
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   267
  binary operators like \isa{{\isacharless}}.%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   268
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   269
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   270
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   271
\isamarkupsubsection{Patterns%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   272
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   273
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   274
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   275
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   276
Sometimes functions ignore one or more of their
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   277
  arguments and some functional languages have nice 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   278
  syntax for that as in \isa{hd\ {\isacharparenleft}x{\isasymcdot}\_{\isacharparenright}\ {\isacharequal}\ x}.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   279
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   280
  You can simulate this in Isabelle by instantiating the \isa{xs} in
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   281
  definition \mbox{\isa{hd\ {\isacharparenleft}x{\isasymcdot}xs{\isacharparenright}\ {\isacharequal}\ x}} with a constant \isa{DUMMY} that
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   282
  is printed as \isa{\_}. The code for the pattern above is 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   283
  \verb!@!\verb!{thm hd.simps [where xs=DUMMY]}!.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   284
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   285
  You can drive this game even further and extend the syntax of let
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   286
  bindings such that certain functions like \isa{fst}, \isa{hd}, 
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   287
  etc.\ are printed as patterns. \texttt{OptionalSugar} provides the
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   288
  following:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   289
  
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   290
  \begin{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   291
  \begin{tabular}{l@ {~~produced by~~}l}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   292
  \isa{\textsf{let}\ {\isacharparenleft}x{\isacharcomma}\ \_{\isacharparenright}\ {\isacharequal}\ p\ \textsf{in}\ t} & \verb!@!\verb!{term "let x = fst p in t"}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   293
  \isa{\textsf{let}\ {\isacharparenleft}\_{\isacharcomma}\ x{\isacharparenright}\ {\isacharequal}\ p\ \textsf{in}\ t} & \verb!@!\verb!{term "let x = snd p in t"}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   294
  \isa{\textsf{let}\ x{\isasymcdot}\_\ {\isacharequal}\ xs\ \textsf{in}\ t} & \verb!@!\verb!{term "let x = hd xs in t"}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   295
  \isa{\textsf{let}\ \_{\isasymcdot}x\ {\isacharequal}\ xs\ \textsf{in}\ t} & \verb!@!\verb!{term "let x = tl xs in t"}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   296
  \isa{\textsf{let}\ Some\ x\ {\isacharequal}\ y\ \textsf{in}\ t} & \verb!@!\verb!{term "let x = the y in t"}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   297
  \end{tabular}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   298
  \end{center}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   299
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   300
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   301
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   302
\isamarkupsubsection{Proofs%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   303
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   304
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   305
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   306
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   307
Full proofs, even if written in beautiful Isar style, are likely to
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   308
  be too long and detailed to be included in conference papers, but
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   309
  some key lemmas might be of interest.
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   310
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   311
  It is usually easiest to put them in figures like the one in Fig.\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   312
  \ref{fig:proof}. This was achieved with the \isakeyword{text\_raw}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   313
  command:%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   314
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   315
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   316
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   317
\begin{figure}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   318
  \begin{center}\begin{minipage}{0.6\textwidth}  
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   319
  \isastyle\isamarkuptrue
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   320
\isacommand{lemma}\ True\isanewline
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   321
\isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   322
\isacommand{proof}\ {\isacharminus}\isanewline
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   323
\ \ %
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   324
\isamarkupcmt{pretty trivial%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   325
}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   326
\isanewline
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   327
\ \ \isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   328
\isacommand{show}\ True\ \isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   329
\isacommand{by}\ force\isanewline
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   330
\isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   331
\isacommand{qed}\isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   332
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   333
\end{minipage}\end{center}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   334
  \caption{Example proof in a figure.}\label{fig:proof}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   335
  \end{figure}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   336
%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   337
\begin{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   338
\begin{quote}
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   339
\small
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   340
\verb!text_raw {!\verb!*!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   341
\verb!  \begin{figure}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   342
\verb!  \begin{center}\begin{minipage}{0.6\textwidth}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   343
\verb!  \isastyle\isamarkuptrue!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   344
\verb!*!\verb!}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   345
\verb!lemma True!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   346
\verb!proof -!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   347
\verb!  -- "pretty trivial"!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   348
\verb!  show True by force!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   349
\verb!qed!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   350
\verb!text_raw {!\verb!*!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   351
\verb!  \end{minipage}\end{center}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   352
\verb!  \caption{Example proof in a figure.}\label{fig:proof}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   353
\verb!  \end{figure}!\\
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   354
\verb!*!\verb!}!
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   355
\end{quote}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   356
\end{isamarkuptext}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   357
\isamarkuptrue%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   358
\isamarkupfalse%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   359
\end{isabellebody}%
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   360
%%% Local Variables:
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   361
%%% mode: latex
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   362
%%% TeX-master: "root"
a6a74062ffb0 added Makefile and generated files to make document available for makedist
kleing
parents:
diff changeset
   363
%%% End: