sig
  val generate_test_case : string option Pervasives.ref
  val set_timeout : (unit -> bool) -> unit
  type as_defined_rels =
      By_arity
    | By_const_param
    | By_ground_def
    | By_all_ground
  val as_defined_rels : TranslateGame.as_defined_rels Pervasives.ref
  val playout_horizon : int Pervasives.ref
  val saturation_engine : bool Pervasives.ref
  val playouts_for_rule_filtering : int Pervasives.ref
  val filter_possibly_redundant : bool Pervasives.ref
  type tossrule_data = {
    legal_tuple : GDL.term array;
    rule_add : (string * string array) list;
    rule_del : (string * string array) list;
    struc_elems : string list;
    fixvar_terms : (string * (GDL.term * GDL.path) list) list;
    rulevar_terms : GDL.term Aux.StrMap.t;
  }
  type gdl_translation = {
    elem_term_map : GDL.term Aux.IntMap.t;
    f_paths : GDL.path_set;
    c_paths : GDL.path_set;
    roots : GDL.term list;
    tossrule_data : TranslateGame.tossrule_data Aux.StrMap.t;
    turnbased_noops : GDL.term option array array option;
    playing_as : int;
    is_concurrent : bool;
    transl_data : TranslateFormula.transl_data;
    fluents : string list;
  }
  val empty_gdl_translation : TranslateGame.gdl_translation
  val translate_game :
    ?playing_as:GDL.term ->
    GDL.clause list ->
    TranslateGame.gdl_translation * Arena.game *
    (Arena.game * Arena.game_state)
  val translate_incoming_move :
    TranslateGame.gdl_translation ->
    Arena.game * Arena.game_state ->
    GDL.term list -> (int * (string * DiscreteRule.matching)) list
  val translate_outgoing_move :
    TranslateGame.gdl_translation ->
    Arena.game * Arena.game_state ->
    string -> (string * string) list -> string
  val noop_move : TranslateGame.gdl_translation -> Arena.game_state -> string
  val our_turn : TranslateGame.gdl_translation -> Arena.game_state -> bool
  val is_turnbased : TranslateGame.gdl_translation -> bool
end