Theory Tree23
section ‹2-3 Trees›
theory Tree23
imports Main
begin
class height =
fixes height :: "'a ⇒ nat"
datatype 'a tree23 =
Leaf ("⟨⟩") |
Node2 "'a tree23" 'a "'a tree23" ("⟨_, _, _⟩") |
Node3 "'a tree23" 'a "'a tree23" 'a "'a tree23" ("⟨_, _, _, _, _⟩")
fun inorder :: "'a tree23 ⇒ 'a list" where
"inorder Leaf = []" |
"inorder(Node2 l a r) = inorder l @ a # inorder r" |
"inorder(Node3 l a m b r) = inorder l @ a # inorder m @ b # inorder r"
instantiation tree23 :: (type)height
begin
fun height_tree23 :: "'a tree23 ⇒ nat" where
"height Leaf = 0" |
"height (Node2 l _ r) = Suc(max (height l) (height r))" |
"height (Node3 l _ m _ r) = Suc(max (height l) (max (height m) (height r)))"
instance ..
end
text ‹Completeness:›
fun complete :: "'a tree23 ⇒ bool" where
"complete Leaf = True" |
"complete (Node2 l _ r) = (height l = height r ∧ complete l & complete r)" |
"complete (Node3 l _ m _ r) =
(height l = height m & height m = height r & complete l & complete m & complete r)"
lemma ht_sz_if_complete: "complete t ⟹ 2 ^ height t ≤ size t + 1"
by (induction t) auto
end