Come traduriamo il quantificatore universale della logica del primo ordine (il $ forall $) e il quantificatore esistenziale (il $ esiste $) a prolog?

cs.stackexchange https://cs.stackexchange.com/questions/98932

  •  05-11-2019
  •  | 
  •  

Domanda

Sto cercando di convertire alcune dichiarazioni in inglese in dichiarazioni logiche di primo ordine e sto cercando di usare Prolog per verificare le traduzioni. La mia domanda è: come posso convertire una dichiarazione logica del primo ordine (avendo $ forall $ e $ esiste $ quantificatori) in regole prolog?


Ad esempio, c'è questa dichiarazione in inglese:

Ogni elettore vota per un candidato per il quale alcuni elettori non vota.

Ed ecco la mia traduzione della dichiarazione inglese nella logica del primo ordine:

$$ forall x, y [elettore (x) land candidato (y) land voti (x, y) destrorrow esiste z [elettore (z) land lnot voti (z, y)] $$

Ora non sono sicuro che questa traduzione sia corretta. Questo è quello che voglio scoprire. La mia domanda è: come posso convertire questa dichiarazione logica del primo ordine in una regola Prolog?


Quindi prima sto cercando di riempire un database Prolog con alcuni fatti.

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).

sto usando human, voter, candidate, e votes. Ecco alcuni tentativi di modellare l'affermazione in una regola Prolog:

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))).

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top