fun ht :: "'a tree_ht \ nat"where "ht Leaf = 0" | "ht (Node l (a,n) r) = n"
definition node :: "'a tree_ht \ 'a \ 'a tree_ht \ 'a tree_ht"where "node l a r = Node l (a, max (ht l) (ht r) + 1) r"
definition balL :: "'a tree_ht \ 'a \ 'a tree_ht \ 'a tree_ht"where "balL AB c C =
(if ht AB = ht C + 2 then case AB of
Node A (a, _) B ==> if ht A ≥ ht B then node A a (node B c C)
else case B of
Node B🚫1 (b, _) B🚫2 ==> node (node A a B🚫1) b (node B🚫2 c C)
else node AB c C)"
definition balR :: "'a tree_ht \ 'a \ 'a tree_ht \ 'a tree_ht"where "balR A a BC =
(if ht BC = ht A + 2 then case BC of
Node B (c, _) C ==> if ht B ≤ ht C then node (node A a B) c C
else case B of
Node B🚫1 (b, _) B🚫2 ==> node (node A a B🚫1) b (node B🚫2 c C)
else node A a BC)"
fun insert :: "'a::linorder \ 'a tree_ht \ 'a tree_ht"where "insert x Leaf = Node Leaf (x, 1) Leaf" | "insert x (Node l (a, n) r) = (case cmp x a of
EQ ==> Node l (a, n) r |
LT ==> balL (insert x l) a r |
GT ==> balR l a (insert x r))"
fun split_max :: "'a tree_ht \ 'a tree_ht * 'a"where "split_max (Node l (a, _) r) =
(if r = Leaf then (l,a) else let (r',a') = split_max r in (balL l a r', a'))"
fun delete :: "'a::linorder \ 'a tree_ht \ 'a tree_ht"where "delete _ Leaf = Leaf" | "delete x (Node l (a, n) r) =
(case cmp x a of
EQ ==>if l = Leaf then r
else let (l', a') = split_max l in balR l' a' r |
LT ==> balR (delete x l) a r |
GT ==> balL l a (delete x r))"
subsection‹Functional Correctness Proofs›
text‹Very different from the AFP/AVL proofs›
subsubsection "Proofs for insert"
lemma inorder_balL: "inorder (balL l a r) = inorder l @ a # inorder r" by (auto simp: node_def balL_def split:tree.splits)
lemma inorder_balR: "inorder (balR l a r) = inorder l @ a # inorder r" by (auto simp: node_def balR_def split:tree.splits)
theorem inorder_insert: "sorted(inorder t) \ inorder(insert x t) = ins_list x (inorder t)" by (induct t)
(auto simp: ins_list_simps inorder_balL inorder_balR)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.