sig
  type t
  val empty : Passive.t
  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
  val pretty : Format.formatter -> Passive.t -> unit
end