type witness = { case : Syntax.t; model : Syntax.model; bound : int; fences : Syntax.location list; actors : int array; } type result = { witness : witness option; query : Solver.query } type phase = Searching of int * Syntax.location list | Counterexample of witness | Excluded of int | Refining of int | Verified of Syntax.location list * int * int type repair = { case : Syntax.t; fences : Syntax.location list; clauses : int list list; rounds : int; bound : int; states : int; } val check : ?timeout:int -> ?tick:(unit -> unit) -> ?bound:int -> ?fences:Syntax.location list -> ?folder:string -> ?fixed:int array -> Syntax.t -> Syntax.model -> result val witness_sexp : witness -> Sexp.t val load_witness : string -> witness val replay : witness -> Machine.t array * Machine.event array val save : string -> result -> unit val repair : ?timeout:int -> ?tick:(unit -> unit) -> ?notify:(phase -> unit) -> Syntax.t -> string -> repair option val load_repair : string -> repair val certify : ?timeout:int -> ?tick:(unit -> unit) -> string -> repair val audit : ?timeout:int -> ?tick:(unit -> unit) -> string -> string -> repair val validate_schedule : ?timeout:int -> Syntax.t -> Syntax.location list -> int array -> unit val outcomes : ?timeout:int -> ?tick:(unit -> unit) -> Syntax.t -> Syntax.model -> (int64 * int64) list