doc-src/TutorialI/Misc/let_rewr.thy
author nipkow
Tue, 05 Sep 2000 09:03:17 +0200
changeset 9834 109b11c4e77e
parent 9792 bbefb6ce5cb2
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     1
(*<*)
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     2
theory let_rewr = Main:;
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     3
(*>*)
9792
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
     4
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
     5
subsubsection{*Simplifying let-expressions*}
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
     6
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
     7
text{*\index{simplification!of let-expressions}
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
     8
Proving a goal containing \isaindex{let}-expressions almost invariably
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
     9
requires the @{text"let"}-con\-structs to be expanded at some point. Since
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
    10
@{text"let"}-@{text"in"} is just syntactic sugar for a predefined constant
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
    11
(called @{term"Let"}), expanding @{text"let"}-constructs means rewriting with
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
    12
@{thm[source]Let_def}:
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
    13
*}
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
    14
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    15
lemma "(let xs = [] in xs@ys@xs) = ys";
9458
c613cd06d5cf apply. -> by
nipkow
parents: 8771
diff changeset
    16
by(simp add: Let_def);
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    17
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    18
text{*
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    19
If, in a particular context, there is no danger of a combinatorial explosion
9792
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9541
diff changeset
    20
of nested @{text"let"}s one could even add @{thm[source]Let_def} permanently:
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    21
*}
9541
d17c0b34d5c8 *** empty log message ***
nipkow
parents: 9458
diff changeset
    22
lemmas [simp] = Let_def;
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    23
(*<*)
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    24
end
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    25
(*>*)