Theory HashGraphImpl

section ‹Graphs by Hashmaps›
theory HashGraphImpl
imports 
  GraphByMap 
begin


text ‹
  Abbreviation: hlg
›

type_synonym ('V,'E) hlg = 
  "('V,('V,'E ls) HashMap.hashmap) HashMap.hashmap"

setup Locale_Code.open_block
interpretation hh_mvif: g_value_image_filter_loc hm_ops hm_ops 
  by unfold_locales
interpretation hlg_gbm: GraphByMap hm_ops hm_ops ls_ops 
  "hh_mvif.g_value_image_filter"
  by unfold_locales
setup Locale_Code.close_block

definition [icf_rec_def]: "hlg_ops  hlg_gbm.gbm_ops"

setup Locale_Code.open_block
interpretation hlg: StdGraph hlg_ops
  unfolding hlg_ops_def
  by (rule hlg_gbm.gbm_ops_impl)
setup Locale_Code.close_block
setup ICF_Tools.revert_abbrevs "HashGraphImpl.hlg"

thm map_iterator_dom_def set_iterator_image_def
  set_iterator_image_filter_def

definition test_codegen where "test_codegen  (
  hlg.empty,
  hlg.add_node,
  hlg.delete_node,
  hlg.add_edge,
  hlg.delete_edge,
  hlg.from_list,
  hlg.to_list,
  hlg.nodes_it,
  hlg.edges_it,
  hlg.succ_it
)"

export_code test_codegen in SML

end