src/HOL/Library/RBT_Impl.thy
changeset 39198 f967a16dfcdd
parent 37591 d3daea901123
child 39302 d7728f65b353
equal deleted inserted replaced
39166:19efc2af3e6c 39198:f967a16dfcdd
  1017 theorem map_entry_is_rbt [simp]: "is_rbt (map_entry k f t) = is_rbt t" 
  1017 theorem map_entry_is_rbt [simp]: "is_rbt (map_entry k f t) = is_rbt t" 
  1018 unfolding is_rbt_def by (simp add: map_entry_inv2 map_entry_color_of map_entry_sorted map_entry_inv1 )
  1018 unfolding is_rbt_def by (simp add: map_entry_inv2 map_entry_color_of map_entry_sorted map_entry_inv1 )
  1019 
  1019 
  1020 theorem lookup_map_entry:
  1020 theorem lookup_map_entry:
  1021   "lookup (map_entry k f t) = (lookup t)(k := Option.map f (lookup t k))"
  1021   "lookup (map_entry k f t) = (lookup t)(k := Option.map f (lookup t k))"
  1022   by (induct t) (auto split: option.splits simp add: expand_fun_eq)
  1022   by (induct t) (auto split: option.splits simp add: ext_iff)
  1023 
  1023 
  1024 
  1024 
  1025 subsection {* Mapping all entries *}
  1025 subsection {* Mapping all entries *}
  1026 
  1026 
  1027 primrec
  1027 primrec
  1052   "fold f t = More_List.fold (prod_case f) (entries t)"
  1052   "fold f t = More_List.fold (prod_case f) (entries t)"
  1053 
  1053 
  1054 lemma fold_simps [simp, code]:
  1054 lemma fold_simps [simp, code]:
  1055   "fold f Empty = id"
  1055   "fold f Empty = id"
  1056   "fold f (Branch c lt k v rt) = fold f rt \<circ> f k v \<circ> fold f lt"
  1056   "fold f (Branch c lt k v rt) = fold f rt \<circ> f k v \<circ> fold f lt"
  1057   by (simp_all add: fold_def expand_fun_eq)
  1057   by (simp_all add: fold_def ext_iff)
  1058 
  1058 
  1059 
  1059 
  1060 subsection {* Bulkloading a tree *}
  1060 subsection {* Bulkloading a tree *}
  1061 
  1061 
  1062 definition bulkload :: "('a \<times> 'b) list \<Rightarrow> ('a\<Colon>linorder, 'b) rbt" where
  1062 definition bulkload :: "('a \<times> 'b) list \<Rightarrow> ('a\<Colon>linorder, 'b) rbt" where