I'm trying to convert some English statements to first order logic statements and I'm trying to use Prolog to verify the translations. My question is: how do I convert a first order logic statement (having $\forall$ and $\exists$ quantifiers) into Prolog rules?
For example, there's this English statement:
Every voter votes for a candidate which some voter doesn't vote for.
and here's my translation of the English statement into first order logic:
$$\forall x, y[Voter(x) \land Candidate(y) \land Votes(x, y) \rightarrow \exists z[ Voter(z) \land \lnot Votes(z, y) ] ]$$
Now I'm not sure if this translation is correct. That's what I want to find out. My question is: how do I convert this first order logic statement to a Prolog rule?
So first I'm trying to fill a Prolog database with some facts.
human(p1). human(p2). human(p3). human(p4). human(p5). human(p6). human(p7). human(p8). human(p9). %humans who are neither voters nor candidates human(p10). human(p11). %humans who are only voters voter(p1). voter(p2). voter(p3). %humans who are candidates and voters voter(p4). voter(p5). voter(p6). candidate(p4). candidate(p5). candidate(p6). %humans who are only candidates candidate(p7). candidate(p8). candidate(p9). %some random votes votes(p1, p6). votes(p2, p6). votes(p3, p6). votes(p4, p7). votes(p5, p8). votes(p6, p5).
votes. Here are some attempts to model the statement into a Prolog rule:
rule1 :- foreach((voter(X), candidate(Y), votes(X, Y)),(voter(Z), \+votes(Z, Y))). rule2 :- foreach((human(X), voter(X), candidate(Y), votes(X, Y)),(human(Z), voter(Z), \+votes(Z, Y))).