doc-src/TutorialI/Misc/document/def_rewr.tex
author wenzelm
Mon, 14 Aug 2000 18:49:35 +0200
changeset 9607 449b6108352a
parent 9541 d17c0b34d5c8
child 9673 1b2d4f995b13
permissions -rw-r--r--
added conversion.tex;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8749
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     1
\begin{isabelle}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     2
%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     3
\begin{isamarkuptext}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     4
\noindent Constant definitions (\S\ref{sec:ConstDefinitions}) can
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     5
be used as simplification rules, but by default they are not.  Hence the
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     6
simplifier does not expand them automatically, just as it should be:
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     7
definitions are introduced for the purpose of abbreviating complex
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     8
concepts. Of course we need to expand the definitions initially to derive
2665170f104a Adding generated files
nipkow
parents:
diff changeset
     9
enough lemmas that characterize the concept sufficiently for us to forget the
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    10
original definition. For example, given%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    11
\end{isamarkuptext}%
9541
d17c0b34d5c8 *** empty log message ***
nipkow
parents: 9145
diff changeset
    12
\isacommand{constdefs}\ exor\ ::\ {"}bool\ {\isasymRightarrow}\ bool\ {\isasymRightarrow}\ bool{"}\isanewline
d17c0b34d5c8 *** empty log message ***
nipkow
parents: 9145
diff changeset
    13
\ \ \ \ \ \ \ \ \ {"}exor\ A\ B\ {\isasymequiv}\ (A\ {\isasymand}\ {\isasymnot}B)\ {\isasymor}\ ({\isasymnot}A\ {\isasymand}\ B){"}%
8749
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    14
\begin{isamarkuptext}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    15
\noindent
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    16
we may want to prove%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    17
\end{isamarkuptext}%
9541
d17c0b34d5c8 *** empty log message ***
nipkow
parents: 9145
diff changeset
    18
\isacommand{lemma}\ {"}exor\ A\ ({\isasymnot}A){"}%
8749
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    19
\begin{isamarkuptxt}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    20
\noindent
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    21
There is a special method for \emph{unfolding} definitions, which we need to
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    22
get started:\indexbold{*unfold}\indexbold{definition!unfolding}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    23
\end{isamarkuptxt}%
9541
d17c0b34d5c8 *** empty log message ***
nipkow
parents: 9145
diff changeset
    24
\isacommand{apply}(unfold\ exor\_def)%
8749
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    25
\begin{isamarkuptxt}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    26
\noindent
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    27
It unfolds the given list of definitions (here merely one) in all subgoals:
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    28
\begin{isabellepar}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    29
~1.~A~{\isasymand}~{\isasymnot}~{\isasymnot}~A~{\isasymor}~{\isasymnot}~A~{\isasymand}~{\isasymnot}~A%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    30
\end{isabellepar}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    31
The resulting goal can be proved by simplification.
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    32
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    33
In case we want to expand a definition in the middle of a proof, we can
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    34
simply include it locally:%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    35
\end{isamarkuptxt}%
9541
d17c0b34d5c8 *** empty log message ***
nipkow
parents: 9145
diff changeset
    36
\isacommand{apply}(simp\ add:\ exor\_def)%
8749
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    37
\begin{isamarkuptext}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    38
\noindent
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    39
In fact, this one command proves the above lemma directly.
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    40
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    41
You should normally not turn a definition permanently into a simplification
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    42
rule because this defeats the whole purpose of an abbreviation.%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    43
\end{isamarkuptext}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    44
\end{isabelle}%
9145
9f7b8de5bfaf updated;
wenzelm
parents: 8749
diff changeset
    45
%%% Local Variables:
9f7b8de5bfaf updated;
wenzelm
parents: 8749
diff changeset
    46
%%% mode: latex
9f7b8de5bfaf updated;
wenzelm
parents: 8749
diff changeset
    47
%%% TeX-master: "root"
9f7b8de5bfaf updated;
wenzelm
parents: 8749
diff changeset
    48
%%% End: