doc-src/IsarRef/syntax.tex
author chaieb
Wed, 19 May 2004 11:23:59 +0200
changeset 14758 af3b71a46a1c
parent 14707 2d6350d7b9b7
child 14895 b9cc12a91fd3
permissions -rw-r--r--
A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller. the tactic has also changed and allows the abstaction over fuction occurences whose type is nat or int.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
     1
13048
wenzelm
parents: 13039
diff changeset
     2
\chapter{Syntax primitives}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
     3
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
     4
The rather generic framework of Isabelle/Isar syntax emerges from three main
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
     5
syntactic categories: \emph{commands} of the top-level Isar engine (covering
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
     6
theory and proof elements), \emph{methods} for general goal refinements
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
     7
(analogous to traditional ``tactics''), and \emph{attributes} for operations
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
     8
on facts (within a certain context).  Here we give a reference of basic
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
     9
syntactic entities underlying Isabelle/Isar syntax in a bottom-up manner.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    10
Concrete theory and proof language elements will be introduced later on.
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    11
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    12
\medskip
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    13
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    14
In order to get started with writing well-formed Isabelle/Isar documents, the
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    15
most important aspect to be noted is the difference of \emph{inner} versus
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    16
\emph{outer} syntax.  Inner syntax is that of Isabelle types and terms of the
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    17
logic, while outer syntax is that of Isabelle/Isar theory sources (including
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
    18
proofs).  As a general rule, inner syntax entities may occur only as
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
    19
\emph{atomic entities} within outer syntax.  For example, the string
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
    20
\texttt{"x + y"} and identifier \texttt{z} are legal term specifications
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
    21
within a theory, while \texttt{x + y} is not.
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    22
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    23
\begin{warn}
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    24
  Old-style Isabelle theories used to fake parts of the inner syntax of types,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    25
  with rather complicated rules when quotes may be omitted.  Despite the minor
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    26
  drawback of requiring quotes more often, the syntax of Isabelle/Isar is
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    27
  somewhat simpler and more robust in that respect.
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    28
\end{warn}
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    29
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    30
Printed theory documents usually omit quotes to gain readability (this is a
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    31
matter of {\LaTeX} macro setup, say via \verb,\isabellestyle,, see also
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    32
\cite{isabelle-sys}).  Experienced users of Isabelle/Isar may easily
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    33
reconstruct the lost technical information, while mere readers need not care
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    34
about quotes at all.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    35
7466
7df66ce6508a updated;
wenzelm
parents: 7430
diff changeset
    36
\medskip
7df66ce6508a updated;
wenzelm
parents: 7430
diff changeset
    37
9601
69d2fb3dc4c6 updated command termination issue;
wenzelm
parents: 9234
diff changeset
    38
Isabelle/Isar input may contain any number of input termination characters
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    39
``\texttt{;}'' (semicolon) to separate commands explicitly.  This is
9601
69d2fb3dc4c6 updated command termination issue;
wenzelm
parents: 9234
diff changeset
    40
particularly useful in interactive shell sessions to make clear where the
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    41
current command is intended to end.  Otherwise, the interpreter loop will
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    42
continue to issue a secondary prompt ``\verb,#,'' until an end-of-command is
13039
wenzelm
parents: 12976
diff changeset
    43
clearly recognized from the input syntax, e.g.\ encounter of the next command
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    44
keyword.
9601
69d2fb3dc4c6 updated command termination issue;
wenzelm
parents: 9234
diff changeset
    45
69d2fb3dc4c6 updated command termination issue;
wenzelm
parents: 9234
diff changeset
    46
Advanced interfaces such as Proof~General \cite{proofgeneral} do not require
69d2fb3dc4c6 updated command termination issue;
wenzelm
parents: 9234
diff changeset
    47
explicit semicolons, the amount of input text is determined automatically by
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    48
inspecting the present content of the Emacs text buffer.  In the printed
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    49
presentation of Isabelle/Isar documents semicolons are omitted altogether for
7981
wenzelm
parents: 7895
diff changeset
    50
readability.
7466
7df66ce6508a updated;
wenzelm
parents: 7430
diff changeset
    51
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    52
\begin{warn}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    53
  Proof~General requires certain syntax classification tables in order to
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    54
  achieve properly synchronized interaction with the Isabelle/Isar process.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    55
  These tables need to be consistent with the Isabelle version and particular
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    56
  logic image to be used in a running session (common object-logics may well
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    57
  change the outer syntax).  The standard setup should work correctly with any
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    58
  of the ``official'' logic images derived from Isabelle/HOL (including HOLCF
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    59
  etc.).  Users of alternative logics may need to tell Proof~General
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    60
  explicitly, e.g.\ by giving an option \verb,-k ZF, (in conjunction with
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    61
  \verb,-l ZF, to specify the default logic image).
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    62
\end{warn}
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    63
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    64
\section{Lexical matters}\label{sec:lex-syntax}
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    65
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    66
The Isabelle/Isar outer syntax provides token classes as presented below.
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
    67
Note that some of these coincide (by full intention) with the inner lexical
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
    68
syntax as presented in \cite{isabelle-ref}.
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
    69
9617
574ab125a03b index tokens;
wenzelm
parents: 9601
diff changeset
    70
\indexoutertoken{ident}\indexoutertoken{longident}\indexoutertoken{symident}
574ab125a03b index tokens;
wenzelm
parents: 9601
diff changeset
    71
\indexoutertoken{nat}\indexoutertoken{var}\indexoutertoken{typefree}
574ab125a03b index tokens;
wenzelm
parents: 9601
diff changeset
    72
\indexoutertoken{typevar}\indexoutertoken{string}\indexoutertoken{verbatim}
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    73
\begin{matharray}{rcl}
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    74
  ident & = & letter~quasiletter^* \\
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    75
  longident & = & ident\verb,.,ident~\dots~ident \\
8548
wenzelm
parents: 8532
diff changeset
    76
  symident & = & sym^+ ~|~ symbol \\
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    77
  nat & = & digit^+ \\
14212
cd05b503ca2d Improvements wrt rule_tac.
ballarin
parents: 13827
diff changeset
    78
  var & = & ident ~|~ \verb,?,ident ~|~ \verb,?,ident\verb,.,nat \\
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    79
  typefree & = & \verb,',ident \\
14212
cd05b503ca2d Improvements wrt rule_tac.
ballarin
parents: 13827
diff changeset
    80
  typevar & = & typefree ~|~ \verb,?,typefree ~|~ \verb,?,typefree\verb,.,nat \\
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    81
  string & = & \verb,", ~\dots~ \verb,", \\
14483
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    82
  verbatim & = & \verb,{*, ~\dots~ \verb,*}, \\[1ex]
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    83
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    84
  letter & = & sletter ~|~ xletter \\
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    85
  digit & = & \verb,0, ~|~ \dots ~|~ \verb,9, \\
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    86
  quasiletter & = & letter ~|~ digit ~|~ \verb,_, ~|~ \verb,', \\
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
    87
  sym & = & \verb,!, ~|~ \verb,#, ~|~ \verb,$, ~|~ \verb,%, ~|~ \verb,&, ~|~  %$
10160
wenzelm
parents: 10152
diff changeset
    88
   \verb,*, ~|~ \verb,+, ~|~ \verb,-, ~|~ \verb,/, ~|~ \verb,:, ~|~ \\
wenzelm
parents: 10152
diff changeset
    89
  & & \verb,<, ~|~ \verb,=, ~|~ \verb,>, ~|~ \verb,?, ~|~ \texttt{\at} ~|~
wenzelm
parents: 10152
diff changeset
    90
  \verb,^, ~|~ \verb,_, ~|~ \verb,`, ~|~ \verb,|, ~|~ \verb,~, \\
14483
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    91
  symbol & = & {\forall} ~|~ {\exists} ~|~ {\land} ~|~ {\lor} ~|~ \dots\\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    92
sletter & = & \verb,a, ~|~ \dots ~|~ \verb,z, ~|~ \verb,A, ~|~ \dots ~|~ \verb,Z, \\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    93
xletter & = & {\tt \backslash<} ~ (sletter ~|~ dletter ~|~ gletter ~|~ cletter) ~ {\tt >}\\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    94
dletter & = & \verb,aa, ~|~ \dots ~|~ \verb,zz, ~|~ \verb,AA, ~|~ \dots ~|~ \verb,ZZ, \\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    95
bletter & = & {\tt bool} ~|~ {\tt complex} ~|~ {\tt nat} ~|~ {\tt rat} ~|~ {\tt real} ~|~ {\tt int}\\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    96
cletter & = & {\tt \hat{}\, isup} ~~|~~ {\tt \hat{}\, isub}
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    97
\end{matharray}
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    98
\begin{matharray}{rcl}
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
    99
gletter & = & {\tt alpha} ~|~ {\tt beta} ~|~ {\tt gamma} ~|~ {\tt delta} ~|~ {\tt epsilon} ~|~ {\tt zeta} ~|~ {\tt eta} ~|\\ 
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   100
        &   & {\tt theta} ~|~ {\tt iota} ~|~ {\tt kappa} ~|~ {\tt mu} ~|~ {\tt nu} ~|~ {\tt xi} ~|~ {\tt pi} ~|~ {\tt rho} ~|\\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   101
        &   & {\tt sigma} ~|~ {\tt tau} ~|~ {\tt upsilon} ~|~ {\tt phi} ~|~ {\tt psi} ~|~ {\tt omega} ~|~ {\tt Gamma} ~|\\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   102
        &   & {\tt Delta} ~|~ {\tt Theta} ~|~ {\tt Lambda} ~|~ {\tt Xi} ~|~ {\tt Pi} ~|~ {\tt Sigma} ~|~ {\tt Upsilon} ~|\\
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   103
        &   & {\tt Phi} ~|~ {\tt Psi} ~|~ {\tt Omega}
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
   104
\end{matharray}
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
   105
13039
wenzelm
parents: 12976
diff changeset
   106
The syntax of $string$ admits any characters, including newlines; ``\verb|"|''
wenzelm
parents: 12976
diff changeset
   107
(double-quote) and ``\verb|\|'' (backslash) need to be escaped by a backslash.
wenzelm
parents: 12976
diff changeset
   108
Note that ML-style control characters are \emph{not} supported.  The body of
wenzelm
parents: 12976
diff changeset
   109
$verbatim$ may consist of any text not containing ``\verb|*}|''; this allows
wenzelm
parents: 12976
diff changeset
   110
convenient inclusion of quotes without further escapes.
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
   111
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   112
Comments take the form \texttt{(*~\dots~*)} and may in principle be nested,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   113
just as in ML.  Note that these are \emph{source} comments only, which are
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   114
stripped after lexical analysis of the input.  The Isar document syntax also
12879
wenzelm
parents: 12637
diff changeset
   115
provides \emph{formal comments} that are considered as part of the text (see
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   116
\S\ref{sec:comments}).
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   117
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   118
\begin{warn}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   119
  Proof~General does not handle nested comments properly; it is also unable to
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   120
  keep \verb,(*,\,/\,\verb,{*, and \verb,*),\,/\,\verb,*}, apart, despite
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   121
  their rather different meaning.  These are inherent problems of Emacs
13039
wenzelm
parents: 12976
diff changeset
   122
  legacy.  Users should not be overly aggressive about nesting or alternating
wenzelm
parents: 12976
diff changeset
   123
  these delimiters.
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   124
\end{warn}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   125
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   126
\medskip
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
   127
10160
wenzelm
parents: 10152
diff changeset
   128
Mathematical symbols such as ``$\forall$'' are represented in plain ASCII as
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   129
``\verb,\<forall>,''.  Concerning Isabelle itself, any sequence of the form
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   130
\verb,\<,$ident$\verb,>, (or \verb,\\<,$ident$\verb,>,) is a legal symbol.
14483
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   131
Greek letters \verb+\<alpha>+, \verb+\<beta>+, etc (apart from
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   132
\verb+\<lambda>+), caligraphic letters in various styles, as
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   133
well as the special \verb+\<^isub>+ and \verb+\<^isup>+ sub/superscipt
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   134
control characters are considered proper letters and can be used as
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   135
part of any identifier. 
6eac487f9cfa documented new identifier syntax
kleing
parents: 14212
diff changeset
   136
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   137
Display of appropriate glyphs is a matter of front-end tools, say the
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   138
user-interface of Proof~General plus the X-Symbol package, or the {\LaTeX}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   139
macro setup of document output.  A list of predefined Isabelle symbols is
12637
wenzelm
parents: 12618
diff changeset
   140
given in \cite[appendix~A]{isabelle-sys}.
10160
wenzelm
parents: 10152
diff changeset
   141
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   142
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   143
\section{Common syntax entities}
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   144
7335
abba35b98892 draft release;
wenzelm
parents: 7321
diff changeset
   145
Subsequently, we introduce several basic syntactic entities, such as names,
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
   146
terms, and theorem specifications, which have been factored out of the actual
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
   147
Isar language elements to be described later.
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   148
7981
wenzelm
parents: 7895
diff changeset
   149
Note that some of the basic syntactic entities introduced below (e.g.\ 
13048
wenzelm
parents: 13039
diff changeset
   150
\railqtok{name}) act much like tokens rather than plain nonterminals (e.g.\ 
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
   151
\railnonterm{sort}), especially for the sake of error messages.  E.g.\ syntax
13048
wenzelm
parents: 13039
diff changeset
   152
elements like $\CONSTS$ referring to \railqtok{name} or \railqtok{type} would
wenzelm
parents: 13039
diff changeset
   153
really report a missing name or type rather than any of the constituent
wenzelm
parents: 13039
diff changeset
   154
primitive tokens such as \railtok{ident} or \railtok{string}.
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   155
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   156
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   157
\subsection{Names}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   158
13048
wenzelm
parents: 13039
diff changeset
   159
Entity \railqtok{name} usually refers to any name of types, constants,
7167
wenzelm
parents: 7141
diff changeset
   160
theorems etc.\ that are to be \emph{declared} or \emph{defined} (so qualified
8548
wenzelm
parents: 8532
diff changeset
   161
identifiers are excluded here).  Quoted strings provide an escape for
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   162
non-identifier names or those ruled out by outer syntax keywords (e.g.\ 
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   163
\verb|"let"|).  Already existing objects are usually referenced by
13048
wenzelm
parents: 13039
diff changeset
   164
\railqtok{nameref}.
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   165
7141
a67dde8820c0 even more stuff;
wenzelm
parents: 7135
diff changeset
   166
\indexoutertoken{name}\indexoutertoken{parname}\indexoutertoken{nameref}
9617
574ab125a03b index tokens;
wenzelm
parents: 9601
diff changeset
   167
\indexoutertoken{int}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   168
\begin{rail}
8145
cdd5386eb6fe 'name' syntax includes numbers;
wenzelm
parents: 8102
diff changeset
   169
  name: ident | symident | string | nat
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   170
  ;
7167
wenzelm
parents: 7141
diff changeset
   171
  parname: '(' name ')'
7141
a67dde8820c0 even more stuff;
wenzelm
parents: 7135
diff changeset
   172
  ;
7167
wenzelm
parents: 7141
diff changeset
   173
  nameref: name | longident
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   174
  ;
9617
574ab125a03b index tokens;
wenzelm
parents: 9601
diff changeset
   175
  int: nat | '-' nat
574ab125a03b index tokens;
wenzelm
parents: 9601
diff changeset
   176
  ;
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   177
\end{rail}
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   178
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   179
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7175
diff changeset
   180
\subsection{Comments}\label{sec:comments}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   181
13048
wenzelm
parents: 13039
diff changeset
   182
Large chunks of plain \railqtok{text} are usually given \railtok{verbatim},
wenzelm
parents: 13039
diff changeset
   183
i.e.\ enclosed in \verb|{*|~\dots~\verb|*}|.  For convenience, any of the
wenzelm
parents: 13039
diff changeset
   184
smaller text units conforming to \railqtok{nameref} are admitted as well.  A
wenzelm
parents: 13039
diff changeset
   185
marginal \railnonterm{comment} is of the form \texttt{--} \railqtok{text}.
wenzelm
parents: 13039
diff changeset
   186
Any number of these may occur within Isabelle/Isar commands.
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   187
12879
wenzelm
parents: 12637
diff changeset
   188
\indexoutertoken{text}\indexouternonterm{comment}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   189
\begin{rail}
7167
wenzelm
parents: 7141
diff changeset
   190
  text: verbatim | nameref
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   191
  ;
12879
wenzelm
parents: 12637
diff changeset
   192
  comment: '--' text
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   193
  ;
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   194
\end{rail}
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   195
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   196
7335
abba35b98892 draft release;
wenzelm
parents: 7321
diff changeset
   197
\subsection{Type classes, sorts and arities}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   198
8896
c80aba8c1d5e replaced {{ }} by { };
wenzelm
parents: 8690
diff changeset
   199
Classes are specified by plain names.  Sorts have a very simple inner syntax,
c80aba8c1d5e replaced {{ }} by { };
wenzelm
parents: 8690
diff changeset
   200
which is either a single class name $c$ or a list $\{c@1, \dots, c@n\}$
c80aba8c1d5e replaced {{ }} by { };
wenzelm
parents: 8690
diff changeset
   201
referring to the intersection of these classes.  The syntax of type arities is
c80aba8c1d5e replaced {{ }} by { };
wenzelm
parents: 8690
diff changeset
   202
given directly at the outer level.
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   203
11100
34d58b1818f4 \<subseteq> syntax for classes/classrel/axclass/instance;
wenzelm
parents: 10858
diff changeset
   204
\railalias{subseteq}{\isasymsubseteq}
34d58b1818f4 \<subseteq> syntax for classes/classrel/axclass/instance;
wenzelm
parents: 10858
diff changeset
   205
\railterm{subseteq}
34d58b1818f4 \<subseteq> syntax for classes/classrel/axclass/instance;
wenzelm
parents: 10858
diff changeset
   206
14605
9de4d64eee3b 'instance' and intro_classes now handle general sorts;
wenzelm
parents: 14483
diff changeset
   207
\indexouternonterm{sort}\indexouternonterm{arity}
7135
wenzelm
parents: 7134
diff changeset
   208
\indexouternonterm{classdecl}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   209
\begin{rail}
11100
34d58b1818f4 \<subseteq> syntax for classes/classrel/axclass/instance;
wenzelm
parents: 10858
diff changeset
   210
  classdecl: name (('<' | subseteq) (nameref + ','))?
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   211
  ;
8896
c80aba8c1d5e replaced {{ }} by { };
wenzelm
parents: 8690
diff changeset
   212
  sort: nameref
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   213
  ;
7167
wenzelm
parents: 7141
diff changeset
   214
  arity: ('(' (sort + ',') ')')? sort
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   215
  ;
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   216
\end{rail}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   217
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   218
7167
wenzelm
parents: 7141
diff changeset
   219
\subsection{Types and terms}\label{sec:types-terms}
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   220
7167
wenzelm
parents: 7141
diff changeset
   221
The actual inner Isabelle syntax, that of types and terms of the logic, is far
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
   222
too sophisticated in order to be modelled explicitly at the outer theory
8548
wenzelm
parents: 8532
diff changeset
   223
level.  Basically, any such entity has to be quoted to turn it into a single
wenzelm
parents: 8532
diff changeset
   224
token (the parsing and type-checking is performed internally later).  For
wenzelm
parents: 8532
diff changeset
   225
convenience, a slightly more liberal convention is adopted: quotes may be
13039
wenzelm
parents: 12976
diff changeset
   226
omitted for any type or term that is already atomic at the outer level.  For
wenzelm
parents: 12976
diff changeset
   227
example, one may just write \texttt{x} instead of \texttt{"x"}.  Note that
8548
wenzelm
parents: 8532
diff changeset
   228
symbolic identifiers (e.g.\ \texttt{++} or $\forall$) are available as well,
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   229
provided these have not been superseded by commands or other keywords already
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   230
(e.g.\ \texttt{=} or \texttt{+}).
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   231
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   232
\indexoutertoken{type}\indexoutertoken{term}\indexoutertoken{prop}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   233
\begin{rail}
7167
wenzelm
parents: 7141
diff changeset
   234
  type: nameref | typefree | typevar
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   235
  ;
8593
68619606c5d1 fixed term syntax;
wenzelm
parents: 8548
diff changeset
   236
  term: nameref | var
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   237
  ;
7167
wenzelm
parents: 7141
diff changeset
   238
  prop: term
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   239
  ;
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   240
\end{rail}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   241
8690
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   242
Positional instantiations are indicated by giving a sequence of terms, or the
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   243
placeholder ``$\_$'' (underscore), which means to skip a position.
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   244
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   245
\indexoutertoken{inst}\indexoutertoken{insts}
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   246
\begin{rail}
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   247
  inst: underscore | term
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   248
  ;
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   249
  insts: (inst *)
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   250
  ;
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   251
\end{rail}
48786b52c8d8 added inst, insts;
wenzelm
parents: 8593
diff changeset
   252
7167
wenzelm
parents: 7141
diff changeset
   253
Type declarations and definitions usually refer to \railnonterm{typespec} on
wenzelm
parents: 7141
diff changeset
   254
the left-hand side.  This models basic type constructor application at the
wenzelm
parents: 7141
diff changeset
   255
outer syntax level.  Note that only plain postfix notation is available here,
wenzelm
parents: 7141
diff changeset
   256
but no infixes.
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   257
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   258
\indexouternonterm{typespec}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   259
\begin{rail}
7167
wenzelm
parents: 7141
diff changeset
   260
  typespec: (() | typefree | '(' ( typefree + ',' ) ')') name
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   261
  ;
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   262
\end{rail}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   263
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   264
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   265
\subsection{Mixfix annotations}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   266
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   267
Mixfix annotations specify concrete \emph{inner} syntax of Isabelle types and
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   268
terms.  Some commands such as $\TYPES$ (see \S\ref{sec:types-pure}) admit
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   269
infixes only, while $\CONSTS$ (see \S\ref{sec:consts}) and
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   270
$\isarkeyword{syntax}$ (see \S\ref{sec:syn-trans}) support the full range of
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   271
general mixfixes and binders.
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   272
12976
5cfe2941a5db contexts, locales, sym(metric);
wenzelm
parents: 12879
diff changeset
   273
\indexouternonterm{infix}\indexouternonterm{mixfix}\indexouternonterm{structmixfix}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   274
\begin{rail}
11651
201b3f76c7b7 support non-oriented infix;
wenzelm
parents: 11100
diff changeset
   275
  infix: '(' ('infix' | 'infixl' | 'infixr') string? nat ')'
7167
wenzelm
parents: 7141
diff changeset
   276
  ;
7175
wenzelm
parents: 7167
diff changeset
   277
  mixfix: infix | '(' string prios? nat? ')' | '(' 'binder' string prios? nat ')'
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   278
  ;
12976
5cfe2941a5db contexts, locales, sym(metric);
wenzelm
parents: 12879
diff changeset
   279
  structmixfix: mixfix | '(' 'structure' ')'
5cfe2941a5db contexts, locales, sym(metric);
wenzelm
parents: 12879
diff changeset
   280
  ;
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   281
7175
wenzelm
parents: 7167
diff changeset
   282
  prios: '[' (nat + ',') ']'
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   283
  ;
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   284
\end{rail}
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   285
13048
wenzelm
parents: 13039
diff changeset
   286
Here the \railtok{string} specifications refer to the actual mixfix template
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   287
(see also \cite{isabelle-ref}), which may include literal text, spacing,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   288
blocks, and arguments (denoted by ``$_$''); the special symbol \verb,\<index>,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   289
(printed as ``\i'') represents an index argument that specifies an implicit
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   290
structure reference (see also \S\ref{sec:locale}).  Infix and binder
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   291
declarations provide common abbreviations for particular mixfix declarations.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   292
So in practice, mixfix templates mostly degenerate to literal text for
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   293
concrete syntax, such as ``\verb,++,'' for an infix symbol, or ``\verb,++,\i''
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   294
for an infix of an implicit structure.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   295
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   296
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   297
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   298
\subsection{Proof methods}\label{sec:syn-meth}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   299
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   300
Proof methods are either basic ones, or expressions composed of methods via
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   301
``\texttt{,}'' (sequential composition), ``\texttt{|}'' (alternative choices),
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   302
``\texttt{?}'' (try), ``\texttt{+}'' (repeat at least once).  In practice,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   303
proof methods are usually just a comma separated list of
13048
wenzelm
parents: 13039
diff changeset
   304
\railqtok{nameref}~\railnonterm{args} specifications.  Note that parentheses
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   305
may be dropped for single method specifications (with no arguments).
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   306
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   307
\indexouternonterm{method}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   308
\begin{rail}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   309
  method: (nameref | '(' methods ')') (() | '?' | '+')
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   310
  ;
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   311
  methods: (nameref args | method) + (',' | '|')
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   312
  ;
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   313
\end{rail}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   314
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   315
Proper use of Isar proof methods does \emph{not} involve goal addressing.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   316
Nevertheless, specifying goal ranges may occasionally come in handy in
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   317
emulating tactic scripts.  Note that $[n-]$ refers to all goals, starting from
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   318
$n$.  All goals may be specified by $[!]$, which is the same as $[1-]$.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   319
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   320
\indexouternonterm{goalspec}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   321
\begin{rail}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   322
  goalspec: '[' (nat '-' nat | nat '-' | nat | '!' ) ']'
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   323
  ;
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   324
\end{rail}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   325
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   326
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   327
\subsection{Attributes and theorems}\label{sec:syn-att}
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   328
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   329
Attributes (and proof methods, see \S\ref{sec:syn-meth}) have their own
7335
abba35b98892 draft release;
wenzelm
parents: 7321
diff changeset
   330
``semi-inner'' syntax, in the sense that input conforming to
abba35b98892 draft release;
wenzelm
parents: 7321
diff changeset
   331
\railnonterm{args} below is parsed by the attribute a second time.  The
abba35b98892 draft release;
wenzelm
parents: 7321
diff changeset
   332
attribute argument specifications may be any sequence of atomic entities
abba35b98892 draft release;
wenzelm
parents: 7321
diff changeset
   333
(identifiers, strings etc.), or properly bracketed argument lists.  Below
13048
wenzelm
parents: 13039
diff changeset
   334
\railqtok{atom} refers to any atomic entity, including any \railtok{keyword}
wenzelm
parents: 13039
diff changeset
   335
conforming to \railtok{symident}.
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   336
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   337
\indexoutertoken{atom}\indexouternonterm{args}\indexouternonterm{attributes}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   338
\begin{rail}
7466
7df66ce6508a updated;
wenzelm
parents: 7430
diff changeset
   339
  atom: nameref | typefree | typevar | var | nat | keyword
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   340
  ;
8896
c80aba8c1d5e replaced {{ }} by { };
wenzelm
parents: 8690
diff changeset
   341
  arg: atom | '(' args ')' | '[' args ']'
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   342
  ;
7167
wenzelm
parents: 7141
diff changeset
   343
  args: arg *
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   344
  ;
7167
wenzelm
parents: 7141
diff changeset
   345
  attributes: '[' (nameref args * ',') ']'
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   346
  ;
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   347
\end{rail}
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   348
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7466
diff changeset
   349
Theorem specifications come in several flavors: \railnonterm{axmdecl} and
7175
wenzelm
parents: 7167
diff changeset
   350
\railnonterm{thmdecl} usually refer to axioms, assumptions or results of goal
7981
wenzelm
parents: 7895
diff changeset
   351
statements, while \railnonterm{thmdef} collects lists of existing theorems.
wenzelm
parents: 7895
diff changeset
   352
Existing theorems are given by \railnonterm{thmref} and \railnonterm{thmrefs},
wenzelm
parents: 7895
diff changeset
   353
the former requires an actual singleton result.  Any of these theorem
7175
wenzelm
parents: 7167
diff changeset
   354
specifications may include lists of attributes both on the left and right hand
13039
wenzelm
parents: 12976
diff changeset
   355
sides; attributes are applied to any immediately preceding fact.  If names are
wenzelm
parents: 12976
diff changeset
   356
omitted, the theorems are not stored within the theorem database of the theory
wenzelm
parents: 12976
diff changeset
   357
or proof context; any given attributes are still applied, though.
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   358
7135
wenzelm
parents: 7134
diff changeset
   359
\indexouternonterm{thmdecl}\indexouternonterm{axmdecl}
wenzelm
parents: 7134
diff changeset
   360
\indexouternonterm{thmdef}\indexouternonterm{thmrefs}
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   361
\begin{rail}
7167
wenzelm
parents: 7141
diff changeset
   362
  axmdecl: name attributes? ':'
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   363
  ;
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   364
  thmdecl: thmbind ':'
7135
wenzelm
parents: 7134
diff changeset
   365
  ;
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   366
  thmdef: thmbind '='
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   367
  ;
7175
wenzelm
parents: 7167
diff changeset
   368
  thmref: nameref attributes?
wenzelm
parents: 7167
diff changeset
   369
  ;
wenzelm
parents: 7167
diff changeset
   370
  thmrefs: thmref +
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   371
  ;
7167
wenzelm
parents: 7141
diff changeset
   372
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   373
  thmbind: name attributes | name | attributes
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   374
  ;
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   375
\end{rail}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   376
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   377
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   378
\subsection{Term patterns and declarations}\label{sec:term-decls}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   379
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   380
Wherever explicit propositions (or term fragments) occur in a proof text,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   381
casual binding of schematic term variables may be given specified via patterns
13039
wenzelm
parents: 12976
diff changeset
   382
of the form ``$\ISS{p@1\;\dots}{p@n}$''.  There are separate versions
13048
wenzelm
parents: 13039
diff changeset
   383
available for \railqtok{term}s and \railqtok{prop}s.  The latter provides a
wenzelm
parents: 13039
diff changeset
   384
$\CONCLNAME$ part with patterns referring the (atomic) conclusion of a rule.
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   385
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   386
\indexouternonterm{termpat}\indexouternonterm{proppat}
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   387
\begin{rail}
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   388
  termpat: '(' ('is' term +) ')'
7134
320b412e5800 more stuff;
wenzelm
parents: 7050
diff changeset
   389
  ;
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   390
  proppat: '(' (('is' prop +) | 'concl' ('is' prop +) | ('is' prop +) 'concl' ('is' prop +)) ')'
7050
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   391
  ;
c70d3402fef5 checkpoint;
wenzelm
parents: 7046
diff changeset
   392
\end{rail}
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   393
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   394
Declarations of local variables $x :: \tau$ and logical propositions $a :
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   395
\phi$ represent different views on the same principle of introducing a local
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   396
scope.  In practice, one may usually omit the typing of $vars$ (due to
13039
wenzelm
parents: 12976
diff changeset
   397
type-inference), and the naming of propositions (due to implicit references of
wenzelm
parents: 12976
diff changeset
   398
current facts).  In any case, Isar proof elements usually admit to introduce
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   399
multiple such items simultaneously.
8532
46bb6a4b3ac9 goalspec;
wenzelm
parents: 8378
diff changeset
   400
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   401
\indexouternonterm{vars}\indexouternonterm{props}
8532
46bb6a4b3ac9 goalspec;
wenzelm
parents: 8378
diff changeset
   402
\begin{rail}
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   403
  vars: (name+) ('::' type)?
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   404
  ;
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   405
  props: thmdecl? (prop proppat? +)
8532
46bb6a4b3ac9 goalspec;
wenzelm
parents: 8378
diff changeset
   406
  ;
46bb6a4b3ac9 goalspec;
wenzelm
parents: 8378
diff changeset
   407
\end{rail}
46bb6a4b3ac9 goalspec;
wenzelm
parents: 8378
diff changeset
   408
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   409
The treatment of multiple declarations corresponds to the complementary focus
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   410
of $vars$ versus $props$: in ``$x@1~\dots~x@n :: \tau$'' the typing refers to
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   411
all variables, while in $a\colon \phi@1~\dots~\phi@n$ the naming refers to all
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   412
propositions collectively.  Isar language elements that refer to $vars$ or
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   413
$props$ typically admit separate typings or namings via another level of
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   414
iteration, with explicit $\AND$ separators; e.g.\ see $\FIXNAME$ and
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   415
$\ASSUMENAME$ in \S\ref{sec:proof-context}.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   416
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   417
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   418
\subsection{Antiquotations}\label{sec:antiq}
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   419
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   420
\begin{matharray}{rcl}
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   421
  thm & : & \isarantiq \\
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   422
  prop & : & \isarantiq \\
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   423
  term & : & \isarantiq \\
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   424
  typ & : & \isarantiq \\
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   425
  text & : & \isarantiq \\
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   426
  goals & : & \isarantiq \\
10351
770356c32ad9 added antiq. subgoals
nipkow
parents: 10336
diff changeset
   427
  subgoals & : & \isarantiq \\
13827
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   428
  prf & : & \isarantiq \\
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   429
  full_prf & : & \isarantiq \\
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   430
\end{matharray}
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   431
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   432
The text body of formal comments (see also \S\ref{sec:comments}) may contain
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   433
antiquotations of logical entities, such as theorems, terms and types, which
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   434
are to be presented in the final output produced by the Isabelle document
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   435
preparation system (see also \S\ref{sec:document-prep}).
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   436
9601
69d2fb3dc4c6 updated command termination issue;
wenzelm
parents: 9234
diff changeset
   437
Thus embedding of
13039
wenzelm
parents: 12976
diff changeset
   438
``\texttt{{\at}{\ttlbrace}term~[show_types]~"f(x)~=~a~+~x"{\ttrbrace}}''
wenzelm
parents: 12976
diff changeset
   439
within a text block would cause
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   440
\isa{(f{\isasymColon}'a~{\isasymRightarrow}~'a)~(x{\isasymColon}'a)~=~(a{\isasymColon}'a)~+~x}
10160
wenzelm
parents: 10152
diff changeset
   441
to appear in the final {\LaTeX} document.  Also note that theorem
wenzelm
parents: 10152
diff changeset
   442
antiquotations may involve attributes as well.  For example,
wenzelm
parents: 10152
diff changeset
   443
\texttt{{\at}{\ttlbrace}thm~sym~[no_vars]{\ttrbrace}} would print the
wenzelm
parents: 10152
diff changeset
   444
statement where all schematic variables have been replaced by fixed ones,
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   445
which are easier to read.
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   446
9728
1546ad1c7839 added antiquotation 'name' and option 'indent';
wenzelm
parents: 9617
diff changeset
   447
\indexisarant{thm}\indexisarant{prop}\indexisarant{term}
10355
aef4f587a0e4 improved doc of "subgoals" antiquotation;
wenzelm
parents: 10351
diff changeset
   448
\indexisarant{typ}\indexisarant{text}\indexisarant{goals}\indexisarant{subgoals}
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   449
\begin{rail}
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   450
  atsign lbrace antiquotation rbrace
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   451
  ;
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   452
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   453
  antiquotation:
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   454
    'thm' options thmrefs |
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   455
    'prop' options prop |
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   456
    'term' options term |
9728
1546ad1c7839 added antiquotation 'name' and option 'indent';
wenzelm
parents: 9617
diff changeset
   457
    'typ' options type |
10319
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   458
    'text' options name |
10355
aef4f587a0e4 improved doc of "subgoals" antiquotation;
wenzelm
parents: 10351
diff changeset
   459
    'goals' options |
13827
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   460
    'subgoals' options |
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   461
    'prf' options thmrefs |
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   462
    'full\_prf' options thmrefs
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   463
  ;
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   464
  options: '[' (option * ',') ']'
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   465
  ;
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   466
  option: name | name '=' name
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   467
  ;
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   468
\end{rail}
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   469
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   470
Note that the syntax of antiquotations may \emph{not} include source comments
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   471
\texttt{(*~\dots~*)} or verbatim text \verb|{*|~\dots~\verb|*}|.
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   472
10319
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   473
\begin{descr}
13039
wenzelm
parents: 12976
diff changeset
   474
  
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   475
\item [$\at\{thm~\vec a\}$] prints theorems $\vec a$. Note that attribute
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   476
  specifications may be included as well (see also \S\ref{sec:syn-att}); the
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11651
diff changeset
   477
  $no_vars$ operation (see \S\ref{sec:misc-meth-att}) would be particularly
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   478
  useful to suppress printing of schematic variables.
13039
wenzelm
parents: 12976
diff changeset
   479
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   480
\item [$\at\{prop~\phi\}$] prints a well-typed proposition $\phi$.
13039
wenzelm
parents: 12976
diff changeset
   481
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   482
\item [$\at\{term~t\}$] prints a well-typed term $t$.
13039
wenzelm
parents: 12976
diff changeset
   483
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   484
\item [$\at\{typ~\tau\}$] prints a well-formed type $\tau$.
13039
wenzelm
parents: 12976
diff changeset
   485
  
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   486
\item [$\at\{text~s\}$] prints uninterpreted source text $s$.  This is
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   487
  particularly useful to print portions of text according to the Isabelle
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   488
  {\LaTeX} output style, without demanding well-formedness (e.g.\ small pieces
13039
wenzelm
parents: 12976
diff changeset
   489
  of terms that should not be parsed or type-checked yet).
wenzelm
parents: 12976
diff changeset
   490
  
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   491
\item [$\at\{goals\}$] prints the current \emph{dynamic} goal state.  This is
13039
wenzelm
parents: 12976
diff changeset
   492
  mainly for support of tactic-emulation scripts within Isar --- presentation
wenzelm
parents: 12976
diff changeset
   493
  of goal states does not conform to actual human-readable proof documents.
10319
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   494
  Please do not include goal states into document output unless you really
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   495
  know what you are doing!
13039
wenzelm
parents: 12976
diff changeset
   496
10355
aef4f587a0e4 improved doc of "subgoals" antiquotation;
wenzelm
parents: 10351
diff changeset
   497
\item [$\at\{subgoals\}$] behaves almost like $goals$, except that it does not
aef4f587a0e4 improved doc of "subgoals" antiquotation;
wenzelm
parents: 10351
diff changeset
   498
  print the main goal.
13039
wenzelm
parents: 12976
diff changeset
   499
13827
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   500
\item [$\at\{prf~\vec a\}$] prints the (compact) proof terms corresponding to
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   501
  the theorems $\vec a$. Note that this
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   502
  requires proof terms to be switched on for the current object logic
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   503
  (see the ``Proof terms'' section of the Isabelle reference manual
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   504
  for information on how to do this).
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   505
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   506
\item [$\at\{full_prf~\vec a\}$] is like $\at\{prf~\vec a\}$, but displays
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   507
  the full proof terms, i.e.\ also displays information omitted in
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   508
  the compact proof term, which is denoted by ``$_$'' placeholders there.
c690cb885db4 Documented prf / full_prf commands and antiquotations.
berghofe
parents: 13048
diff changeset
   509
10319
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   510
\end{descr}
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   511
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   512
\medskip
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   513
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   514
The following options are available to tune the output.  Note that most of
9233
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   515
these coincide with ML flags of the same names (see also \cite{isabelle-ref}).
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   516
\begin{descr}
9233
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   517
\item[$show_types = bool$ and $show_sorts = bool$] control printing of
9234
0013b2aa98dd IGNORE last log message!
wenzelm
parents: 9233
diff changeset
   518
  explicit type and sort constraints.
14707
2d6350d7b9b7 show_structs option;
wenzelm
parents: 14689
diff changeset
   519
\item[$show_structs = bool$] controls printing of implicit structures.
9233
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   520
\item[$long_names = bool$] forces names of types and constants etc.\ to be
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   521
  printed in their fully qualified internal form.
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   522
\item[$eta_contract = bool$] prints terms in $\eta$-contracted form.
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   523
\item[$display = bool$] indicates if the text is to be output as multi-line
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   524
  ``display material'', rather than a small piece of text without line breaks
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   525
  (which is the default).
14689
eafb91eda9e8 breaks flag;
wenzelm
parents: 14605
diff changeset
   526
\item[$breaks = bool$] controls line breaks in non-display material.
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   527
\item[$quotes = bool$] indicates if the output should be enclosed in double
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   528
  quotes.
9233
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   529
\item[$mode = name$] adds $name$ to the print mode to be used for presentation
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   530
  (see also \cite{isabelle-ref}).  Note that the standard setup for {\LaTeX}
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   531
  output is already present by default, including the modes ``$latex$'',
8c8399b9ecaa removed "help";
wenzelm
parents: 9200
diff changeset
   532
  ``$xsymbols$'', ``$symbols$''.
9728
1546ad1c7839 added antiquotation 'name' and option 'indent';
wenzelm
parents: 9617
diff changeset
   533
\item[$margin = nat$ and $indent = nat$] change the margin or indentation for
1546ad1c7839 added antiquotation 'name' and option 'indent';
wenzelm
parents: 9617
diff changeset
   534
  pretty printing of display material.
9752
a09f4a7accea renamed antiquotation 'name' to 'text';
wenzelm
parents: 9728
diff changeset
   535
\item[$source = bool$] prints the source text of the antiquotation arguments,
a09f4a7accea renamed antiquotation 'name' to 'text';
wenzelm
parents: 9728
diff changeset
   536
  rather than the actual value.  Note that this does not affect
a09f4a7accea renamed antiquotation 'name' to 'text';
wenzelm
parents: 9728
diff changeset
   537
  well-formedness checks of $thm$, $term$, etc. (only the $text$ antiquotation
a09f4a7accea renamed antiquotation 'name' to 'text';
wenzelm
parents: 9728
diff changeset
   538
  admits arbitrary output).
10319
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   539
\item[$goals_limit = nat$] determines the maximum number of goals to be
02463775cafb added antiquotation "goals" and option "goals_limit";
wenzelm
parents: 10160
diff changeset
   540
  printed.
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   541
\end{descr}
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   542
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   543
For boolean flags, ``$name = true$'' may be abbreviated as ``$name$''.  All of
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   544
the above flags are disabled by default, unless changed from ML.
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   545
10336
209f502b55f7 improved antiquotations;
wenzelm
parents: 10319
diff changeset
   546
\medskip Note that antiquotations do not only spare the author from tedious
13039
wenzelm
parents: 12976
diff changeset
   547
typing of logical entities, but also achieve some degree of
wenzelm
parents: 12976
diff changeset
   548
consistency-checking of informal explanations with formal developments:
wenzelm
parents: 12976
diff changeset
   549
well-formedness of terms and types with respect to the current theory or proof
wenzelm
parents: 12976
diff changeset
   550
context is ensured here.
9200
3a44c828be1d syntax: renamed 'thmname' to 'thmbind';
wenzelm
parents: 9051
diff changeset
   551
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   552
%%% Local Variables: 
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   553
%%% mode: latex
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   554
%%% TeX-master: "isar-ref"
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   555
%%% End: