src/HOL/Library/Mapping.thy
changeset 39302 d7728f65b353
parent 39198 f967a16dfcdd
child 39380 5a2662c1e44a
equal deleted inserted replaced
39301:e1bd8a54c40f 39302:d7728f65b353
    92   "lookup (delete k m) = (lookup m) (k := None)"
    92   "lookup (delete k m) = (lookup m) (k := None)"
    93   by (simp add: delete_def)
    93   by (simp add: delete_def)
    94 
    94 
    95 lemma lookup_map_entry [simp]:
    95 lemma lookup_map_entry [simp]:
    96   "lookup (map_entry k f m) = (lookup m) (k := Option.map f (lookup m k))"
    96   "lookup (map_entry k f m) = (lookup m) (k := Option.map f (lookup m k))"
    97   by (cases "lookup m k") (simp_all add: map_entry_def ext_iff)
    97   by (cases "lookup m k") (simp_all add: map_entry_def fun_eq_iff)
    98 
    98 
    99 lemma lookup_tabulate [simp]:
    99 lemma lookup_tabulate [simp]:
   100   "lookup (tabulate ks f) = (Some o f) |` set ks"
   100   "lookup (tabulate ks f) = (Some o f) |` set ks"
   101   by (induct ks) (auto simp add: tabulate_def restrict_map_def ext_iff)
   101   by (induct ks) (auto simp add: tabulate_def restrict_map_def fun_eq_iff)
   102 
   102 
   103 lemma lookup_bulkload [simp]:
   103 lemma lookup_bulkload [simp]:
   104   "lookup (bulkload xs) = (\<lambda>k. if k < length xs then Some (xs ! k) else None)"
   104   "lookup (bulkload xs) = (\<lambda>k. if k < length xs then Some (xs ! k) else None)"
   105   by (simp add: bulkload_def)
   105   by (simp add: bulkload_def)
   106 
   106 
   144   "size (tabulate ks f) = length (remdups ks)"
   144   "size (tabulate ks f) = length (remdups ks)"
   145   by (simp add: size_def distinct_card [of "remdups ks", symmetric] comp_def keys_def)
   145   by (simp add: size_def distinct_card [of "remdups ks", symmetric] comp_def keys_def)
   146 
   146 
   147 lemma bulkload_tabulate:
   147 lemma bulkload_tabulate:
   148   "bulkload xs = tabulate [0..<length xs] (nth xs)"
   148   "bulkload xs = tabulate [0..<length xs] (nth xs)"
   149   by (rule mapping_eqI) (simp add: ext_iff)
   149   by (rule mapping_eqI) (simp add: fun_eq_iff)
   150 
   150 
   151 lemma is_empty_empty: (*FIXME*)
   151 lemma is_empty_empty: (*FIXME*)
   152   "is_empty m \<longleftrightarrow> m = Mapping Map.empty"
   152   "is_empty m \<longleftrightarrow> m = Mapping Map.empty"
   153   by (cases m) (simp add: is_empty_def keys_def)
   153   by (cases m) (simp add: is_empty_def keys_def)
   154 
   154