doc-src/IsarImplementation/Thy/document/proof.tex
author wenzelm
Mon, 04 Sep 2006 16:28:36 +0200
changeset 20471 ffafbd4103c0
parent 20460 351c63bb2704
child 20472 e993073eda4c
permissions -rw-r--r--
updated;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     1
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{proof}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     4
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     5
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     6
\isanewline
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     7
\isanewline
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     8
\isanewline
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     9
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    10
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    11
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    12
\isatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    13
\isacommand{theory}\isamarkupfalse%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    14
\ {\isachardoublequoteopen}proof{\isachardoublequoteclose}\ \isakeyword{imports}\ base\ \isakeyword{begin}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    15
\endisatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    16
{\isafoldtheory}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    17
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    18
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    19
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    20
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    21
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
    22
\isamarkupchapter{Structured proofs%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    23
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    24
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    25
%
20460
wenzelm
parents: 20459
diff changeset
    26
\isamarkupsection{Variables%
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    27
}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    28
\isamarkuptrue%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    29
%
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    30
\begin{isamarkuptext}%
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    31
Any variable that is not explicitly bound by \isa{{\isasymlambda}}-abstraction
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    32
  is considered as ``free''.  Logically, free variables act like
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    33
  outermost universal quantification (at the sequent level): \isa{A\isactrlisub {\isadigit{1}}{\isacharparenleft}x{\isacharparenright}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ A\isactrlisub n{\isacharparenleft}x{\isacharparenright}\ {\isasymturnstile}\ B{\isacharparenleft}x{\isacharparenright}} means that the result
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    34
  holds \emph{for all} values of \isa{x}.  Free variables for
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    35
  terms (not types) can be fully internalized into the logic: \isa{{\isasymturnstile}\ B{\isacharparenleft}x{\isacharparenright}} and \isa{{\isasymturnstile}\ {\isasymAnd}x{\isachardot}\ B{\isacharparenleft}x{\isacharparenright}} are interchangeable provided that
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    36
  \isa{x} does not occur elsewhere in the context.  Inspecting
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    37
  \isa{{\isasymturnstile}\ {\isasymAnd}x{\isachardot}\ B{\isacharparenleft}x{\isacharparenright}} more closely, we see that inside the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    38
  quantifier, \isa{x} is essentially ``arbitrary, but fixed'',
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    39
  while from outside it appears as a place-holder for instantiation
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    40
  (thanks to \isa{{\isasymAnd}}-elimination).
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    41
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    42
  The Pure logic represents the notion of variables being either
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    43
  inside or outside the current scope by providing separate syntactic
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    44
  categories for \emph{fixed variables} (e.g.\ \isa{x}) vs.\
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    45
  \emph{schematic variables} (e.g.\ \isa{{\isacharquery}x}).  Incidently, a
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    46
  universal result \isa{{\isasymturnstile}\ {\isasymAnd}x{\isachardot}\ B{\isacharparenleft}x{\isacharparenright}} has the canonical form \isa{{\isasymturnstile}\ B{\isacharparenleft}{\isacharquery}x{\isacharparenright}}, which represents its generality nicely without requiring
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    47
  an explicit quantifier.  The same principle works for type variables
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    48
  as well: \isa{{\isasymturnstile}\ B{\isacharparenleft}{\isacharquery}{\isasymalpha}{\isacharparenright}} expresses the idea of ``\isa{{\isasymturnstile}\ {\isasymforall}{\isasymalpha}{\isachardot}\ B{\isacharparenleft}{\isasymalpha}{\isacharparenright}}'' without demanding a truly polymorphic framework.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    49
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    50
  \medskip Additional care is required to treat type variables in a
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    51
  way that facilitates type-inference.  In principle, term variables
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    52
  depend on type variables, which means that type variables would have
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    53
  to be declared first.  For example, a raw type-theoretic framework
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    54
  would demand the context to be constructed in stages as follows:
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    55
  \isa{{\isasymGamma}\ {\isacharequal}\ {\isasymalpha}{\isacharcolon}\ type{\isacharcomma}\ x{\isacharcolon}\ {\isasymalpha}{\isacharcomma}\ a{\isacharcolon}\ A{\isacharparenleft}x\isactrlisub {\isasymalpha}{\isacharparenright}}.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    56
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    57
  We allow a slightly less formalistic mode of operation: term
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    58
  variables \isa{x} are fixed without specifying a type yet
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    59
  (essentially \emph{all} potential occurrences of some instance
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    60
  \isa{x\isactrlisub {\isasymtau}} will be fixed); the first occurrence of \isa{x} within a specific term assigns its most general type, which is
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    61
  then maintained consistently in the context.  The above example
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    62
  becomes \isa{{\isasymGamma}\ {\isacharequal}\ x{\isacharcolon}\ term{\isacharcomma}\ {\isasymalpha}{\isacharcolon}\ type{\isacharcomma}\ A{\isacharparenleft}x\isactrlisub {\isasymalpha}{\isacharparenright}}, where type
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    63
  \isa{{\isasymalpha}} is fixed \emph{after} term \isa{x}, and the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    64
  constraint \isa{x{\isacharcolon}\ {\isasymalpha}} is an implicit consequence of the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    65
  occurrence of \isa{x\isactrlisub {\isasymalpha}} in the subsequent proposition.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    66
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    67
  This twist of dependencies is also accommodated by the reverse
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    68
  operation of exporting results from a context: a type variable
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    69
  \isa{{\isasymalpha}} is considered fixed as long as it occurs in some fixed
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    70
  term variable of the context.  For example, exporting \isa{x{\isacharcolon}\ term{\isacharcomma}\ {\isasymalpha}{\isacharcolon}\ type\ {\isasymturnstile}\ x\isactrlisub {\isasymalpha}\ {\isacharequal}\ x\isactrlisub {\isasymalpha}} produces \isa{x{\isacharcolon}\ term\ {\isasymturnstile}\ x\isactrlisub {\isasymalpha}\ {\isacharequal}\ x\isactrlisub {\isasymalpha}} for fixed \isa{{\isasymalpha}} in the first step,
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    71
  and \isa{{\isasymturnstile}\ {\isacharquery}x\isactrlisub {\isacharquery}\isactrlisub {\isasymalpha}\ {\isacharequal}\ {\isacharquery}x\isactrlisub {\isacharquery}\isactrlisub {\isasymalpha}} for
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    72
  schematic \isa{{\isacharquery}x} and \isa{{\isacharquery}{\isasymalpha}} only in the second step.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    73
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    74
  \medskip The Isabelle/Isar proof context manages the gory details of
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    75
  term vs.\ type variables, with high-level principles for moving the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    76
  frontier between fixed and schematic variables.  By observing a
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    77
  simple discipline of fixing variables and declaring terms
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    78
  explicitly, the fine points are treated by the \isa{export}
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    79
  operation.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    80
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    81
  There is also a separate \isa{import} operation makes a
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    82
  generalized fact a genuine part of the context, by inventing fixed
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    83
  variables for the schematic ones.  The effect can be reversed by
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    84
  using \isa{export} later, with a potentially extended context,
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    85
  but the result will be only equivalent modulo renaming of schematic
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    86
  variables.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    87
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    88
  The \isa{focus} operation provides a variant of \isa{import}
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    89
  for nested propositions (with explicit quantification): \isa{{\isasymAnd}x{\isachardot}\ B{\isacharparenleft}x{\isacharparenright}} is decomposed by inventing a fixed variable \isa{x}
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    90
  and for the body \isa{B{\isacharparenleft}x{\isacharparenright}}.%
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    91
\end{isamarkuptext}%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    92
\isamarkuptrue%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    93
%
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    94
\isadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    95
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    96
\endisadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    97
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    98
\isatagmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    99
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   100
\begin{isamarkuptext}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   101
\begin{mldecls}
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   102
  \indexml{Variable.add-fixes}\verb|Variable.add_fixes: string list -> Proof.context -> string list * Proof.context| \\
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   103
  \indexml{Variable.invent-fixes}\verb|Variable.invent_fixes: string list -> Proof.context -> string list * Proof.context| \\
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   104
  \indexml{Variable.declare-term}\verb|Variable.declare_term: term -> Proof.context -> Proof.context| \\
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   105
  \indexml{Variable.declare-constraints}\verb|Variable.declare_constraints: term -> Proof.context -> Proof.context| \\
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   106
  \indexml{Variable.export}\verb|Variable.export: Proof.context -> Proof.context -> thm list -> thm list| \\
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   107
  \indexml{Variable.polymorphic}\verb|Variable.polymorphic: Proof.context -> term list -> term list| \\
20459
wenzelm
parents: 20458
diff changeset
   108
  \indexml{Variable.import}\verb|Variable.import: bool ->|\isasep\isanewline%
wenzelm
parents: 20458
diff changeset
   109
\verb|  thm list -> Proof.context -> ((ctyp list * cterm list) * thm list) * Proof.context| \\
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   110
  \indexml{Variable.focus}\verb|Variable.focus: cterm -> Proof.context -> (cterm list * cterm) * Proof.context| \\
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   111
  \end{mldecls}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   112
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   113
  \begin{description}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   114
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   115
  \item \verb|Variable.add_fixes|~\isa{xs\ ctxt} fixes term
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   116
  variables \isa{xs}, returning the resulting internal names.  By
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   117
  default, the internal representation coincides with the external
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   118
  one, which also means that the given variables must not have been
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   119
  fixed already.  Within a local proof body, the given names are just
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   120
  hints for newly invented Skolem variables.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   121
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   122
  \item \verb|Variable.invent_fixes| is similar to \verb|Variable.add_fixes|, but always produces fresh variants of the given
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   123
  hints.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   124
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   125
  \item \verb|Variable.declare_term|~\isa{t\ ctxt} declares term
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   126
  \isa{t} to belong to the context.  This automatically fixes new
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   127
  type variables, but not term variables.  Syntactic constraints for
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   128
  type and term variables are declared uniformly.
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   129
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   130
  \item \verb|Variable.declare_constraints|~\isa{t\ ctxt} derives
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   131
  type-inference information from term \isa{t}, without making it
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   132
  part of the context yet.
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   133
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   134
  \item \verb|Variable.export|~\isa{inner\ outer\ thms} generalizes
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   135
  fixed type and term variables in \isa{thms} according to the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   136
  difference of the \isa{inner} and \isa{outer} context,
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   137
  following the principles sketched above.
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   138
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   139
  \item \verb|Variable.polymorphic|~\isa{ctxt\ ts} generalizes type
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   140
  variables in \isa{ts} as far as possible, even those occurring
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   141
  in fixed term variables.  The default policy of type-inference is to
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   142
  fix newly introduced type variables; this is essentially reversed
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   143
  with \verb|Variable.polymorphic|, the given terms are detached from
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   144
  the context as far as possible.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   145
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   146
  \item \verb|Variable.import|~\isa{open\ thms\ ctxt} augments the
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   147
  context by new fixes for the schematic type and term variables
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   148
  occurring in \isa{thms}.  The \isa{open} flag indicates
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   149
  whether the fixed names should be accessible to the user, otherwise
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   150
  internal names are chosen.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   151
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   152
  \verb|Variable.export| essentially reverses the effect of \verb|Variable.import|, modulo renaming of schematic variables.
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   153
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   154
  \item \verb|Variable.focus|~\isa{{\isasymAnd}x\isactrlisub {\isadigit{1}}\ {\isasymdots}\ x\isactrlisub n{\isachardot}\ B{\isacharparenleft}x\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ x\isactrlisub n{\isacharparenright}} invents fixed variables
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   155
  for \isa{x\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ x\isactrlisub n} and replaces these in the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   156
  body.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   157
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   158
  \end{description}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   159
\end{isamarkuptext}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   160
\isamarkuptrue%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   161
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   162
\endisatagmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   163
{\isafoldmlref}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   164
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   165
\isadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   166
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   167
\endisadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   168
%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   169
\begin{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   170
FIXME%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   171
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   172
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   173
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   174
\isamarkupsection{Assumptions%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   175
}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   176
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   177
%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   178
\begin{isamarkuptext}%
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   179
An \emph{assumption} is a proposition that it is postulated in the
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   180
  current context.  Local conclusions may use assumptions as
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   181
  additional facts, but this imposes implicit hypotheses that weaken
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   182
  the overall statement.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   183
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   184
  Assumptions are restricted to fixed non-schematic statements, all
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   185
  generality needs to be expressed by explicit quantifiers.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   186
  Nevertheless, the result will be in HHF normal form with outermost
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   187
  quantifiers stripped.  For example, by assuming \isa{{\isasymAnd}x\ {\isacharcolon}{\isacharcolon}\ {\isasymalpha}{\isachardot}\ P\ x} we get \isa{{\isasymAnd}x\ {\isacharcolon}{\isacharcolon}\ {\isasymalpha}{\isachardot}\ P\ x\ {\isasymturnstile}\ P\ {\isacharquery}x} for arbitrary \isa{{\isacharquery}x}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   188
  of the fixed type \isa{{\isasymalpha}}.  Local derivations accumulate more
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   189
  and more explicit references to hypotheses: \isa{A\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ A\isactrlisub n\ {\isasymturnstile}\ B} where \isa{A\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ A\isactrlisub n} needs to
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   190
  be covered by the assumptions of the current context.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   191
20459
wenzelm
parents: 20458
diff changeset
   192
  \medskip The \isa{add{\isacharunderscore}assms} operation augments the context by
wenzelm
parents: 20458
diff changeset
   193
  local assumptions, which are parameterized by an arbitrary \isa{export} rule (see below).
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   194
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   195
  The \isa{export} operation moves facts from a (larger) inner
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   196
  context into a (smaller) outer context, by discharging the
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   197
  difference of the assumptions as specified by the associated export
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   198
  rules.  Note that the discharged portion is determined by the
20459
wenzelm
parents: 20458
diff changeset
   199
  difference contexts, not the facts being exported!  There is a
wenzelm
parents: 20458
diff changeset
   200
  separate flag to indicate a goal context, where the result is meant
wenzelm
parents: 20458
diff changeset
   201
  to refine an enclosing sub-goal of a structured proof state (cf.\
wenzelm
parents: 20458
diff changeset
   202
  \secref{sec:isar-proof-state}).
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   203
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   204
  \medskip The most basic export rule discharges assumptions directly
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   205
  by means of the \isa{{\isasymLongrightarrow}} introduction rule:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   206
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   207
  \infer[(\isa{{\isasymLongrightarrow}{\isacharunderscore}intro})]{\isa{{\isasymGamma}\ {\isacharbackslash}\ A\ {\isasymturnstile}\ A\ {\isasymLongrightarrow}\ B}}{\isa{{\isasymGamma}\ {\isasymturnstile}\ B}}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   208
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   209
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   210
  The variant for goal refinements marks the newly introduced
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   211
  premises, which causes the builtin goal refinement scheme of Isar to
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   212
  enforce unification with local premises within the goal:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   213
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   214
  \infer[(\isa{{\isacharhash}{\isasymLongrightarrow}{\isacharunderscore}intro})]{\isa{{\isasymGamma}\ {\isacharbackslash}\ A\ {\isasymturnstile}\ {\isacharhash}A\ {\isasymLongrightarrow}\ B}}{\isa{{\isasymGamma}\ {\isasymturnstile}\ B}}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   215
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   216
20459
wenzelm
parents: 20458
diff changeset
   217
  \medskip Alternative assumptions may perform arbitrary
wenzelm
parents: 20458
diff changeset
   218
  transformations on export, as long as a particular portion of
wenzelm
parents: 20458
diff changeset
   219
  hypotheses is removed from the given facts.  For example, a local
wenzelm
parents: 20458
diff changeset
   220
  definition works by fixing \isa{x} and assuming \isa{x\ {\isasymequiv}\ t},
wenzelm
parents: 20458
diff changeset
   221
  with the following export rule to reverse the effect:
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   222
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   223
  \infer{\isa{{\isasymGamma}\ {\isacharbackslash}\ x\ {\isasymequiv}\ t\ {\isasymturnstile}\ B\ t}}{\isa{{\isasymGamma}\ {\isasymturnstile}\ B\ x}}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   224
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   225
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   226
  \medskip The general concept supports block-structured reasoning
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   227
  nicely, with arbitrary mechanisms for introducing local assumptions.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   228
  The common reasoning pattern is as follows:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   229
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   230
  \medskip
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   231
  \begin{tabular}{l}
20459
wenzelm
parents: 20458
diff changeset
   232
  \isa{add{\isacharunderscore}assms\ e\isactrlisub {\isadigit{1}}\ A\isactrlisub {\isadigit{1}}} \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   233
  \isa{{\isasymdots}} \\
20459
wenzelm
parents: 20458
diff changeset
   234
  \isa{add{\isacharunderscore}assms\ e\isactrlisub n\ A\isactrlisub n} \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   235
  \isa{export} \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   236
  \end{tabular}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   237
  \medskip
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   238
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   239
  \noindent The final \isa{export} will turn any fact \isa{A\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ A\isactrlisub n\ {\isasymturnstile}\ B} into some \isa{{\isasymturnstile}\ B{\isacharprime}}, by
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   240
  applying the export rules \isa{e\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ e\isactrlisub n}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   241
  inside-out.%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   242
\end{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   243
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   244
%
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   245
\isadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   246
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   247
\endisadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   248
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   249
\isatagmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   250
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   251
\begin{isamarkuptext}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   252
\begin{mldecls}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   253
  \indexmltype{Assumption.export}\verb|type Assumption.export| \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   254
  \indexml{Assumption.assume}\verb|Assumption.assume: cterm -> thm| \\
20459
wenzelm
parents: 20458
diff changeset
   255
  \indexml{Assumption.add-assms}\verb|Assumption.add_assms: Assumption.export ->|\isasep\isanewline%
wenzelm
parents: 20458
diff changeset
   256
\verb|  cterm list -> Proof.context -> thm list * Proof.context| \\
wenzelm
parents: 20458
diff changeset
   257
  \indexml{Assumption.add-assumes}\verb|Assumption.add_assumes: |\isasep\isanewline%
wenzelm
parents: 20458
diff changeset
   258
\verb|  cterm list -> Proof.context -> thm list * Proof.context| \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   259
  \indexml{Assumption.export}\verb|Assumption.export: bool -> Proof.context -> Proof.context -> thm -> thm| \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   260
  \end{mldecls}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   261
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   262
  \begin{description}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   263
20459
wenzelm
parents: 20458
diff changeset
   264
  \item \verb|Assumption.export| represents arbitrary export
wenzelm
parents: 20458
diff changeset
   265
  rules, which is any function of type \verb|bool -> cterm list -> thm -> thm|,
wenzelm
parents: 20458
diff changeset
   266
  where the \verb|bool| indicates goal mode, and the \verb|cterm list| the collection of assumptions to be discharged
wenzelm
parents: 20458
diff changeset
   267
  simultaneously.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   268
20459
wenzelm
parents: 20458
diff changeset
   269
  \item \verb|Assumption.assume|~\isa{A} turns proposition \isa{A} into a raw assumption \isa{A\ {\isasymturnstile}\ A{\isacharprime}}, where the conclusion
wenzelm
parents: 20458
diff changeset
   270
  \isa{A{\isacharprime}} is in HHF normal form.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   271
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   272
  \item \verb|Assumption.add_assms|~\isa{e\ As} augments the context
20459
wenzelm
parents: 20458
diff changeset
   273
  by assumptions \isa{As} with export rule \isa{e}.  The
wenzelm
parents: 20458
diff changeset
   274
  resulting facts are hypothetical theorems as produced by \verb|Assumption.assume|.
wenzelm
parents: 20458
diff changeset
   275
wenzelm
parents: 20458
diff changeset
   276
  \item \verb|Assumption.add_assumes|~\isa{As} is a special case of
wenzelm
parents: 20458
diff changeset
   277
  \verb|Assumption.add_assms| where the export rule performs \isa{{\isasymLongrightarrow}{\isacharunderscore}intro} or \isa{{\isacharhash}{\isasymLongrightarrow}{\isacharunderscore}intro}, depending on goal mode.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   278
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   279
  \item \verb|Assumption.export|~\isa{is{\isacharunderscore}goal\ inner\ outer\ th}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   280
  exports result \isa{th} from the the \isa{inner} context
20459
wenzelm
parents: 20458
diff changeset
   281
  back into the \isa{outer} one; \isa{is{\isacharunderscore}goal\ {\isacharequal}\ true} means
wenzelm
parents: 20458
diff changeset
   282
  this is a goal context.  The result is in HHF normal form.  Note
wenzelm
parents: 20458
diff changeset
   283
  that \verb|ProofContext.export| combines \verb|Variable.export|
wenzelm
parents: 20458
diff changeset
   284
  and \verb|Assumption.export| in the canonical way.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   285
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   286
  \end{description}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   287
\end{isamarkuptext}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   288
\isamarkuptrue%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   289
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   290
\endisatagmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   291
{\isafoldmlref}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   292
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   293
\isadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   294
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   295
\endisadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   296
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   297
\isamarkupsection{Conclusions%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   298
}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   299
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   300
%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   301
\begin{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   302
FIXME%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   303
\end{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   304
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   305
%
20452
wenzelm
parents: 20451
diff changeset
   306
\isamarkupsection{Proof states \label{sec:isar-proof-state}%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   307
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   308
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   309
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   310
\begin{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   311
FIXME
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   312
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   313
\glossary{Proof state}{The whole configuration of a structured proof,
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   314
consisting of a \seeglossary{proof context} and an optional
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   315
\seeglossary{structured goal}.  Internally, an Isar proof state is
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   316
organized as a stack to accomodate block structure of proof texts.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   317
For historical reasons, a low-level \seeglossary{tactical goal} is
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   318
occasionally called ``proof state'' as well.}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   319
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   320
\glossary{Structured goal}{FIXME}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   321
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   322
\glossary{Goal}{See \seeglossary{tactical goal} or \seeglossary{structured goal}. \norefpage}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   323
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   324
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   325
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   326
\isamarkupsection{Proof methods%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   327
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   328
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   329
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   330
\begin{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   331
FIXME%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   332
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   333
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   334
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   335
\isamarkupsection{Attributes%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   336
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   337
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   338
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   339
\begin{isamarkuptext}%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   340
FIXME ?!%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   341
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   342
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   343
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   344
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   345
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   346
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   347
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   348
\isatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   349
\isacommand{end}\isamarkupfalse%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   350
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   351
\endisatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   352
{\isafoldtheory}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   353
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   354
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   355
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   356
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   357
\isanewline
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   358
\end{isabellebody}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   359
%%% Local Variables:
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   360
%%% mode: latex
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   361
%%% TeX-master: "root"
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   362
%%% End: