# HG changeset patch # User bulwahn # Date 1323876609 -3600 # Node ID 347c9383acd827d21e03348662d2205e7e676313 # Parent bd5ec56d2a0c802ba8c27db16e8c922f0470357f# Parent 7887eabb1997e3459e4a4a284f3e9784cf43a870 merged diff -r 7887eabb1997 -r 347c9383acd8 src/HOL/Library/AList.thy --- a/src/HOL/Library/AList.thy Wed Dec 14 15:50:15 2011 +0100 +++ b/src/HOL/Library/AList.thy Wed Dec 14 16:30:09 2011 +0100 @@ -274,7 +274,7 @@ "map_of (update x y (restrict D al)) = map_of (update x y (restrict (D-{x}) al))" by (simp add: update_conv' restr_conv') (rule fun_upd_restrict) -lemma upate_restr_conv [simp]: +lemma update_restr_conv [simp]: "x \ D \ map_of (update x y (restrict D al)) = map_of (update x y (restrict (D-{x}) al))" by (simp add: update_conv' restr_conv') @@ -653,4 +653,44 @@ (map_of xs k = None \ (\k'. map_of xs k = Some k' \ map_of ys k' = None)) " by (simp add: compose_conv map_comp_None_iff) +subsection {* @{text map_entry} *} + +fun map_entry :: "'key \ ('val \ 'val) \ ('key \ 'val) list \ ('key \ 'val) list" +where + "map_entry k f [] = []" +| "map_entry k f (p # ps) = (if fst p = k then (k, f (snd p)) # ps else p # map_entry k f ps)" + +lemma map_of_map_entry: + "map_of (map_entry k f xs) = (map_of xs)(k := case map_of xs k of None => None | Some v' => Some (f v'))" +by (induct xs) auto + +lemma dom_map_entry: + "fst ` set (map_entry k f xs) = fst ` set xs" +by (induct xs) auto + +lemma distinct_map_entry: + assumes "distinct (map fst xs)" + shows "distinct (map fst (map_entry k f xs))" +using assms by (induct xs) (auto simp add: dom_map_entry) + +subsection {* @{text map_default} *} + +fun map_default :: "'key \ 'val \ ('val \ 'val) \ ('key \ 'val) list \ ('key \ 'val) list" +where + "map_default k v f [] = [(k, v)]" +| "map_default k v f (p # ps) = (if fst p = k then (k, f (snd p)) # ps else p # map_default k v f ps)" + +lemma map_of_map_default: + "map_of (map_default k v f xs) = (map_of xs)(k := case map_of xs k of None => Some v | Some v' => Some (f v'))" +by (induct xs) auto + +lemma dom_map_default: + "fst ` set (map_default k v f xs) = insert k (fst ` set xs)" +by (induct xs) auto + +lemma distinct_map_default: + assumes "distinct (map fst xs)" + shows "distinct (map fst (map_default k v f xs))" +using assms by (induct xs) (auto simp add: dom_map_default) + end diff -r 7887eabb1997 -r 347c9383acd8 src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Wed Dec 14 15:50:15 2011 +0100 +++ b/src/HOL/Library/Multiset.thy Wed Dec 14 16:30:09 2011 +0100 @@ -1103,7 +1103,7 @@ begin definition - "HOL.equal A B \ (A::'a multiset) \ B \ B \ A" + [code]: "HOL.equal A B \ (A::'a multiset) \ B \ B \ A" instance proof qed (simp add: equal_multiset_def eq_iff)