src/HOL/Data_Structures/Tree2.thy
author nipkow
Fri, 18 Mar 2016 10:14:56 +0100
changeset 62650 7e6bb43e7217
parent 62390 842917225d56
child 67967 5a4280946a25
permissions -rw-r--r--
added tree lemmas
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61224
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     1
theory Tree2
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     2
imports Main
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     3
begin
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     4
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     5
datatype ('a,'b) tree =
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     6
  Leaf ("\<langle>\<rangle>") |
62160
ff20b44b2fc8 tuned layout
nipkow
parents: 61224
diff changeset
     7
  Node 'b "('a,'b)tree" 'a "('a,'b) tree" ("(1\<langle>_,/ _,/ _,/ _\<rangle>)")
61224
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     8
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
     9
fun inorder :: "('a,'b)tree \<Rightarrow> 'a list" where
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    10
"inorder Leaf = []" |
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    11
"inorder (Node _ l a r) = inorder l @ a # inorder r"
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    12
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    13
fun height :: "('a,'b) tree \<Rightarrow> nat" where
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    14
"height Leaf = 0" |
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    15
"height (Node _ l a r) = max (height l) (height r) + 1"
759b5299a9f2 added red black trees
nipkow
parents:
diff changeset
    16
62650
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    17
definition size1 :: "('a,'b) tree \<Rightarrow> nat" where
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    18
"size1 t = size t + 1"
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    19
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    20
lemma size1_simps[simp]:
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    21
  "size1 \<langle>\<rangle> = 1"
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    22
  "size1 \<langle>u, l, x, r\<rangle> = size1 l + size1 r"
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    23
by (simp_all add: size1_def)
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    24
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    25
lemma size1_ge0[simp]: "0 < size1 t"
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    26
by (simp add: size1_def)
7e6bb43e7217 added tree lemmas
nipkow
parents: 62390
diff changeset
    27
62390
842917225d56 more canonical names
nipkow
parents: 62160
diff changeset
    28
end