sig
  type specific_equality = {
    for_tau : Lang.F.tau -> bool;
    mk_new_eq : Lang.F.binop;
  }
  val rebuild :
    ?cache:Lang.F.term Lang.F.Tmap.t ->
    Lang.F.term -> Lang.F.term * Lang.F.term Lang.F.Tmap.t
  val set_builtin : Lang.Fun.t -> (Lang.F.term list -> Lang.F.term) -> unit
  val set_builtin' :
    Lang.Fun.t ->
    (Lang.F.term list -> Lang.F.tau option -> Lang.F.term) -> unit
  val set_builtin_eq :
    Lang.Fun.t -> (Lang.F.term -> Lang.F.term -> Lang.F.term) -> unit
  val set_builtin_leq :
    Lang.Fun.t -> (Lang.F.term -> Lang.F.term -> Lang.F.term) -> unit
  val in_state : ('-> 'b) -> '-> 'b
end