Comment traduisons-nous le quantificateur universel de First Order Logic (le $ forall $) et le quantificateur existentiel (le $ existe $) à Prolog?

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

  •  05-11-2019
  •  | 
  •  

Question

J'essaie de convertir certaines instructions d'anglais en instructions logiques de premier ordre et j'essaie d'utiliser Prolog pour vérifier les traductions. Ma question est: comment convertir une déclaration de logique de premier ordre (avoir $ forall $ et $ existe $ quantificateurs) en règles de prolog?


Par exemple, il y a cette déclaration anglaise:

Chaque électeur vote pour un candidat pour lequel certains électeurs ne votent pas.

Et voici ma traduction de la déclaration anglaise en logique de premier ordre:

dollars

Maintenant, je ne sais pas si cette traduction est correcte. C'est ce que je veux découvrir. Ma question est: comment convertir cette déclaration de logique de premier ordre en une règle Prolog?


Donc, j'essaie d'abord de remplir une base de données Prolog avec certains faits.

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

j'utilise human, voter, candidate, et votes. Voici quelques tentatives pour modéliser la déclaration dans une règle 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))).

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top