(* Title: HOL/Metis_Examples/Binary_Tree.thy Author: Lawrence C. Paulson, Cambridge University Computer Laboratory Author: Jasmin Blanchette, TU Muenchen
Metis example featuring binary trees.
*)
section \<open>Metis Example Featuring Binary Trees\<close>
lemma bt_map_append: "bt_map f (append t u) = append (bt_map f t) (bt_map f u)" apply (induct t) apply (metis append.simps(1) bt_map.simps(1)) by (metis append.simps(2) bt_map.simps(2))
lemma bt_map_compose: "bt_map (f o g) t = bt_map f (bt_map g t)" apply (induct t) apply (metis bt_map.simps(1)) by (metis bt_map.simps(2) o_eq_dest_lhs)
lemma bt_map_reflect: "bt_map f (reflect t) = reflect (bt_map f t)" apply (induct t) apply (metis bt_map.simps(1) reflect.simps(1)) by (metis bt_map.simps(2) reflect.simps(2))
lemma preorder_bt_map: "preorder (bt_map f t) = map f (preorder t)" apply (induct t) apply (metis bt_map.simps(1) list.map(1) preorder.simps(1)) by simp
lemma inorder_bt_map: "inorder (bt_map f t) = map f (inorder t)" proof (induct t) case Lf thus ?case proof - have"map f [] = []"by (metis list.map(1)) hence"map f [] = inorder Lf"by (metis inorder.simps(1)) hence"inorder (bt_map f Lf) = map f []"by (metis bt_map.simps(1)) thus"inorder (bt_map f Lf) = map f (inorder Lf)"by (metis inorder.simps(1)) qed next case (Br a t1 t2) thus ?caseby simp qed
lemma postorder_bt_map: "postorder (bt_map f t) = map f (postorder t)" apply (induct t) apply (metis Nil_is_map_conv bt_map.simps(1) postorder.simps(1)) by simp
lemma depth_bt_map [simp]: "depth (bt_map f t) = depth t" apply (induct t) apply (metis bt_map.simps(1) depth.simps(1)) by simp
lemma n_leaves_bt_map [simp]: "n_leaves (bt_map f t) = n_leaves t" apply (induct t) apply (metis bt_map.simps(1) n_leaves.simps(1)) proof - fix a :: 'b and t1 :: "'b bt" and t2 :: "'b bt" assume A1: "n_leaves (bt_map f t1) = n_leaves t1" assume A2: "n_leaves (bt_map f t2) = n_leaves t2" have"\V U. n_leaves (Br U (bt_map f t1) V) = n_leaves t1 + n_leaves V" using A1 by (metis n_leaves.simps(2)) hence"\V U. n_leaves (bt_map f (Br U t1 V)) = n_leaves t1 + n_leaves (bt_map f V)" by (metis bt_map.simps(2)) hence F1: "\U. n_leaves (bt_map f (Br U t1 t2)) = n_leaves t1 + n_leaves t2" using A2 by metis have"n_leaves t1 + n_leaves t2 = n_leaves (Br a t1 t2)" by (metis n_leaves.simps(2)) thus"n_leaves (bt_map f (Br a t1 t2)) = n_leaves (Br a t1 t2)" using F1 by metis qed
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 ist noch experimentell.