sig
  type graph
  val empty : Inter_graph.graph
  val add_reg : Inter_graph.graph -> Register.reg -> Inter_graph.graph
  val remove_reg : Inter_graph.graph -> Register.reg -> Inter_graph.graph
  val add_interference :
    Register.reg -> Register.reg -> Inter_graph.graph -> Inter_graph.graph
  val add_preference :
    Register.reg -> Register.reg -> Inter_graph.graph -> Inter_graph.graph
  val remove_preferences :
    Inter_graph.graph -> Register.reg -> Inter_graph.graph
  val join_nodes :
    Inter_graph.graph ->
    Register.reg -> Register.reg -> Inter_graph.graph * Register.reg
  val is_empty : Inter_graph.graph -> bool
  val degree : Inter_graph.graph -> Register.reg -> int
  val neighbour : Inter_graph.graph -> Register.reg -> Register.reg -> bool
  val prefer_out : Inter_graph.graph -> Register.reg -> bool
  val find_register :
    (Register.reg -> bool) -> Inter_graph.graph -> Register.reg option
  val find_preference :
    (Register.reg -> Register.reg -> bool) ->
    Inter_graph.graph -> (Register.reg * Register.reg) option
  val neighbours : Inter_graph.graph -> Register.reg -> Register.reg list
  val choose : Inter_graph.graph -> Register.reg
  val print_graph : Inter_graph.graph -> unit
  val print_graph_coloring : Inter_graph.graph -> Coloring.coloring -> unit
end