TP Prolog : mensonges et vérités

jeudi 1er février 2024
par  Emmanuel Adam
popularité : 3%

Utilisez SWI Prolog, ou GNU Prolog, ou Prolog en ligne : https://swish.swi-prolog.org/

 Etrange Île

Le but de ce Tp est de montrer l’importance de la représentation des connaissances pour la résolution d’un problème.
Ce TP est fortement inspiré du livre « Quel est le titre de ce livre » de Raymond Smullyan (wikipedia francais) (wikipedia anglais).

Voici le problème :

L’agent Sully, chargé d’un cas difficile, se rend à Vatar, dans l’Île Puro-Pira...

L’Île de Puro-Pira est peuplée par deux types d’habitant : les Puros et les Piras.
Leur particularité est la suivante : les Puros disent toujours la vérité alors que les Piras mentent constamment.

ps. vous pouvez trouver de l’inspiration sur la solution à cet exercice.


 Premier cas

Sully rencontre trois habitants, Allan, Bahia et Clara.
Sully à Allan - « Etes vous un Puro ou un Pira ? »

  • Allan - « Yovo woresteo. »
  • Sully - « Qu’est-ce qu’il a dit ? »
  • Bahia - « Il a dit qu’il était un Pira. »
  • Clara - « Ne croyez pas Bahia, elle ment ! »

Que pouvez-vous dire à propos de ces trois habitants ?


 Second cas

Plus loin, Sully croise deux habitants, Asia et Bono. Et Asia déclare à Sully

  • « Au moins l’un de nous deux est un Puro. »

Que sont Asia et Bono ?


 Troisième cas

Sully s’assoit à l’ombre d’un palmier et se met à réfléchir.

  • « Supposons que Asia m’ait dit »Je suis Pira ou Bono est un Puro« , qu’aurais-je pu en déduire ? »

Et vous ?


 Quatrième cas

Toujours dans ses supputations, Sully se dit :

  • « Bon et si Asia m’avait dit »Je suis une Pira, et deux et deux font cinq.« Qu’aurait-elle été ? »

Et d’après vous ?


 Cinquième cas

Sully est tiré de ses rêveries par trois pêcheurs qui passent auprès de lui.

  • Arno déclare « Benio est un Pira ».
  • Benio « Peut-être, mais en tout cas Arno et Claudo sont de la même espèce. »

Sully connaÎt alors le type de Claudo.

Et vous ?


 Sixième cas

Ne trouvant pas de pistes à ses recherches sur cette Île, Sully quitte le rivage à l’aide des pêcheurs et arrive à Vatar2 sur une Île voisine où, outre les Puros et les Piras, vivent les Versatiles...
Les Versatiles tantôt mentent, tantôt disent la vérité...

Mais la logique de Sully va lui permettre de s’en tirer quand même.

Les pêcheurs lui présentent trois personnes, Alpha, Beta et Charli.
Ils savent que parmi elles se trouvent un Puro, un Pira et un Versatile, mais ils ne se rappellent plus qui est quoi.

  • Alpha - « Je suis un Versatile »
  • Beta - « C’est vrai »
  • Charli - « Je ne suis pas Versatile »

Alors Sully put affirmer aux personnes qu’il connaissait leurs types.

Et vous ?


 Septième cas

Cette Île n’inspire pas confiance à Sully, non seulement à cause de ces habitants Versatiles, mais surtout parce qu’ils ont formé des classes d’individus.

Ainsi les Puros forment la classe haute, habitant les hauts sommets, les Versatiles la classe Moyenne et les Piras la classe basse, résidant en bord de plage.

Il rencontre deux habitants, Ariedo et Birrama.

  • Ariedo - « Ma classe est inférieure à celle de Birrama. »
  • Birrama - « Ce n’est pas vrai ! »

Non seulement Sully connaît alors le type de chacun, mais de plus, il peut dire qui ment et qui dit la vérité.

Et, vous ? Que dit votre programme Prolog ?


 Guide

On définira les faits habitant() décrivant les 3 types d’habitants : habitantPuro, habitantPira au début puis habitantVersatile pour les derniers problèmes.

On définira de même les faits type(pure), type(pire), puis type(versatile).

Il faudra définir également les faits est_un(habitantPure, pure) ...

Les règles à définir sont nest_pas(X, Y):-... ,  dire(X, Y):-..... en fonction des 3 types d’habitants, ou(X, Y), et(X, Y), non(X) puis inferieur(X, Y):-...


 A rendre

Le code, commenté, et pour chaque cas, les questions posées ainsi que les réponses.


 Exemple d’extrait de code