doc-src/TutorialI/Documents/document/Documents.tex
author blanchet
Tue, 17 Feb 2009 14:01:54 +0100
changeset 29956 62f931b257b7
parent 29297 62e0f892e525
child 30649 57753e0ec1d4
permissions -rw-r--r--
Reintroduce set_interpreter for Collect and op :. I removed them by accident when removing old code that dealt with the "set" type. Incidentally, there is still some broken "set" code in Refute that should be fixed (see TODO in refute.ML).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11648
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
     1
%
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{Documents}%
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
     4
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
     5
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
     6
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
     7
\endisadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
     8
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
     9
\isatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    10
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    11
\endisatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    12
{\isafoldtheory}%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    13
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    14
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    15
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
    16
\endisadelimtheory
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    17
%
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
    18
\isamarkupsection{Concrete Syntax \label{sec:concrete-syntax}%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    19
}
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    20
\isamarkuptrue%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    21
%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    22
\begin{isamarkuptext}%
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    23
The core concept of Isabelle's framework for concrete syntax is that
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    24
  of \bfindex{mixfix annotations}.  Associated with any kind of
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    25
  constant declaration, mixfixes affect both the grammar productions
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    26
  for the parser and output templates for the pretty printer.
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    27
12743
wenzelm
parents: 12686
diff changeset
    28
  In full generality, parser and pretty printer configuration is a
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
    29
  subtle affair~\cite{isabelle-ref}.  Your syntax specifications need
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    30
  to interact properly with the existing setup of Isabelle/Pure and
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    31
  Isabelle/HOL\@.  To avoid creating ambiguities with existing
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    32
  elements, it is particularly important to give new syntactic
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
    33
  constructs the right precedence.
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    34
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
    35
  Below we introduce a few simple syntax declaration
12743
wenzelm
parents: 12686
diff changeset
    36
  forms that already cover many common situations fairly well.%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    37
\end{isamarkuptext}%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    38
\isamarkuptrue%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    39
%
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
    40
\isamarkupsubsection{Infix Annotations%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    41
}
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    42
\isamarkuptrue%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    43
%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    44
\begin{isamarkuptext}%
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
    45
Syntax annotations may be included wherever constants are declared,
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
    46
  such as \isacommand{definition} and \isacommand{primrec} --- and also
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    47
  \isacommand{datatype}, which declares constructor operations.
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    48
  Type-constructors may be annotated as well, although this is less
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    49
  frequently encountered in practice (the infix type \isa{{\isasymtimes}} comes
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    50
  to mind).
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    51
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
    52
  Infix declarations\index{infix annotations} provide a useful special
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    53
  case of mixfixes.  The following example of the exclusive-or
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    54
  operation on boolean values illustrates typical infix declarations.%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    55
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    56
\isamarkuptrue%
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
    57
\isacommand{definition}\isamarkupfalse%
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
    58
\ xor\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}bool\ {\isasymRightarrow}\ bool\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharplus}{\isacharbrackright}{\isachardoublequoteclose}\ {\isadigit{6}}{\isadigit{0}}{\isacharparenright}\isanewline
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
    59
\isakeyword{where}\ {\isachardoublequoteopen}A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B\ {\isasymequiv}\ {\isacharparenleft}A\ {\isasymand}\ {\isasymnot}\ B{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}{\isasymnot}\ A\ {\isasymand}\ B{\isacharparenright}{\isachardoublequoteclose}%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    60
\begin{isamarkuptext}%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
    61
\noindent Now \isa{xor\ A\ B} and \isa{A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B} refer to the
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
    62
  same expression internally.  Any curried function with at least two
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    63
  arguments may be given infix syntax.  For partial applications with
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    64
  fewer than two operands, there is a notation using the prefix~\isa{op}.  For instance, \isa{xor} without arguments is represented as
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    65
  \isa{op\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}}; together with ordinary function application, this
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
    66
  turns \isa{xor\ A} into \isa{op\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ A}.
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    67
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
    68
  The keyword \isakeyword{infixl} seen above specifies an
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
    69
  infix operator that is nested to the \emph{left}: in iterated
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
    70
  applications the more complex expression appears on the left-hand
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    71
  side, and \isa{A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ C} stands for \isa{{\isacharparenleft}A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B{\isacharparenright}\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ C}.  Similarly, \isakeyword{infixr} means nesting to the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    72
  \emph{right}, reading \isa{A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ C} as \isa{A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ {\isacharparenleft}B\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ C{\isacharparenright}}.  A \emph{non-oriented} declaration via \isakeyword{infix}
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    73
  would render \isa{A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ C} illegal, but demand explicit
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    74
  parentheses to indicate the intended grouping.
12743
wenzelm
parents: 12686
diff changeset
    75
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
    76
  The string \isa{{\isachardoublequote}{\isacharbrackleft}{\isacharplus}{\isacharbrackright}{\isachardoublequote}} in our annotation refers to the
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
    77
  concrete syntax to represent the operator (a literal token), while
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
    78
  the number \isa{{\isadigit{6}}{\isadigit{0}}} determines the precedence of the construct:
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    79
  the syntactic priorities of the arguments and result.  Isabelle/HOL
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    80
  already uses up many popular combinations of ASCII symbols for its
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    81
  own use, including both \isa{{\isacharplus}} and \isa{{\isacharplus}{\isacharplus}}.  Longer
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    82
  character combinations are more likely to be still available for
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    83
  user extensions, such as our~\isa{{\isacharbrackleft}{\isacharplus}{\isacharbrackright}}.
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    84
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    85
  Operator precedences have a range of 0--1000.  Very low or high
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    86
  priorities are reserved for the meta-logic.  HOL syntax mainly uses
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    87
  the range of 10--100: the equality infix \isa{{\isacharequal}} is centered at
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    88
  50; logical connectives (like \isa{{\isasymor}} and \isa{{\isasymand}}) are
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    89
  below 50; algebraic ones (like \isa{{\isacharplus}} and \isa{{\isacharasterisk}}) are
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    90
  above 50.  User syntax should strive to coexist with common HOL
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
    91
  forms, or use the mostly unused range 100--900.%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    92
\end{isamarkuptext}%
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    93
\isamarkuptrue%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
    94
%
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
    95
\isamarkupsubsection{Mathematical Symbols \label{sec:syntax-symbols}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
    96
}
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
    97
\isamarkuptrue%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
    98
%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
    99
\begin{isamarkuptext}%
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   100
Concrete syntax based on ASCII characters has inherent limitations.
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   101
  Mathematical notation demands a larger repertoire of glyphs.
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   102
  Several standards of extended character sets have been proposed over
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   103
  decades, but none has become universally available so far.  Isabelle
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   104
  has its own notion of \bfindex{symbols} as the smallest entities of
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   105
  source text, without referring to internal encodings.  There are
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   106
  three kinds of such ``generalized characters'':
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   107
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   108
  \begin{enumerate}
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   109
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   110
  \item 7-bit ASCII characters
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   111
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   112
  \item named symbols: \verb,\,\verb,<,$ident$\verb,>,
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   113
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   114
  \item named control symbols: \verb,\,\verb,<^,$ident$\verb,>,
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   115
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   116
  \end{enumerate}
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   117
14486
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   118
  Here $ident$ is any sequence of letters. 
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   119
  This results in an infinite store of symbols, whose
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   120
  interpretation is left to further front-end tools.  For example, the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   121
  user-interface of Proof~General + X-Symbol and the Isabelle document
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   122
  processor (see \S\ref{sec:document-preparation}) display the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   123
  \verb,\,\verb,<forall>, symbol as~\isa{{\isasymforall}}.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   124
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   125
  A list of standard Isabelle symbols is given in
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   126
  \cite{isabelle-isar-ref}.  You may introduce your own
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   127
  interpretation of further symbols by configuring the appropriate
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   128
  front-end tool accordingly, e.g.\ by defining certain {\LaTeX}
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   129
  macros (see also \S\ref{sec:doc-prep-symbols}).  There are also a
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   130
  few predefined control symbols, such as \verb,\,\verb,<^sub>, and
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   131
  \verb,\,\verb,<^sup>, for sub- and superscript of the subsequent
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   132
  printable symbol, respectively.  For example, \verb,A\<^sup>\<star>, is
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   133
  output as \isa{A\isactrlsup {\isasymstar}}.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   134
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   135
  A number of symbols are considered letters by the Isabelle lexer and
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   136
  can be used as part of identifiers. These are the greek letters
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   137
  \isa{{\isasymalpha}} (\verb+\+\verb+<alpha>+), \isa{{\isasymbeta}}
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   138
  (\verb+\+\verb+<beta>+), etc. (excluding \isa{{\isasymlambda}}),
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   139
  special letters like \isa{{\isasymA}} (\verb+\+\verb+<A>+) and \isa{{\isasymAA}} (\verb+\+\verb+<AA>+), and the control symbols
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   140
  \verb+\+\verb+<^isub>+ and \verb+\+\verb+<^isup>+ for single letter
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   141
  sub and super scripts. This means that the input
14486
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   142
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   143
  \medskip
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   144
  {\small\noindent \verb,\,\verb,<forall>\,\verb,<alpha>\<^isub>1.,~\verb,\,\verb,<alpha>\<^isub>1 = \,\verb,<Pi>\<^isup>\<A>,}
14486
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   145
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   146
  \medskip
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   147
  \noindent is recognized as the term \isa{{\isasymforall}{\isasymalpha}\isactrlisub {\isadigit{1}}{\isachardot}\ {\isasymalpha}\isactrlisub {\isadigit{1}}\ {\isacharequal}\ {\isasymPi}\isactrlisup {\isasymA}} 
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   148
  by Isabelle. Note that \isa{{\isasymPi}\isactrlisup {\isasymA}} is a single
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   149
  syntactic entity, not an exponentiation.
14486
74c053a25513 symbols in idents
kleing
parents: 14379
diff changeset
   150
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   151
  Replacing our previous definition of \isa{xor} by the
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   152
  following specifies an Isabelle symbol for the new operator:%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   153
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   154
\isamarkuptrue%
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   155
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   156
\isadelimML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   157
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   158
\endisadelimML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   159
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   160
\isatagML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   161
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   162
\endisatagML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   163
{\isafoldML}%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   164
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   165
\isadelimML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   166
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   167
\endisadelimML
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   168
\isacommand{definition}\isamarkupfalse%
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   169
\ xor\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}bool\ {\isasymRightarrow}\ bool\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymoplus}{\isachardoublequoteclose}\ {\isadigit{6}}{\isadigit{0}}{\isacharparenright}\isanewline
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   170
\isakeyword{where}\ {\isachardoublequoteopen}A\ {\isasymoplus}\ B\ {\isasymequiv}\ {\isacharparenleft}A\ {\isasymand}\ {\isasymnot}\ B{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}{\isasymnot}\ A\ {\isasymand}\ B{\isacharparenright}{\isachardoublequoteclose}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   171
\begin{isamarkuptext}%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   172
\noindent The X-Symbol package within Proof~General provides several
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   173
  input methods to enter \isa{{\isasymoplus}} in the text.  If all fails one may
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   174
  just type a named entity \verb,\,\verb,<oplus>, by hand; the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   175
  corresponding symbol will be displayed after further input.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   176
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   177
  More flexible is to provide alternative syntax forms
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   178
  through the \bfindex{print mode} concept~\cite{isabelle-ref}.  By
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   179
  convention, the mode of ``$xsymbols$'' is enabled whenever
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   180
  Proof~General's X-Symbol mode or {\LaTeX} output is active.  Now
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   181
  consider the following hybrid declaration of \isa{xor}:%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   182
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   183
\isamarkuptrue%
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   184
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   185
\isadelimML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   186
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   187
\endisadelimML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   188
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   189
\isatagML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   190
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   191
\endisatagML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   192
{\isafoldML}%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   193
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   194
\isadelimML
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   195
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   196
\endisadelimML
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   197
\isacommand{definition}\isamarkupfalse%
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   198
\ xor\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}bool\ {\isasymRightarrow}\ bool\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharplus}{\isacharbrackright}{\isasymignore}{\isachardoublequoteclose}\ {\isadigit{6}}{\isadigit{0}}{\isacharparenright}\isanewline
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   199
\isakeyword{where}\ {\isachardoublequoteopen}A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}{\isasymignore}\ B\ {\isasymequiv}\ {\isacharparenleft}A\ {\isasymand}\ {\isasymnot}\ B{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}{\isasymnot}\ A\ {\isasymand}\ B{\isacharparenright}{\isachardoublequoteclose}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   200
\isanewline
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   201
\isacommand{notation}\isamarkupfalse%
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   202
\ {\isacharparenleft}xsymbols{\isacharparenright}\ xor\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymoplus}{\isasymignore}{\isachardoublequoteclose}\ {\isadigit{6}}{\isadigit{0}}{\isacharparenright}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   203
\begin{isamarkuptext}%
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   204
\noindent
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   205
The \commdx{notation} command associates a mixfix
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   206
annotation with a known constant.  The print mode specification,
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   207
here \isa{{\isacharparenleft}xsymbols{\isacharparenright}}, is optional.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   208
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   209
We may now write \isa{A\ {\isacharbrackleft}{\isacharplus}{\isacharbrackright}\ B} or \isa{A\ {\isasymoplus}\ B} in input, while
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   210
output uses the nicer syntax of $xsymbols$ whenever that print mode is
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   211
active.  Such an arrangement is particularly useful for interactive
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   212
development, where users may type ASCII text and see mathematical
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   213
symbols displayed during proofs.%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   214
\end{isamarkuptext}%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
   215
\isamarkuptrue%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   216
%
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   217
\isamarkupsubsection{Prefix Annotations%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   218
}
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
   219
\isamarkuptrue%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   220
%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   221
\begin{isamarkuptext}%
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   222
Prefix syntax annotations\index{prefix annotation} are another form
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   223
  of mixfixes \cite{isabelle-ref}, without any template arguments or
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   224
  priorities --- just some literal syntax.  The following example
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   225
  associates common symbols with the constructors of a datatype.%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   226
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   227
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   228
\isacommand{datatype}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   229
\ currency\ {\isacharequal}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   230
\ \ \ \ Euro\ nat\ \ \ \ {\isacharparenleft}{\isachardoublequoteopen}{\isasymeuro}{\isachardoublequoteclose}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   231
\ \ {\isacharbar}\ Pounds\ nat\ \ {\isacharparenleft}{\isachardoublequoteopen}{\isasympounds}{\isachardoublequoteclose}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   232
\ \ {\isacharbar}\ Yen\ nat\ \ \ \ \ {\isacharparenleft}{\isachardoublequoteopen}{\isasymyen}{\isachardoublequoteclose}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   233
\ \ {\isacharbar}\ Dollar\ nat\ \ {\isacharparenleft}{\isachardoublequoteopen}{\isachardollar}{\isachardoublequoteclose}{\isacharparenright}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   234
\begin{isamarkuptext}%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   235
\noindent Here the mixfix annotations on the rightmost column happen
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   236
  to consist of a single Isabelle symbol each: \verb,\,\verb,<euro>,,
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   237
  \verb,\,\verb,<pounds>,, \verb,\,\verb,<yen>,, and \verb,$,.  Recall
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   238
  that a constructor like \isa{Euro} actually is a function \isa{nat\ {\isasymRightarrow}\ currency}.  The expression \isa{Euro\ {\isadigit{1}}{\isadigit{0}}} will be
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   239
  printed as \isa{{\isasymeuro}\ {\isadigit{1}}{\isadigit{0}}}; only the head of the application is
12743
wenzelm
parents: 12686
diff changeset
   240
  subject to our concrete syntax.  This rather simple form already
wenzelm
parents: 12686
diff changeset
   241
  achieves conformance with notational standards of the European
wenzelm
parents: 12686
diff changeset
   242
  Commission.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   243
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   244
  Prefix syntax works the same way for other commands that introduce new constants, e.g. \isakeyword{primrec}.%
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   245
\end{isamarkuptext}%
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   246
\isamarkuptrue%
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   247
%
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   248
\isamarkupsubsection{Abbreviations \label{sec:abbreviations}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   249
}
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
   250
\isamarkuptrue%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   251
%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   252
\begin{isamarkuptext}%
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   253
Mixfix syntax annotations merely decorate particular constant
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   254
application forms with concrete syntax, for instance replacing
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   255
\isa{xor\ A\ B} by \isa{A\ {\isasymoplus}\ B}.  Occasionally, the relationship
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   256
between some piece of notation and its internal form is more
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   257
complicated.  Here we need \emph{abbreviations}.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   258
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   259
Command \commdx{abbreviation} introduces an uninterpreted notational
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   260
constant as an abbreviation for a complex term. Abbreviations are
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   261
unfolded upon parsing and re-introduced upon printing. This provides a
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   262
simple mechanism for syntactic macros.
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   263
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   264
A typical use of abbreviations is to introduce relational notation for
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   265
membership in a set of pairs, replacing \isa{{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isasymin}\ sim} by
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   266
\isa{x\ {\isasymapprox}\ y}. We assume that a constant \isa{sim} of type
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   267
\isa{{\isacharparenleft}{\isacharprime}a\ {\isasymtimes}\ {\isacharprime}a{\isacharparenright}\ set} has been introduced at this point.%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   268
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   269
\isamarkuptrue%
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   270
\isacommand{abbreviation}\isamarkupfalse%
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   271
\ sim{\isadigit{2}}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \ \ {\isacharparenleft}\isakeyword{infix}\ {\isachardoublequoteopen}{\isasymapprox}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\isanewline
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   272
\isakeyword{where}\ {\isachardoublequoteopen}x\ {\isasymapprox}\ y\ \ {\isasymequiv}\ \ {\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isasymin}\ sim{\isachardoublequoteclose}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   273
\begin{isamarkuptext}%
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   274
\noindent The given meta-equality is used as a rewrite rule
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   275
after parsing (replacing \mbox{\isa{x\ {\isasymapprox}\ y}} by \isa{{\isacharparenleft}x{\isacharcomma}y{\isacharparenright}\ {\isasymin}\ sim}) and before printing (turning \isa{{\isacharparenleft}x{\isacharcomma}y{\isacharparenright}\ {\isasymin}\ sim} back into
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   276
\mbox{\isa{x\ {\isasymapprox}\ y}}). The name of the dummy constant \isa{sim{\isadigit{2}}}
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   277
does not matter, as long as it is unique.
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   278
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   279
Another common application of abbreviations is to
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   280
provide variant versions of fundamental relational expressions, such
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   281
as \isa{{\isasymnoteq}} for negated equalities.  The following declaration
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   282
stems from Isabelle/HOL itself:%
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   283
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   284
\isamarkuptrue%
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   285
\isacommand{abbreviation}\isamarkupfalse%
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   286
\ not{\isacharunderscore}equal\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isachartilde}{\isacharequal}{\isasymignore}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\isanewline
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   287
\isakeyword{where}\ {\isachardoublequoteopen}x\ {\isachartilde}{\isacharequal}{\isasymignore}\ y\ \ {\isasymequiv}\ \ {\isasymnot}\ {\isacharparenleft}x\ {\isacharequal}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   288
\isanewline
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   289
\isacommand{notation}\isamarkupfalse%
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   290
\ {\isacharparenleft}xsymbols{\isacharparenright}\ not{\isacharunderscore}equal\ {\isacharparenleft}\isakeyword{infix}\ {\isachardoublequoteopen}{\isasymnoteq}{\isasymignore}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}%
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   291
\begin{isamarkuptext}%
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   292
\noindent The notation \isa{{\isasymnoteq}} is introduced separately to restrict it
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   293
to the \emph{xsymbols} mode.
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   294
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 25401
diff changeset
   295
Abbreviations are appropriate when the defined concept is a
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   296
simple variation on an existing one.  But because of the automatic
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   297
folding and unfolding of abbreviations, they do not scale up well to
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   298
large hierarchies of concepts. Abbreviations do not replace
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   299
definitions.
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   300
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   301
Abbreviations are a simplified form of the general concept of
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   302
\emph{syntax translations}; even heavier transformations may be
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   303
written in ML \cite{isabelle-ref}.%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   304
\end{isamarkuptext}%
12627
08eee994bf99 updated;
wenzelm
parents: 11866
diff changeset
   305
\isamarkuptrue%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   306
%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   307
\isamarkupsection{Document Preparation \label{sec:document-preparation}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   308
}
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   309
\isamarkuptrue%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   310
%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   311
\begin{isamarkuptext}%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   312
Isabelle/Isar is centered around the concept of \bfindex{formal
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   313
  proof documents}\index{documents|bold}.  The outcome of a formal
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   314
  development effort is meant to be a human-readable record, presented
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   315
  as browsable PDF file or printed on paper.  The overall document
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   316
  structure follows traditional mathematical articles, with sections,
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   317
  intermediate explanations, definitions, theorems and proofs.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   318
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   319
  \medskip The Isabelle document preparation system essentially acts
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   320
  as a front-end to {\LaTeX}.  After checking specifications and
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   321
  proofs formally, the theory sources are turned into typesetting
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   322
  instructions in a schematic manner.  This lets you write authentic
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   323
  reports on theory developments with little effort: many technical
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   324
  consistency checks are handled by the system.
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   325
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   326
  Here is an example to illustrate the idea of Isabelle document
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   327
  preparation.%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   328
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   329
\isamarkuptrue%
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   330
%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   331
\begin{quotation}
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   332
%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   333
\begin{isamarkuptext}%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   334
The following datatype definition of \isa{{\isacharprime}a\ bintree} models
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   335
  binary trees with nodes being decorated by elements of type \isa{{\isacharprime}a}.%
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   336
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   337
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   338
\isacommand{datatype}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   339
\ {\isacharprime}a\ bintree\ {\isacharequal}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   340
\ \ \ \ \ Leaf\ {\isacharbar}\ Branch\ {\isacharprime}a\ \ {\isachardoublequoteopen}{\isacharprime}a\ bintree{\isachardoublequoteclose}\ \ {\isachardoublequoteopen}{\isacharprime}a\ bintree{\isachardoublequoteclose}%
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   341
\begin{isamarkuptext}%
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   342
\noindent The datatype induction rule generated here is of the form
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   343
  \begin{isabelle}%
12749
c0ce43e809fd updated;
wenzelm
parents: 12747
diff changeset
   344
\ {\isasymlbrakk}P\ Leaf{\isacharsemicolon}\isanewline
14379
ea10a8c3e9cf updated links to the old ftp site
paulson
parents: 14353
diff changeset
   345
\isaindent{\ \ }{\isasymAnd}a\ bintree{\isadigit{1}}\ bintree{\isadigit{2}}{\isachardot}\isanewline
ea10a8c3e9cf updated links to the old ftp site
paulson
parents: 14353
diff changeset
   346
\isaindent{\ \ \ \ \ }{\isasymlbrakk}P\ bintree{\isadigit{1}}{\isacharsemicolon}\ P\ bintree{\isadigit{2}}{\isasymrbrakk}\ {\isasymLongrightarrow}\ P\ {\isacharparenleft}Branch\ a\ bintree{\isadigit{1}}\ bintree{\isadigit{2}}{\isacharparenright}{\isasymrbrakk}\isanewline
12749
c0ce43e809fd updated;
wenzelm
parents: 12747
diff changeset
   347
\isaindent{\ }{\isasymLongrightarrow}\ P\ bintree%
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   348
\end{isabelle}%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   349
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   350
\isamarkuptrue%
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   351
%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   352
\end{quotation}
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   353
%
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   354
\begin{isamarkuptext}%
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   355
\noindent The above document output has been produced as follows:
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   356
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   357
  \begin{ttbox}
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   358
  text {\ttlbrace}*
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   359
    The following datatype definition of {\at}{\ttlbrace}text "'a bintree"{\ttrbrace}
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   360
    models binary trees with nodes being decorated by elements
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   361
    of type {\at}{\ttlbrace}typ 'a{\ttrbrace}.
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   362
  *{\ttrbrace}
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   363
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   364
  datatype 'a bintree =
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   365
    Leaf | Branch 'a  "'a bintree"  "'a bintree"
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   366
  \end{ttbox}
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   367
  \begin{ttbox}
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   368
  text {\ttlbrace}*
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   369
    {\ttback}noindent The datatype induction rule generated here is
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   370
    of the form {\at}{\ttlbrace}thm [display] bintree.induct [no_vars]{\ttrbrace}
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   371
  *{\ttrbrace}
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   372
  \end{ttbox}\vspace{-\medskipamount}
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   373
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   374
  \noindent Here we have augmented the theory by formal comments
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   375
  (using \isakeyword{text} blocks), the informal parts may again refer
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   376
  to formal entities by means of ``antiquotations'' (such as
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   377
  \texttt{\at}\verb,{text "'a bintree"}, or
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   378
  \texttt{\at}\verb,{typ 'a},), see also \S\ref{sec:doc-prep-text}.%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   379
\end{isamarkuptext}%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   380
\isamarkuptrue%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   381
%
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   382
\isamarkupsubsection{Isabelle Sessions%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   383
}
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   384
\isamarkuptrue%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   385
%
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   386
\begin{isamarkuptext}%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   387
In contrast to the highly interactive mode of Isabelle/Isar theory
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   388
  development, the document preparation stage essentially works in
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   389
  batch-mode.  An Isabelle \bfindex{session} consists of a collection
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   390
  of source files that may contribute to an output document.  Each
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   391
  session is derived from a single parent, usually an object-logic
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   392
  image like \texttt{HOL}.  This results in an overall tree structure,
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   393
  which is reflected by the output location in the file system
29297
62e0f892e525 updated generated files;
wenzelm
parents: 28838
diff changeset
   394
  (usually rooted at \verb,~/.isabelle/browser_info,).
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   395
12684
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   396
  \medskip The easiest way to manage Isabelle sessions is via
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   397
  \texttt{isabelle mkdir} (generates an initial session source setup)
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   398
  and \texttt{isabelle make} (run sessions controlled by
12684
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   399
  \texttt{IsaMakefile}).  For example, a new session
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   400
  \texttt{MySession} derived from \texttt{HOL} may be produced as
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   401
  follows:
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   402
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   403
\begin{verbatim}
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   404
  isabelle mkdir HOL MySession
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   405
  isabelle make
12684
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   406
\end{verbatim}
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   407
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   408
  The \texttt{isabelle make} job also informs about the file-system
12686
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   409
  location of the ultimate results.  The above dry run should be able
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   410
  to produce some \texttt{document.pdf} (with dummy title, empty table
12743
wenzelm
parents: 12686
diff changeset
   411
  of contents etc.).  Any failure at this stage usually indicates
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   412
  technical problems of the {\LaTeX} installation.
12684
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   413
6095c8febf7c updated;
wenzelm
parents: 12682
diff changeset
   414
  \medskip The detailed arrangement of the session sources is as
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   415
  follows.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   416
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   417
  \begin{itemize}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   418
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   419
  \item Directory \texttt{MySession} holds the required theory files
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   420
  $T@1$\texttt{.thy}, \dots, $T@n$\texttt{.thy}.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   421
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   422
  \item File \texttt{MySession/ROOT.ML} holds appropriate ML commands
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   423
  for loading all wanted theories, usually just
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   424
  ``\texttt{use_thy"$T@i$";}'' for any $T@i$ in leaf position of the
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   425
  dependency graph.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   426
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   427
  \item Directory \texttt{MySession/document} contains everything
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   428
  required for the {\LaTeX} stage; only \texttt{root.tex} needs to be
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   429
  provided initially.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   430
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   431
  The latter file holds appropriate {\LaTeX} code to commence a
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   432
  document (\verb,\documentclass, etc.), and to include the generated
12743
wenzelm
parents: 12686
diff changeset
   433
  files $T@i$\texttt{.tex} for each theory.  Isabelle will generate a
wenzelm
parents: 12686
diff changeset
   434
  file \texttt{session.tex} holding {\LaTeX} commands to include all
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   435
  generated theory output files in topologically sorted order, so
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   436
  \verb,\input{session}, in the body of \texttt{root.tex} does the job
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   437
  in most situations.
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   438
12682
72ec0a86bb23 updated;
wenzelm
parents: 12674
diff changeset
   439
  \item \texttt{IsaMakefile} holds appropriate dependencies and
72ec0a86bb23 updated;
wenzelm
parents: 12674
diff changeset
   440
  invocations of Isabelle tools to control the batch job.  In fact,
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   441
  several sessions may be managed by the same \texttt{IsaMakefile}.
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   442
  See the \emph{Isabelle System Manual} \cite{isabelle-sys} 
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   443
  for further details, especially on
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   444
  \texttt{isabelle usedir} and \texttt{isabelle make}.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   445
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   446
  \end{itemize}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   447
12686
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   448
  One may now start to populate the directory \texttt{MySession}, and
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   449
  the file \texttt{MySession/ROOT.ML} accordingly.  The file
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   450
  \texttt{MySession/document/root.tex} should also be adapted at some
12686
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   451
  point; the default version is mostly self-explanatory.  Note that
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   452
  \verb,\isabellestyle, enables fine-tuning of the general appearance
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   453
  of characters and mathematical symbols (see also
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   454
  \S\ref{sec:doc-prep-symbols}).
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   455
12686
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   456
  Especially observe the included {\LaTeX} packages \texttt{isabelle}
2b0aa746e4b8 updated;
wenzelm
parents: 12684
diff changeset
   457
  (mandatory), \texttt{isabellesym} (required for mathematical
12743
wenzelm
parents: 12686
diff changeset
   458
  symbols), and the final \texttt{pdfsetup} (provides sane defaults
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   459
  for \texttt{hyperref}, including URL markup).  All three are
12743
wenzelm
parents: 12686
diff changeset
   460
  distributed with Isabelle. Further packages may be required in
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   461
  particular applications, say for unusual mathematical symbols.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   462
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   463
  \medskip Any additional files for the {\LaTeX} stage go into the
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   464
  \texttt{MySession/document} directory as well.  In particular,
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   465
  adding a file named \texttt{root.bib} causes an automatic run of
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   466
  \texttt{bibtex} to process a bibliographic database; see also
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   467
  \texttt{isabelle document} \cite{isabelle-sys}.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   468
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   469
  \medskip Any failure of the document preparation phase in an
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   470
  Isabelle batch session leaves the generated sources in their target
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   471
  location, identified by the accompanying error message.  This lets
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   472
  you trace {\LaTeX} problems with the generated files at hand.%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   473
\end{isamarkuptext}%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   474
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   475
%
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   476
\isamarkupsubsection{Structure Markup%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   477
}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   478
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   479
%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   480
\begin{isamarkuptext}%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   481
The large-scale structure of Isabelle documents follows existing
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   482
  {\LaTeX} conventions, with chapters, sections, subsubsections etc.
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   483
  The Isar language includes separate \bfindex{markup commands}, which
12682
72ec0a86bb23 updated;
wenzelm
parents: 12674
diff changeset
   484
  do not affect the formal meaning of a theory (or proof), but result
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   485
  in corresponding {\LaTeX} elements.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   486
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   487
  There are separate markup commands depending on the textual context:
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   488
  in header position (just before \isakeyword{theory}), within the
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   489
  theory body, or within a proof.  The header needs to be treated
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   490
  specially here, since ordinary theory and proof commands may only
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   491
  occur \emph{after} the initial \isakeyword{theory} specification.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   492
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   493
  \medskip
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   494
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   495
  \begin{tabular}{llll}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   496
  header & theory & proof & default meaning \\\hline
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   497
    & \commdx{chapter} & & \verb,\chapter, \\
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   498
  \commdx{header} & \commdx{section} & \commdx{sect} & \verb,\section, \\
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   499
    & \commdx{subsection} & \commdx{subsect} & \verb,\subsection, \\
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   500
    & \commdx{subsubsection} & \commdx{subsubsect} & \verb,\subsubsection, \\
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   501
  \end{tabular}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   502
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   503
  \medskip
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   504
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   505
  From the Isabelle perspective, each markup command takes a single
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   506
  $text$ argument (delimited by \verb,",~\isa{{\isasymdots}}~\verb,", or
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   507
  \verb,{,\verb,*,~\isa{{\isasymdots}}~\verb,*,\verb,},).  After stripping any
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   508
  surrounding white space, the argument is passed to a {\LaTeX} macro
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   509
  \verb,\isamarkupXYZ, for command \isakeyword{XYZ}.  These macros are
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   510
  defined in \verb,isabelle.sty, according to the meaning given in the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   511
  rightmost column above.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   512
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   513
  \medskip The following source fragment illustrates structure markup
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   514
  of a theory.  Note that {\LaTeX} labels may be included inside of
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   515
  section headings as well.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   516
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   517
  \begin{ttbox}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   518
  header {\ttlbrace}* Some properties of Foo Bar elements *{\ttrbrace}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   519
15136
1275417e3930 Adapted text to new theory header syntax.
nipkow
parents: 14486
diff changeset
   520
  theory Foo_Bar
15141
a95c2ff210ba import -> imports
nipkow
parents: 15136
diff changeset
   521
  imports Main
15136
1275417e3930 Adapted text to new theory header syntax.
nipkow
parents: 14486
diff changeset
   522
  begin
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   523
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   524
  subsection {\ttlbrace}* Basic definitions *{\ttrbrace}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   525
27027
63f0b638355c *** empty log message ***
nipkow
parents: 27015
diff changeset
   526
  definition foo :: \dots
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   527
27027
63f0b638355c *** empty log message ***
nipkow
parents: 27015
diff changeset
   528
  definition bar :: \dots
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   529
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   530
  subsection {\ttlbrace}* Derived rules *{\ttrbrace}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   531
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   532
  lemma fooI: \dots
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   533
  lemma fooE: \dots
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   534
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   535
  subsection {\ttlbrace}* Main theorem {\ttback}label{\ttlbrace}sec:main-theorem{\ttrbrace} *{\ttrbrace}
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   536
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   537
  theorem main: \dots
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   538
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   539
  end
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   540
  \end{ttbox}\vspace{-\medskipamount}
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   541
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   542
  You may occasionally want to change the meaning of markup commands,
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   543
  say via \verb,\renewcommand, in \texttt{root.tex}.  For example,
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   544
  \verb,\isamarkupheader, is a good candidate for some tuning.  We
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   545
  could move it up in the hierarchy to become \verb,\chapter,.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   546
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   547
\begin{verbatim}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   548
  \renewcommand{\isamarkupheader}[1]{\chapter{#1}}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   549
\end{verbatim}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   550
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   551
  \noindent Now we must change the document class given in
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   552
  \texttt{root.tex} to something that supports chapters.  A suitable
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   553
  command is \verb,\documentclass{report},.
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   554
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   555
  \medskip The {\LaTeX} macro \verb,\isabellecontext, is maintained to
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   556
  hold the name of the current theory context.  This is particularly
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   557
  useful for document headings:
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   558
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   559
\begin{verbatim}
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   560
  \renewcommand{\isamarkupheader}[1]
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   561
  {\chapter{#1}\markright{THEORY~\isabellecontext}}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   562
\end{verbatim}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   563
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   564
  \noindent Make sure to include something like
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   565
  \verb,\pagestyle{headings}, in \texttt{root.tex}; the document
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   566
  should have more than two pages to show the effect.%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   567
\end{isamarkuptext}%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   568
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   569
%
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   570
\isamarkupsubsection{Formal Comments and Antiquotations \label{sec:doc-prep-text}%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   571
}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   572
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   573
%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   574
\begin{isamarkuptext}%
12745
d7b4d8c9bf86 updated;
wenzelm
parents: 12743
diff changeset
   575
Isabelle \bfindex{source comments}, which are of the form
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   576
  \verb,(,\verb,*,~\isa{{\isasymdots}}~\verb,*,\verb,),, essentially act like
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   577
  white space and do not really contribute to the content.  They
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   578
  mainly serve technical purposes to mark certain oddities in the raw
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   579
  input text.  In contrast, \bfindex{formal comments} are portions of
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   580
  text that are associated with formal Isabelle/Isar commands
12682
72ec0a86bb23 updated;
wenzelm
parents: 12674
diff changeset
   581
  (\bfindex{marginal comments}), or as standalone paragraphs within a
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   582
  theory or proof context (\bfindex{text blocks}).
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   583
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   584
  \medskip Marginal comments are part of each command's concrete
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   585
  syntax \cite{isabelle-ref}; the common form is ``\verb,--,~$text$''
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   586
  where $text$ is delimited by \verb,",\isa{{\isasymdots}}\verb,", or
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   587
  \verb,{,\verb,*,~\isa{{\isasymdots}}~\verb,*,\verb,}, as before.  Multiple
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   588
  marginal comments may be given at the same time.  Here is a simple
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   589
  example:%
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   590
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   591
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   592
\isacommand{lemma}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   593
\ {\isachardoublequoteopen}A\ {\isacharminus}{\isacharminus}{\isachargreater}\ A{\isachardoublequoteclose}\isanewline
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   594
\ \ %
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   595
\isamarkupcmt{a triviality of propositional logic%
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   596
}
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   597
\isanewline
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   598
\ \ %
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   599
\isamarkupcmt{(should not really bother)%
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   600
}
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   601
\isanewline
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   602
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   603
\isadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   604
\ \ %
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   605
\endisadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   606
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   607
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   608
\isacommand{by}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   609
\ {\isacharparenleft}rule\ impI{\isacharparenright}\ %
16069
3f2a9f400168 *** empty log message ***
nipkow
parents: 15481
diff changeset
   610
\isamarkupcmt{implicit assumption step involved here%
3f2a9f400168 *** empty log message ***
nipkow
parents: 15481
diff changeset
   611
}
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   612
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   613
\endisatagproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   614
{\isafoldproof}%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   615
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   616
\isadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   617
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   618
\endisadelimproof
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   619
%
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   620
\begin{isamarkuptext}%
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   621
\noindent The above output has been produced as follows:
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   622
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   623
\begin{verbatim}
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   624
  lemma "A --> A"
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   625
    -- "a triviality of propositional logic"
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   626
    -- "(should not really bother)"
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   627
    by (rule impI) -- "implicit assumption step involved here"
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   628
\end{verbatim}
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   629
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   630
  From the {\LaTeX} viewpoint, ``\verb,--,'' acts like a markup
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   631
  command, associated with the macro \verb,\isamarkupcmt, (taking a
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   632
  single argument).
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   633
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   634
  \medskip Text blocks are introduced by the commands \bfindex{text}
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   635
  and \bfindex{txt}, for theory and proof contexts, respectively.
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   636
  Each takes again a single $text$ argument, which is interpreted as a
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   637
  free-form paragraph in {\LaTeX} (surrounded by some additional
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   638
  vertical space).  This behavior may be changed by redefining the
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   639
  {\LaTeX} environments of \verb,isamarkuptext, or
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   640
  \verb,isamarkuptxt,, respectively (via \verb,\renewenvironment,) The
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   641
  text style of the body is determined by \verb,\isastyletext, and
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   642
  \verb,\isastyletxt,; the default setup uses a smaller font within
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   643
  proofs.  This may be changed as follows:
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   644
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   645
\begin{verbatim}
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   646
  \renewcommand{\isastyletxt}{\isastyletext}
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   647
\end{verbatim}
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   648
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   649
  \medskip The $text$ part of Isabelle markup commands essentially
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   650
  inserts \emph{quoted material} into a formal text, mainly for
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   651
  instruction of the reader.  An \bfindex{antiquotation} is again a
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   652
  formal object embedded into such an informal portion.  The
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   653
  interpretation of antiquotations is limited to some well-formedness
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   654
  checks, with the result being pretty printed to the resulting
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   655
  document.  Quoted text blocks together with antiquotations provide
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   656
  an attractive means of referring to formal entities, with good
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   657
  confidence in getting the technical details right (especially syntax
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   658
  and types).
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   659
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   660
  The general syntax of antiquotations is as follows:
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   661
  \texttt{{\at}{\ttlbrace}$name$ $arguments${\ttrbrace}}, or
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   662
  \texttt{{\at}{\ttlbrace}$name$ [$options$] $arguments${\ttrbrace}}
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   663
  for a comma-separated list of options consisting of a $name$ or
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   664
  \texttt{$name$=$value$} each.  The syntax of $arguments$ depends on
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   665
  the kind of antiquotation, it generally follows the same conventions
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   666
  for types, terms, or theorems as in the formal part of a theory.
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   667
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   668
  \medskip This sentence demonstrates quotations and antiquotations:
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   669
  \isa{{\isasymlambda}x\ y{\isachardot}\ x} is a well-typed term.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   670
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   671
  \medskip\noindent The output above was produced as follows:
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   672
  \begin{ttbox}
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   673
text {\ttlbrace}*
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   674
  This sentence demonstrates quotations and antiquotations:
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   675
  {\at}{\ttlbrace}term "%x y. x"{\ttrbrace} is a well-typed term.
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   676
*{\ttrbrace}
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   677
  \end{ttbox}\vspace{-\medskipamount}
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   678
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   679
  The notational change from the ASCII character~\verb,%, to the
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   680
  symbol~\isa{{\isasymlambda}} reveals that Isabelle printed this term, after
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   681
  parsing and type-checking.  Document preparation enables symbolic
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   682
  output by default.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   683
16523
f8a734dc0fbc *** empty log message ***
nipkow
parents: 16069
diff changeset
   684
  \medskip The next example includes an option to show the type of all
f8a734dc0fbc *** empty log message ***
nipkow
parents: 16069
diff changeset
   685
  variables.  The antiquotation
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   686
  \texttt{{\at}}\verb,{term [show_types] "%x y. x"}, produces the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   687
  output \isa{{\isasymlambda}{\isacharparenleft}x{\isasymColon}{\isacharprime}a{\isacharparenright}\ y{\isasymColon}{\isacharprime}b{\isachardot}\ x}.  Type inference has figured
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   688
  out the most general typings in the present theory context.  Terms
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   689
  may acquire different typings due to constraints imposed by their
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   690
  environment; within a proof, for example, variables are given the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   691
  same types as they have in the main goal statement.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   692
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   693
  \medskip Several further kinds of antiquotations and options are
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   694
  available \cite{isabelle-sys}.  Here are a few commonly used
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   695
  combinations:
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   696
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   697
  \medskip
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   698
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   699
  \begin{tabular}{ll}
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   700
  \texttt{\at}\verb,{typ,~$\tau$\verb,}, & print type $\tau$ \\
25338
6eb185959aec updated to notation and abbreviation
nipkow
parents: 17196
diff changeset
   701
  \texttt{\at}\verb,{const,~$c$\verb,}, & check existence of $c$ and print it \\
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   702
  \texttt{\at}\verb,{term,~$t$\verb,}, & print term $t$ \\
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   703
  \texttt{\at}\verb,{prop,~$\phi$\verb,}, & print proposition $\phi$ \\
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   704
  \texttt{\at}\verb,{prop [display],~$\phi$\verb,}, & print large proposition $\phi$ (with linebreaks) \\
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   705
  \texttt{\at}\verb,{prop [source],~$\phi$\verb,}, & check proposition $\phi$, print its input \\
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   706
  \texttt{\at}\verb,{thm,~$a$\verb,}, & print fact $a$ \\
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   707
  \texttt{\at}\verb,{thm,~$a$~\verb,[no_vars]}, & print fact $a$, fixing schematic variables \\
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   708
  \texttt{\at}\verb,{thm [source],~$a$\verb,}, & check availability of fact $a$, print its name \\
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   709
  \texttt{\at}\verb,{text,~$s$\verb,}, & print uninterpreted text $s$ \\
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   710
  \end{tabular}
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   711
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   712
  \medskip
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   713
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   714
  Note that \attrdx{no_vars} given above is \emph{not} an
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   715
  antiquotation option, but an attribute of the theorem argument given
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   716
  here.  This might be useful with a diagnostic command like
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   717
  \isakeyword{thm}, too.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   718
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   719
  \medskip The \texttt{\at}\verb,{text, $s$\verb,}, antiquotation is
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   720
  particularly interesting.  Embedding uninterpreted text within an
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   721
  informal body might appear useless at first sight.  Here the key
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   722
  virtue is that the string $s$ is processed as Isabelle output,
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   723
  interpreting Isabelle symbols appropriately.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   724
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   725
  For example, \texttt{\at}\verb,{text "\<forall>\<exists>"}, produces \isa{{\isasymforall}{\isasymexists}}, according to the standard interpretation of these symbol
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   726
  (cf.\ \S\ref{sec:doc-prep-symbols}).  Thus we achieve consistent
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   727
  mathematical notation in both the formal and informal parts of the
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   728
  document very easily, independently of the term language of
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   729
  Isabelle.  Manual {\LaTeX} code would leave more control over the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   730
  typesetting, but is also slightly more tedious.%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   731
\end{isamarkuptext}%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   732
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   733
%
12674
wenzelm
parents: 12673
diff changeset
   734
\isamarkupsubsection{Interpretation of Symbols \label{sec:doc-prep-symbols}%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   735
}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   736
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   737
%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   738
\begin{isamarkuptext}%
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   739
As has been pointed out before (\S\ref{sec:syntax-symbols}),
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   740
  Isabelle symbols are the smallest syntactic entities --- a
12682
72ec0a86bb23 updated;
wenzelm
parents: 12674
diff changeset
   741
  straightforward generalization of ASCII characters.  While Isabelle
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   742
  does not impose any interpretation of the infinite collection of
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   743
  named symbols, {\LaTeX} documents use canonical glyphs for certain
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   744
  standard symbols \cite{isabelle-isar-ref}.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   745
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   746
  The {\LaTeX} code produced from Isabelle text follows a simple
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   747
  scheme.  You can tune the final appearance by redefining certain
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   748
  macros, say in \texttt{root.tex} of the document.
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   749
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   750
  \begin{enumerate}
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   751
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   752
  \item 7-bit ASCII characters: letters \texttt{A\dots Z} and
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   753
  \texttt{a\dots z} are output directly, digits are passed as an
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   754
  argument to the \verb,\isadigit, macro, other characters are
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   755
  replaced by specifically named macros of the form
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   756
  \verb,\isacharXYZ,.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   757
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   758
  \item Named symbols: \verb,\,\verb,<XYZ>, is turned into
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   759
  \verb,{\isasymXYZ},; note the additional braces.
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   760
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   761
  \item Named control symbols: \verb,\,\verb,<^XYZ>, is turned into
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   762
  \verb,\isactrlXYZ,; subsequent symbols may act as arguments if the
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   763
  control macro is defined accordingly.
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   764
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   765
  \end{enumerate}
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   766
12764
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   767
  You may occasionally wish to give new {\LaTeX} interpretations of
b43333dc6e7d stylistic changes
paulson
parents: 12751
diff changeset
   768
  named symbols.  This merely requires an appropriate definition of
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   769
  \verb,\isasymXYZ,, for \verb,\,\verb,<XYZ>, (see
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   770
  \texttt{isabelle.sty} for working examples).  Control symbols are
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   771
  slightly more difficult to get right, though.
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   772
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   773
  \medskip The \verb,\isabellestyle, macro provides a high-level
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   774
  interface to tune the general appearance of individual symbols.  For
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   775
  example, \verb,\isabellestyle{it}, uses the italics text style to
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   776
  mimic the general appearance of the {\LaTeX} math mode; double
12743
wenzelm
parents: 12686
diff changeset
   777
  quotes are not printed at all.  The resulting quality of typesetting
wenzelm
parents: 12686
diff changeset
   778
  is quite good, so this should be the default style for work that
wenzelm
parents: 12686
diff changeset
   779
  gets distributed to a broader audience.%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   780
\end{isamarkuptext}%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   781
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   782
%
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   783
\isamarkupsubsection{Suppressing Output \label{sec:doc-prep-suppress}%
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   784
}
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   785
\isamarkuptrue%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   786
%
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   787
\begin{isamarkuptext}%
12749
c0ce43e809fd updated;
wenzelm
parents: 12747
diff changeset
   788
By default, Isabelle's document system generates a {\LaTeX} file for
c0ce43e809fd updated;
wenzelm
parents: 12747
diff changeset
   789
  each theory that gets loaded while running the session.  The
c0ce43e809fd updated;
wenzelm
parents: 12747
diff changeset
   790
  generated \texttt{session.tex} will include all of these in order of
c0ce43e809fd updated;
wenzelm
parents: 12747
diff changeset
   791
  appearance, which in turn gets included by the standard
12743
wenzelm
parents: 12686
diff changeset
   792
  \texttt{root.tex}.  Certainly one may change the order or suppress
12747
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   793
  unwanted theories by ignoring \texttt{session.tex} and load
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   794
  individual files directly in \texttt{root.tex}.  On the other hand,
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   795
  such an arrangement requires additional maintenance whenever the
cc59ceb0bcb4 updated;
wenzelm
parents: 12745
diff changeset
   796
  collection of theories changes.
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   797
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   798
  Alternatively, one may tune the theory loading process in
12652
2d136f05e164 updated;
wenzelm
parents: 12649
diff changeset
   799
  \texttt{ROOT.ML} itself: traversal of the theory dependency graph
12671
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   800
  may be fine-tuned by adding \verb,use_thy, invocations, although
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   801
  topological sorting still has to be observed.  Moreover, the ML
bb6db6c0d4df updated;
wenzelm
parents: 12666
diff changeset
   802
  operator \verb,no_document, temporarily disables document generation
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   803
  while executing a theory loader command.  Its usage is like this:
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   804
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   805
\begin{verbatim}
12666
9842befead7a updated;
wenzelm
parents: 12658
diff changeset
   806
  no_document use_thy "T";
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   807
\end{verbatim}
12644
a107eeffd557 updated;
wenzelm
parents: 12642
diff changeset
   808
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   809
  \medskip Theory output may be suppressed more selectively, either
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   810
  via \bfindex{tagged command regions} or \bfindex{ignored material}.
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   811
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   812
  Tagged command regions works by annotating commands with named tags,
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   813
  which correspond to certain {\LaTeX} markup that tells how to treat
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   814
  particular parts of a document when doing the actual type-setting.
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   815
  By default, certain Isabelle/Isar commands are implicitly marked up
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   816
  using the predefined tags ``\emph{theory}'' (for theory begin and
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   817
  end), ``\emph{proof}'' (for proof commands), and ``\emph{ML}'' (for
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   818
  commands involving ML code).  Users may add their own tags using the
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   819
  \verb,%,\emph{tag} notation right after a command name.  In the
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   820
  subsequent example we hide a particularly irrelevant proof:%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   821
\end{isamarkuptext}%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   822
\isamarkuptrue%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   823
\isacommand{lemma}\isamarkupfalse%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   824
\ {\isachardoublequoteopen}x\ {\isacharequal}\ x{\isachardoublequoteclose}%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   825
\isadeliminvisible
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   826
\ %
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   827
\endisadeliminvisible
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   828
%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   829
\isataginvisible
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   830
\isacommand{by}\isamarkupfalse%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   831
\ {\isacharparenleft}simp{\isacharparenright}%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   832
\endisataginvisible
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   833
{\isafoldinvisible}%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   834
%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   835
\isadeliminvisible
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   836
%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   837
\endisadeliminvisible
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   838
%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   839
\begin{isamarkuptext}%
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   840
The original source has been ``\verb,lemma "x = x" by %invisible (simp),''.
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   841
  Tags observe the structure of proofs; adjacent commands with the
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   842
  same tag are joined into a single region.  The Isabelle document
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   843
  preparation system allows the user to specify how to interpret a
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   844
  tagged region, in order to keep, drop, or fold the corresponding
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   845
  parts of the document.  See the \emph{Isabelle System Manual}
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   846
  \cite{isabelle-sys} for further details, especially on
28838
d5db6dfcb34a moved table of standard Isabelle symbols to isar-ref manual;
wenzelm
parents: 27027
diff changeset
   847
  \texttt{isabelle usedir} and \texttt{isabelle document}.
12647
001d10bbc61b updated;
wenzelm
parents: 12644
diff changeset
   848
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   849
  Ignored material is specified by delimiting the original formal
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   850
  source with special source comments
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   851
  \verb,(,\verb,*,\verb,<,\verb,*,\verb,), and
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   852
  \verb,(,\verb,*,\verb,>,\verb,*,\verb,),.  These parts are stripped
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   853
  before the type-setting phase, without affecting the formal checking
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   854
  of the theory, of course.  For example, we may hide parts of a proof
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   855
  that seem unfit for general public inspection.  The following
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   856
  ``fully automatic'' proof is actually a fake:%
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   857
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   858
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   859
\isacommand{lemma}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   860
\ {\isachardoublequoteopen}x\ {\isasymnoteq}\ {\isacharparenleft}{\isadigit{0}}{\isacharcolon}{\isacharcolon}int{\isacharparenright}\ {\isasymLongrightarrow}\ {\isadigit{0}}\ {\isacharless}\ x\ {\isacharasterisk}\ x{\isachardoublequoteclose}\isanewline
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   861
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   862
\isadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   863
\ \ %
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   864
\endisadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   865
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   866
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   867
\isacommand{by}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   868
\ {\isacharparenleft}auto{\isacharparenright}%
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   869
\endisatagproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   870
{\isafoldproof}%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   871
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   872
\isadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   873
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   874
\endisadelimproof
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   875
%
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   876
\begin{isamarkuptext}%
17187
45bee2f6e61f updated;
wenzelm
parents: 17181
diff changeset
   877
\noindent The real source of the proof has been as follows:
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   878
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   879
\begin{verbatim}
14353
79f9fbef9106 Added lemmas to Ring_and_Field with slightly modified simplification rules
paulson
parents: 13791
diff changeset
   880
  by (auto(*<*)simp add: zero_less_mult_iff(*>*))
12658
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   881
\end{verbatim}
3939e7dea202 updated;
wenzelm
parents: 12652
diff changeset
   882
%(*
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12647
diff changeset
   883
12767
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   884
  \medskip Suppressing portions of printed text demands care.  You
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   885
  should not misrepresent the underlying theory development.  It is
072e9d582db0 updated;
wenzelm
parents: 12764
diff changeset
   886
  easy to invalidate the visible text by hiding references to
17196
wenzelm
parents: 17187
diff changeset
   887
  questionable axioms, for example.%
12635
e2d44df29c94 more on concrete syntax;
wenzelm
parents: 12627
diff changeset
   888
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
   889
\isamarkuptrue%
17056
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   890
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   891
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   892
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   893
\endisadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   894
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   895
\isatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   896
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   897
\endisatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   898
{\isafoldtheory}%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   899
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   900
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   901
%
05fc32a23b8b updated;
wenzelm
parents: 16523
diff changeset
   902
\endisadelimtheory
11648
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
   903
\end{isabellebody}%
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
   904
%%% Local Variables:
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
   905
%%% mode: latex
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
   906
%%% TeX-master: "root"
d78a82d112e4 *** empty log message ***
wenzelm
parents:
diff changeset
   907
%%% End: