sig
  type t = private Type.t ID.Map.t
  val empty : Signature.t
  val is_empty : Signature.t -> bool
  val singleton : ID.t -> Type.t -> Signature.t
  val mem : Signature.t -> ID.t -> bool
  exception AlreadyDeclared of ID.t * Type.t * Type.t
  val declare : Signature.t -> ID.t -> Type.t -> Signature.t
  val find : Signature.t -> ID.t -> Type.t option
  val find_exn : Signature.t -> ID.t -> Type.t
  val arity : Signature.t -> ID.t -> int * int
  val cardinal : Signature.t -> int
  val is_ground : Signature.t -> bool
  val merge : Signature.t -> Signature.t -> Signature.t
  val filter : Signature.t -> (ID.t -> Type.t -> bool) -> Signature.t
  val diff : Signature.t -> Signature.t -> Signature.t
  val well_founded : Signature.t -> bool
  module Seq :
    sig
      val symbols : Signature.t -> ID.t Sequence.t
      val types : Signature.t -> Type.t Sequence.t
      val to_seq : Signature.t -> (ID.t * Type.t) Sequence.t
      val of_seq : (ID.t * Type.t) Sequence.t -> Signature.t
      val add_seq : Signature.t -> (ID.t * Type.t) Sequence.t -> Signature.t
    end
  val to_set : Signature.t -> ID.Set.t
  val to_list : Signature.t -> (ID.t * Type.t) list
  val add_list : Signature.t -> (ID.t * Type.t) list -> Signature.t
  val of_list : (ID.t * Type.t) list -> Signature.t
  val iter : Signature.t -> (ID.t -> Type.t -> unit) -> unit
  val fold : Signature.t -> '-> ('-> ID.t -> Type.t -> 'a) -> 'a
  val is_bool : Signature.t -> ID.t -> bool
  val is_not_bool : Signature.t -> ID.t -> bool
  val pp : t CCFormat.printer
  val to_string : t -> string
end