Lift a PPSet to a powerset domain ordered by subset. The elements of the set should be drawn from a *finite* collection of possible values, since the widening operator here is just union.

### Parameters

`PPSet : InferStdlib.PrettyPrintable.PPSet`

### Signature

`include module type of PPSet with type PPSet.elt = PPSet.elt`
`type elt``= PPSet.elt```
`type t`````
`val empty : t`
`val is_empty : t ‑> bool`
`val mem : elt ‑> t ‑> bool`
`val add : elt ‑> t ‑> t`
`val singleton : elt ‑> t`
`val remove : elt ‑> t ‑> t`
`val union : t ‑> t ‑> t`
`val inter : t ‑> t ‑> t`
`val diff : t ‑> t ‑> t`
`val compare : t ‑> t ‑> int`
`val equal : t ‑> t ‑> bool`
`val subset : t ‑> t ‑> bool`
`val iter : (elt ‑> unit) ‑> t ‑> unit`
`val map : (elt ‑> elt) ‑> t ‑> t`
`val fold : (elt ‑> 'a ‑> 'a) ‑> t ‑> 'a ‑> 'a`
`val for_all : (elt ‑> bool) ‑> t ‑> bool`
`val exists : (elt ‑> bool) ‑> t ‑> bool`
`val filter : (elt ‑> bool) ‑> t ‑> t`
`val partition : (elt ‑> bool) ‑> t ‑> t * t`
`val cardinal : t ‑> int`
`val elements : t ‑> elt list`
`val min_elt : t ‑> elt`
`val min_elt_opt : t ‑> elt option`
`val max_elt : t ‑> elt`
`val max_elt_opt : t ‑> elt option`
`val choose : t ‑> elt`
`val choose_opt : t ‑> elt option`
`val split : elt ‑> t ‑> t * bool * t`
`val find : elt ‑> t ‑> elt`
`val find_opt : elt ‑> t ‑> elt option`
`val find_first : (elt ‑> bool) ‑> t ‑> elt`
`val find_first_opt : (elt ‑> bool) ‑> t ‑> elt option`
`val find_last : (elt ‑> bool) ‑> t ‑> elt`
`val find_last_opt : (elt ‑> bool) ‑> t ‑> elt option`
`val of_list : elt list ‑> t`
`val pp_element : InferStdlib.PrettyPrintable.F.formatter ‑> elt ‑> unit`
`val pp : InferStdlib.PrettyPrintable.F.formatter ‑> t ‑> unit`
`include WithBottom with type astate = t`
`include S`
`type astate`````
`val (<=) : lhs:astate ‑> rhs:astate ‑> bool`

the partial order induced by join

`val join : astate ‑> astate ‑> astate`
`val widen : prev:astate ‑> next:astate ‑> num_iters:int ‑> astate`
`val pp : F.formatter ‑> astate ‑> unit`
`val empty : astate`

The bottom value of the domain. Naming it empty instead of bottom helps to bind the empty value for sets and maps to the natural definition for bottom

`val is_empty : astate ‑> bool`

Return true if this is the bottom value