doc-src/TutorialI/Misc/document/def_rewr.tex
author wenzelm
Tue, 01 Aug 2000 13:43:22 +0200
changeset 9490 c2606af9922c
parent 9145 9f7b8de5bfaf
child 9541 d17c0b34d5c8
permissions -rw-r--r--
tuned msg;
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}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    12
\isacommand{constdefs}~exor~::~{"}bool~{\isasymRightarrow}~bool~{\isasymRightarrow}~bool{"}\isanewline
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    13
~~~~~~~~~{"}exor~A~B~{\isasymequiv}~(A~{\isasymand}~{\isasymnot}B)~{\isasymor}~({\isasymnot}A~{\isasymand}~B){"}%
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}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    18
\isacommand{lemma}~{"}exor~A~({\isasymnot}A){"}%
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}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    24
\isacommand{apply}(unfold~exor\_def)%
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}%
2665170f104a Adding generated files
nipkow
parents:
diff changeset
    36
\isacommand{apply}(simp~add:~exor\_def)%
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: