sig
  type t
  and ext = Term.Var.Set.t
  val eq : t -> t -> bool
  val pp : t Pretty.printer
  val empty : t
  val is_empty : t -> bool
  val is_dependent : t -> Term.t -> bool
  val is_independent : t -> Term.t -> bool
  val iter : (Fact.Equal.t -> unit) -> t -> unit
  val fold : (Fact.Equal.t -> '-> 'a) -> t -> '-> 'a
  val for_all : (Fact.Equal.t -> bool) -> t -> bool
  val exists : (Fact.Equal.t -> bool) -> t -> bool
  val to_list : t -> Fact.Equal.t list
  val equality : t -> Term.t -> Fact.Equal.t
  val apply : t -> Jst.Eqtrans.t
  val find : t -> Jst.Eqtrans.t
  val inv : t -> Jst.Eqtrans.t
  val dep : t -> Term.t -> Term.Var.Set.t
  val ext : t -> ext
  module Dep :
    sig
      type eqs = t
      val iter : eqs -> (Fact.Equal.t -> unit) -> Term.t -> unit
      val fold : eqs -> (Fact.Equal.t -> '-> 'a) -> Term.t -> '-> 'a
      val for_all : eqs -> (Fact.Equal.t -> bool) -> Term.t -> bool
      val exists : eqs -> (Fact.Equal.t -> bool) -> Term.t -> bool
      val choose : eqs -> (Fact.Equal.t -> bool) -> Term.t -> Fact.Equal.t
    end
  val restrict : t -> Term.t -> unit
  type config = Partition.t * t
  val update : config -> Fact.Equal.t -> unit
  val diff : t -> t -> t
  val copy : t -> t
end