equal
deleted
inserted
replaced
14 proof - |
14 proof - |
15 have "RBT_Impl.Empty \<in> ?rbt" by simp |
15 have "RBT_Impl.Empty \<in> ?rbt" by simp |
16 then show ?thesis .. |
16 then show ?thesis .. |
17 qed |
17 qed |
18 |
18 |
|
19 lemma rbt_eq_iff: |
|
20 "t1 = t2 \<longleftrightarrow> impl_of t1 = impl_of t2" |
|
21 by (simp add: impl_of_inject) |
|
22 |
|
23 lemma rbt_eqI: |
|
24 "impl_of t1 = impl_of t2 \<Longrightarrow> t1 = t2" |
|
25 by (simp add: rbt_eq_iff) |
|
26 |
19 lemma is_rbt_impl_of [simp, intro]: |
27 lemma is_rbt_impl_of [simp, intro]: |
20 "is_rbt (impl_of t)" |
28 "is_rbt (impl_of t)" |
21 using impl_of [of t] by simp |
29 using impl_of [of t] by simp |
22 |
30 |
23 lemma rbt_eq: |
31 lemma RBT_impl_of [simp, code abstype]: |
24 "t1 = t2 \<longleftrightarrow> impl_of t1 = impl_of t2" |
|
25 by (simp add: impl_of_inject) |
|
26 |
|
27 lemma [code abstype]: |
|
28 "RBT (impl_of t) = t" |
32 "RBT (impl_of t) = t" |
29 by (simp add: impl_of_inverse) |
33 by (simp add: impl_of_inverse) |
30 |
34 |
31 |
35 |
32 subsection {* Primitive operations *} |
36 subsection {* Primitive operations *} |
146 "fold f t = More_List.fold (prod_case f) (entries t)" |
150 "fold f t = More_List.fold (prod_case f) (entries t)" |
147 by (simp add: fold_def fun_eq_iff RBT_Impl.fold_def entries_impl_of) |
151 by (simp add: fold_def fun_eq_iff RBT_Impl.fold_def entries_impl_of) |
148 |
152 |
149 lemma is_empty_empty [simp]: |
153 lemma is_empty_empty [simp]: |
150 "is_empty t \<longleftrightarrow> t = empty" |
154 "is_empty t \<longleftrightarrow> t = empty" |
151 by (simp add: rbt_eq is_empty_def impl_of_empty split: rbt.split) |
155 by (simp add: rbt_eq_iff is_empty_def impl_of_empty split: rbt.split) |
152 |
156 |
153 lemma RBT_lookup_empty [simp]: (*FIXME*) |
157 lemma RBT_lookup_empty [simp]: (*FIXME*) |
154 "RBT_Impl.lookup t = Map.empty \<longleftrightarrow> t = RBT_Impl.Empty" |
158 "RBT_Impl.lookup t = Map.empty \<longleftrightarrow> t = RBT_Impl.Empty" |
155 by (cases t) (auto simp add: fun_eq_iff) |
159 by (cases t) (auto simp add: fun_eq_iff) |
156 |
160 |
182 "Mapping.empty = Mapping empty" |
186 "Mapping.empty = Mapping empty" |
183 by (rule mapping_eqI) simp |
187 by (rule mapping_eqI) simp |
184 |
188 |
185 lemma is_empty_Mapping [code]: |
189 lemma is_empty_Mapping [code]: |
186 "Mapping.is_empty (Mapping t) \<longleftrightarrow> is_empty t" |
190 "Mapping.is_empty (Mapping t) \<longleftrightarrow> is_empty t" |
187 by (simp add: rbt_eq Mapping.is_empty_empty Mapping_def) |
191 by (simp add: rbt_eq_iff Mapping.is_empty_empty Mapping_def) |
188 |
192 |
189 lemma insert_Mapping [code]: |
193 lemma insert_Mapping [code]: |
190 "Mapping.update k v (Mapping t) = Mapping (insert k v t)" |
194 "Mapping.update k v (Mapping t) = Mapping (insert k v t)" |
191 by (rule mapping_eqI) simp |
195 by (rule mapping_eqI) simp |
192 |
196 |