doc-src/TutorialI/Misc/Tree.thy
author chaieb
Wed, 19 May 2004 11:23:59 +0200
changeset 14758 af3b71a46a1c
parent 11456 7eb63f63e6c6
child 16417 9bc16273c2d4
permissions -rw-r--r--
A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller. the tactic has also changed and allows the abstaction over fuction occurences whose type is nat or int.
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
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
(*>*)