functor (W : Weak.S->
  functor (P : sig type p = W.data val p : p predicate end->
    sig
      val exists : W.t Specification.predicate
      val for_all : W.t Specification.predicate
    end