Introduction
Trois robots, xam, arg et bax travaillent pour un constructeur automobile et sont dotés d'un module de synthèse vocale et d'un module de diagnostic. Lors de leur passage hebdomadaire à l'atelier pour une révision, ils font les affirmations suivantes :
bax et arg sont dans le même état. |
bax est défectueux. |
xam et arg sont en bon état. |
🤖 | 🤖 | 🤖 |
xam | arg | bax |
Quand un robot est défectueux, son diagnostic est toujours faux et quand il fonctionne, son diagnostic est toujours vrai. On sait qu'il y a au moins un robot défectueux et au moins un robot en bon état. Quel(s) robot(s) faut-il réparer ?
L'un des objectifs de ce chapitre est de mettre en place l'outillage nécessaire pour répondre à cette question (et beaucoup d'autres) et plus généralement d'étudier des éléments de logique qui seront indispensables dans tout votre cursus en informatique.
Les mathématiques poursuivent quatre grands objectifs :
Le mathématicien pur contestera peut-être cette vision appliquée. On peut en effet étudier des objets mathématiques sans autre motivation que la pratique stimulante d'un jeu intellectuel et sans qu'ils aient le moindre rapport avec une quelconque réalité. Pourtant la très grande majorité des théories mathématiques a pour origine des problèmes bien réels engendrant de nouveaux questionnements qui parfois s'épanouissent au sein de théories autonomes. La dichotomie entre mathématiques pures et appliquées n'a donc pas de raison d'être et si distinction il y a, les deux vivent depuis longtemps en parfaite symbiose.
Selon la théorie de l'évolution de Lamarck, la fonction créant l'organe, le langage mathématique s'est progressivement structuré pour que cette science puisse se développer suivant ces quatre axes. Les mathématiques s'imposent naturellement en informatique dès que l'on cherche à analyser un problème, à élaborer des méthodes de résolution et à valider les résultats obtenus. Le langage mathématique est constitué de plusieurs langages formels imbriqués utilisant des signes et des termes qui leur sont propres et contrairement aux langages informatiques, la langue naturelle reste indispensable pour animer la partition. Ce métalangage est totalement formaté par et pour le raisonnement.
Les règles de construction des mots, des phrases et plus généralement des langues naturelles qui occupent les grammairiens ont leur pendant en mathématiques et en informatique. Les mathématiciens se sont intéressés à la théorie de la démonstration dès le début du xxème siècle et les informaticiens à la théorie des langages dans les années 1950. Les questions sur la nature du calcul ont largement contribué aux interactions entre les deux disciplines dans le cadre de la théorie de la calculabilité et l'isomorphisme de Curry-Howard établit des liens formels entre une démonstration dans un système logique et un programme dans un modèle de calcul, autrement dit
Ce résultat ne sera probablement pas de nature à rassurer l'étudiant qui espérait trouver une échappatoire à l'étude des mathématiques, mais il met en évidence les liens profonds qui existent entre ces deux disciplines.
La principale différence entre une langue naturelle et le métalangage mathématique concerne les ambiguïtés et la justesse des propos. Les ambiguïtés sont inhérentes aux langues naturelles et sont d'ailleurs largement exploitées dans la rhétorique (allusions, sous-entendus, jeux de mots, sophismes, etc.) alors qu'elles sont bannies du langage mathématique et des langages de programmation. Il est indispensable de les lever dès qu'un énoncé peut être interprété de différentes façons :
C'est ce qui explique la nature particulière des textes mathématiques qui emploient des tournures de phrases rarement utilisées dans le langage commun, comme si et seulement si, deux-à-deux disjoints, un et un seul, non-vide, etc. La logique naturelle n'est pas tout à fait celle de la logique classique des mathé­matiques, il existe d'ailleurs des logiques mathématiques (dites non-classiques par opposition) dont certaines ont précisément pour objet d'être plus proches de celle que nous pratiquons au quotidien. Là aussi, il est nécessaire de clarifier certaines situations.
Pour baptiser les objets que l'informaticien/mathématicien construit, les mots sont choisis avec beaucoup de précaution et sont censés être en adéquation avec l'acception qu'ils ont communément. Pourtant certaines distorsions existent parfois entre le sens que nous donnons à un mot et celui qu'il a en mathématiques, ce qui peut être une source d'erreurs ou de confusion. D'autre part, certains mots désignent des objets mathématiques différents selon le contexte où ils sont employés. Il faut en être conscient et comprendre le rôle réellement capital des définitions qui précisent leur sens dans un environnement particulier. Ceci explique la structuration litanique des textes mathématiques en alternance de définitions et de théorèmes.
Pour commencer ce cours, nous allons étudier le socle logique des mathématiques et de l'informatique. Pour illustrer notre propos, nous aurons souvent besoin d'exemples qui intègrent des objets ou des notions que nous n'aurons pas encore définies formellement mais qui sont bien connues du lecteur, ou qui sont censées l'être. Ce n'est pas contraire à ce qui se fait dans tout apprentissage, la pratique de la conduite d'un véhicule est un atout pour en comprendre le fonctionnement. Dans la suite, si certains objets mathématiques sont construits à l'aide d'outils qui auraient dû être définis en aval, c'est pour ne pas compliquer inutilement l'exposé, cela sous-entend que ces outils ne sont pas eux-mêmes définis à l'aide de ces objets, ce qui créerait alors un cercle vicieux.
Calcul propositionnel
Nécessité d'un cadre formel
L'étymologie du mot logique dévoile les mots raison et langage. La logique est à la base de l'articulation du discours mathématique et du fonctionnement atomique d'un ordinateur, il n'y a rien de surprenant à ce qu'elle se soit épanouie sur le formidable terrain de jeu qu'est l'informatique où elle est omniprésente. Les combinaisons de propositions à l'aide de connecteurs logiques constituent la première strate du raisonnement mathématique et de la construction des circuits électroniques. Il s'agit d'un langage à part entière, c'est le langage du calcul propositionnel dont nous allons fixer les règles de composition. Nous aborderons d'abord les aspects mathématiques, le chapitre Calcul booléen en donnera une vision plus proche de l'informatique et de l'électronique avec l'algèbre de Boole, les fonctions booléennes et les circuits logiques.
De manière analogue aux langues naturelles, un énoncé mathématique ou un programme informatique doit respecter :
Pour commencer, nous allons mettre en évidence les problèmes liés à la sémantique de la logique en langue naturelle et qui vont nous amener à la reconsidérer dans le cadre du langage du calcul propositionnel.
Il est important de noter dans cette définition informelle qu'il est possible d'attribuer une valeur de vérité à une proposition. Une proposition n'a pas besoin d'une valeur de vérité pour être une proposition, d'autre part si valeur de vérité il y a, elle n'est pas consubstantielle à la proposition. Certains auteurs parlent d'assertion pour une proposition, mais nous préférons ici réserver ce terme pour désigner une proposition énoncée comme vraie. Une assertion est donc une affirmation, ce qui rend son usage conforme à l'acception de ce terme en français.
À titre d'exemples voici quelques énoncés dont certains sont des propositions, d'autres non pour cette définition :
L'énoncé #2 est une interrogation, l'énoncé #8 est absurde, l'énoncé #10 n'est pas correct syntaxiquement. On ne peut pas attribuer de valeur de vérité à l'énoncé #12 sans connaître la valeur de la variable numérique \(x\), il ne s'agit pas stricto sensu d'une proposition, on utilise dans ce cas le terme de prédicat ou d'énoncé contingent, qui est le centre d'étude du prochain chapitre.
Tous les autres énoncés sont des propositions, mais il n'est pas toujours possible de leur affecter une valeur de vérité sans autres considérations. En effet, la valeur de vérité de la proposition #1 dépend implicitement du contexte, le lieu et le moment, tout comme celle de la proposition #3 qui dépend du lecteur. Il est donc délicat de les considérer comme des propositions mathématiques stricto sensu. La proposition #4 est vraie pour peu que l'on admette les règles de représentation des nombres et que l'on connaisse les rudiments du calcul. Établir une valeur de vérité de la proposition #5 est illusoire (ce qui ruine au passage mes espoirs de postérité). La proposition #6 demande une certaine connaissance de l'arithmétique pour établir qu'elle est vraie. La proposition #7 est vraie du point de vue du logicien, mais peut sembler absurde, voire fausse pour le lecteur lambda. Les propositions #9 et #11 sont des paradoxes logiques, elles ne peuvent être vraies ou fausses sans créer une contradiction. Les paradoxes logiques émergent parfois quand il y a autoréférence, c'est-à-dire quand un énoncé fait référence à lui-même*(*) Par exemple la proposition Je suis un menteur ne peut être vraie ou fausse sans aboutir à une contradiction. mais cela n'a rien de systématique, par exemple la proposition #13 est fausse.
Il apparaît que l'interprétation d'une proposition en langue naturelle n'est pas un exercice trivial, loin s'en faut. Toujours dans ce cadre, nous allons voir qu'il est également délicat d'analyser les énoncés contenant des connecteurs logiques pourtant omniprésents dans nos langues naturelles. Considérons les phrases suivantes :
Certains connecteurs peuvent avoir une signification différente selon le contexte. Le connecteur ou de la première phrase est inclusif, le second est exclusif et le troisième exprime une conséquence. La quatrième phrase laisse entendre qu'Alice est mariée avec Bob, mais ce n'est pas une certitude, il est donc difficile de lui attribuer une valeur de vérité. Le connecteur et de l'énoncé #5 code une énumération et pas une simple conjonction. De même, la conjonction de l'énoncé #6 induit une conséquence et celle de l'énoncé #8 induit une obligation.
En général les connecteurs logiques des langues naturelles ne sont pas vérifonctionnels. Supposons par exemple que la proposition Le facteur dépose le courrier et la proposition le chien aboie soient toutes les deux vraies. Si la proposition Le facteur dépose le courrier donc le chien aboie est très certainement vraie, la proposition Le chien aboie donc le facteur dépose le courrier est probablement fausse. Ainsi, en logique naturelle, d'autres éléments que la valeur de vérité des propositions connectées interviennent dans la valeur de vérité de leur composition. Dans le langage mathématique, les connecteurs doivent être vérifonctionnels. Cette exigence élémentaire peut créer une césure entre la logique naturelle et la logique mathématique.
En anticipant un peu sur l'étude des connecteurs logiques, la valeur de vérité d'une proposition contenant le connecteur logique d'implication peut suprendre, ainsi la proposition :
\[({\color{#EEF}1+2=3})\ \then\ {(\color{#EEF}\text{la Terre est ronde}})\]est vraie, alors qu'il n'y a aucun lien de cause à effet entre les deux propositions connectées qui sont toutes les deux vraies. Pire, la proposition
\[ ({\color{#EEF}1+2=0})\ \then\ {(\color{#EEF}\text{la Terre est ronde}}) \] est également vraie !Nous avons déjà constaté que la valeur de vérité d'une proposition n'est pas consubstantielle à sa structure et nous venons de mettre en évidence que les connecteurs logiques dans les énoncés en langue naturelle peuvent être difficiles à interpréter ou impropres à un usage mathématique. La manière la plus efficace de se débarrasser de ces problèmes consiste à éliminer dans un premier temps toute interprétation dans une proposition, elle devient une construction purement syntaxique. C'est une façon bien commode de procéder, on limite le champ d'investigation de la logique à des entités simples en les détachant de la réalité. C'est ce que nous faisons en permanance en mathématiques. Même pour une simple expression comme
\begin{equation} \label{expr:decimal} 2\times (5+93)=196, \end{equation}on ne se préoccupe ni de sa signification, ni de savoir si \(196\) représente une quantité, le poids d'une table ou la hauteur d'un immeuble, seule l'application des règles sur l'expression abstraite importe. Le distinguo entre la syntaxe et la sémantique de l'expression \(196\) est peut-être difficile à percevoir pour le lecteur car la confusion a été volontairement entrenue par les règles de lecture d'un nombre (ici cent-quatre-vingt-seize) où le chiffre le plus significatif est intégré avant les autres afin d'assurer la perception rapide d'une mesure au lieu d'égrener les chiffres un, neuf, six. On encapsule ainsi forme et fond. C'est la raison exacte de l'apprentissage de la lecture des mots et des nombres, l'objectif est précisément de ne plus avoir à les déchiffrer (toujours cette analogie avec les nombres !) pour en saisir le sens. En remplaçant l'écriture des nombres en base 10 par l'écriture en chiffres romains dans l'expression \((\ref{expr:decimal})\), on fait ressurgir la séparation entre syntaxe et sémantique :
\begin{equation} \label{expr:romain} \text{II}\times\text{(V}+\text{XCIII)}=\text{CXCVI} \end{equation}La lecture des 5 chiffres romains CXCVI n'évoque pas mentalement la quantité que nous percevons sans peine sous la forme décimale \(196\), et pourtant les deux représentations codent exactement le même nombre.
La conclusion de cette section est qu'une proposition logique n'est pas aisée à appréhender dans le cadre de la langue naturelle.
Syntaxe du calcul propositionnel
Concentrons-nous pour le moment sur les aspects lexicaux et syntaxiques du langage, nous reviendrons sur l'aspect sémantique un peu plus loin. Il faut tout d'abord disposer d'un lexique de symboles — un alphabet — ces symboles sont répartis en quatre catégories :
Voilà pour le lexique, passons à la syntaxe. À partir des variables propositionnelles, on peut créer de nouvelles expressions grâce aux connecteurs logiques qui les mettent en relation dans une formule (nous définirons précisément ce terme plus bas). L'arité d'un connecteur logique est le nombre \(q\) de propositions qu'il permet de connecter, on parle aussi de connecteur \(q\)-aire (unaire pour \(q=1\), binaire pour \(q=2\), ternaire pour \(q=3\), etc.).
À l'instar de l'expression arithmétique \(2(x+1)+y\) contenant deux variables \(x\) et \(y\), la valeur d'une formule est fonction#(#) dépend des valeurs des variables propositionnelles qu'elle contient. Les variables propositionnelles ne pouvant prendre qu'un nombre fini de valeurs (\(\top\) ou \({\bot}\)), un connecteur logique est entièrement caractérisé par les différentes valeurs possibles de la formule selon les valeurs des variables qu'il connecte. Notons que l'on ne peut pas procéder de cette manière pour caractériser l'addition dans \(\def\Z{{\Bbb Z}}\Z\), l'ensemble des valeurs possibles des variables étant infini.
Il n'est pas nécessaire d'étudier l'analyse combinatoire, pour vérifier qu'il y a \(2^q\) combinaisons possibles pour les valeurs des \(q\) variables propositionnelles d'un connecteur \(q\)-aire, et donc \(2^{2^q}\) façons différentes de définir un connecteur \(q\)-aire. En effet pour chacune des \(2^q\) valeurs possibles du \(q\)-uplet constitué des \(q\) variables, la formule peut prendre \(2\) valeurs distinctes \(\top\) ou \({\bot}\). La première table contient les 4 connecteurs unaires possibles \(\star_i\), la suivante les 16 connecteurs binaires possibles \(\diamond_j\) :
\(P\) | \(\star_1\) | \(\star_2\) | \(\star_3\) | \(\star_4\) |
\(\bot\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) |
\(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) |
\(P\) | \(Q\) | \(\diamond_1\) | \(\diamond_2\) | \(\diamond_3\) | \(\diamond_4\) | \(\diamond_5\) | \(\diamond_6\) | \(\diamond_7\) | \(\diamond_8\) | \(\diamond_9\) | \(\diamond_{10}\) | \(\diamond_{11}\) | \(\diamond_{12}\) | \(\diamond_{13}\) | \(\diamond_{14}\) | \(\diamond_{15}\) | \(\diamond_{16}\) |
\(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) |
\(\bot\) | \(\top\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) | \(\top\) | \(\top\) |
\(\top\) | \(\bot\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) | \(\bot\) | \(\bot\) | \(\top\) | \(\top\) |
\(\top\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) | \(\bot\) | \(\top\) |
Les connecteurs unaires \(\star_1\) et \(\star_4\) sont constants et la formule \(\star_2\; P\) prend exactement les mêmes valeurs que \(P\), le connecteur \(\star_2\) est donc l'identité. Le seul connecteur qui ne soit pas trivial est donc \(\star_3\), c'est la négation logique.
Les deux connecteurs binaires \(\diamond_{1}\) et \(\diamond_{16}\) sont constants, les connecteurs \(\diamond_{4}\) et \(\diamond_{13}\) ne dépendent que de la valeur du premier opérande \(P\) et les connecteurs \(\diamond_{6}\) et \(\diamond_{11}\) ne dépendent que de la valeur du deuxième opérande \(Q\). Ces \(6\) opérateurs ont donc peu d'intérêt, mais il en reste malgré tout 10. Sept d'entre eux sont baptisés car ils sont communément utilisés en Mathématiques et/ou en Informatique et/ou en Électronique. On a finalement huit connecteurs usuels et selon le contexte ou la discipline, on en utilise tout ou partie :
Con&Shy;Nec&Shy;Teur | Nom | Symbole | Lecture | Usage |
\(\star_3\) | négation | \(\neg\) | non | M|I|É |
\(\diamond_2\) | conjonction | \(\wedge\) | et | M|I|É |
\(\diamond_8\) | disjonction | \(\vee\) | ou | M|I|É |
\(\diamond_{14}\) | implication | \(\Rightarrow\) | implique | M|I |
\(\diamond_{10}\) | équivalence | \(\Leftrightarrow\) | équivalent | M|I |
\(\diamond_{7}\) | disjonction exclusive | \(\oplus\) | ou exclusif | I|É |
\(\diamond_{15}\) | non conjonction | \(\uparrow\) | non et | I|É |
\(\diamond_{9}\) | non disjonction | \(\downarrow\) | non ou | I|É |
Quand un connecteur est placé avant ses opérandes, on dit qu'il est en notation préfixe, c'est le cas de l'opérateur unaire de négation \(\neg\). Quand un connecteur est placé après ses opérandes, on dit qu'il est en notation postfixe. Par exemple la transposée d'une matrice \(A\) est généralement écrite sous forme postfixe \(A^t\) bien que l'écriture préfixe \({}^t\!A\) soit également très commune. Quand l'opérateur est binaire et qu'il est placé entre les deux opérandes, on dit qu'il est en notation infixe et c'est généralement cette notation qui est employée en logique propositionnelle, on écrit donc plus volontiers \(P\Rightarrow Q\) que \(P\ Q\ \Rightarrow\), bien que la notation postfixe soit très utilisée en informatique, elle permet en effet de se passer des parenthèses et d'évaluer très facilement une expression (ce point sera étudié en cours d'algorithmique de deuxième année).
L'expression \begin{equation} \label{eq:ex1} ((P\Rightarrow Q) \wedge (P\vee \neg R)) \end{equation} est manifestement une formule. Pour le démontrer, il faut être en mesure de décrire comment elle a été construite à partir des \(5\) règles fournies dans la définition d'une formule. On peut partir du bas en partant des atomes et des constantes et en construisant successivement de nouvelles formules (analyse ascendante) ou du haut en décomposant la formule et en recommençant sur chaque sous-formule (analyse descendante).
Voici une séquence de règles possible en analyse descendante. Une sous-formule à laquelle la prochaine règle de réécriture est appliquée est encadrée et le numéro de cette règle est indiqué à droite : \begin{align*} &\boxed{{\color{#FFF}formule}}_{\;5}\\ (\boxed{{\color{#FFF}formule}}_{\;5}&\wedge{\color{#FFF}formule})\\ (({\boxed{{\color{#FFF}formule}}}_{\;1} \Rightarrow{\color{#FFF}formule})&\wedge{\color{#FFF}formule})\\ ((P \Rightarrow {\boxed{{\color{#FFF}formule}}_{\;1}})&\wedge {\color{#FFF}formule})\\ ((P \Rightarrow Q)&\wedge {\boxed{{\color{#FFF}formule}}_{\;5}})\\ ((P \Rightarrow Q)&\wedge ({\boxed{{\color{#FFF}formule}}_{\;1}}\vee{\color{#FFF}formule}))\\ ((P \Rightarrow Q)&\wedge (P\vee {\boxed{{\color{#FFF}formule}}_{\;4}}))\\ ((P \Rightarrow Q)&\wedge (P\vee \neg {\boxed{{\color{#FFF}formule}}_{\;1}}))\\ ((P \Rightarrow Q)&\wedge (P\vee \neg R)) \end{align*}
Sauf cas particuliers, il existe plusieurs séquences de règles possibles pour établir une formule. Une telle séquence de règles s'appelle une dérivation de la formule. La représentation d'une formule à l'aide d'un arbre de dérivation permet de mieux comprendre sa structure. C'est un arbre schématisé dont le principe de construction est simple et inductif. Une formule avec un connecteur \(q\)-aire est représentée à l'aide de \(q+1\) nœuds dans cet arbre, le connecteur est placé à la racine de l'arbre qui est reliée à chacun des \(q\) opérandes dans l'ordre de leur apparition dans la formule.
Les deux arbres suivants représentent respectivement une formule avec un connecteur unaire et son opérande et une formule avec un connecteur binaire et ses deux opérandes (les arbres sont dits unaire et binaire) :
Quand les opérandes d'un connecteur sont eux-mêmes des formules, on remplace chaque formule par l'arbre correspondant inductivement. Ainsi la formule \(((P\Rightarrow Q) \wedge (P\vee \neg R))\) a pour arbre de dérivation l'arbre ci-dessous :
Une formule peut admettre plusieurs dérivations, mais un seul arbre de dérivation ce qui justifie l'emploi du singulier défini. Comme pour les opérations arithmétiques, on décide de certaines priorités pour simplifier les écritures. La négation est prioritaire sur la conjonction qui est prioritaire sur la disjonction, elle-même prioritaire sur l'implication. Néanmoins, il est hautement préférable d'écrire toutes les parenthèses, l'expérience prouve qu'elles facilitent beaucoup plus souvent la lecture qu'elles ne la compliquent. On simplifie malgré tout les formules en omettant les parenthèses aux extrémités, la formule simplifiée de \((\ref{eq:ex1})\) s'écrit \((P\Rightarrow Q) \wedge (P\vee \neg R).\)
Effectivement, dans ces deux graphes, les relations entre éléments matérialisées par des arcs sont strictement égales (vous pourrez en faire la preuve à titre d'exercice en définissant l'ensemble sur lequel sont définis les graphes de ces deux relations une fois cette partie du cours étudiée)*(*) ils le sont également du point de vue topologique.. Néanmoins, il s'agit ici d'une représentation avec une sémantique, elle met en particulier en évidence la position des opérandes gauche et droit de part et d'autre d'un opérateur binaire comme l'implication \(\Rightarrow\). Autrement dit, la représentation à gauche ne fournit pas la même information que celle de droite compte tenu des conventions de représentation des arbres de dérivation. Je doute échapper à une contravention pour conduite à contresens en prétextant que les deux panneaux à sens unique ⬆ et ⬇ sont égaux…
Sémantique du calcul propositionnel
Revenons à la sémantique. Il s'agit d'attribuer un sens à une formule, on veut l'interpréter. Seules deux valeurs logiques sont possibles, vrai ou faux, c'est la valeur de vérité de la formule. Une interprétation est donc une fonction de l'ensemble des formules \(\mathscr F\) dans l'ensemble*(*) Les termes ensemble et fonction ne sont pas définis formellement à ce stade mais la vision naïve est suffisante ici. \(\{vrai,\;faux\}.\)
Les règles qui permettent d'attribuer un sens aux formules sont mises en cohérence avec les règles de construction syntaxique. La fonction d'interprétation \(I\) est définie en fixant arbitrairement une valeur de vérité \(vrai\) ou \(faux\) à chacune des variables propositionnelles. C'est la seule marge de manœuvre dont on dispose si l'on décide que les constantes \(\top\) et \(\bot\) (objets syntaxiques) sont interprétées respectivement comme les valeurs logiques \(vrai\) et \(faux\) (objets sémantiques), c'est-à-dire \(I(\top):=vrai\) et \(I(\bot):=faux\) et que la fonction d'interprétation d'une formule se conforme aux tables des connecteurs logiques.
À présent, une formule de la logique propositionnelle est bien une proposition au sens de la première définition. Nous pouvons donc employer le terme proposition pour désigner une formule de la logique propositionnelle.
En remplaçant \(\top\) par \(vrai\) et \(\bot\) par faux dans les tables des connecteurs logiques, on obtient leurs tables de vérité. Nous avons regroupé les 7 tables de vérité des connecteurs logiques binaires dans un unique tableau et avons résumé les valeurs de vérité vrai et faux par \(V\) et \(F\) respectivement pour plus de lisibilité.
|
|
La table de vérité d'une formule contient ses valeurs de vérité pour l'intégralité des combinaisons possibles des variables propositionnelles qu'elle contient. La table de vérité de la formule \((\ref{eq:ex1})\) est présentée ci-dessous et pour faciliter la compréhension, les deux sous-formules de la conjonction sont présentes également :
\(P\) | \(Q\) | \(R\) | \(\ P\Rightarrow Q\ \) | \(\ P\vee\neg R\ \) | \(\ (P\Rightarrow Q)\wedge( P\vee\neg R\ )\) | |
F | F | F | V | V | V | |
F | F | V | V | F | F | |
Interprétation \(\color{#AA88FF}{I}\quad \) | F | V | F | V | V | V |
F | V | V | V | F | F | |
V | F | F | F | V | F | |
V | F | V | F | V | F | |
V | V | F | V | V | V | |
V | V | V | V | V | V |
Comment construit-on effectivement une table de vérité ? L'algorithme est simple, on se donne tout d'abord une interprétation \(\color{#AA88FF}{I}\) pour remplacer chaque variable propositionnelle \(P\) — donc chaque feuille de l'arbre de dérivation (sur fond gris dans les exemples) — par sa valeur de vérité \(I(P)\), puis on applique inductivement les deux opérations suivantes sur l'arbre de dérivation :
On montre aisément que pour toute assertion \(P\), on a \begin{equation}\label{eq:neg} \neg(\neg P)\ \equiv\ P \end{equation} et que \(P\) et \(Q\) peuvent être échangés sans rien changer aux tables de vérités de \(P \vee Q\) et \(P\wedge Q\), autrement dit que ces deux connecteurs sont commutatifs. \begin{align}\label{eq:comou} P \vee Q\ &\equiv\ Q\vee P\\ P \wedge Q\ &\equiv Q\wedge P\label{eq:comet} \end{align}
D'autre part, on a les deux équivalences logiques suivantes, qui sont souvent utilisées en mathématiques pour définir les connecteurs d'implication et d'équivalence à partir des trois connecteurs de négation, de conjonction et de disjonction : \begin{align}\label{eq:implique} P\Rightarrow Q&\ \equiv\ \neg{P}\vee Q\\ P\Leftrightarrow Q&\ \equiv\ (P\Rightarrow Q) \wedge (Q\Rightarrow P)\label{eq:eq} \end{align}
Nous verrons plus bas que le connecteur d'implication \(\Rightarrow\) n'est pas commutatif, alors que la commutativité du connecteur \(\wedge\) entraîne celle du connecteur \(\Leftrightarrow\) d'équivalence.
Pour démontrer une équivalence, d'après la définition \((\ref{eq:eq})\) il faut démontrer les deux implications \(P\Rightarrow Q\) et \(Q\Rightarrow P\), autrement dit que \(P\) est une condition nécessaire et suffisante de \(Q\) (ou réciproquement), ce que l'on énonce souvent en disant \(P\) si et seulement si \(Q\).
Il est aisé de prouver les deux équivalences logiques qui suivent en construisant les tables de vérités des assertions qui les constituent. Ces équivalences sont extrêmement utiles, ce sont les lois de De Morgan.*(*) Augustus De Morgan était un mathématicien britannique qui vécut au 19ème siècle.
Il ne faut pas écrire le symbole \(\Rightarrow\) pour signifier le mot donc. On peut légitimement se questionner sur le choix du mot implication pour qualifier ce connecteur logique, puisqu'il a sans conteste un sens déductif en français. L'explication est fournie par la règle du Modus Ponens ci-dessous qui décrit le rôle de la proposition \(P\Rightarrow Q\) dans le processus déductif et qui donne un sens précis aux mots donc ou alors dans le discours mathématique. La déduction logique est symbolisée par le signe \(\vdash\) (ou \(\therefore\)) séparant les prémisses \(P\) et \(P\Rightarrow Q\) (ou hypothèses), du conséquent \(Q\) (ou conclusion).
Ces notations sont largement utilisées dans l'étude des systèmes de décision, des logiques non classiques, en théorie de la démonstration, en intelligence artificielle, etc. L'équivalence logique suivante entre deux implications est également très utilisée dans les démonstrations via la règle du Modus Tollens.
La proposition \(Q\Rightarrow P\) est appelée implication réciproque de l'implication \(P\Rightarrow Q\). Ce n'est pas sa négation, en effet
\begin{align*} \neg(P\Rightarrow Q)\ &\equiv\ \neg(\neg P\vee Q)\quad\text{d'après \((\ref{eq:implique})\)}\\ &\equiv\ (\neg(\neg P))\wedge\neg Q\quad\text{d'après \((\ref{eq:morganou})\)}\\ &\equiv\ P\wedge\neg Q\quad\text{d'après \((\ref{eq:neg})\)}\\ \end{align*}La proposition \(P\wedge\neg P\) est appelée contradiction ou paradoxe logique. Certaines propositions peuvent être toujours vraies (resp. fausses) quelles que soient les interprétations des variables propositionnelles qui les composent, on les appelle tautologies (resp. antilogies). Les trois tautologies suivantes sont très utilisées pour construire des démonstrations mathématiques :
La première exprime que l'on ne peut pas avoir simultanément une proposition et son contraire, on ne veut donc pas de paradoxes. Elle permet d'élaborer une stratégie de démonstration dite démonstration par l'absurde : plutôt que de montrer qu'une proposition \(P\) est vraie, on suppose qu'elle est fausse et on essaie de prouver la contradiction \(P\wedge \neg P\) pour invalider l'hypothèse et conclure que \(P\) est vraie grâce au tiers exclu. Ainsi un inspecteur qui suppose qu'un cambrioleur est passé par une fenêtre et ne trouve aucune trace d'effraction sur la fenêtre en conclura que son hypothèse était absurde et que le cambrioleur est entré par un autre moyen.
La seconde exprime qu'une proposition ou sa négation doit être vraie, autrement dit que l'on exclut une troisième possibilité*.(*) La logique intuitionniste rejette le tiers exclus et par conséquent le raisonnement par l'absurde. Notons que la non contradiction et le tiers exclu sont la négation l'une de l'autre d'après les lois de De Morgan \((\ref{eq:morganou})\) et \((\ref{eq:morganet})\). La troisième exprime le fait que c'est l'interprétation de \(Q\) qui fixe la valeur de vérité de la conjonction, quelle que soit l'interprétation de \(P\).
On peut se demander pourquoi nous n'avons pas étudié d'autres opérateurs que les opérateurs unaires et binaires ? Le théorème suivant et son corollaire fournissent une justification.
Nous verrons au chapitre sur le calcul booléen que l'on peut obtenir un résultat plus fort encore et que l'on peut se contenter d'un unique opérateur binaire. Mais le mathématicien savait déjà que l'on pouvait se contenter des trois connecteurs \(\neg\), \(\wedge\) et \(\vee\) pour tout exprimer.
\(P\) | \(Q\) | \(R\) | \(\Rrightarrow\) |
\(\bot\) | \(\bot\) | \(\bot\) | \(\bot\) |
\(\bot\) | \(\bot\) | \(\top\) | \(\top\) |
\(\bot\) | \(\top\) | \(\bot\) | \(\bot\) |
\(\bot\) | \(\top\) | \(\top\) | \(\top\) |
\(\top\) | \(\bot\) | \(\bot\) | \(\bot\) |
\(\top\) | \(\bot\) | \(\top\) | \(\bot\) |
\(\top\) | \(\top\) | \(\bot\) | \(\top\) |
\(\top\) | \(\top\) | \(\top\) | \(\top\) |
Propriétés des connecteurs logiques
En guise de référence rapide, on regroupe ici les propriétés les plus importantes des connecteurs logiques. Soit \(P\), \(Q\) et \(R\) des propositions. AlorsFormalisation du raisonnement
Les robots
Nous pouvons à présent étudier le problème de robots que nous avons présenté en introduction. On rappelle qu'un robot en bon état (resp. défectueux), fait toujours un bon (resp. mauvais) diagnostic et que les trois robots font les affirmations suivantes :
bax et arg sont dans le même état. |
bax est défectueux. |
xam et arg sont en bon état. |
🤖 | 🤖 | 🤖 |
xam | arg | bax |
On introduit les variables propositionnelles \(\color{#FF0}X\), \(\color{#F44}B\) et \(\color{#88F}A\) définies par
Si l'on observe la table de vérité du connecteur d'équivalence \(\iff\), on note que \(P\iff Q\) est vrai si et seulement si les deux variables \(P\) et \(Q\) ont la même valeur de vérité, c'est-à-dire si les deux sont vraies ou si les deux sont fausses (on en déduit au passage que \((P\iff Q)\equiv(P\wedge Q)\vee (\neg P\wedge\neg Q)\)). On formalise alors les propositions de xam, arg et bax respectivement par :
Il faut également traduire l'hypothèse qui dit qu'un robot en bon état fait toujours un bon diagnostic et qu'un robot défectueux fait toujours un mauvais diagnostic. Autrement dit, les propositions \(X\) (resp. \(A\) et \(B\)) et \(P_X\) (resp. \(P_A\) et \(P_B\)) ont la même valeur de vérité, ce qui se traduit par la formule \begin{equation} \label{formrobot} {\mathscr F}:=({\color{#FF0}P_X}\iff {\color{#FF0}X})\wedge({\color{#F44}P_A}\iff {\color{#F44}A})\wedge({\color{#88F}P_B}\iff {\color{#88F}B}). \end{equation}
On construit ensuite la table de vérité des trois propositions \({\color{#FF0}P_X}\), \({\color{#F44}P_A}\) et \({\color{#88F}P_B}\) ainsi que celle de la formule \(\mathscr F\) :
\({\color{#FF0}P_X}\) | \({\color{#F44}P_A}\) | \({\color{#88F}P_B}\) | |||||
\(\color{#FF0}X\) | \(\color{#F44}A\) | \(\color{#88F}B\) | \({\color{#FF0}(A\iff B)}\) | \({\color{#F44}\neg B}\) | \({\color{#88F}(X\wedge A)}\) | \(\mathscr F\) | |
1 | F | F | F | V | V | F | F |
2 | F | F | V | F | F | F | F |
3 | F | V | F | F | V | F | V |
4 | F | V | V | V | F | F | F |
5 | V | F | F | V | V | F | F |
6 | V | F | V | F | F | F | F |
7 | V | V | F | F | V | V | F |
8 | V | V | V | V | F | V | F |
Comme on peut le constater, seule l'interprétation #3 satisfait la formule \((\ref{formrobot})\), il faut donc réparer xam et bax.
Le logicien amoureux
Traitons un deuxième exemple. On interroge un logicien, qui dit toujours la vérité, sur sa vie sentimentale et il affirme :On peut traduire ces deux assertions en formules propositionnelles. Pour cela on définit les variables propositionnelles \(A\) et \(M\) qui sont interprétées de la manière suivante :
La proposition (a) se traduit par \(M\vee A\) et la proposition (b) par \(M\then A\). On construit leurs tables de vérité :
\(A\) | \(M\) | \(M\vee A\) | \(M\then A\) |
F | F | F | \(V\) |
F | \(V\) | \(V\) | F |
\(V\) | F | \(V\) | \(V\) |
\(V\) | \(V\) | \(V\) | \(V\) |
Les deux dernières lignes de cette table de vérité (les seules qui assurent que les assertions du logicien sont vraies) montrent que le logicien aime nécessairement Anne mais on ne sait rien de plus au sujet de la nature de sa relation avec Marie. Il nous faut donc un complément d'information pour conclure. À la question Est-il vrai que si vous aimez Marie, alors vous aimez Anne ?, le logicien répond*Notez que cette demande de confirmation de (b) était en soi inutile puisque le logicien dit toujours la vérité.
Si on traduit ces deux dernières affirmations en propositions, on obtient \((M\then A)\then M\) pour (c) et \(M \then (M\then A)\) pour (d) et on reconnaît là l'équivalence \((M\then A)\iff M\) que l'on rajoute dans la table de vérité. Cette fois il ne reste qu'une seule interprétation propositionnelle de \(A\) et \(M\) qui assure la vérité des trois propositions, celle où le logicien aime les deux femmes :
\(A\) | \(M\) | \(M\vee A\) | \(M\then A\) | \((M\then A)\iff M\) |
F | F | F | \(V\) | F |
F | \(V\) | \(V\) | F | F |
\(V\) | F | \(V\) | \(V\) | F |
\(V\) | \(V\) | \(V\) | \(V\) | \(V\) |
Les différentes affirmations du logicien ont donc été traduites sous formes de propositions et nous avons cherché les interprétations \(I\) des différentes variables assurant que leur conjonction était vraie, ici \(I(A)=V\) et \(I(M)=V\).
Les tee-shirts
Étudions le problème suivant : trois frères Alvin, Bob et Clive sont d'âges différents et portent des tee-shirts de couleurs différentes rouge, vert ou jaune. On dispose de deux indices :
Phase 1. Certains éléments de l'énoncé sont des attributs (porter des lunettes, porter un tee-shirt d'une certaine couleur, être le benjamin) et sont satisfaits ou non par chaque frère, il est naturel d'en faire des variables propositionnelles :
On dispose donc de \(21\) variables propositionnelles. Avant même d'utiliser les indices, il faut formaliser un certain nombre de contraintes implicites. Chacun des trois frères doit porter un unique tee-shirt. Ceci se traduit par le fait qu'ils doivent porter un tee-shirt rouge ou vert ou jaune et qu'ils ne doivent pas en porter deux simultanément, soit respectivement les six formules suivantes :
\begin{align} &(A_{\color{#F44}R}\vee A_{\color{#0A0}V} \vee A_{\color{#FF0}J}),\\ &\neg(A_{\color{#F44}R}\wedge A_{\color{#0A0}V}) \wedge \neg(A_{\color{#F44}R}\wedge A_{\color{#FF0}J}) \wedge \neg(A_{\color{#0A0}V}\wedge A_{\color{#FF0}J}),\\ &(B_{\color{#F44}R}\vee B_{\color{#0A0}V} \vee B_{\color{#FF0}J}),\\ &\neg(B_{\color{#F44}R}\wedge B_{\color{#0A0}V}) \wedge \neg(B_{\color{#F44}R}\wedge B_{\color{#FF0}J}) \wedge \neg(B_{\color{#0A0}V}\wedge B_{\color{#FF0}J}),\\ &(C_{\color{#F44}R}\vee C_{\color{#0A0}V} \vee C_{\color{#FF0}J}),\\ &\neg(C_{\color{#F44}R}\wedge C_{\color{#0A0}V}) \wedge \neg(C_{\color{#F44}R}\wedge C_{\color{#FF0}J}) \wedge \neg(C_{\color{#0A0}V}\wedge C_{\color{#FF0}J}).\\ \end{align}Mais deux frères ne peuvent pas porter le même tee-shirt : \begin{align} &\neg(A_{\color{#F44}R}\wedge B_{\color{#F44}R})\wedge \neg(A_{\color{#F44}R}\wedge C_{\color{#F44}R})\wedge \neg(B_{\color{#F44}R}\wedge C_{\color{#F44}R}),\\ &\neg(A_{\color{#0A0}V}\wedge B_{\color{#0A0}V})\wedge \neg(A_{\color{#0A0}V}\wedge C_{\color{#0A0}V})\wedge \neg(B_{\color{#0A0}V}\wedge C_{\color{#0A0}V}),\\ &\neg(A_{\color{#FF0}J}\wedge B_{\color{#FF0}J})\wedge \neg(A_{\color{#FF0}J}\wedge C_{\color{#FF0}J})\wedge \neg(B_{\color{#FF0}J}\wedge C_{\color{#FF0}J}). \end{align}
Chacun des trois frères doit avoir une unique position dans la fratrie : \begin{align} &(A_A\vee A_B\vee A_C),\\ &\neg(A_A\wedge A_B)\wedge \neg(A_A\wedge A_C)\wedge\neg(A_B\wedge A_C),\\ &(B_A\vee B_B\vee B_C),\\ &\neg(B_A\wedge B_B)\wedge \neg(B_A\wedge B_C)\wedge\neg(B_B\wedge B_C),\\ &(C_A\vee C_B\vee C_C),\\ &\neg(C_A\wedge C_B)\wedge \neg(C_A\wedge C_C)\wedge\neg(C_B\wedge C_C). \end{align}Et deux frères ne peuvent être à la même position dans la fratrie :
\begin{align} &\neg(A_A\wedge B_A)\wedge\neg(A_A\wedge C_A)\wedge\neg(B_A\wedge C_A),\\ &\neg(A_B\wedge B_B)\wedge\neg(A_B\wedge C_B)\wedge\neg(B_B\wedge C_B),\\ &\neg(A_C\wedge B_C)\wedge\neg(A_C\wedge C_C)\wedge\neg(B_C\wedge C_C). \end{align}Phase 2. On formalise maintenant les deux indices du problème avec des formules propositionnelles. L'indice (a) nous donne :
\begin{align} A_{\color{#F44}R}&\then (\neg A_L\wedge A_B),\\ B_{\color{#F44}R}&\then (\neg B_L\wedge B_B),\\ C_{\color{#F44}R}&\then (\neg C_L\wedge C_B). \end{align}L'indice (b) est plus délicat à formaliser. Alvin porte des lunettes impose \(I(A_L):=V\) pour la fonction d'interprétation \(I\) que l'on doit précisément déterminer. C'est la seconde affirmation Bob est plus vieux que celui qui porte le tee-shirt vert. qui demande un peu de réflexion puisqu'il faut l'exprimer uniquement avec les variables dont on dispose. Si Alvin est le benjamin et qu'il porte un tee-shirt vert, alors Bob est soit le cadet soit l'aîné. Si Alvin est le cadet et porte le tee-shirt vert, Bob est nécessairement l'aîné, etc.
\begin{align} &(A_{\color{#0A0}V}\wedge A_B)\then (B_A\vee B_C),\\ &(A_{\color{#0A0}V}\wedge A_C)\then B_A,\\ &(C_{\color{#0A0}V}\wedge C_B)\then (B_A\vee B_C),\\ &(C_{\color{#0A0}V}\wedge C_C)\then B_A. \end{align}Phase 3. Nous sommes face à un total de \(25\) propositions à satisfaire et il reste \(20\) variables à définir puisque nous savons que la variable \(A_L\) doit être vraie. Construire la table de vérité de la conjonction de ces \(25\) propositions n'est pas envisageable à la main, il y a plus d'un million de combinaisons possibles des \(20\) variables propositionnelles, mais se programme aisément. Il faut réaliser que l'augmentation du nombre de variables propositionnelles limite drastiquement la portée de la méthode consistant à construire la table de vérité. Le cours de théorie de la complexité de master montrera que chercher une interprétation qui satisfait un ensemble arbitraire de propositions logiques est un problème que l'on pense ne jamais pouvoir résoudre efficacement*(*) On connaît d'excellentes heuristiques cependant..
On peut tenter une approche moins mécanique. Notons \({\color{#F44}R},{\color{#0A0}V},{\color{#FF0}J}\) les trois couleurs, \(B,C,A\) les trois statuts (Benjamin, Cadet, Aîné) dans la fratrie et \(L\) le statut de porteur de lunettes. On rappelle les deux indices :
On en déduit évidemment que Calvin est le benjamin et qu'il porte le tee-shirt rouge. Il nous reste à savoir qui porte des lunettes. On sait qu'Alvin en porte et que Calvin ne peut en porter puisqu'il porte le tee-shirt rouge. Pour Bob, on ne sait pas, il peut porter des lunettes ou non. Finalement :
Limites de la logique propositionnelle
De manière générale, un énoncé peut très bien aboutir à la formalisation d'une proposition avec plusieurs interprétations valides (si elles le sont toutes, c'est une tautologie) ou aucune (antilogie). Ceci justifie la définition suivante :
On utilise la même terminologie pour un ensemble de formules mais dans ce cas il faut que leur conjonction (qui est une nouvelle formule) soit satisfaisable.
Déterminer si une formule est satisfaisable est un problème extrêmement difficile. Les scientifiques pensent, dans leur grande majorité, qu'aucun moyen efficace ne permet d'y répondre (cette question sera abordée en détail en master.) On peut, bien sûr, construire la table de vérité de la formule pour faire cette vérification, mais c'est un travail qui devient littéralement infaisable, même pour un ordinateur, dès qu'il y a plus de quelques dizaines de variables propositionnelles dans la formule.
Les exemples de formalisation que nous venons de traiter illustrent les limites de la logique propositionnelle. Son manque d'expressivité nous a contraint à créer un grand nombre de variables pour décrire les différents cas et l'exercice ci-dessus montre que faute de stratégies, il peut être difficile d'automatiser la résolution de problèmes logiques.
Mais, pire encore, que se passerait-il si une énigme faisait référence à des entiers naturels ? Par exemple, au lieu d'invoquer les couleurs des tee-shirts d'Alvin, Bob et Clive, on invoquait dans un énoncé un code secret qui serait un nombre (de taille arbitraire) ? Manipuler un très grand nombre de variables propositionnelle voire une infinité de variables propositionnelles n'est envisageable ni pour humain, ni pour une machine. Il faut pouvoir décrire une infinité de situations à l'aide d'une description finie. L'apport du calcul des prédicats permet aussi de formaliser des situations finies de manière bien plus concise, on exprimera par exemple qu'une partie \(X=\{x_1,x_2,\ldots,x_n\}\) de \(\N\) ne contient que des entiers pairs par la phrase \[ \forall x\in X\ \ \exists k\in\N\ \ x=2\, k. \] plutôt que par l'ensemble des \(n\) propositions suivantes : \[ x_1\ \text{est pair},\ x_2\ \text{est pair},\ x_3\ \text{est pair},\ldots,\ x_n\ \text{est pair}. \]
Le prochain chapitre est consacré à l'étude de la logique des prédicats dans le cadre de la théorie des ensembles de Zermelo-Fraenkel (abrégée en théorie zf).