sig
  type t
  val empty : Passive.t
  val is_empty : Passive.t -> bool
  val union : Passive.t -> Passive.t -> Passive.t
  val bind : fresh:Lang.F.var -> bound:Lang.F.var -> Passive.t -> Passive.t
  val join : Lang.F.var -> Lang.F.var -> Passive.t -> Passive.t
  val conditions : Passive.t -> (Lang.F.var -> bool) -> Lang.F.pred list
  val apply : Passive.t -> Lang.F.pred -> Lang.F.pred
  type binding =
      Bind of Lang.F.var * Lang.F.var
    | Join of Lang.F.var * Lang.F.var
  val iter : (Passive.binding -> unit) -> Passive.t -> unit
  val pretty : Format.formatter -> Passive.t -> unit
end