TP 1 : IA et Logique

Introduction aux concepts de l’Intelligence Artificielle

08 Février 2024

  1. Découvrir la logique propositionnelle
    • Savoir ce qu’est une proposition atomique.
    • Connaître les tables de vérité des connecteurs ET, OU, SI ALORS et NON.
    • Savoir construire la table de vérité d’une proposition.
  2. Traduire en logique propositionnelle
    • Savoir reformuler en français le sens d’une proposition
    • Savoir formaliser en logique propositionnelle des phrases simples.

D’une énigme logique…

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.

… à la logique propositionnelle

Formaliser la logique

La logique propositionnelle est un système formel permettant de modéliser des relations logiques entre des propositions et de formaliser ainsi de nombreux raisonnements. On écrit des formules propositionnelles en combinant des propositions atomiques, à qui on donne des noms (x,y ou plus explicitement voitureEstVerte) avec différents connecteurs. Chaque proposition atomique peut être soit vraie soit fausse. Une fois leurs valeurs fixées, on peut en déduire si une proposition donnée est vraie ou fausse. Par exemple, x OU y est vraie dès lors que soit x soit y est vrai. On peut représenter comme s’interprète chaque connecteur via une table de vérité. Voici celles des connecteurs les plus courants :

x y x OU y
faux faux faux
faux vrai vrai
vrai faux vrai
vrai vrai vrai
x y x ET y
faux faux faux
faux vrai faux
vrai faux faux
vrai vrai vrai
x y SI x ALORS y
faux faux vrai
faux vrai vrai
vrai faux faux
vrai vrai vrai
x NON x
faux vrai
vrai faux

On peut ensuite combiner ces différents connecteurs pour former des formules plus complexes :

x y z SI (x OU y) ALORS z
faux faux faux vrai
faux faux vrai vrai
faux vrai faux faux
faux vrai vrai vrai
vrai faux faux faux
vrai faux vrai vrai
vrai vrai faux faux
vrai vrai vrai vrai

Étant donnée une formule propositionnelle F, on peut se demander différentes choses : est-ce que F est vraie quelque soit les valeurs données à ses propositions atomiques ? Est-ce qu’il existe une assignation des propositions atomiques à vrai/faux où F devient vrai ? C’est ce deuxième cas qui nous intéressera ici. On peut ainsi voir F comme une équation dont les inconnues sont les propositions atomiques et on cherche une solution à cette équation.

Les “équations” (ie formules propositionnelles) suivantes ont-elles des solutions ?

  1. (x OU y) ET (SI NON(x) ALORS NON(y))
  2. (SI x ALORS NON(x))
  3. (SI x ALORS y) ET (SI y ALORS x) ET (SI x ALORS NON(y)) ET (SI NON(y) ALORS x)
Correction
  1. On met x à FAUX et y à VRAI.
  2. Oui, on met x à FAUX.
  3. Il n’y a pas de solutions. On peut voir cette formule comme quatre contraintes que l’on doit respecter. Si on met y à VRAI, alors la deuxième contrainte force x à VRAI. Dans ce cas, la troisième contrainte n’est pas respectée. Si on met y à FAUX, alors x doit être VRAI pour satisfaire la dernière contrainte, or cela ne respecte pas la première.

Si une formule propositionnelle utilise N propositions atomiques distinctes, combien y a-t-il d’assignations différentes à vrai/faux de ces propositions atomiques ? En déduire une méthode naïve (brute force) pour trouver toutes les solutions d’une formule propositionnelle.

Correction

Il y en a 2N (deux choix pour chaque variable). On peut donc toutes les essayer, évaluer la formule et renvoyer une solution si on en trouve une.

Traduire vers la logique propositionnelle

On veut modéliser l’énigme précédente en logique propositionnelle. Pour cela, on va introduire des propositions atomiques de la forme suivante :

On suppose qu’on a toutes les propositions atomiques précédentes pour toutes les valeurs possibles. Par exemple, on a aussi P_Ian_2, P_Ian_3, P_Ian_4, P_Patrick_1, P_Patrick_2…

Traduisez en français les propositions suivantes.

  1. G_Puzzle_3
  2. N_King_2 OU N_King_3
  3. G_Skateboard_1 OU G_Kit_1 OU G_Robot_1 OU G_Puzzle_1
  4. SI P_Ian1 ALORS NON(P_Patrick_1)
  5. SI P_Ian1 ALORS (NON(P_Patrick_1) ET NON(P_Ulysses_1) ET NON(P_Wyatt_1))
Correction
  1. Un puzzle a été offert dans la maison 3.
  2. La famille King vit soit dans la maison 2, soit dans la maison 3.
  3. Au moins un cadeau a été offert dans la première maison.
  4. Si Ian vit dans la maison 1 alors Patrick ne vit pas dans la maison 1.
  5. Si Ian vit dans la maison 1 alors ni Patrick, ni Ulysses, ni Wyatt ne vivent dans la maison 1.

On se pose la question suivante : existe-t-il une façon d’assigner à vrai / faux les propositions atomique afin de respecter toutes les indications qui nous sont données dans l’énoncé ?

Pour cela, on va traduire chacune des indications de l’énoncé comme une formule exprimant des contraintes sur les propositions atomiques. L’ensemble de ces propositions formera donc une “équation” dont les inconnues sont les propositions atomiques. Résoudre cette équation donnera une solution au problème !

Par exemple, la proposition suivante exprime le fait que la maison 3 a une couleur : C_Bleue_3 OU C_Rose_3 OU C_Blanche_3 OU C_Verte_3. En effet, cette proposition exprime le fait que la maison 3 est soit blanche, soit rose, soit verte, soit bleue.

Exprimez de même :

  1. La maison 1 a au moins une couleur.
  2. Au moins un enfant vit dans la maison 1.
  3. L’enfant de la maison 1 a au moins un nom de famille.
  4. L’enfant de la maison 1 a reçu au moins un cadeau.

On remarquera qu’on sait facilement adapter ces formules pour toutes les maisons en remplaçant 1 par le numéro approprié.

Correction
  1. C_Bleu_1 OU C_Rose_1 OU C_Blanc_1 OU C_Vert_1.
  2. P_Ian_1 OU P_Wyatt_1 OU P_Patrick_1 OU P_Ulysses_1.
  3. N_King_1 OU N_Young_1 OU N_Quinn_1 OU N_Jackson_1.
  4. G_Puzzle_1 OU G_Skateboard_1 OU G_Robot_1 OU G_Kit_1.

Comment exprimer le fait que si la maison 1 est blanche alors elle n’est pas bleue ? Utilisez cela pour exprimer le fait que la maison 1 a au plus une couleur.

Correction

SI C_Blanc_1 ALORS NON(C_Bleu_1). On peut alors généraliser : SI C_Blanc_1 ALORS (NON(C_Bleu_1) ET NON(C_Rose_1) ET NON(C_Vert_1)) pour dire que si la maison 1 est blanche alors elle n’est d’aucune autre couleur. On aura donc :

SI C_Blanc_1 ALORS (NON(C_Bleu_1) ET NON(C_Rose_1) ET NON(C_Vert_1)) ET
SI C_Bleu_1 ALORS (NON(C_Blanc_1) ET NON(C_Rose_1) ET NON(C_Vert_1)) ET
SI C_Rose_1 ALORS (NON(C_Bleu_1) ET NON(C_Blanc_1) ET NON(C_Vert_1)) ET
SI C_Vert_1 ALORS (NON(C_Bleu_1) ET NON(C_Rose_1) ET NON(C_Blanc_1))

On va essayer d’exprimer ce que l’on sait du problème avec des propositions construites à partir des propositions atomiques. On cherchera ainsi à attribuer des valeurs de vérité à chaque proposition atomique afin que les informations qui nous ont été données soient toutes satisfaites. On peut voir ces informations comme une base de connaissances. Notre problème devient donc un problème d’inférence : on essaie d’inférer de nouvelles connaissances depuis celles qui nous sont données.

Comment traduire à partir des propositions atomiques l’information suivante :

Correction
  • Les maisons aux extrémités étant les maisons 1 et 4, on a : G_Puzzle_1 OR G_Puzzle_4
  • Plus compliqué, il faut distinguer les différents cas en fonction d’où se trouve la maison blanche :

(SI C_Blanc_1 ALORS G_Puzzle_2) ET
(SI C_Blanc_2 ALORS (G_Puzzle_1 OU G_Puzzle_3)) ET
(SI C_Blanc_3 ALORS (G_Puzzle_2 OU G_Puzzle_4)) ET
(SI C_Blanc_4 ALORS G_Puzzle_3)

Le script solve.py contient un début de formalisation du problème en logique propositionnelle. Une liste indications est déjà remplie en parti. La ième valeur de cette liste contient une formalisation de la ième indication du problème.

On dispose des fonctions suivantes :

Les 4 premières indications sont un peu particulières et permettent d’assurer qu’il y a exactement une variable qui sera mise à vraie pour les couleurs, prénoms, noms et cadeaux comme on l’a fait dans les questions 7 et 8. L’écriture des toutes ces contraintes étant un peu fastidieuse, elles ont été générées automatiquement et vous sont données (vous pouvez voir le code dans logic.py).

Remplissez les cases manquantes de la liste indications en vous inspirant de la syntaxe des autres.

Correction

On trouvera une solution ici.

Combien de propositions atomiques distinctes sont utilisées dans votre traduction ? La méthode consistant à essayer toutes les assignations possibles vous semble-t-elle praticable ?

Correction

Pour chaque prénom, on a 4 propositions atomiques (une pour chaque maison). Donc 16 propositions atomiques pour les prénoms. De même pour les couleurs, les noms et les cadeaux. Donc 4 × 16 = 64 propositions atomiques.

Si on essaie toutes les possibilités, on devra essayer 264 possibilités. Même en supposant qu’on peut traiter 3 milliards de possibilités par seconde (ce qui est déjà optimiste sur un ordinateur portable moderne), il faudrait 194 années pour résoudre le problème!

Une hypothèse centrale en informatique est qu’on ne pourra pas, en théorie, trouver d’algorithme vraiment plus efficace que la méthode de la force brute. Cette hypothèse n’a jamais été prouvée formellement mais elle est étayée par de nombreuses observations. Cette hypothèse est connue sous le nom de P NP. Il existe cependant des outils spécialisés pour trouver des solutions à des formules propositionnelles qui sont bien plus performant que la méthode de force brute en pratique. Ces outils sont connus sous le nom de SAT Solvers. Pour des raisons techniques, ces outils ne peuvent accepter en entrée qu’une forme très spéciale de formule propositionnelle. Le script solve.py utilise un tel outil pour résoudre notre problème de logique :

Téléchargez logic.py et placez le dans le même dossier que votre version complétée de solve.py. Exécutez ce script. Combien de solutions trouvez-vous ? Sont-elles compatibles avec les indications du problème ? Si non, revoyez vos encodages !

Attention, pour exécuter le script, il faut avoir installé la librairie python-sat, disponible depuis pip. Vous pouvez l’installer directemnent depuis Thonny (Tools - Manage packages ou Outils - Gérer les paquets).

Correction

Voici une version corrigée. Sauf erreur de votre part, le script devrait afficher la solution trouvée au début :

Solution n°1 trouvée!
Assignation des variables:
['-C_Rose_1', '-C_Rose_2', '-C_Rose_3', 'C_Rose_4', '-C_Blanc_1', '-C_Blanc_2', 'C_Blanc_3', '-C_Blanc_4', '-C_Bleu_1', 'C_Bleu_2', '-C_Bleu_3', '-C_Bleu_4', 'C_Vert_1', '-C_Vert_2', '-C_Vert_3', '-C_Vert_4', '-P_Ian_1', '-P_Ian_2', '-P_Ian_3', 'P_Ian_4', '-P_Patrick_1', '-P_Patrick_2', 'P_Patrick_3', '-P_Patrick_4', 'P_Ulysses_1', '-P_Ulysses_2', '-P_Ulysses_3', '-P_Ulysses_4', '-P_Wyatt_1', 'P_Wyatt_2', '-P_Wyatt_3', '-P_Wyatt_4', '-N_Quinn_1', 'N_Quinn_2', '-N_Quinn_3', '-N_Quinn_4', 'N_Young_1', '-N_Young_2', '-N_Young_3', '-N_Young_4', '-N_Jackson_1', '-N_Jackson_2', 'N_Jackson_3', '-N_Jackson_4', '-N_King_1', '-N_King_2', '-N_King_3', 'N_King_4', '-G_Skateboard_1', 'G_Skateboard_2', '-G_Skateboard_3', '-G_Skateboard_4', '-G_Puzzle_1', '-G_Puzzle_2', '-G_Puzzle_3', 'G_Puzzle_4', '-G_Robot_1', '-G_Robot_2', 'G_Robot_3', '-G_Robot_4', 'G_Kit_1', '-G_Kit_2', '-G_Kit_3', '-G_Kit_4']
******************************************************************************************
Interprétation : 

-------------------------------------------------------
Maison1     Maison2     Maison3     Maison4
-------------------------------------------------------
Vert        Bleu        Blanc       Rose
Ulysses     Wyatt       Patrick     Ian
Young       Quinn       Jackson     King
Kit         Skate       Robot       Puzzle
==========================================================================================

C’est la seule solution trouvée par le SAT solver et elle correspond à celle que nous avions vue au début. Dans la première partie du script, on voit une liste qui donne la valeur de chaque variable propositionnelle. Par exemple -C_Rose_1 indique que la variable C_Rose_1 a été mise à faux (c’est indiqué par le - devant), de même pour -C_Rose_2 et -C_Rose_3. Cependant, C_Rose_4 est à vrai, donc la maison 4 est rose.

Aller plus loin : les limites de la logique propositionnelle

Nous avons vu dans ce TP qu’on pouvait utiliser la logique propositionnelle pour modéliser des connaissances que l’on a sur un problème. Cela permet ensuite d’inférer de nouvelles connaissances en raisonnant sur cette base de connaissances. Cette approche a cependant de nombreuses limites que nous tentons ici de lister.

Complexité inhérente de la résolution

Malgré l’existence d’outils efficaces en pratique sur de nombreux problèmes, inférer de nouvelles connaissances depuis une base de connaissances est un processus très coûteux. Du point de vue de la théorie de la complexité, qui s’intéresse à classifier formellement les problèmes informatiques selon leur difficulté de résolution sur un ordinateur, ce problème se situe dans des niveaux de difficulté pour lesquels on soupçonne qu’il n’existe pas d’algorithmes efficaces. Ainsi, pour certains problèmes, même si leur formalisation en logique propositionnelle n’est pas trop difficile, on n’arrivera pas pour autant à les résoudre automatiquement dans un temps raisonnable.

Complexité et correction de la modélisation

Cela est partiellement illustré dans ce TP : modéliser un problème concret en logique propositionnelle est fastidieux. Par exemple, pour exprimer que deux maisons sont voisines, on doit envisager tous les cas possibles en utilisant un OU. De plus, il est assez facile de commettre des erreurs dans l’encodage qui seront très difficiles à détecter. Cela peut être partiellement résolu en introduisant des logiques un peu plus riches ou en proposant un langage logique de plus haut niveau à l’utilisateur.

Par exemple, on pourrait envisager d’ajouter un peu d’arithmétique dans la modélisation logique, permettant par exemple d’exprimer que le numéro de la maison de Wyatt est égale au numéro de la maison d’Ulysses plus un. On pourrait aussi ajouter des quantifications pour exprimer qu’on veut qu’une condition soit vraie “pour toutes les maisons”. Une autre solution serait de proposer des connecteurs plus complexes à l’utilisateur, par exemple, EXACTEMENTUN(f1,f2…,fn) qui sera vrai seulement si exactement une formule propositionnelle parmi f1,…,fn est vraie. Le problème principal de ces approches est que plus la logique ou son langage est riche, plus il est complexe d’y inférer des nouvelles connaissances.

Ces approches sont bien entendu étudiées et comprises mais force est de constater qu’en pratique, on se ramène souvent (parfois de manière automatique) à la logique propositionnelle pour résoudre les problèmes d’inférence en pratique.

Limite de la modélisation

Une dernière limitation de la logique propositionnelle est son inhabilité à exprimer des connaissances et des raisonnements qu’on utilise cependant souvent en pratique. Par exemple, en pratique, on raisonne parfois avec des faits dont on n’est pas vraiment certain de leur véracité, ou nous avons certaines croyances que nous mettons parfois à jour en fonction de différentes observations. Cette dynamique est difficile à représenter en logique propositionnelle. D’autres logiques permettent de modéliser ce genre de chose, par exemple, la logique modale qui permet de raisonner dans l’incertain, la logique floue qui permet de raisonner avec des degrés de vérité etc.

Afin de vous familiariser avec ces problèmes, voici une énigme classique qui montre bien qu’on a parfois besoin de modéliser des évolutions dynamiques des connaissances.

Trente personnes sont dans une pièce. Elles ont chacune un chapeau de couleur rouge ou noir sur la tête. Chaque personne peut voir la couleur du chapeau des autres mais ignorent la couleur de leur propre chapeau. Elles n’ont pas le droit de communiquer entre elles.

Une sonnerie retentit toutes les minutes. À ce moment-là, les personnes qui sont certaines d’avoir un chapeau rouge sur la tête sont autorisées à sortir. On supposera qu’une personne qui n’est pas certaine de la couleur de son chapeau n’essaiera pas de sortir (des variantes de cette énigme l’imposent en ajoutant qu’une personne avec un chapeau noir tentant de sortir est exécutée, mais restons ici bon enfant et faisons confiance aux participants).

  1. Sans communication entre les personnes, est-il possible pour quiconque d’acquérir la certitude que leur chapeau est rouge ou noir après un certains nombres de sonneries ?
  2. À un moment, quelqu’un rentre dans la pièce et annonce : “Il y a au moins une personne avec un chapeau rouge dans cette pièce”.
    1. Dans combien de sonnerie toutes les personnes ayant un chapeau rouge seront-elles sorties de la pièce si on suppose qu’il n’y a qu’un seul chapeau rouge dans la pièce ? (les personnes ne savent bien entendu pas qu’il n’y a qu’un seul chapeau)
    2. Même question s’il y a deux chapeaux rouges dans la pièce.
    3. Même question s’il y a N chapeaux rouges dans la pièce.
  3. Quel problème rencontre-t-on lorsqu’on essaie de modéliser ce problème en logique propositionnelle ?