fun lookup :: "('a::linorder*'b) tree ==> 'a ==> 'b option"where "lookup Leaf x = None" | "lookup (Node l (a,b) r) x = (case cmp x a of LT ==> lookup l x | GT ==> lookup r x | EQ ==> Some b)"
fun update :: "'a::linorder ==> 'b ==> ('a*'b) tree ==> ('a*'b) tree"where "update x y Leaf = Node Leaf (x,y) Leaf" | "update x y (Node l (a,b) r) = (case cmp x a of LT ==> Node (update x y l) (a,b) r | EQ ==> Node l (x,y) r | GT ==> Node l (a,b) (update x y r))"
fun delete :: "'a::linorder ==> ('a*'b) tree ==> ('a*'b) tree"where "delete x Leaf = Leaf" | "delete x (Node l (a,b) r) = (case cmp x a of LT ==> Node (delete x l) (a,b) r | GT ==> Node l (a,b) (delete x r) | EQ ==> if r = Leaf then l else let (ab',r') = split_min r in Node l ab' r')"
subsection"Functional Correctness Proofs"
lemma lookup_map_of: "sorted1(inorder t) ==> lookup t x = map_of (inorder t) x" by (induction t) (auto simp: map_of_simps split: option.split)
lemma inorder_update: "sorted1(inorder t) ==> inorder(update a b t) = upd_list a b (inorder t)" by(induction t) (auto simp: upd_list_simps)
interpretation M: Map_by_Ordered where empty = empty and lookup = lookup and update = update and delete = delete and inorder = inorder and inv = "λ_. True" proof (standard, goal_cases) case 1 show ?caseby (simp add: empty_def) next case 2 thus ?caseby(simp add: lookup_map_of) next case 3 thus ?caseby(simp add: inorder_update) next case 4 thus ?caseby(simp add: inorder_delete) qed auto
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-04-28)
¤
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.