sig
  type t = t list
  val compare : t -> t -> int
  val equal : t -> t -> bool
  val hash : t -> int
  val to_string : t -> string
  val pp : Format.formatter -> t -> unit
  val terms : t -> Sl_term.Set.t
  val vars : t -> Sl_term.Set.t
  val to_string_sep : string -> t -> string
  val subst : Sl_term.Subst.t -> t -> t
  val unify :
    ?update_check:(Sl_term.Subst.t * Sl_term.Subst.t) Fun.predicate ->
    (Sl_term.Subst.t, 'a, t) Unification.cps_unifier
  val biunify :
    ?update_check:((Sl_term.Subst.t * Sl_term.Subst.t) *
                   (Sl_term.Subst.t * Sl_term.Subst.t))
                  Fun.predicate ->
    (Sl_term.Subst.t * Sl_term.Subst.t, 'a, t) Unification.cps_unifier
end