sig
  type key
  type 'v map
  val id : 'Hptmap_sig.Shape.map -> int
  val hash : 'Hptmap_sig.Shape.map -> int
  val equal : 'Hptmap_sig.Shape.map -> 'Hptmap_sig.Shape.map -> bool
  val compare :
    ('-> '-> int) ->
    'Hptmap_sig.Shape.map -> 'Hptmap_sig.Shape.map -> int
  val pretty :
    'Pretty_utils.formatter ->
    'Hptmap_sig.Shape.map Pretty_utils.formatter
  val is_empty : 'Hptmap_sig.Shape.map -> bool
  val is_singleton :
    'Hptmap_sig.Shape.map -> (Hptmap_sig.Shape.key * 'v) option
  val on_singleton :
    (Hptmap_sig.Shape.key -> '-> bool) -> 'Hptmap_sig.Shape.map -> bool
  val cardinal : 'Hptmap_sig.Shape.map -> int
  val find : Hptmap_sig.Shape.key -> 'Hptmap_sig.Shape.map -> 'v
  val find_check_missing :
    Hptmap_sig.Shape.key -> 'Hptmap_sig.Shape.map -> 'v
  val find_key :
    Hptmap_sig.Shape.key -> 'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.key
  val mem : Hptmap_sig.Shape.key -> 'Hptmap_sig.Shape.map -> bool
  val min_binding : 'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.key * 'v
  val max_binding : 'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.key * 'v
  val iter :
    (Hptmap_sig.Shape.key -> '-> unit) -> 'Hptmap_sig.Shape.map -> unit
  val for_all :
    (Hptmap_sig.Shape.key -> '-> bool) -> 'Hptmap_sig.Shape.map -> bool
  val exists :
    (Hptmap_sig.Shape.key -> '-> bool) -> 'Hptmap_sig.Shape.map -> bool
  val fold :
    (Hptmap_sig.Shape.key -> '-> '-> 'b) ->
    'Hptmap_sig.Shape.map -> '-> 'b
  val fold_rev :
    (Hptmap_sig.Shape.key -> '-> '-> 'b) ->
    'Hptmap_sig.Shape.map -> '-> 'b
  val cached_fold :
    cache_name:string ->
    temporary:bool ->
    f:(Hptmap_sig.Shape.key -> '-> 'b) ->
    joiner:('-> '-> 'b) -> empty:'-> 'Hptmap_sig.Shape.map -> 'b
  val fold2_join_heterogeneous :
    cache:Hptmap_sig.cache_type ->
    empty_left:('Hptmap_sig.Shape.map -> 'c) ->
    empty_right:('Hptmap_sig.Shape.map -> 'c) ->
    both:(Hptmap_sig.Shape.key -> '-> '-> 'c) ->
    join:('-> '-> 'c) ->
    empty:'-> 'Hptmap_sig.Shape.map -> 'Hptmap_sig.Shape.map -> 'c
  type predicate_type = ExistentialPredicate | UniversalPredicate
  type predicate_result = PTrue | PFalse | PUnknown
  val binary_predicate :
    Hptmap_sig.cache_type ->
    Hptmap_sig.Shape.predicate_type ->
    decide_fast:('Hptmap_sig.Shape.map ->
                 'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.predicate_result) ->
    decide_fst:(Hptmap_sig.Shape.key -> '-> bool) ->
    decide_snd:(Hptmap_sig.Shape.key -> '-> bool) ->
    decide_both:(Hptmap_sig.Shape.key -> '-> '-> bool) ->
    'Hptmap_sig.Shape.map -> 'Hptmap_sig.Shape.map -> bool
  val symmetric_binary_predicate :
    Hptmap_sig.cache_type ->
    Hptmap_sig.Shape.predicate_type ->
    decide_fast:('Hptmap_sig.Shape.map ->
                 'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.predicate_result) ->
    decide_one:(Hptmap_sig.Shape.key -> '-> bool) ->
    decide_both:(Hptmap_sig.Shape.key -> '-> '-> bool) ->
    'Hptmap_sig.Shape.map -> 'Hptmap_sig.Shape.map -> bool
  val decide_fast_inclusion :
    'Hptmap_sig.Shape.map ->
    'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.predicate_result
  val decide_fast_intersection :
    'Hptmap_sig.Shape.map ->
    'Hptmap_sig.Shape.map -> Hptmap_sig.Shape.predicate_result
  val clear_caches : unit -> unit
end