src/HOL/Library/RBT.thy
changeset 39198 f967a16dfcdd
parent 38857 97775f3e8722
child 39302 d7728f65b353
equal deleted inserted replaced
39166:19efc2af3e6c 39198:f967a16dfcdd
   110   "RBT_Impl.keys (impl_of t) = keys t"
   110   "RBT_Impl.keys (impl_of t) = keys t"
   111   by (simp add: keys_def)
   111   by (simp add: keys_def)
   112 
   112 
   113 lemma lookup_empty [simp]:
   113 lemma lookup_empty [simp]:
   114   "lookup empty = Map.empty"
   114   "lookup empty = Map.empty"
   115   by (simp add: empty_def lookup_RBT expand_fun_eq)
   115   by (simp add: empty_def lookup_RBT ext_iff)
   116 
   116 
   117 lemma lookup_insert [simp]:
   117 lemma lookup_insert [simp]:
   118   "lookup (insert k v t) = (lookup t)(k \<mapsto> v)"
   118   "lookup (insert k v t) = (lookup t)(k \<mapsto> v)"
   119   by (simp add: insert_def lookup_RBT lookup_insert lookup_impl_of)
   119   by (simp add: insert_def lookup_RBT lookup_insert lookup_impl_of)
   120 
   120 
   142   "lookup (map f t) k = Option.map (f k) (lookup t k)"
   142   "lookup (map f t) k = Option.map (f k) (lookup t k)"
   143   by (simp add: map_def lookup_RBT lookup_map lookup_impl_of)
   143   by (simp add: map_def lookup_RBT lookup_map lookup_impl_of)
   144 
   144 
   145 lemma fold_fold:
   145 lemma fold_fold:
   146   "fold f t = More_List.fold (prod_case f) (entries t)"
   146   "fold f t = More_List.fold (prod_case f) (entries t)"
   147   by (simp add: fold_def expand_fun_eq RBT_Impl.fold_def entries_impl_of)
   147   by (simp add: fold_def ext_iff RBT_Impl.fold_def entries_impl_of)
   148 
   148 
   149 lemma is_empty_empty [simp]:
   149 lemma is_empty_empty [simp]:
   150   "is_empty t \<longleftrightarrow> t = empty"
   150   "is_empty t \<longleftrightarrow> t = empty"
   151   by (simp add: rbt_eq is_empty_def impl_of_empty split: rbt.split)
   151   by (simp add: rbt_eq is_empty_def impl_of_empty split: rbt.split)
   152 
   152 
   153 lemma RBT_lookup_empty [simp]: (*FIXME*)
   153 lemma RBT_lookup_empty [simp]: (*FIXME*)
   154   "RBT_Impl.lookup t = Map.empty \<longleftrightarrow> t = RBT_Impl.Empty"
   154   "RBT_Impl.lookup t = Map.empty \<longleftrightarrow> t = RBT_Impl.Empty"
   155   by (cases t) (auto simp add: expand_fun_eq)
   155   by (cases t) (auto simp add: ext_iff)
   156 
   156 
   157 lemma lookup_empty_empty [simp]:
   157 lemma lookup_empty_empty [simp]:
   158   "lookup t = Map.empty \<longleftrightarrow> t = empty"
   158   "lookup t = Map.empty \<longleftrightarrow> t = empty"
   159   by (cases t) (simp add: empty_def lookup_def RBT_inject RBT_inverse)
   159   by (cases t) (simp add: empty_def lookup_def RBT_inject RBT_inverse)
   160 
   160 
   218   "Mapping.tabulate ks f = Mapping (bulkload (List.map (\<lambda>k. (k, f k)) ks))"
   218   "Mapping.tabulate ks f = Mapping (bulkload (List.map (\<lambda>k. (k, f k)) ks))"
   219   by (rule mapping_eqI) (simp add: map_of_map_restrict)
   219   by (rule mapping_eqI) (simp add: map_of_map_restrict)
   220 
   220 
   221 lemma bulkload_Mapping [code]:
   221 lemma bulkload_Mapping [code]:
   222   "Mapping.bulkload vs = Mapping (bulkload (List.map (\<lambda>n. (n, vs ! n)) [0..<length vs]))"
   222   "Mapping.bulkload vs = Mapping (bulkload (List.map (\<lambda>n. (n, vs ! n)) [0..<length vs]))"
   223   by (rule mapping_eqI) (simp add: map_of_map_restrict expand_fun_eq)
   223   by (rule mapping_eqI) (simp add: map_of_map_restrict ext_iff)
   224 
   224 
   225 lemma equal_Mapping [code]:
   225 lemma equal_Mapping [code]:
   226   "HOL.equal (Mapping t1) (Mapping t2) \<longleftrightarrow> entries t1 = entries t2"
   226   "HOL.equal (Mapping t1) (Mapping t2) \<longleftrightarrow> entries t1 = entries t2"
   227   by (simp add: equal Mapping_def entries_lookup)
   227   by (simp add: equal Mapping_def entries_lookup)
   228 
   228