functor (S : Set.S) -> functor (P : sig type p = S.elt val p : p predicate end) -> sig val exists : S.t Specification.predicate val for_all : S.t Specification.predicate end