Theory RBTMapImpl
section ‹\isaheader{Map Implementation by Red-Black-Trees}›
theory RBTMapImpl
imports
"../spec/MapSpec"
"../../Lib/RBT_add"
"HOL-Library.RBT"
"../gen_algo/MapGA"
begin
text_raw ‹\label{thy:RBTMapImpl}›
hide_const (open) RBT.map RBT.fold RBT.foldi RBT.empty RBT.insert
type_synonym ('k,'v) rm = "('k,'v) RBT.rbt"
definition rm_basic_ops :: "('k::linorder,'v,('k,'v) rm) omap_basic_ops"
where [icf_rec_def]: "rm_basic_ops ≡ ⦇
bmap_op_α = RBT.lookup,
bmap_op_invar = λ_. True,
bmap_op_empty = (λ_::unit. RBT.empty),
bmap_op_lookup = (λk m. RBT.lookup m k),
bmap_op_update = RBT.insert,
bmap_op_update_dj = RBT.insert,
bmap_op_delete = RBT.delete,
bmap_op_list_it = (λr. RBT_add.rm_iterateoi (RBT.impl_of r)),
bmap_op_ordered_list_it = (λr. RBT_add.rm_iterateoi (RBT.impl_of r)),
bmap_op_rev_list_it = (λr. RBT_add.rm_reverse_iterateoi (RBT.impl_of r))
⦈"
setup Locale_Code.open_block
interpretation rm_basic: StdBasicOMap rm_basic_ops
apply unfold_locales
apply (simp_all add: rm_basic_ops_def map_upd_eq_restrict)
apply (rule map_iterator_linord_is_it)
apply dup_subgoals
unfolding RBT.lookup_def
apply simp_all
apply (rule rm_iterateoi_correct)
apply simp
apply (rule rm_reverse_iterateoi_correct)
apply simp
done
setup Locale_Code.close_block
definition [icf_rec_def]: "rm_ops ≡ rm_basic.dflt_oops⦇map_op_add := RBT.union⦈"
setup Locale_Code.open_block