sig
  type t
  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 tags : t -> Tags.t
  val subst_tags : Tagpairs.t -> t -> t
  val satisfiable : t Fun.predicate
  val valid : t Fun.predicate
  val unify :
    ?update_check:Tagpairs.t Unification.state_update Fun.predicate ->
    (Tagpairs.t, 'a, t) Unification.cps_unifier
  val biunify :
    ?update_check:(Tagpairs.t * Tagpairs.t) Unification.state_update
                  Fun.predicate ->
    (Tagpairs.t * Tagpairs.t, 'a, t) Unification.cps_unifier
end