(* 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
lemma(*bt_map_append:*) "bt_map f (append t1 t2) = append (bt_map f t1) (bt_map f t2)" apply (induct t1) apply (metis append.simps(1) bt_map.simps(1)) by (metis bt_map_append)
end
¤ 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.0.14Bemerkung:
(vorverarbeitet)
¤
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.