equal
deleted
inserted
replaced
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 |