doc-src/TutorialI/Misc/Tree.thy
author huffman
Thu, 14 Jul 2005 01:04:30 +0200
changeset 16823 13f3768a6f14
parent 16417 9bc16273c2d4
child 27015 f8537d69f514
permissions -rw-r--r--
simplified proof of cont_Iwhen3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     1
(*<*)
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 11456
diff changeset
     2
theory Tree imports Main begin
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     3
(*>*)
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     4
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     5
text{*\noindent
11456
7eb63f63e6c6 revisions and indexing
paulson
parents: 10795
diff changeset
     6
Define the datatype of \rmindex{binary trees}:
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     7
*}
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     8
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     9
datatype 'a tree = Tip | Node "'a tree" 'a "'a tree";(*<*)
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    10
10795
9e888d60d3e5 minor edits to Chapters 1-3
paulson
parents: 9792
diff changeset
    11
consts mirror :: "'a tree \<Rightarrow> 'a tree";
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    12
primrec
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    13
"mirror Tip = Tip"
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    14
"mirror (Node l x r) = Node (mirror r) x (mirror l)";(*>*)
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    15
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    16
text{*\noindent
11456
7eb63f63e6c6 revisions and indexing
paulson
parents: 10795
diff changeset
    17
Define a function @{term"mirror"} that mirrors a binary tree
10795
9e888d60d3e5 minor edits to Chapters 1-3
paulson
parents: 9792
diff changeset
    18
by swapping subtrees recursively. Prove
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    19
*}
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    20
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    21
lemma mirror_mirror: "mirror(mirror t) = t";
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    22
(*<*)
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    23
apply(induct_tac t);
9458
c613cd06d5cf apply. -> by
nipkow
parents: 8745
diff changeset
    24
by(auto);
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    25
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    26
consts flatten :: "'a tree => 'a list"
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    27
primrec
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    28
"flatten Tip = []"
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    29
"flatten (Node l x r) = flatten l @ [x] @ flatten r";
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    30
(*>*)
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    31
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    32
text{*\noindent
9792
bbefb6ce5cb2 *** empty log message ***
nipkow
parents: 9493
diff changeset
    33
Define a function @{term"flatten"} that flattens a tree into a list
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    34
by traversing it in infix order. Prove
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    35
*}
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    36
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    37
lemma "flatten(mirror t) = rev(flatten t)";
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    38
(*<*)
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    39
apply(induct_tac t);
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    40
by(auto);
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    41
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    42
end
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    43
(*>*)