sig
  module Graph : SHGraph.S
  type ('a, 'b) manager = {
    mutable bottom : Graph.vertex -> 'a;
    mutable canonical : Graph.vertex -> '-> unit;
    mutable is_bottom : Graph.vertex -> '-> bool;
    mutable is_leq : Graph.vertex -> '-> '-> bool;
    mutable join : Graph.vertex -> '-> '-> 'a;
    mutable join_list : Graph.vertex -> 'a list -> 'a;
    mutable widening : Graph.vertex -> '-> '-> 'a;
    mutable apply : Graph.hedge -> 'a array -> 'b * 'a;
    mutable arc_init : Graph.hedge -> 'b;
    mutable get_init : Graph.vertex -> 'a;
    mutable print_abstract : Format.formatter -> '-> unit;
    mutable print_arc : Format.formatter -> '-> unit;
    mutable print_vertex : Format.formatter -> Graph.vertex -> unit;
    mutable print_hedge : Format.formatter -> Graph.hedge -> unit;
    mutable widening_first : bool;
    mutable widening_start : int;
    mutable widening_freq : int;
    mutable widening_descend : int;
    mutable print_analysis : bool;
    mutable print_step : bool;
    mutable print_state : bool;
    mutable print_postpre : bool;
  }
  type strategy_vertex = {
    mutable vertex : Graph.vertex;
    mutable hedges : Graph.hedge list;
    mutable widen : bool;
  }
  type strategy = MkFixpoint.S.strategy_vertex Ilist.t
  type stat = { time : float; iterations : int; descendings : int; }
  type ('a, 'b) output = ('a, 'b, MkFixpoint.S.stat) Graph.t
  type ('a, 'b) graph
  val print_strategy_vertex :
    ('a, 'b) MkFixpoint.S.manager ->
    Format.formatter -> MkFixpoint.S.strategy_vertex -> unit
  val print_strategy :
    ('a, 'b) MkFixpoint.S.manager ->
    Format.formatter -> MkFixpoint.S.strategy -> unit
  val print_graph :
    ('a, 'b) MkFixpoint.S.manager ->
    Format.formatter -> ('a, 'b) MkFixpoint.S.graph -> unit
  val print_stat : Format.formatter -> MkFixpoint.S.stat -> unit
  val print_output :
    ('a, 'b) MkFixpoint.S.manager ->
    Format.formatter -> ('a, 'b) MkFixpoint.S.output -> unit
  val init :
    ('a, 'b) MkFixpoint.S.manager ->
    ('c, 'd, 'e) Graph.t -> Graph.SetV.t -> ('a, 'b) MkFixpoint.S.graph
  val fixpoint :
    ('a, 'b) MkFixpoint.S.manager ->
    ('a, 'b) MkFixpoint.S.graph -> MkFixpoint.S.strategy -> unit
  val descend :
    ('a, 'b) MkFixpoint.S.manager ->
    ('a, 'b) MkFixpoint.S.graph -> MkFixpoint.S.strategy -> bool
  val analysis :
    ('a, 'b) MkFixpoint.S.manager ->
    ('c, 'd, 'e) Graph.t ->
    Graph.SetV.t -> MkFixpoint.S.strategy -> ('a, 'b) MkFixpoint.S.graph
  val analysis_guided :
    ?depth:int ->
    ?priority:(Graph.hedge -> int) ->
    ?modify_strategy:(MkFixpoint.S.strategy -> MkFixpoint.S.strategy) ->
    ('a, 'b) MkFixpoint.S.manager ->
    ('c, 'd, 'e) Graph.t -> Graph.SetV.t -> ('a, 'b) MkFixpoint.S.graph
  val output_of_graph :
    ('a, 'b) MkFixpoint.S.graph -> ('a, 'b) MkFixpoint.S.output
  val strategy_default :
    ?depth:int ->
    ?priority:(Graph.hedge -> int) ->
    ('a, 'b, 'c) Graph.t -> Graph.SetV.t -> MkFixpoint.S.strategy
end