sig
  module Store : Store_intf.STORE
  type key
  type +'a node
  type +'a pomap
  type 'a add_find_result =
      Found of Store.Ix.t * 'Pomap_intf.POMAP.node
    | Added of Store.Ix.t * 'Pomap_intf.POMAP.node *
        'Pomap_intf.POMAP.pomap
  val empty : 'Pomap_intf.POMAP.pomap
  val singleton : Pomap_intf.POMAP.key -> '-> 'Pomap_intf.POMAP.pomap
  val is_empty : 'Pomap_intf.POMAP.pomap -> bool
  val cardinal : 'Pomap_intf.POMAP.pomap -> int
  val add :
    Pomap_intf.POMAP.key ->
    '-> 'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val add_node :
    'Pomap_intf.POMAP.node ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val remove :
    Pomap_intf.POMAP.key ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val remove_node :
    'Pomap_intf.POMAP.node ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val remove_ix :
    Store.Ix.t -> 'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val take :
    Pomap_intf.POMAP.key ->
    'Pomap_intf.POMAP.pomap ->
    Store.Ix.t * 'Pomap_intf.POMAP.node * 'Pomap_intf.POMAP.pomap
  val take_ix :
    Store.Ix.t ->
    'Pomap_intf.POMAP.pomap ->
    'Pomap_intf.POMAP.node * 'Pomap_intf.POMAP.pomap
  val add_find :
    Pomap_intf.POMAP.key ->
    '-> 'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.add_find_result
  val add_fun :
    Pomap_intf.POMAP.key ->
    '->
    ('-> 'a) -> 'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val mem : Pomap_intf.POMAP.key -> 'Pomap_intf.POMAP.pomap -> bool
  val mem_ix : Store.Ix.t -> 'Pomap_intf.POMAP.pomap -> bool
  val find :
    Pomap_intf.POMAP.key ->
    'Pomap_intf.POMAP.pomap -> Store.Ix.t * 'Pomap_intf.POMAP.node
  val find_ix :
    Store.Ix.t -> 'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.node
  val choose :
    'Pomap_intf.POMAP.pomap -> Store.Ix.t * 'Pomap_intf.POMAP.node
  val filter :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> bool) ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val partition :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> bool) ->
    'Pomap_intf.POMAP.pomap ->
    'Pomap_intf.POMAP.pomap * 'Pomap_intf.POMAP.pomap
  val iter :
    ('Pomap_intf.POMAP.node -> unit) -> 'Pomap_intf.POMAP.pomap -> unit
  val iteri :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> unit) ->
    'Pomap_intf.POMAP.pomap -> unit
  val map :
    ('Pomap_intf.POMAP.node -> 'b) ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val mapi :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> 'b) ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val fold :
    ('Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val foldi :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val topo_fold :
    ('Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val topo_foldi :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val topo_fold_ix :
    (Store.Ix.t -> '-> 'b) -> 'Pomap_intf.POMAP.pomap -> '-> 'b
  val rev_topo_fold :
    ('Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val rev_topo_foldi :
    (Store.Ix.t -> 'Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val rev_topo_fold_ix :
    (Store.Ix.t -> '-> 'b) -> 'Pomap_intf.POMAP.pomap -> '-> 'b
  val chain_fold :
    ('Pomap_intf.POMAP.node list -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val chain_foldi :
    ((Store.Ix.t * 'Pomap_intf.POMAP.node) list -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val rev_chain_fold :
    ('Pomap_intf.POMAP.node list -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val rev_chain_foldi :
    ((Store.Ix.t * 'Pomap_intf.POMAP.node) list -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val union :
    'Pomap_intf.POMAP.pomap ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val inter :
    'Pomap_intf.POMAP.pomap ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val diff :
    'Pomap_intf.POMAP.pomap ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val create_node :
    Pomap_intf.POMAP.key ->
    '-> Store.Ix.Set.t -> Store.Ix.Set.t -> 'Pomap_intf.POMAP.node
  val get_key : 'Pomap_intf.POMAP.node -> Pomap_intf.POMAP.key
  val get_el : 'Pomap_intf.POMAP.node -> 'a
  val get_sucs : 'Pomap_intf.POMAP.node -> Store.Ix.Set.t
  val get_prds : 'Pomap_intf.POMAP.node -> Store.Ix.Set.t
  val set_key :
    'Pomap_intf.POMAP.node ->
    Pomap_intf.POMAP.key -> 'Pomap_intf.POMAP.node
  val set_el : 'Pomap_intf.POMAP.node -> '-> 'Pomap_intf.POMAP.node
  val set_sucs :
    'Pomap_intf.POMAP.node -> Store.Ix.Set.t -> 'Pomap_intf.POMAP.node
  val set_prds :
    'Pomap_intf.POMAP.node -> Store.Ix.Set.t -> 'Pomap_intf.POMAP.node
  val get_nodes :
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.node Store.t
  val get_top : 'Pomap_intf.POMAP.pomap -> Store.Ix.Set.t
  val get_bot : 'Pomap_intf.POMAP.pomap -> Store.Ix.Set.t
  val remove_eq_prds :
    ('-> '-> bool) ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap
  val fold_eq_classes :
    ('-> '-> bool) ->
    ('-> 'Pomap_intf.POMAP.pomap -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val fold_split_eq_classes :
    ('-> '-> bool) ->
    ('-> 'Pomap_intf.POMAP.pomap -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val preorder_eq_classes :
    ('-> '-> bool) ->
    'Pomap_intf.POMAP.pomap -> 'Pomap_intf.POMAP.pomap list
  val topo_fold_reduced :
    ('-> '-> bool) ->
    ('Pomap_intf.POMAP.node -> '-> 'b) ->
    'Pomap_intf.POMAP.pomap -> '-> 'b
  val unsafe_update :
    'Pomap_intf.POMAP.pomap ->
    Store.Ix.t -> 'Pomap_intf.POMAP.node -> 'Pomap_intf.POMAP.pomap
  val unsafe_set_nodes :
    'Pomap_intf.POMAP.pomap ->
    'Pomap_intf.POMAP.node Store.t -> 'Pomap_intf.POMAP.pomap
  val unsafe_set_top :
    'Pomap_intf.POMAP.pomap -> Store.Ix.Set.t -> 'Pomap_intf.POMAP.pomap
  val unsafe_set_bot :
    'Pomap_intf.POMAP.pomap -> Store.Ix.Set.t -> 'Pomap_intf.POMAP.pomap
end