Le jeu de logique de Lewis Carroll

samedi 11 avril 2015
par  Alain BUSSER

La version en ligne.

Le rêve de Leibniz ou calculus ratiocinator était de pouvoir

  1. traduire n’importe quel problème de logique dans un langage parfait (la caractéristique universelle)
  2. manipuler des symboles dans ce langage (soit, mener un calcul) pour résoudre le problème de logique.

Or la seconde étape, et même dans une certaine mesure, la première, est mécanique donc a priori abordable par une machine. D’où les questions :

  • Une machine peut-elle résoudre des syllogismes ?
  • Quels sont les algorithmes de résolution de syllogismes ?
  • L’intelligence se réduit-elle à la résolution de syllogismes ?
  • Quelles sont les erreurs de logique les plus fréquentes chez les élèves et comment les expliquer ?
  • Y a-t-il des moyens de remédiation ?

démontrables vraies

Le diagramme d’Euler ci-dessus représente les propositions vraies de l’arithmétique de Peano. Euler l’interprétait comme « Tout ce qui est démontrable est vrai » (c’est le sens du mot « démonstration » !) mais aussi comme « quelque chose est vrai sans être démontrable ». C’est précisément le sens du théorème d’incomplétude de Gödel.

Analyse d’un QCM

Voici un QCM qui a plusieurs fois été donné pour évaluer le niveau logique des français ou des européens (il est extrait de cet article) :

Pour chacun des 4 arguments, considérez les informations qui vous sont fournies comme absolument vraies, et décidez laquelle des conclusions proposées est logiquement correcte.

Si Léo se gare mal, il a une amende . Léo s’est mal garé.
A. Léo a eu une amende
B. Léo n’a pas eu d’amende
C. On ne peut pas savoir


Si Léa se gare mal, elle a une amende. Léa n’a pas eu d’amende
A. Léa s’est mal garée
B. Léa ne s’est pas mal garée
C On ne peut pas savoir

Dans un casino, tous les buveurs sont fumeurs. Tous les fumeurs sont joueurs.
A. Aucun buveur n’est joueur
B. Certains buveurs ne sont pas joueurs
C. Tous les buveurs sont joueurs
D. Certains buveurs sont joueurs

Dans un casino, tous les fumeurs sont buveurs. Aucun joueur n’est fumeur.
A. Aucun buveur n’est joueur
B. Certains buveurs ne sont pas joueurs
C. Tous les buveurs sont joueurs
D. Certains buveurs sont joueurs

Le taux de bonnes réponses à la première question est largement supérieur à celui de la deuxième question. Le taux de (bonnes) réponses à la dernière question est très faible. Pourquoi [1] ?

Dans le cas des syllogismes, le rêve de Leibniz est la recherche d’un algorithme de résolution de syllogismes. Or la simple liste de syllogismes avec, pour chaque type, sa solution, est un algorithme. Le rêve de Leibniz n’est-il alors pas réalisé par les mnémoniques ?

L’Encyclopédie ou Dictionnaire Raisonné des Arts et des Sciences est assez critique sur cet algorithme et la façon dont il est enseigné [2] :

Nous voyons tous les jours des paysans avoir dans les choses essentielles de la vie, sur lesquelles ils ont réfléchi, plus de bon sens & de justesse que des docteurs de Sorbonne. L'homme seroit bien malheureux, si sans le secours des regles d'Aristote, il ne pouvoit faire usage de sa raison, & que ce présent du ciel lui devînt un don inutile.

Les diagrammes d’Euler

En 1761, Leonhard Euler, dans le cadre d’un cours par correspondance, écrit les lettres suivantes sur les syllogismes :

On y trouve une nouveauté importante : Euler résout les syllogismes en dessinant ! Voici un de ses diagrammes, manipulable en ligne :

Par convention, le cercle de centre A représente la classe A, c’est-à-dire tous les individus ayant la propriété A. De même, le cercle de centre B représente la classe B (le moyen terme du syllogisme) et le cercle de centre C représente la classe C. Pour exprimer que tout A est B, on place simplement le cercle de centre A intérieurement à l’intérieur du cercle de centre B ; et ainsi de suite pour les autres prémisses possibles.

Par exemple, voici comment on peut résoudre avec les diagrammes d’Euler un problème de type Barbara (syllogisme) :

  • Tout A est B ;
  • or tout B est C ;
  • donc tout A est C.

La première prémisse se traduit en plaçant le cercle bleu entièrement à l’intérieur du cercle vert ; la seconde prémisse se traduit en plaçant le cercle vert entièrement à l’intérieur du cercle bleu :

A B C

On constate alors que le cercle bleu se trouve entièrement à l’intérieur du cercle rouge, ce qui se traduit effectivement par la conclusion « tout A est C ».

Un autre exemple, un syllogisme de type Celarent :

  • Tout A est B ;
  • or aucun C n’est B ;
  • donc aucun C n’est A.

On traduit la première prémisse comme précédemment, placçant le cercle bleu entièrement dans le cercle vert. Mais cette fois-ci, le cercle rouge est au contraire entièrement extérieur au cercle vert :

A B C

On constate alors qu’il n’y a aucune partie commune aux cercles bleu et rouge : La conclusion est que « aucun A n’est C » ou que « aucun C n’est A ».

Un troisième exemple : Un syllogisme de type Darii :

  • Tout A est B ;
  • or quelque C est A ;
  • donc quelque C est B.

On modélise la première prémisse en plaçant le cercle bleu entièrement dans le cercle vert ; et la deuxième prémisse en amenant le cercle rouge à couper partiellement le cercle bleu :

A B C

On constate alors que les cercles rouge et vert se croisent aussi ce qui amène à la conclusion « quelque C est B » (ou « quelque B est C ») .

Résumé

L’apport essentiel d’Euler à la question est que ses diagrammes expliquent pourquoi les syllogismes se résolvent de telle ou telle façon. Mais son résumé est le même « algorithme » que celui cité par les encyclopédistes :

Cependant, il offre aussi une version encore plus résumée :

  • Tout ce qui est dans le contenu se trouve aussi dans le contenant.
  • Tout ce qui est hors du contenant est aussi hors du contenu.

On peut reconnaître respectivement une version graphique du modus ponens et une version graphique du modus tollens.

Boole

Le rêve de Leibniz a-t-il été réalisé par George Boole ? En effet, dans « the laws of thought », celui-ci a ramené le calcul propositionnel à de l’algèbre. L’implication booléenne se note A∩B=A (pour « tout A est B » ; cela correspond en fait à l’inclusion). Les travaux de Boole s’appuient beaucoup sur ceux de son contemporain Auguste De Morgan, qui fut le premier à utiliser le titre « logique formelle ». Il voulait dire par là que la résolution d’un syllogisme est une opération purement syntaxique (le rêve de Leibniz à nouveau !) alors que les sophismes sont en général de nature sémantique. Pour éviter la tentation d’interpréter un syllogisme de manière sémantique et d’oublier sa nature syntaxique, Lewis Carroll a systématiquement utilisé des exemples délirants, invitant les lecteurs dans son univers très particulier...


Le jeu de la logique de Lewis Carroll

Pour résoudre des syllogismes, Lewis Carroll propose de placer des jetons dans un plateau de jeu. Voici comment ça fonctionne, sur quelques exemples. La version logicielle est décomposée en plusieurs étapes :

exploration de la notion de négation
Alain Busser 2015
Proposition dans un carré
Alain Busser 2015
le carré déformé sera la moitié haute du plateau de jeu complet
Alain Busser 2015
résolution de syllogismes
Alain Busser 2015
utilitaire de résolution de certains syllogismes
Alain Busser 2015

Chaque fois qu’une case est vide, on y dépose un jeton gris qui représente la négation, et lorsqu’une case est non vide, on s’en réjouit tellement qu’on y place un jeton rouge. Cela est rappelé par le poème suivant :

See the Sun is overhead,
Shining on us, FULL and  RED! 

Now the Sun is gone away, 
And the EMPTY sky is  GREY!

Barbara

Le jeu en ligne est un générateur aléatoire de syllogismes ; leur type aussi est aléatoirement engendré. Si on veut changer de syllogisme, on clique sur la flèche arrondie [3] du navigateur. Voici un exemple de ce qu’on peut obtenir :

  • Tout juge est noir
  • tout noir est imbécile

Le terme médian est localisé dans le petit carré central. Pour coder le fait que tout jusge est noir, on met donc des jetons gris dans les cases représentant des juges non noirs, puisque « tout juge est noir » revient à dire qu’aucun juge n’est non-noir :

Cependant, contrairement à Aristote, Lewis Carroll pensait que tout proposition universelle présupposait une proposition existentielle : Que tous les juges de ce tribunal sont noirs, présuppose qu’il y a au moins un juge dans le tribunal ! Et forcément, celui-ci est noir. Donc on code aussi le fait qu’il y a un juge noir, avec un jeton rouge. Mais comme on ne sait pas (encore) quel est le niveau intellectuel de ce juge, on met le jeton entre deux cases :

La seconde prémisse est du même type donc codée de façon similaire :

Pour résoudre le syllogisme, on code les deux prémisses sur le même plateau de jeu :

Maintenant on apprend quelque chose sur le juge noir précédent : Puisqu’il n’y a aucun personnage dans ce tribunal qui soit à la fois juge, noir et intelligent, le juge de tout-à-l’heure est un imbécile : On déplace alors légèrement le jeton rouge du haut en conséquence :

On ne peut pas conclure grand-chose sur les grandes cases du bas. Mais la case en haut à droite étant entièrement couverte de gris, doit être considérée comme vide. Et la case en haut à gauche comportant au moins un jeton rouge, ne doit pas être considérée comme vide. On résume ces conclusions ainsi :

On en conclut alors que puisque le juge de tout-à-l’heure est un imbécile et qu’il n’y a pas de juges intelligents :

« Tous les juges sont des imbéciles »

Au moment où le détective a proclamé cela en plein tribunal, allez savoir pourquoi, les juges présents se sont fâchés et ont demandé l’incarcération immédiate du détective. D’ailleurs même menotté, il tournait la tête vers l’intérieur de la salle dont ses collègues étaient en train de l’expulser, et criait « mais si, c’est vrai que tous les juges sont des imbéciles, je peux vous le prouver, c’est Aristote qui me l’a dit ». On dit que depuis ce jour, Aristote est activement recherché par la police, et que la justice souhaiterait l’entendre pour « complicité d’outrage à magistrat ».

Darii

Maintenant le détective constate que

  • Quelque détective est gangster
  • tout gangster est imbécile

Le fait que quelque détective est gangster se code avec un seul jeton rouge, placé à la fois dans les cases « détective » et dans les cases « gangster » (au centre) :

Selon Lewis Carroll, le fait que tout gangster est imbécile présuppose qu’il y a un gangster imbécile, et bien entendu qu’aucun gangster n’est intelligent :

Le jeton gris du haut pousse alors un jeton rouge vers la gauche (le détective gangster de tout-à-l’heure, on ne savait pas s’il était imbécile ou non ; maintenant on sait, puisqu’aucun gangster n’est intelligent, pas plus ce détective que les autres gangsters) :

En réduisant le carré extérieur, on a donc ceci :

Il y a au moins un détective imbécile : Le détective gangster précédent. Ce n’est certainement pas Carroll Holmes, il est loin d’être un imbécile puisque c’est le Poirot héros de l’histoire.

Celarent

Le profileur, habitué à chercher des corrélations avec l’origine ethnique, constate que

  • Tout greffier est arabe
  • aucun coupable n’est arabe

Comme pour le premier exemple, la première proposition se code ainsi (les arabes au centre) :

Finalement, un Darii n’est jamais qu’un Barbara déguisé (via une négation). Ainsi, la suite consiste à coder le fait que tout coupable est non-arabe :

D’après le prinicipe de non-contradiction, il ne peut y avoir de jeton rouge et gris dans la même case. Les deux jetons rouges sont donc propulsés dans les cases non encore grisées :

Si une case comprend un jeton rouge, peu importe où, elle est considérée comme non vide [4]. On peut donc résumer le tableau (sans tenir compte de la zone centrale) à ceci :

Il y a donc deux conclusions :

  1. aucun greffier n’est coupable
  2. aucun coupable n’est greffier

Mais les deux sont équivalentes, puisqu’elles sont représentées par le même diagramme d’Euler.

Ferio

Une nouvelle constatation du détective :

  • Quelque majordome est muet
  • aucun méchant n’est muet

Encore une fois, pour coder le fait que quelque majordome est muet, il suffit de placer un jeton rouge à la fois dans la catégorie « majordome » et dans la catégorie « muet » :

Pour coder le fait que tout méchant est bavard, on précise (en rouge) qu’il y a effectivement un méchant bavard, et (en gris) que personne n’est à la fois méchant et muet :

L’un des jetons gris pousse alors un jeton rouge vers la droite, ce qui signifie que quelque majordome est méchant (d’ailleurs c’est toujours le majordome qui a fait le coup, tout amateur de romans policiers le sait) :

Résolution de syllogismes par ordinateur

Le langage de programmation Prolog sert à « programmer en logique », et a été conçu pour résoudre des syllogismes. Mais avec des quantificateurs ça ne marche pas bien. Par exemple pour le syllogisme ci-dessus

  • Tous les juges sont noirs ;
  • tous les noirs sont des imbéciles

Dans cet interpréteur en ligne, on écrit

noir(X) :- juge(X).
imbecile(X) :- noir(X).
?- imbecile(X) :- juge(X).

Remarques : En Prolog, un prédicat comme « imbécile » est reconnaissable à ce que son nom commence par une lettre minuscule. Au contraire, X est une variable et son nom commence en majuscule. Alors la première ligne si lit « tout X est noir dès lors que X est juge » (le double-point suivi d’un trait veut dire « si »). Ce que savait le détective expulsé du tribunal, Prolog ne le sait pas :

?-imbecile(X) :- juge(X).

Parse error on line 1:
?-imbecile(X) :- juge(X).
--------------^
Expecting 'PERIOD', 'COMMA', got ':-'

Des bruits courent selon lesquels Prolog aurait reçu des menaces de certains juges, qui lui auraient téléphoné en pleine nuit pour lui dire « il y a des choses qu’il vaut mieux ne pas savoir »... Mais le message d’erreur veut surtout dire que la seule chose qu’on peut demander à Prolog est une liste de propositions élémentaires et non une implication entre elles. Mais les stoïciens peuvent venir à la rescousse en définissant l’implication par une disjonction. On peut donc sans risquer l’erreur de syntaxe, demander si par hasard il y aurait des juges non imbéciles :

?-imbecile(X), not(juge(X)).

L’absence de réponse veut dire qu’il n’y en a pas. Prolog est donc finalement d’accord avec Aristote sur ce fait : Tous les juges sont effectivement des imbéciles dans ce tribunal. mais attendez ! Et si on essayait d’avoir la liste des imbéciles pour se faire une idée ?

?-imbecile(X).

Toujours aucune réponse ! En fait, le tribunal est vide, et on a vu ci-dessus que pour Aristote, dans un tribunal vide, tous les juges sont à la fois imbéciles et intelligents. Lewis Carrol présupposait qu’il devait au moins exister un juge noir et au moins un noir imbécile pour que les prémisses aient un sens. Si le quantificateur universel est codé en Prolog par ... rien, par quoi peut-on coder un quantificateur existentiel ?

Par un exemple ! Celui-ci n’étant pas une variable, son nom doit donc commencer par une minuscule. A priori, les deux exemples ne sont pas forcément une même personne alors on va supposer qu’ils s’appellent Dupont et Durand (mais on ne peut pas exclure qu’au cours de l’enquête on apprenne qu’il s’agisse de la même personne !

juge(dupont).
noir(durand).
noir(X) :- juge(X).
imbecile(X) :- noir(X).
?-imbecile(X).
?-imbecile(dupont).
Yes.
?-imbecile(durand).
Yes.

On en sait plus maintenant : On sait que Dupont et Durand sont des imbéciles (mais ne leur dites pas, ils pourraient en prendre ombrage, et comme l’un des deux au moins est juge, ce serait risqué).

Ceci dit, peut-on exprimer en Prolog une affirmative universelle ? Bien entendu, il suffit de définir soi-même une implication. Par exemple, avec trois propositions a, b et c dont on suppose que la première implique la seconde et que la seconde implique la troisième, on peut tenter

implique(a,b).
implique(b,c).
?-implique(a,c).
No.

Ce n’est donc pas suffisant : Si on veut redéfinir l’implication, on doit expliciter les propriétés qu’on en attend :

implique(X,Z) :- implique(X,Y), implique(Y,Z).
?-implique(a,c).
Yes.

Quitte à tout redéfinir, autant le faire en CoffeeScript plutôt qu’en Prolog. C’est ce qui a été fait ci-dessus. Voici le source de la fonction de résolution automatique de syllogismes, elle ne fait que regarder quelle réponse convient selon les questions :

  resoudreSyll = ->
    solution = "On ne peut pas conclure"
    if s1 is "Tout"
      if s2 is "est"
        if s3 is "Tout"
          if s4 is "est"
            $(".sxB").text " #{B} "
            $(".sxC").text " #{C} "
            solution = "Tout #{A} est #{C}"
          else
            solution = "Le deuxième verbe n'est pas bon"
        else
          if s3 is "Aucun" and s4 is "n'est"
            $(".sxB").text " #{C} "
            $(".sxC").text " #{B} "
            solution = "Aucun #{A}s n'est #{C}"
      else
        solution = "Le premier verbe n'est pas bon"
    if s1 is "Quelque"
      if s2 is "est"
        if s3 is "Tout"
          if s4 is "est"
            $(".sxB").text " #{B} "
            $(".sxC").text " #{C} "
            solution = "Quelque #{A} est #{C}"
          else
            solution = "Le deuxième verbe n'est pas bon"
        else
          if s3 is "Aucun" and s4 is "n'est"
            $(".sxB").text " #{C} "
            $(".sxC").text " #{B} "
            solution = "Quelque #{C} n'est pas #{A}"
      else
        solution = "Le premier verbe n'est pas bon"
    if s3 is "Tout"
      if s4 is "est"
        if s1 is "Aucun"
          if s2 is "n'est"
            $(".sxB").text " #{C} "
            $(".sxC").text " #{B} "
            solution = "Aucun #{A} n'est #{C}"
          else
            solution = "Le premier verbe n'est pas bon"
        else
          if s1 is "Quelque" and s2 is "n'est pas"
            $(".sxB").text " #{C} "
            $(".sxC").text " #{B} "
            solution = "Quelque #{A} n'est pas #{C}"
      else
        solution = "Le deuxième verbe n'est pas bon"
    solution += "."
    $("#sorsyl").text solution

En guise de conclusion, voici un syllogisme en relation avec le théorème d’incomplétude de Gödel :

  • tout ce qui est démontrable est vrai ;
  • or il y a des choses qui ne sont pas vraies ;
  • donc il y a des choses qui ne sont pas démontrables.

résumé de la démonstration des théorèmes d’incomplétude

Premier théorème d’incomplétude

On fait deux hypothèses (tout en étant libre de les refuser si on le souhaite) :

  1. l’arithmétique est cohérente (il est impossible d’y montrer un théorème et sa négation) ;
  2. le principe du tiers exclu : Toute proposition qui n’est pas fausse, est vraie.

La numérotation de Gödel permet d’exprimer dans l’arithmétique, la proposition suivante : « cette proposition est indémontrable ». On peut l’analyser par disjonction des cas :

  • si elle est fausse, alors il est faux qu’elle est indémontrable. Ce qui veut dire qu’elle est démontrable. Mais dans ce cas, elle est vraie puisque tout ce qui est démontrable est vrai.
  • Alors elle ne peut pas être fausse : Elle est donc vraie (par le tiers exclu). Mais dans ce cas, elle ne peut être démontrée puisque sinon elle serait fausse !

ll y a donc une proposition vraie mais indémontrable en arithmétique : La proposition ci-dessus. L’énoncé complet (avec détail des hypothèses de départ) du premier théorème d’incomplétude est :

Si l’arithmétique est cohérente alors elle est incomplète.

Deuxième théorème d’incomplétude

La démonstration précédente se résume à :

Si l’arithmétique est cohérente alors la proposition « cette proposition est indémontrable » est indémontrable.

Supposons par l’absurde que la cohérence de l’arithmétique soit démontrable. Alors par le modus ponens, d’une démonstration de cette cohérence et de l’implication ci-dessus, on déduit la proposition « cette proposition est indémontrable ». Mais ceci signifie qu’on a réussi à démontrer quelque chose d’indémontrable. L’hypothèse de départ est donc fausse, et on a le second théorème d’incomplétude de Gödel (1931) :

Si l’arithmétique est cohérente alors on ne peut pas y démontrer cette cohérence.

Remarque : Si l’arithmétique est incohérente alors on peut y démontrer une proposition et sa négation, donc, puisque « le faux implique le vrai », on peut tout y démontrer, en particulier sa cohérence : L’arithmétique est incohérente si et seulement si on peut démontrer qu’elle est cohérente !


P NP

Le diagramme d’Euler ci-dessus représente les problèmes raisonnablement compliqués (résolubles en temps au plus polynomial d’où le P), et ceux qui, quoique plus complexes a priori, peuvent être résolus plus vite avec de la chance (ou de l’intuition (NP veut dire « non déterministe polynomial », soit « devient polynomial à l’aide d’un oracle » - non déterministe - l’oracle modélisant la chance ou l’intuition). Tout problème P est un problème NP, mais on ne sait pas à l’heure actuelle si quelque problème NP est P : C’est le problème P = NP


[1Apparemment, la présence de négations (voire d’une seule négation) et l’inversion entre la principale et la subordonnée tendent à saturer la mémoire de travail.

[2certains passages bien plus savoureux ont été omis parce que longs ; ils n’en restent pas moins intéressants et amusants, à lire...

[3Lewis Carroll appellerait cela « une comète à queue bouclée »

[4Lorsque toutes les chambres sont vides (jetons gris), la maison est vide ; lorsqu’une chambre est occupée (par un jeton rouge), la maison est occupée. Le jeton rouge laisse penser qu’elle est occupée par Mademoiselle Rose mais attention : Il pourrait s’agir du colonel Moutarde déguisé !


Documents joints

Cascading Style Sheet - 1.9 kio
Cascading Style Sheet - 6.9 kio
Texte - 1.3 kio
Texte - 2.3 kio
Texte - 3.1 kio
Texte - 2.6 kio
Texte - 4.1 kio
Texte - 5.1 kio
Cascading Style Sheet - 34.5 kio

Commentaires