sig
  module IntMap :
    sig
      type key = int
      type +'a t
      val empty : 'a t
      val is_empty : 'a t -> bool
      val mem : key -> 'a t -> bool
      val add : key -> '-> 'a t -> 'a t
      val singleton : key -> '-> 'a t
      val remove : key -> 'a t -> 'a t
      val merge :
        (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val for_all : (key -> '-> bool) -> 'a t -> bool
      val exists : (key -> '-> bool) -> 'a t -> bool
      val filter : (key -> '-> bool) -> 'a t -> 'a t
      val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
      val cardinal : 'a t -> int
      val bindings : 'a t -> (key * 'a) list
      val min_binding : 'a t -> key * 'a
      val max_binding : 'a t -> key * 'a
      val choose : 'a t -> key * 'a
      val split : key -> 'a t -> 'a t * 'a option * 'a t
      val find : key -> 'a t -> 'a
      val map : ('-> 'b) -> 'a t -> 'b t
      val mapi : (key -> '-> 'b) -> 'a t -> 'b t
    end
  module StringMap :
    sig
      type key = string
      type +'a t
      val empty : 'a t
      val is_empty : 'a t -> bool
      val mem : key -> 'a t -> bool
      val add : key -> '-> 'a t -> 'a t
      val singleton : key -> '-> 'a t
      val remove : key -> 'a t -> 'a t
      val merge :
        (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val for_all : (key -> '-> bool) -> 'a t -> bool
      val exists : (key -> '-> bool) -> 'a t -> bool
      val filter : (key -> '-> bool) -> 'a t -> 'a t
      val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
      val cardinal : 'a t -> int
      val bindings : 'a t -> (key * 'a) list
      val min_binding : 'a t -> key * 'a
      val max_binding : 'a t -> key * 'a
      val choose : 'a t -> key * 'a
      val split : key -> 'a t -> 'a t * 'a option * 'a t
      val find : key -> 'a t -> 'a
      val map : ('-> 'b) -> 'a t -> 'b t
      val mapi : (key -> '-> 'b) -> 'a t -> 'b t
    end
  module Elems :
    sig
      type elt = int
      type t
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val split : elt -> t -> t * bool * t
    end
  val add_elems : int list -> Structure.Elems.t -> Structure.Elems.t
  val elems_of_list : int list -> Structure.Elems.t
  module Tuples :
    sig
      type elt = int array
      type t
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val split : elt -> t -> t * bool * t
    end
  val add_tuples : int array list -> Structure.Tuples.t -> Structure.Tuples.t
  val tuples_of_list : int array list -> Structure.Tuples.t
  type structure
  val compare_elems : int -> int -> int
  val compare : Structure.structure -> Structure.structure -> int
  val equal : Structure.structure -> Structure.structure -> bool
  val elements : Structure.structure -> int list
  val elems : Structure.structure -> Structure.Elems.t
  val constants : Structure.structure -> (string * int) list
  val nbr_elems : Structure.structure -> int
  val relations :
    Structure.structure -> Structure.Tuples.t Structure.StringMap.t
  val functions :
    Structure.structure -> float Structure.IntMap.t Structure.StringMap.t
  val elem_nbr : Structure.structure -> string -> int
  val elem_name : Structure.structure -> int -> string
  val names : Structure.structure -> int Structure.StringMap.t
  val inv_names : Structure.structure -> string Structure.IntMap.t
  val replace_names :
    Structure.structure ->
    int Structure.StringMap.t ->
    string Structure.IntMap.t -> Structure.structure
  val rel_size : Structure.structure -> string -> int
  val rev_string_to_int_map :
    int Structure.StringMap.t -> string Structure.IntMap.t
  val rev_int_to_string_map :
    string Structure.IntMap.t -> int Structure.StringMap.t
  val empty_structure : unit -> Structure.structure
  val default_circle_structure : unit -> Structure.structure
  val empty_with_signat : (string * int) list -> Structure.structure
  val incident : Structure.structure -> int -> (string * int array list) list
  val check_rel : Structure.structure -> string -> int array -> bool
  val rel_graph : string -> Structure.structure -> Structure.Tuples.t
  val rel_incidence :
    string -> Structure.structure -> Structure.Tuples.t array
  val fun_val : Structure.structure -> string -> int -> float
  val elems_with_val : Structure.structure -> string -> float -> int list
  val model_val : Structure.structure -> string -> int -> Structure.structure
  val add_models :
    Structure.structure ->
    string -> (int * Structure.structure) list -> Structure.structure
  val f_signature : Structure.structure -> string list
  val rel_signature : Structure.structure -> (string * int) list
  val rel_sizes : Structure.structure -> (string * int) list
  val elem_str : Structure.structure -> int -> string
  val rel_str :
    ?print_arity:bool ->
    Structure.structure -> string -> Structure.Tuples.t -> string
  val ext_str : ?show_empty:bool -> Structure.structure -> string
  val str :
    ?show_empty:bool -> ?show_models:bool -> Structure.structure -> string
  val fprint_rel :
    ?print_arity:bool ->
    Structure.structure ->
    Format.formatter -> string * Structure.Tuples.t -> unit
  val fprint_fun :
    Structure.structure ->
    Format.formatter -> string * float Structure.IntMap.t -> unit
  val fprint_ext_structure :
    show_empty:bool -> Format.formatter -> Structure.structure -> unit
  val fprint :
    show_empty:bool -> Format.formatter -> Structure.structure -> unit
  val print : ?show_empty:bool -> Structure.structure -> unit
  val sprint : ?show_empty:bool -> Structure.structure -> string
  val board_elem_coords : string -> int * int
  val board_coords_name : int * int -> string
  val compare_diff :
    ?cmp_funs:(float -> float -> bool) ->
    Structure.structure -> Structure.structure -> bool * string
  val diff_elems :
    Structure.structure -> Structure.structure -> (int * string list) list
  val add_constant :
    Structure.structure -> string -> int -> Structure.structure
  exception Structure_mismatch of string
  val add_elem :
    Structure.structure -> ?name:string -> int -> Structure.structure
  val add_new_elem :
    Structure.structure -> ?name:string -> unit -> Structure.structure * int
  val find_elem : Structure.structure -> string -> int
  val find_or_new_elem :
    Structure.structure -> string -> Structure.structure * int
  val add_rel_name :
    string -> int -> Structure.structure -> Structure.structure
  val add_rel :
    Structure.structure -> string -> int array -> Structure.structure
  val add_rel_named_elems :
    Structure.structure -> string -> string array -> Structure.structure
  val unsafe_add_rel :
    Structure.structure -> string -> int array -> Structure.structure
  val add_rels :
    Structure.structure -> string -> int array list -> Structure.structure
  val unsafe_add_rels :
    Structure.structure -> string -> int array list -> Structure.structure
  val free_for_rel : string -> int -> Structure.structure
  val add_fun :
    Structure.structure -> string -> int * float -> Structure.structure
  val add_funs :
    Structure.structure ->
    string -> (int * float) list -> Structure.structure
  val change_fun :
    Structure.structure -> string -> string -> float -> Structure.structure
  val change_fun_int :
    Structure.structure -> string -> int -> float -> Structure.structure
  val create_from_lists :
    ?struc:Structure.structure ->
    string list ->
    (string * int option * string array list, string * string) Aux.choice
    list -> (string * (string * float) list) list -> Structure.structure
  val create_from_lists_position :
    ?struc:Structure.structure ->
    string list ->
    (string * int option * string array list, string * string) Aux.choice
    list -> Structure.structure
  val create_from_lists_range :
    float ->
    ?struc:Structure.structure ->
    string list ->
    (string * int option * string array list, string * string) Aux.choice
    list -> Structure.structure
  val del_rel :
    Structure.structure -> string -> int array -> Structure.structure
  val del_rels :
    Structure.structure -> string -> int array list -> Structure.structure
  val clear_rels :
    ?remove_from_sig:bool ->
    Structure.structure -> (string -> bool) -> Structure.structure
  val clear_fun : Structure.structure -> string -> Structure.structure
  val clear_names : Structure.structure -> Structure.structure
  val del_elem : Structure.structure -> int -> Structure.structure
  val del_elems :
    Structure.structure ->
    int list -> Structure.structure * (string * int array list) list
  val gc_elems :
    ?ignore_funs:bool -> Structure.structure -> Structure.structure
  val diffrels_struc :
    Structure.structure -> Structure.structure -> string list option
  val trs_set_struc :
    Structure.structure ->
    string * Term.term * Term.term -> Structure.structure
  val struc_from_trs : string -> string * Structure.structure
  exception Board_parse_error of string
  val parse_board :
    ?row_col_rels:string * string ->
    ?pos_initial:float * float ->
    ?pos_increment:float * float ->
    ?struc:Structure.structure -> string -> Structure.structure
end