doc-src/TutorialI/Misc/Tree.thy
author nipkow
Wed, 02 Aug 2000 11:30:38 +0200
changeset 9493 494f8cd34df7
parent 9458 c613cd06d5cf
child 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 Tree = Main:
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
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     6
Define the datatype of binary trees
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
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    11
consts mirror :: "'a tree \\<Rightarrow> 'a tree";
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
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    17
and a function \isa{mirror} that mirrors a binary tree
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    18
by swapping subtrees (recursively). Prove
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
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    33
Define a function \isa{flatten} that flattens a tree into a list
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
(*>*)