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.