sig
  type sort =
      Predicate
    | Function
    | Skolem
    | Connection
    | FD_Relation
    | FD_Size_Marker
    | FD_Element
    | FD_Symbol
  type symbol
  module SymbolTable :
    sig
      type key = symbol
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
    end
  val equality : Symbol.symbol
  val diff : Symbol.symbol
  val lemma_root : Symbol.symbol
  val create_predicate : string -> int -> Symbol.symbol
  val create_function : string -> int -> Symbol.symbol
  val create_skolem :
    ?arity:int -> ?name:string option -> unit -> Symbol.symbol
  val create_connection : int -> Symbol.symbol
  val get_fd_relation : int -> Symbol.symbol
  val get_fd_size_marker : int -> Symbol.symbol
  val get_fd_element : int -> Symbol.symbol
  val create_fd_symbol : Symbol.symbol -> Symbol.symbol
  val get_symbol_from_fd_symbol : Symbol.symbol -> Symbol.symbol
  val name : Symbol.symbol -> string
  val arity : Symbol.symbol -> int
  val id : Symbol.symbol -> int
  val sort : Symbol.symbol -> Symbol.sort
  val equal : Symbol.symbol -> Symbol.symbol -> bool
  val compare : Symbol.symbol -> Symbol.symbol -> int
  val compare_name : Symbol.symbol -> Symbol.symbol -> int
  val is_predicate : Symbol.symbol -> bool
  val is_function : Symbol.symbol -> bool
  val is_input : Symbol.symbol -> bool
  val is_skolem : Symbol.symbol -> bool
  val is_connection : Symbol.symbol -> bool
  val is_fd_relation : Symbol.symbol -> bool
  val is_fd_size_marker : Symbol.symbol -> bool
  val is_fd_element : Symbol.symbol -> bool
  val is_fd_symbol : Symbol.symbol -> bool
  val to_string : ?pretty:bool -> Symbol.symbol -> string
  val sort_to_string : Symbol.sort -> string
end