doc-src/IsarImplementation/Thy/document/Proof.tex
author wenzelm
Mon, 16 Feb 2009 21:39:52 +0100
changeset 29762 e5324b8b4df5
parent 29756 df70c0291579
child 30121 5c7bcb296600
permissions -rw-r--r--
updated genereted files;
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}%
29756
df70c0291579 updated generated files;
wenzelm
parents: 29755
diff changeset
     3
\def\isabellecontext{Proof}%
18537
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
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     7
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     8
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     9
\isatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    10
\isacommand{theory}\isamarkupfalse%
29756
df70c0291579 updated generated files;
wenzelm
parents: 29755
diff changeset
    11
\ Proof\isanewline
df70c0291579 updated generated files;
wenzelm
parents: 29755
diff changeset
    12
\isakeyword{imports}\ Base\isanewline
df70c0291579 updated generated files;
wenzelm
parents: 29755
diff changeset
    13
\isakeyword{begin}%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    14
\endisatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    15
{\isafoldtheory}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    16
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    17
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    18
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    19
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    20
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
    21
\isamarkupchapter{Structured proofs%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    22
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    23
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    24
%
20474
wenzelm
parents: 20472
diff changeset
    25
\isamarkupsection{Variables \label{sec:variables}%
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    26
}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    27
\isamarkuptrue%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    28
%
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    29
\begin{isamarkuptext}%
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    30
Any variable that is not explicitly bound by \isa{{\isasymlambda}}-abstraction
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    31
  is considered as ``free''.  Logically, free variables act like
20474
wenzelm
parents: 20472
diff changeset
    32
  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
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    33
  holds \emph{for all} values of \isa{x}.  Free variables for
20474
wenzelm
parents: 20472
diff changeset
    34
  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
wenzelm
parents: 20472
diff changeset
    35
  that \isa{x} does not occur elsewhere in the context.
wenzelm
parents: 20472
diff changeset
    36
  Inspecting \isa{{\isasymturnstile}\ {\isasymAnd}x{\isachardot}\ B{\isacharparenleft}x{\isacharparenright}} more closely, we see that inside the
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    37
  quantifier, \isa{x} is essentially ``arbitrary, but fixed'',
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    38
  while from outside it appears as a place-holder for instantiation
20474
wenzelm
parents: 20472
diff changeset
    39
  (thanks to \isa{{\isasymAnd}} elimination).
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    40
20474
wenzelm
parents: 20472
diff changeset
    41
  The Pure logic represents the idea of variables being either inside
wenzelm
parents: 20472
diff changeset
    42
  or outside the current scope by providing separate syntactic
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    43
  categories for \emph{fixed variables} (e.g.\ \isa{x}) vs.\
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    44
  \emph{schematic variables} (e.g.\ \isa{{\isacharquery}x}).  Incidently, a
20474
wenzelm
parents: 20472
diff changeset
    45
  universal result \isa{{\isasymturnstile}\ {\isasymAnd}x{\isachardot}\ B{\isacharparenleft}x{\isacharparenright}} has the HHF normal form \isa{{\isasymturnstile}\ B{\isacharparenleft}{\isacharquery}x{\isacharparenright}}, which represents its generality nicely without requiring
wenzelm
parents: 20472
diff changeset
    46
  an explicit quantifier.  The same principle works for type
wenzelm
parents: 20472
diff changeset
    47
  variables: \isa{{\isasymturnstile}\ B{\isacharparenleft}{\isacharquery}{\isasymalpha}{\isacharparenright}} represents the idea of ``\isa{{\isasymturnstile}\ {\isasymforall}{\isasymalpha}{\isachardot}\ B{\isacharparenleft}{\isasymalpha}{\isacharparenright}}'' without demanding a truly polymorphic framework.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    48
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    49
  \medskip Additional care is required to treat type variables in a
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    50
  way that facilitates type-inference.  In principle, term variables
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    51
  depend on type variables, which means that type variables would have
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    52
  to be declared first.  For example, a raw type-theoretic framework
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    53
  would demand the context to be constructed in stages as follows:
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    54
  \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
    55
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    56
  We allow a slightly less formalistic mode of operation: term
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    57
  variables \isa{x} are fixed without specifying a type yet
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    58
  (essentially \emph{all} potential occurrences of some instance
20474
wenzelm
parents: 20472
diff changeset
    59
  \isa{x\isactrlisub {\isasymtau}} are fixed); the first occurrence of \isa{x}
wenzelm
parents: 20472
diff changeset
    60
  within a specific term assigns its most general type, which is then
wenzelm
parents: 20472
diff changeset
    61
  maintained consistently in the context.  The above example becomes
wenzelm
parents: 20472
diff changeset
    62
  \isa{{\isasymGamma}\ {\isacharequal}\ x{\isacharcolon}\ term{\isacharcomma}\ {\isasymalpha}{\isacharcolon}\ type{\isacharcomma}\ A{\isacharparenleft}x\isactrlisub {\isasymalpha}{\isacharparenright}}, where type \isa{{\isasymalpha}} is fixed \emph{after} term \isa{x}, and the constraint
wenzelm
parents: 20472
diff changeset
    63
  \isa{x\ {\isacharcolon}{\isacharcolon}\ {\isasymalpha}} is an implicit consequence of the occurrence of
wenzelm
parents: 20472
diff changeset
    64
  \isa{x\isactrlisub {\isasymalpha}} in the subsequent proposition.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    65
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    66
  This twist of dependencies is also accommodated by the reverse
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    67
  operation of exporting results from a context: a type variable
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    68
  \isa{{\isasymalpha}} is considered fixed as long as it occurs in some fixed
20474
wenzelm
parents: 20472
diff changeset
    69
  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 in the first step
wenzelm
parents: 20472
diff changeset
    70
  \isa{x{\isacharcolon}\ term\ {\isasymturnstile}\ x\isactrlisub {\isasymalpha}\ {\isacharequal}\ x\isactrlisub {\isasymalpha}} for fixed \isa{{\isasymalpha}},
wenzelm
parents: 20472
diff changeset
    71
  and only in the second step \isa{{\isasymturnstile}\ {\isacharquery}x\isactrlisub {\isacharquery}\isactrlisub {\isasymalpha}\ {\isacharequal}\ {\isacharquery}x\isactrlisub {\isacharquery}\isactrlisub {\isasymalpha}} for schematic \isa{{\isacharquery}x} and \isa{{\isacharquery}{\isasymalpha}}.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    72
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    73
  \medskip The Isabelle/Isar proof context manages the gory details of
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    74
  term vs.\ type variables, with high-level principles for moving the
20474
wenzelm
parents: 20472
diff changeset
    75
  frontier between fixed and schematic variables.
wenzelm
parents: 20472
diff changeset
    76
wenzelm
parents: 20472
diff changeset
    77
  The \isa{add{\isacharunderscore}fixes} operation explictly declares fixed
wenzelm
parents: 20472
diff changeset
    78
  variables; the \isa{declare{\isacharunderscore}term} operation absorbs a term into
wenzelm
parents: 20472
diff changeset
    79
  a context by fixing new type variables and adding syntactic
wenzelm
parents: 20472
diff changeset
    80
  constraints.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    81
20474
wenzelm
parents: 20472
diff changeset
    82
  The \isa{export} operation is able to perform the main work of
wenzelm
parents: 20472
diff changeset
    83
  generalizing term and type variables as sketched above, assuming
wenzelm
parents: 20472
diff changeset
    84
  that fixing variables and terms have been declared properly.
wenzelm
parents: 20472
diff changeset
    85
wenzelm
parents: 20472
diff changeset
    86
  There \isa{import} operation makes a generalized fact a genuine
wenzelm
parents: 20472
diff changeset
    87
  part of the context, by inventing fixed variables for the schematic
wenzelm
parents: 20472
diff changeset
    88
  ones.  The effect can be reversed by using \isa{export} later,
wenzelm
parents: 20472
diff changeset
    89
  potentially with an extended context; the result is equivalent to
wenzelm
parents: 20472
diff changeset
    90
  the original modulo renaming of schematic variables.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    91
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
    92
  The \isa{focus} operation provides a variant of \isa{import}
20474
wenzelm
parents: 20472
diff changeset
    93
  for nested propositions (with explicit quantification): \isa{{\isasymAnd}x\isactrlisub {\isadigit{1}}\ {\isasymdots}\ x\isactrlisub n{\isachardot}\ B{\isacharparenleft}x\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ x\isactrlisub n{\isacharparenright}} is
wenzelm
parents: 20472
diff changeset
    94
  decomposed by inventing fixed variables \isa{x\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ x\isactrlisub n} for the body.%
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    95
\end{isamarkuptext}%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    96
\isamarkuptrue%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    97
%
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    98
\isadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    99
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   100
\endisadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   101
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   102
\isatagmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   103
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   104
\begin{isamarkuptext}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   105
\begin{mldecls}
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   106
  \indexml{Variable.add\_fixes}\verb|Variable.add_fixes: |\isasep\isanewline%
20474
wenzelm
parents: 20472
diff changeset
   107
\verb|  string list -> Proof.context -> string list * Proof.context| \\
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   108
  \indexml{Variable.variant\_fixes}\verb|Variable.variant_fixes: |\isasep\isanewline%
20474
wenzelm
parents: 20472
diff changeset
   109
\verb|  string list -> Proof.context -> string list * Proof.context| \\
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   110
  \indexml{Variable.declare\_term}\verb|Variable.declare_term: term -> Proof.context -> Proof.context| \\
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   111
  \indexml{Variable.declare\_constraints}\verb|Variable.declare_constraints: term -> Proof.context -> Proof.context| \\
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   112
  \indexml{Variable.export}\verb|Variable.export: Proof.context -> Proof.context -> thm list -> thm list| \\
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   113
  \indexml{Variable.polymorphic}\verb|Variable.polymorphic: Proof.context -> term list -> term list| \\
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   114
  \indexml{Variable.import\_thms}\verb|Variable.import_thms: bool -> thm list -> Proof.context ->|\isasep\isanewline%
20474
wenzelm
parents: 20472
diff changeset
   115
\verb|  ((ctyp list * cterm list) * thm list) * Proof.context| \\
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   116
  \indexml{Variable.focus}\verb|Variable.focus: cterm -> Proof.context -> (cterm list * cterm) * Proof.context| \\
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   117
  \end{mldecls}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   118
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   119
  \begin{description}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   120
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   121
  \item \verb|Variable.add_fixes|~\isa{xs\ ctxt} fixes term
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   122
  variables \isa{xs}, returning the resulting internal names.  By
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   123
  default, the internal representation coincides with the external
20474
wenzelm
parents: 20472
diff changeset
   124
  one, which also means that the given variables must not be fixed
wenzelm
parents: 20472
diff changeset
   125
  already.  There is a different policy within a local proof body: the
wenzelm
parents: 20472
diff changeset
   126
  given names are just hints for newly invented Skolem variables.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   127
20797
c1f0bc7e7d80 renamed Variable.invent_fixes to Variable.variant_fixes;
wenzelm
parents: 20547
diff changeset
   128
  \item \verb|Variable.variant_fixes| is similar to \verb|Variable.add_fixes|, but always produces fresh variants of the given
20474
wenzelm
parents: 20472
diff changeset
   129
  names.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   130
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   131
  \item \verb|Variable.declare_term|~\isa{t\ ctxt} declares term
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   132
  \isa{t} to belong to the context.  This automatically fixes new
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   133
  type variables, but not term variables.  Syntactic constraints for
20474
wenzelm
parents: 20472
diff changeset
   134
  type and term variables are declared uniformly, though.
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   135
20474
wenzelm
parents: 20472
diff changeset
   136
  \item \verb|Variable.declare_constraints|~\isa{t\ ctxt} declares
wenzelm
parents: 20472
diff changeset
   137
  syntactic constraints from term \isa{t}, without making it part
wenzelm
parents: 20472
diff changeset
   138
  of the context yet.
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   139
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   140
  \item \verb|Variable.export|~\isa{inner\ outer\ thms} generalizes
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   141
  fixed type and term variables in \isa{thms} according to the
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   142
  difference of the \isa{inner} and \isa{outer} context,
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   143
  following the principles sketched above.
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
   144
20471
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   145
  \item \verb|Variable.polymorphic|~\isa{ctxt\ ts} generalizes type
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   146
  variables in \isa{ts} as far as possible, even those occurring
ffafbd4103c0 updated;
wenzelm
parents: 20460
diff changeset
   147
  in fixed term variables.  The default policy of type-inference is to
20474
wenzelm
parents: 20472
diff changeset
   148
  fix newly introduced type variables, which is essentially reversed
wenzelm
parents: 20472
diff changeset
   149
  with \verb|Variable.polymorphic|: here the given terms are detached
wenzelm
parents: 20472
diff changeset
   150
  from the context as far as possible.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   151
22568
ed7aa5a350ef renamed Variable.import to import_thms (avoid clash with Alice keywords);
wenzelm
parents: 21827
diff changeset
   152
  \item \verb|Variable.import_thms|~\isa{open\ thms\ ctxt} invents fixed
20474
wenzelm
parents: 20472
diff changeset
   153
  type and term variables for the schematic ones occurring in \isa{thms}.  The \isa{open} flag indicates whether the fixed names
wenzelm
parents: 20472
diff changeset
   154
  should be accessible to the user, otherwise newly introduced names
wenzelm
parents: 20472
diff changeset
   155
  are marked as ``internal'' (\secref{sec:names}).
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   156
20474
wenzelm
parents: 20472
diff changeset
   157
  \item \verb|Variable.focus|~\isa{B} decomposes the outermost \isa{{\isasymAnd}} prefix of proposition \isa{B}.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   158
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   159
  \end{description}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   160
\end{isamarkuptext}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   161
\isamarkuptrue%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   162
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   163
\endisatagmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   164
{\isafoldmlref}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   165
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   166
\isadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   167
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   168
\endisadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
   169
%
20474
wenzelm
parents: 20472
diff changeset
   170
\isamarkupsection{Assumptions \label{sec:assumptions}%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   171
}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   172
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   173
%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   174
\begin{isamarkuptext}%
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   175
An \emph{assumption} is a proposition that it is postulated in the
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   176
  current context.  Local conclusions may use assumptions as
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   177
  additional facts, but this imposes implicit hypotheses that weaken
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   178
  the overall statement.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   179
20474
wenzelm
parents: 20472
diff changeset
   180
  Assumptions are restricted to fixed non-schematic statements, i.e.\
wenzelm
parents: 20472
diff changeset
   181
  all generality needs to be expressed by explicit quantifiers.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   182
  Nevertheless, the result will be in HHF normal form with outermost
20474
wenzelm
parents: 20472
diff changeset
   183
  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 schematic \isa{{\isacharquery}x}
wenzelm
parents: 20472
diff changeset
   184
  of fixed type \isa{{\isasymalpha}}.  Local derivations accumulate more and
wenzelm
parents: 20472
diff changeset
   185
  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
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   186
  be covered by the assumptions of the current context.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   187
20459
wenzelm
parents: 20458
diff changeset
   188
  \medskip The \isa{add{\isacharunderscore}assms} operation augments the context by
wenzelm
parents: 20458
diff changeset
   189
  local assumptions, which are parameterized by an arbitrary \isa{export} rule (see below).
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   190
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   191
  The \isa{export} operation moves facts from a (larger) inner
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   192
  context into a (smaller) outer context, by discharging the
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   193
  difference of the assumptions as specified by the associated export
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   194
  rules.  Note that the discharged portion is determined by the
20459
wenzelm
parents: 20458
diff changeset
   195
  difference contexts, not the facts being exported!  There is a
wenzelm
parents: 20458
diff changeset
   196
  separate flag to indicate a goal context, where the result is meant
29762
e5324b8b4df5 updated genereted files;
wenzelm
parents: 29756
diff changeset
   197
  to refine an enclosing sub-goal of a structured proof state.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   198
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   199
  \medskip The most basic export rule discharges assumptions directly
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   200
  by means of the \isa{{\isasymLongrightarrow}} introduction rule:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   201
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   202
  \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
   203
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   204
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   205
  The variant for goal refinements marks the newly introduced
20474
wenzelm
parents: 20472
diff changeset
   206
  premises, which causes the canonical Isar goal refinement scheme to
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   207
  enforce unification with local premises within the goal:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   208
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   209
  \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
   210
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   211
20474
wenzelm
parents: 20472
diff changeset
   212
  \medskip Alternative versions of assumptions may perform arbitrary
wenzelm
parents: 20472
diff changeset
   213
  transformations on export, as long as the corresponding portion of
20459
wenzelm
parents: 20458
diff changeset
   214
  hypotheses is removed from the given facts.  For example, a local
wenzelm
parents: 20458
diff changeset
   215
  definition works by fixing \isa{x} and assuming \isa{x\ {\isasymequiv}\ t},
wenzelm
parents: 20458
diff changeset
   216
  with the following export rule to reverse the effect:
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   217
  \[
20491
wenzelm
parents: 20474
diff changeset
   218
  \infer[(\isa{{\isasymequiv}{\isacharminus}expand})]{\isa{{\isasymGamma}\ {\isacharbackslash}\ x\ {\isasymequiv}\ t\ {\isasymturnstile}\ B\ t}}{\isa{{\isasymGamma}\ {\isasymturnstile}\ B\ x}}
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   219
  \]
20474
wenzelm
parents: 20472
diff changeset
   220
  This works, because the assumption \isa{x\ {\isasymequiv}\ t} was introduced in
wenzelm
parents: 20472
diff changeset
   221
  a context with \isa{x} being fresh, so \isa{x} does not
wenzelm
parents: 20472
diff changeset
   222
  occur in \isa{{\isasymGamma}} here.%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   223
\end{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   224
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   225
%
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   226
\isadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   227
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   228
\endisadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   229
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   230
\isatagmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   231
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   232
\begin{isamarkuptext}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   233
\begin{mldecls}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   234
  \indexmltype{Assumption.export}\verb|type Assumption.export| \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   235
  \indexml{Assumption.assume}\verb|Assumption.assume: cterm -> thm| \\
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   236
  \indexml{Assumption.add\_assms}\verb|Assumption.add_assms: Assumption.export ->|\isasep\isanewline%
20459
wenzelm
parents: 20458
diff changeset
   237
\verb|  cterm list -> Proof.context -> thm list * Proof.context| \\
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   238
  \indexml{Assumption.add\_assumes}\verb|Assumption.add_assumes: |\isasep\isanewline%
20459
wenzelm
parents: 20458
diff changeset
   239
\verb|  cterm list -> Proof.context -> thm list * Proof.context| \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   240
  \indexml{Assumption.export}\verb|Assumption.export: bool -> Proof.context -> Proof.context -> thm -> thm| \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   241
  \end{mldecls}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   242
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   243
  \begin{description}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   244
20459
wenzelm
parents: 20458
diff changeset
   245
  \item \verb|Assumption.export| represents arbitrary export
wenzelm
parents: 20458
diff changeset
   246
  rules, which is any function of type \verb|bool -> cterm list -> thm -> thm|,
wenzelm
parents: 20458
diff changeset
   247
  where the \verb|bool| indicates goal mode, and the \verb|cterm list| the collection of assumptions to be discharged
wenzelm
parents: 20458
diff changeset
   248
  simultaneously.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   249
20459
wenzelm
parents: 20458
diff changeset
   250
  \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
   251
  \isa{A{\isacharprime}} is in HHF normal form.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   252
20474
wenzelm
parents: 20472
diff changeset
   253
  \item \verb|Assumption.add_assms|~\isa{r\ As} augments the context
wenzelm
parents: 20472
diff changeset
   254
  by assumptions \isa{As} with export rule \isa{r}.  The
wenzelm
parents: 20472
diff changeset
   255
  resulting facts are hypothetical theorems as produced by the raw
wenzelm
parents: 20472
diff changeset
   256
  \verb|Assumption.assume|.
20459
wenzelm
parents: 20458
diff changeset
   257
wenzelm
parents: 20458
diff changeset
   258
  \item \verb|Assumption.add_assumes|~\isa{As} is a special case of
wenzelm
parents: 20458
diff changeset
   259
  \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
   260
20474
wenzelm
parents: 20472
diff changeset
   261
  \item \verb|Assumption.export|~\isa{is{\isacharunderscore}goal\ inner\ outer\ thm}
wenzelm
parents: 20472
diff changeset
   262
  exports result \isa{thm} from the the \isa{inner} context
20459
wenzelm
parents: 20458
diff changeset
   263
  back into the \isa{outer} one; \isa{is{\isacharunderscore}goal\ {\isacharequal}\ true} means
wenzelm
parents: 20458
diff changeset
   264
  this is a goal context.  The result is in HHF normal form.  Note
wenzelm
parents: 20458
diff changeset
   265
  that \verb|ProofContext.export| combines \verb|Variable.export|
wenzelm
parents: 20458
diff changeset
   266
  and \verb|Assumption.export| in the canonical way.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   267
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   268
  \end{description}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   269
\end{isamarkuptext}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   270
\isamarkuptrue%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   271
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   272
\endisatagmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   273
{\isafoldmlref}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   274
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   275
\isadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   276
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   277
\endisadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   278
%
28541
9b259710d9d3 added section label;
wenzelm
parents: 26854
diff changeset
   279
\isamarkupsection{Results \label{sec:results}%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   280
}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   281
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   282
%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   283
\begin{isamarkuptext}%
20472
wenzelm
parents: 20471
diff changeset
   284
Local results are established by monotonic reasoning from facts
20474
wenzelm
parents: 20472
diff changeset
   285
  within a context.  This allows common combinations of theorems,
wenzelm
parents: 20472
diff changeset
   286
  e.g.\ via \isa{{\isasymAnd}{\isacharslash}{\isasymLongrightarrow}} elimination, resolution rules, or equational
wenzelm
parents: 20472
diff changeset
   287
  reasoning, see \secref{sec:thms}.  Unaccounted context manipulations
wenzelm
parents: 20472
diff changeset
   288
  should be avoided, notably raw \isa{{\isasymAnd}{\isacharslash}{\isasymLongrightarrow}} introduction or ad-hoc
20472
wenzelm
parents: 20471
diff changeset
   289
  references to free variables or assumptions not present in the proof
wenzelm
parents: 20471
diff changeset
   290
  context.
wenzelm
parents: 20471
diff changeset
   291
20491
wenzelm
parents: 20474
diff changeset
   292
  \medskip The \isa{SUBPROOF} combinator allows to structure a
wenzelm
parents: 20474
diff changeset
   293
  tactical proof recursively by decomposing a selected sub-goal:
wenzelm
parents: 20474
diff changeset
   294
  \isa{{\isacharparenleft}{\isasymAnd}x{\isachardot}\ A{\isacharparenleft}x{\isacharparenright}\ {\isasymLongrightarrow}\ B{\isacharparenleft}x{\isacharparenright}{\isacharparenright}\ {\isasymLongrightarrow}\ {\isasymdots}} is turned into \isa{B{\isacharparenleft}x{\isacharparenright}\ {\isasymLongrightarrow}\ {\isasymdots}}
wenzelm
parents: 20474
diff changeset
   295
  after fixing \isa{x} and assuming \isa{A{\isacharparenleft}x{\isacharparenright}}.  This means
wenzelm
parents: 20474
diff changeset
   296
  the tactic needs to solve the conclusion, but may use the premise as
wenzelm
parents: 20474
diff changeset
   297
  a local fact, for locally fixed variables.
20472
wenzelm
parents: 20471
diff changeset
   298
20491
wenzelm
parents: 20474
diff changeset
   299
  The \isa{prove} operation provides an interface for structured
wenzelm
parents: 20474
diff changeset
   300
  backwards reasoning under program control, with some explicit sanity
wenzelm
parents: 20474
diff changeset
   301
  checks of the result.  The goal context can be augmented by
wenzelm
parents: 20474
diff changeset
   302
  additional fixed variables (cf.\ \secref{sec:variables}) and
wenzelm
parents: 20474
diff changeset
   303
  assumptions (cf.\ \secref{sec:assumptions}), which will be available
wenzelm
parents: 20474
diff changeset
   304
  as local facts during the proof and discharged into implications in
wenzelm
parents: 20474
diff changeset
   305
  the result.  Type and term variables are generalized as usual,
wenzelm
parents: 20474
diff changeset
   306
  according to the context.
20472
wenzelm
parents: 20471
diff changeset
   307
20491
wenzelm
parents: 20474
diff changeset
   308
  The \isa{obtain} operation produces results by eliminating
wenzelm
parents: 20474
diff changeset
   309
  existing facts by means of a given tactic.  This acts like a dual
wenzelm
parents: 20474
diff changeset
   310
  conclusion: the proof demonstrates that the context may be augmented
wenzelm
parents: 20474
diff changeset
   311
  by certain fixed variables and assumptions.  See also
wenzelm
parents: 20474
diff changeset
   312
  \cite{isabelle-isar-ref} for the user-level \isa{{\isasymOBTAIN}} and
wenzelm
parents: 20474
diff changeset
   313
  \isa{{\isasymGUESS}} elements.  Final results, which may not refer to
wenzelm
parents: 20474
diff changeset
   314
  the parameters in the conclusion, need to exported explicitly into
wenzelm
parents: 20474
diff changeset
   315
  the original context.%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   316
\end{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   317
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   318
%
20472
wenzelm
parents: 20471
diff changeset
   319
\isadelimmlref
wenzelm
parents: 20471
diff changeset
   320
%
wenzelm
parents: 20471
diff changeset
   321
\endisadelimmlref
wenzelm
parents: 20471
diff changeset
   322
%
wenzelm
parents: 20471
diff changeset
   323
\isatagmlref
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   324
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   325
\begin{isamarkuptext}%
20472
wenzelm
parents: 20471
diff changeset
   326
\begin{mldecls}
20491
wenzelm
parents: 20474
diff changeset
   327
  \indexml{SUBPROOF}\verb|SUBPROOF: ({context: Proof.context, schematics: ctyp list * cterm list,|\isasep\isanewline%
wenzelm
parents: 20474
diff changeset
   328
\verb|    params: cterm list, asms: cterm list, concl: cterm,|\isasep\isanewline%
wenzelm
parents: 20474
diff changeset
   329
\verb|    prems: thm list} -> tactic) -> Proof.context -> int -> tactic| \\
20547
wenzelm
parents: 20542
diff changeset
   330
  \end{mldecls}
wenzelm
parents: 20542
diff changeset
   331
  \begin{mldecls}
20472
wenzelm
parents: 20471
diff changeset
   332
  \indexml{Goal.prove}\verb|Goal.prove: Proof.context -> string list -> term list -> term ->|\isasep\isanewline%
wenzelm
parents: 20471
diff changeset
   333
\verb|  ({prems: thm list, context: Proof.context} -> tactic) -> thm| \\
26854
9b4aec46ad78 improved treatment of "_" thanks to underscore.sty;
wenzelm
parents: 22568
diff changeset
   334
  \indexml{Goal.prove\_multi}\verb|Goal.prove_multi: Proof.context -> string list -> term list -> term list ->|\isasep\isanewline%
20472
wenzelm
parents: 20471
diff changeset
   335
\verb|  ({prems: thm list, context: Proof.context} -> tactic) -> thm list| \\
20547
wenzelm
parents: 20542
diff changeset
   336
  \end{mldecls}
wenzelm
parents: 20542
diff changeset
   337
  \begin{mldecls}
20491
wenzelm
parents: 20474
diff changeset
   338
  \indexml{Obtain.result}\verb|Obtain.result: (Proof.context -> tactic) ->|\isasep\isanewline%
20542
a54ca4e90874 more on theorems;
wenzelm
parents: 20520
diff changeset
   339
\verb|  thm list -> Proof.context -> (cterm list * thm list) * Proof.context| \\
20472
wenzelm
parents: 20471
diff changeset
   340
  \end{mldecls}
wenzelm
parents: 20471
diff changeset
   341
wenzelm
parents: 20471
diff changeset
   342
  \begin{description}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   343
29762
e5324b8b4df5 updated genereted files;
wenzelm
parents: 29756
diff changeset
   344
  \item \verb|SUBPROOF|~\isa{tac\ ctxt\ i} decomposes the structure
e5324b8b4df5 updated genereted files;
wenzelm
parents: 29756
diff changeset
   345
  of the specified sub-goal, producing an extended context and a
e5324b8b4df5 updated genereted files;
wenzelm
parents: 29756
diff changeset
   346
  reduced goal, which needs to be solved by the given tactic.  All
e5324b8b4df5 updated genereted files;
wenzelm
parents: 29756
diff changeset
   347
  schematic parameters of the goal are imported into the context as
e5324b8b4df5 updated genereted files;
wenzelm
parents: 29756
diff changeset
   348
  fixed ones, which may not be instantiated in the sub-proof.
20491
wenzelm
parents: 20474
diff changeset
   349
20474
wenzelm
parents: 20472
diff changeset
   350
  \item \verb|Goal.prove|~\isa{ctxt\ xs\ As\ C\ tac} states goal \isa{C} in the context augmented by fixed variables \isa{xs} and
wenzelm
parents: 20472
diff changeset
   351
  assumptions \isa{As}, and applies tactic \isa{tac} to solve
wenzelm
parents: 20472
diff changeset
   352
  it.  The latter may depend on the local assumptions being presented
wenzelm
parents: 20472
diff changeset
   353
  as facts.  The result is in HHF normal form.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   354
20472
wenzelm
parents: 20471
diff changeset
   355
  \item \verb|Goal.prove_multi| is simular to \verb|Goal.prove|, but
20491
wenzelm
parents: 20474
diff changeset
   356
  states several conclusions simultaneously.  The goal is encoded by
21827
0b1d07f79c1e updated;
wenzelm
parents: 20797
diff changeset
   357
  means of Pure conjunction; \verb|Goal.conjunction_tac| will turn this
0b1d07f79c1e updated;
wenzelm
parents: 20797
diff changeset
   358
  into a collection of individual subgoals.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   359
20491
wenzelm
parents: 20474
diff changeset
   360
  \item \verb|Obtain.result|~\isa{tac\ thms\ ctxt} eliminates the
wenzelm
parents: 20474
diff changeset
   361
  given facts using a tactic, which results in additional fixed
wenzelm
parents: 20474
diff changeset
   362
  variables and assumptions in the context.  Final results need to be
wenzelm
parents: 20474
diff changeset
   363
  exported explicitly.
20472
wenzelm
parents: 20471
diff changeset
   364
wenzelm
parents: 20471
diff changeset
   365
  \end{description}%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   366
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   367
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   368
%
20472
wenzelm
parents: 20471
diff changeset
   369
\endisatagmlref
wenzelm
parents: 20471
diff changeset
   370
{\isafoldmlref}%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   371
%
20472
wenzelm
parents: 20471
diff changeset
   372
\isadelimmlref
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   373
%
20472
wenzelm
parents: 20471
diff changeset
   374
\endisadelimmlref
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   375
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   376
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   377
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   378
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   379
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   380
\isatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   381
\isacommand{end}\isamarkupfalse%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   382
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   383
\endisatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   384
{\isafoldtheory}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   385
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   386
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   387
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   388
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   389
\isanewline
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   390
\end{isabellebody}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   391
%%% Local Variables:
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   392
%%% mode: latex
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   393
%%% TeX-master: "root"
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   394
%%% End: