type instruction =
| Store of int * int64 | Load of int * int | Fence
| Move of int * int64 | Branch of int * int64 * int
| Enter | Leave | Exchange of int * int * int64
type goal = Overlap | Outcome of {
registers : (int * int * int64) list;
memory : (int * int64) list;
drained : bool;
}
type model = Sc | Tso
type location = int * int
type t = {
name : string;
names : string array;
bound : int;
threads : instruction array array;
candidates : location list;
goal : goal;
}
val validate : t -> unit
val decode : Sexp.t -> t
val encode : t -> Sexp.t
val load : string -> t
val instruction : instruction -> Sexp.t
val location : Sexp.t -> location
val model : string -> model
val model_name : model -> string