doc-src/IsarImplementation/Thy/document/proof.tex
author wenzelm
Fri, 01 Sep 2006 20:40:05 +0200
changeset 20459 73c1ad6eda9d
parent 20458 ab1d60e1ee31
child 20460 351c63bb2704
permissions -rw-r--r--
tuned;
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
%
20452
wenzelm
parents: 20451
diff changeset
    26
\isamarkupsection{Variables and schematic polymorphism%
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}%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    31
FIXME%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    32
\end{isamarkuptext}%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    33
\isamarkuptrue%
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    34
%
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    35
\isadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    36
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    37
\endisadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    38
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    39
\isatagmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    40
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    41
\begin{isamarkuptext}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    42
\begin{mldecls}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    43
  \indexml{Variable.declare-term}\verb|Variable.declare_term: term -> Proof.context -> Proof.context| \\
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    44
  \indexml{Variable.add-fixes}\verb|Variable.add_fixes: string list -> Proof.context -> string list * Proof.context| \\
20459
wenzelm
parents: 20458
diff changeset
    45
  \indexml{Variable.import}\verb|Variable.import: bool ->|\isasep\isanewline%
wenzelm
parents: 20458
diff changeset
    46
\verb|  thm list -> Proof.context -> ((ctyp list * cterm list) * thm list) * Proof.context| \\
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    47
  \indexml{Variable.export}\verb|Variable.export: Proof.context -> Proof.context -> thm list -> thm list| \\
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    48
  \indexml{Variable.trade}\verb|Variable.trade: Proof.context -> (thm list -> thm list) -> thm list -> thm list| \\
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    49
  \indexml{Variable.polymorphic}\verb|Variable.polymorphic: Proof.context -> term list -> term list| \\
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    50
  \end{mldecls}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    51
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    52
  \begin{description}
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    53
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    54
  \item \verb|Variable.declare_term|~\isa{t\ ctxt} declares term
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    55
  \isa{t} to belong to the context.  This fixes free type
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    56
  variables, but not term variables.  Constraints for type and term
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    57
  variables are declared uniformly.
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    58
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    59
  \item \verb|Variable.add_fixes|~\isa{xs\ ctxt} fixes term
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    60
  variables \isa{xs} and returns the internal names of the
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    61
  resulting Skolem constants.  Note that term fixes refer to
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    62
  \emph{all} type instances that may occur in the future.
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    63
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    64
  \item \verb|Variable.invent_fixes| is similar to \verb|Variable.add_fixes|, but the given names merely act as hints for
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    65
  internal fixes produced here.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    66
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    67
  \item \verb|Variable.import|~\isa{open\ ths\ ctxt} augments the
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    68
  context by new fixes for the schematic type and term variables
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    69
  occurring in \isa{ths}.  The \isa{open} flag indicates
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    70
  whether the fixed names should be accessible to the user, otherwise
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    71
  internal names are chosen.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    72
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    73
  \item \verb|Variable.export|~\isa{inner\ outer\ ths} generalizes
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    74
  fixed type and term variables in \isa{ths} according to the
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    75
  difference of the \isa{inner} and \isa{outer} context.  Note
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    76
  that type variables occurring in term variables are still fixed.
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    77
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    78
  \verb|Variable.export| essentially reverses the effect of \verb|Variable.import| (up to renaming of schematic variables.
20043
036128013178 updated;
wenzelm
parents: 20027
diff changeset
    79
036128013178 updated;
wenzelm
parents: 20027
diff changeset
    80
  \item \verb|Variable.trade| composes \verb|Variable.import| and \verb|Variable.export|, i.e.\ it provides a view on facts with all
036128013178 updated;
wenzelm
parents: 20027
diff changeset
    81
  variables being fixed in the current context.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    82
20063
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    83
  \item \verb|Variable.polymorphic|~\isa{ctxt\ ts} generalizes type
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    84
  variables in \isa{ts} as far as possible, even those occurring
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    85
  in fixed term variables.  This operation essentially reverses the
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    86
  default policy of type-inference to introduce local polymorphism as
d8d9ea6a6b55 updated;
wenzelm
parents: 20043
diff changeset
    87
  fixed types.
20027
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    88
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    89
  \end{description}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    90
\end{isamarkuptext}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    91
\isamarkuptrue%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    92
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    93
\endisatagmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    94
{\isafoldmlref}%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    95
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    96
\isadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    97
%
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    98
\endisadelimmlref
413d4224269b updated;
wenzelm
parents: 18537
diff changeset
    99
%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   100
\begin{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   101
FIXME%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   102
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   103
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   104
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   105
\isamarkupsection{Assumptions%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   106
}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   107
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   108
%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   109
\begin{isamarkuptext}%
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   110
An \emph{assumption} is a proposition that it is postulated in the
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   111
  current context.  Local conclusions may use assumptions as
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   112
  additional facts, but this imposes implicit hypotheses that weaken
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   113
  the overall statement.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   114
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   115
  Assumptions are restricted to fixed non-schematic statements, all
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   116
  generality needs to be expressed by explicit quantifiers.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   117
  Nevertheless, the result will be in HHF normal form with outermost
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   118
  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
   119
  of the fixed type \isa{{\isasymalpha}}.  Local derivations accumulate more
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   120
  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
   121
  be covered by the assumptions of the current context.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   122
20459
wenzelm
parents: 20458
diff changeset
   123
  \medskip The \isa{add{\isacharunderscore}assms} operation augments the context by
wenzelm
parents: 20458
diff changeset
   124
  local assumptions, which are parameterized by an arbitrary \isa{export} rule (see below).
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   125
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   126
  The \isa{export} operation moves facts from a (larger) inner
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   127
  context into a (smaller) outer context, by discharging the
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   128
  difference of the assumptions as specified by the associated export
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   129
  rules.  Note that the discharged portion is determined by the
20459
wenzelm
parents: 20458
diff changeset
   130
  difference contexts, not the facts being exported!  There is a
wenzelm
parents: 20458
diff changeset
   131
  separate flag to indicate a goal context, where the result is meant
wenzelm
parents: 20458
diff changeset
   132
  to refine an enclosing sub-goal of a structured proof state (cf.\
wenzelm
parents: 20458
diff changeset
   133
  \secref{sec:isar-proof-state}).
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   134
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   135
  \medskip The most basic export rule discharges assumptions directly
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   136
  by means of the \isa{{\isasymLongrightarrow}} introduction rule:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   137
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   138
  \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
   139
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   140
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   141
  The variant for goal refinements marks the newly introduced
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   142
  premises, which causes the builtin goal refinement scheme of Isar to
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   143
  enforce unification with local premises within the goal:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   144
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   145
  \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
   146
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   147
20459
wenzelm
parents: 20458
diff changeset
   148
  \medskip Alternative assumptions may perform arbitrary
wenzelm
parents: 20458
diff changeset
   149
  transformations on export, as long as a particular portion of
wenzelm
parents: 20458
diff changeset
   150
  hypotheses is removed from the given facts.  For example, a local
wenzelm
parents: 20458
diff changeset
   151
  definition works by fixing \isa{x} and assuming \isa{x\ {\isasymequiv}\ t},
wenzelm
parents: 20458
diff changeset
   152
  with the following export rule to reverse the effect:
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   153
  \[
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   154
  \infer{\isa{{\isasymGamma}\ {\isacharbackslash}\ x\ {\isasymequiv}\ t\ {\isasymturnstile}\ B\ t}}{\isa{{\isasymGamma}\ {\isasymturnstile}\ B\ x}}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   155
  \]
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   156
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   157
  \medskip The general concept supports block-structured reasoning
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   158
  nicely, with arbitrary mechanisms for introducing local assumptions.
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   159
  The common reasoning pattern is as follows:
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   160
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   161
  \medskip
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   162
  \begin{tabular}{l}
20459
wenzelm
parents: 20458
diff changeset
   163
  \isa{add{\isacharunderscore}assms\ e\isactrlisub {\isadigit{1}}\ A\isactrlisub {\isadigit{1}}} \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   164
  \isa{{\isasymdots}} \\
20459
wenzelm
parents: 20458
diff changeset
   165
  \isa{add{\isacharunderscore}assms\ e\isactrlisub n\ A\isactrlisub n} \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   166
  \isa{export} \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   167
  \end{tabular}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   168
  \medskip
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   169
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   170
  \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
   171
  applying the export rules \isa{e\isactrlisub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ e\isactrlisub n}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   172
  inside-out.%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   173
\end{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   174
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   175
%
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   176
\isadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   177
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   178
\endisadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   179
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   180
\isatagmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   181
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   182
\begin{isamarkuptext}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   183
\begin{mldecls}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   184
  \indexmltype{Assumption.export}\verb|type Assumption.export| \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   185
  \indexml{Assumption.assume}\verb|Assumption.assume: cterm -> thm| \\
20459
wenzelm
parents: 20458
diff changeset
   186
  \indexml{Assumption.add-assms}\verb|Assumption.add_assms: Assumption.export ->|\isasep\isanewline%
wenzelm
parents: 20458
diff changeset
   187
\verb|  cterm list -> Proof.context -> thm list * Proof.context| \\
wenzelm
parents: 20458
diff changeset
   188
  \indexml{Assumption.add-assumes}\verb|Assumption.add_assumes: |\isasep\isanewline%
wenzelm
parents: 20458
diff changeset
   189
\verb|  cterm list -> Proof.context -> thm list * Proof.context| \\
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   190
  \indexml{Assumption.export}\verb|Assumption.export: bool -> Proof.context -> Proof.context -> thm -> thm| \\
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   191
  \end{mldecls}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   192
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   193
  \begin{description}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   194
20459
wenzelm
parents: 20458
diff changeset
   195
  \item \verb|Assumption.export| represents arbitrary export
wenzelm
parents: 20458
diff changeset
   196
  rules, which is any function of type \verb|bool -> cterm list -> thm -> thm|,
wenzelm
parents: 20458
diff changeset
   197
  where the \verb|bool| indicates goal mode, and the \verb|cterm list| the collection of assumptions to be discharged
wenzelm
parents: 20458
diff changeset
   198
  simultaneously.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   199
20459
wenzelm
parents: 20458
diff changeset
   200
  \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
   201
  \isa{A{\isacharprime}} is in HHF normal form.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   202
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   203
  \item \verb|Assumption.add_assms|~\isa{e\ As} augments the context
20459
wenzelm
parents: 20458
diff changeset
   204
  by assumptions \isa{As} with export rule \isa{e}.  The
wenzelm
parents: 20458
diff changeset
   205
  resulting facts are hypothetical theorems as produced by \verb|Assumption.assume|.
wenzelm
parents: 20458
diff changeset
   206
wenzelm
parents: 20458
diff changeset
   207
  \item \verb|Assumption.add_assumes|~\isa{As} is a special case of
wenzelm
parents: 20458
diff changeset
   208
  \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
   209
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   210
  \item \verb|Assumption.export|~\isa{is{\isacharunderscore}goal\ inner\ outer\ th}
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   211
  exports result \isa{th} from the the \isa{inner} context
20459
wenzelm
parents: 20458
diff changeset
   212
  back into the \isa{outer} one; \isa{is{\isacharunderscore}goal\ {\isacharequal}\ true} means
wenzelm
parents: 20458
diff changeset
   213
  this is a goal context.  The result is in HHF normal form.  Note
wenzelm
parents: 20458
diff changeset
   214
  that \verb|ProofContext.export| combines \verb|Variable.export|
wenzelm
parents: 20458
diff changeset
   215
  and \verb|Assumption.export| in the canonical way.
20458
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   216
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   217
  \end{description}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   218
\end{isamarkuptext}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   219
\isamarkuptrue%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   220
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   221
\endisatagmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   222
{\isafoldmlref}%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   223
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   224
\isadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   225
%
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   226
\endisadelimmlref
ab1d60e1ee31 explain assumptions;
wenzelm
parents: 20452
diff changeset
   227
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   228
\isamarkupsection{Conclusions%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   229
}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   230
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   231
%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   232
\begin{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   233
FIXME%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   234
\end{isamarkuptext}%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   235
\isamarkuptrue%
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   236
%
20452
wenzelm
parents: 20451
diff changeset
   237
\isamarkupsection{Proof states \label{sec:isar-proof-state}%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   238
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   239
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   240
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   241
\begin{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   242
FIXME
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   243
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   244
\glossary{Proof state}{The whole configuration of a structured proof,
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   245
consisting of a \seeglossary{proof context} and an optional
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   246
\seeglossary{structured goal}.  Internally, an Isar proof state is
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   247
organized as a stack to accomodate block structure of proof texts.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   248
For historical reasons, a low-level \seeglossary{tactical goal} is
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   249
occasionally called ``proof state'' as well.}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   250
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   251
\glossary{Structured goal}{FIXME}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   252
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   253
\glossary{Goal}{See \seeglossary{tactical goal} or \seeglossary{structured goal}. \norefpage}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   254
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   255
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   256
%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   257
\isamarkupsection{Proof methods%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   258
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   259
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   260
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   261
\begin{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   262
FIXME%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   263
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   264
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   265
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   266
\isamarkupsection{Attributes%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   267
}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   268
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   269
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   270
\begin{isamarkuptext}%
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20221
diff changeset
   271
FIXME ?!%
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   272
\end{isamarkuptext}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   273
\isamarkuptrue%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   274
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   275
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   276
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   277
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   278
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   279
\isatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   280
\isacommand{end}\isamarkupfalse%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   281
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   282
\endisatagtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   283
{\isafoldtheory}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   284
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   285
\isadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   286
%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   287
\endisadelimtheory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   288
\isanewline
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   289
\end{isabellebody}%
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   290
%%% Local Variables:
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   291
%%% mode: latex
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   292
%%% TeX-master: "root"
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   293
%%% End: