TP 2 : Modélisation

Systèmes Logiques

15 Janvier 2025

L’Énigme d’Einstein est une énigme, souvent attribuée à Einstein bien que cela soit peut probable, consistant à retrouver des informations sur des personnes à partir d’indications partielles sur leur situation. Ce genre d’énigmes, connues sous le nom de Zebra Puzzle en anglais, était très populaire comme jeux de logique dans différents magazines. C’est une bonne illustration de ce qu’on pourrait attendre d’une Intelligence Artificielle : quelles connaissances peut-on inférer d’un ensemble de faits connus ?

Dans cette section, on va s’intéresser à une version simplifiée de l’énigme d’Einstein et essayer d’inférer une méthode générale pour modéliser et résoudre ce genre de problème. L’énigme est la suivante (source, en anglais):

Dans une rue, il y a quatre maisons côte à côte (numérotées de 1 à 4). À partir des indices suivants, retrouvez pour chaque maison : sa couleur, le nom et le prénom de l’enfant qui y vit ainsi que le cadeau qu’il a reçu à Noël.

  1. Chaque maison a une seule couleur, et elles ont toutes des couleurs différentes.
  2. Un seul enfant vit dans chaque maison, ils ont tous des prénoms différents.
  3. Chaque enfant a un seul nom de famille et ils ont tous des noms différents.
  4. Chaque enfant a reçu un unique cadeau à Noël, ils sont tous différents.
  5. L’enfant qui a eu le skateboard vit dans la deuxième maison.
  6. L’enfant dont le nom est Young vit dans la première maison.
  7. L’enfant qui a reçu un puzzle vit dans une maison qui se trouve à une extrémité de la rue.
  8. L’enfant qui vit dans la maison blanche vit à côté de celui qui a reçu un puzzle.
  9. L’enfant prénommé Ulysses est le voisin de gauche de l’enfant prénommé Wyatt.
  10. La famille King vit dans une maison qui se trouve à une extrémité de la rue.
  11. La famille Young a offert un kit de science à leur enfant.
  12. La maison blanche et la maison bleue sont voisines. La maison blanche se trouve à droite de la maison bleue.
  13. L’enfant prénommé Patrick vit dans la troisième maison.
  14. L’enfant ayant reçu un robot vit dans une maison voisine de la maison Rose.
  15. La famille Quinn a offert un skateboard à leur enfant.

Voici une réponse partielle donnée par ChatGPT (à partir de la version anglaise), qui ne contient pas tous les noms prénoms mais les couleurs et les cadeaux (voir le transcript complet).

$
Maison 1 Maison 2 Maison 3 Maison 4
Young Quinn Patrick _
Ulysses Skate _ Puzzle
Robot Blanche Rose _
King Bleue _ Wyatt

Cette proposition vous semble-t-elle correcte ? Pourquoi ?

Si vous avez un accès à ChatGPT, essayez par vous-même !

Correction

Cette réponse n’a pas beaucoup de sens. Par exemple :

  • La première colonne contient deux noms (Young et King).
  • La deuxième colonne contient deux couleurs.
  • La famille Young n’offre pas un kit de science comme indiqué …

Lorsque vous en aurez assez d’essayer de corriger ChatGPT, essayez de résoudre l’énigme par vous-même en remplissant le tableau suivant :

Maison 1 Maison 2 Maison 3 Maison 4
Nom
Prénom
Couleur
Cadeau
Correction
Maison1 Maison2 Maison3 Maison4
Young Quinn Jackson King
Ulysses Wyatt Patrick Ian
Vert Bleu Blanc Rose
Kit Skate Robot Puzzle

La solution que vous avez trouvée est-elle l’unique solution possible ? Pourquoi ?

Correction

Lorsqu’on construit la solution, on s’aperçoit normalement qu’à chaque étape, on peut remplir une nouvelle case sans ambiguité. Il ne peut donc pas y avoir d’autres solutions.

Modéliser le problème en logique propositionnelle en exprimant les conditions 1-15 de l’énigme.
Indication On pourra utiliser des propositions de la forme “CadeauPuzz, 3 : l’enfant dans la maison 3 a reçu un puzzle
Correction
  • Indication 1 : On dit qu’au moins une maison est rose (CRose1∨CRose2∨CRose3∨CRose4) (on fait pareil pour Blanc, Bleu et Vert). Maintenant, on veut qu’une maison ait au plus une couleur. Pour cela, on va par exemple dire que si la maison 1 est rose, alors les autres ne peuvent pas être rose. CRose1 ⇒ ¬CRose2 ∧ ¬CRose3 ∧ ¬CRose4.

On veut aussi que si une maison est d’une certaine couleur, alors elle ne peut pas être d’une autre couleur : CRose1 ⇒ (¬CVert1∧¬CBleu1∧¬CVert1).

Il faut faire cela pour toutes les couleurs et toutes les maisons. Le mieux étant de le faire programmatiquement, voir solution.py pour une formalisation et logic.py en Python qui appelle un SAT solver à la fin pour résoudre le problème.

On peut l’écrire, ce qui donne en pratique l’horreur ci-dessous, ou voir les codages utilisant les fonctions atleastone et atmostone sur des ensembles de variables qu’on a généré automatiquement. Dans le code, on a une simplification de atmostone. En effet, si on a un ensemble P de variables propositionnelles et qu’on veut accepter seulement les interprétations où au plus une variable est mise à vrai, il suffit d’écrire la conjonction des clauses ¬x ∨ ¬y pour chaque pair x, y ∈ P avec x ≠ y. Si deux variables a, b de P sont mises à vraies, alors ¬a ∨ ¬b ne sera pas satisfaite, donc la conjonction ne le sera pas non plus. Dans tous les autres cas, la formule sera vraie.

(((CRose1∨CRose2∨CRose3∨CRose4)∧(CBlanc1∨CBlanc2∨CBlanc3∨CBlanc4)∧(CBleu1∨CBleu2∨CBleu3∨CBleu4)∧(CVert1∨CVert2∨CVert3∨CVert4))∧((¬(CRose1)∨¬(CRose2))∧(¬(CRose1)∨¬(CRose3))∧(¬(CRose1)∨¬(CRose4))∧(¬(CRose2)∨¬(CRose3))∧(¬(CRose2)∨¬(CRose4))∧(¬(CRose3)∨¬(CRose4))∧(¬(CBlanc1)∨¬(CBlanc2))∧(¬(CBlanc1)∨¬(CBlanc3))∧(¬(CBlanc1)∨¬(CBlanc4))∧(¬(CBlanc2)∨¬(CBlanc3))∧(¬(CBlanc2)∨¬(CBlanc4))∧(¬(CBlanc3)∨¬(CBlanc4))∧(¬(CBleu1)∨¬(CBleu2))∧(¬(CBleu1)∨¬(CBleu3))∧(¬(CBleu1)∨¬(CBleu4))∧(¬(CBleu2)∨¬(CBleu3))∧(¬(CBleu2)∨¬(CBleu4))∧(¬(CBleu3)∨¬(CBleu4))∧(¬(CVert1)∨¬(CVert2))∧(¬(CVert1)∨¬(CVert3))∧(¬(CVert1)∨¬(CVert4))∧(¬(CVert2)∨¬(CVert3))∧(¬(CVert2)∨¬(CVert4))∧(¬(CVert3)∨¬(CVert4))∧(¬(CRose1)∨¬(CBlanc1))∧(¬(CRose2)∨¬(CBlanc2))∧(¬(CRose3)∨¬(CBlanc3))∧(¬(CRose4)∨¬(CBlanc4))∧(¬(CRose1)∨¬(CBleu1))∧(¬(CRose2)∨¬(CBleu2))∧(¬(CRose3)∨¬(CBleu3))∧(¬(CRose4)∨¬(CBleu4))∧(¬(CRose1)∨¬(CVert1))∧(¬(CRose2)∨¬(CVert2))∧(¬(CRose3)∨¬(CVert3))∧(¬(CRose4)∨¬(CVert4))∧(¬(CBlanc1)∨¬(CRose1))∧(¬(CBlanc2)∨¬(CRose2))∧(¬(CBlanc3)∨¬(CRose3))∧(¬(CBlanc4)∨¬(CRose4))∧(¬(CBlanc1)∨¬(CBleu1))∧(¬(CBlanc2)∨¬(CBleu2))∧(¬(CBlanc3)∨¬(CBleu3))∧(¬(CBlanc4)∨¬(CBleu4))∧(¬(CBlanc1)∨¬(CVert1))∧(¬(CBlanc2)∨¬(CVert2))∧(¬(CBlanc3)∨¬(CVert3))∧(¬(CBlanc4)∨¬(CVert4))∧(¬(CBleu1)∨¬(CRose1))∧(¬(CBleu2)∨¬(CRose2))∧(¬(CBleu3)∨¬(CRose3))∧(¬(CBleu4)∨¬(CRose4))∧(¬(CBleu1)∨¬(CBlanc1))∧(¬(CBleu2)∨¬(CBlanc2))∧(¬(CBleu3)∨¬(CBlanc3))∧(¬(CBleu4)∨¬(CBlanc4))∧(¬(CBleu1)∨¬(CVert1))∧(¬(CBleu2)∨¬(CVert2))∧(¬(CBleu3)∨¬(CVert3))∧(¬(CBleu4)∨¬(CVert4))∧(¬(CVert1)∨¬(CRose1))∧(¬(CVert2)∨¬(CRose2))∧(¬(CVert3)∨¬(CRose3))∧(¬(CVert4)∨¬(CRose4))∧(¬(CVert1)∨¬(CBlanc1))∧(¬(CVert2)∨¬(CBlanc2))∧(¬(CVert3)∨¬(CBlanc3))∧(¬(CVert4)∨¬(CBlanc4))∧(¬(CVert1)∨¬(CBleu1))∧(¬(CVert2)∨¬(CBleu2))∧(¬(CVert3)∨¬(CBleu3))∧(¬(CVert4)∨¬(CBleu4))))

  • Indication 2 : comme au-dessus, mais avec les prénoms.

(((PIan1∨PIan2∨PIan3∨PIan4)∧(PPatrick1∨PPatrick2∨PPatrick3∨PPatrick4)∧(PUlysses1∨PUlysses2∨PUlysses3∨PUlysses4)∧(PWyatt1∨PWyatt2∨PWyatt3∨PWyatt4))∧((¬(PIan1)∨¬(PIan2))∧(¬(PIan1)∨¬(PIan3))∧(¬(PIan1)∨¬(PIan4))∧(¬(PIan2)∨¬(PIan3))∧(¬(PIan2)∨¬(PIan4))∧(¬(PIan3)∨¬(PIan4))∧(¬(PPatrick1)∨¬(PPatrick2))∧(¬(PPatrick1)∨¬(PPatrick3))∧(¬(PPatrick1)∨¬(PPatrick4))∧(¬(PPatrick2)∨¬(PPatrick3))∧(¬(PPatrick2)∨¬(PPatrick4))∧(¬(PPatrick3)∨¬(PPatrick4))∧(¬(PUlysses1)∨¬(PUlysses2))∧(¬(PUlysses1)∨¬(PUlysses3))∧(¬(PUlysses1)∨¬(PUlysses4))∧(¬(PUlysses2)∨¬(PUlysses3))∧(¬(PUlysses2)∨¬(PUlysses4))∧(¬(PUlysses3)∨¬(PUlysses4))∧(¬(PWyatt1)∨¬(PWyatt2))∧(¬(PWyatt1)∨¬(PWyatt3))∧(¬(PWyatt1)∨¬(PWyatt4))∧(¬(PWyatt2)∨¬(PWyatt3))∧(¬(PWyatt2)∨¬(PWyatt4))∧(¬(PWyatt3)∨¬(PWyatt4))∧(¬(PIan1)∨¬(PPatrick1))∧(¬(PIan2)∨¬(PPatrick2))∧(¬(PIan3)∨¬(PPatrick3))∧(¬(PIan4)∨¬(PPatrick4))∧(¬(PIan1)∨¬(PUlysses1))∧(¬(PIan2)∨¬(PUlysses2))∧(¬(PIan3)∨¬(PUlysses3))∧(¬(PIan4)∨¬(PUlysses4))∧(¬(PIan1)∨¬(PWyatt1))∧(¬(PIan2)∨¬(PWyatt2))∧(¬(PIan3)∨¬(PWyatt3))∧(¬(PIan4)∨¬(PWyatt4))∧(¬(PPatrick1)∨¬(PIan1))∧(¬(PPatrick2)∨¬(PIan2))∧(¬(PPatrick3)∨¬(PIan3))∧(¬(PPatrick4)∨¬(PIan4))∧(¬(PPatrick1)∨¬(PUlysses1))∧(¬(PPatrick2)∨¬(PUlysses2))∧(¬(PPatrick3)∨¬(PUlysses3))∧(¬(PPatrick4)∨¬(PUlysses4))∧(¬(PPatrick1)∨¬(PWyatt1))∧(¬(PPatrick2)∨¬(PWyatt2))∧(¬(PPatrick3)∨¬(PWyatt3))∧(¬(PPatrick4)∨¬(PWyatt4))∧(¬(PUlysses1)∨¬(PIan1))∧(¬(PUlysses2)∨¬(PIan2))∧(¬(PUlysses3)∨¬(PIan3))∧(¬(PUlysses4)∨¬(PIan4))∧(¬(PUlysses1)∨¬(PPatrick1))∧(¬(PUlysses2)∨¬(PPatrick2))∧(¬(PUlysses3)∨¬(PPatrick3))∧(¬(PUlysses4)∨¬(PPatrick4))∧(¬(PUlysses1)∨¬(PWyatt1))∧(¬(PUlysses2)∨¬(PWyatt2))∧(¬(PUlysses3)∨¬(PWyatt3))∧(¬(PUlysses4)∨¬(PWyatt4))∧(¬(PWyatt1)∨¬(PIan1))∧(¬(PWyatt2)∨¬(PIan2))∧(¬(PWyatt3)∨¬(PIan3))∧(¬(PWyatt4)∨¬(PIan4))∧(¬(PWyatt1)∨¬(PPatrick1))∧(¬(PWyatt2)∨¬(PPatrick2))∧(¬(PWyatt3)∨¬(PPatrick3))∧(¬(PWyatt4)∨¬(PPatrick4))∧(¬(PWyatt1)∨¬(PUlysses1))∧(¬(PWyatt2)∨¬(PUlysses2))∧(¬(PWyatt3)∨¬(PUlysses3))∧(¬(PWyatt4)∨¬(PUlysses4))))

  • Indication 3 : comme au-dessus, mais avec les noms.

(((NQuinn1∨NQuinn2∨NQuinn3∨NQuinn4)∧(NYoung1∨NYoung2∨NYoung3∨NYoung4)∧(NJackson1∨NJackson2∨NJackson3∨NJackson4)∧(NKing1∨NKing2∨NKing3∨NKing4))∧((¬(NQuinn1)∨¬(NQuinn2))∧(¬(NQuinn1)∨¬(NQuinn3))∧(¬(NQuinn1)∨¬(NQuinn4))∧(¬(NQuinn2)∨¬(NQuinn3))∧(¬(NQuinn2)∨¬(NQuinn4))∧(¬(NQuinn3)∨¬(NQuinn4))∧(¬(NYoung1)∨¬(NYoung2))∧(¬(NYoung1)∨¬(NYoung3))∧(¬(NYoung1)∨¬(NYoung4))∧(¬(NYoung2)∨¬(NYoung3))∧(¬(NYoung2)∨¬(NYoung4))∧(¬(NYoung3)∨¬(NYoung4))∧(¬(NJackson1)∨¬(NJackson2))∧(¬(NJackson1)∨¬(NJackson3))∧(¬(NJackson1)∨¬(NJackson4))∧(¬(NJackson2)∨¬(NJackson3))∧(¬(NJackson2)∨¬(NJackson4))∧(¬(NJackson3)∨¬(NJackson4))∧(¬(NKing1)∨¬(NKing2))∧(¬(NKing1)∨¬(NKing3))∧(¬(NKing1)∨¬(NKing4))∧(¬(NKing2)∨¬(NKing3))∧(¬(NKing2)∨¬(NKing4))∧(¬(NKing3)∨¬(NKing4))∧(¬(NQuinn1)∨¬(NYoung1))∧(¬(NQuinn2)∨¬(NYoung2))∧(¬(NQuinn3)∨¬(NYoung3))∧(¬(NQuinn4)∨¬(NYoung4))∧(¬(NQuinn1)∨¬(NJackson1))∧(¬(NQuinn2)∨¬(NJackson2))∧(¬(NQuinn3)∨¬(NJackson3))∧(¬(NQuinn4)∨¬(NJackson4))∧(¬(NQuinn1)∨¬(NKing1))∧(¬(NQuinn2)∨¬(NKing2))∧(¬(NQuinn3)∨¬(NKing3))∧(¬(NQuinn4)∨¬(NKing4))∧(¬(NYoung1)∨¬(NQuinn1))∧(¬(NYoung2)∨¬(NQuinn2))∧(¬(NYoung3)∨¬(NQuinn3))∧(¬(NYoung4)∨¬(NQuinn4))∧(¬(NYoung1)∨¬(NJackson1))∧(¬(NYoung2)∨¬(NJackson2))∧(¬(NYoung3)∨¬(NJackson3))∧(¬(NYoung4)∨¬(NJackson4))∧(¬(NYoung1)∨¬(NKing1))∧(¬(NYoung2)∨¬(NKing2))∧(¬(NYoung3)∨¬(NKing3))∧(¬(NYoung4)∨¬(NKing4))∧(¬(NJackson1)∨¬(NQuinn1))∧(¬(NJackson2)∨¬(NQuinn2))∧(¬(NJackson3)∨¬(NQuinn3))∧(¬(NJackson4)∨¬(NQuinn4))∧(¬(NJackson1)∨¬(NYoung1))∧(¬(NJackson2)∨¬(NYoung2))∧(¬(NJackson3)∨¬(NYoung3))∧(¬(NJackson4)∨¬(NYoung4))∧(¬(NJackson1)∨¬(NKing1))∧(¬(NJackson2)∨¬(NKing2))∧(¬(NJackson3)∨¬(NKing3))∧(¬(NJackson4)∨¬(NKing4))∧(¬(NKing1)∨¬(NQuinn1))∧(¬(NKing2)∨¬(NQuinn2))∧(¬(NKing3)∨¬(NQuinn3))∧(¬(NKing4)∨¬(NQuinn4))∧(¬(NKing1)∨¬(NYoung1))∧(¬(NKing2)∨¬(NYoung2))∧(¬(NKing3)∨¬(NYoung3))∧(¬(NKing4)∨¬(NYoung4))∧(¬(NKing1)∨¬(NJackson1))∧(¬(NKing2)∨¬(NJackson2))∧(¬(NKing3)∨¬(NJackson3))∧(¬(NKing4)∨¬(NJackson4))))

  • Indication 4 : comme au-dessus mais avec les cadeaux.

(((GSkateboard1∨GSkateboard2∨GSkateboard3∨GSkateboard4)∧(GPuzzle1∨GPuzzle2∨GPuzzle3∨GPuzzle4)∧(GRobot1∨GRobot2∨GRobot3∨GRobot4)∧(GKit1∨GKit2∨GKit3∨GKit4))∧((¬(GSkateboard1)∨¬(GSkateboard2))∧(¬(GSkateboard1)∨¬(GSkateboard3))∧(¬(GSkateboard1)∨¬(GSkateboard4))∧(¬(GSkateboard2)∨¬(GSkateboard3))∧(¬(GSkateboard2)∨¬(GSkateboard4))∧(¬(GSkateboard3)∨¬(GSkateboard4))∧(¬(GPuzzle1)∨¬(GPuzzle2))∧(¬(GPuzzle1)∨¬(GPuzzle3))∧(¬(GPuzzle1)∨¬(GPuzzle4))∧(¬(GPuzzle2)∨¬(GPuzzle3))∧(¬(GPuzzle2)∨¬(GPuzzle4))∧(¬(GPuzzle3)∨¬(GPuzzle4))∧(¬(GRobot1)∨¬(GRobot2))∧(¬(GRobot1)∨¬(GRobot3))∧(¬(GRobot1)∨¬(GRobot4))∧(¬(GRobot2)∨¬(GRobot3))∧(¬(GRobot2)∨¬(GRobot4))∧(¬(GRobot3)∨¬(GRobot4))∧(¬(GKit1)∨¬(GKit2))∧(¬(GKit1)∨¬(GKit3))∧(¬(GKit1)∨¬(GKit4))∧(¬(GKit2)∨¬(GKit3))∧(¬(GKit2)∨¬(GKit4))∧(¬(GKit3)∨¬(GKit4))∧(¬(GSkateboard1)∨¬(GPuzzle1))∧(¬(GSkateboard2)∨¬(GPuzzle2))∧(¬(GSkateboard3)∨¬(GPuzzle3))∧(¬(GSkateboard4)∨¬(GPuzzle4))∧(¬(GSkateboard1)∨¬(GRobot1))∧(¬(GSkateboard2)∨¬(GRobot2))∧(¬(GSkateboard3)∨¬(GRobot3))∧(¬(GSkateboard4)∨¬(GRobot4))∧(¬(GSkateboard1)∨¬(GKit1))∧(¬(GSkateboard2)∨¬(GKit2))∧(¬(GSkateboard3)∨¬(GKit3))∧(¬(GSkateboard4)∨¬(GKit4))∧(¬(GPuzzle1)∨¬(GSkateboard1))∧(¬(GPuzzle2)∨¬(GSkateboard2))∧(¬(GPuzzle3)∨¬(GSkateboard3))∧(¬(GPuzzle4)∨¬(GSkateboard4))∧(¬(GPuzzle1)∨¬(GRobot1))∧(¬(GPuzzle2)∨¬(GRobot2))∧(¬(GPuzzle3)∨¬(GRobot3))∧(¬(GPuzzle4)∨¬(GRobot4))∧(¬(GPuzzle1)∨¬(GKit1))∧(¬(GPuzzle2)∨¬(GKit2))∧(¬(GPuzzle3)∨¬(GKit3))∧(¬(GPuzzle4)∨¬(GKit4))∧(¬(GRobot1)∨¬(GSkateboard1))∧(¬(GRobot2)∨¬(GSkateboard2))∧(¬(GRobot3)∨¬(GSkateboard3))∧(¬(GRobot4)∨¬(GSkateboard4))∧(¬(GRobot1)∨¬(GPuzzle1))∧(¬(GRobot2)∨¬(GPuzzle2))∧(¬(GRobot3)∨¬(GPuzzle3))∧(¬(GRobot4)∨¬(GPuzzle4))∧(¬(GRobot1)∨¬(GKit1))∧(¬(GRobot2)∨¬(GKit2))∧(¬(GRobot3)∨¬(GKit3))∧(¬(GRobot4)∨¬(GKit4))∧(¬(GKit1)∨¬(GSkateboard1))∧(¬(GKit2)∨¬(GSkateboard2))∧(¬(GKit3)∨¬(GSkateboard3))∧(¬(GKit4)∨¬(GSkateboard4))∧(¬(GKit1)∨¬(GPuzzle1))∧(¬(GKit2)∨¬(GPuzzle2))∧(¬(GKit3)∨¬(GPuzzle3))∧(¬(GKit4)∨¬(GPuzzle4))∧(¬(GKit1)∨¬(GRobot1))∧(¬(GKit2)∨¬(GRobot2))∧(¬(GKit3)∨¬(GRobot3))∧(¬(GKit4)∨¬(GRobot4))))

  • Indication 5

GSkateboard2

  • Indication 6

NYoung1

  • Indication 7

(GPuzzle1∨GPuzzle4)

  • Indication 8

((CBlanc1∧GPuzzle2)∨(CBlanc2∧GPuzzle3)∨(CBlanc3∧GPuzzle4)∨(CBlanc4∧GPuzzle3)∨(CBlanc3∧GPuzzle2)∨(CBlanc2∧GPuzzle1))

  • Indication 9

((PUlysses1∧PWyatt2)∨(PUlysses2∧PWyatt3)∨(PUlysses3∧PWyatt4))

  • Indication 10

(NKing1∨NKing4)

  • Indication 11

((NYoung1⇒GKit1)∧(NYoung2⇒GKit2)∧(NYoung3⇒GKit3)∧(NYoung4⇒GKit4))

  • Indication 12

((CBlanc4∧CBleu3)∨(CBlanc3∧CBleu2)∨(CBlanc2∧CBleu1))

  • Indication 13

PPatrick3

  • Indication 14

((GRobot1∧CRose2)∨(GRobot2∧CRose3)∨(GRobot3∧CRose4)∨(GRobot4∧CRose3)∨(GRobot3∧CRose2)∨(GRobot2∧CRose1))

  • Indication 15

((NQuinn1⇒GSkateboard1)∧(NQuinn2⇒GSkateboard2)∧(NQuinn3⇒GSkateboard3)∧(NQuinn4⇒GSkateboard4))