sig
  type state = {
    graph : Edges.t;
    time : float;
    event : int;
    connected_components : Agent.SetMap.Set.t Mods.IntMap.t option;
  }
  type summary = { unary_distances : (int * int) option; }
  val init_state : with_connected_components:bool -> Replay.state
  val do_step :
    Signature.s ->
    Replay.state -> Trace.step -> Replay.state * Replay.summary
  val is_step_triggerable : Replay.state -> Trace.step -> bool
  val is_step_triggerable_on_edges : Edges.t -> Trace.step -> bool
  val tests_pass_on :
    Edges.t -> Instantiation.concrete Instantiation.test list list -> bool
  val cc_of_state :
    Replay.state ->
    Pattern.PreEnv.t ->
    Pattern.PreEnv.t * ((int * int) list * Pattern.cc * Pattern.id) list
end