# HG changeset patch # User haftmann # Date 1233997104 -3600 # Node ID edac6cd013108385a7f8470187b4d05369a5a1c3 # Parent 9acb915a62fa691664ab8c9a796639593ff9bd4f# Parent 384e47590e7fc6d2f9171068ccc4abc95a79d2c2 merged diff -r 384e47590e7f -r edac6cd01310 src/HOL/Library/Mapping.thy --- a/src/HOL/Library/Mapping.thy Sat Feb 07 09:25:59 2009 +0100 +++ b/src/HOL/Library/Mapping.thy Sat Feb 07 09:58:24 2009 +0100 @@ -39,6 +39,9 @@ definition tabulate :: "'a list \ ('a \ 'b) \ ('a, 'b) map" where "tabulate ks f = Map (map_of (map (\k. (k, f k)) ks))" +definition bulkload :: "'a list \ (nat, 'a) map" where + "bulkload xs = Map (\k. if k < length xs then Some (xs ! k) else None)" + subsection {* Properties *} @@ -63,6 +66,10 @@ "lookup (tabulate ks f) = (Some o f) |` set ks" by (induct ks) (auto simp add: tabulate_def restrict_map_def expand_fun_eq) +lemma lookup_bulkload: + "lookup (bulkload xs) = (\k. if k < length xs then Some (xs ! k) else None)" + unfolding bulkload_def by simp + lemma update_update: "update k v (update k w m) = update k v m" "k \ l \ update k v (update l w m) = update l w (update k v m)" @@ -120,4 +127,16 @@ "size (tabulate ks f) = length (remdups ks)" by (simp add: size_def keys_tabulate distinct_card [of "remdups ks", symmetric]) +lemma bulkload_tabulate: (*FIXME Isar proof*) + "bulkload xs = tabulate [0.. (\ x : set xs; y : set ys \ \ R) \ R" by(blast dest: set_zip_leftD set_zip_rightD) +lemma zip_map_fst_snd: + "zip (map fst zs) (map snd zs) = zs" + by (induct zs) simp_all + +lemma zip_eq_conv: + "length xs = length ys \ zip xs ys = zs \ map fst zs = xs \ map snd zs = ys" + by (auto simp add: zip_map_fst_snd) + + subsubsection {* @{text list_all2} *} lemma list_all2_lengthD [intro?]: