Existential Quantifier

X ^ P is recognized as meaning “there exists an X such that P is true”, and is treated as equivalent to simply calling P. The use of the explicit existential quantifier outside setof/3 and bagof/3 is superfluous.

Variables occurring in Generator will not be treated as free if they are explicitly bound within Generator by an existential quantifier. An existential quantification is written:


meaning “there exists a Y such that Q is true”, where Y is some Prolog variable. For example:

     | ?- setof(X, Y^likes(X,Y), S).

would produce the single result

     X = _400,
     Y = _415,
     S = [bill,dick,harry,jan,tom] ;

in contrast to the earlier example.

Furthermore, it is possible to existentially quantify a term, where all the variables in that term are taken to be existentially quantified in the goal. e.g.

     A=term(X,Y), setof(Z, A^foo(X,Y,Z), L).

will treat X and Y as if they are existentially quantified.

Send feedback on this subject.