sig
  type e = S.t
  val current : unit -> e
  val initialize : e -> unit
  val finalize : unit -> e
  val abstract : Term.t -> unit
  val merge : Fact.Equal.t -> unit
  val propagate : Fact.Equal.t -> unit
  val dismerge : Fact.Diseq.t -> unit
  val propagate_diseq : Fact.Diseq.t -> unit
  val branch : unit -> unit
  val normalize : unit -> unit
  val nonneg : Fact.Nonneg.t -> unit
  val pos : Fact.Pos.t -> unit
end