doc-src/IsarImplementation/Thy/document/Isar.tex
author wenzelm
Wed, 09 Nov 2011 22:43:14 +0100
changeset 45432 12cc89f1eb0c
parent 45414 8ca612982014
child 45592 8baa0b7f3f66
permissions -rw-r--r--
clarified singleton_fixate: intersection with supersort is identity, only replace actual type inference parameters; tuned reject_other, after_infer_fixate;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     1
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{Isar}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     4
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     5
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     6
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     7
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     8
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     9
\isatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    10
\isacommand{theory}\isamarkupfalse%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    11
\ Isar\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    12
\isakeyword{imports}\ Base\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    13
\isakeyword{begin}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    14
\endisatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    15
{\isafoldtheory}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    16
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    17
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    18
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    19
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    20
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    21
\isamarkupchapter{Isar language elements%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    22
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    23
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    24
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    25
\begin{isamarkuptext}%
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    26
The Isar proof language (see also
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    27
  \cite[\S2]{isabelle-isar-ref}) consists of three main categories of
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    28
  language elements as follows.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    29
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    30
  \begin{enumerate}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    31
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    32
  \item Proof \emph{commands} define the primary language of
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    33
  transactions of the underlying Isar/VM interpreter.  Typical
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    34
  examples are \hyperlink{command.fix}{\mbox{\isa{\isacommand{fix}}}}, \hyperlink{command.assume}{\mbox{\isa{\isacommand{assume}}}}, \hyperlink{command.show}{\mbox{\isa{\isacommand{show}}}}, \hyperlink{command.proof}{\mbox{\isa{\isacommand{proof}}}}, and \hyperlink{command.qed}{\mbox{\isa{\isacommand{qed}}}}.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    35
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    36
  Composing proof commands according to the rules of the Isar/VM leads
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    37
  to expressions of structured proof text, such that both the machine
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    38
  and the human reader can give it a meaning as formal reasoning.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    39
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    40
  \item Proof \emph{methods} define a secondary language of mixed
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    41
  forward-backward refinement steps involving facts and goals.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    42
  Typical examples are \hyperlink{method.rule}{\mbox{\isa{rule}}}, \hyperlink{method.unfold}{\mbox{\isa{unfold}}}, and \hyperlink{method.simp}{\mbox{\isa{simp}}}.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    43
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    44
  Methods can occur in certain well-defined parts of the Isar proof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    45
  language, say as arguments to \hyperlink{command.proof}{\mbox{\isa{\isacommand{proof}}}}, \hyperlink{command.qed}{\mbox{\isa{\isacommand{qed}}}},
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    46
  or \hyperlink{command.by}{\mbox{\isa{\isacommand{by}}}}.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    47
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    48
  \item \emph{Attributes} define a tertiary language of small
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    49
  annotations to theorems being defined or referenced.  Attributes can
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    50
  modify both the context and the theorem.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    51
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    52
  Typical examples are \hyperlink{attribute.intro}{\mbox{\isa{intro}}} (which affects the context),
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    53
  and \hyperlink{attribute.symmetric}{\mbox{\isa{symmetric}}} (which affects the theorem).
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    54
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    55
  \end{enumerate}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    56
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    57
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    58
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    59
\isamarkupsection{Proof commands%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    60
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    61
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    62
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    63
\begin{isamarkuptext}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    64
A \emph{proof command} is state transition of the Isar/VM
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    65
  proof interpreter.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    66
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    67
  In principle, Isar proof commands could be defined in user-space as
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    68
  well.  The system is built like that in the first place: one part of
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    69
  the commands are primitive, the other part is defined as derived
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    70
  elements.  Adding to the genuine structured proof language requires
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    71
  profound understanding of the Isar/VM machinery, though, so this is
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    72
  beyond the scope of this manual.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    73
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    74
  What can be done realistically is to define some diagnostic commands
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    75
  that inspect the general state of the Isar/VM, and report some
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    76
  feedback to the user.  Typically this involves checking of the
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    77
  linguistic \emph{mode} of a proof state, or peeking at the pending
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    78
  goals (if available).
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    79
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    80
  Another common application is to define a toplevel command that
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    81
  poses a problem to the user as Isar proof state and processes the
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
    82
  final result relatively to the context.  Thus a proof can be
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    83
  incorporated into the context of some user-space tool, without
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    84
  modifying the Isar proof language itself.%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    85
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    86
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    87
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    88
\isadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    89
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    90
\endisadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    91
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    92
\isatagmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    93
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    94
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    95
\begin{mldecls}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    96
  \indexdef{}{ML type}{Proof.state}\verb|type Proof.state| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    97
  \indexdef{}{ML}{Proof.assert\_forward}\verb|Proof.assert_forward: Proof.state -> Proof.state| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    98
  \indexdef{}{ML}{Proof.assert\_chain}\verb|Proof.assert_chain: Proof.state -> Proof.state| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
    99
  \indexdef{}{ML}{Proof.assert\_backward}\verb|Proof.assert_backward: Proof.state -> Proof.state| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   100
  \indexdef{}{ML}{Proof.simple\_goal}\verb|Proof.simple_goal: Proof.state -> {context: Proof.context, goal: thm}| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   101
  \indexdef{}{ML}{Proof.goal}\verb|Proof.goal: Proof.state ->|\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   102
\verb|  {context: Proof.context, facts: thm list, goal: thm}| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   103
  \indexdef{}{ML}{Proof.raw\_goal}\verb|Proof.raw_goal: Proof.state ->|\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   104
\verb|  {context: Proof.context, facts: thm list, goal: thm}| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   105
  \indexdef{}{ML}{Proof.theorem}\verb|Proof.theorem: Method.text option ->|\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   106
\verb|  (thm list list -> Proof.context -> Proof.context) ->|\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   107
\verb|  (term * term list) list list -> Proof.context -> Proof.state| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   108
  \end{mldecls}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   109
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   110
  \begin{description}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   111
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   112
  \item Type \verb|Proof.state| represents Isar proof states.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   113
  This is a block-structured configuration with proof context,
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   114
  linguistic mode, and optional goal.  The latter consists of goal
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   115
  context, goal facts (``\isa{using}''), and tactical goal state
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   116
  (see \secref{sec:tactical-goals}).
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   117
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   118
  The general idea is that the facts shall contribute to the
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   119
  refinement of some parts of the tactical goal --- how exactly is
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   120
  defined by the proof method that is applied in that situation.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   121
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   122
  \item \verb|Proof.assert_forward|, \verb|Proof.assert_chain|, \verb|Proof.assert_backward| are partial identity functions that fail
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   123
  unless a certain linguistic mode is active, namely ``\isa{proof{\isaliteral{28}{\isacharparenleft}}state{\isaliteral{29}{\isacharparenright}}}'', ``\isa{proof{\isaliteral{28}{\isacharparenleft}}chain{\isaliteral{29}{\isacharparenright}}}'', ``\isa{proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}}'', respectively (using the terminology of
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   124
  \cite{isabelle-isar-ref}).
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   125
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   126
  It is advisable study the implementations of existing proof commands
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   127
  for suitable modes to be asserted.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   128
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   129
  \item \verb|Proof.simple_goal|~\isa{state} returns the structured
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   130
  Isar goal (if available) in the form seen by ``simple'' methods
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   131
  (like \hyperlink{method.simp}{\mbox{\isa{simp}}} or \hyperlink{method.blast}{\mbox{\isa{blast}}}).  The Isar goal facts are
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   132
  already inserted as premises into the subgoals, which are presented
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   133
  individually as in \verb|Proof.goal|.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   134
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   135
  \item \verb|Proof.goal|~\isa{state} returns the structured Isar
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   136
  goal (if available) in the form seen by regular methods (like
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   137
  \hyperlink{method.rule}{\mbox{\isa{rule}}}).  The auxiliary internal encoding of Pure
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   138
  conjunctions is split into individual subgoals as usual.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   139
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   140
  \item \verb|Proof.raw_goal|~\isa{state} returns the structured
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   141
  Isar goal (if available) in the raw internal form seen by ``raw''
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   142
  methods (like \hyperlink{method.induct}{\mbox{\isa{induct}}}).  This form is rarely appropriate
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   143
  for dignostic tools; \verb|Proof.simple_goal| or \verb|Proof.goal|
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   144
  should be used in most situations.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   145
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   146
  \item \verb|Proof.theorem|~\isa{before{\isaliteral{5F}{\isacharunderscore}}qed\ after{\isaliteral{5F}{\isacharunderscore}}qed\ statement\ ctxt}
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   147
  initializes a toplevel Isar proof state within a given context.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   148
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   149
  The optional \isa{before{\isaliteral{5F}{\isacharunderscore}}qed} method is applied at the end of
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   150
  the proof, just before extracting the result (this feature is rarely
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   151
  used).
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   152
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   153
  The \isa{after{\isaliteral{5F}{\isacharunderscore}}qed} continuation receives the extracted result
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   154
  in order to apply it to the final context in a suitable way (e.g.\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   155
  storing named facts).  Note that at this generic level the target
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   156
  context is specified as \verb|Proof.context|, but the usual
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   157
  wrapping of toplevel proofs into command transactions will provide a
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   158
  \verb|local_theory| here (\chref{ch:local-theory}).  This
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   159
  affects the way how results are stored.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   160
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   161
  The \isa{statement} is given as a nested list of terms, each
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   162
  associated with optional \hyperlink{keyword.is}{\mbox{\isa{\isakeyword{is}}}} patterns as usual in the
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   163
  Isar source language.  The original nested list structure over terms
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   164
  is turned into one over theorems when \isa{after{\isaliteral{5F}{\isacharunderscore}}qed} is
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   165
  invoked.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   166
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   167
  \end{description}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   168
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   169
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   170
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   171
\endisatagmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   172
{\isafoldmlref}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   173
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   174
\isadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   175
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   176
\endisadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   177
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   178
\isadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   179
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   180
\endisadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   181
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   182
\isatagmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   183
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   184
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   185
\begin{matharray}{rcl}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   186
  \indexdef{}{ML antiquotation}{Isar.goal}\hypertarget{ML antiquotation.Isar.goal}{\hyperlink{ML antiquotation.Isar.goal}{\mbox{\isa{Isar{\isaliteral{2E}{\isachardot}}goal}}}} & : & \isa{ML{\isaliteral{5F}{\isacharunderscore}}antiquotation} \\
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   187
  \end{matharray}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   188
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   189
  \begin{description}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   190
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   191
  \item \isa{{\isaliteral{40}{\isacharat}}{\isaliteral{7B}{\isacharbraceleft}}Isar{\isaliteral{2E}{\isachardot}}goal{\isaliteral{7D}{\isacharbraceright}}} refers to the regular goal state (if
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   192
  available) of the current proof state managed by the Isar toplevel
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   193
  --- as abstract value.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   194
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   195
  This only works for diagnostic ML commands, such as \hyperlink{command.ML-val}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}val}}}} or \hyperlink{command.ML-command}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}command}}}}.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   196
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   197
  \end{description}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   198
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   199
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   200
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   201
\endisatagmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   202
{\isafoldmlantiq}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   203
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   204
\isadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   205
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   206
\endisadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   207
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   208
\isadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   209
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   210
\endisadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   211
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   212
\isatagmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   213
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   214
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   215
The following example peeks at a certain goal configuration.%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   216
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   217
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   218
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   219
\endisatagmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   220
{\isafoldmlex}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   221
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   222
\isadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   223
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   224
\endisadelimmlex
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   225
\isacommand{notepad}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   226
\isanewline
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   227
\isakeyword{begin}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   228
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   229
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   230
\ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   231
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   232
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   233
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   234
\isacommand{have}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   235
\ A\ \isakeyword{and}\ B\ \isakeyword{and}\ C%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   236
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   237
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   238
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   239
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   240
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   241
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   242
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   243
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   244
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   245
\ \ \ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   246
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   247
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   248
\isatagML
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   249
\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}val}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   250
\ {\isaliteral{7B2A}{\isacharverbatimopen}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   251
\ \ \ \ \ \ val\ n\ {\isaliteral{3D}{\isacharequal}}\ Thm{\isaliteral{2E}{\isachardot}}nprems{\isaliteral{5F}{\isacharunderscore}}of\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{23}{\isacharhash}}goal\ %
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   252
\isaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   253
Isar{\isaliteral{2E}{\isachardot}}goal{}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   254
\endisaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   255
{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   256
\ \ \ \ \ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   257
\isaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   258
assert{}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   259
\endisaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   260
\ {\isaliteral{28}{\isacharparenleft}}n\ {\isaliteral{3D}{\isacharequal}}\ {\isadigit{3}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   261
\ \ \ \ {\isaliteral{2A7D}{\isacharverbatimclose}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   262
\endisatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   263
{\isafoldML}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   264
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   265
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   266
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   267
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   268
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   269
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   270
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   271
\ \ \ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   272
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   273
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   274
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   275
\isacommand{oops}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   276
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   277
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   278
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   279
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   280
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   281
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   282
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   283
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   284
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   285
Here we see 3 individual subgoals in the same way as regular
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   286
  proof methods would do.%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   287
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   288
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   289
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   290
\isamarkupsection{Proof methods%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   291
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   292
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   293
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   294
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   295
A \isa{method} is a function \isa{context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ thm\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ goal\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ {\isaliteral{28}{\isacharparenleft}}cases\ {\isaliteral{5C3C74696D65733E}{\isasymtimes}}\ goal{\isaliteral{29}{\isacharparenright}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}} that operates on the full Isar goal
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   296
  configuration with context, goal facts, and tactical goal state and
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   297
  enumerates possible follow-up goal states, with the potential
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   298
  addition of named extensions of the proof context (\emph{cases}).
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   299
  The latter feature is rarely used.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   300
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   301
  This means a proof method is like a structurally enhanced tactic
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   302
  (cf.\ \secref{sec:tactics}).  The well-formedness conditions for
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   303
  tactics need to hold for methods accordingly, with the following
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   304
  additions.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   305
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   306
  \begin{itemize}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   307
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   308
  \item Goal addressing is further limited either to operate either
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   309
  uniformly on \emph{all} subgoals, or specifically on the
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   310
  \emph{first} subgoal.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   311
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   312
  Exception: old-style tactic emulations that are embedded into the
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   313
  method space, e.g.\ \hyperlink{method.rule-tac}{\mbox{\isa{rule{\isaliteral{5F}{\isacharunderscore}}tac}}}.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   314
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   315
  \item A non-trivial method always needs to make progress: an
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   316
  identical follow-up goal state has to be avoided.\footnote{This
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   317
  enables the user to write method expressions like \isa{meth\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2B}{\isacharplus}}}
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   318
  without looping, while the trivial do-nothing case can be recovered
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   319
  via \isa{meth\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{3F}{\isacharquery}}}.}
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   320
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   321
  Exception: trivial stuttering steps, such as ``\hyperlink{method.-}{\mbox{\isa{{\isaliteral{2D}{\isacharminus}}}}}'' or
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   322
  \hyperlink{method.succeed}{\mbox{\isa{succeed}}}.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   323
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   324
  \item Goal facts passed to the method must not be ignored.  If there
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   325
  is no sensible use of facts outside the goal state, facts should be
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   326
  inserted into the subgoals that are addressed by the method.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   327
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   328
  \end{itemize}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   329
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   330
  \medskip Syntactically, the language of proof methods appears as
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   331
  arguments to Isar commands like \hyperlink{command.by}{\mbox{\isa{\isacommand{by}}}} or \hyperlink{command.apply}{\mbox{\isa{\isacommand{apply}}}}.
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   332
  User-space additions are reasonably easy by plugging suitable
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   333
  method-valued parser functions into the framework, using the
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   334
  \hyperlink{command.method-setup}{\mbox{\isa{\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}}}} command, for example.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   335
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   336
  To get a better idea about the range of possibilities, consider the
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   337
  following Isar proof schemes.  This is the general form of
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   338
  structured proof text:
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   339
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   340
  \medskip
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   341
  \begin{tabular}{l}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   342
  \hyperlink{command.from}{\mbox{\isa{\isacommand{from}}}}~\isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}}~\hyperlink{command.have}{\mbox{\isa{\isacommand{have}}}}~\isa{props}~\hyperlink{command.using}{\mbox{\isa{\isacommand{using}}}}~\isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}} \\
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   343
  \hyperlink{command.proof}{\mbox{\isa{\isacommand{proof}}}}~\isa{{\isaliteral{28}{\isacharparenleft}}initial{\isaliteral{5F}{\isacharunderscore}}method{\isaliteral{29}{\isacharparenright}}} \\
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   344
  \quad\isa{body} \\
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   345
  \hyperlink{command.qed}{\mbox{\isa{\isacommand{qed}}}}~\isa{{\isaliteral{28}{\isacharparenleft}}terminal{\isaliteral{5F}{\isacharunderscore}}method{\isaliteral{29}{\isacharparenright}}} \\
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   346
  \end{tabular}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   347
  \medskip
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   348
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   349
  The goal configuration consists of \isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}} and
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   350
  \isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}} appended in that order, and various \isa{props} being claimed.  The \isa{initial{\isaliteral{5F}{\isacharunderscore}}method} is invoked
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   351
  with facts and goals together and refines the problem to something
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   352
  that is handled recursively in the proof \isa{body}.  The \isa{terminal{\isaliteral{5F}{\isacharunderscore}}method} has another chance to finish any remaining
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   353
  subgoals, but it does not see the facts of the initial step.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   354
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   355
  \medskip This pattern illustrates unstructured proof scripts:
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   356
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   357
  \medskip
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   358
  \begin{tabular}{l}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   359
  \hyperlink{command.have}{\mbox{\isa{\isacommand{have}}}}~\isa{props} \\
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   360
  \quad\hyperlink{command.using}{\mbox{\isa{\isacommand{using}}}}~\isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}}~\hyperlink{command.apply}{\mbox{\isa{\isacommand{apply}}}}~\isa{method\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}} \\
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   361
  \quad\hyperlink{command.apply}{\mbox{\isa{\isacommand{apply}}}}~\isa{method\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}} \\
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   362
  \quad\hyperlink{command.using}{\mbox{\isa{\isacommand{using}}}}~\isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{3}}}~\hyperlink{command.apply}{\mbox{\isa{\isacommand{apply}}}}~\isa{method\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{3}}} \\
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   363
  \quad\hyperlink{command.done}{\mbox{\isa{\isacommand{done}}}} \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   364
  \end{tabular}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   365
  \medskip
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   366
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   367
  The \isa{method\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}} operates on the original claim while
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   368
  using \isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}}.  Since the \hyperlink{command.apply}{\mbox{\isa{\isacommand{apply}}}} command
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   369
  structurally resets the facts, the \isa{method\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}} will
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   370
  operate on the remaining goal state without facts.  The \isa{method\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{3}}} will see again a collection of \isa{facts\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{3}}} that has been inserted into the script explicitly.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   371
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   372
  \medskip Empirically, any Isar proof method can be categorized as
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   373
  follows.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   374
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   375
  \begin{enumerate}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   376
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   377
  \item \emph{Special method with cases} with named context additions
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   378
  associated with the follow-up goal state.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   379
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   380
  Example: \hyperlink{method.induct}{\mbox{\isa{induct}}}, which is also a ``raw'' method since it
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   381
  operates on the internal representation of simultaneous claims as
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   382
  Pure conjunction (\secref{{sec:logic-aux}}), instead of separate
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   383
  subgoals (\secref{sec::tactical-goals}).
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   384
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   385
  \item \emph{Structured method} with strong emphasis on facts outside
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   386
  the goal state.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   387
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   388
  Example: \hyperlink{method.rule}{\mbox{\isa{rule}}}, which captures the key ideas behind
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   389
  structured reasoning in Isar in purest form.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   390
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   391
  \item \emph{Simple method} with weaker emphasis on facts, which are
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   392
  inserted into subgoals to emulate old-style tactical as
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   393
  ``premises''.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   394
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   395
  Examples: \hyperlink{method.simp}{\mbox{\isa{simp}}}, \hyperlink{method.blast}{\mbox{\isa{blast}}}, \hyperlink{method.auto}{\mbox{\isa{auto}}}.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   396
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   397
  \item \emph{Old-style tactic emulation} with detailed numeric goal
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   398
  addressing and explicit references to entities of the internal goal
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   399
  state (which are otherwise invisible from proper Isar proof text).
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   400
  The naming convention \isa{foo{\isaliteral{5F}{\isacharunderscore}}tac} makes this special
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   401
  non-standard status clear.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   402
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   403
  Example: \hyperlink{method.rule-tac}{\mbox{\isa{rule{\isaliteral{5F}{\isacharunderscore}}tac}}}.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   404
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   405
  \end{enumerate}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   406
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   407
  When implementing proof methods, it is advisable to study existing
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   408
  implementations carefully and imitate the typical ``boiler plate''
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   409
  for context-sensitive parsing and further combinators to wrap-up
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   410
  tactic expressions as methods.\footnote{Aliases or abbreviations of
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   411
  the standard method combinators should be avoided.  Note that from
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   412
  Isabelle99 until Isabelle2009 the system did provide various odd
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   413
  combinations of method wrappers that made user applications more
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   414
  complicated than necessary.}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   415
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   416
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   417
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   418
\isadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   419
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   420
\endisadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   421
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   422
\isatagmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   423
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   424
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   425
\begin{mldecls}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   426
  \indexdef{}{ML type}{Proof.method}\verb|type Proof.method| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   427
  \indexdef{}{ML}{METHOD\_CASES}\verb|METHOD_CASES: (thm list -> cases_tactic) -> Proof.method| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   428
  \indexdef{}{ML}{METHOD}\verb|METHOD: (thm list -> tactic) -> Proof.method| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   429
  \indexdef{}{ML}{SIMPLE\_METHOD}\verb|SIMPLE_METHOD: tactic -> Proof.method| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   430
  \indexdef{}{ML}{SIMPLE\_METHOD'}\verb|SIMPLE_METHOD': (int -> tactic) -> Proof.method| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   431
  \indexdef{}{ML}{HEADGOAL}\verb|HEADGOAL: (int -> tactic) -> tactic| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   432
  \indexdef{}{ML}{Method.insert\_tac}\verb|Method.insert_tac: thm list -> int -> tactic| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   433
  \indexdef{}{ML}{Method.setup}\verb|Method.setup: binding -> (Proof.context -> Proof.method) context_parser ->|\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   434
\verb|  string -> theory -> theory| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   435
  \end{mldecls}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   436
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   437
  \begin{description}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   438
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   439
  \item Type \verb|Proof.method| represents proof methods as
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   440
  abstract type.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   441
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   442
  \item \verb|METHOD_CASES|~\isa{{\isaliteral{28}{\isacharparenleft}}fn\ facts\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ cases{\isaliteral{5F}{\isacharunderscore}}tactic{\isaliteral{29}{\isacharparenright}}} wraps
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   443
  \isa{cases{\isaliteral{5F}{\isacharunderscore}}tactic} depending on goal facts as proof method with
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   444
  cases; the goal context is passed via method syntax.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   445
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   446
  \item \verb|METHOD|~\isa{{\isaliteral{28}{\isacharparenleft}}fn\ facts\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ tactic{\isaliteral{29}{\isacharparenright}}} wraps \isa{tactic} depending on goal facts as regular proof method; the goal
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   447
  context is passed via method syntax.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   448
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   449
  \item \verb|SIMPLE_METHOD|~\isa{tactic} wraps a tactic that
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   450
  addresses all subgoals uniformly as simple proof method.  Goal facts
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   451
  are already inserted into all subgoals before \isa{tactic} is
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   452
  applied.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   453
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   454
  \item \verb|SIMPLE_METHOD'|~\isa{tactic} wraps a tactic that
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   455
  addresses a specific subgoal as simple proof method.  Goal facts are
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   456
  already inserted into the first subgoal before \isa{tactic} is
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   457
  applied to the same.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   458
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   459
  \item \verb|HEADGOAL|~\isa{tactic} applies \isa{tactic} to
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   460
  the first subgoal.  This is convenient to reproduce part the \verb|SIMPLE_METHOD'| wrapping within regular \verb|METHOD|, for example.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   461
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   462
  \item \verb|Method.insert_tac|~\isa{facts\ i} inserts \isa{facts} into subgoal \isa{i}.  This is convenient to reproduce
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   463
  part of the \verb|SIMPLE_METHOD| or \verb|SIMPLE_METHOD'| wrapping
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   464
  within regular \verb|METHOD|, for example.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   465
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   466
  \item \verb|Method.setup|~\isa{name\ parser\ description} provides
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   467
  the functionality of the Isar command \hyperlink{command.method-setup}{\mbox{\isa{\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}}}} as ML
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   468
  function.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   469
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   470
  \end{description}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   471
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   472
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   473
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   474
\endisatagmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   475
{\isafoldmlref}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   476
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   477
\isadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   478
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   479
\endisadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   480
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   481
\isadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   482
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   483
\endisadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   484
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   485
\isatagmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   486
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   487
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   488
See also \hyperlink{command.method-setup}{\mbox{\isa{\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}}}} in
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   489
  \cite{isabelle-isar-ref} which includes some abstract examples.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   490
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   491
  \medskip The following toy examples illustrate how the goal facts
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   492
  and state are passed to proof methods.  The pre-defined proof method
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   493
  called ``\hyperlink{method.tactic}{\mbox{\isa{tactic}}}'' wraps ML source of type \verb|tactic| (abstracted over \verb|facts|).  This allows immediate
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   494
  experimentation without parsing of concrete syntax.%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   495
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   496
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   497
%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   498
\endisatagmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   499
{\isafoldmlex}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   500
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   501
\isadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   502
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   503
\endisadelimmlex
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   504
\isacommand{notepad}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   505
\isanewline
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   506
\isakeyword{begin}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   507
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   508
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   509
\ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   510
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   511
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   512
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   513
\isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   514
\ a{\isaliteral{3A}{\isacharcolon}}\ A\ \isakeyword{and}\ b{\isaliteral{3A}{\isacharcolon}}\ B\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   515
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   516
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   517
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   518
\ \ \ \ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   519
\ {\isaliteral{28}{\isacharparenleft}}tactic\ {\isaliteral{7B2A}{\isacharverbatimopen}}\ rtac\ %
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   520
\isaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   521
thm\ conjI{}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   522
\endisaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   523
\ {\isadigit{1}}\ {\isaliteral{2A7D}{\isacharverbatimclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   524
\ \ \ \ \isacommand{using}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   525
\ a\ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   526
\ {\isaliteral{28}{\isacharparenleft}}tactic\ {\isaliteral{7B2A}{\isacharverbatimopen}}\ resolve{\isaliteral{5F}{\isacharunderscore}}tac\ facts\ {\isadigit{1}}\ {\isaliteral{2A7D}{\isacharverbatimclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   527
\ \ \ \ \isacommand{using}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   528
\ b\ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   529
\ {\isaliteral{28}{\isacharparenleft}}tactic\ {\isaliteral{7B2A}{\isacharverbatimopen}}\ resolve{\isaliteral{5F}{\isacharunderscore}}tac\ facts\ {\isadigit{1}}\ {\isaliteral{2A7D}{\isacharverbatimclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   530
\ \ \ \ \isacommand{done}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   531
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   532
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   533
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   534
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   535
\ \ \ \ \isacommand{using}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   536
\ a\ \isakeyword{and}\ b%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   537
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   538
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   539
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   540
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   541
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   542
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   543
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   544
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   545
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   546
\ \ \ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   547
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   548
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   549
\isatagML
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   550
\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}val}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   551
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{40}{\isacharat}}{\isaliteral{7B}{\isacharbraceleft}}Isar{\isaliteral{2E}{\isachardot}}goal{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{22}{\isachardoublequoteclose}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   552
\endisatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   553
{\isafoldML}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   554
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   555
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   556
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   557
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   558
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   559
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   560
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   561
\ \ \ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   562
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   563
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   564
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   565
\isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   566
\ {\isaliteral{28}{\isacharparenleft}}tactic\ {\isaliteral{7B2A}{\isacharverbatimopen}}\ Method{\isaliteral{2E}{\isachardot}}insert{\isaliteral{5F}{\isacharunderscore}}tac\ facts\ {\isadigit{1}}\ {\isaliteral{2A7D}{\isacharverbatimclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   567
\ \ \ \ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   568
\ {\isaliteral{28}{\isacharparenleft}}tactic\ {\isaliteral{7B2A}{\isacharverbatimopen}}\ {\isaliteral{28}{\isacharparenleft}}rtac\ %
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   569
\isaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   570
thm\ conjI{}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   571
\endisaantiq
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   572
\ THEN{\isaliteral{5F}{\isacharunderscore}}ALL{\isaliteral{5F}{\isacharunderscore}}NEW\ atac{\isaliteral{29}{\isacharparenright}}\ {\isadigit{1}}\ {\isaliteral{2A7D}{\isacharverbatimclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   573
\ \ \ \ \isacommand{done}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   574
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   575
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   576
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   577
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   578
\isadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   579
\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   580
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   581
\endisadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   582
\isacommand{end}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   583
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   584
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   585
\medskip The next example implements a method that simplifies
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   586
  the first subgoal by rewrite rules given as arguments.%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   587
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   588
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   589
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   590
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   591
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   592
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   593
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   594
\isatagML
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   595
\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   596
\ my{\isaliteral{5F}{\isacharunderscore}}simp\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B2A}{\isacharverbatimopen}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   597
\ \ Attrib{\isaliteral{2E}{\isachardot}}thms\ {\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}fn\ thms\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ fn\ ctxt\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   598
\ \ \ \ SIMPLE{\isaliteral{5F}{\isacharunderscore}}METHOD{\isaliteral{27}{\isacharprime}}\ {\isaliteral{28}{\isacharparenleft}}fn\ i\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   599
\ \ \ \ \ \ CHANGED\ {\isaliteral{28}{\isacharparenleft}}asm{\isaliteral{5F}{\isacharunderscore}}full{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5F}{\isacharunderscore}}tac\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   600
\ \ \ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}HOL{\isaliteral{5F}{\isacharunderscore}}basic{\isaliteral{5F}{\isacharunderscore}}ss\ addsimps\ thms{\isaliteral{29}{\isacharparenright}}\ i{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   601
{\isaliteral{2A7D}{\isacharverbatimclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}rewrite\ subgoal\ by\ given\ rules{\isaliteral{22}{\isachardoublequoteclose}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   602
\endisatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   603
{\isafoldML}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   604
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   605
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   606
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   607
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   608
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   609
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   610
The concrete syntax wrapping of \hyperlink{command.method-setup}{\mbox{\isa{\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}}}} always
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   611
  passes-through the proof context at the end of parsing, but it is
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   612
  not used in this example.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   613
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   614
  The \verb|Attrib.thms| parser produces a list of theorems from the
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   615
  usual Isar syntax involving attribute expressions etc.\ (syntax
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   616
  category \hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}) \cite{isabelle-isar-ref}.  The resulting
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   617
  \verb|thms| are added to \verb|HOL_basic_ss| which already
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   618
  contains the basic Simplifier setup for HOL.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   619
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   620
  The tactic \verb|asm_full_simp_tac| is the one that is also used in
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   621
  method \hyperlink{method.simp}{\mbox{\isa{simp}}} by default.  The extra wrapping by the \verb|CHANGED| tactical ensures progress of simplification: identical goal
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   622
  states are filtered out explicitly to make the raw tactic conform to
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   623
  standard Isar method behaviour.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   624
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   625
  \medskip Method \hyperlink{method.my-simp}{\mbox{\isa{my{\isaliteral{5F}{\isacharunderscore}}simp}}} can be used in Isar proofs like
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   626
  this:%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   627
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   628
\isamarkuptrue%
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   629
\isacommand{notepad}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   630
\isanewline
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   631
\isakeyword{begin}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   632
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   633
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   634
\ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   635
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   636
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   637
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   638
\isacommand{fix}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   639
\ a\ b\ c\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   640
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   641
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}a\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   642
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   643
\ b{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}b\ {\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   644
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   645
\ {\isaliteral{22}{\isachardoublequoteopen}}a\ {\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{by}\isamarkupfalse%
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   646
\ {\isaliteral{28}{\isacharparenleft}}my{\isaliteral{5F}{\isacharunderscore}}simp\ a\ b{\isaliteral{29}{\isacharparenright}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   647
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   648
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   649
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   650
\isadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   651
\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   652
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   653
\endisadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   654
\isacommand{end}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   655
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   656
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   657
Here is a similar method that operates on all subgoals,
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   658
  instead of just the first one.%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   659
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   660
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   661
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   662
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   663
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   664
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   665
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   666
\isatagML
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   667
\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   668
\ my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5F}{\isacharunderscore}}all\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B2A}{\isacharverbatimopen}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   669
\ \ Attrib{\isaliteral{2E}{\isachardot}}thms\ {\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}fn\ thms\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ fn\ ctxt\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   670
\ \ \ \ SIMPLE{\isaliteral{5F}{\isacharunderscore}}METHOD\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   671
\ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}CHANGED\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   672
\ \ \ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}ALLGOALS\ {\isaliteral{28}{\isacharparenleft}}asm{\isaliteral{5F}{\isacharunderscore}}full{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5F}{\isacharunderscore}}tac\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   673
\ \ \ \ \ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}HOL{\isaliteral{5F}{\isacharunderscore}}basic{\isaliteral{5F}{\isacharunderscore}}ss\ addsimps\ thms{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   674
{\isaliteral{2A7D}{\isacharverbatimclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}rewrite\ all\ subgoals\ by\ given\ rules{\isaliteral{22}{\isachardoublequoteclose}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   675
\endisatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   676
{\isafoldML}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   677
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   678
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   679
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   680
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   681
\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   682
\isanewline
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   683
\isacommand{notepad}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   684
\isanewline
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   685
\isakeyword{begin}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   686
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   687
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   688
\ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   689
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   690
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   691
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   692
\isacommand{fix}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   693
\ a\ b\ c\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   694
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   695
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}a\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   696
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   697
\ b{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}b\ {\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   698
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   699
\ {\isaliteral{22}{\isachardoublequoteopen}}a\ {\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{and}\ {\isaliteral{22}{\isachardoublequoteopen}}c\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{by}\isamarkupfalse%
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   700
\ {\isaliteral{28}{\isacharparenleft}}my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5F}{\isacharunderscore}}all\ a\ b{\isaliteral{29}{\isacharparenright}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   701
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   702
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   703
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   704
\isadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   705
\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   706
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   707
\endisadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   708
\isacommand{end}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   709
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   710
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   711
\medskip Apart from explicit arguments, common proof methods
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   712
  typically work with a default configuration provided by the context.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   713
  As a shortcut to rule management we use a cheap solution via functor
40802
3cd23f676c5b updated generated files;
wenzelm
parents: 40406
diff changeset
   714
  \verb|Named_Thms| (see also \verb|~~/src/Pure/Tools/named_thms.ML|).%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   715
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   716
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   717
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   718
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   719
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   720
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   721
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   722
\isatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   723
\isacommand{ML}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   724
\ {\isaliteral{7B2A}{\isacharverbatimopen}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   725
\ \ structure\ My{\isaliteral{5F}{\isacharunderscore}}Simps\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   726
\ \ \ \ Named{\isaliteral{5F}{\isacharunderscore}}Thms\isanewline
45414
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   727
\ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}val\ name\ {\isaliteral{3D}{\isacharequal}}\ %
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   728
\isaantiq
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   729
binding\ my{\isaliteral{5F}{\isacharunderscore}}simp{}%
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   730
\endisaantiq
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   731
\ val\ description\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{22}{\isachardoublequote}}my{\isaliteral{5F}{\isacharunderscore}}simp\ rule{\isaliteral{22}{\isachardoublequote}}{\isaliteral{29}{\isacharparenright}}\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   732
{\isaliteral{2A7D}{\isacharverbatimclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   733
\isacommand{setup}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   734
\ My{\isaliteral{5F}{\isacharunderscore}}Simps{\isaliteral{2E}{\isachardot}}setup%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   735
\endisatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   736
{\isafoldML}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   737
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   738
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   739
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   740
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   741
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   742
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   743
This provides ML access to a list of theorems in canonical
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   744
  declaration order via \verb|My_Simps.get|.  The user can add or
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   745
  delete rules via the attribute \hyperlink{attribute.my-simp}{\mbox{\isa{my{\isaliteral{5F}{\isacharunderscore}}simp}}}.  The actual
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   746
  proof method is now defined as before, but we append the explicit
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   747
  arguments and the rules from the context.%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   748
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   749
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   750
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   751
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   752
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   753
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   754
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   755
\isatagML
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   756
\isacommand{method{\isaliteral{5F}{\isacharunderscore}}setup}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   757
\ my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{27}{\isacharprime}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B2A}{\isacharverbatimopen}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   758
\ \ Attrib{\isaliteral{2E}{\isachardot}}thms\ {\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}fn\ thms\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ fn\ ctxt\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   759
\ \ \ \ SIMPLE{\isaliteral{5F}{\isacharunderscore}}METHOD{\isaliteral{27}{\isacharprime}}\ {\isaliteral{28}{\isacharparenleft}}fn\ i\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   760
\ \ \ \ \ \ CHANGED\ {\isaliteral{28}{\isacharparenleft}}asm{\isaliteral{5F}{\isacharunderscore}}full{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5F}{\isacharunderscore}}tac\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   761
\ \ \ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}HOL{\isaliteral{5F}{\isacharunderscore}}basic{\isaliteral{5F}{\isacharunderscore}}ss\ addsimps\ {\isaliteral{28}{\isacharparenleft}}thms\ {\isaliteral{40}{\isacharat}}\ My{\isaliteral{5F}{\isacharunderscore}}Simps{\isaliteral{2E}{\isachardot}}get\ ctxt{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ i{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   762
{\isaliteral{2A7D}{\isacharverbatimclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}rewrite\ subgoal\ by\ given\ rules\ and\ my{\isaliteral{5F}{\isacharunderscore}}simp\ rules\ from\ the\ context{\isaliteral{22}{\isachardoublequoteclose}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   763
\endisatagML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   764
{\isafoldML}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   765
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   766
\isadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   767
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   768
\endisadelimML
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   769
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   770
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   771
\medskip Method \hyperlink{method.my-simp'}{\mbox{\isa{my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{27}{\isacharprime}}}}} can be used in Isar proofs
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   772
  like this:%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   773
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   774
\isamarkuptrue%
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   775
\isacommand{notepad}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   776
\isanewline
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   777
\isakeyword{begin}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   778
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   779
\isadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   780
\ \ %
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   781
\endisadelimproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   782
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   783
\isatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   784
\isacommand{fix}\isamarkupfalse%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   785
\ a\ b\ c\isanewline
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   786
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   787
\ {\isaliteral{5B}{\isacharbrackleft}}my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}a\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ b{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   788
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   789
\ {\isaliteral{5B}{\isacharbrackleft}}my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}b\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ c{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   790
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   791
\ {\isaliteral{22}{\isachardoublequoteopen}}a\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ c{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{by}\isamarkupfalse%
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   792
\ my{\isaliteral{5F}{\isacharunderscore}}simp{\isaliteral{27}{\isacharprime}}%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   793
\endisatagproof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   794
{\isafoldproof}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   795
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   796
\isadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   797
\isanewline
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   798
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   799
\endisadelimproof
40964
482a8334ee9e prefer 'notepad' over 'example_proof';
wenzelm
parents: 40802
diff changeset
   800
\isacommand{end}\isamarkupfalse%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   801
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   802
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   803
\medskip The \hyperlink{method.my-simp}{\mbox{\isa{my{\isaliteral{5F}{\isacharunderscore}}simp}}} variants defined above are
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   804
  ``simple'' methods, i.e.\ the goal facts are merely inserted as goal
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   805
  premises by the \verb|SIMPLE_METHOD'| or \verb|SIMPLE_METHOD| wrapper.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   806
  For proof methods that are similar to the standard collection of
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   807
  \hyperlink{method.simp}{\mbox{\isa{simp}}}, \hyperlink{method.blast}{\mbox{\isa{blast}}}, \hyperlink{method.fast}{\mbox{\isa{fast}}}, \hyperlink{method.auto}{\mbox{\isa{auto}}}
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   808
  there is little more that can be done.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   809
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   810
  Note that using the primary goal facts in the same manner as the
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   811
  method arguments obtained via concrete syntax or the context does
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   812
  not meet the requirement of ``strong emphasis on facts'' of regular
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   813
  proof methods, because rewrite rules as used above can be easily
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   814
  ignored.  A proof text ``\hyperlink{command.using}{\mbox{\isa{\isacommand{using}}}}~\isa{foo}~\hyperlink{command.by}{\mbox{\isa{\isacommand{by}}}}~\isa{my{\isaliteral{5F}{\isacharunderscore}}simp}'' where \isa{foo} is not used would
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   815
  deceive the reader.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   816
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   817
  \medskip The technical treatment of rules from the context requires
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   818
  further attention.  Above we rebuild a fresh \verb|simpset| from
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   819
  the arguments and \emph{all} rules retrieved from the context on
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   820
  every invocation of the method.  This does not scale to really large
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   821
  collections of rules, which easily emerges in the context of a big
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   822
  theory library, for example.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   823
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   824
  This is an inherent limitation of the simplistic rule management via
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   825
  functor \verb|Named_Thms|, because it lacks tool-specific
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   826
  storage and retrieval.  More realistic applications require
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   827
  efficient index-structures that organize theorems in a customized
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   828
  manner, such as a discrimination net that is indexed by the
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   829
  left-hand sides of rewrite rules.  For variations on the Simplifier,
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   830
  re-use of the existing type \verb|simpset| is adequate, but
40126
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   831
  scalability would require it be maintained statically within the
916cb4a28ffd misc tuning;
wenzelm
parents: 39885
diff changeset
   832
  context data, not dynamically on each tool invocation.%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   833
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   834
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   835
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   836
\isamarkupsection{Attributes \label{sec:attributes}%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   837
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   838
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   839
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   840
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   841
An \emph{attribute} is a function \isa{context\ {\isaliteral{5C3C74696D65733E}{\isasymtimes}}\ thm\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ context\ {\isaliteral{5C3C74696D65733E}{\isasymtimes}}\ thm}, which means both a (generic) context and a theorem
45414
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   842
  can be modified simultaneously.  In practice this mixed form is very
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   843
  rare, instead attributes are presented either as \emph{declaration
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   844
  attribute:} \isa{thm\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ context} or \emph{rule
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   845
  attribute:} \isa{context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ thm\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ thm}.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   846
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   847
  Attributes can have additional arguments via concrete syntax.  There
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   848
  is a collection of context-sensitive parsers for various logical
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   849
  entities (types, terms, theorems).  These already take care of
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   850
  applying morphisms to the arguments when attribute expressions are
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   851
  moved into a different context (see also \secref{sec:morphisms}).
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   852
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   853
  When implementing declaration attributes, it is important to operate
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   854
  exactly on the variant of the generic context that is provided by
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   855
  the system, which is either global theory context or local proof
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   856
  context.  In particular, the background theory of a local context
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   857
  must not be modified in this situation!%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   858
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   859
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   860
%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   861
\isadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   862
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   863
\endisadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   864
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   865
\isatagmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   866
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   867
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   868
\begin{mldecls}
45414
8ca612982014 updated functor Named_Thms;
wenzelm
parents: 40964
diff changeset
   869
  \indexdef{}{ML type}{attribute}\verb|type attribute| \\
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   870
  \indexdef{}{ML}{Thm.rule\_attribute}\verb|Thm.rule_attribute: (Context.generic -> thm -> thm) -> attribute| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   871
  \indexdef{}{ML}{Thm.declaration\_attribute}\verb|Thm.declaration_attribute: |\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   872
\verb|  (thm -> Context.generic -> Context.generic) -> attribute| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   873
  \indexdef{}{ML}{Attrib.setup}\verb|Attrib.setup: binding -> attribute context_parser ->|\isasep\isanewline%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   874
\verb|  string -> theory -> theory| \\
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   875
  \end{mldecls}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   876
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   877
  \begin{description}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   878
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   879
  \item Type \verb|attribute| represents attributes as concrete
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   880
  type alias.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   881
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   882
  \item \verb|Thm.rule_attribute|~\isa{{\isaliteral{28}{\isacharparenleft}}fn\ context\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ rule{\isaliteral{29}{\isacharparenright}}} wraps
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   883
  a context-dependent rule (mapping on \verb|thm|) as attribute.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   884
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   885
  \item \verb|Thm.declaration_attribute|~\isa{{\isaliteral{28}{\isacharparenleft}}fn\ thm\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ decl{\isaliteral{29}{\isacharparenright}}}
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   886
  wraps a theorem-dependent declaration (mapping on \verb|Context.generic|) as attribute.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   887
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   888
  \item \verb|Attrib.setup|~\isa{name\ parser\ description} provides
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   889
  the functionality of the Isar command \hyperlink{command.attribute-setup}{\mbox{\isa{\isacommand{attribute{\isaliteral{5F}{\isacharunderscore}}setup}}}} as
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   890
  ML function.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   891
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   892
  \end{description}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   893
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   894
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   895
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   896
\endisatagmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   897
{\isafoldmlref}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   898
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   899
\isadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   900
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   901
\endisadelimmlref
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   902
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   903
\isadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   904
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   905
\endisadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   906
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   907
\isatagmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   908
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   909
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40126
diff changeset
   910
See also \hyperlink{command.attribute-setup}{\mbox{\isa{\isacommand{attribute{\isaliteral{5F}{\isacharunderscore}}setup}}}} in
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   911
  \cite{isabelle-isar-ref} which includes some abstract examples.%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   912
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   913
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   914
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   915
\endisatagmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   916
{\isafoldmlex}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   917
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   918
\isadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   919
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   920
\endisadelimmlex
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 30296
diff changeset
   921
%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   922
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   923
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   924
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   925
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   926
\isatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   927
\isacommand{end}\isamarkupfalse%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   928
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   929
\endisatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   930
{\isafoldtheory}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   931
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   932
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   933
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   934
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   935
\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   936
\end{isabellebody}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   937
%%% Local Variables:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   938
%%% mode: latex
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   939
%%% TeX-master: "root"
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   940
%%% End: