You are on page 1of 312

Institut de Mathématiques Appliquées

ǫ
0

1
ǫ
ǫ ǫ
1
ǫ
ǫ
ǫ

Logique(s)
ǫ

Langages
0

ǫ
ǫ

Algorithmes
ǫ
ǫ

Dr. hab. Narendra JUSSIEN


École des Mines de Nantes
ǫ

Narendra.Jussien@emn.fr

njussien.e-constraints.net/lla
c
2004, 2005, 2006 narendra jussien – tous droits réservés

Ces notes de cours font partie d’un enseignement réalisé à l’Institut de Mathématiques Ap-
pliquées, Angers, durant les années universitaires 2004/2005 et 2005/2006.

Ce document doit énormément au cours tel qu’il a été dispensé par Yvon L’Hospitalier à l’IMA
au cours de l’année 1991/1992 et a bénéficié des sources d’informations suivantes (en dehors
des références bibliographiques reportées en fin de document) :
– Le Petit Larousse, grand format 1992 ;
– Le Robert Brio, 2004 ;
– http ://www.webencyclo.com ;
– http ://www.evene.fr ;
– http ://www.lofs.ucl.ac.be/log/LogNuls/LogNuls1.html ;
– http ://mathworld.wolfram.com/Zermelo-FraenkelAxioms.html ;
– http ://www.bibmath.net/ ;
– http ://www.slav.uni-sofia.bg/~niki/grammaires/gram1/gram1a.html

Merci à Guillaume Rochart, à l’époque doctorant à l’école des Mines de Nantes, pour sa
relecture attentive d’une première version de ce document.

Né en 1973, Narendra Jussien est titulaire d’un doctorat en informatique de l’université de Rennes 1 depuis 1997
et d’une habilitation à diriger des recherches (HDR) depuis 2003. Il a rejoint le département informatique de
l’École des Mines de Nantes (EMN) en 1998 où il enseigne l’Informatique. Ses activités de recherche portent
sur la programmation par contraintes, sujet sur lequel il est auteur de plusieurs publications. Il a dirigé l’équipe
« contraintes » de l’EMN de 2001 à 2003 et a été responsable du thème « contraintes discrètes » du laboratoire
d’informatique de Nantes-Atlantique (LINA) en 2003. Narendra Jussien est président de l’association française
pour la programmation par contraintes (AFPC).

ii
iii

logique, [lOZik] n.f. — xiiie ; lat. logica, gr. logikê, de logos « raison ». I. Étude scien-
tifique des conditions de vérité des propositions. II. 1. Manière de raisonner.
2. Enchaı̂nement cohérent d’idées, manière de raisonner juste.

langage, [lãgaZ] n.m. — v. 1160 ; lengatge v. 980 ; de langue. 1. Fonction d’expression


de la pensée et de communication entre les hommes, mise en œuvre au moyen
d’un système de signes vocaux (parole) et éventuellement de signes graphiques
(écriture). 2. Tout système de signes permettant la communication. – En in-
formatique, ensemble codé de signe utilisé pour la programmation.

algorithme, [algOöitm] n.m. — 1554 ; lat. médiév. Al-Khawarizmi, pris pour nom com-
mun, égalt. sous la forme algorismus. Ensemble des règles opératoires qui
définissent la suite des calculs à effectuer pour obtenir la solution d’un problème.

Le Petit Larousse, 1992.


table des matières

Structure et conventions vii

I Logique(s) 1

1 Une brève histoire de la logique 3


1.1 La logique d’Aristote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 La logique médiévale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 La logique mathématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Logique des propositions 5


2.1 Aspects syntaxiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Aspects sémantiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Aspects algébriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4 Aspects déductifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5 La théorie des nombres typographiques . . . . . . . . . . . . . . . . . . . . . . 39

3 Logique du premier ordre 43


3.1 Aspects syntaxiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2 Aspects sémantiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3 Aspects déductifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4 Logiques non classiques 71


4.1 Logiques modales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2 Logiques multivalentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.3 Logique floue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

II Langages et algorithmes 99

5 Langages formels et grammaires 101


5.1 Rappels : dénombrement d’ensembles . . . . . . . . . . . . . . . . . . . . . . 102
5.2 Mots et langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
5.3 Grammaires de Chomsky (1956) . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.4 Des grammaires aux automates . . . . . . . . . . . . . . . . . . . . . . . . . . 113

v
table des matières

6 Automates 117
6.1 Automates finis déterministes . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.2 Automates finis non déterministes . . . . . . . . . . . . . . . . . . . . . . . . 122
6.3 Application : recherche dans un texte . . . . . . . . . . . . . . . . . . . . . . . 130

7 Langages et automates 135


7.1 Automates et langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.2 Propriétés des langages réguliers . . . . . . . . . . . . . . . . . . . . . . . . . 144
7.3 Expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.4 Des automates pour tout type de langage . . . . . . . . . . . . . . . . . . . . 158

8 Calculabilité, décidabilité 161


8.1 Langages et problèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.2 Machines de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
8.3 Machine de Turing et langages . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.4 Un problème indécidable : le problème de correspondance de Post . . . . . . . 184

9 Complexité 187
9.1 Complexité des algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
9.2 Complexité des problèmes : classes P et NP . . . . . . . . . . . . . . . . . . . 196
9.3 Autres classes de complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
9.4 Décidabilité et complexité en pratique . . . . . . . . . . . . . . . . . . . . . . 210

III Contexte 213

10 Indications biographiques 215

11 Dictionnaire morphologique 231

12 Dictionnaire encyclopédique 243

Bibliographie 253

Annexes 255

A Corrections des exercices 257


A.1 Calcul propositionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
A.2 Calcul des prédicats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
A.3 Logiques non classiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
A.4 Langages formels et grammaires . . . . . . . . . . . . . . . . . . . . . . . . . 282
A.5 Automates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
A.6 Langages et automates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
A.7 Calculabilité, décidabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
A.8 Complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

vi
structure et conventions

Ce document est organisé en trois modules : un premier consacré à la logique formelle, un


deuxième consacré aux langages et algorithmes et un troisième apportant des informations
complémentaires.
Après un bref historique du domaine, le premier module passe en revue la logique des
propositions et la logique du premier ordre. Ensuite, une introduction à des logiques moins
« classiques » est proposée.
Le deuxième module est consacré aux langages et algorithmes. Les langages (formels)
et leurs liens avec les automates sont d’abord étudiés avant d’aborder des notions peut-être
plus complexes sur la calculabilité et la complexité des algorithmes et des problèmes.
Le troisième module est en quelque sorte un compagnon tout au long de l’étude. Il
est organisé en trois chapitres : un premier chapitre présente quelques informations bio-
graphiques sur les personnages rencontrés au cours de l’exposé de ce cours ; un deuxième
chapitre propose une étude morphologique de certains termes clefs abordés dans le cours ;
enfin, le troisième chapitre se présente plus comme un dictionnaire encyclopédique pour
certaines notions annexes au cours.
Tout au long de ces notes, un certain nombre de conventions permettent au lecteur
d’identifier les constituants fondamentaux du cours. Les mots d’origine étrangères seront
ainsi systématiquement exposés dans une police sans sérif. Les exercices sont signalés par le
signe ➽, les remarques importantes par le signe ✒ et les exemples par le signe ☞.
Les figures importantes du domaine abordé dans ces pages pour lesquels des indications
biographiques sont fournies dans le chapitre 10 sont signalés dans le texte de cette façon :
Prénom Nom➠.
Les mots dont la structure et le sens sont détaillés dans le chapitre 11 sont signalés dans
le texte de cette façon : mot➲ ou bien par un appel en marge lorsque le mot lui-même n’est ➲ dérivé
pas une entrée.
Enfin, les concepts faisant l’objet d’une entrée dans le dictionnaire encyclopédique partiel
du chapitre 12 sont signalés dans le texte de cette façon : concept➥ ou bien par un appel en
marge lorsque le mot lui-même n’est pas une entrée. ➥ concept

vii
module un

logique(s)

1
chapitre un

une brève histoire de la logique

La logique sauve de l’ennui

Sir Arthur Conan Doyle


La ligue des rouquins

L’explication des lois de la logique a été une œuvre de longue haleine, depuis ses origines
en Grèce jusqu’à nos jours. Le critère que l’on peut retenir pour marquer la naissance de
la logique est le passage de l’implicite➲ à l’explicite➲, de l’usage implicite d’une logique à sa
formulation.

1.1 La logique d’Aristote


Le premier à avoir exposé des lois logiques est Aristote➠. Son œuvre, tributaire de la
dialectique➥ platonicienne, nous est parvenue sous la forme d’un recueil de traités qui porte
le titre d’organon : « instrument ». Aristote voyait dans la logique un instrument pour la
philosophie.
L’analyse du langage conduit Aristote à la découverte de la proposition attributive du
type suivant : « S est P ». Un nom et un verbe ne sont qu’une simple énonciation. Le
verbe est nécessaire pour constituter une authentique proposition, un discours déclaratif
susceptible d’être vrai ou faux. Il rapporte un prédicat à un sujet. Il y a autant de façons
d’affirmer ou de prédiquer qu’il y a de catégories. ➲ prédicat
Le syllogisme➲, l’autre grande découverte logique d’Aristote, est avec l’induction➲ l’une
des deux manières possibles de raisonner. Voici l’exemple qu’il donne : « Si A est affirmé
de tout B, et B de tout C, alors nécessairement A est affirmé de tout C ». Admettons que
perdre ses feuilles soit représenté par A, avoir de larges feuilles par B, et être une vigne par
C. Si A appartient à B (car toute plante à feuilles larges perd ses feuilles) et si B appartient
à C (car toute vigne est une plante à feuilles larges), alors A appartient à C, autrement dit,
toute vigne perd ses feuilles.
Avec l’emploi des variables et la réduction systématiques des termes concrets du raison-
nement à son schéma abstrait, commence une logique proprement formelle. Cependant, il ➲ formaliser
faut attendre la logique des stoı̈ciens pour que la distinction entre le raisonnement et son ➥ stoı̈cisme
schéma abstrait soit expressément formulée.

3
1 – une brève histoire de la logique

1.2 La logique médiévale


Avec la logique d’Aristote et celle des stoı̈ciens, se termine la première grande période
de recherche dans le domaine de la logique, et ce n’est qu’au Moyen Âge, plus précisément
au xive siècle, qu’on retrouve une période d’activité créatrice comparable. Un renversement
du centre d’intérêt va se produire dans l’œuvre de Buridan➠ : la syllogistique d’Aristote,
tenue jusque-là pour un des sommets de la logique, va se trouver subordonnée, comme
un cas particulier, à une théorie plus générale des conséquences. Du point de vue de la
➲ axiome formalisation, Albert de Saxe➠ va ébaucher une présentation axiomatique de la déduction,
œuvre d’explication considérable des lois de la logique jusque-là implicites, que retrouvera
sous une forme nouvelle la logique mathématique moderne.

1.3 La logique mathématique


Ces progrès dans la formalisation, atteints au xive siècle, vont tomber dans l’oubli pen-
dant plusieurs siècles, détrônés par le nouvel idéal de l’humanisme naissant, tandis que la
désaffection frappe l’œuvre d’Aristote. Cependant, deux siècles avant George Boole➠, Leib-
niz➠ formule le premier le projet d’une logique dégagée du langage naturel pour se créer
son propre langage purement formel, à la manière des mathématiques. Mais à la différence
de l’algèbre, qui ne s’applique qu’aux nombres, il faut trouver une algèbre générale capable
d’exprimer toutes les idées. L’importance de cette mutation opérée sur le langage philoso-
phique est telle qu’elle va rendre possible la transformation du raisonnement➲ en calcul➲.
C’est cette idée qui marque le passage de la logique ancienne à la logique moderne. Mais le
souci de Leibniz reste purement philosophique. Il faut attendre le passage de la logique des
mains des philosophes aux mains des mathématiciens pour en faire une science proprement
dite, dégagée de toute présupposition philosophique, afin que se trouve concrétisée l’idée de
Leibniz.
Ce n’est qu’au milieu du xixe siècle, avec la publication de Mathematical Analysis of
Logic, de Boole (1847), qu’une nouvelle forme de logique d’inspiration mathématique verra
le jour. « La logique, dit-il, n’a rien à voir avec la philosophie, avec l’étude du réel et la
recherche des causes. Nous ne devons plus associer la logique à la métaphysique, mais aux
mathématiques ».
La découverte de Boole, comme par la suite celle de Gottlob Frege➠, reconnu par les logi-
ciens d’aujourd’hui comme le véritable fondateur de leur science, n’a pas consisté à appliquer
à la logique un traitement quantitatif, mais plutôt à dégager l’appareil mathématique de son
application exclusive à la quantité. Les lois qui régissent l’algèbre ordinaire sont spécifiques
d’un certain domaine, mais on peut entendre l’algèbre dans un sens plus général, de manière
que ses calculs puissent s’appliquer à des entités autres que les nombres. Ce qui est premier
dans le calcul mathématique n’est pas l’interprétation qu’on donne aux symboles employés,
à savoir la quantité, mais leurs relations et les lois qui régissent leur combinaisons. C’est
cette découverte qui fonde la logique mathématique moderne.

4
chapitre deux

logique des propositions

Une proposition incorrecte est forcément


fausse, mais une proposition correcte n’est pas
forcément vraie

Emmanuel Kant

L’expression proposition désigne un énoncé du langage ordinaire mais considéré du point


de vue formel qui est celui de la logique. En clair, cela signifie que l’on traite seulement d’un
certain type d’énoncés et que l’on néglige dans ce type d’énoncés une série de paramètres
qui seront sans incidence logique.
Les propositions envisagées ici sont des énoncés descriptifs d’un état de fait et suscep-
tibles d’être vrais ou faux. S’il y a adéquation entre la proposition et les faits décrits, la
proposition est vraie, s’il n’y a pas adéquation, la proposition est fausse. Ainsi l’énoncé « le
chat du voisin est mort » sera vrai si le chat du voisin est mort au moment où on l’énonce.
Les propositions que nous considérons ici peuvent être simples ou complexes :
– « le chat du voisin est mort » est une proposition atomique. Il n’est pas possible de
la décomposer en des propositions plus simples.
– « Jean consulte ses sources, en fait une synthèse et passe à la phase d’écriture » est
en revanche une proposition complexe composée des propositions suivantes : « Jean
consulte ses sources », « Jean fait une synthèse de ses sources » et « Jean passe à la
phase d’écriture ».
La logique des propositions ou calcul propositionnel s’intéresse aux relations entre
propositions et aux opérations sur ces dernières sans analyser la composition non proposi-
tionnelle des propositions simples. Le calcul propositionnel ne s’occupe que des propositions
et est soumis à la thèse d’extensionnalité selon laquelle la valeur de vérité de toute propo-
sition composée dépend uniquement de la valeur de vérité des propositions composantes et
est donc formellement déterminable sans ambiguı̈té.
Le calcul propositionnel est la plus simple axiomatisation de la logique. Gottlob Frege
en propose en 1879 une première axiomatisation. Il se pose ainsi en fondateur de la logique
moderne. Il existe des analogies entre la sémantique des stoı̈ciens dans l’Antiquité et le
calcul propositionnel de Frege.

5
2 – logique des propositions

L’étude du calcul propositionnel suit la démarche suivante : définition du langage et


construction des formules, puis les aspects sémantiques sont abordés avant de d’aborder des
aspects algébriques. Enfin, les aspects déductifs sont traités avec toujours pour objectif un
souci de démonstration automatique.

2.1 Aspects syntaxiques


Pour décrire le calcul propositionnel, nous allons d’abord nous intéresser à ses aspects
➲ syntaxe syntaxiques, c’est-à-dire à la façon dont on écrit les formules➲. Pour cela, nous introduirons
les notations suivantes :
– P est l’ensemble (non nécessairement fini) des variables propositionnelles représentant
les énoncés considérés :
P = {p, q, r, . . .}
– C est l’ensemble des symboles➲ de connecteurs1 logiques :

C = {¬, ∧, ∨, →, ↔}

Nous utiliserons, de plus, les parenthèse ouvrante « ( » et fermante « ) » pour délimiter


la portée des différents connecteurs.
Soit F, l’ensemble des formules du calcul propositionnel sur P . Toute formule F de F
est de l’une des trois formes suivantes :
➊ F = p avec p ∈ P , F est alors dite formule élémentaire ;
➋ F = ¬(H) avec H ∈ F ;
➌ F = (H)(F ) avec  ∈ {∧, ∨, →, ↔} et (H, K) ∈ F 2 .

☞ exemple : (p) ∧ (q) est une formule du calcul propositionnel (elle est de la forme
➌, composée de deux formules de la forme ➊). Par contre, p ∧ q n’en est pas
une (du moins telles que nous les avons définies).

➽ exercice 1 : Définir des règles d’élimination des parenthèses.

2.1.1 Caractérisation par une grammaire syntaxique de Chomsky


La définition précédente est une définition purement inductive des formules du calcul
propositionnel. Il existe des manières plus formelles de les introduire. On peut ainsi utiliser
1 On rappelle la signification classique de ces connecteurs : ¬ (non), ∧ (et), ∨ (ou), → (implique) et ↔

(est équivalent à). Le connecteur ∧ est aussi appelé conjonction et le connecteur ∨, disjonction.

6
aspects syntaxiques

les travaux sur les grammaires➲ génératives2 de Noam Chomsky➠. Une grammaire générative
G de type 2 se présente sous la forme :

G = {VN , VT , S, R}

où :
– VN désigne le vocabulaire non terminal, à savoir ici S. Ainsi, VN = {S} ;
– VT désigne le vocabulaire terminal. Ici, VT = {(, )} ∪ P ∪ C ;
– S est le symbole de départ ;
– R est l’ensemble des règles de la grammaire. Ici, R = RN ∪RT avec3 RN = {r | ∈ C}
où : 
r¬ = (S, ¬(S))
∀ ∈ C \ {¬} r = (S, (S)(S))
et RT = {rp |p ∈ P } avec rp = (S, p).

✒ nota bene : On lit une règle de la forme (A, B) de la façon suivante : « je


remplace A par B ».

✒ nota bene : Le vocabulaire terminal est constitué des mots du langage. Ainsi,
dans la grammaire de la langue française, {le, chat, mange, la, souris}, font-ils
partie du vocabulaire terminal alors que les mots {article, nom, groupe nominal,
groupe verbal, phrase} font plutôt partie du vocabulaire non terminal. Notons
ici, que certains mots du vocabulaire non terminal peuvent sembler faire partie
du vocabulaire terminal mais, en pratique, il est nécessaire de les distinguer.

Une grammaire de Chomsky GCP de type 2 définissant les formules du calcul proposi-
tionnel est donc :

GCP = { {S}, P ∪ C ∪ {(, )}, S, RN ∪ RT }

On dit qu’un mot est correct (qu’il appartient au langage généré par une grammaire
G) si et seulement si c’est un mot sur VT (il appartient à VT∗ ) et qu’il « dérive » de S par
l’application d’un nombre fini de règles.

✒ nota bene : VT∗ représente toutes les combinaisons possibles d’un nombre
quelconque (éventuellement nul) d’éléments de VT . On les appelle les « mots »
sur VT .

2 Nous reviendrons en détail sur ces notions dans le module deux.


3 Le N dénote les règles « non terminales » c’est-à-dire qu’après leur application il reste encore des
symboles non terminaux. Par opposition, dans les règles de RT , on ne trouve que des règles « terminales » :
elles permettent de remplacer les éléments non terminaux restants par des éléments du vocabulaire terminal.

7
2 – logique des propositions

☞ exemple : (p) ∧ (q) est correct dans GCP car c’est bien un mot sur VT (il est
constitué d’éléments de VT juxtaposés) et qu’il peut être obtenu à partir de
S en appliquant successivement les règles r∧ , rp et rq . On note :
r
∧ rp rq
S =⇒ (S) ∧ (S) =⇒ (p) ∧ (S) =⇒ (p) ∧ (q)

On dit : « (p) ∧ (q) dérive de S par l’application de r∧ , rp et rq ».

➽ exercice 2 : Montrer que ((p) ∧ (q)) → (r) est correct pour GCP .

L’ensemble des mots corrects dans une grammaire G est appelé langage engendré par
G. Il est noté L(G). Par définition, F = L(GCP ).

2.1.2 Une nouvelle grammaire sous forme normale BNF


Il existe d’autres manières d’écrire les règles d’une grammaire de Chomsky. Une d’elles
est la forme normale BNF (Backus➠-Naur➠-Form). Sous cette forme, une grammaire définissant
les formules du calcul propositionnel est :

GCP = {VN , VT , <proposition>, R}

où :
– VN = { <proposition>, <implication>, <terme>, <facteur>, <proposition secondaire>,
<proposition primaire>}
– VT est inchangé
– R est donné sous la forme BNF suivante :
<prop.> ::= <impl.> | <prop.> ↔ <impl.>
<impl.> ::= <terme> | <implication> → <terme>
<terme> ::= <fact.> | <terme> ∨ <fact.>
<fact.> ::= <prop. sec.> | <fact.> ∧ <prop. sec.>
<prop. sec.> ::= <prop. prim.> | ¬ <prop. prim.>
<prop. prim.> ::= (<prop.>) | p (avec p ∈ P )

✒ nota bene : A ::= B | C s’écrit dans le formalisme précédent comme la réunion


des règles (A, B) et (A, C).

8
aspects syntaxiques

➽ exercice 3 : On donnera une représentation sous forme d’arbre syntaxique de


cet ensemble de règles. Qu’en est-il des parenthèses ?

➽ exercice 4 : Comment dérive-t-on p ∧ (q → r) (les parenthèse inutiles ont été


supprimées) ?

2.1.3 De la suppression complète des parenthèses


On peut se passer complètement des parenthèses dans le calcul propositionnel. Pour
cela, il faut utiliser les notations dites polonaises ou de Lukasiewicz➠.

Notation postfixée (ou inverse ou suffixée)


On définit la grammaire de Chomsky de type 2 suivante :

G′CP = { {S}, VT′ , S, ′


RN ∪ RT }

où :
– VT′ = P ∪ C ;
– S est le symbole de départ ;
′ ′
– RN = {r | ∈ C} où :
 ′
r¬ = (S, S¬)

∀ ∈ C \ {¬} r = (S, SS)

F ′ = L(G′CP ) désignera l’ensemble des formules construites sur P en notation postfixée.


Les formules classiques sont dites en notation infixe (ou infixées).

☞ exemple : L’expression infixée 1 + 2 s’écrit 1 · 2 · + en notation postfixée. On


notera l’utilisation d’un séparateur explicite (ici ·) pour séparer les opérandes.

➽ exercice 5 : Comment s’écrit la formule de L(GCP ) ¬(p ∧ q → r) dans L(G′CP )


(les parenthèses inutiles ont été supprimées) ?

9
2 – logique des propositions

Notation préfixée
On définit la grammaire de Chomsky de type 2 suivante :

G′′CP = { {S}, VT′ , S, ′′


RN ∪ RT }

où :
– S est le symbole de départ ;
′′ ′′
– RN = {r | ∈ C} où :
 ′′
r¬ = (S, ¬S)
′′
∀ ∈ C \ {¬} r = (S, SS)

F ′′ = L(G′′CP ) désignera l’ensemble des formules construites sur P en notation préfixée.

➽ exercice 6 : Comment s’écrit la formule de L(GCP ) ¬(p ∧ q → r) dans L(G′′CP )


(les parenthèses inutiles ont été supprimées) ?

D’une notation à l’autre


Considérons f ′ : RT ∪ RN −→ RT ∪ RN ′
telle que sa restriction à RT soit l’identité et
′ ′
∀ ∈ C, f (r ) = r . Soit F ∈ L(GCP ) une formule du calcul propositionnel en notation
b
r
parenthésée. On a alors S =⇒ F où rb est une séquence r1 , . . . , rn d’éléments de RT ∪ RN .
On peut utiliser f ′ pour déterminer la formule F ′ correspondant à F dans L(G′CP ) en
b)
f ′ (r
appliquant la dérivation suivante : S =⇒ F ′ où f ′ (b
r) est définie comme la séquence de

règles de RT ∪ RN : f ′ (r1 ), . . . , f ′ (rn ).

r¬ ,r→ ,r∧
☞ exemple : Soit F = ¬(p ∧ q → r) formule de F . On a S =⇒ F . La
formule correspondante F ′ de F ′ s’obtient alors par la séquence r¬
′ ′
, r→ ′
, r∧ .

On a alors directement F = pq ∧ r → ¬. Notons ici qu’aucun séparateur
n’est nécessaire.

✒ nota bene : On peut définir de la même façon des correspondances entre les
règles de GCP et G′′CP ainsi que les correspondances inverses permettant de
réaliser toutes les traductions de formules.

➽ exercice 7 : Comment s’écrit la formule de L(GCP ) ¬(p ∧ q → r) dans L(G′′CP )


(utiliser ici la méthode venant d’être décrite) ?

10
aspects sémantiques

➽ exercice 8 : Il est aussi possible de réaliser ces transformations en réalisant


des parcours d’arbre. Sauriez-vous dire dans quel arbre et quels parcours pour
quelles transformations ? Indice : il peut être utile de chercher à représenter
la formule à traduire dans un formalisme indépendant de la notation.

➽ exercice 9 : Définir une grammaire engendrant les expressions algébriques


usuelles en notation parenthésée. En déduire les grammaires engendrant les
expressions algébriques usuelles en notation postfixée puis préfixée. Enfin, ap-
pliquer les règles de transformation pour « traduire » : x2 + y 2 en notation
préfixée et postfixée.

2.2 Aspects sémantiques


Après avoir abordé l’écriture des formules du calcul propositionnel, il est temps de se
préoccuper de leur sémantique➲, c’est-à-dire du « sens » qu’on peut leur donner. Nous nous
intéressons ici à une logique binaire (bivaluée). Les deux valeurs possibles sont : vrai (noté
) et faux (noté ).

✒ nota bene : Dans ce document, on emploiera toujours les notations  et  mais


dans tout document manuscrit, on emploiera plutôt la convention habituelle
qui considère 1 comme représentant la valeur vrai et 0 la valeur faux.

2.2.1 Définitions
À chaque connecteur logique c (c ∈ C), on associe un opérateur c. Ainsi, au connecteur
¬ est associé l’opérateur unaire ¬ de {, } dans {, } tel que ¬() =  et ¬() = .
Les opérateurs binaires (∧, ∨, →, ↔) sont donnés par les tableaux4 de la figure 2.1.

➽ exercice 10 : Lors d’un procès, le procureur général déclare : « si l’accusé est


coupable, il a un complice » et l’avocat de la défense de répliquer : « c’est
faux ! ». Pourquoi s’agit-il d’un mauvais avocat ?

4 La lecture se fait de la gauche vers la droite pour les opérateurs non commutatifs.

11
2 – logique des propositions

∧   ∨   →   ↔  
           
           

Fig. 2.1 — Tableaux définissant les opérateurs binaires usuels.

Interprétations et tables de vérité


À chaque variable propositionnelle p est associée une interprétation ou valeur de vérité
notée δ(p) où δ est une application de P dans {, }. L’interprétation d’une formule quel-
conque du calcul propositionnel est donnée par le prolongement de δ, noté δ, à l’ensemble
des formules en posant :
➊ δ(p) = δ(p) avec p ∈ P ;
➋ δ(¬F ) = ¬(δ(F )) avec F ∈ F ;
➌ δ(F △G) = δ(F )△δ(G) avec △ ∈ {∧, ∨, →, ↔} et (F, G) ∈ F 2 .

✒ nota bene : Par la suite, nous noterons δ au lieu de δ lorsqu’il n’y aura pas
d’ambiguı̈té possible.

Une autre représentation des opérateurs binaires correspondant aux connecteurs de GCP
se fait par table de vérité comme dans la figure 2.2. Chaque ligne de la table de vérité
correspond alors à une interprétation ou valeur de vérité. On peut ainsi écrire une table de
vérité pour une formule.

p q p∧q p∨q p→q p↔q


     
     
     
     

Fig. 2.2 — Tables de vérité des opérateurs binaires usuels

☞ exemple : La table de vérité de la formule (¬p → q) ∧ (q ↔ r) est donnée par


le tableau de la figure 2.3.

12
aspects sémantiques

p q r ¬p ¬p → q q↔r (¬p → q) ∧ (q ↔ r)
      
      
      
      
      
      
      
      

Fig. 2.3 — Table de vérité de la formule (¬p → q) ∧ (q ↔ r)

Des formules particulières


Une formule F est consistante (ou satisfiable) si et seulement si il existe une in-
terprétation pour laquelle la formule soit vraie : ∃δ, δ(F ) = .

☞ exemple : F = (¬p → q) ∧ (q ↔ r) est une formule consistante. En effet,


dans l’interprétation dans laquelle δ(p) = , δ(q) =  et δ(r) = , on a
δ(F ) =  comme le montre la table de vérité représentée dans la figure 2.3.

Une formule F est inconsistante (ou contradictoire, ou encore insatisfiable) si et


seulement si toute interprétation de la formule est fausse : ∀δ, δ(F ) = . On dit aussi que
F est une antilogie.

☞ exemple : p ∧ ¬p est une formule inconsistante. Sa table de vérité représentée


dans la figure 2.4 ne comporte que des .

p ¬p p ∧ ¬p
  
  

Fig. 2.4 — Table de vérité de la formule p ∧ ¬p

Une formule F est une tautologie➲ (on note ⊢ F ) si et seulement si elle est toujours
vraie : ∀δ, δ(F ) = . On note T l’ensemble des tautologies. On a : T ⊂ F ⊂ VT∗ .

☞ exemple : p ∨ ¬p est une tautologie. Sa table de vérité représentée dans la


figure 2.5 ne comporte que des .

13
2 – logique des propositions

p ¬p p ∨ ¬p
  
  

Fig. 2.5 — Table de vérité de la formule p ∨ ¬p

Deux formules F et G sont tautologiquement équivalentes (on note ⊢ F ↔ G) si et


seulement si elles ont les mêmes interprétations, c’est-à-dire :

∀δ, δ(F ) = δ(G) ou encore ∀δ, δ(F ↔ G) = 

✒ nota bene : Comme le montre la notation, montrer que deux formules F et


G sont tautologiquement équivalentes revient à montrer que F ↔ G est une
tautologie.

☞ exemple : p → q et ¬p ∨ q sont tautologiquement équivalentes. En effet,


la table de la vérité représentée dans la figure 2.6 montre que pour chaque
interprétation δ, l’interprétation des deux formules est la même. On peut donc
écrire : ⊢ (p → q) ↔ (¬p ∨ q).

p q ¬p p→q ¬p ∨ q
    
    
    
    

Fig. 2.6 — Tables de vérité des formules p → q et ¬p ∨ q

Soit F , G et H trois éléments quelconques de F. Voici quelques équivalences tautolo-


giques bien connues :
– ⊢ (F ↔ G) ↔ ((F → G) ∧ (G → F )) double implication
– ⊢ (F → G) ↔ (¬F ∨ G) lien implication – disjonction
– ⊢ (F ∨ G) ↔ (G ∨ F ) commutativité de la disjonction
– ⊢ (F ∧ G) ↔ (G ∧ F ) commutativité de la conjonction
– ⊢ (F ∨ (G ∨ H)) ↔ ((F ∨ G) ∨ H) associativité de la disjonction
– ⊢ (F ∧ (G ∧ H)) ↔ ((F ∧ G) ∧ H) associativité de la conjonction
– ⊢ (F ∨ (G ∧ H)) ↔ ((F ∨ G) ∧ (F ∨ H)) distributivité
– ⊢ (F ∧ (G ∨ H)) ↔ ((F ∧ G) ∨ (F ∧ H)) distributivité

14
aspects sémantiques

– ⊢ (F ∨ ) ↔ F et ⊢ (F ∧ ) ↔ F éléments neutres
– ⊢ (F ∨ ) ↔  et ⊢ (F ∧ ) ↔  éléments absorbants
– ⊢ (F ∨ ¬F ) ↔  tiers exclu
– ⊢ (F ∧ ¬F ) ↔  non contradiction
– ⊢ ¬(¬F ) ↔ F double négation
– ⊢ ¬(F ∨ G) ↔ (¬F ∧ ¬G) loi de De Morgan➠
– ⊢ ¬(F ∧ G) ↔ (¬F ∨ ¬G) autre loi de De Morgan
– ⊢ (F → (G → H)) ↔ ((F ∧ G) → H) simplification

➽ exercice 11 : Montrer les équivalences ci-dessus.

2.2.2 Morphisme de substitution et valeur de vérité


Soit f un morphisme de substitution c’est-à-dire une fonction définie de VT∗ vers VT∗ telle
que sa restriction à P est à valeurs dans F et sa restriction aux autres symboles terminaux
est l’identité. Concrètement, un morphisme de substitution permet de remplacer chaque va-
riable propositionnelle par une formule F . On définit f (x1 x2 . . . xn ) = f (x1 )f (x2 ) . . . f (xn )
pour tout xi ∈ VT .

☞ exemple : Soit f un morphisme de substitution tel que f (p) = (p → q) et


f (q) = r. On a alors, f (p ∧ q) = f (p)f (∧)f (q) = (p → q) ∧ r.

Théorème 1
Soit δ ∈ {, }P . Considérons δ ′ ∈ {, }P défini par : ∀p ∈ P, δ ′ (p) =
δ(f (p)) alors :
δ′ = δ ◦ f

Il est possible de démontrer ce résultat par récurrence (forte) sur la longueur (nombre
de constituants) des formules.
➊ si |F | = 1, on a F ∈ P et on a clairement le résultat
➋ supposons le résultat établi pour toute formule de longueur au plus égale à n et soit
F de longueur n + 1. On a alors deux cas possibles :
➀ F = ¬(H) avec H ∈ F et |H| = n − 2. On a alors les égalités suivantes :
δ ′ (F ) = ¬(δ ′ (H)) = ¬(δ(f (H))) = δ(¬(f (H))) = δ(f (¬(H))) = δ(f (F ))

15
2 – logique des propositions

➁ F = (H)△(K) avec △ ∈ C \ {¬}, H ∈ F, K ∈ F, |H| < n et |K| < n. On a


alors :
δ ′ (F ) = δ ′ ((H)△(K))
= δ ′ (H)△δ ′ (K)
= δ(f (H))△δ(f (K))
= δ(f (H)△f (K))
= δ(f (H)f (△)f (K))
= δ(f ((H)△(K)))
= δ(f (F ))

☞ exemple : Soit f un morphisme de substitution tel que f (p) = (p → q) et


f (q) = r. Par définition, δ ′ (p) = δ(p → q) et δ ′ (q) = δ(r). Par application
du théorème 1, δ ′ (p ∧ q) = δ ◦ f (p ∧ q) = δ((p → q) ∧ r).

Corollaire 1
T est stable pour tout morphisme de substitution, c’est-à-dire :

∀f, f (T ) = T

Soit F une tautologie. Soit δ ∈ {, }P . D’après le théorème 1, on a : δ(f (F )) = δ ′ (F ).


Comme F est une tautologie, δ(f (F )) = . f (F ) est donc aussi une tautologie.

➽ exercice 12 : On dit qu’une formule ternaire F vérifie la condition de cir-


cularité, si pour toute interprétation, on a : δ(F (p, q, r)) = δ(F (r, p, q)) =
δ(F (q, r, p)). Montrer que toute tautologie vérifie la condition de circularité.

Corollaire 2
Soient deux morphismes de substitutions f1 et f2 tels que ∀p ∈ P, ⊢ f1 (p) ↔
f2 (p). Alors, on a :
∀F ∈ F, ⊢ f1 (F ) ↔ f2 (F )

➽ exercice 13 : Démontrer le corollaire 2.

16
aspects sémantiques

☞ exemple : Soit f1 et f2 deux morphismes de substitution définis de la façon


suivante : f1 (p) = p → q, f2 (p) = ¬p ∨ q, f1 (q) = q → r, f2 (q) = ¬q ∨
r. Comme ∀p ∈ P, ⊢ f1 (p) ↔ f2 (p), on peut en déduire que ∀F ∈ F , ⊢
f1 (F ) ↔ f2 (F ) c’est-à-dire que si F = p ∧ q → r, alors f1 (F ) = ((p →
q) ∧ (q → r) → (p → r)) est tautologiquement équivalente à f2 (F ) =
((¬p ∨ q) ∧ (¬q ∨ r) → (¬p ∨ r)). Autrement dit, dans toute formule F , on
peut remplacer toute sous-formule par une formule équivalente.

2.2.3 Formules et fonctions booléennes


Une fonction booléenne n-aire est une application de {, }n dans {, }. Soit B
l’ensemble des fonctions booléennes :
[ n
B= {, }{,}
n∈N+

➽ exercice 14 : Combien y a-t-il de fonctions booléennes à 9 variables ?

Une formule sera notée F (p1 , p2 , . . . , pn ) si et seulement si les seules variables proposi-
tionnelles ayant des occurences5 dans F sont prises dans {p1 , p2 , . . . , pn }, c’est-à-dire :

F ∈ ({p1 , p2 , . . . , pn } ∪ C ∪ {(, )})

À toute formule F telle que l’on ait F (p1 , p2 , . . . , pn ), on associe la fonction booléenne
n-aire F telle que pour δ ∈ {, }P vérifiant ∀i ∈]n], δ(pi ) = xi , on ait :

∀(x1 , . . . xn ) ∈ {, }n , F (x1 , . . . , xn ) = δ(F )

On dit alors que F est représentée par F . On a :

⊢ F ↔ G si et seulement si F =G

Théorème 2
Toute fonction booléenne peut être représentée par une formule.

5 Place occupée par un symbole dans une formule.

17
2 – logique des propositions

Nous allons prouver le résultat par récurrence sur l’ordre de la fonction booléenne.
➊ n = 1 ; il existe 4 fonctions booléennes d’une variable. Elle sont rappelées dans le
tableau6 de la figure 2.7. Pour i ∈ [3], ϕi est représenté par Fi avec F0 = p ∧ ¬p,
F1 = p, F2 = ¬p et F3 = p ∨ ¬p.
➋ supposons le résultat établi jusqu’à l’ordre n et soit ϕ une fonction booléenne (n + 1)-
aire. À partir de ϕ, on définit deux fonctions booléennes n-aires en posant, pour
(x1 , . . . , xn ) ∈ {, }n :
ϕ′ (x1 , . . . , xn ) = ϕ(x1 , . . . , xn , )
ϕ′′ (x1 , . . . , xn ) = ϕ(x1 , . . . , xn , )

Par hypothèse de récurrence, ϕ′ et ϕ′′ sont respectivement représentées par F ′ (p1 , . . . , pn )


et F ′′ (p1 , . . . , pn ). Montrons que ϕ est représentée par :
F (p1 , . . . , pn+1 ) = (¬pn+1 ∧ F ′ (p1 , . . . , pn )) ∨ (pn+1 ∧ F ′′ (p1 , . . . , pn ))
Soit (x1 , . . . , xn+1 ) ∈ {, }n+1 et δ ∈ {, }P telle que ∀i ∈]n + 1], δ(pi ) = xi . On
cherche donc à montrer que δ(F ) = ϕ(x1 , . . . , xn+1 ).
➀ soit xn+1 =  c’est-à-dire δ(pn+1 ) = , alors :
δ(F ) = δ(F ′ ) = ϕ′ (x1 , . . . , xn ) = ϕ(x1 , . . . , xn , ) = ϕ(x1 , . . . , xn+1 )
➁ soit xn+1 =  c’est-à-dire δ(pn+1 ) = , alors :
δ(F ) = δ(F ′′ ) = ϕ′′ (x1 , . . . , xn ) = ϕ(x1 , . . . , xn , ) = ϕ(x1 , . . . , xn+1 )

ϕ0 ϕ1 ϕ2 ϕ3
    
    

Fig. 2.7 — Les 4 fonctions booléennes à une variable

➽ exercice 15 : Déterminer les formules associées à chacune des fonctions booléennes


à deux variables.

2.2.4 Réduction de formules


Manipuler les formules du calcul propositionnel n’est pas toujours aisé étant donné le
nombre de connecteurs différents. Nous allons donc maintenant nous attacher à représenter
les formules en limitant le nombre de connecteurs différents utilisés et en normalisant l’« al-
lure » des formules manipulées.
6 On notera dans le tableau de la figure 2.7 que le numéro de chaque fonction correspond exactement à

la représentation décimale de la représentation binaire de chaque colonne.

18
aspects sémantiques

Systèmes complets de connecteurs


Un ensemble S de symboles de connecteurs est dit système complet de connecteurs
si et seulement si toute formule est tautologiquement équivalente à une formule qui ne
contient que les symboles de connecteurs de S. Ceci s’écrit :

∀F ∈ F, ∃H ∈ F ∩ (P ∪ S ∪ {(, )}) , ⊢F ↔H

Théorème 3
{¬, ∨} est un système complet de connecteurs.

Nous allons le prouver par récurrence sur la longueur des formules.


➊ n = 1, on a alors F ∈ P ; le résultat est immédiat.
➋ supposons le résultat établi pour toutes les formules de longueur au plus égale à n.
Soit F une formule de longueur n + 1. Deux cas se présentent :
➀ F = ¬(K) avec |K| < n. Par hypothèse de récurrence, il existe K ′ tautologique-
ment équivalente à K ne contenant que les symboles de connecteurs ¬ et ∨. d’où
¬(K ′ ) ne contient que les symboles voulus et est tautologiquement équivalente à
F = ¬(K).
➁ F = (K1 )△(K2 ) avec △ ∈ C \ {¬} et |K1 | + |K2 | < n. Par hypothèse de
récurrence, il existe K1′ et K2′ tautologiquement équivalentes à K1 et K2 et ne
contenant que les symboles de connecteurs ¬ et ∨. Alors, on a :
à (K1 ) ∨ (K2 ) correspond (K1′ ) ∨ (K2′ )
à (K1 ) ∧ (K2 ) correspond ¬(¬(K1′ ) ∨ ¬(K2′ ))
à (K1 ) → (K2 ) correspond (¬(K1′ )) ∨ (K2′ )
à (K1 ) ↔ (K2 ) correspond ¬((K1′ ) ∨ (K2′ )) ∨ ¬(¬(K1′ ) ∨ ¬(K2′ ))

Corollaire 1
Les systèmes suivants sont des systèmes complets de connecteurs :

{¬, ∧} {¬, →} {↑} {↓}

où les connecteurs ↑ et ↓ sont respectivement dénommés nand et nor et


définis par les tables de vérités de la figure 2.8.

✒ nota bene : On a : ⊢ (p ↓ q) ↔ (¬(p ∨ q)) et ⊢ (p ↑ q) ↔ (¬(p ∧ q)).

19
2 – logique des propositions

p q p↑q p↓q
   
   
   
   

Fig. 2.8 — Tables de vérité des opérateurs nand (↑) et nor (↓)

➽ exercice 16 : Démontrer le corollaire 1.

➽ exercice 17 : Écrire la formule p ∧ q → r dans le système {¬, ∨} puis dans le


système {↓}.

Formes normales
Les éléments de P , ensemble des variables propositionnelles, sont appelés littéraux
positifs. Les éléments de P¬ , ensemble des négations des variables propositionnelles (P¬ =
{¬p|p ∈ P }), sont appelés littéraux négatifs.
➲ normaliser Une formule F est dite sous forme normale disjonctive si et seulement si :
➲ disjonction _
F = Hi et ∀i ∈]k], Hi ∈ (P ∪ P¬ ∪ {∧, (, )})+
i∈]k]

✒ nota bene : V + représente toutes les combinaisons possibles d’un nombre quel-
conque (nécessairement non nul) d’éléments de V . Hi est alors une conjonc-
tion de littéraux et F une disjonction de conjonctions (un ∨ de ∧).

☞ exemple : (p ∧ ¬q ∧ r) ∨ (s ∧ t) est une formule sous forme normale conjonctive.

Si, de plus, dans chaque Hi figurent toutes les variables ou leur négation, on parle alors
de forme canonique.

20
aspects sémantiques

☞ exemple : (p∧q)∨(p∧r) est une formule sous forme normale disjonctive mais elle
n’est pas sous forme canonique. Par contre, (p∧q∧r)∨(p∧q∧¬r)∨(p∧¬q∧r)
est une formule sous forme normale disjonctive canonique.

➽ exercice 18 : Montrer que les deux formules de l’exemple précédent sont tau-
tologiquement équivalentes.

En échangeant les symboles de connecteur ∨ et ∧, on a la notion de forme normale


conjonctive : une formule F est dite sous forme normale conjonctive (ou forme clausale) ➲ conjonction
si et seulement si elle s’écrit :
^
F = Hi et ∀i ∈]k], Hi ∈ (P ∪ P¬ ∪ {∨, (, )})+
i∈]k]

✒ nota bene : Hi est alors une disjonction de littéraux (ou clause) et F une
conjonction de clauses (un ∧ de ∨).

Théorème 4
Toute formule du calcul propositionnel est équivalente à une formule sous
forme normale disjonctive.

➽ exercice 19 : Démontrer le théorème 4 par récurrence sur le nombre de variables


dans la formule considérée.

☞ exemple : Soit une fonction booléenne ϕ à trois variables prenant la valeur


 pour les triplets (, , ), (, , ) et (, , ) et la valeur  pour les
autres. (¬p ∧ ¬q ∧ ¬r) ∨ (¬p ∧ q ∧ ¬r) ∨ (¬p ∧ q ∧ r) est une représentation
de ϕ sous forme normale disjonctive canonique. (¬p ∧ ¬r) ∨ (¬p ∧ q) est est
une représentation sous forme normale disjonctive simplifiée.

21
2 – logique des propositions

Corollaire 1
Toute formule du calcul propositionnel est équivalente à une formule sous
forme normale conjonctive

➽ exercice 20 : Démontrer le corollaire 1.

☞ exemple : ¬p ∧ (q ∨ ¬r) est une représentation de la fonction booléenne ϕ de


l’exemple précédent sous forme normale conjonctive simplifiée.

Un outil pour les formes normales


Le diagramme de Karnaugh➠ est un outil qui permet d’obtenir une représentation
condensée d’une table de vérité. Le diagramme de Karnaugh d’une fonction booléenne
à deux variables est semblable aux tables de vérité vues pour les opérateurs usuels (voir
figure 2.9). Pour trois variables, le diagramme est modifié comme on peut le voir sur la
même figure. Il est important de noter que, dans un diagramme de Karnaugh, deux cases
contiguës (en ligne ou en colonne) ne diffèrent que par le changement de valeur de vérité
d’une unique variable (cela est aussi valable sur les « bords » du tableau, transformant ainsi
le diagramme de Karnaugh en un tore multidimensionnel).
p pq
q   r    
       
       

Fig. 2.9 — Diagrammes de Karnaugh à 2 (pour p ∧ q) et 3 (pour (p ∧ q) ↔ r) variables.

➽ exercice 21 : À quoi ressemblerait un diagramme de Karnaugh à 5 variables ?

22
aspects sémantiques

➽ exercice 22 : Suite à un problème d’absentéisme, le directeur des études d’un


institut mène son enquête. Après avoir interrogé différentes personnes, il sait
que trois affirmations parmi les cinq suivantes sont vraies. Qui a séché ?
➊ Archiduc : « je n’ai pas séché le cours »
➋ Cale : « j’ai séché le cours avec Lelinge »
➌ Lelinge : « je n’ai pas séché avec Cale mais avec Archiduc »
➍ Sahara : « Archiduc n’était pas au cours »
➎ Le prof : « j’ai vu Archiduc au cours »

Le diagramme de Karnaugh est aussi utile pour calculer les formes normales disjonctives
et conjonctives. Ainsi, à partir du diagramme de Karnaugh de la formule (p ∧ q) ↔ r donné
par la figure 2.9, on peut, en regardant les conditions d’obtention d’un , donner tout
simplement une forme normale disjonctive canonique.

☞ exemple : Au vu du diagramme de la figure 2.9, on constate que (p ∧ q) ↔ r


est tautologiquement équivalente à :

(¬p ∧ ¬q ∧ ¬r) ∨ (¬p ∧ q ∧ ¬r) ∨ (p ∧ q ∧ r) ∨ (p ∧ ¬q ∧ ¬r)

Une telle formule peut être simplifiée. Ainsi, dans l’exemple précédent, (¬p ∧ ¬q ∧ ¬r) ∨
(¬p∧q∧¬r) est équivalente (en factorisant) à (¬p∧¬r)∧(¬q∨q) ce qui s’écrit aussi (¬p∧¬r).
Le diagramme de Karnaugh peut aider à faire de telles simplifications. En effet, les deux
formules que nous avons simplifiées correspondent à des cases contiguës du diagramme. On
peut généraliser ce résultat à des groupes de 4, 8, . . ., 2n cases contiguës7 ayant même
valeurs.

➽ exercice 23 : Donner une forme normale disjonctive simplifiée de (p ∧ q) ↔ r.

➽ exercice 24 : Les  donnent la forme normale disjonctive. Comment obtenir la


forme normale conjonctive et pourquoi ?

7 On n’oubliera pas dans ce processus que le diagramme de Karnaugh est un tore multidimensionnel,

c’est-à-dire que deux cases non contiguës physiquement peuvent l’être logiquement.

23
2 – logique des propositions

➽ exercice 25 : En déduire une forme normale conjonctive simplifiée de (p∧q) ↔ r.

➽ exercice 26 : Une banque vient d’installer un nouveau coffre-fort. Le coffre-fort


ne doit pouvoir être ouvert que par :
– le directeur et le secrétaire général ensemble, ou bien par,
– le directeur, le caissier et le comptable ensemble, ou bien par,
– le secrétaire général, le comptable et l’adjoint du caissier.
Ces ensembles de personnes (et les ensembles les incluant) sont les seules
possibilités existantes pour ouvrir le coffre. Combien faut-il installer de serrures
au minimum sur ce coffre et comment répartir les clefs de ces serrures ?

2.3 Aspects algébriques


Il est possible d’établir des liens forts entre le calcul propositionnel et différentes struc-
tures algébriques. C’est Georges Boole➠ qui a montré les résultats les plus importants sur
ce sujet.

2.3.1 Algèbre de Boole


Une algèbre de Boole est la donnée de :
– un ensemble E
– deux éléments particuliers de E : ⊥ et ⊤
– deux opérations binaires sur E : ⊕ et ⊗
– une opération unaire sur E : a
qui vérifient les propriétés suivantes :
➊ commutativité : a ⊕ b = b ⊕ a et a ⊗ b = b ⊗ a
➋ associativité : (a ⊕ b) ⊕ c = a ⊕ (b ⊕ c) et (a ⊗ b) ⊗ c = a ⊗ (b ⊗ c)
➌ distributivité : a ⊕ (b ⊗ c) = (a ⊕ b) ⊗ (a ⊕ c) et a ⊗ (b ⊕ c) = (a ⊗ b) ⊕ (a ⊗ c)
➍ éléments neutres : a ⊕ ⊥ = a et a ⊗ ⊤ = a
➎ complémentation : a ⊕ a = ⊤ et a ⊗ a = ⊥

☞ exemple : Pour tout ensemble E, P(E), l’ensemble des parties de E est une
algèbre de Boole, avec ⊕ = ∪, ⊗ = ∩, ⊥ = ∅, ⊤ = E et la complémentation
est l’opération usuelle sur les ensembles (c’est-à-dire ∁E ).

24
aspects algébriques

Boole a montré les résultats suivants :

Théorème 5
⊕ et ⊗ sont idempotentes :

a⊕a=a a⊗a=a

Théorème 6
⊤ et ⊥, neutres pour, respectivement, ⊗ et ⊕ sont absorbants pour, respec-
tivement, ⊕ et ⊗ :
a⊕⊤=⊤ a⊗⊥=⊥

Théorème 7
Les lois de de Morgan s’appliquent :

a⊕b=a⊗b a⊗b=a⊕b

Théorème 8
Les lois suivantes (dite d’absorption) sont vérifiées :

a ⊕ (a ⊗ b) = a a ⊗ (a ⊕ b) = a

➽ exercice 27 : Démontrer les théorèmes 5 à 8.

25
2 – logique des propositions

➽ exercice 28 : Montrer que la complémentation est une opération involutive,


c’est-à-dire : x = x.

On peut aussi définir une algèbre de Boole à partir d’un ensemble A ordonné par la
relation ∝ tel que tout sous-ensemble à deux éléments {x, y} a une borne supérieure notée
sup(x, y) et une borne inférieure notée inf(x, y). En effet, en posant x ⊕ y = inf(x, y) et
x ⊗ y = sup(x, y), on obtient les conditions précisées ci-dessus en s’assurant de plus que
A possède un plus grand élément (noté ⊤) et un plus petit élément (noté ⊥) et que tout
élément possède un complément x qui vérifie : sup(x, x) = ⊤ et inf(x, x) = ⊥.

➽ exercice 29 : Montrer que dans une algèbre de Boole, le complément d’un


élément est unique.

2.3.2 Treillis de Boole


Une algèbre de Boole définit un treillis distributif complémenté. On l’appelle treillis de
Boole. En effet, (E, ⊕, ⊗) est un treillis puisque ⊕ et ⊗ sont associatives, commutatives,
idempotentes et vérifient les lois d’absorption. (E, ⊕, ⊗) est distributif puisque ⊕ et ⊗ sont
distributives l’une par rapport à l’autre. (E, ⊕, ⊗) est complémenté car ⊕ et ⊗ possèdent
chacune un élément neutre (respectivement, ⊥ et ⊤) et ∀x∃y(x ⊕ y = ⊤) ∧ (x ⊗ y = ⊥). y
est le complément de x, il s’agit de x.

2.3.3 Anneau de Boole


Une algèbre de Boole définit un anneau commutatif idempotent unitaire. On l’appelle
anneau de Boole. En effet, si on définit l’opération x6y = (x⊕y)⊗(x⊕y), on peut montrer
que (E, 6) est un groupe abélien (6 est associative, commutative, possède un élément
neutre (⊥) et tout élément a un symétrique), que (E, 6, ⊗) est un anneau commutatif et
idempotent (puisque ⊗ est à la fois commutative et idempotente). C’est aussi un anneau
unitaire puisque ⊤ est neutre pour ⊗.

➽ exercice 30 : Montrer que dans un anneau de Boole, tout élément est son propre
symétrique pour la loi 6.

☞ exemple : Pour tout ensemble E, P(E) l’ensemble des parties de E muni de


la différence symétrique (△) et de l’intersection (∩) est un anneau de Boole.

26
aspects algébriques

Théorème 9
Tout anneau de Boole est un treillis de Boole

➽ exercice 31 : Soit (E, 6, ⊗) un anneau de Boole. En posant x ⊕ y = x 6 y 6


(x ⊗ y), montrer que (E, ⊕, ⊗) est un treillis de Boole.

Théorème 10
Tout treillis de Boole est un anneau de Boole.

✒ nota bene : On a déjà montré ce théorème en introduisant la notion d’anneau


de Boole.

Théorème 11 (Théorème de Stone) – non démontré


Tout anneau de Boole est isomorphe à un anneau de parties d’un ensemble

2.3.4 Algèbres de Boole et calcul propositionnel


({, }, ∧, ∨) est un treillis de Boole. Il suffit de dire que ⊤ = , ⊥ = , ⊕ = ∨, ⊗ = ∧
et a = ¬. Dans ce cas, 6 est le ou exclusif ou xor.

➽ exercice 32 : Donner la table de vérité du xor

De même, pour tout ensemble E, l’ensemble des applications de E dans {, } noté
{, }E est une algèbre de Boole. On posera (f ⊗ g)(x) = f (x) ∧ g(x), (f ⊕ g)(x) =
f (x) ∨ g(x).

27
2 – logique des propositions

✒ nota bene : On notera les liens étroits entre les opérations ⊕ (resp. ⊗, 6), ∪
(resp. ∩, △) et ∨ (resp. ∧, xor).

Soit F, l’ensemble des formules du calcul propositionnel construites sur P . On définit


une relation d’équivalence sur F notée ≡ par :

F1 ≡ F2 ssi ⊢ F1 ↔ F2

L’ensemble quotient de F par ≡ noté F/≡ est appelé Algèbre de Lindenbaum➠. On


note Fb la classe d’équivalence d’une formule F .

☞ exemple :
p\
→ q = {p → q, ¬p ∨ q, ¬q ∨ ¬p, . . .}

On établit que F/≡ muni de la relation d’ordre ∝ définie par : H ∝ K ssi ⊢ H → K est
une algèbre de Boole avec :
– Hb ⊗K b =H \ ∧K
– Hb ⊕K b =H \ ∨K
– Hb = ¬Hd
ˆ
– ⊤ =  = T l’ensemble des tautologies
– ⊥= ˆ = T¬ l’ensemble des antilogies

Théorème 12
F/≡ ne peut être isomorphe à l’anneau de Boole des parties d’un ensemble
E

En effet, supposons qu’il existe un isomorphisme f de P(E) dans F/≡ . Soit a ∈ E, alors
f ({a}) = (Fd) avec F = F (p1 , . . . , pn ). Comme a 6= ∅ (ce n’est pas le plus petit élément de
P(E), on a : Fb 6= . ˆ Donc, en posant G = F ∧ pn+1 , on a G b 6= .
ˆ Comme ⊢ G → F (par
définition de G), on a : Gb ∝ Fb avec G 6= F . L’isomorphisme f donne : f −1 (G) b ( f −1 (Fb)
b ( {a}. D’où : f −1 (G)
c’est-à-dire f −1 (G) b = ∅ c’est-à-dire G
b= ˆ ce qui est contradictoire.

28
aspects déductifs

Théorème 13
F/≡ est isomorphe à un anneau de parties de l’ensemble E = {, }P ,
c’est-à-dire un sous-ensemble non vide de E stable pour la complémentation
et l’union.

➽ exercice 33 : Montrer le théorème précédent en montrant que f défini de


F /≡ dans P({, }P ) par : f (Fb) = {δ ∈ {, }P |δ(F ) = } est un
isomorphisme.

2.4 Aspects déductifs


Nous savons maintenant écrire correctement les formules du calcul propositionnel, dé-
terminer la valeur de vérité d’une formule quelconque et établir des liens entre calcul propo-
sitionnel et structures algébriques. Il est maintenant temps de passer aux aspects déductifs ➲ déduire
du calcul propositionnel.

2.4.1 Notion de conséquence logique


Soit A = {F1 , . . . , Fn } un ensemble de formules du calcul propositionnel et G une for-
mule. On dit que G est conséquence logique de A ce que l’on note A ⊢ G, si et seulement
si toute distribution de valeur de vérité (c’est-à-dire toute interprétation) satisfaisant simul-
tanément toutes les formules de A satisfait G.

☞ exemple : On a ainsi : {p → q, p} ⊢ q et aussi {p → q, ¬q} ⊢ ¬p

➽ exercice 34 : Que dire d’une formule qui est conséquence de ∅ ?

Théorème 14
A ⊢ G si et seulement si ⊢ (F1 ∧ . . . ∧ Fn ) → G.

29
2 – logique des propositions

➽ exercice 35 : Démontrer le théorème précédent.

Théorème 15
A ⊢ G si et seulement si F1 ∧ . . . ∧ Fn ∧ ¬G est inconsistante.

➽ exercice 36 : Démontrer le théorème précédent.

✒ nota bene : Le théorème 15 représente ce qu’on appelle communément le


raisonnement par l’absurde ou la réfutation.

2.4.2 Systèmes formels


Un système formel (ou théorie formelle) S est la donnée de :
– un ensemble dénombrable V de symboles ;
– un sous-ensemble F de V ∗ appelé ensemble des formules ;
– un sous-ensemble A de F appelé ensemble des axiomes➲ ;
– un ensemble fini R de règles de déduction ou d’inférence➲.
Une règle d’inférence est la donnée d’un ensemble de conditions et de la conclusion
qu’on peut en tirer. Une règle d’inférence bien connue est le modus ponens qui spécifie que
de p → q et de p, on peut déduire automatiquement q.

✒ nota bene : On notera l’absence de conditions particulières sur les règles


d’inférence.

Une démonstration➲ (ou une déduction) dans un système formel S est une suite
d’énoncés A1 , . . . , An telle que tout énoncé Ai est un axiome de S ou une conséquence
des énoncés précédents par l’application de l’une des règles d’inférence. Un théorème➲ de
S est le dernier énoncé d’une démonstration de S.

☞ exemple : Soient les axiomes : b → r « la présence de boutons chez un patient


indique un cas de rougeole » et b « j’ai des boutons ». r « j’ai la rougeole » est

30
aspects déductifs

alors un théorème de ce système formel si on utilise le modus ponens comme


règle d’inférence.

✒ nota bene : Les règles d’inférence sont utilisées de manière automatique dans
les démonstrations. Il faut bien distinguer les preuves faites jusqu’à présent
(notion de conséquence logique) et les démonstrations qui ont un caractère
plus automatique (voire « aveugle »).

Un système formel est décidable si et seulement si il existe un algorithme permettant


de savoir si un énoncé donné est un théorème.

✒ nota bene : Un système formel peut ne pas être décidable. C’est le cas du
calcul des prédicats, par exemple, comme nous le verrons dans le chapitre 3
au paragraphe 3.3.4 page 70.

Soit J un ensemble de formules. Un énoncé A est dit déductible8 sous les hypothèses
J , ce qui est noté J |= A si et seulement s’il existe une suite finie d’énoncés A1 , . . . , An
telle que :
➊ An = A
➋ ∀i ∈]n], Ai est un axiome ; Ai ∈ J ; ou Ai découle d’énoncés précédents par l’utilisation
d’une des règles d’inférence.

➽ exercice 37 : Qu’en est-il si J = ∅ ?

Les règles d’inférence couramment utilisées que sont le modus ponens, le modus tollens
et le syllogisme peuvent s’écrire :
– modus ponens : p → q, p |= q
– modus tollens : p → q, ¬q |= ¬p
– syllogisme : p → q, q → r |= p → r

➽ exercice 38 : Montrer que pour ces règles, on peut remplacer |= par ⊢. Que
cela signifie-t-il ?

8 On dit aussi que J est un modèle de A.

31
2 – logique des propositions

➽ exercice 39 : Montrer que si J1 ⊂ J2 et J1 |= A alors J2 |= A.

➽ exercice 40 : Montrer que si J1 |= A et si pour tout énoncé B de J1 , on a


J2 |= B alors J2 |= A.

2.4.3 Un système formel pour le calcul propositionnel


Soit V = {¬, →, (, )} ∪ P l’alphabet considéré9 où P est comme toujours l’ensemble des
variables propositionnelles. On définit F l’ensemble des formules de la façon suivante :
➊ les éléments de P sont des formules ;
➋ si A et B sont des formules alors (¬A) et (A → B) sont des formules ;
➌ toute formule est définie par ➊ et ➋.
On se donne trois schémas d’axiome définissant un ensemble infini A d’axiomes :
– SA1 : A → (B → A)
– SA2 : (A → (B → C)) → ((A → B) → (A → C))
– SA3 : (¬A → ¬B) → (B → A)

➽ exercice 41 : Montrer que les trois schémas d’axiomes proposés sont des tau-
tologies.

La seule règle de déduction utilisée dans ce système formel est le modus ponens (noté
mp dans les démonstrations) :
A, A → B |= B

Proposition 1

|= A → A

En voici une démonstration :


9 On a montré au corollaire 1 du théorème 3 que {¬, →} était un système complet de connecteurs. On

peut donc bien se restreindre ici à ces deux connecteurs.

32
aspects déductifs

1: SA2 (A → ((A → A) → A)) → ((A → (A → A)) → (A → A))


2: SA1 (A → ((A → A) → A))
3: mp 1 · 2 (A → (A → A)) → (A → A)
4: SA1 A → (A → A)
5: mp 3 · 4 A→A

Proposition 2

si A1 , . . . , An−1 |= An → B alors A1 , . . . , An |= B

➽ exercice 42 : Montrer la proposition 2.

Proposition 3 (Théorème de la déduction – Herbrand➠, 1930)

si A1 , . . . , An |= B alors A1 , . . . , An−1 |= An → B

Nous allons montrer ce résultat par récurrence sur la longueur ℓ de la démonstration :


➊ supposons ℓ = 1. B est alors soit un axiome (A) ou bien une hypothèse (H) puisqu’on
ne peut pas appliquer le modus ponens. On a alors
1: A/H B
2: SA1 B → (An → B)
3: mp 1 · 2 An → B
➋ supposons maintenant le résultat vrai pour toute démonstration de longueur au plus
ℓ. Considérons une démonstration de B de longueur ℓ + 1. Deux cas se présentent :
➀ B est un axiome ou une hypothèse : on se retrouve alors dans le cas précédent
➁ B est obtenu par l’application du modus ponens (seule règle de déduction dispo-
nible) à partir des énoncés : C → B et C qui sont nécessairement avant dans la
démonstration. Les démonstrations de C → B et de C sont de longueur au plus
ℓ. L’hypothèse de récurrence donne :

A1 , . . . An−1 |= An → (C → B) (2.1)

et
A1 , . . . An−1 |= An → C (2.2)

33
2 – logique des propositions

Le schéma d’axiome SA2 donne :

|= (An → (C → B)) → ((An → C) → (An → B)) (2.3)

L’application du modus ponens sur les équations 2.1 et 2.3 donne alors :

A1 , . . . An−1 |= (An → C) → (An → B) (2.4)

L’application du modus ponens sur les équations 2.2 et 2.4 donne alors :

A1 , . . . , An−1 |= An → B

Corollaire 1

|= A → B si et seulement si A |= B

✒ nota bene : Ce corollaire permet de faire un lien fort entre « implication » (au
sens logique : connecteur →) et « démonstration » (|=).

Proposition 4
On peut démontrer les résultats suivants :
➊ |= (A → B) → ((B → C) → (A → C))
➋ |= B → ((B → C) → C)
➌ |= ¬B → (B → C)
➍ |= ¬¬B → B
➎ |= B → ¬¬B
➏ |= (A → B) → (¬B → ¬A)
➐ |= B → (¬C → ¬(B → C))
➑ |= (B → A) → ((¬B → A) → A)

➽ exercice 43 : Démontrer la proposition 4.

34
aspects déductifs

Théorème 16 (Correction du calcul propositionnel)

si |= A alors ⊢A

✒ nota bene : Ce théorème peut aussi se lire : tout ce qui est démontrable est vrai.
Il montre que le calcul propositionnel (dans le système formel que l’on s’est
donné) est correct : on ne peut démontrer des choses fausses. Ce théorème
est facilement démontrable en raisonnant de la même manière que pour la
preuve de la proposition 3.

Théorème 17 (Complétude du calcul propositionnel)

si ⊢ A alors |= A

✒ nota bene : Ce théorème peut aussi se lire : tout ce qui est vrai est démontrable.
Il montre que le calcul propositionnel (dans le système formel que l’on s’est
donné) est complet. Il est démontré dans [Delahaye, 1986].

Les théorèmes 16 et 17 permettent de faire un parallèle entre les théorèmes et les


tautologies du calcul propositionnel. Ils identifient conséquence logique (le « réel ») et
démonstration (processus « mécanique »). Ils sont à la base de la programmation en
logique dont l’emblème distinctif est l’équation :

|=≡⊢ (2.5)

Théorème 18
Le calcul propositionnel est décidable.

Comme le calcul propositionnel est correct et complet (théorèmes 16 et 17), il y a


identité entre théorèmes et tautologies. Il suffit alors pour une formule F à n variables, dont

35
2 – logique des propositions

on cherche à savoir s’il s’agit d’un théorème, de tester la valeur de δ(F ) pour toutes les
interprétations δ possibles (il y a en a 2n ). Cette méthode nous donne bien un algorithme
pour démontrer que F est un théorème. C’est la définition de la décidabilité d’un système
formel (voir page 31).

2.4.4 Principe de résolution


Nous avons introduit précédemment les notions de littéral positif (élément de P ), de
littéral négatif (élément de P¬ ) et de clause (disjonction de littéraux). Soient deux clauses
C1 = ℓ ∨ C1′ et C2 = ¬ℓ ∨ C2′ où est ℓ est un littéral et C1′ et C2′ deux clauses éventuellement
vides10 . On appelle résolvante de deux clauses la clause : C1′ ∨ C2′ .
La règle de déduction produisant la clause C1′ ∨ C2′ à partir des clauses C1 et C2 est
appelée principe de résolution➲. Elle a été introduite en 1960 par Robinson➠.

ℓ ∨ C1′ , ¬ℓ ∨ C2′ |= C1′ ∨ C2′

On note C1 , C2 ⊢reso C1′ ∨ C2′ .

☞ exemple : Si C1 = ¬p ∨ q et C2 = ¬q ∨ r. La résolvante de C1 et C2 est alors :


¬p ∨ r. On retrouve la règle d’inférence du syllogisme.

Proposition 5 (Validité du principe de résolution)


La résolvante de deux clauses est une conséquence logique de ces deux
clauses.

➽ exercice 44 : Démontrer la proposition 5.

Soit le système formel R dont l’alphabet est V = {¬, ∨} ∪ P , FR l’ensemble des clauses
sur V , AR = ∅ et la seule règle d’inférence est le principe de résolution. Dans R, une
démonstration est une résolution. Une résolution est dite linéaire si et seulement si à
chaque étape, Ci+1 est obtenue par résolution à partir de Ci et d’une autre clause. L’ordre
de prise en compte des clauses dans le cadre d’une résolution s’appelle une stratégie.

10 La clause vide est notée .

36
aspects déductifs

Proposition 6 (Principe de réfutation)

A⊢F ssi A ∪ {¬F } insatisfaisable

✒ nota bene : La proposition précédente est une conséquence directe du théorème 15.

Proposition 7 (Complétude du principe de résolution)


Un ensemble S de clauses est insatisfiable si et seulement si S mène par
résolution à la clause vide :
S ⊢reso 

Proposition 8

A⊢C ssi A ∪ {¬C} ⊢reso 

✒ nota bene : Les deux dernières propositions permettent de faire le lien entre la
sémantique des formules du calcul propositionnel et une opération mécanique
de démonstration basée sur une règle simple : le principe de résolution. Il
s’agit là d’un ensemble d’outils remarquables nous permettant d’automatiser
les démonstrations de satisfiabilité des formules du calcul propositionnel.

☞ exemple : On cherche à montrer que :

{P → S, S → T, P } ⊢ T

Pour cela, on se proposer d’utiliser les propriétés de la résolution. La première


étape consiste à mettre les formules manipulées sous forme clausale. On ob-
tient :
{¬P ∨ S, ¬S ∨ T, P } ⊢ T
Nous allons montrer ce résultat en utilisant la résolution sans réfutation.

37
2 – logique des propositions

1: H ¬P ∨ S
2: H ¬S ∨ T
3: H P
4: reso 1 · 3 S
5: reso 2 · 4 T
Une autre démonstration (linéaire) est :
1: H ¬P ∨ S
2: H ¬S ∨ T
3: reso 1 · 2 ¬P ∨ T
4: H P
5: reso 3 · 4 T
Enfin, on peut utiliser la résolution (linéaire) avec réfutation. On cherche alors
à montrer :
{¬P ∨ S, ¬S ∨ T, P, ¬T } ⊢ 
1: H ¬T (on part toujours de la négation de la conclusion)
2: H ¬S ∨ T
3: reso 1 · 2 ¬S
4: H ¬P ∨ S
5: reso 3 · 4 ¬P
6: H P
7: reso 5 · 6 

➽ exercice 45 : Montrer que modus ponens, modus tollens et syllogisme sont des
cas particuliers du principe de résolution.

✒ nota bene : La notion de contraposition n’a plus de sens lorsqu’on travaille sous
forme clausale. En effet, p → q et ¬q → ¬p sont représentés par la même
clause : ¬p ∨ q.

➽ exercice 46 : Soit 4 personnes accusées d’un délit : A, B, C et D. On sait que :


➊ si A et B sont coupables alors C est complice
➋ si A est coupable alors au moins un des deux B ou C est complice
➌ si C est coupable alors D est complice
➍ si A est innocent alors C est coupable
De qui peut-on démontrer la culpabilité ? A-t-on démontré tout ce qui est
possible ?

38
la théorie des nombres typographiques

2.5 La théorie des nombres typographiques


La théorie des nombres typographiques (TNT) va nous servir de transition vers le calcul
des prédicats, prochaine étape dans notre exploration de la logique formelle.
Dans la TNT, on définit les symboles numériques de la façon suivante :
– 0 est un symbole numérique
– si x est un symbole numérique alors Sx est un symbole numérique11
Les variables sont définies ainsi :
– a, b, c, d, e sont des variables
– si v est une variable, alors v ′ est aussi une variable
Les termes sont définis ainsi :
– tous les symboles numériques et toutes les variables sont des termes
– si t est un terme, St est un terme
– si s et t sont des termes, alors (s + t) et (s · t) sont des termes.
Si un terme ne contient pas de variable, il est dit défini sinon il est dit indéfini.
Les atomes sont définis ainsi :
– si s et t sont des termes, alors s = t est un atome
Si un atome contient une variable, cette variable est dite libre.

➽ exercice 47 : Quelle est la différence fondamentale entre atome et terme ?

Une formule bien formée est définie de la façon suivante :


– un atome est une formule bien formée
– si F est bien formée, alors ¬F est bien formée
– si x et y sont des formules bien formées, alors x ∧ y, x ∨ y, x → y le sont aussi
– si u est une variable et F une formule bien formée dans laquelle u est libre, alors ∃uF
et ∀uF sont des formules bien formées12 .

➽ exercice 48 : Que signifient les expressions ci-dessous ?


➊ ¬∀c∃b(SS0 · b) = c
➋ ∀c¬∃b(SS0 · b) = c
➌ ∀c∃b¬(SS0 · b) = c
➍ ¬∃b∀c(SS0 · b) = c
➎ ∃b¬∀c(SS0 · b) = c
➏ ∃b∀c¬(SS0 · b) = c

11 Sx est le « successeur » de x.
12 ∀ et ∃ sont appelés des quantificateurs. Les propriétés des quantificateurs sont introduites plus
précisément dans le chapitre suivant.

39
2 – logique des propositions

➽ exercice 49 : Traduire en TNT les phrases suivantes :


➊ 6 est un nombre pair
➋ 2 n’est pas un carré
➌ 1729 est la somme de deux cubes
➍ Aucune somme de deux cubes n’est un cube
➎ 5 est un nombre premier
➏ Il existe une infinité de nombres premiers

La TNT introduit les axiomes suivants :


– (A1) ∀a, ¬Sa = 0
– (A2) ∀a, (a + 0) = a
– (A3) ∀a∀b, (a + Sb) = S(a + b)
– (A4) ∀a, a · 0 = 0
– (A5) ∀a∀b, (a · Sb) = ((a · b) + a)

On se donne enfin les règles suivantes :


➊ spécification : soit u une variable contenue dans l’expression F . Si ∀uF est un
théorème, alors F l’est aussi ainsi que toute expression obtenue à partir de F en
remplaçant u par un seul et même terme. Par exemple, de ∀a¬Sa = 0, on peut
déduire ¬S0 = 0
➋ généralisation : si F est un théorème dans lequel u est libre, alors ∀uF est un
théorème
➌ interchangeabilité : ∀u¬ et ¬∃u sont interchangeables
➍ existence : on peut remplacer un terme dans un théorème par une variable non
présente en plaçant le quantificateur existentiel en tête du théorème. Par exemple,
∀a, ¬Sa = 0 devient ∃b∀a, ¬Sa = b.
➎ égalité : si r = s est un théorème, s = r en est un (symétrie). Si r = s et s = t sont
des théorèmes alors r = t en est un (transitivité).
➏ succession : si r = t est un théorème, alors Sr = St est un théorème (ajout). Si
Sr = St est un théorème, alors r = t en est un (suppression).

➽ exercice 50 : Justifier la démonstration suivante :


1: ∀a∀b, (a + Sb) = S(a + b)
2: ∀b, (S0 + Sb) = S(S0 + b)
3: (S0 + S0) = S(S0 + 0)
4: ∀a, (a + 0) = a
5: (S0 + 0) = S0
6: S(S0 + 0) = SS0
7: (S0 + S0) = SS0
Qu’a-t-on démontré ?

40
la théorie des nombres typographiques

➽ exercice 51 : Justifier la démonstration suivante :


1: ∀a∀b, (a · Sb) = ((a · b) + a)
2: ∀b, (S0 · Sb) = ((S0 · b) + S0)
3: (S0 · S0) = ((S0 · 0) + S0)
4: ∀a∀b, (a + Sb) = S(a + b)
5: ∀b, ((S0 · 0) + Sb) = S((S0 · 0) + b)
6: ((S0 · 0) + S0) = S((S0 · 0) + 0)
7: ∀a, (a + 0) = a
8: ((S0 · 0) + 0) = (S0 · 0)
9: ∀a, (a · 0) = 0
10: (S0 · 0) = 0
11: ((S0 · 0) + 0) = 0
12: S((S0 · 0) + 0) = S0
13: ((S0 · 0) + S0) = S0
14: (S0 · S0) = S0
Qu’a-t-on démontré ?

41
chapitre trois

logique du premier ordre

Il est toujours aisé d’être logique. Il est presque


impossible d’être logique jusqu’au bout.

Albert Camus
Le mythe de Sisyphe

La logique propositionnelle1 ne permet de décrire que des constructions extrêmement


simples du langage : les opérations booléennes sur les propositions. Elle est très insuffi-
sante pour représenter les procédés des langages effectivement utilisés en informatique ou
mathématiques ou, même, pour formaliser des fragments significatifs du raisonnement cou-
rant, comme par exemple :
– Les chandelles sont faites pour éclairer
– Quelques chandelles éclairent très mal
– peut-on en conclure que Quelques objets qui sont fait pour éclairer le font très mal ?
Ce qui manque dans le langage propositionnel, c’est d’abord la possibilité de dissocier
un fait élémentaire sous la forme d’un objet possédant un attribut, ou d’une relation entre
plusieurs objets, comme dans les énoncés :
– telle chandelle éclaire très mal
– tel objet est fait pour éclairer
Introduire la notion de relation (qu’elle soit unaire, binaire, . . ., n-aire) c’est se donner
les moyens de traiter celle de variable, c’est-à-dire de la place que viendra occuper tel ou tel
objet dans un énoncé. Le second type de procédé du langage que la logique du premier
ordre permet de représenter est la quantification sur les objets, comme dans l’énoncé :
les chandelles sont faites pour éclairer.
Cette partie de la logique utilise ce que l’on appelle les langages du premier ordre
pour plusieurs raisons :
– ces langages partagent avec le langage naturel, les langages de programmation et les
langages d’interrogation des bases de données relationnelles certaines caractéristiques
essentielles ;
– il existe une grande variété de langages du premier ordre, chacun étant déterminé par
son vocabulaire propre ;
1 Cette introduction est fortement inspirée de [Lassaigne et de Rougement, 1993].

43
3 – logique du premier ordre

– ces langages permettent de représenter non seulement des relations, mais aussi des
fonctions.
Enfin, l’expression premier ordre désigne ces langages, qui sont les plus utilisés, de
ceux d’ordre supérieur, comme du second ordre, dans lesquels il est possible de quanti-
fier également les relations et les fonctions. L’étude du calcul du premier ordre (calcul des
prédicats➲) suit la même progression que celle du calcul propositionnel. Les premières sec-
tions concernent la définition du langages et la construction des formules, puis la sémantique
est présentée en termes de structures et d’interprétation des formules dans les structures. En-
fin, les aspects déductifs sont traités avec toujours pour objectif un souci de démonstration
automatique.

3.1 Aspects syntaxiques


3.1.1 Alphabet
L’alphabet nous permettant de décrire le langage du calcul des prédicats est composé
de :
– symboles de connecteurs : ¬, ∧, ∨, →, ↔
– symboles de quantificateurs
– ∀ (quantificateur universel) : « pour tout », « quel que soit », . . .
– ∃ (quantificateur existentiel) : « il existe au moins un . . . tel que2 . . . »
– V un ensemble dénombrable de symboles de variables notées x, y, z, . . .
– R un ensemble de symboles de relations (ou prédicats) et une application de R dans
N. À chaque symbole de relation R, on associe un entier n ≥ 0 ; on dit alors que R
est un symbole d’arité n, c’est-à-dire une relation à n arguments ou n variables. On
note R/n . On distingue un symbole de relation noté = (d’arité 2) et appelé symbole
d’égalité.
– F (disjoint de R) un ensemble de symboles de fonction et une application de F dans
N. À chaque symbole de fonction f , on associe n ≥ 0 ; on dit alors que f est d’arité
n. Un symbole de fonction d’arité 0 est appelé symbole de constante.

3.1.2 Formules du calcul des prédicats


On définit les termes inductivement :
➊ les symboles de constantes et de variables sont des termes
➋ si f est un symbole de fonction d’arité n et t1 , . . . , tn sont des termes, alors f (t1 , . . . , tn )
est un terme
➌ tous les termes sont obtenus par application des règles ci-dessus
Si on note var(t) l’ensemble des variables ayant une occurrence dans t. Si var(t) = ∅, le
terme est dit « de base ».
Si R est un symbole d’arité n et t1 , . . . , tn des termes, alors R(t1 , . . . , tn ) est une formule
atomique (ou atome). On génère ainsi tous les atomes.
2 Il convient de bien noter que le quantificateur existentiel (∃) contient bien dans sa signification la partie

« tel que ». On pourra se reporter au paragraphe 3.1.5 pour plus d’informations relatives à l’écriture de
formules avec quantificateurs.

44
aspects syntaxiques

✒ nota bene : Un terme ne possède pas de valeur de vérité, il s’agit juste d’un
nom. Par contre, un atome en possède une, il peut être vrai ou faux.

Les formules du calcul des prédicats du premier ordre sont définies récursivement comme
suit :
➊ un atome est une formule
➋ si F et G sont des formules, alors ¬(F ), (F ) ∧ (G), (F ) ∨ (G), (F ) → (G) et (F ) ↔ (G)
sont des formules.
➌ si F est une formule et x une variable, alors ∀x(F ) et ∃x(F ) sont des formules
➍ toute formule est générée par un nombre fini d’application des règles ➊, ➋ et ➌.

☞ exemple :
∀x∃y (R(x, f (a, y), z) → ¬T (g(b), z))
– x, y et z sont des variables
– a et b sont des constantes
– f (a, y) et g(b) sont des termes
– R(x, f (a, y), z) et T (g(b), z) sont des atomes
– ¬T (g(b), z) est une formule
– R(x, f (a, y), z) → ¬T (g(b), z) est une formule
– ∃y (R(x, f (a, y), z) → ¬T (g(b), z)) est une formule
– ∀x∃y (R(x, f (a, y), z) → ¬T (g(b), z)) est une formule

➽ exercice 52 : Modéliser les expressions suivantes :


➀ tous les lions sont féroces
➁ quelques lions ne boivent pas de café
➂ aucun singe n’est soldat
➃ tous les singes sont malicieux

✒ nota bene : Le langage courant n’étant pas toujours très précis, on notera les
modélisations correctes d’expressions courantes :
tous les A sont B 7→ ∀x, A(x) → B(x)
seuls les A sont B 7→ ∀x, B(x) → A(x)
aucun A n’est B 7→ ∀x, A(x) → ¬(B(x))
quelques A sont B 7→ ∃x, A(x) ∧ B(x)

45
3 – logique du premier ordre

3.1.3 Caractérisation des variables


Étant donnée une formule F et une variable x, on appelle occurrence de x dans F
chaque endroit où x apparaı̂t dans F non immédiatement précédée du symbole ∀ ou du
symbole ∃.
La notion d’occurrence libre de x dans F est définie de la façon suivante :
➊ si F est un atome, toutes les occurrences de x dans F sont libres
➋ si F = ¬(G), les occurrences libres de F sont celles de G
➌ si F = (G)(H), où  est un symbole de connecteur binaire, les occurrences libres
de x dans F sont la réunion de celles de G et de celles de H.
➍ si F = ∀y(G) ou F = ∃y(G), avec y variable distincte de x, les occurrences libres de
x dans F sont celles de G
➎ si F = ∀x(G) ou F = ∃x(G), aucune occurrence de x dans F n’est libre.
Une variable est libre (ou parlante) si elle a au moins une occurrence libre. Une variable
n’ayant aucune occurrence libre est dite liée (ou muette). Une formule dont les variables
libres se trouvent parmi x1 , . . . , xn est habituellement notée F (x1 , . . . , xn ). Une formule
n’ayant pas de variable libre est dite close.

➽ exercice 53 : Donner la structure de chacune des formules suivantes. Puis,


pour chaque variable apparaissant dans ces formules, signaler chacune des
occurrences. S’agit-il de variables liées ou libres ? S’agit-il de formules closes ?
➊ ∃y(R(x, f (y), z) → (v(b) ∨ s(a, g(b))))
➋ (∀xp(x)) ∨ (∃yf (x) = y)
➌ ∀x∀y(x = y → f (x) = f (y))

3.1.4 Substitution d’une variable par un terme


➲ substituer Soient F une formule bien formée, x une variable et t un terme. La substitution de t
à x, F [t/x] est la formule obtenue en remplaçant toutes les occurrences libres de x dans F
par t.

☞ exemple : Soit F = ∀y(P (z) → R(y)). La substitution de f (x) à z dans F


donne :
F [f (x)/z] = ∀y(P (f (x)) → R(y))

Soient F une formule bien formée, x une variable et t un terme. t est substituable
à x (libre pour x) si et seulement si aucune occurrence libre de x dans F ne devient une
occurrence liée dans F [t/x]. Dans le cas contraire, il faut renommer les variables liées de la
proposition ou les variables du terme pour pouvoir effectuer la substitution.

46
aspects sémantiques

☞ exemple : Soit F = ∀x(∃vP (x, v) → ∀zQ((x, y, z) ∧ ∀u∃tS(f (t), u). Alors, la


substitution de y par f (h(z), x) dans F donne

F [f (h(z), x)/y] = ∀w(∃vP (w, v) → ∀yQ((w, f (h(z), x), y))∧∀u∃tS(f (t), u)

Attention, ici le y de la deuxième formule n’a bien sûr rien à voir avec le y de
la première.

3.1.5 Remarques concernant l’écriture


Comme tout langage, le langage du calcul des prédicats possède une syntaxe spécifique
qu’il est impératif de respecter, ce qui amène les remarques suivantes :
➊ Les quantificateurs se placent devant les formules à quantifier. Cette cohérence est
indispensable, en particulier lorsque l’on passe à la négation.
➋ Les quantificateurs sont des symboles du langage des prédicats. Il ne sont en aucun
cas des abréviateurs comme on le rencontre trop souvent dans des expressions comme
les suivantes : « ∀x on a . . . », « Soit x un élément ∀ de E », . . .
➌ Le quantificateur existentiel signifie « il existe au moins un . . . tel que ». Il est donc
dans la pratique incommode et incorrect d’écrire « ∃x tq » ou encore « ∃x/ » ; ces
écritures sont des vestiges d’une interprétation sténographiques des quantificateurs.
➍ Les quantificateurs mutifient les variables. Il faut donc proscrire des écritures telles
que « ∀f (x) » ou « ∃25 » !
➎ En pratique, on utilise les quantificateurs relativisés définis comme suit :
– (∀x/P ) signifie « pour tout x satisfaisant la propriété P »
– (∃x/P ) signifie « pour au moins un x satisfaisant P »
– (∀x/P )P ′ peut s’écrire ∀x(P → P ′ )
– (∃x/P )P ′ peut s’écrire ∃x(P ∧ P ′ )

3.2 Aspects sémantiques


Comme on l’a fait pour le calcul propositionnel au paragraphe 2.2, on peut associer une
sémantique au langage du calcul des prédicats. On remarquera que l’outillage est nettement
plus complexe que pour le calcul propositionel.

3.2.1 Notions d’interprétation et de modèle


Une interprétation➲ I du langage L du calcul des prédicats nécessite les outils suivants :
– un domaine d’interprétation D : un ensemble de valeurs que peuvent prendre les
variables.
– une interprétation des constantes : une application Ic de l’ensemble des constantes
dans D qui, à toute constante c, associe une valeur dans D
– une interprétation des fonctions : une application If qui, à toute fonction f d’arité n
(strictement positive) et à tout n-uplet de valeurs de D, associe une valeur de D

47
3 – logique du premier ordre

– une interprétation des prédicats : une application Ip qui, à tout prédicat P d’arité n
et à tout n-uplet de valeurs de D, associe une valeur dans {, }.

☞ exemple : Considérons les formules suivantes :


– HG = ∀x∀y∀z((P (x, y) ∧ P (y, z)) → G(x, z))
– HP = ∀x∃yP (y, x)
– C = ∀x∃yG(y, x)
– D = ∀x∀z(P (z, f (x)) → G(z, x))
– F = HG ∧ HP → C
Une interprétation pourrait être de fixer D comme étant l’ensemble des êtres
humains. La relation P (x, y) signifie que x est le père de y. La relation G(x, y)
signifie que x est un grand-père de y. La fonction f/1 associe un individu à
sa mère.

➽ exercice 54 : Comment peut-on lire les formules de l’exemple précédent ?

➽ exercice 55 : On considère les formules de l’exemple précédent. D est mainte-


nant réduit à trois sommets a, b et c dans un graphe orienté. On interprète les
prédicats par les relations suivantes. La relation P est vraie pour les couples
(a, b), (b, c) et (c, a) et fausse pour les autres. La relation G est vraie pour
les couples (b, a), (c, b) et (a, c) et fausse pour les autres. La fonction f est
définie par f (a) = a, f (b) = b et f (c) = a. Donner une représentation gra-
phique de la situation. Que signifient les relations P et G ? Comment peut-on
lire HP , HG, C et D ?

Comme en calcul propositionnel, les formules ont une valeur de vérité qui dépend de l’in-
terprétation choisie. Pour une interprétation I donnée, on appelle valuation v des variables
relatives à I, toute application de l’ensemble des variables dans D. Pour une valuation v
donnée, l’interprétation d’une formule non close est obtenue en substituant aux variables
libres leurs valeurs dans D (on dit aussi en assignant aux variables des valeurs). Puis, de
façon inductive, on calcule la valeur des termes dans D en commençant par les termes in-
clus. L’interprétation des prédicats est réalisée lorsque celle des termes qui les composent est
achevée. Enfin, la valeur de vérité de la formule est calculée à partir de celles des formules
atomiques :
– la valeur de vérité d’un atome est la valeur de vérité du prédicat
– la valeur de vérité d’une formule non atomique, construite à partir de formules ato-
miques valuées, est calculée au moyen des tables de vérité des connecteurs du calcul
propositionnel données au paragraphe 2.2.1 page 11.

48
aspects sémantiques

– la valeur de vérité des formules contenant des variables quantifiées est calculée ainsi :
– ∃x(ϕ) a pour valeur  s’il existe une valuation v ′ qui coı̈ncide avec v sauf en x et
qui assigne d ∈ D à x, telle que l’interprétation de ϕ[d/x] soit . Sinon, ∃x(ϕ) a
pour valeur .
– ∀x(ϕ) a pour valeur  si pour toute valuation v ′ qui coı̈ncide avec v sauf en x et
qui assigne d ∈ D à x, l’interprétation de ϕ[d/x] est . Sinon, ∀x(ϕ) a pour valeur
.

➽ exercice 56 : En considérant l’interprétation de l’exemple précédent, que peut-


on dire sur la valeur de vérité des formules ? Et si, on considère l’interprétation
de l’exercice 55 ?

On démontre que la valeur de vérité d’une formule ne dépend que de la valuation de


ses variables libres. Ainsi, dans le cas d’une formule close, sa valeur de vérité pour une
interprétation donnée, ne dépend pas de la valuation. C’est ce qui se passe en particu-
lier pour les formules du calcul propositionnel dont la valeur de vérité ne dépend que de
l’interprétation.
Étant donnée une formule close F de L , on dit que l’interprétation I satisfait la formule
F ce que l’on note I |= F si et seulement si la valeur de vérité prise par F dans I est .
On dit encore dans ce cas que I est un modèle de F .

3.2.2 Tautologies et formules satisfiables


Comme en calcul propositionnel, les formules se caractérisent selon l’« étendue » de leur
valeur de vérité. Elle dépend, d’une part, de l’interprétation, et, d’autre part, pour une
interprétation donnée, de la valuation des variables libres.
Une formule F de L est dite universellement valide si et seulement si pour toute
interprétation et pour toute valuation3 , F est vraie. On le note : ⊢ F . On dit aussi que F
est une tautologie.

☞ exemple : La formule ∀x(p(x) → p(f (x))) → ∀y(p(y) → p(f (f (y))))


est universellement valide. Nous verrons dans le paragraphe 3.3.3 comment le
prouver.

Une formule F est dite valide si et seulement si il existe une interprétation I telle que
pour toute valuation, F soit vraie. I est un modèle de F .

3 On peut se passer des valuations en ne considérant que des formules closes ou leur clôture. La clôture

de F (x1 , . . . , xn ) est la formule ∀x1 , . . . ∀xn F (x1 , . . . , xn ).

49
3 – logique du premier ordre

Théorème 19 (Théorème de Löwenheim-Skolem➠ ) – non démontré


Toute formule close valide sur un domaine infini dénombrable est universel-
lement valide.

Une formule F est dite satisfiable si et seulement si il existe une interprétation I


et une valuation, telles que F soit vraie. Elle est dite contradictoire ou insatisfiable ou
inconsistante dans le cas contraire, c’est-à-dire si et seulement si pour toute interprétation
I et pour toute valuation, F est fausse.

☞ exemple : ∀xP (x) ∧ ∃y¬P (y) est une formule inconsistante.

Deux formules F et G sont dites logiquement équivalentes si et seulement si pour


toute interprétation I et pour toute valuation F et G ont même valeur de vérité. Autrement
dit : ⊢ F ↔ G.

☞ exemple : Les deux propositions suivantes sont logiquement équivalentes : ∃xF


et ¬∀x(¬F ).

➽ exercice 57 : On considère un ensemble E non vide et une relation binaire sur


E. Dans les énoncés suivants, les variables quantifiées sont astreintes à E.
➊ ∀x∀y∀z((R(x, y) ∧ R(y, z)) → R(x, z))
➋ ∀x∀y(¬R(x, y) ↔ (x = y ∨ R(y, x)))
➌ ∀x¬R(x, x)
➍ ∀x∃yR(x, y)
➎ ∀x∃yR(y, x)
➏ ∀x∀y((∃z(R(x, z) ∧ R(z, y))) ↔ R(x, y))
On considère les 7 cas suivants :
➀ E = N et R(x, y) signifie x < y
➁ E = P(N) et R(x, y) signifie x ( y
➂ E = Q et R(x, y) signifie x < y.
➃ E = R et R(x, y) signifie x < y.
➄ E = R+ et R(x, y) signifie x < y.
➅ E = R et R(x, y) signifie x ≥ y.
➆ E = R+∗ et R(x, y) signifie x < y.
Pour chaque énoncé et chaque cas, caractériser l’énoncé.

50
aspects sémantiques

3.2.3 Formes normales pour le calcul des prédicats


Comme dans le calcul propositionnel, nous définissons différentes formes normales pour
les formules du calcul des prédicats. La prise en compte des variables et des quantificateurs
nous conduit à dépasser les simples formes normales conjonctives et disjonctives du calcul
propositionnel.

Forme normale prénexe


Une formule du calcul des prédicats est dite sous forme normale prénexe si et seule- ➲ pré-,-nex-
ment si elle s’écrit :
1 x1 . . . n xn F
où i est un des quantificateurs ∀ ou ∃ et F est une formule sans quantificateurs.
Les quantificateurs ∀ et ∃ sont des signes mutificateurs. Si y est une variable n’ayant
aucune occurrence dans F (x, x1 , . . . , xn ), on a

⊢ ∀xF (x, x1 , . . . , xn ) ↔ ∀yF (y, x1 , . . . , xn )

☞ exemple : Dans le corps R des réels, ∀x(x × y = y) équivaut ∀z(z × y) = y


mais pas à ∀y(y × y = y).

✒ nota bene : Il existe d’autres signes mutificateurs (la variable muette est
représentée par ) :
Z b
\ X
f :  7→ f (x) . . . d { ∈ I| . . .}
∈I ∈I a

Les quantificateurs ∀ et ∃ sont duaux l’un de l’autre. Ainsi, pour toute formule F , on
a:

⊢ ∀xF ↔ ¬∃x¬F ou encore ¬∀xF ↔ ∃x¬F (3.1)


⊢ ∃xF ↔ ¬∀x¬F ou encore ¬∃xF ↔ ∀x¬F (3.2)

☞ exemple : Considérons l’énoncé ∀x∀y, f (x) = f (y) → x = y. La négation de


cet énoncé est (en appliquant deux fois l’équation 3.1) :

∃x∃y¬(f (x) = f (y) → x = y)

Ce qui donne (propriété de l’implication) :

∃x∃y(f (x) = f (y) ∧ x 6= y)

51
3 – logique du premier ordre

Les quantificateurs existentiel (∃) et universel (∀) commutent entre eux :

⊢ ∀x∀yF ↔ ∀y∀xF (3.3)


⊢ ∃x∃yF ↔ ∃y∃xF (3.4)

➽ exercice 58 : Que peut-on dire de : ∃x∀yF et ∀y∃xF ?

Le quantificateur universel (respectivement existentiel) est distributif par rapport à ∧


(respectivement ∨) :

⊢ (∀xF ) ∧ (∀xH) ↔ ∀x(F ∧ H) (3.5)


⊢ (∃xF ) ∨ (∃xH) ↔ ∃x(F ∨ H) (3.6)

➽ exercice 59 : Comparer (∀xF ) ∨ (∀xH) et ∀x(F ∨ H). De même pour :


(∃xF ) ∧ (∃xH) et ∃x(F ∧ H).

Si x ne possède aucune occurrence dans H, on a :

⊢ ((∀xF ) ∨ H) ↔ ∀x(F ∨ H) (3.7)


⊢ ((∃xG) ∧ H) ↔ ∃x(F ∧ H) (3.8)
⊢ (∀xH) ↔ H (3.9)
⊢ (∃xH) ↔ H (3.10)

Théorème 20
Toute formule du calcul des prédicats est équivalente à une formule sous
forme prénexe.

Nous allons montrer ce résultat par récurrence sur le nombre n de symboles de connec-
teurs et quantificateurs.
➊ n = 0, alors F est une formule atomique déjà sous forme prénexe

52
aspects sémantiques

➋ supposons le résultat vrai jusqu’à l’ordre n, considérons F possédant n+1 occurrences


de connecteurs et quantificateurs. Plusieurs cas se présentent :
➀ F = ¬G. Par hypothèse de récurrence, G équivaut à 1 x1 , . . . n xn G′ . Alors F
équivaut à ′1 x1 , . . . ′n xn ¬G′ où ′i est le quantificateur dual de i et qui est
sous forme prénexe
➁ F = ∀xG. G peut s’écrire 1 , . . . n G′ par hypothèse de récurrence. F équivaut
∀x1 , . . . n G′ sous forme prénexe.
➂ F = ∃G. idem
➃ F = G ∨ H. F équivaut à 1 x1 , . . . n xn G′ ∨ ′1 x′1 , . . . ′m x′m H ′ . On peut alors
supposer que ∀i∀j(xi 6= x′j ) (si ce n’est pas le cas, on peut renommer des va-
riables). En appliquant les équations 3.5, 3.6, 3.7 et 3.8 on obtient le résultat.
➄ comme {¬, ∨} est un système complet de connecteur (théorème 3 page 19), on a
le résultat pour ∧, → et ↔.

✒ nota bene : Les étapes de mise sous forme prénexe d’une formule quelconque
sont les suivantes :
➊ Éliminer les connecteurs → et ↔ (on utilisera pour cela les équivalences
tautologiques présentées page 14).
➋ Transporter les symboles de négation devant les formules atomiques (on
utilisera les lois de de Morgan – rappelées page 14, les propriétés de la
double négation et les équations 3.1 et 3.2).
➌ Renommer si nécessaire les variables pour pouvoir appliquer les équations
3.5 à 3.10.
➍ Transporter les quantificateurs devant la formule de façon à obtenir
la forme prénexe. On utilisera pour cela les propriétés des opérateurs
présentées ci-dessus.

☞ exemple : Soit la formule ∀xP (x) → ∃xP (x). Cette formule est équivalente à
∃x(¬P (x) ∨ P (x)) qui est sous forme prénexe.

➽ exercice 60 : Mettre la formule suivante sous forme prénexe :

(∀x∃y∀tR(x, z, y)) → (∃x∀y∃tS(x, z, t))

53
3 – logique du premier ordre

➽ exercice 61 : Mettre la formule suivante sous forme prénexe :


((∃xA(x) → ∃yB(y)) → ∃zC(z)) → ∃tD(t)

➽ exercice 62 : Mettre les formules suivantes sous forme prénexe :


(∀x∃y∀tR(x, z, t)) → (∃x∀y∃tS(x, z, t))
(∀x∃z∀tR(x, z, t)) → (∃x∀z∃tS(x, z, t))

Forme de Skolem
Une formule F sous forme prénexe est dite sous forme de Skolem➠ si et seulement
si les quantificateurs existentiels précèdent les quantificateurs universels, c’est-à-dire, si et
seulement si F s’écrit :
∃xi . . . ∃xn ∀y1 . . . ∀ym A(x1 , . . . , xn , y1 , . . . , ym , z1 , . . . , zp )
où A est un énoncé sans quantificateur.

Théorème 21
Toute formule du calcul des prédicats est équivalente à une formule sous
forme de Skolem.

Soit A(x1 , . . . , xk , y, z1 , . . . , zℓ ) une formule dont les xi sont éléments d’ensembles Ei ,


y élément de F et les zj éléments d’ensembles Gj . Nous allons montrer que les énoncés
suivants sont équivalents :

∀x1 . . . ∀xk ∃yA(x1 , . . . , xk , y, z1 , . . . , zℓ ) (3.11)


∃f ∀x1 . . . ∀xk A(x1 , . . . , xk , f (x1 , . . . , xk ), z1 , . . . , zℓ ) (3.12)
Pour cela, nous allons montrer que les ensembles U1 et U2 sous-ensembles de G1 ×. . .×Gℓ
associés respectivement aux équations 3.11 et 3.12 sont égaux.
➊ Montrons que U1 ⊂ U2
Soit (z1 , . . . , zℓ ) ∈ U1 . On définit une fonction f , de la façon suivante :
f: E1 × . . . Ek → F
(x1 , . . . , xk ) 7→ y tel que A(x1 , . . . , xk , y, z1 , . . . , zℓ ) est vrai
On a y = f (x1 , . . . , xk ) ce qui montre que (z1 , . . . , zℓ ) ∈ U2 .

54
aspects sémantiques

➋ Montrons que U2 ⊂ U1 . Soit (z1 , . . . , zℓ ) ∈ U2 . Pour (x1 , . . . , xk ), on a y = f (x1 , . . . , xk ).


Ainsi, (z1 , . . . , zk ) ∈ U2 .

✒ nota bene : Concrètement, lorsqu’on rencontre l’expression ∀x∃yA(x, y), on


remplace y par une fonction f : E → E, x 7→ y. On obtient ainsi l’expression :
∃f ∀xA(x, f (x)). f est appelée une fonction de Skolem. On dit aussi qu’on
« skolémise » la variable y qui devient une fonction.

➽ exercice 63 : Formaliser « f est continue » et mettre l’énoncé sous forme de


Skolem. Même question pour « f est uniformément continue ».

Une formule sous forme de Skolem est dite sous forme standard de Skolem si et
seulement si la partie sans quantificateurs est sous forme normale conjonctive.

Théorème 22
Toute formule du calcul des prédicats est équivalente à une formule sous
forme standard de Skolem.

➽ exercice 64 : Démontrer le théorème 22.

✒ nota bene : Une formule F sous forme prénexe est dite sous forme de Her-
brand➠ si et seulement si tous les quantificateurs universels précédent les
quantificateurs existentiels c’est-à-dire que F s’écrit (A est un énoncé sans
quantificateur) :

∀x1 . . . ∀xm ∃y1 . . . ∃yn A(x1 , . . . , xm , y1 , . . . , yn , z1 , . . . , zp )

55
3 – logique du premier ordre

Forme clausale
Les littéraux dans le calcul des prédicats sont les formules atomiques ou atomes (ap-
pelés littéraux positifs) ou leurs négations (appelées littéraux négatifs). Une clause est
une disjonction finie de littéraux. La forme clausale d’une formule est la conjonction des
clauses associées ou l’ensemble des clauses associées à cette formule.
Plus précisément, la forme clausale d’une formule F est constituée de l’ensemble des
clauses de la forme standard de Skolem de cette formule où :
➊ les variables quantifiées universellement sont conservées et les fonctions (y compris les
fonctions de Skolem) ne sont pas modifiées
➋ les variables quantifiées existentiellement sont remplacées par des constantes (toutes
différentes)
➌ les variables sont renommées d’une clause à l’autre

☞ exemple : Considérons la formule F suivante :

∀x∃y∃z((¬P (x, y) ∧ Q(x, z)) ∨ R(x, y, z))

Considérons les fonctions f : E → F telle que x 7→ y et g : E → F telle que


x 7→ z. F est alors équivalente à la formule suivante sous forme de Skolem :

∃f ∃g∀x((¬P (x, f (x)) ∧ Q(x, g(x))) ∨ R(x, f (x), g(x)))

F est aussi équivalente à la formule suivante sous forme standard de Skolem


(on a distribué l’expression R(x, f (x), g(x))) :

∃f ∃g∀x((¬P (x, f (x)) ∨ R(x, f (x), g(x))) ∧ (Q(x, g(x)) ∨ R(x, f (x), g(x))))

On obtient alors deux clauses :

C1 : (¬P (x, f (x)) ∨ R(x, f (x), g(x)))


C2 : (Q(y, g(y)) ∨ R(y, f (y), g(y)))

La forme clausale de F est alors : C = {C1 , C2 }.

➽ exercice 65 : Mettre sous forme clausale la formule suivante :

∀x∃yp(x, y) → ∃y∀xp(x, y)

56
aspects déductifs

➽ exercice 66 : Considérons les énoncés suivants :


➊ Tous les enfants d’un dragon peuvent voler
➋ Archie a au moins un parent vert ou rose
➌ Un dragon est heureux si tous ses enfants peuvent voler
➍ Les dragons verts peuvent voler
➎ Un dragon est vert s’il a au moins un parent vert ou rose
Formaliser les énoncés ➊ à ➎ puis mettre sous forme clausale la conjonction
des énoncés ➌ à ➎.

3.3 Aspects déductifs


Comme pour le calcul propositionnel, nous allons aborder les aspects déductifs du calcul
des prédicats en précisant d’abord la notion de conséquence logique, puis en mettant en
évidence un système formel dont les théorèmes sont les et seulement les tautologies du
langage du calcul des prédicats. Nous appliquerons ensuite le principe de résolution au
calcul des prédicats. Mais, la difficulté induite par la prise en compte des variables nous
conduira naturellement au théorème fondamental pour la démonstration automatique dans
le calcul des prédicats : le théorème de Herbrand.

3.3.1 Conséquence logique et systèmes d’axiomes


Soit A un ensemble de formules closes de L, et F une formule close (ou sa clôture) de
L. On dit que F est conséquence logique de A (ce qu’on note A ⊢ F ) si toute réalisation
de F qui satisfait A (plus exactement chaque formule de A) satisfait aussi F .
Un ensemble de formules closes est appelé système d’axiomes.

☞ exemple : Considérons le système d’axiomes suivant :


➊ ∀x∃y(y = f (x) ∧ ∀z(z = f (x) → y = z))
➋ ¬(∃xf (x) = 0)
➌ ∀x(¬(x = 0) → (∃y(y = g(x) ∧ ∀z(z = g(x) → y = z))))
Ces axiomes définissent les entiers naturels (f représente la fonction succes-
seur immédiat et g la fonction prédécesseur immédiat). En particulier, toute
interprétation I validant ces axiomes sera appelée « entiers naturels ».

➽ exercice 67 : Dans l’exemple précédent, comment lit-on les trois axiomes ?

57
3 – logique du premier ordre

☞ exemple : Le système d’axiomes suivant définit les ensembles ordonnés :


➊ ∀xR(x, x)
➋ ∀x∀y((R(x, y) ∧ R(y, x)) → x = y)
➌ ∀x∀y∀z((R(x, y) ∧ R(y, z)) → R(x, z))

➽ exercice 68 : Dans l’exemple précédent, comment lit-on les trois axiomes ?

➽ exercice 69 : Préciser un système d’axiomes pour la structure de groupe. On


utilisera un symbole fonctionnel f/2 et un symbole de constante e.

☞ exemple : Le système d’axiomes suivant définit la théorie des ensembles.


➊ ∀x∀y(∀z((z ∈ x) ↔ (z ∈ y)) → (z = y)) – axiome d’extensionalité. Il
signifie qu’un ensemble est caractérisé par l’ensemble des éléments qu’il
contient.
➋ ∀x∀y∃z∀t(t ∈ z ↔ (t = x ∨ t = y)) – axiome de la paire. Il définit un
ensemble ne contenant que deux éléments a et b noté {a, b}. Si a = b,
on note {a}.
➌ ∀x∃y∀z(z ∈ y ↔ ∃t(t ∈ x ∧ z ∈ t)) – axiome de la somme ou de la
réunion. Il définit, pour un ensemble a, l’union des éléments de a, notée
⋒a. Si a = {x, y}, on obtient x ∪ y.
➍ ∀x∃y∀z(z ∈ y ↔ (∀t ∈ z → t ∈ x)) – axiome de l’ensemble des parties.
Il définit, pour un ensemble a, l’ensemble P(a) de ses parties.
➎ ∃x∀y¬(y ∈ x) – axiome de l’ensemble vide. Il définit l’ensemble vide
noté ∅.
➏ ∃x(∅ ∈ x ∧ ∀y(y ∈ x → (y ∪ {y}) ∈ x)) – axiome de l’infini. Il permet
de montrer l’existence de N en utilisant la correspondance proposée par
von Neumann➠ : 0 = ∅, 1 = {0}, 2 = {0, 1}, 3 = {0, 1, 2}, . . ..
➐ ∀x∃y∀z(z ∈ y ↔ z ∈ x ∧ P (x)) – axiome de compréhension ou de
séparation. Il permet d’assurer l’existence pour tout ensemble a et d’une
propriété p de l’ensemble des éléments de a qui vérifie p.
➑ ∀a∃x∀y(y ∈ a → (∃zA(y, z) → ∃z ∈ xA(y, z))) – axiome de rempla-
cement.
➒ ∀x∃y(y ∈ x → y∩x = ∅) – axiome de régularité. Il élimine la possibilité
d’avoir un ensemble x élément de lui-même évitant ainsi le paradoxe➥
de Russell➠.
➓ ∀x ∈ a∃zA(x, z) → ∃y∀x ∈ aA(x, y(x)) – axiome du choix➥. Il déclare
qu’étant donné un ensemble d’ensembles non vides mutuellement exclu-
sifs, il existe au moins un ensemble qui contient exactement un élément
commun avec chacun des ensembles non vides.

58
aspects déductifs

Le système d’axiomes ➊–➒ est appelé théorie des ensembles de Zermelo➠-


Fraenkel➠, on le note ZF. Le système ➊–➐ augmenté de l’axiome ➒ est la
théorie des ensembles de Zermelo, on le note Z. Le système ZF augmenté de
l’axiome ➓ est généralement noté ZFC.

✒ nota bene : Il faut savoir que la théorie ZF n’est pas axiomatisée de façon finie.
En effet, l’axiome de remplacement n’est pas un seul axiome mais plutôt
une famille infinie d’axiomes. Montague en 1961 a montré qu’il n’existe pas
d’ensemble fini d’axiomes logiquement équivalent à l’ensemble infinis de la
théorie ZF.

On peut fournir un modèle simple (dit modèle de Schwartz➠) pour le système ➊–➍
augmenté de l’axiome ➐ (axiomes de l’exemple précédent). Les objets que l’on manipule
sont les entiers naturels. On s’intéresse à leur développement « dyadique » (c’est-à-dire leur
développement en puissances de 2). Ainsi, le développement dyadique de 7 est 22 + 21 + 20
car 7 = 23 + 21 + 20 . Les exposants sont alors les éléments de l’ensemble considéré. Ainsi,
7 = {0, 1, 2}.

➽ exercice 70 : Quel est l’ensemble noté 57 ?

Considérons l’ensemble {1, 2} = 6. On définit la paire (a, b) par l’ensemble {{a}, {a, b}}.
Ainsi, on a (1, 2) = {{1}, {1, 2}} = {2, 6} = 68.

➽ exercice 71 : À quoi correspond la paire (2, 1) ?

Par convention, l’ensemble vide est noté 0.

➽ exercice 72 : Que vaut 25 ∩ 57 ?

➽ exercice 73 : On rappelle (axiome ➌) que ⋒x est l’union des éléments de x.


Que valent ⋒11 ? et ⋒8 ?

59
3 – logique du premier ordre

➽ exercice 74 : Que vaut P(5) ?

➽ exercice 75 : Que vaut ⋒P(x) ?

On peut aussi définir le produit cartésien grâce à la notion de paire.

☞ exemple :

2×3 = {1} × {0, 1}


= {(1, 0), (1, 1)}
= {{{1}, {0, 1}}, {{1}}}
= {{2, 3}, {2}}
= {12, 4}
= 4112

On définit un triplet (a, b, f ) par la paire (a, (b, f )). Un triplet peut être considéré comme
une application : a est l’ensemble de départ, b est l’ensemble d’arrivée et f représente les
associations de valeurs pour l’application sous forme de paires.

☞ exemple : L’injection canonique de 2 = {1} dans 3 = {0, 1} est ainsi définie


par le triplet (2, 3, 16) car f = {(1, 1)} = {4} = 16.

➽ exercice 76 : Inversement 34 est une application, laquelle ?

3.3.2 Théorème de Herbrand


Les travaux de Jacques Herbrand➠ sont fondamentaux pour le calcul des prédicats et, en
particulier, pour fournir les outils nécessaires à des preuves automatiques dans ce domaine.

60
aspects déductifs

Définitions
Soit C un ensemble de clauses. Considérons H0 ensemble des symboles de constantes
ayant au moins4 une occurrence dans C. On définit Hi ensemble de termes clos de C de
niveau i par : [
Hi = Hi−1 ∪ {f (t1 , . . . , tn )}
f/n ,tj ∈Hi−1

H∞ = limi→∞ Hi est appelé univers de Herbrand de C.

☞ exemple : Soit C = {P (a), ¬P (x) ∨ P (f (x))}. On a :

H0 = {a}
H1 = H0 ∪ {f (a)} = {a, f (a)}
..
.
Hi = {a, . . . , f i−1 (a)} ∪ {f (a), f (f (a)), . . . , f i (a)} = {f j (a)|j ∈ [i]}

H∞ = limi→∞ Hi est l’univers de Herbrand. H∞ = {f k (a)|k ∈ N}.

➽ exercice 77 : Quel est l’univers de Herbrand de l’ensemble de clauses suivant :

C = {P (f (x)), R(a, g(y), b)}

On appelle atomes de Herbrand associés à un ensemble de clauses C les atomes obte-


nus en remplaçant dans les atomes de C les variables par des éléments de H∞ . L’ensemble
ainsi obtenu est appelé base de Herbrand ou « atom set ». On appelle réalisation (ou
interprétation ou instance) de base d’une clause C, une clause obtenue en remplaçant les
variables de C par des éléments de H∞ .

☞ exemple : Soit C = {P (a, f (x)), Q(b) ∨ ¬R(g(y))}.


On a H∞ = {a, b, f (a), f (b), g(a), g(b), f (g(a)), . . .}.
Quelques atomes de Herbrand : P (a, f (a)), P (a, f (g(b))), Q(b), R(g(a)).
Quelques interprétations de base : P (a, f (a)), Q(b) ∨ ¬R(g(a)), Q(b) ∨
¬R(g(b)).

On appelle système de Herbrand associé à un ensemble de clauses C, l’ensemble des


interprétations de base des clauses de C.
4 Si aucune constante n’apparaı̂t dans C, on pose H0 = {a}.

61
3 – logique du premier ordre

✒ nota bene : L’univers de Herbrand représente l’ensemble des éléments que


l’on manipule. Les réalisations de base sont des énoncés de base (formules
atomiques appliquées à des éléments de l’Univers).

Théorème de Herbrand

Théorème 23 (Théorème de Herbrand) – non démontré


Un ensemble C de clauses est insatisfiable si et seulement si il existe un
ensemble fini C ′ de réalisations de base insatisfiable.

☞ exemple : Soit C = {P (x), ¬P (f (a))}. C ′ = {P (f (a)), ¬P (f (a))} est un


ensemble de réalisations de base insatisfiable.

➽ exercice 78 : Montrer que C = {¬P (x) ∨ Q(f (x)), P (g(b)), ¬Q(y, z)} est
insatisfiable.

Corollaire 1
Un ensemble C de clauses est satisfiable si et seulement si tout ensemble fini
de réalisations de base est satisfiable.

✒ nota bene : Lorsque l’univers de Herbrand est fini, l’application du théorème 23


et de son corollaire 1 sont grandement facilitées.

62
aspects déductifs

Applications
Le théorème de Herbrand trouve une application directe dans la preuve qu’une for-
mule est universellement valide. En effet, pour cela, il faut prouver que sa négation est
insatisfiable (on applique alors le principe de réfutation – théorème 15 page 30).

☞ exemple : Montrons que :

F = ∀x∃y∀z(R(x, z) → R(x, y))

est universellement valide. Supposons qu’elle ne le soit pas. Il existe alors une
interprétation I et une valuation telle que la négation soit vraie. On a :

¬F = ∃x∀y∃z(R(x, z) ∧ ¬R(x, y))

La mise sous forme standard de Skolem de ¬F donne :

∃x∃f ∀y(R(x, f (y)) ∧ ¬R(x, y))

La forme clausale de ¬F est :

C¬F = {R(a, f (y1 )), ¬R(a, y2 )}

L’ensemble de réalisations de base C ′ = {R(a, f (a)), ¬R(a, f (a))} est in-


satisfiable. La négation de F ne peut donc être vraie, la formule est donc
universellement valide.

➽ exercice 79 : Montrer que ∃x∀y(((U (x) → U (y)) → T (x)) → T (y)) est


universellement valide.

Une autre application du théorème de Herbrand réside dans la validation de raison-


nement. Pour cela, on appliquera la méthode suivante :
➊ formaliser prémisses et négation(s) de conclusion(s)
➋ déterminer l’ensemble des clauses associées c’est-à-dire mettre la conjonction des
prémisses et conclusion(s) sous forme clausale
➌ expliciter un ensemble de réalisations de base insatisfiable (ou, a contrario, montrer
que la conjonction en question est universellement valide) pour valider (resp. invalider)
le raisonnement

☞ exemple : Montrons que le raisonnement suivant est valide :


➀ ∃xp(x) → ∀yp(y)
➁ ∀x(p(x) ∨ q(x))
➂ donc : ∃x¬q(x) → ∀yp(y)

63
3 – logique du premier ordre

La mise sous forme standard de Skolem des prémisses et de la négation de la


conclusion donne :
➀ ∀x∀y(¬p(x) ∨ p(y))
➁ ∀x(p(x) ∨ q(x))
➂ ∃x∃y(¬q(x) ∧ ¬p(y))
Ce qui nous donne la forme clausale de la conjonction des expressions précédentes :

C = {¬p(x1 ) ∨ p(y), p(x2 ) ∨ q(x2 ), ¬q(a), ¬p(b)}

L’ensemble C ′ = {¬p(a) ∨ p(b), p(a) ∨ q(a), ¬q(a), ¬p(b)} est insatisfiable (on
a pris x1 = x2 = a, y = b), validant ainsi le raisonnement.

➽ exercice 80 : Valider le raisonnement suivant :


➊ quelques chandelles éclairent très mal
➋ les chandelles sont faites pour éclairer
➌ donc : quelques objets qui sont faits pour éclairer le font très mal

➽ exercice 81 : Valider le raisonnement suivant :


➊ Aucun singe n’est soldat
➋ Tous les singes sont malicieux
➌ donc : Quelques créatures malicieuses ne sont pas des soldats

✒ nota bene : La méthode de validation de raisonnement proposée n’est pas un


algorithme car la recherche de l’ensemble d’instances de base insatisfiable n’en
est pas un.

3.3.3 Principe de résolution pour le calcul des prédicats


Considérons deux clauses C1 = P (x1 ) ∨ Q(x1 ) et C2 = ¬P (f (x2 )) ∨ R(x2 ). On ne peut
pas appliquer le principe de résolution comme nous l’avons vu pour le calcul propositionnel
(voir paragraphe 2.4.4 à partir de la page 36) car aucun littéral de C1 n’est la négation d’un
littéral de C2 .

64
aspects déductifs

Par contre, on voit tout de suite qu’en substituant f (a) à x1 dans C1 et a à x2 dans
C2 , on obtient les instances de bases C1′ = P (f (a)) ∨ Q(f (a)) et C2′ = ¬P (f (a)) ∨ R(a) qui
donnent par résolution Q(f (a)) ∨ R(a).
Plus généralement, en substituant f (x1 ) à x1 dans C1 et x1 à x2 dans C2 , on obtient la
résolvante Q(f (x1 )) ∨ R(x1 ), qui est plus « générale » que celle obtenue précédemment.

Substitution, unification
Une substitution est un ensemble fini de la forme {t1 /v1 , . . . , tn /vn } où les vi sont des ➲ substituer
variables, chaque ti est un terme différent de vi et les variables ont au plus une occurrence
à droite des « / ».

☞ exemple : {a/x, f (a)/y, g(f (b))/z} que l’on lira « a remplace x, f (a) remplace
y et g(f (b)) remplace z ».

À partir d’une expression logique E et d’une substitution θ = {t1 /v1 , . . . , tn /vn } on


obtient une instance de E notée Eθ en remplaçant dans E chaque occurrence de vi par le
terme ti .

☞ exemple : θ = {a/x, f (a)/y, g(f (b))/z} et E = P (x, y, z) donnent Eθ =


P (a, f (a), g(f (b))).

La composition de deux substitutions θ = {t1 /v1 , . . . , tn /vn } et λ = {u1 /y1 , . . . , um /ym }


notée θ ◦ λ est obtenue à partir de l’ensemble {t1 λ/v1 , . . . tn λ/vn , u1 /y1 , . . . , um /ym } en
éliminant tout élément tj λ/vj tel que tj λ = vj et tout ui /yi tel que yi ∈ {v1 , . . . , vn }.

☞ exemple : θ = {f (y)/x, z/y} et λ = {a/x, b/y, y/z} donnent {f (b)/x, y/y, a/x, b/y, y/z}.
θ ◦ λ est donc {f (b)/x, y/z}

Eθ = P (f (y), z, z)
θ λ

E = P (x, y, z) Eθ ◦ λ = P (f (b), y, y)
θ◦λ

Une substitution θ est appelée unificateur d’un ensemble {E1 , . . . , Ek } si et seulement ➲ unifier
si E1 θ = . . . = Ek θ. L’ensemble {E1 , . . . , Ek } est dit unifiable.

☞ exemple : {f (a)/x, a/y} est un unificateur de {P (a, x), P (a, f (y)).

65
3 – logique du premier ordre

Un unificateur σ de {E1 , . . . , Ek } est l’unificateur minimal (most general unifier) si et


seulement si pour tout unificateur θ, il existe λ tel que θ = σ ◦ λ.

☞ exemple : L’unificateur minimal de {P (a, x), P (a, f (y))} est ainsi σ = {f (y)/x}.

{P (a, x), P (a, f (y))} {P (a, f (a))}


θ={f (a)/x,a/y}

σ={f (y)/x} λ={a/y}


{P (a, f (y))}

L’ensemble de discordance (disagreement set) d’un ensemble non vide d’expressions W


est obtenu en repérant la première position pour laquelle les expressions de W n’ont pas le
même symbole et en prenant dans chaque expression W l’expression qui commence avec le
symbole occupant la position repérée.

☞ exemple : Pour W = {P (x, f (y, z)), P (x, g(x))}, l’ensemble de discordance


est {f (y, z), g(x)}.

➽ exercice 82 : Quel est l’ensemble de discordance de l’ensemble d’expressions :

W = {P (x, f (y, z)), P (x, a), P (x, g(x))}

66
aspects déductifs

Algorithme d’unification
[Chang et Lee, 1973] propose une première version de l’algorithme d’unification :

unification (W : ensemble d’expressions) : σk unificateur minimal


➀ On pose k ← 0, Wk ← W et σk ← ∅
➁ si Wk est un singleton, fin : σk est un unificateur minimal
sinon chercher l’ensemble de discordance Dk pour Wk
➂ si il existe vk et tk dans Dk tels que vk est une variable qui n’a aucune
occurrence dans tk , alors passer à l’étape ➃ sinon, fin : W n’est pas
unifiable
➃ σk+1 ← σk ◦ {tk /vk } et Wk+1 ← Wk {tk /vk }
➄ k ← k + 1 et retourner à l’étape ➁.

[Genesereth et Nilsson, 1986] en propose une version récursive. Dans cette version, in-
formelle, on cherche à unifier deux expressions représentées sous forme de listes. Ainsi, le
littéral P (x, F (a, y)) est noté (P x(F ay)).

unification (E1 , E2 : deux expressions) : unificateur minimal


➀ si E1 ou E2 est un atome, alors interchanger les paramètres E1 et E2
(si nécessaire) de telle sorte E1 soit un atome et passer à ➁ sinon passer
à ➂
➁ si E1 et E2 sont identiques, alors retourner ∅
sinon si E1 est une variable : si E1 a une occurrence dans E2 alors
retourner échec sinon retourner {E2 /E1 }
sinon si E2 est une variable, alors retourner {E1 /E2 } sinon retourner
échec
➂ F1 ← le premier élément de E1 , T1 ← le reste de E1 , F2 ← le premier
élément de E2 , T2 lef tarrow le reste de E2
➃ Z1 ← unification(F1 , F2 )
➄ si Z1 vaut échec alors retourner échec sinon G1 ← T1 Z1 et G2 ← T2 Z1
➅ Z2 ← unification(G1 , G2 )
➆ si Z2 vaut échec alors retourner échec sinon retourner Z1 ◦ Z2

➽ exercice 83 : Tenter d’unifier {P (x, f (y, z)), P (x, a)}

➽ exercice 84 : Tenter d’unifier {Q(f (a), g(x)), Q(y, x)}

67
3 – logique du premier ordre

➽ exercice 85 : Unifier {Q(f (a), g(x)), Q(y, z)}

Principe de résolution pour le calcul des prédicats

L’utilisation conjointe du théorème de Herbrand (théorème 23) et de l’algorithme d’uni-


fication permet d’appliquer aisément le principe de résolution au calcul des prédicats comme
nous l’avons fait pour le calcul propositionnel au paragraphe 2.4.4.
Pour l’illustrer, nous allons utiliser un exemple provenant de [Carroll, 1966] :

➊ Aucun avare n’est altruiste


➋ Les personnes qui conservent les coquilles d’œufs sont avares
➌ Donc aucune personne altruiste ne conserve les coquilles d’œufs

Nous allons commencer par formaliser l’ensemble des propositions. On considère les
prédicats suivants : av(x) pour « x est avare » ; al(x) pour « x est altruiste » ; coq(x) pour
« x conserve les coquilles d’œufs ».
Une formalisation du raisonnement précédent est donc :
➊ ∀x(av(x) → ¬al(x))
➋ ∀x(coq(x) → av(x))
➌ ∀x(al(x) → ¬coq(x))
La mise sous forme clausale de ce raisonnement (l’expression ➍ est la négation de l’ex-
pression ➌) donne :

➊ {¬av(x1 ) ∨ ¬al(x1 )}
➋ {¬coq(x2 ) ∨ av(x2 )}
➌ {¬al(x3 ) ∨ ¬coq(x3 )}
➍ {al(a), coq(a)}

On a ici H∞ = {a} aussi bien pour l’ensemble d’expressions ➊, ➋ et ➌ que pour


l’ensemble ➊, ➋ et ➍.
Il existe plusieurs façons de prouver la validité de ce raisonnement. On peut par exemple
faire de la résolution avec réfutation. Pour cela, on utilise l’ensemble d’expressions ➊, ➋
et ➍ et partant de la négation de la conclusion (expression ➍), on tente par résolution
d’atteindre la clause vide .
On obtient ainsi :

68
aspects déductifs

1: ➍ al(a)
2: ➊ ¬av(x1 ) ∨ ¬al(x1 )
3: subst ¬av(a) ∨ ¬al(a) (unif {al(x1 ), al(a)} = {a/x1 })
4: reso 1 · 3 ¬av(a)
5: ➋ ¬coq(x2 ) ∨ av(x2 )
6: subst ¬coq(a) ∨ av(a) (unif {av(x2 ), av(a)} = {a/x2 })
7: reso 4 · 6 ¬coq(a)
8: ➍ coq(a)
9: reso 7 · 8 
On a ainsi identifié un ensemble d’instances de base insatisfiable : {al(a), ¬av(a) ∨
¬al(a), ¬coq(a) ∨ av(a), coq(a)}. Celui-ci nous permet, en appliquant le théorème de Her-
brand, de montrer que le raisonnement est valide.
Une autre façon de prouver ce résultat est de faire un raisonnement par résolution
sans réfutation. Dans ce cas-là, le but est d’atteindre la conclusion par résolution à partir
des simples hypothèses. Ici, nous allons, à partir des expressions ➊ et ➋, tenter d’obtenir
l’expression ➌.
1: ➊ ¬av(x1 ) ∨ ¬al(x1 )
2: ➋ ¬coq(x2 ) ∨ av(x2 )
3: subst ¬coq(x1 ) ∨ av(x1 ) (unif {av(x1 ), av(x2 )} = {x1 /x2 })
4: reso 1 · 3 ¬al(x1 ) ∨ ¬coq(x1 )
5: subst ¬al(x3 ) ∨ ¬coq(x3 ) (substitution utilisée : {x3 /x1 })
On obtient ici exactement la conclusion que l’on cherchait à obtenir, validant ainsi le
raisonnement.

➽ exercice 86 : On peut montrer le résultat sans utiliser la résolution, comment ?

➽ exercice 87 : On considère l’ensemble de propositions suivant :


➊ Un dragon est heureux si tous ses enfants peuvent voler
➋ Les dragons verts peuvent voler
➌ Un dragon est vert s’il a au moins un parent vert ou rose
Montrer par résolution avec réfutation que :
➍ les dragons sans enfant sont heureux
➎ les dragons verts sont heureux

69
3 – logique du premier ordre

3.3.4 Propriétés du calcul des prédicats

Théorème 24 (Gödel➠) – non démontré


Le calcul des prédicats muni de la résolution et de l’unification est correct et
complet

✒ nota bene : Le calcul des prédicats est indécidable. Il n’existe pas d’algorithme
permettant de décider à tout coup si une formule close est vraie ou fausse.

On constate dans les preuves réalisées par résolution avec ou sans réfutation que le
mécanisme d’unification permet une sorte de calcul au sein de la logique. Cette analogie avec
le calcul est à la base de l’utilisation de la logique comme langage de programmation dont
l’archétype est le langage prolog. En prolog, on se limite à un sous-ensemble décidable
du calcul des prédicats : on ne manipule que des clauses dites de Horn. Une clause de Horn
possède au plus un littéral positif. Cette limitation n’est pas restrictive en pratique rendant
prolog un langage évolué particulièrement puissant.

70
chapitre quatre

logiques non classiques

C’est un préjugé, mais il est absolument


indéracinable, qui veut que la raison raide soit
plus de la raison que la raison souple. [...] C’est
comme si on disait que les mathématiques de
la droite sont plus des mathématiques que les
mathématiques de la courbe. Il est évident au
contraire que ce sont les méthodes souples, les
logiques souples, les morales souples qui sont
les plus sévères étant les plus serrées.

Charles Péguy
Notes sur M. Bergson

La logique classique (le calcul propositionnel ou le calcul des prédicats) est caractérisée
par son caractère binaire : tout est soit vrai, soit faux. La logique classique est aussi mono-
tone : la valeur de vérité des propositions ou des formules ne peut évoluer. Pour répondre à
ces limitations (car en réalité, tout n’est pas binaire et tout n’est pas monotone), de nouvelles
logiques ont été proposées à partir des années 1920. Certaines sont plurivalentes (plusieurs
valeurs de vérité), d’autres sont non vérifonctionnelles (leur sémantique ne dépend pas que
des valeurs immédiates des expressions) ou encore ont des données floues, etc.
Aussi, contrairement à la logique traditionnelle, les logiques non classiques peuvent
examiner la vérité et la fausseté des propositions dans leur rapport à l’action (logique
déontique➲), au temps (logique temporelle), aux faits (logique modale), à la croyance et au ➲ modalité
savoir (logique épistémique➲). Ces logiques ont donc un contenu sémantique.
On peut donner deux grandes classes de logiques non classiques :
– des extensions comme les logiques modales (dont les logiques temporelle et déontique
sont un cas particulier) ;
– des logiques rivales : logiques multivalentes et logique floue.

71
4 – logiques non classiques

4.1 Logiques modales


➥ intuition- La logique modale complète la logique classique contrairement à la logique intuitionniste
nisme (logique qui n’accepte pas le tiers-exclu) qui l’affaiblit. Elle est fondée sur le fait que la
définition de l’implication classique (⊢ p → q ↔ ¬p ∨ q) vide la notion d’implication de sa
signification causale s’il n’y a aucun lien entre p et q car il suffit, comme on l’a déjà vu, que
p soit faux pour que p → q soit vrai.
Alors que la logique classique cherche à savoir si les propositions sont vraies ou fausses.
La logique modale, quant à elle, cherche à déterminer leur « manière » d’être vraies ou
fausses. Les propositions sont-elle vraies en fonction de leur forme (vérité formelle) ou de
leur adéquation à un fait du monde (vérité factuelle ou matérielle) ? La logique modale
introduit donc des « modalités » à la logique classique afin de rendre compte des diverses
possibilités d’adéquation ou de non adéquation avec les faits du monde, soit en terme de
possibilité ou de nécessité.
Bien que, stricto sensu, la logique modale étudie les raisonnements qui tiennent compte
des expressions « il est nécessaire que » et « il est possible que », le terme « logique modale »
couvre en fait une famille de logiques avec des règles similaires et une grande variété de
différents symboles. Les plus « classiques » sont repris dans la figure 4.1.

Logique Symboles Expression modélisée


modale  il est nécessaire que ...
♦ il est possible que ...
déontique O il est obligatoire que ...
P il est permis que ...
F il est interdit (forbidden) que ...
temporelle G il sera toujours le cas que ...
F à un moment donné, il sera le cas que ...
H il a toujours été le cas que ...
P il a été le cas que ...

Fig. 4.1 — Logiques modales et symboles associés

4.1.1 Logique modale


On introduit les différentes modalités :
– possible : se dit d’une proposition qui peut être vraie. On note ♦p.
– impossible : se dit d’une proposition qui ne peut jamais être vraie. On note ¬♦p.
– nécessaire : se dit d’une proposition qui est toujours vraie. Toute proposition nécessaire
devra également être possible. On note p.
– contingent➲ (ou non nécessaire) : se dit d’une proposition qui peut ne pas être vraie,
mais qui pourrait éventuellement l’être. On note ¬p.

p ≡ ¬♦¬p ¬♦p ≡ ¬p ♦p ≡ ¬¬p ¬p ≡ ♦¬p

Ces modalités peuvent être considérées comme des opérateurs unaires qui, une fois
appliqués à des propositions, donnent d’autres propositions. Toutefois, ils sont différents

72
logiques modales

des opérateurs logiques usuels (disjonction, conjonction, implication, . . .), qui eux sont
vérifonctionnels, c’est-à-dire que la valeur d’une proposition formée de l’un d’entre eux
ne dépend que de la valeur de ses constituants immédiats. Les opérateurs modaux, en vertu
de leur signification intuitive, ne sont pas vérifonctionnels : la connaissance de la vérité de
« p » ne suffit pas à déterminer la valeur de vérité de « p ». Par conséquent, les opérateurs
modaux ne peuvent pas être définis par les opérateurs vérifonctionnels usuels.

✒ nota bene : Les opérateurs  et ♦ se comportent en fait beaucoup comme


les quantificateurs ∀ et ∃. Par exemple, la définition de  à partir de ♦ est
similaire à l’équivalence entre ∀xA et ¬∃x¬A dans la logique des prédicats. De
la même façon, on peut voir que (A∧B) implique (mais n’est pas équivalent
à) A ∧ B (tout comme d’ailleurs ♦A ∨ ♦B implique ♦(A ∨ B)) de la même
façon que se comportent ∀ et ∃ vis-à-vis de ∨ et ∧ (voir le paragraphe 3.2.3
page 51).

Une famille de systèmes formels


Les logiques modales les plus familières sont construites à partir d’une logique faible
(simple) nommée K (d’après Saul Kripke➠). K est obtenue à partir de la logique proposi-
tionnelle en ajoutant une règle et un axiome (dans lesquels A et B représentent des formules
quelconques) :
➊ si A est un théorème de K alors A aussi (règle de nécessitation)
➋ (A → B) → (A → B) (axiome de distribution)
Le système K est trop faible pour rendre pleinement compte de la notion de nécessité.
L’axiome suivant n’est pas démontrable dans K mais paraı̂t hautement désirable :
(M ) A → A

✒ nota bene : (M ) précise que ce qui est nécessaire doit être. Notons que (M )
serait (intuitivement) incorrect si  devait être lu « cela devrait être le cas
que ... » ou « il a été le cas que ... ». L’axiome (M ) permet de distinguer la
logique (purement) modale des autres logiques modales.

L’adjonction de l’axiome (M ) au système K donne le système1 M. Beaucoup de logiciens


pensent que le système M est trop faible encore pour formaliser la logique de la nécessité et
de la possibilité. Ils recommandent ainsi l’adjonction de nouveaux axiomes pour prendre en
compte l’itération ou la répétition des opérateurs modaux. Voici deux de ces plus fameux
axiomes :
➍ A → A
➎ ♦A → ♦A
1 Quelques auteurs appellent ce système : T.

73
4 – logiques non classiques

S4 est le système obtenu en ajoutant ➍ à M. De même, S5 est le système obtenu en


ajoutant ➎ à M. Dans S4, l’expression A est équivalente à A. Ainsi, une suite de 
peut être remplacée par un unique . Il s’agit de prendre en compte le fait que répéter un
opérateur modal est toujours superflu. Le système S5 présente des principes encore plus forts
pour simplifier les séries d’opérateurs modaux. Dans S4, une série d’opérateurs de même
sorte peut être remplacé par cet opérateur ; dans S5, les séries contenant les deux types
d’opérateurs sont équivalentes au dernier opérateur de la série. Ainsi, par exemple, dire
qu’il est possible que A soit nécessaire est la même chose que de dire que A est nécessaire.
On peut toujours contester l’interprétation faite des séries d’opérateurs mais il faut
prendre en compte le fait que les mots « possiblement » et « nécessairement » eux-mêmes
ont différentes acceptions validant les différentes propositions. C’est pour cela qu’il n’y a
pas qu’une seule logique modale mais différentes logiques bâties autour de M.

➽ exercice 88 : Le langage de S5 est défini par les formules du calcul propositionnel


auxquelles on ajoute les formules A et ♦A si A est une formule (♦A est
l’abréviation de ¬¬A). En utilisant les règles d’inférences classiques et la
nécessitation, montrer dans S5 que :
➀ A → B |= A → B
➁ A → B |= ♦A → ♦B
➂ A → A

Théorie des mondes possibles


Jusqu’aux années 1960, la logique modale n’avait été développé que d’un point de vue
syntaxique. Cela est dû principalement au fait que les opérateurs modaux ne sont pas
vérifonctionnels : il semblait donc impossible de définir une notion inductive d’attribution
de valeur de vérité, où les conditions de vérité des propositions complexes sont caractérisées
récursivement à partir des conditions de vérité de leurs constituants. Leibniz➠ avait tout
de même à son époque fait le lien entre les modalités et l’idée de monde possible. Il faudra
toutefois attendre Kripke pour que la sémantique de la logique modale soit développée grâce
à la théorie des mondes possibles.
Pour Kripke, un système logique n’a pas de valeurs de vérité en lui-même mais seulement
relativement à des choix sémantiques. Un système formel est donc toujours lié à son ap-
plication c’est-à-dire un domaine de référence. La logique classique renvoie, elle, au monde
actuel. Dans la mesure où la logique modale (surtout avec la notion de possibilité) renvoie
à plusieurs mondes possibles, elle aura plusieurs domaines de référence. Ainsi, pour rendre
compte de la sémantique de la logique modale, on a recours à la théorie des mondes pos-
sibles. Il s’agit d’univers logiquement possibles, de mondes stipulés. Plus formellement, un
cadre de Kripke est la donnée d’un couple (W, R), où W est un ensemble non vide appelé
l’univers et R est une relation binaire sur W appelée la relation d’accessibilité. Les éléments
de W sont appelés les mondes. La figure 4.2 montre un exemple de cadre de Kripke.
Les cadres de Kripke sont caractérisés par leur relation d’accessibilité R : elle peut
être réflexive, symétrique, transitive, séquentielle (depuis chaque monde il existe un monde
accessible), convergente (pour tout monde w, si w1 et w2 sont accessibles depuis w, alors il
y a un monde accessible depuis w1 et w2 à la fois).

74
logiques modales

p p
w1 w3

p
w2

¬p p
w5 w4

Fig. 4.2 — Un cadre de Kripke. Les arcs indiquent la relation d’accessibilité R. Les cercles contiennent les
propositions vraies dans chacun des mondes de l’univers.

➽ exercice 89 : Caractériser la relation d’accessibilité utilisée pour la figure 4.2.

✒ nota bene : L’adjonction d’axiomes au système K revient à caractériser plus


précisément la relation d’accessibilité considérée. Ainsi, M revient à dire que
cette relation est réflexive, S4 revient à dire qu’elle est réflexive et transitive
et S5 qu’elle est une équivalence.

On définira les valeurs de vérité des modalités en fonction des mondes possibles de la
façon suivante :
– P est vrai si P est vrai dans tous les mondes accessibles (directement) ; il sera en
particulier vrai dans le monde « réel » qui est un des mondes possibles
– ♦P est vrai si P est vrai dans un monde accessible
– P est faux si P est faux dans un monde accessible
– ♦P est faux si P est faux dans tous les mondes accessibles

☞ exemple : Considérons les mondes de la figure 4.2. La formule p est satisfiable


en w1 car p est vrai dans tous les mondes accessibles à partir de w1 (ici w2
et w3 ). La formule ♦¬p n’est pas satisfiable car ¬p n’est accessible à partir
d’aucun monde.

75
4 – logiques non classiques

➽ exercice 90 : Dans la figure 4.2, si on suppose ¬p en w4 , que peut-on dire en


w2 ?

✒ nota bene : La sémantique de la logique modale que nous présentons porte


sur des domaines fixes, c’est-à-dire que le domaine d’individus est commun
à tous les mondes possibles. Dans la mesure où il est possible d’attribuer un
domaine d’individus différent à chacun des mondes possibles, il est possible de
développer une sémantique à domaines variables dans le cadre de la logique
modale.

4.1.2 Logique déontique


La logique déontique est une structure logique des systèmes de valeurs, qui s’intéresse
aux actions plutôt qu’aux événements. Elle traite formellement le discours normatif qui
exprime des obligations, des permissions. Il s’agit donc de traiter formellement des énoncés
contenant des expressions telles que : « il est permis de », « il est interdit de », « il est
facultatif de », il est obligatoire de ». Ces expressions « modalisent » les énoncés de la même
façon que les modalités le font. La logique déontique se distingue de l’éthique et de la
théorie du droit, auxquels elle s’applique, dans la mesure où elle ne fournit aucun contenu
aux énoncés normatifs qu’elle traite.
Les notations de la logique déontique sont :
– l’obligation (O) : elle correspond à la nécessité modale
– l’interdiction (I) : elle correspond à l’impossibilité modale
– la permission (P) : elle correspond à la possibilité modale
– le facultatif (F) : elle correspond à la contingence modale
À chaque instant, il est possible de transformer le monde actuel en monde admissible
ou inadmissible faisant ainsi référence à la théorie des mondes possibles. Certains principes
classiques s’appliquent à la logique déontique, d’autres ne le sont pas compte tenu de leur
contenu sémantique.
Les axiomes de la logique déontique sont :
➊ le principe de distribution déontique : P(A ∨ B) ≡ (P(A) ∨ P(B))
➋ le principe de permission : P(A) ∨ P(¬A)

✒ nota bene : Voici trois principes classiques non applicables à la logique déontique :
➀ le paradoxe de l’obligation dérivée : le principe du « faux implique tout »
ne s’applique pas à la logique déontique. Il est faux de dire que :
O(¬p) → O(p → q).
➁ le principe d’adjonction ne s’applique pas à la logique déontique. Il est
faux de dire que : O(p) → O(p ∨ q).
➂ contrairement à la logique modale, ou le monde actuel peut être un
monde possible, le monde actuel de la logique déontique ne peut être
un monde admissible, sinon aucune action immorale n’aurait lieu dans
le monde actuel. Il est faux de dire que : O(p) → p.

76
logiques modales

4.1.3 Logique temporelle


« Irma est veuve, Max a épousé Irma donc Max a épousé une veuve, mais alors Irma
n’est plus veuve ». C’est le genre de contradiction qui apparaı̂t lorsqu’on ne tient pas compte
de l’évolution d’un système dans le temps. Les systèmes réels, comme par exemples les
systèmes de prédiction ou de contrôle en temps réel (gestion des alarmes, . . .), doivent
pouvoir raisonner dans le temps. Ces raisonnements sont donc non monotones, à savoir que
des conclusions peuvent être remises en cause par de nouvelles informations arrivant dans le
temps. Une proposition dans la logique temporelle, peut avoir différentes valeurs de vérité
à des instants différents.
On introduit dans la logique temporelles les opérateurs (modalités) suivants :
– Fp : p sera vrai au moins une fois dans le futur
– Pp : p a été vrai au moins une fois dans le passé
– Gp : p sera toujours vrai dans le futur (dorénavant), Gp est défini par : ¬F¬p
– Hp : p a toujours été vrai dans le passé (jusqu’à présent), Hp est défini par : ¬P¬p
La plus simple axiomatique de la logique temporelle est le système L0 contenant les
axiomes de la logique classique et les quatre axiomes supplémentaires suivants :
➊ G(p → q) → (Gp → Gq)
➋ H(p → q) → (Hp → Hq)
➌ p → GPp
➍ p → HFp
On utilise le modus ponens classique comme règle d’inférence ainsi que la règle dite de
généralisation temporelle : si p est un théorème, alors Gp et Hp le sont aussi. Un certain
nombre de théorèmes de complétude ont été prouvés pour cette axiomatique.
En logique temporelle comme en logique modale, il est nécessaire d’introduire un graphe
appelé « cadre temporel » (qui s’apparente à la théorie des mondes possibles) pour représenter
le temps. Ce graphe représente une relation binaire R (au minimum transitive pour L0 ) ap-
pelée relation d’antériorité. Comme pour la logique modale, les propriétés attribuées à R
définissent différents systèmes formels. On distingue particulièrement :
– le systèmeL1 où R est une relation d’ordre. Il s’agit de L0 augmenté de l’axiome2 :
Gp → GGp qui indique la transitivité.
– le système Larb où R est un ordre arborescent
Il s’agit de L1 augmenté de : Pp ∧ Pq → P(p ∧ Pq) ∨ P(p ∧ q) ∨ P(Pp ∧ q). L’ordre est
une arborescence : déterministe pour le passé, ramifié pour le futur.
– le système L2 où R est un ordre total. Il s’agit de L0 augmenté de deux axiomes :
➀ Fp ∧ Fq → F(p ∧ Fq) ∨ F(p ∧ q) ∨ F(Fp ∧ q)
➁ Pp ∧ Pq → P(p ∧ Pq) ∨ P(p ∧ q) ∨ P(Pp ∧ q)
L’ordre est linéaire vers l’avant et vers l’arrière.
– le système L3 où R est un ordre total avec extrémités. Il s’agit de L2 augmenté de
deux axiomes :
➀ G ∨ FG
➁ H ∨ PH
2 Ce schéma d’axiome est équivalent à : FFp → p.

77
4 – logiques non classiques

– le système L4 où R est un ordre total sans extrémités. Il s’agit de L2 augmenté de


deux axiomes :
➀ Gp → Fp
➁ Hp → Pp
– le système L5 où R est un ordre total dense. Il s’agit de L2 augmenté de l’axiome :
Fp → FFp.
– le système LQ où R est un ordre total dense dénombrable. Il s’agit de la réunion
de L4 et L5 (c’est-à-dire Fp → FFp qui entraı̂ne Pp → PPp). LQ est isomorphe à
l’ensemble des rationnels Q. De plus, un théorème dû à Hamblin montre que toutes
les combinaisons de « temps » avec les opérateurs G, H, Fet P se ramènent à 15 temps
reliés par des implications présentés dans la figure 4.3.
– le système L6 où R est un ordre total discret. Il s’agit de L2 augmenté de deux
axiomes :
➀ p ∧ Hp → FHp
➁ p ∧ Gp → PGp
– le système L7 où R est un ordre total complet. Il s’agit de L2 augmenté des axiomes :
➀ Fp ∧ FG¬p → F(HFp ∧ G¬p)
➁ Pp ∧ PH¬p → P(GPp ∧ H¬p)
– le système LR . Il s’agit de LQ augmenté de :
➀ Fp ∧ FG¬p → F(HFp ∧ G¬p)
➁ Pp ∧ PH¬p → P(GPp ∧ H¬p)
LR est isomorphe à R l’ensemble des réels.
– le système L8 où R est un bon ordre. Il s’agit de L2 augmenté de : H(Hp → p) → Hp.
– le système L9 où R est un treillis. Il s’agit de L2 augmenté de
➀ Gp → Fp, Hp → Pp
➁ FGp → GFp
➂ PHp → HPp

✒ nota bene : Allen a proposé dans [Allen, 1984] une représentation à l’aide
d’intervalles (représentant un événement dans sa durée) dans le traitement
du temps. Les relations d’Allen sont :
– I précède J : I < J ⇔ ∀u ∈ I∀v ∈ J, u < v
– I touche J : ImJ ⇔ max(I) = min(J)
– I chevauche J : IoJ ⇔ min(I) < min(J) < max(I) < max(J)
– I est dans J : IdJ ⇔ I ⊂ J
– I débute J : IsJ ⇔ min(I) = min(J) ∧ max(I) < max(J)
– I termine J : IeJ ⇔ min(I) > min(J) ∧ max(I) = max(J)
L’algèbre d’Allen est un ensemble d’intervalles muni des 13 relations formées
par l’égalité, les 6 relations antiréflexives ci-dessus et leurs relations réciproques.
L’algèbre d’Allen permet de faire du raisonnement temporel.

78
logiques modales

Hp PHp HPp Pp

FHp GPp

GHp p FPp

PGp HFp

Gp FGp GFp Fp

Fig. 4.3 — Relations entre les 15 « temps » possibles dans LQ

☞ exemple : Considérons l’énoncé : « la porte est fermée et le soleil brille. Plus


tard, Fred ouvre la porte . . . ». On identifie ici quatre informations (➊ la porte
est fermée, ➋ la porte est ouverte, ➌ Fred ouvre la porte, ➍ le soleil brille).
Chacune de ces informations est vraie pendant une certaine durée. On peut
dire ici que :

– ➊ termine ➌
– ➌ débute ➋
– ➊ touche ➋
– ➊ chevauche ➍

➽ exercice 91 : Représenter graphiquement la situation. Que peut-on dire sur les


relations entre ➌ et ➍ et entre ➍ et ➋ ?

79
4 – logiques non classiques

4.2 Logiques multivalentes


Les logiques multivalentes répondent au souci d’attribuer une valeur de vérité autre que
le vrai ou le faux (l’indéterminé, le probable, . . .) à certains types d’énoncés, notamment
les énoncés relatifs au futur. En effet, les langues naturelles comportent des termes vagues
que la logique classique ne peut traiter. Le sens de certaines expressions ou énoncés peut
demeurer indéterminé, et ce, pour diverses raisons : soit que notre connaissance du monde
➲ intrinsèque est limitée, soit que l’énoncé lui-même est intrinsèquement indécidable, soit que l’énoncé est
formé de manière telle qu’il est logiquement impossible d’en déterminer le sens ou la valeur
de vérité.
Il est donc nécessaire d’introduire d’autres valeurs de vérité et ainsi développer un nou-
veau système logique si l’on veut rendre compte de ces énoncés vagues.

4.2.1 Logique trivalente de Lukasiewicz


Lukasiewicz➠ est le premier en 1920 à développer une logique trivalente. Les propositions,
dans sa logique, portant sur le passé ou le présent sont décidables (vraies ou fausses). Celles
portant sur le futur, quant à elles, sont de trois types :
➊ nécessaires : elles sont donc invariablement vraies
➋ impossibles : elles sont donc invariablement fausses
➌ contingentes : elles sont donc indéterminées
Lukasiewicz décide alors de développer un système logique à trois valeurs de vérité :
le vrai (), le faux () et l’indéterminé (❍)3 . Cette dernière a un statut particulier,
il ne s’agit pas d’une indétermination due au fait d’un manque d’information ou d’une
formulation paradoxale. L’indétermination est ici intrinsèque c’est-à-dire que, portant sur
des énoncés futurs, la valeur de vérité est tout simplement inconnaissable.
La logique trivalente de Lukasiewicz (L3) est une amplification sémantique par rapport
à la logique classique, car la valeur indéterminée n’est pas représentée syntaxiquement dans
le système trivalent, mais seulement sémantiquement, lorsqu’on fait des tables de vérités.
Les tables de vérité pour les connecteurs usuels dans L3 sont précisées sur la figure 4.4.

A ¬A ∧  ❍  ∨  ❍  →  ❍  ↔  ❍ 
        ❍        ❍ 
❍ ❍ ❍  ❍ ❍ ❍ ❍ ❍  ❍ ❍   ❍ ❍  ❍
    ❍        ❍    ❍ 

Fig. 4.4 — Tableaux définissant les opérateurs usuels pour L3

➽ exercice 92 : Vérifier que les trois axiomes suivants sont vérifiés dans L3 pour
toute interprétation de p et q.
– SA1 : p → (q → p)
– SA2 : ((p → ¬p) → p) → p
– SA3 : (¬p → ¬q) → (q → p)

3 Il est possible de donner une valeur mathématique à ces valeurs de vérité : 0 pour  et 1 pour 

classiquement. La valeur pour ❍ est alors 21 . C’est une valeur qui permet de faire le lien avec les opérateurs
usuels.

80
logiques multivalentes

✒ nota bene : L’adjonction de SA4 : (p → q) → ((q → r) → (p → r)) donne


l’axiomatique dite de Wajsberg pour la logique trivalente de Lukasiewicz.

La loi de la double négation est valide dans la logique de Lukasiewicz : il y a équivalence


entre une proposition et sa double négation. De même, la dualité entre conjonction et
disjonction est conservée. Par contre, cette logique ne permet pas le raisonnement par
l’absurde, les principes de tiers exclu et de non contradiction (voir page 14) ainsi que toutes
les lois utilisant les opérateurs de disjonction et de conjonction. Ce n’est pas contradictoire
pour autant puisque ce système ne permet pas la coexistence d’une loi et de sa négation.

➽ exercice 93 : Il existe une variante de L3 qui considère que la conjonction


de deux propositions indéterminées est fausse et que la disjonction de deux
propositions indéterminées est considérée comme vraie. Elle est notée L3∗ .
Donner les tables de vérité de L3∗ .

4.2.2 Logique trivalente de Kleene


Kleene➠ a proposé en 1938 une logique trivalente où la tierce valeur est l’inconnaissable.
L’indétermination dans le système de Kleene est donc épistémique c’est-à-dire que les
énoncés sur lesquels elle porte peuvent avoir une valeur intrinsèque, mais qui n’est pas acces-
sible à la connaissance. Les énoncés indécidables ne sont ni démontrables, ni réfutables. De
plus, dans cette logique, la valeur indéterminée ne peut être représentée mathématiquement.
Kleene comme Lukasiewicz dans L3 considère que la résultante d’une conjonction ou
d’une disjonction de deux propositions indéterminées doit être indéterminée. Mais, Kleene
fait la même proposition pour l’implication et l’équivalence ce qui différencie sa logique de
L3.
Les tables de vérité pour les connecteurs usuels dans K3, la logique trivalente de Kleene,
sont précisées sur la figure 4.5.

A ¬A ∧  ❍  ∨  ❍  →  ❍  ↔  ❍ 
        ❍        ❍ 
❍ ❍ ❍  ❍ ❍ ❍ ❍ ❍  ❍ ❍ ❍  ❍ ❍ ❍ ❍
    ❍        ❍    ❍ 

Fig. 4.5 — Tableaux définissant les opérateurs usuels pour K3

Dans K3, aucune loi logique n’est possible. Seules quelques lois sémantiques, comme les
définitions des opérateurs peuvent être formulées. La contamination de la valeur indéterminée

81
4 – logiques non classiques

sur la résultante est dite « faible » dans K3, dans la mesure où celle-ci n’est effective que
lorsque les deux composantes de la proposition sont indéterminées.

➽ exercice 94 : Vérifier si les trois axiomes suivants sont vérifiés dans K3 pour
toute interprétation de p et q.
– SA1 : p → (a → p)
– SA2 : ((p → ¬p) → p) → p
– SA3 : (¬p → ¬q) → (q → p)

4.2.3 Logique trivalente de Bochvar


Bochvar, en 1939, formule lui aussi une logique trivalente, notée B3, où la tierce valeur est
indéterminée. Il ne s’agit pas d’une indétermination intrinsèque ou épistémique, mais plutôt
logique. Les énoncés indécidables le sont en vertu de leur forme paradoxale ou du fait qu’ils
sont absurdes. Cette valeur indéterminée n’est pas contingente mais plutôt archi-fausse ou
plus fausse que fausse4 .
Les tables de vérité pour les connecteurs usuels dans B3 sont précisées sur la figure 4.6.
A ¬A ∧  ❍  ∨  ❍  →  ❍  ↔  ❍ 
        ❍    ❍    ❍ 
❍ ❍ ❍  ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍ ❍
    ❍    ❍    ❍    ❍ 

Fig. 4.6 — Tableaux définissant les opérateurs usuels pour B3

➽ exercice 95 : Vérifier si les trois axiomes suivants sont vérifiés dans B3 pour
toute interprétation de p et q.
– SA1 : p → (q → p)
– SA2 : ((p → ¬p) → p) → p
– SA3 : (¬p → ¬q) → (q → p)

B3 ne permet aucune loi, puisque l’indétermination est contaminante. Bochvar a proposé


une variante (dite « externe ») dans laquelle l’indéterminé est considéré comme faux dans les
tables. Cette variante est un équivalent syntaxique de la logique classique. L’indéterminé,
n’y est en fin de compte que conceptuellement (et non formellement) différent du faux.

➽ exercice 96 : Soient deux formules F et G, l’équivalence des formules F et G


(même table de vérité) sera notée F ≡ G dans une logique trivalente. Pour

4 On dirait plutôt de nos jours : « fausse de chez fausse » !

82
logiques multivalentes

L3, K3 et B3, vérifier si les équivalences suivantes sont valides :

p↔p ≡ 
p∨q ≡ (p → q) → q
p∧q ≡ ¬(¬p ∨ ¬q)
p→q ≡ ¬p ∨ p ≡ ¬(p ∧ ¬p)
p↔q ≡ (p → q) ∧ (q → p)

4.2.4 Logiques multivalentes


La logique L3 de Lukasiewicz est extensible à n valeurs. Une manière simple de présenter
cette extension est de considérer que  vaut la valeur 0 et  la valeur 1. Les valeurs
intermédiaires prennent alors leurs valeurs entre 0 et 1. Plus précisément, il s’agit d’une
application de P (les variables propositionnelles) dans [0, 1].

☞ exemple : Lukasiewicz a proposé pour une logique à n valeurs, la distribution


suivante :  
k
V = 0 ≤ k ≤ n − 1
n − 1

On peut alors définir les valeurs de vérité des différentes opérateurs de la façon suivante :

δ(¬p) = 1 − δ(p)
δ(p ∧ q) = min(δ(p), δ(q))
δ(p ∨ q) = max(δ(p), δ(q))
δ(p → q) = min(1, 1 − δ(p) + δ(q))

➽ exercice 97 : Vérifier que, pour n = 2, on obtient les tables de vérités de la


logique classique.

➽ exercice 98 : Vérifier la validité des axiomes suivants :


– SA1 : p → (q → p)
– SA2 : (¬p → ¬q) → (q → p)

83
4 – logiques non classiques

✒ nota bene : Une interprétation classique de ces différentes valeurs de vérité est
de les considérer comme des probabilités de réalisation.

4.3 Logique floue


Une des caractéristiques du raisonnement humain est qu’il est basé sur des données
imprécises ou incomplètes. Ainsi, déterminer si une personne est de petite ou de grande
taille est aisé pour n’importe lequel d’entre nous, et cela sans nécessairement connaı̂tre sa
taille exacte. La logique classique est basée sur des données exactes. Le principe du tiers
exclu donne deux groupes bien distincts : les grands et les petits. L’idée de la logique floue
(introduite par Zadeh➠ en 1965) est d’intégrer cette capacité de l’être humain à accepter
des données imprécises et à être néanmoins à même de raisonner.

✒ nota bene : En français, le mot « flou » est de connotation négative, il n’en est
rien en réalité. En effet, venant à l’origine du mot « duvet » (en anglais « fuzzy,
c’est-à-dire le duvet qui couvre le corps des poussins), le terme « fuzzy »
signifie « indistinct, brouillé, mal défini ou mal focalisé ». La « fuzzy logic »
originale est traduite « logique floue » en français.

4.3.1 Sous-ensembles flous


La notion de sous-ensemble flou a pour but de permettre des gradations dans l’appar-
tenance d’un élément à une classe, c’est-à-dire d’autoriser un élément à appartenir plus ou
moins fortement à cette classe. Cette notion permet l’utilisation de catégories aux limites
mal définies (comme « vieux » ou « adulte »), de situations intermédiaires entre le tout
et le rien (« presque vrai »), le passage progressif d’une propriété à une autre (« tiède »à
« chaud » selon la température) et l’utilisation de valeur approximative (« environ 12 ans »).
Étant donné un ensemble de référence X, on peut indiquer les éléments de X qui appar-
tiennent à une certaine classe de X et ceux qui n’y appartiennent pas. Cette classe est alors
un sous-ensemble de X. Si l’appartenance de certains éléments de X à une classe n’est pas
absolue, on peut indiquer avec quel degré chaque élément appartient à cette classe. Celle-ci
est alors un sous-ensemble « flou » de X.
Un sous-ensemble flou A de X est défini par une fonction d’appartenance qui associe
à chaque élément x de X, le degré fA (x), compris entre 0 et 1, avec lequel x appartient à
A.
fA (x) : X → [0, 1]

84
logique floue

✒ nota bene : Lorsque fA est à valeur dans {0, 1}, on obtient les sous-ensembles
classiques. Les cas extrêmes de sous-ensembles flous de X sont respectivement
X lui-même, lorsque fA prend la valeur 1 pour tous les éléments de X, et
l’ensemble vide ∅ lorsque fA est nulle sur tout X.

On adopte souvent la notation suivante pour représenter le sous-ensemble flou A, qui


indique pour tout élément x de X son degré fA (x) d’appartenance à A :
( P
x∈X fA (x)/x si X est fini
A= R
f (x)/x
X A
si X est infini

Un sous-ensemble flou A de X est caractérisé par :


➊ son support, noté supp(A), l’ensemble des éléments de X qui appartiennent au moins
un peu, à A.
supp(A) = {x ∈ X | fA (x) 6= 0}

➋ sa hauteur, notée h(a), le plus fort degré avec lequel un élément de X appartient à
A.
h(a) = sup fA (x)
x∈X

➌ son noyau, noté noy(A), l’ensemble des éléments de X qui appartiennent de façon
absolue (avec un degré 1) à A.

noy(A) = {x ∈ X | fA (x) = 1}

➍ sa cardinalité, noté |A|, le degré global avec lequel les éléments de X appartiennent
à A. X
|A| = fA (x)
x∈X

Un sous-ensemble flou est dit normalisé si sa hauteur est 1.

☞ exemple : Soit X = {Paris, Angers, Nantes}, l’ensemble des lieux proposés


pour une habitation, notés P , A, N . On peut définir les sous-ensembles flous
suivants, représentés graphiquement sur la figure 4.7, correspondant à des
choix :
– A = 0.8/P + 0.6/A + 0.4/N
– A′ = 0.2/P + 1/A + 0/N
– A′′ = 0/P + 0/A + 1/N
On a h(A) = 0.8, supp(A) = X, noy(A) = ∅, |A| = 1.8. Pour A, tous les
lieux sont acceptables, avec néanmoins un ordre de préférence.

85
4 – logiques non classiques

rA

r
s u rs A′
1.0 r
r
0.5 r uA′′
r
s
0 u u s
r
Paris Angers Nantes
Fig. 4.7 — Sous-ensembles flous pour des choix d’habitation

➽ exercice 99 : Caractériser les sous-ensembles flous A′ et A′′ de l’exemple


précédent.

☞ exemple : On peut définir la notion de « trentaine » à l’aide d’un sous-ensemble


flou normalisé A d’univers continu de support [24, 42] et de noyau [30, 38]. A
est représenté graphiquement sur la figure 4.8.

fA
1

0
âge
0 10 20 30 40 50
Fig. 4.8 — Sous-ensemble flou la « trentaine »

➽ exercice 100 : Quel est la cardinalité du sous-ensemble flou A ?

✒ nota bene : Si A est un sous-ensemble classique, il est identique à son support


et à son noyau, sa hauteur est 1 et sa cardinalité, le nombre d’éléments qui
le composent.

On note dans la suite F(X) l’ensemble de tous les sous-ensembles flous de X. Un sous-
ensemble flou A ∈ F(X) est dit plus spécifique que B ∈ F(X) si et seulement si noy(A) 6=
∅, noy(A) ( noy(B) et supp(A) ⊆ supp(B). Un sous-ensemble flou A ∈ F(X) est dit plus
précis que B ∈ F(X) de même noyau que lui si et seulement si supp(A) ( supp(B).

86
logique floue

Opérations sur les sous-ensembles flous


Deux sous-ensembles flous A et B de F(X) sont égaux (on note A = B) si et seulement
si leurs fonctions d’appartenance prennent la même valeur en tout point de X :
∀x ∈ X fA (x) = fB (x)
On dit que A ∈ F(X) est inclus dans B ∈ F(X) (on note A ⊆ B) si et seulement si
tout élément x de X qui appartient, même de façon modérée, à A appartient aussi à B avec
un degré au moins aussi grand :
∀x ∈ X fA (x) ≤ fB (x)
L’intersection de deux sous-ensembles flous A et B de X est le sous-ensemble flou
constitué des éléments de X affectés du plus petit de leurs deux degrés d’appartenance,
donnés par fA et fB . C’est le sous-ensemble C = A ∩ B de F(X) tel que :
∀x ∈ X fC (x) = min(fA (x), fB (x))
L’union de deux sous-ensembles flous A et B de X est le sous-ensemble flou constitué
des éléments de X affectés du plus grand de leurs deux degrés d’appartenance, donnés par
fA et fB . C’est le sous-ensemble C = A ∪ B de F(X) tel que :
∀x ∈ X fC (x) = max(fA (x), fB (x))
Ces définitions permettent de retrouver les propriétés classiques de l’union et de l’inter-
section, à savoir :
– associativité et commutativité de ∩ et ∪
– distributivité dans les deux sens de ∩ et ∪
– A ∪ ∅ = A, A ∪ X = X
– A ∩ X = A, A ∩ ∅ = ∅
– A∩B ⊆A⊆A∪B
De plus, la cardinalité des sous-ensembles flous vérifie :
|A| + |B| = |A ∩ B| + |A ∪ B|

➽ exercice 101 : Quel est l’union des ensembles A et A′ de la figure 4.7 ? Quel
est leur intersection ?

On définit le complément Ac d’un élément A de F(X) en considérant qu’un élément


appartient d’autant plus à Ac qu’il appartient peu à A. Il est donc défini ainsi :
∀x ∈ X fAc (x) = 1 − fA (x)
Contrairement aux sous-ensembles classiques, on a généralement :
A ∪ Ac 6= X et A ∩ Ac 6= ∅
Les autres propriétés sont cependant satisfaites, à savoir :

87
4 – logiques non classiques

– (A ∩ B)c = Ac ∪ B c et (A ∪ B)c = Ac ∩ B c (lois de de Morgan)


– (Ac )c = A
– |A| + |Ac | = |X|

☞ exemple : Si on définit la « trentaine »à l’aide d’un sous-ensemble flou normalisé


A d’univers continu de support [24, 42] et de noyau [30, 38]. On peut définir de
la même façon la « quarantaine » à l’aide d’un sous-ensemble flou normalisé
B d’univers continu de support [34, 52] et de noyau [40, 48]. La figure 4.9
présente les sous-ensembles flous A ∪ B (les 30–40 ans), A ∩ B (les personnes
entre la trentaine et la quarantaine) et Ac (tout sauf la trentaine).

fA
A
1 B

0
âges
0 10 20 30 40 50 60

fB
A∪B A∩B Ac
1

0
âges
0 10 20 30 40 50 60
Fig. 4.9 — Variations autour de « trentaine » et « quarantaine ».

✒ nota bene : Le choix des opérateurs min, max et de la complémentation à 1


pour définir respectivement l’intersection, l’union et le complément de sous-
ensembles flous est justifié par le fait qu’ils préservent presque toute la struc-
ture de la théorie classique des ensembles. Néanmoins, d’autres opérateurs
sont envisageables si l’on est moins exigeant sur la préservation des pro-
priétés classiques. Ainsi, les opérateurs les plus utilisés sont les suivants :
x∩y x∪y xc nom
min(x, y) max(x, y) 1−x Zadeh
x×y x + y − xy 1−x probabiliste
max(x + y − 1, 0) min(x + y, 1) 1−x Lukasiewicz
xy x+y−xy−(1−γ)xy
1−x Hamacher (γ > 0)
2
γ+(1−γ)(x+y−xy) 2 1−(1−γ)xy
x si y = 1 x si y = 0
4 y si x = 1 4 y si x = 0 1−x Weber (ou drastique)
0 sinon 1 sinon

88
logique floue

α-coupes d’un sous-ensembles flou


Lorsqu’on souhaite se référer à des sous-ensembles ordinaires correspondant de façon à
un sous-ensemble flou donné, la façon la plus simple de réaliser cette approximation est de
fixer une limite inférieure, notée α, aux degrés d’appartenance pris en considération. On
définit la α-coupe Aα d’un sous-ensemble flou A de X comme le sous-ensemble :

Aα = {x ∈ X | fA (x) ≥ α}

☞ exemple : Considérons les personnes autour de la « trentaine ». On a A0.5 =


[27, 40]. La figure 4.10 illustre ce résultat.

fA A0.5
1.0
0.5
0
âges
0 10 20 30 40 50
Fig. 4.10 — α-coupe pour la « trentaine »

➽ exercice 102 : Quelles sont les α-coupes de niveau 0.1, 0.4, 0.5 0.6, 0.7, 0.8 et
0.9 pour l’ensemble A de la figure 4.7 ?

Lorsque les opérations sur les ensembles flous sont compatibles avec les opérations clas-
siques, on a :
– (A ∩ B)α = Aα ∩ Bα
– (A ∪ B)α = Aα ∪ Bα
– A ⊆ B → Aα ⊆ Bα
La famille des α-coupes d’un sous-ensemble flou est une représentation de ce sous-
ensemble. On a :

∀x ∈ X fA (x) = sup α · χAα (x)


α∈]0,1]

où χAα est la fonction caractéristique de Aα c’est-à-dire qui associe 1 à x si x ∈ Aα et


0 sinon.

Produit cartésien de sous-ensembles flous


Soit X1 , . . . , Xr des ensembles de référence, et X = X1 × · · · × Xr leur produit cartésien,
dont les éléments sont des r-uplets (x1 , . . . , xr ), avec x1 ∈ X1 , . . . , xr ∈ Xr . À partir des

89
4 – logiques non classiques

sous-ensembles flous A1 , . . . , Ar respectivement définis sur X1 , . . . , Xr , on construit un sous-


ensemble flou A = A1 ×· · ·×Ar de X, considéré comme leur produit cartésien, de fonction
d’appartenance :

∀x = (x1 , . . . , xr ) ∈ X fA (x) = min(fA1 (x1 ), . . . , fAr (xr ))

☞ exemple : Soit X1 = {P, A, N }, l’univers des lieux proposés pour une résidence
et X2 = {M, A} l’univers de choix entre une maison et un appartement.
Les sous-ensembles flous A1 = 0.8/P + 0.6/A + 0.4/N , A2 = 0.3/M +
0.7/A représentent des préférences relatives à chacun des deux univers. Une
préférence relative aux deux univers de façon globale est représentée par leur
produit cartésien, défini comme A = 0.3/(P, M )+0.3/(A, M )+0.3/(N, M )+
0.7/(P, A)+0.6/(A, A)+0.4/(N, A), ce qui correspond à une préférence pour
un appartement à Paris, éventuellement à Angers ou Nantes, toutes les autres
hypothèses étant acceptables mais très modérément.

4.3.2 Relations et quantités floues


Relations floues
Étant donnés les ensembles de références X et Y , une relation entre X et Y peut être
difficilement représentable par une relation classique, parce qu’elle est imprécisément connue
ou graduelle. Par exemple, si X est l’ensemble des prix d’achat et Y celui des prix de vente,
« le prix d’achat est très inférieur au prix de vente » définit une classe imprécise de prix
de vente correspondant à chaque prix d’achat et la relation entre X et Y est de plus en
plus satisfaite au fur et à mesure que les valeurs de X deviennent de plus en plus faibles
par rapport à celles des éléments de Y , jusqu’à une satisfaction totale. Une relation floue
R entre X et Y est définie comme un sous-ensemble flou de X × Y . En particulier, si
X et Y sont finis, elle peut être décrite par la matrice M (R) des valeurs de sa fonction
d’appartenance.

☞ exemple : Soit X = Y = {x1 , x2 , x3 }, fR (x, y) est définie sous forme matri-


cielle :
y
x x1 x2 x3
x1 0.2 1 0.5
x2 0 0.6 0.3
x3 0 0.9 0.4

L’inverse de la relation R entre X et Y est la relation floue R−1 entre Y et X définie


par :
∀x ∈ X ∀y ∈ Y fR−1 (y, x) = fR (x, y)
La composition de deux relations floues R1 sur X × Y et R2 sur Y × Z définit une
relation floue R = R1 ◦ R2 sur X × Z de fonction d’appartenance :

90
logique floue

∀(x, z) ∈ X × Z fR (x, z) = sup min(fR1 (x, y), fR2 (y, z))


y∈Y

✒ nota bene : Cette définition est la plus classiquement utilisée. Mais, on peut
remplacer l’opérateur min par un autre opérateur, en particulier, les autres
opérateurs vus précédemment (page 88). D’autre part, cette définition est
compatible avec la composition ordinaire lorsque les relations R1 et R2 ne
sont pas floues. Elle est particulièrement facile à obtenir quand les ensembles
de références sont finis. En effet, le calcul de la composition peut être considéré
comme un produit matriciel pour lequel on remplace l’addition par l’opération
« max » et la multiplication par l’opération « min ».

☞ exemple : Pour la relation R définie dans l’exemple précédent, la relation R ◦ R


possède la fonction d’appartenance suivante :
y
x x1 x2 x3
x1 0.2 0.6 0.4
x2 0 0.6 0.3
x3 0 0.6 0.4

On définit les propriétés classiques des relations pour les relations floues de la façon
suivante :
– symétrie ∀(x, y) ∈ X × X fR (x, y) = fR (y, x)
– réflexivité ∀x ∈ X fR (x, x) = 1
– transitivité R ◦ R ⊆ R, en particulier dans le cas de la composition max-min utilisée
précédemment, on obtient :

∀(x, z) ∈ X × X fR (x, z) ≥ sup min(fR (x, y), fR (y, z))


y∈X

– antisymétrie ∀(x, y) ∈ X × X fR (x, y) > 0 et fR (x, y) > 0 → x = y

☞ exemple : La relation floue R de l’exemple précédent est transitive. La relation


floue R = « approximativement égal » définie par :
1
∀x ∈ X ∀y ∈ Y fR (x, y) =
1 + (x − y)2
est symétrique et réflexive.

Une relation floue réflexive et transitive est un pré-ordre flou. Si R est de plus anti-
symétrique, c’est une relation d’ordre floue, elle correspond à l’idée de classement ou la

91
4 – logiques non classiques

représentation de l’antériorité. Par contre, si elle est symétrique, c’est relation de simila-
rité, elle correspond à la notion de ressemblance. Les relations floues sont utilisées dans les
méthodes d’aide à la décision.

Quantités floues
On considère les sous-ensembles flous convexes de R, c’est-à-dire, les sous-ensembles
F ∈ F(R) tels que toute α-coupe de F est une partie convexe de R, ou encore :

∀(x, y) ∈ R × R ∀z ∈ [x, y] fF (z) ≥ min(fF (x), fF (y))

Un sous-ensemble flou normalisé de R est appelé quantité floue. Une valeur modale
d’une quantité floue Q est un élément m de R tel que fQ (m) = 1. Un intervalle flou est
une quantité floue convexe. Il correspond à un intervalle de l’ensemble des réels dont les
limites sont imprécises. Un nombre flou est un intervalle flou de fonction d’appartenance
semi-continue supérieurement et de support compact, admettant une unique valeur modale.
Il correspond à un nombre réel connu imprécisément.

☞ exemple : Sur la figure 4.11, I est un intervalle flou (approximativement entre


a et b) et M un nombre flou (environ m).

fI fM

a m b R

Fig. 4.11 — Exemples de quantités floues

Un intervalle flou I est de type L-R si et seulement si sa fonction d’appartenance est


construite à partir de quatre paramètres (m, m′ , a, b), m et m′ réels, a et b strictement
positifs, et de deux fonctions notées L et R définies sur l’ensemble des réels positifs, à valeurs
dans [0, 1], semi-continues supérieurement, non-croissantes, telles que L(0) = R(0) = 1,
L(1) = 0 ou ∀x, L(x) > 0 avec limx→∞ L(x) = 0 et R(1) = 0 ou ∀x, R(x) > 0 avec
limx→∞ R(x) = 0. fI est alors définie par :

fI (x) = L((m − x)/a) si x ≤ m


fI (x) = 1 si m < x < m′
fI (x) = R((x − m′ )/b) si x ≥ m′

On note alors I = (m, m′ , a, b)LR un intervalle flou de type L-R et, comme cas particulier
corrrespondant à m = m′ , M = (m, a, b)LR un nombre flou de type L-R.

92
logique floue

✒ nota bene : Les quantités floues ont souvent des fonctions d’appartenance
linéaires par morceaux (forme trapézoı̈dale pour les intervalles flous, forme
triangulaire pour les nombres flous, comme sur la figure 4.11). Elles sont alors
de type L-R avec R(x) = L(x) = max(0, 1 − x). Sur cet exemple, on a :
I = (2, 4, 0.5, 0.5)LR et M = (3.5, 0.2, 0.2)LR .

Étant donnés deux intervalles flous du même type L-R, I = (m, m′ , a, b)LR et J =
(n, n′ , c, d)LR , on définit les opérations ci-dessous :
– l’opposition : −I = (−m′ , −m, b, a)RL
– la somme : I ⊕ J = (m + n, m′ + n′ , a + c, b + d)LR
– la différence : I ⊖ J = (m − n′ , m′ − n, a + d, b + c)LR si L = R

✒ nota bene : Le produit (noté ⊗) et le quotient (noté ⊘) ne peuvent se définir


simplement car on n’obtient généralement pas un intervalle de type L-R lors-
qu’on généralise les produit et quotient classiques. On les définit à partir de
leur fonction d’appartenance :

∀z ∈ R fI⊗J (z) = sup min(fI (x), fJ (y))


{(x,y)|z=x·y}

∀z ∈ R fI⊘J (z) = sup min(fI (x), fJ (y))


{(x,y)|z=x/y}

➽ exercice 103 : On utilise des intervalles flous de fonction d’appartenance


trapézoı̈dale. Le prix d’achat d’un immeuble est « approximativement entre
1.5 et 3 MEUR à 150 kEUR près » et le coût de remise en état est « ap-
proximativement entre 4.5 et 6 MEUR à 300kEUR près ». Calculer le prix de
revient de cet immeuble.

4.3.3 Propositions floues


Une variable linguistique est représentée par un triplet (V, X, TV ) dans lequel V est
une variable (l’âge, la température, . . .), définie sur un ensemble de référence X (l’ensemble
des nombres entiers, des réels, . . .), sa valeur pouvant être n’importe quel élément de X. De
plus, TV est un ensemble, fini ou infini, de sous-ensembles flous de X, qui sont utilisés pour
caractériser V , définissant des restrictions des valeurs que prend V dans X. Cette notion sert
à modéliser les connaissances imprécises ou vagues sur une variable dont la valeur précise
est inconnue.

☞ exemple : Considérons la taille comme une variable V , définie sur l’ensemble X


des entiers positifs. Dans le cas des êtres humains, on peut définir TV comme

93
4 – logiques non classiques

dans la figure 4.12. On s’autorise ici à décrire la taille d’un être humain par les
qualificatifs : minuscule, petit, moyen, grand et immense. Si on voulait décrire
également la taille d’un humain par sa valeur précise, il faudrait ajouter dans
TV tous les singletons de X.

minuscule petit moyen grand immense


1

0
80 100 120 140 160 180 200

Fig. 4.12 — Exemple de variable linguistique (V, X, TV ) utilisée pour décrire la taille d’êtres humains

Modificateurs linguistiques

Un modificateur linguistique est un opérateur m qui permet, à partir de toute ca-


ractérisation floue A de V , de produire une nouvelle caractérisation m(A). Si la fonction
d’appartenance de A est fA , celle de m(A) est fm(A) = tm (fA ), obtenue par l’intermédiaire
d’une transformation mathématique tm attachée à m.

☞ exemple : On peut distinguer des modificateurs de renforcement tels que « très »,


« fortement », « réellement », . . ., et des modificateurs d’affaiblissement, tels
que « plus ou moins », « relativement », « plutôt », . . .. Les premiers modi-
ficateurs ont été proposés par Zadeh sous le nom de « très », associé à la
transformation tm (fA (x)) = fA (x)2 , et sous le nom de « plus ou moins » as-
socié à la transformation tm (fA (x)) = fA (x)1/2 . Une négation « non » peut
être considérée comme un modificateur linguistique, pour une transformation
tm (fA (x)) = 1 − fA (x).

Pour un ensemble M de modificateurs disponibles, on note M (TV ) celui des caractérisations


floues engendrées par M à partir de TV .

☞ exemple : Avec TV = {petit, moyen, grand}, M = {plutôt, non}, M (TV )


contient « plutôt petit », « plutôt non grand », « non moyen », . . ..

94
logique floue

Propositions floues

On considère un ensemble L de variables linguistiques et un ensemble M de modifica-


teurs. Une proposition floue élémentaire est définie à partir d’une variable linguistique
(V, X, TV ) de L par la qualification « V est A », pour une caractérisation floue A que l’on
suppose normalisée appartenant à TV ou M (TV ).

☞ exemple : « La taille est moyenne », « la vitesse est plutôt rapide », « le prix


n’est pas cher » sont des propositions floues élémentaires.

La valeur de vérité d’une proposition floue élémentaire « V est A » est définie par la
fonction d’appartenance fA de A.
Une proposition floue générale est obtenue par la composition de propositions floues
élémentaires « V est A », « W est B », . . . pour des variables V , W , . . . supposées non
interactives. La plus simple est la conjonction de propositions floues élémentaires « V est
A et W est B » où V et W sont définies sur des ensembles de références X et Y , et elle est
associée au produit cartésien A×B caractérisant la variable conjointe (V, W ) sur l’ensemble
X × Y . Sa valeur de vérité est donc définie par min(fA (x), fB (y)) en tout point (x, y) de
X × Y . De même, la valeur de vérité d’une disjonction de propositions floues est définie par
max(fA (x), fB (y)) en tout point (x, y) de X × Y .
Plus généralement, on peut construire des propositions floues par conjonction, disjonc-
tion ou implication portant sur des propositions floues quelconques.
Un quantificateur flou est un sous-ensemble flou de l’ensemble R des nombres réels,
mais le plus souvent de [0, 1] qui décrit un nombre de cas ou une proportion approximative,
tels que « dans la plupart des cas », « rarement », « dans quelques cas », « généralement »,
...

☞ exemple : La figure 4.13 représente le quantificateur flou « la plupart ».

0
0 0.25 0.50 0.75 1.00
Fig. 4.13 — Exemple de représentation du quantificateur flou « la plupart »

95
4 – logiques non classiques

4.3.4 Raisonnement flou


Une règle floue est une proposition floue utilisant une implication. On définit une
implication floue associée à toute règle floue du type « si V est A alors W est B » à partir
des deux ensembles de référence X et Y provenant des variables linguistiques (V, X, TV )
et (W, Y, TW ). La valeur de vérité de la proposition floue obtenue par utilisation d’une
implication floue entre les propositions floues « V est A » et « W est B » est définie par
la fonction d’appartenance fR d’une relation floue entre X et Y . Celle-ci s’exprime, pour
tout (x, y) de X × Y , en fonction des fonctions d’appartenance fA (x) intervenant dans la
prémisse (avant le « alors ») et fB (y) dans la conclusion de la règle :

fR (x, y) = Φ(fA (x), fB (y))

pour une fonction Φ choisie de telle sorte que, dans le cas où A et B son définis de façon
précise et certaine5 , l’implication floue soit identique à l’implication de la logique classique. Il
n’existe pas une façon unique de généraliser l’implication de la logique classique. Le tableau
de la figure 4.14 indique les implications floues le plus souvent employées.

Valeur de vérité fR Nom


1 − fA (x) + fA (x) · fB (y) Reichenbach (R)
max(1 − fA (x), min(fA (x), fB (y))) Willmot (W)
1 si fA (x) ≤ fB (y) et 0 sinon Rescher-Gaines (RG)
max(1 − fA (x), fB (y)) Kleene-Dienes (KD)
1 si fA (x) ≤ fB (y) et fB (y) sinon Brouwer-Gödel (BG)
min(fB (y)/fA (x), 1) si fA (x) 6= 0 et 1 sinon Goguen (G)
min(1 − fA (x) + fB (y), 1) Lukasiewicz (L)

Fig. 4.14 — Principales implications floues

☞ exemple : Considérons les variables V et W qui représentent respectivement le


poids et le prix définis sur des univers X et Y de nombres réels positifs. On
définit des ensembles TV et TW de caractérisations floues de V et W dans un
contexte donné, celui du commerce diamants par exemple. Pour « important »
et « élevé » appartenant respectivement à TV et TW , un « expert » fournit
une règle floue telle que :
« si le poids est important, alors le prix est élevé »
La figure 4.15 représente les deux quantités floues considérées. Si l’on utilise,
par exemple, l’implication de Lukasiewicz pour quantifier la force de liaison
entre la prémisse et la conclusion, la valeur de vérité de la règle floue fR (x, y)
est indiquée dans le tableau de la figure 4.16. Un poids donné x est lié à
chaque prix y avec une force fR (x, y) d’autant plus grande que la valeur de y
est acceptable, étant donné x, relativement à la règle énoncée. Par exemple,
un poids x appartenant à l’intervalle [b, ∞[ n’est lié à aucun prix y appartenant
à l’intervalle [0, c[ puisqu’alors fR (x, y) = 0.
5 A est définie de façon précise et certaine si f (x) prend la valeur 1 pour un unique point x et 0
A 0
partout ailleurs.

96
logique floue

fA fB

a b poids c d prix
Fig. 4.15 — Deux caractérisations dans le contexte du commerce de diamants

y
x [0, c[ ]c, d[ [d, ∞[ fA (x)
[0, a[ 1 1 1 0
b−x y−c
]a, b[ b−a min(1 − x−a
b−a + d−c , 1) 1 x−a
b−a
x−c
[b, ∞[ 0 d−c 1 1
x−c
fB (y) 0 d−c 1

Fig. 4.16 — Valeurs de vérité fR (x, y) de l’implication floue de Lukasiewicz

Le modus ponens généralisé s’applique dans les conditions suivantes6 :

Règle floue si V est A alors W est B


Fonctions d’appartenance fA fB
Fait observé V est A′
Fonction d’appartenance fA′
Conclusion W est B′
Fonction d’appartenance fB ′

Les informations disponibles pour déterminer la conclusion sont donc, d’une part, celles
relatives à la règle, quantifiées par l’implication floue fR qui décrit le lien causal entre « V
est A » et « W est B », et, d’autre part, celles relatives au fait observé, quantifiées par la
fonction d’appartenance fA′ . La fonction d’appartenance de B ′ est donc calculée comme
une combinaison de fR et de fA′ de la forme :

∀y ∈ Y fB ′ (y) = sup ⊤(fA′ (x), fR (x, y))


x∈X

pour un opérateur ⊤ appelé opérateur de modus ponens généralisé. Le choix de ⊤ doit


rendre le modus ponens généralisé compatible avec le modus ponens ordinaire, c’est-à-dire
que l’on doit obtenir fB ′ identique à fB dès que fA′ est identique à fA . Le tableau de la
figure 4.17 présente les principaux choix possibles.

6 On considère ici des propositions floues élémentaires mais le même schéma s’applique au cas de propo-

sitions floues générales.

97
4 – logiques non classiques

Opérateur ⊤ Nom Implication R


⊤(u, v) = max(u + v − 1, 0) Lukasiewicz R, W, RG, KD, BG, G, L ,M, P
⊤(u, v) = min(u, v) Zadeh RG, BG, M, P
⊤(u, v) = u · v Probabiliste RG, BG, G, M, P

Fig. 4.17 — Principaux opérateurs de modus ponens généralisé utilisables avec les implications floues du
tableau de la figure 4.14

☞ exemple : Reprenons l’exemple du commerce de diamants. Si l’on dispose d’une


règle graduelle telle que « plus un diamant est lourd, plus il est cher », une
proposition telle que « le poids du diamant est excessivement important », plus
spécifique que la prémisse « le poids du diamant est important » (A′ ⊆ A)
décrivant une observation, conduit de façon naturelle à un résultat tel que
« le prix est franchement élevé », plus spécifique que la conclusion de la règle
floue « le prix est élevé » (B ′ ⊆ B).

Caractéristiques de la logique floue


L’utilisation de connaissances imprécises, vagues et/ou incertaines conduit à raisonner
sur elles plus souplement qu’on ne pourrait le faire en logique classique et, en particulier, à
répondre aux besoins suivants :
– manipuler des valeurs de vérités intermédiaires entre le vrai et le faux ;
– moduler la notation de quantificateur entre les deux extrêmes que sont les quantifica-
teurs classiques ;
– qualifier linguistiquement la probabilité, la possibilité ou la vérité d’une proposition ;
– utiliser des règles de déduction en présence de faits qui ne leur conviennent qu’impar-
faitement.
Les premières réalisations de commande floue de processus industriels sont apparues en
Europe au début des années 1970 et la méthode développée a été reprise par les Japonais
au début des années 1980, pour en faire des succès industriels dont les médias se sont fait
l’écho. Il faut cependant se garder de réduire l’utilisation de la logique floue à ce seul cadre.
Des applications en existent dans la plupart des domaines. Citons par exemple l’économie,
la médecine, l’aide à la décision, la décision de groupe, la reconnaissance des formes, la
classification, les systèmes experts, les bases de données, la conception industrielle.

98
module deux

langages et algorithmes

99
chapitre cinq

langages formels et grammaires

Grammaire — Système de pièges délibérément


préparé pour faire trébucher l’autodidacte, tout
au long du chemin sur lequel il progresse vers
la distinction.

Ambrose Bierce

Un texte ou un discours d’une langue naturelle, un message codé, un programme destiné


à un ordinateur semblent pouvoir être décrits (parfois de plusieurs façons) comme une
suite de symboles (lettres, sons, chiffres, instructions, etc.) appartenant à un alphabet (ou
vocabulaire) fini. La structure algébrique sous-jacente est celle de monoı̈de libre, elle est la
base de la notion de langage.
Les grecs anciens définissent la grammaire d’un langage comme « l’art d’écrire ». Une
telle définition n’est pas incorrecte, car elle implique toutes les connaissances nécessaires
que le locuteur doit manipuler afin de construire ses énoncés. La théorie linguistique a
proposé une définition plus moderne à la grammaire : « la grammaire définit les règles de
combinaison des mots en phrases ». La forme symbolique d’un langage est vue comme une
structure dans laquelle l’ensemble des unités lexicales est « manipulé » par un système de ➲ lexique
règles grammaticales (syntaxiques). Ainsi, la grammaire représente le mécanisme syntaxique
qui assure la cohésion➲ formelle (la cohésion de surface) des phrases.
La grammaire a une double fonction : une fonction normative➲ et une fonction repré-
sentative.
– La fonction normative définit les règles de combinaison des mots en phrases correctes.
– La fonction représentative de la grammaire associe à une phrase sa représentation
syntaxique.
Ainsi, une grammaire permet ainsi à la fois de générer des phrases (on parle aussi de mots)
d’un langage donné et d’analyser des phrases existantes (pour déterminer si oui ou non elle
sont syntaxiquement correctes vis-à-vis du langage).

101
5 – langages formels et grammaires

5.1 Rappels : dénombrement d’ensembles


La notion de langage et de grammaire fait souvent appel à des notions fondamentales
de dénombrement d’ensembles. Nous rappelons donc dans cette section quelques résultats
de base.

5.1.1 Cardinalité des ensembles


Soit A un ensemble. Si A possède un nombre fini d’éléments, on dit que A est un
ensemble fini. Si A possède un nombre infini d’éléments, il est dit ensemble infini. La
cardinalité d’un ensemble fini A, notée |A| est le nombre d’éléments appartenant à A.

☞ exemple : Soit J l’ensemble des jours de la semaine. |J| = 7.

✒ nota bene : Un ensemble de cardinalité 1 est appelé singleton.

Une propriété intéressante pour un ensemble infini est la dénombrabilité, c.-à-d. la ca-
pacité, pour cet ensemble, de lister et numéroter ses éléments.

☞ exemple :
– N l’ensemble des entiers positifs est dénombrable. On peut sans am-
biguı̈té se référer au ième entier positif.
– Z est aussi dénombrable. Il suffit d’alterner les entiers positifs et négatifs
dans l’ordre croissant de leur valeur absolue. Tous les éléments de Z
sont assurés d’apparaı̂tre dans cette liste.

➽ exercice 104 : Montrer que N × N est dénombrable.

Plus formellement, un ensemble est dénombrable s’il peut être mis en bijection avec N.
On dit alors que N et l’ensemble dénombrable sont équipotents➲.

Théorème 25
Soit E un ensemble. Il n’existe pas de bijection entre E et P(E) c.-à-d. E
et P(E) ne sont pas équipotents.

102
rappels : dénombrement d’ensembles

En effet, supposons qu’il existe une bijection f entre E et P(E). Soit A = {x ∈ E|x 6∈
f (x)}. f étant bijective, il existe a ∈ E tel que A = f (a).
➊ si a ∈ A, on a a ∈ f (a) et donc a 6∈ A par définition de A
➋ si a 6∈ A, on a a 6∈ f (a) et donc a ∈ A par définition de A
L’hypothèse est donc absurde, ce qui prouve le résultat.

✒ nota bene : R est indénombrable. On peut même montrer que [0, 1[ l’ensemble
des réels entre 0 (compris) et 1 (non compris) est indénombrable. Nous al-
lons raisonner par réfutation. Supposons l’ensemble [0, 1[ dénombrable. Si
on représente les éléments de cet ensemble à l’aide de la notation décimale
usuelle, si une liste des éléments de l’ensemble existe, on a alors (chaque aij
est un simple chiffre) :
réel 1 0.a11 a12 a13 . . .
réel 2 0.a21 a22 a23 . . .
réel 3 0.a31 a32 a33 . . .
..
. 0. · · ·
Tout entier élément de [0, 1[ doit appartenir à cette énumération. Considérons
le réel 0.a11 a22 a33 . . . (construit à partir de la « diagonale »). Transformons
chaque aii en un bii tel que :

aii + 1 si aii < 9
bii =
0 si aii = 9

0.b11 b22 b33 . . . appartient clairement à [0, 1[ mais il ne peut apparaı̂tre


dans la liste que nous considérons. En effet, pour tout i, le ième chiffre du
développement décimal (bii ) diffère du ième chiffre du ième élément de la
liste. Cette contradiction montre que [0, 1[ n’est pas dénombrable et donc que
R non plus. Cette méthode de démonstration s’appelle la « diagonalisation
de Cantor➠ ».

On peut montrer que si A1 , . . ., An est un ensemble d’ensembles dénombrables alors


A1 × · · · × An est aussi un ensemble dénombrable.

5.1.2 Cardinaux et ordinaux transfinis


Un nombre entier naturel peut être utilisé pour décrire la taille d’un ensemble fini, ou
pour désigner la position d’un élément dans une suite. Ces deux utilisations correspondent
aux notions de cardinal et d’ordinal respectivement. Bien que semblables en apparence, ces
deux concepts cantoriens doivent être distingués lorsque l’on s’intéresse à des ensembles
infinis.
Comme on l’a vu au chapitre 3 section 3.3.1 page 57, les entiers naturels peuvent être
construits avec des ensembles. De cette manière, tout entier naturel est un ensemble bien
ordonné, et l’inclusion des ensembles se traduit par un ordre sur les entiers naturels. Cela
nous conduit à la définition d’un nombre ordinal par John von Neumann➠ : un ensemble E
est un ordinal si et seulement si E est totalement ordonné pour l’inclusion et tout élément
de E est aussi un sous-ensemble de E. Cette approche permet d’envisager les nombres

103
5 – langages formels et grammaires

ordinaux infinis (ou transfinis). L’existence des ordinaux transfinis est assuré par l’axiome
de l’infini (axiome ➏ page 58).
Le premier nombre ordinal transfini est noté ω (en référence à la dernière lettre de
l’alphabet grec). Il correspond à l’ensemble des nombres entiers naturels N. L’addition des
nombres entiers naturels, traduite en terme d’ensembles, permet de généraliser l’addition
aux nombres ordinaux transfinis. Cette addition est associative mais pas commutative. Elle
donne lieu à une arithmétique sur les nombres ordinaux transfinis. On montre qu’il existe
une infinité de nombres ordinaux transfinis :

ω < ω + ω < ω + ω + ω < ···

✒ nota bene : Les ordinaux ne forment pas un ensemble, au sens des axiomes
ZFC (la théorie axiomatique des ensembles habituelle rappelée au chapitre 3
section 3.3.1), mais une classe propre. Ceci peut-être mis en évidence grâce
au paradoxe de Burali-Forti : l’ensemble des ordinaux serait par définition un
ordinal mais qui serait alors strictement plus grand (aussi par définition) que
tous les ordinaux. Ceci est évidemment contradictoire.

À tout ensemble correspond un nombre cardinal. Le cardinal d’un ensemble fini à n


éléments est n. Le cardinal de l’ensemble infini N des nombres entiers naturels est noté ℵ0
(en référence à la première lettre de l’alphabet hébreu). ℵ0 est le plus petit nombre transfini
cardinal. Il est plus grand que tout entier naturel. Ainsi, le cardinal de tout ensemble infini
dénombrable est aussi ℵ0 . Ce nombre transfini vérifie les propriétés suivantes :
– ∀n ∈ N ℵ0 + n = ℵ0
– ℵ0 + ℵ0 = ℵ0
– ∀n ∈ N⋆ ℵn0 = ℵ0
Mais l’infini ne se résume pas à ℵ0 . En effet, R étant indénombrable, son cardinal noté
ℵ vérifie alors : ℵ0 < ℵ.

✒ nota bene : ℵ est parfois noté 2ℵ0 par analogie avec les cardinaux finis car
R est en bijection avec l’ensemble des parties de N. On a donc avec cette
notation que ℵ0 < 2ℵ0 . De manière plus générale, on montre que le cardinal
de l’ensemble des parties d’un ensemble est toujours strictement plus grand
ℵ0
que l’ensemble de départ. Ainsi, ℵ0 < 2ℵ0 < 22 < · · ·. Il existe donc une
infinité de nombre cardinaux transfinis !

On a longtemps cherché à savoir s’il existait un nombre transfini strictement compris


entre ℵ0 et 2ℵ0 . C’est ce qu’on appelle l’hypothèse du continu. Kurt Gödel➠ a montré en
1938 que l’ajout de l’hypothèse du continu à la théorie des ensembles, définie par exemple
par les axiomes de ZFC, ne changeait nullement la consistance de cette théorie, même si on
l’augmente de l’axiome du choix➥. Paul Cohen a montré en 1960 que l’hypothèse du continu
était un indécidable de la théorie des ensembles basés sur les axiomes de Zermelo-Fraenkel.
Elle est donc indépendante de la théorie des ensembles.

104
rappels : dénombrement d’ensembles

✒ nota bene : ℵ n’a rien à voir avec ∞. En effet, autant certains ℵ peuvent être
plus grands que d’autres mais ∞ est simplement l’infini (limite de la droite
des réels).

5.1.3 Énumération d’ensembles dénombrables


Par définition, un ensemble dénombrable A peut être mis en bijection avec l’ensemble
N des entiers naturels. Ainsi, chaque élément x de A peut être représenté par un unique
entier g(x). Un tel encodage peut ne pas couvrir l’intégralité1 des éléments de N. Il est alors
nécessaire de définir une procédure permettant, pour tout i de N, d’une part, de déterminer
si i est dans le champ de g et, d’autre part, si cela est possible, de calculer g −1 (i). À l’aide
de ce codage, on peut fournir dans tous les cas un ordre sur A en disant que x ∈ A précède
y ∈ A si et seulement si g(x) < g(y).

☞ exemple : On peut encoder l’ensemble A = {0, 1}⋆ (l’ensemble des mots


composés uniquement de 0 et de 1)2 de la manière suivante : pour tout
x ∈ A, on définit l’entier g(x) par

1 si x = ǫ (le mot vide)
g(x) =
pa1 1 × pa2 2 × · · · × pann si x = b1 b2 . . . bn , bi ∈ {0, 1}

pour 1 ≤ i ≤ n, où ǫ représente le mot vide, pi représente le ième nombre


premier et ai = bi + 1.
Ainsi, si x est le mot 1100, alors g(x) = 22 × 32 × 5 × 7 = 1260.

Une énumération de Gödel d’un ensemble est l’affectation d’un entier naturel à
chaque élément de l’ensemble telle que :
➊ g est une bijection
➋ il existe un algorithme permettant effectivement de calculer le nombre de Gödel de
n’importe quel élément
➌ g −1 est calculable

☞ exemple : La fonction g de l’exemple précédent est une énumération de Gödel


de l’ensemble {0, 1}⋆ .

1 Penser par exemple à l’ensemble des entiers naturels pairs par rapport à l’ensemble des entiers naturels
2 Les 0 à gauche sont ici significatifs.

105
5 – langages formels et grammaires

2 3

Fig. 5.1 — Deux versions d’un même graphe – sans (à gauche) et avec (à droite) des sommets nommés

☞ exemple : Soit Γ l’ensemble des graphes avec des sommets non nommés. La
figure 5.1 présente (à gauche) un exemple de tel graphe (ici à 4 sommets
et 5 arêtes). Γ possède la particularité d’avoir un représentant par classe
d’équivalence selon la relation d’isomorphisme de graphe. On peut montrer
que Γ est dénombrable en affectant à chaque élément G ∈ Γ un nombre de
Gödel g(G). La première étape consiste à nommer les sommets de G à l’aide
n premiers nombres premiers p1 , p2 , . . ., pn . Ainsi, une énumération possible
est :
pk1 1 × pk2 2 × · · · × pknn
Q e(i,j)
où chaque ki est égal à : nj=1 pj où e(i, j) est le nombre d’arêtes entre
les sommets i et j.
Ainsi sur le graphe de la figure 5.1 (étiqueté tel que reporté à droite), on
obtient :
2 2
23 ×5
× 32 ×3×5
× 52×3 × 7 = 245 × 360 × 56 × 7

Comme il existe bien un seul graphe ayant un nombre de Gödel donné et


que chaque graphe à n sommets possède n! nombres différents selon notre
numérotation (puisqu’il y a n! façons d’affecter les n premiers premiers aux
sommets), il convient de rendre unique le nombre de Gödel cherché en prenant
la plus petite valeur obtenue sur toutes ces permutations. g est bien une
énumération de Gödel.

5.2 Mots et langages


Un mot est une séquence finie de symboles a1 a2 . . . an où chaque ai est pris dans un
alphabet fini Σ (les répétitions sont autorisées).

☞ exemple : 001110 est un mot sur Σ = {0, 1}.

Un mot représenté à l’aide de m symboles (y compris les répétitions) est dit de longueur
m.

106
mots et langages

☞ exemple : 001110 est de longueur 6.

Le mot vide est représenté par le symbole ǫ qui est un mot sans symbole et donc de
longueur 0. La longueur d’un mot x est noté |x|.

☞ exemple : |001110| = 6 et |ǫ| = 0.

5.2.1 Notion d’alphabet


Plus formellement, on se donne un alphabet (ou encore vocabulaire) Σ, ensemble
fini non vide de lettres (ou de symboles)3 . La juxtaposition de ces lettres (ou symboles)
permet d’obtenir des mots. On note l’ensemble de tous les mots de longueur finie sur Σ
par Σ⋆ .

➽ exercice 105 : Montrer que si Σ est fini, Σ⋆ est infini dénombrable.

☞ exemple : Si Σ = {0, 1}, un ordre possible sur Σ⋆ est :

ǫ, 0, 1, 00, 01, 10, 11, 000, 001, 010, . . .

C’est ce qu’on appelle l’ordre du dictionnaire ou ordre lexicographique. ➲ lexicographie

S
Si on note Σi les mots de longueur i sur Σ, on a : Σ⋆ = n∈N Σn .

S
✒ nota bene : On note Σ+ = n∈N⋆ Σn . On a : Σ+ = Σ⋆ \ {ǫ}.

➽ exercice 106 : Soit Σ = {a, b}. Proposer une numérotation des mots sur Σ, les
éléments de Σ⋆ . Quel est le numéro de aaaaaa ? Et celui de aababa ? Quel
est le mot de numéro 156 ?

3 Si l’espace est un élément de l’alphabet, il apparaı̂t traditionnellement explicitement sous la forme .

Ainsi, 00 01 11 sera plutôt écrit 00 01 11. L’espace est alors un mot de longueur 1 différent du mot vide.

107
5 – langages formels et grammaires

➽ exercice 107 : Soit Σ = {a, b, c}. Proposer une numérotation des mots sur Σ,
les éléments de Σ⋆ . Quel est le numéro de cba ? Quel est le mot de numéro
511 ?

5.2.2 Opérations sur les mots


On écrit, naturellement, x ∈ Σ⋆ si x est un élément de Σ⋆ et x 6∈ Σ⋆ sinon. Ainsi,
on a ∀Σ, ǫ ∈ Σ⋆ . Si x est un mot de longueur m, on peut écrire x = a1 a2 . . . am où ∀i ∈
[1, m], ai ∈ Σ. Alors, si x ∈ Σ⋆ est un mot de longueur m et y ∈ Σ⋆ un mot de longueur n,
la concaténation➲ de x et y notée xy est le mot de longueur m + n dont les m premiers
symboles représentent un mot égal à x et les n derniers représentent un mot égal à y. C’est
la loi de composition interne classiquement utilisée sur Σ⋆ .

☞ exemple : Si x = a1 a2 . . . am et y = b1 b2 . . . bn alors xy = a1 a2 . . . am b1 b2 . . . bn .

La concaténation est associative ((xy)z = x(yz)) mais généralement non commutative.


Le mot vide est élément neutre pour la concaténation : ǫx = xǫ = x.

✒ nota bene : On appelle aussi la concaténation, le produit de juxtaposition.

Soit un mot z ∈ Σ⋆ pouvant s’écrire xy avec {x, y} ∈ Σ⋆ 2 . x est alors appelé un préfixe
de z et y est appelé un suffixe de z.

☞ exemple : Si z = 00110, ǫ est alors un préfixe de z (tout comme 0, 00, 001,


0011 et z lui-même). Les suffixes de z sont ǫ, 0, 10, 110, 0110 et z lui-même.

Si {w, z} ∈ Σ⋆ 2 sont tels que z = xwy pour un couple {x, y} ∈ Σ⋆ 2 donné, w est une
sous-chaı̂ne de z.

☞ exemple : Les sous-chaı̂nes de z = 00110 sont ǫ, 0, 1, 00, 01, 10, 11, 001, 011,
110, 0011, 0110 et z lui-même.

108
mots et langages

5.2.3 Structure mathématique


Σ⋆ , muni de la concaténation, est appelé monoı̈de libre sur Σ. Soient V ⋆ et W ⋆ deux
monoı̈des libres construits respectivement sur V et W . Une application f de V ⋆ dans
W ⋆ est appelée morphisme de monoı̈des si et seulement si elle est compatible avec
la concaténation c.-à-d.

∀x ∈ V ⋆ , ∀y ∈ V ⋆ , f (xy) = f (x)f (y)

✒ nota bene : f est entièrement déterminée par sa restriction à V qui est système
générateur de V ⋆ . En effet, si x = x1 x2 . . . xn alors f (x) = f (x1 )f (x2 ) . . . f (xn ).
On a de plus f (ǫ) = ǫ.

Un morphisme de monoı̈des f est appelé codage si et seulement si f est un morphisme


injectif, c.-à-d. si pour tout y ∈ W ⋆ , il existe un unique x ∈ V ⋆ tel que, f (x) = y. Décoder
revient alors à déterminer x connaissant y.

☞ exemple : Il existe un très grand nombre de codages des chiffres en binaire. Le


suivant a été mis au point par la compagnie Bell pour une machine à relais
électro-mécaniques. On a V = [9] et W = {0, 1} :
0→1 0 1 0 0 0 0 5→0 1 1 0 0 0 0
1→1 0 0 1 0 0 0 6→0 1 0 1 0 0 0
2→1 0 0 0 1 0 0 7→0 1 0 0 1 0 0
3→1 0 0 0 0 1 0 8→0 1 0 0 0 1 0
4→1 0 0 0 0 0 1 9→0 1 0 0 0 0 1
Durant 10 ans de fonctionnement, il n’est jamais arrivé une erreur sur cette
machine qui ne soit aussitôt décelée. Ce code a ensuite été adopté par plusieurs
ordinateurs, l’IBM 650 par exemple.

➽ exercice 108 : Parmi les morphismes ci-dessous, quels sont les codages ?
– V = {a, b} et W = {x, y}
➊ f définie par f (a) = x, f (b) = y
➋ g définie par g(a) = x, g(b) = x
➌ h définie par h(a) = x, h(b) = ǫ
– V = {a, b, c, d} et W = {x, y}
➊ f définie par f (a) = xx, f (b) = xy, f (c) = yx, f (d) = yy
➋ g définie par g(a) = x, g(b) = yx, g(c) = yyx, g(d) = yyy

109
5 – langages formels et grammaires

5.2.4 Notion de langage


Un langage (formel) L sur un alphabet Σ est un sous-ensemble quelconque de Σ⋆
(L ⊂ Σ⋆ ). Lorsque Σ est fini, Σ⋆ est dénombrable mais pas l’ensemble P(Σ⋆ ) des langages
sur Σ (comme le montre le théorème 25).

☞ exemple : Le langage des nombres est défini sur un alphabet Σ = {0, 1, . . . , 9}.
02, 00310, 3200 sont alors des mots sur Σ. On définira le langage des nombres
comme les mots sur Σ qui ne commencent pas par 0. Ainsi, 1233 et 3200
seront des mots du langages mais pas 00310.

Soient L1 et L2 deux langages, leur concaténation (ensembliste) est le langage L1 L2 =


{xy|x ∈ L1 , y ∈ L2 }.

☞ exemple : Si L1 = {01, 0} et L2 = {ǫ, 0, 10} alors, L1 L2 = {01, 0, 010, 00, 0110}.

La concaténation (ensembliste) comme la concaténation sur les mots est associative mais
pas commutative. L’ensemble à un seul élément contenant le mot vide est élément neutre
pour cette opération : pour tout langage L, L{ǫ} = {ǫ}L = L.

✒ nota bene : Attention, {ǫ} et ∅ sont deux ensembles différents. ∅ est absorbant
pour la concaténation. En effet, on a L∅ = ∅L = ∅.

Lorsqu’on concatène un langage avec lui-même, le résultat LL est noté L2 . Cette définition
est généralisée : L0 = {ǫ}, L1 = L, Li = LLi−1 i−1
S∞= Li L pour tout i ≥ 2. On définit la

clôture de Kleene➠ de L, notée L , comme i=0 L .
Dans la suite de ce document, on ne s’intéresse qu’à certains types de langages, ceux
engendrés par une grammaire de Chomsky➠ ou reconnus par des automates.

5.3 Grammaires de Chomsky (1956)


La hiérarchie de Chomsky est une classification des langages décrits par les grammaires
formelles, proposée en 1956 par le linguiste Noam Chomsky. Elle est aujourd’hui largement
utilisée en informatique, en particulier pour la conception d’interpréteurs ou de compila-
teurs, ou encore pour l’analyse des langages naturels.

5.3.1 Définition
Une grammaire de Chomsky➠ G est un quadruplet (VN , VT , S, R) où :
– VN désigne un ensemble fini appelé vocabulaire non terminal (ou catégories syn-
taxiques)

110
grammaires de chomsky (1956)

– VT désigne un ensemble fini appelé vocabulaire terminal (on note V = VN ∪ VT )


– S, symbole initial ou axiome, est un élément de VN
– R est l’ensemble fini des règles ; R ⊂ (V + \VT+ )×V ⋆ c.-à-d. une règle r ∈ R se présente
comme un couple de mots sur V : (γ(r), δ(r)) ∈ (V + \ VT+ ) × V ⋆ .

✒ nota bene : γ(r) comme gauche et δ(r) comme droite

☞ exemple : Soit G = ({S}, {0, 1}, S, {(S, 0S1), (S, 01)}). G est une grammaire
de Chomsky.

Il existe plusieurs façons équivalentes de représenter les règles d’une grammaire de Chom-
sky :

Couples Dérivation BNF (cf. chapitre 2)


(w1 , w1′ ) w1 → w1′ w1 ::= w1′ | w1′′
(w1 , w1′′ ) w1 → w1′′

5.3.2 Différents types de grammaires


Différentes restrictions sur les règles d’une grammaire de Chomsky permettent de les
caractériser. Ainsi :
– Une grammaire est dite de type 3 (ou linéaire à droite ou encore régulière) si
seulement si :
∀r ∈ R, γ(r) ∈ VN ∧ δ(r) ∈ VT VN ∪ VT

– Une grammaire est dite de type 2 (ou non contextuelle) si et seulement si :

∀r ∈ R, γ(r) ∈ VN

– Une grammaire est dite de type 1 (ou contextuelle) si et seulement si :

∀r ∈ R, |γ(r)| ≤ |δ(r)|

– Une grammaire sans restriction sur les règles est dite de type 0.

✒ nota bene : Les langages de programmation usuels ont généralement une gram-
maire de type 2.

111
5 – langages formels et grammaires

☞ exemple : La grammaire G de l’exemple précédent est non contextuelle. En


effet, S appartenant à VN , on a bien γ(r1 ) = γ(r2 ) ∈ VN satisfaisant ainsi
les critères de caractérisation d’une grammaire de type 2. De plus, δ(r1 ) ∈
VT VN VT invalidant la possibilité que cette grammaire soit de type 3 (de même
que δ(r2 ) ∈ VT2 ).

5.3.3 Dérivation
Une grammaire de Chomsky est générative, elle engendre un langage. La définition de
ce langage est basée sur la notion de dérivation.
Un mot y dérive immédiatement d’un mot x si et seulement si il existe une règle r
et deux mots g et d de V ⋆ tels que :

x = gγ(r)d et y = gδ(r)d
r
On notera x −→G y (ou encore x −→G y ou x −→ y lorsqu’il n’y a pas d’ambiguı̈té).
Soit =⇒G la fermeture réflexive et transitive4 de la relation −→G . La relation =⇒G est
appelée dérivation. On notera r̂ la suite de règles permettant de dériver y de x ce qui

done : x =⇒G y.
Une dérivation à gauche consiste à remplacer systématiquement le non terminal le
plus à gauche dans l’expression à dériver. Inversement, une dérivation à droite consiste
à remplacer systématiquement le non terminal le plus à droit dans l’expression à dériver.

5.3.4 Langage engendré par une grammaire


Le langage engendré par une grammaire G, noté L(G), est l’ensemble des mots ter-
minaux (constitués uniquement de symboles terminaux) dérivant de S. Formellement :

L(G) = {x ∈ VT⋆ |∃r̂ ∈ R+ , S =⇒G x}

☞ exemple : 000111 (que l’on peut noter 03 13 ) est un mot du langage engendré
par la grammaire G de l’exemple précédent. En effet, il dérive de S par l’ap-
plication de deux fois la règle r1 puis d’une fois la règle r2 . On a :
1r 1 r 2 r
S −→ 0S1 −→ 00S11 −→ 000111
(r1 )2 r2
On peut aussi noter plus simplement : S =⇒ 000111.

✒ nota bene : Plus généralement, 0n 1n ∈ L(G).

4 La
S
fermeture réflexive et transitive d’une relation R est n∈N Rn .

112
des grammaires aux automates

➽ exercice 109 : Montrer que L(G) = {0n 1n |n ∈ N+ }.

Deux grammaires G et G′ sont dites équivalentes si et seulement si elles engendrent


le même langage c.-à-d. L(G) = L(G′ ). Un langage L (c.-à-d. un sous-ensemble de V ⋆ ) est
dit de type i si seulement si il existe une grammaire de type i l’engendrant.

✒ nota bene : i ne peut bien sûr prendre ses valeurs que dans l’intervalle d’entiers
[0, 3].

Proposition 9
Si l’on note Ti l’ensemble des langages de type i, on a les inclusions strictes
suivantes :
T3 ( T2 ( T1 ( T0

☞ exemple : La grammaire G de l’exemple précédent étant de type 2, le langage


engendré par G, L(G) = {0n 1n |n ∈ N+ } est de type 2 (non contextuelle).

➽ exercice 110 : Soit G = ({S, B, C}, {a, b, c}, S, R) où R = {(S, aSBC), (S, aBC),
(CB, BC), (aB, ab), (bB, bb), (bC, bc), (cC, cc)}. Déterminer le type de G ainsi
que le langage engendré par G.

5.4 Des grammaires aux automates

Considérons la grammaire G = ({S, A, B}, {0, 1}, S, R) avec R = {(S, 0A), (S, 1B),
(A, 0A), (A, 0S), (A, 1B), (B, 1B), (B, 1), (B, 0), (S, 0)}. G est clairement une grammaire de
type 3 puisqu’on a bien :

∀r ∈ R, γ(r) ∈ VN ∧ δ(r) ∈ VT VN ∪ VT

113
5 – langages formels et grammaires

0 A

1
1
S 0

1 B 0

0 1
fin

Fig. 5.2 — Graphe orienté associé à la grammaire G

Déterminons maintenant le langage engendré par G. Pour cela, on peut associer5 à G


un graphe orienté représentant l’ensemble des règles et pour lequel :
– les sommets sont les éléments de VN et un sommet nommé « fin ».
– un arc relie deux sommets de G s’il existe une règle r ∈ R telle que le sommet de
départ de l’arc est γ(r), le sommet d’arrivée de l’arc est le sommet :
– X si δ(r) ∈ VT VN et la partie « VN » est X
– « fin » sinon (c.-à-d. si δ(r) ∈ VT )
On obtient alors le (multi)graphe orienté représenté sur la figure 5.2. Dans ce graphe,
un mot sur VT correspond à un chemin de S (nœud « entrant ») du graphe à « fin », nœud
« sortant » du graphe.

☞ exemple : 02 13 0 ∈ L(G) car il correspond au chemin :

0 0 1 1 1 0
S → A → A → B → B → B → fin

Ce chemin correspond en effet à l’application en séquence des règles r1 , r4 ,


r2 , r6 , r6 et r8 . On écrit aussi :

S −→ 0A −→ 00A −→ 001B −→ 0011B −→ 00111B −→ 001110

5 On verra dans le chapitre 6 qu’on peut toujours le faire pour une grammaire de type 3.

114
des grammaires aux automates

Pour obtenir L(G) le langage engendré par la grammaire, il suffit de parcourir de toutes
les façons possibles le graphe de S à « fin ». Ainsi, dans notre cas, il y a deux types de tels
chemins :
– ceux qui ne contiennent que des 0 (ils ne passent que par A, puis reviennent en S
avant d’aller en « fin »). Il s’agit de l’ensemble des mots : {0n |n 6= 0, n 6= 2} que l’on
peut noter aussi (0+ \ 00) où 0+ représente les mots ne contenant que des 0 et au
moins un et 00 l’ensemble contenant le mot ayant uniquement deux 0.
– ceux qui contiennent un nombre quelconque de 0 (passage éventuel en A), puis au
moins un 1 (passage en B) puis au choix, un 0 ou un 1 (sortie de B vers « fin »).
Cet ensemble se note : 0⋆ 1+ (0 + 1). Ici, la juxtaposition simple représente représente
la concaténation ; le +, un choix ; x⋆ l’ensemble des mots ne contenant que des x et
éventuellement aucun ; et, x+ l’ensemble des mots ne contenant que des x et au moins
1 c.-à-d. x+ = x⋆ \ {ǫ}.
Le langage engendré par G peut alors s’écrire :

L(G) = (0+ \ 00) + (0⋆ 1+ (0 + 1))

Les notations que l’on vient d’introduire sont appelées expressions régulières et le graphe
que nous avons manipulé est un automate. Ces notions font l’objet des chapitres suivants.

115
chapitre six

automates

Nous sommes automates dans les trois quarts


de nos actions.

Leibniz

Les automates sont des machines idéalisées (abstraites) qui permettent d’effectuer des
calculs. Dès les années 1930, bien avant que les premiers ordinateurs voient le jour, Alan
Turing➠ a étudié une telle machine abstraite qui possédait l’ensemble des capacités des
ordinateurs actuels sur le plan de ce qu’ils peuvent calculer. Son but était de connaı̂tre la
limite à ce qu’une machine est capable de calculer. Dans les années 1940, 1950, sont apparues
des machines plus simples qu’on appelle maintenant « automates finis ». Ces automates,
initialement conçus pour modéliser le cerveau humain, sont utiles dans différents domaines
en informatique :
– la production de logiciels pour concevoir et tester le comportement de circuits ;
– la partie « analyse lexicale » des compilateurs (c.-à-d. l’étape cruciale à laquelle le
compilateur décompose le texte en entrée en un ensemble d’unités logiques) ;
– la production de logiciels pour scruter de grandes portions de textes à la recherche de
mots, phrases ou autres motifs ;
– la production de logiciels pour vérifier tout type de systèmes ayant un nombre fini
d’états distincts (comme des protocoles de communication ou d’échanges sécurisés
d’information).
Ils représentent des objets mathématiques et non pas des objets physiques, ils peuvent
donc être définis et non pas construits. Les automates effectuent les calculs grâce à deux
classes d’objets qu’ils manipulent : la classe des entrées que l’automate accepte et la classe
des sorties que l’automate produit. Le rapport entre les éléments de l’entrée et les éléments
de la sortie est déterminé par la structure de l’automate.
Dans les années 1950, Chomsky➠ a étudié les grammaires formelles (vues au chapitre 5).
Comme nous le verrons, ces grammaires ont de très forts liens avec la notion d’automates.

117
6 – automates

a1 a2 ··· an ···

e0

Fig. 6.1 — Représentation d’un automate fini déterministe à l’état initial

6.1 Automates finis déterministes


Les automates finis déterministes sont les plus simples (au sens moins sophistiqués) des
automates.

6.1.1 Définition
Un automate fini1 déterministe (AFD) est un quintuplet A = (E, V, τ, e0 , F ) où :
– E est l’ensemble fini d’états
– V est un vocabulaire (d’entrée) fini
– τ : E × V −→ E est une fonction dite de transition
– e0 ∈ E est l’état initial
– F ⊂ E est l’ensemble des états terminaux
Concrètement, on peut représenter un automate fini déterministe comme une unité
mécanique possédant une tête de lecture posée sur un ruban se déplaçant dans un seul
sens. En cours de fonctionnement, l’automate est dans l’état e ∈ E et sa tête de lecture est
située devant le symbole a ∈ V . Il passe alors dans l’état τ (e, a) et la tête de lecture avance
d’une case vers la droite (ou le ruban se déplace d’une case vers la gauche). Ainsi, à l’état
initial un automate devant un mot a1 a2 . . . an peut être représenté comme sur la figure 6.1.
La tête de lecture se trouve alors sur le symbole du ruban situé le plus à gauche.
Si, après avoir parcouru complètement le mot de départ w = a1 a2 . . . an , l’automate se
trouve dans un des états terminaux, alors on dit que w a été reconnu ou accepté par
l’automate.

✒ nota bene : Un automate fini déterministe ne peut s’arrêter avant d’avoir


parcouru entièrement le mot en entrée. En effet, τ est toujours complètement
définie dans ce cas.

Il existe deux principales façons de représenter une fonction de transition :


– une table de transition qui est un tableau représentant complètement τ . Les lignes
de ce tableau correspondent aux différents états de l’automate alors que les colonnes

1 On parle aussi d’automate déterministe à un nombre fini d’états.

118
automates finis déterministes

correspondent aux données d’entrées possibles. Le contenu du tableau est alors le


résultat de l’application τ .
– un diagramme de transition qui est un graphe défini de la façon suivante :
– il existe un nœud associé à chacun des états de l’automate
– pour tout état q ∈ E et pour tout symbole a ∈ V , soit p = τ (q, a). Le diagramme
possède alors un arc de q à p étiqueté par a. Si plusieurs symboles conduisent à p
au départ de q, on peut alors n’avoir qu’un arc (étiqueté par la liste des symboles
concernés).
– e0 est marqué par un arc entrant sans origine
– les nœuds correspondant à des états terminaux sont doublement cerclés

☞ exemple : Soit A = ({e0 , e1 , e2 , e3 }, {0, 1}, τ, e0 , {e0 }). τ est représentée par
la table de transition suivante :
0 1
e0 e1 e2
e1 e0 e3
e2 e3 e0
e3 e2 e1

Cette table de transition est représentée de manière totalement équivalente


par le diagramme de la figure 6.2. La figure 6.3 représente les trois premiers
états successifs de l’automate placé devant le mot 111010. D’une manière plus
compacte, on notera les états successifs de la manière suivante : e0 111010,
1e2 11010, 11e0 1010, 111e2 010, 1110e3 10, 11101e1 0 et 111010e0 . L’auto-
mate étant dans un état terminal en fin de mot, le mot a été reconnu par
l’automate.

➽ exercice 111 : Donner les états successifs de l’automate de l’exemple précédent


devant le mot 1101 ? Le mot est-il reconnu par l’automate ?

6.1.2 Langage reconnu par un automate


À partir de τ , on définit une application τ̂ de E × V ⋆ dans E telle que :
– ∀e ∈ E τ̂ (e, ǫ) = e
– ∀e ∈ E, ∀y ∈ V, ∀x ∈ V ⋆ τ̂ (e, xy) = τ (τ̂ (e, x), y)
τ̂ est donc un prolongement de τ . Par définition, le langage reconnu ou accepté par
l’automate A est :
T (A) = {x ∈ V ⋆ |τ̂ (e0 , x) ∈ F }
Si on désigne par τe0 l’application de V ⋆ dans E définie par : τe0 (x) = τ̂ (e0 , x), on peut
alors poser :
T (A) = τe−1
0
(F )

119
6 – automates

e0 e1

0
1 1 1 1
0

e2 e3

Fig. 6.2 — Diagramme de transition associé à un automate

1 1 1 0 1 0

e0

1 1 1 0 1 0

e2

1 1 1 0 1 0

e0

Fig. 6.3 — Comportement d’un automate devant un mot donné

120
automates finis déterministes

1 0
e0 e1 e2

0 1 0, 1

Fig. 6.4 — Diagramme d’un automate

Un langage reconnu par un automate fini déterministe est dit régulier.

➽ exercice 112 : Montrer que, pour l’automate de l’exercice précédent2 , T (A) =


{x ∈ {0, 1}⋆ |µ0 (x) ∈ {00}⋆ ∧ µ1 (x) ∈ {11}⋆ }. Comment peut-on décrire
plus naturellement les éléments du langage accepté par l’automate A ?

➽ exercice 113 : Soit A = ({e0 , e1 , e2 , e3 , e4 }, {a, b}, τ, e0 , {e2 }). τ est représentée
par la table de transition suivante :

a b
e0 e1 e4
e1 e4 e2
e2 e3 e4
e3 e4 e2
e4 e4 e4

Donner le diagramme de l’automate. Quel est le rôle de e4 . Donner un dia-


gramme simplifié.

☞ exemple : Soit A = ({e0 , e1 , e2 }, {0, 1}, τ, e0 , {e0 , e1 }) représenté par le dia-


gramme de la figure 6.4. On peut déterminer T (A) en étudiant les deux
classes cl(e0 ) et cl(e1 ), ensembles des mots commençant en e0 et termi-
nant en e0 et e1 respectivement. cl(e0 ) = 0⋆ et cl(e1 ) = 0⋆ 1+ . Ainsi,
T (A) = cl(e0 ) ∪ cl(e1 ) = 0⋆ 1⋆ = {0m 1n |(m, n) ∈ N × N}.

2 µ est désigne le morphisme d’effacement qui ne conserve que les occurrences de x c.-à-d. ∀y 6=
x
x, µx (y) = ǫ ∧ µx (x) = x.

121
6 – automates

➽ exercice 114 : Donner les automates finis déterministes reconnaissant les


différents langages suivants sur {0, 1} :
➊ l’ensemble des mots finissant en 00
➋ l’ensemble des mots contenant la sous-chaı̂ne 011
➌ l’ensemble des mots qui finissent ou commencent par 01

➽ exercice 115 : Que permet de reconnaı̂tre l’automate suivant, décrit complètement


par sa table de transition (l’état de départ est marqué de → et l’état d’accep-
tation de ⋆) :
0 1
→ e0 e0 e1
⋆e1 e1 e0

➽ exercice 116 : Que permet de reconnaı̂tre l’automate suivant, décrit complètement


par sa table de transition (l’état de départ est marqué de → et les états d’ac-
ceptation de ⋆) :
0 1
→ ⋆e0 e1 e0
⋆e1 e2 e0
e2 e2 e2

6.2 Automates finis non déterministes


Comme nous allons le voir, un automate fini dit non déterministe à la capacité de se
trouver dans plusieurs états différents au même moment. C’est une manière de montrer
qu’un tel automate est capable de « deviner « des informations sur l’entrée qui lui est
fournie. Ils sont très utiles pour différentes applications. Nous allons montrer par la suite
qu’un tel automate est équivalent un automate fini déterministe validant ainsi son utilisation
en pratique.

6.2.1 Définition
Un automate fini non déterministe (AFN) est un quintuplet A = (E, V, τ, e0 , F )
où :
– E est l’ensemble fini d’états
– V est un vocabulaire (d’entrée) fini
– e0 ∈ E est l’état initial
– F ⊂ E est l’ensemble des états terminaux (ou d’acceptation)
– τ : E × V −→ P(E) est une fonction dite de transition

122
automates finis non déterministes

0 1
e0 e1 e2

0, 1

Fig. 6.5 — Un automate fini non déterministe acceptant les chaı̂nes finissant en 01.

✒ nota bene : La différence entre un automate fini déterministe et un auto-


mate fini non déterministe réside dans la fonction τ . Dans un cas (l’automate
déterministe), cette fonction renvoie exactement un état. Dans l’autre (l’auto-
mate non déterministe), zéro, un ou plusieurs états différents sont retournés.
De fait, un automate fini non déterministe peut être dans plusieurs états à la
fois.

☞ exemple : Soit A = ({e0 , e1 , e2 }, {0, 1}, τ, e0 , {e2 }). τ est représentée par la
table de transition suivante :

0 1
e0 {e0 , e1 } {e0 }
e1 ∅ {e2 }
e2 ∅ ∅

Cet automate est représenté de manière totalement équivalente par le dia-


gramme de la figure 6.5. Il permet d’accepter toutes les chaı̂nes qui terminent
en 01.

6.2.2 Langage reconnu par un automate non déterministe


Le prolongement de τ à E × V ⋆ est défini de la façon suivante :
– ∀e ∈ E τ (e, ǫ) = {e} S
– ∀e ∈ E, ∀y ∈ V, ∀x ∈ V ⋆ τ̂ (e, xy) = e′ ∈τ̂ (e,x) τ (e′ , y)

☞ exemple : Utilisons ce prolongement pour illustrer le comportement de l’auto-


mate représenté figure 6.5 sur la chaı̂ne d’entrée 00101. Les différentes étapes
sont :
➊ τ̂ (e0 , ǫ) = {e0 }
➋ τ̂ (e0 , 0) = τ (e0 , 0) = {e0 , e1 }
➌ τ̂ (e0 , 00) = τ (e0 , 0) ∪ τ (e1 , 0) = {e0 , e1 } ∪ ∅ = {e0 , e1 }

123
6 – automates

➍ τ̂ (e0 , 001) = τ (e0 , 1) ∪ τ (e1 , 1) = {e0 } ∪ {e2 } = {e0 , e2 }


➎ τ̂ (e0 , 0010) = τ (e0 , 0) ∪ τ (e2 , 0) = {e0 , e1 } ∪ ∅ = {e0 , e1 }
➏ τ̂ (e0 , 00101) = τ (e0 , 1) ∪ τ (e1 , 1) = {e0 } ∪ {e2 } = {e0 , e2 }
On dira ici que la chaı̂ne d’entrée est acceptée par l’automate car au moins
un des états de sortie est terminal.

Dans ce contexte, le langage accepté par l’automate fini non-déterministe est alors :

T (A) = {x ∈ V ⋆ |τ̂ (e0 , x) ∩ F 6= ∅}

☞ exemple : Le langage accepté par l’automate de la figure 6.5 est l’ensemble des
mots terminant par 01 c.-à-d. T (A) = {w | ∃y ∈ V ⋆ , w = y01}. En effet,
montrons par récurrence que :
➊ τ̂ (e0 , w) contient e0 pour tout w
➋ τ̂ (e0 , w) contient e1 si et seulement si w se termine par 0
➌ τ̂ (e0 , w) contient e2 si et seulement si w se termine par 01
Nous allons raisonner pour cela sur la longueur de w.
➀ Si |w| = 0, alors w = ǫ. La proposition ➊ est vérifiée par définition de
τ̂ . De même, les propositions ➋ et ➌ sont naturellement vérifiées (en
effet, ǫ ne finit ni par 0 ni par 01).
➁ Supposons que w puisse s’écrire xa où a est un symbole de V (ici 0 ou
1). Nous supposons que les propositions ➊ à ➌ sont vérifiées pour x.
Ainsi, |w| = n + 1 = |x| + 1.
➊ τ̂ (e0 , x) contient e0 . Comme les transitions possibles à partir de e0
conduisent toutes à e0 lui-même, la proposition est vérifiée aussi
pour w.
➋ Supposons que w se termine par 0. Comme, d’après ➊, τ̂ (e0 , x)
contient e0 et qu’il y a une transition partant de e0 vers e1 sur
l’entrée 0, on en conclut que τ̂ (e0 , w) contient e1 . De plus, si on
suppose inversement que τ̂ (e0 , w) contient e1 , la seule possibilité
pour atteindre l’état e1 , d’après le diagramme, consiste à avoir une
entrée de type x0. Nous prouvons ainsi que la proposition ➋ est
vérifiée pour w.
➌ La preuve de cette proposition est similaire.
La proposition ➌ montre directement que le langage accepté par l’automate
est bien constitué des mots se terminant en 01 puisque e2 est le seul état
accepté.

124
automates finis non déterministes

➽ exercice 117 : Soit A = ({e0 , e1 , e2 , e3 , e4 }, {0, 1}, τ, e0 , {e2 , e4 }). τ est représentée
par la table de transition suivante :

0 1
e0 {e0 , e3 } {e0 , e1 }
e1 ∅ {e2 }
e2 {e2 } {e2 }
e3 {e4 } ∅
e4 {e4 } {e4 }

Quel est le langage accepté par A ?

➽ exercice 118 : Donner les automates finis non déterministes pour accepter les
langages suivants :
➊ l’ensemble des mots sur le vocabulaire {0, 1, . . . , 9} tel que le dernier
chiffre soit apparu auparavant dans le mot
➋ l’ensemble des mots sur le vocabulaire {0, 1, . . . , 9} tel que le dernier
chiffre ne soit jamais apparu auparavant dans le mot
➌ l’ensemble des mots sur le vocabulaire {0, 1} tels qu’il existe deux zéros
séparés par un nombre de positions multiple de 4 (zéro étant un multiple
de 4)

6.2.3 Automates déterministes et automates non déterministes


Soit N = (EN , V, τN , e0 , FN ) un automate fini non déterministe. On définit un automate
déterministe D = (ED , V, τD , {e0 }, FD ) à partir de N de la façon suivante :
– ED = P(EN ). Ainsi, si N possède n états, D en possède 2n . Par contre, souvent,
beaucoup de ces états ne sont pas accessibles depuis l’état de départ et peuvent donc
ne pas être considérés.
– FD = {G ⊆ EN |G ∩ FN 6= ∅}
– Pour tout ensemble G d’éléments de EN , et pour tout x élément du vocabulaire
d’entrée V , [
τD (G, x) = τN (e, x)
e∈G

✒ nota bene : Les vocabulaires d’entrée pour N et D sont les mêmes. De plus,
l’état de départ de D est l’ensemble contenant l’unique état de départ de N .

125
6 – automates

0 0, 1

1
{e0 , e1 } ∅ e1
0 0
0
{e0 } 0 1 {e0 , e1 , e2 } 0 1

1 1
{e0 , e2 } 1 e2
{e1 , e2 }

0, 1

Fig. 6.6 — L’automate fini déterministe associé à l’automate de la figure 6.5 – construction exhaustive

☞ exemple : On peut associer à l’automate de la figure 6.5 l’automate fini


déterministe ayant 8 états (correspondant à l’ensemble des sous-ensembles
possibles d’états de l’automate de départ) et dont la table de transition est la
suivante :
0 1
∅ ∅ ∅
→ {e0 } {e0 , e1 } {e0 }
{e1 } ∅ {e2 }
⋆{e2 } ∅ ∅
{e0 , e1 } {e0 , e1 } {e0 , e2 }
⋆{e0 , e2 } {e0 , e1 } {e0 }
⋆{e1 , e2 } ∅ {e2 }
⋆{e0 , e1 , e2 } {e0 , e1 } {e0 , e2 }
Dans ce tableau, l’état de départ est noté → et les états terminaux sont
identifiés par une ⋆. La figure 6.6 représente cet automate. Notons que sur
les huit états possibles, seuls trois sont accessibles depuis l’état de départ. Les
cinq autres sont inutiles.

Afin de restreindre la génération de D aux seuls états pertinents vis-à-vis de l’état de


départ, il est possible (et conseillé) de construire les états de l’automate déterministe associé
à un automate non-déterministe de manière « paresseuse » de la façon suivante :
– le singleton constitué uniquement de l’état de départ de N est accessible et fait partie
de D ;
– supposons que jusqu’à présent l’ensemble S des états accessibles a été déterminé.
Alors, pour chaque symbole d’entrée x, on calcule l’ensemble d’états τD (S, x) ; ces
états seront aussi accessibles.

126
automates finis non déterministes

1 0

0 1
{e0 } {e0 , e1 } {e0 , e2 }

Fig. 6.7 — L’automate fini déterministe associé à l’automate fini non-déterministe de la figure 6.5 – construc-
tion « paresseuse »

☞ exemple : Dans le cas de l’automate représenté sur la figure 6.5, l’état {e0 } est
un état de l’automate D. On a τD ({e0 }, 0) = {e0 , e1 } et τD ({e0 }, 1) = {e0 }
(il suffit d’observer pour cela le diagramme précité). On obtient alors une
ligne complète de la table de transition de D (la deuxième ligne de la table
de l’exemple précédent).
Seul un des deux ensembles résultat est véritablement « nouveau » (l’autre
{e0 } a déjà été examiné, il s’agit de l’état de départ) : {e0 , e1 }. Les transitions
pour cet état sont : τD ({e0 , e1 }, 0) = {e0 , e1 } et τD ({e0 , e1 }, 1) = {e0 , e2 }
(la cinquième ligne de la table de l’exemple précédent). En effet :

τD ({e0 , e1 }, 1) = τN (e0 , 1) ∪ τN (e1 , 1) = {e0 } ∪ {e2 } = {e0 , e2 }

On obtient un nouvel état dont les transitions sont : τD ({e0 , e2 }, 0) = {e0 , e1 }


et τD ({e0 , e1 }, 1) = {e0 } (sixième ligne de la table). Aucun nouvel état n’est
obtenu. La construction « paresseuse » de D est donc terminée. L’automate
obtenu est représenté sur la figure 6.7.

Théorème 26 (Équivalence entre D et N )


Si D = (ED , V, τD , {e0 }, FD ) est l’automate fini déterministe construit à
partir de l’automate fini non déterministe N = (EN , V, τN , e0 , FN ) en utili-
sant la décomposition précédente, alors T (D) = T (N ).

On démontre ce théorème est montrant, par récurrence sur la longueur du mot d’entrée
w tout simplement que :

τ̂D ({e0 }, w) = τ̂N (e0 , w) (6.1)

127
6 – automates

✒ nota bene : Ici, les deux fonctions τ̂ renvoient bien un ensemble d’états de EN
mais τ̂D considère cet ensemble comme un des états de ED (l’ensemble des
parties de EN ) alors que τ̂N considère cet ensemble comme un sous-ensemble
de EN .

➊ Soit w de longueur 0 c.-à-d. w = ǫ. Par définition (tant d’un automate fini déterministe
qu’un automate fini non déterministe), τ̂D ({e0 }, ǫ) = τ̂N (e0 , ǫ) = {e0 }.
➋ Supposons w mot de longueur n + 1 et supposons l’équation 6.1 vraie au rang n.
Supposons w = xa où a est le symbole final de w. Par hypothèse de récurrence, on a :
τ̂D ({e0 }, x) = τ̂N (e0 , x). Supposons cet ensemble d’états de N égal à : {p1 , p2 , . . . , pk }.
D’une part, par définition de τ̂ pour un automate fini non déterministe, on a :
k
[
τ̂N (e0 , w) = τN (pi , a) (6.2)
i=1

D’autre part, la démarche constructive présentée ci-dessus nous indique que :


k
[
τD ({p1 , p2 , . . . , pk }, a) = τN (pi , a) (6.3)
i=1

On obtient alors (en utilisant l’équation précédente et l’hypothèse de récurrence) que :


k
[
τ̂D ({e0 }, w) = τD (τ̂D ({e0 }, x), a) = τD ({p1 , p2 , . . . , pk }, a) = τN (pi , a) (6.4)
i=1

Des équations 6.2 et 6.4, on obtient directement l’équation 6.1.


L’équation 6.1 est donc vérifiée. En se souvenant que les automates D et N acceptent un
mot w si et seulement si τ̂D ({e0 }, w) ou τ̂N (e0 , w), respectivement, contient un état présent
dans FN , on en déduit alors directement que T (D) = T (N ).

➽ exercice 119 : Quel est l’automate fini déterministe associé à l’automate fini non
déterministe complètement défini par la table de transition suivante (l’état de
départ est marqué de → et l’état terminal est marqué de ⋆).
0 1
→p {p, q} {p}
q {r} {r}
r {s} ∅
⋆s {s} {s}

128
automates finis non déterministes

➽ exercice 120 : Quel est l’automate fini déterministe associé à l’automate fini non
déterministe complètement défini par la table de transition suivante (l’état de
départ est marqué de → et les états terminaux sont marqués de ⋆).

0 1
→p {q, s} {q}
⋆q {r} {q, r}
r {s} {p}
⋆s ∅ {p}

➽ exercice 121 : Quel est l’automate fini déterministe associé à l’automate fini non
déterministe complètement défini par la table de transition suivante (l’état de
départ est marqué de → et les états terminaux sont marqués de ⋆).

0 1
→p {p, q} {p}
q {r, s} {t}
r {p, r} {t}
⋆s ∅ ∅
⋆t ∅ ∅

Quel est le langage accepté par cet automate ?

✒ nota bene : Il existe une définition des automates finis non déterministes qui
permet de prendre en compte des transitions sur ǫ (des ǫ-transitions). On les
appelle des ǫ-automates. Il est alors possible de généraliser assez facilement les
notions d’extension de la fonction de transition, de langage, etc. De plus, on
peut montrer donner pour chaque ǫ-automate un automate fini déterministe
équivalent. Pour cela, il suffit d’appliquer la méthode de construction pares-
seuse vue pour les automates finis non déterministes en ajoutant à chaque
ensemble d’états manipulé ce qu’on appelle son ǫ-clôture, c.-à-d. l’ensemble
des états accessibles à partir de chacun des états de l’ensemble en n’emprun-
tant que des ǫ-transitions.

129
6 – automates

6.3 Application : recherche dans un texte


À l’heure du web, des banques de données en ligne, des disques durs de très grande
capacité, le problème de base est de retrouver tous les documents qui contiennent un (en-
semble de) mot(s)-clé(s) déterminé. Les moteurs de recherche constituent un bon exemple
de solution à ce type de problème. La technologie utilisée dans la plupart de ces derniers
consiste à stocker, pour chaque mot apparaissant sur le web3 , la liste de tous les endroits
où on peut le trouver. On appelle cela des « index inversés ».
Les techniques à base d’index inversés n’utilisent généralement pas d’automates finis
mais passent, par contre, énormément de temps à parcourir le web pour construire ces
index. Il y a un certain nombre d’applications en lien avec la recherche de documents
pour lesquelles les index inversés ne sont que de peu d’utilité. Les caractéristiques de ces
applications sont les suivantes :
– la banque de données dans laquelle la recherche doit être réalisée change très rapide-
ment. Par exemple, la recherche des prix courants pour des marchandises données ;
ou encore, la recherche de données financières précises dans les dernières dépêches des
agences d’informations.
– les documents que l’on recherche ne peuvent pas être catalogués. Par exemple, le site
commercial amazon.com ne permet pas de parcourir son site pour stocker l’ensemble
des produits proposés. Au contraire, les pages produits sont générées « à la volée » en
réponse à des requêtes précises.
Dans ces cas-là, les automates finis peuvent entrer en lice.

6.3.1 Automate fini non déterministe pour la recherche dans un texte


Supposons donné un ensemble de mots (appelés par la suite « mots-clés »). On cherche
à déterminer si un ou plusieurs mots-clés apparaissent dans un texte fourni en entrée. Une
façon pratique de procéder est d’utiliser un automate fini non déterministe (AFN) qui
signale, en arrivant dans un état d’acceptation, qu’un des mots-clés a été rencontré dans le
texte fourni. Ce dernier est en effet traité caractère par caractère par l’automate qui peut
reconnaı̂tre ainsi les occurrences des mots-clés dans le texte.
L’AFN permettant cette reconnaissance peut être défini de la façon suivante :
➊ Un état de départ avec une transition allant sur lui-même pour tous les symboles qu’il
est possible de rencontrer dans le document (par exemple, l’ensemble des caractères
ASCII pour du texte). Intuitivement, cet état représente le fait que l’on n’a pas encore
commencé à rencontrer un des mots-clés.
➋ Pour chaque mot-clé a1 a2 . . . ak , on considère k états (e1 , e2 , . . ., ek ). On met en place
une transition de l’état de départ vers e1 sur le symbole a1 , une transition de e1 vers
e2 sur le symbole a2 , etc. L’état ek est un état d’acceptation indiquant que le mot-clé
a1 a2 . . . ak a été trouvé.

3 On évalue à 100 000 000 le nombre de mots différents.

130
application : recherche dans un texte

w e b
2 3 4

1 Σ

5 6 7 8
e b a y

Fig. 6.8 — Un automate fini non déterministe pour rechercher les mots web et ebay. Sur la figure, Σ
représente l’ensemble des caractères imprimables du code ASCII.

☞ exemple : La figure 6.8 représente l’AFN permettant de reconnaı̂tre les mots


web et ebay. L’état 1 est un état de départ, les états 2 à 4 permettent de
reconnaı̂tre web et les états 5 à 8 permettent de reconnaı̂tre ebay. Les états
4 et 8 sont les états d’acceptation de l’automate.

Bien évidemment, un automate fini non déterministe n’est pas un programme. Il y a


deux grandes options pour l’implémentation de cet AFN :
➊ Écrire un programme qui simule l’automate en calculant après chaque symbole l’en-
semble des états dans lequel il est. Cette simulation est celle que nous avons utilisée
dans l’exemple de la page 123.
➋ Convertir l’automate fini non déterministe est un automate fini déterministe équivalent
en utilisant la technique de construction de la section 6.2.3 page 125 ; puis, simuler ce
dernier automate.

✒ nota bene : Les programmes avancés de manipulation de texte utilisent en fait


une combinaison des deux techniques. Ici, nous allons utiliser la conversion
vers un automate fini déterministe car elle est simple et n’augmente pas le
nombre d’états. De plus, la simulation d’un automate fini déterministe est
bien plus aisée que la simulation d’un automate fini non déterministe.

6.3.2 Automate fini déterministe pour la recherche de mots-clés


La méthode de construction d’un automate fini déterministe à partir d’un automate fini
non déterministe exposée dans la section 6.2.3 s’applique à n’importe quel AFN. Mais, il se
trouve que dans le cas d’un AFN écrit pour reconnaı̂tre des mots-clés, on constate que le
nombre d’états de l’automate déterministe associé n’augmente jamais (ce qui, rappelons-le,
n’est pas le cas en règle générale). C’est pourquoi le passage à l’automate déterministe, bien
plus facile à simuler, est très utilisé pour rechercher des listes de mots-clés dans un texte.

131
6 – automates

L’automate fini déterministe (AFD) de reconnaissance de mots-clés s’écrit à partir de


l’automate fini non déterministe de la façon suivante :
➊ Si e0 est l’état de départ de l’AFN alors {e0 } est un des états de l’AFD.
➋ Soit p un des états de l’AFN atteint depuis l’état de départ suivant un chemin dont les
étiquettes forment la chaı̂ne a1 a2 . . . am . Alors, un des états de l’AFD est l’ensemble
des états de l’AFN constitué de :
➀ e0
➁ p
➂ les autres états de l’AFN atteints depuis e0 en suivant un chemin dont les
étiquettes forment un suffixe de a1 a2 . . . am (c.-à-d., n’importe quelle séquence
de symboles aj aj+1 . . . am ).

✒ nota bene : En général, il y a un état dans l’AFD pour chaque état dans l’AFN.
Mais, dans l’étape ➋, deux états peuvent conduire au même ensembles d’états
de l’AFN et ainsi devenir un unique état dans l’AFD. C’est le cas, par exemple,
lorsque deux mots-clés commencent par la même lettre (a par exemple) ; ainsi,
les deux états de l’AFN atteints depuis e0 en suivant l’arc étiqueté a conduisent
au même ensemble d’états de l’AFN et donc seront fusionnés dans l’AFD.

☞ exemple : L’automate fini déterministe construit à partir de l’automate de la


figure 6.8 est représenté figure 6.9. Chaque état de l’AFD est dans la même
position que l’état p duquel il est dérivé en utilisant la règle ➋ ci-dessus. Par
exemple, l’état 135 (raccourci pour {1, 3, 5}) est construit à partir de l’état 3.
Il inclut l’état de départ 1 (par définition). Il inclut aussi l’état 5 car il s’agit
de l’état atteint depuis l’état 1 par un suffixe (ici e) de la chaı̂ne we que l’on
atteint en 3 (voir figure 6.8).

Les transitions de l’AFD associé sont calculées comme présenté dans la section 6.2.3.

☞ exemple : Considérons l’état 135 de la figure 6.9. L’AFN de la figure 6.8 possède
des transitions sur le symbole b depuis les états 3 et 5 vers, respectivement,
les états 4 et 6. Ainsi, il existe une transition entre 135 et 146 étiquetée par
b dans l’AFD (car 1 est toujours accessible de 1 quelque soit l’entrée). Le
symbole e ne permet pas de sortir des états 3 et 5 dans l’AFN, mais il existe
une transition étiquetée e entre 1 et 5. L’AFN présente donc une transition de
135 vers 15 étiquetée par e. De la même façon, sur le symbole w, 135 mène
à 12.
Pour tous les autres symboles, il n’y a aucune transition au départ de 3
ni de 5 dans l’AFN. De plus, au départ de 1, on ne peut qu’aller vers 1. Ainsi,
dans l’AFD, 135 mène à 1 sur n’importe quel symbole de Σ excepté b, e et
w (ce qui est noté Σ-b-e-w sur la figure 6.9).

132
application : recherche dans un texte

Σ-a-e-w

Σ-b-e-w
w
w
w
Σ-e-w
e b
12 135 146
w
e e w
w a
1 w
w
e b a y
15 16 17 18
Σ-e-w e
Σ-b-e-w
e
e
e
Σ-a-e-w

Σ-e-w-y

Σ-e-w

Fig. 6.9 — Automate fini déterministe associé à l’automate fini non déterministe de la figure 6.8.

➽ exercice 122 : Donner un automate fini non déterministe pour reconnaı̂tre les
chaı̂nes de caractères : abc, abd et aacd. On supposera le vocabulaire limité
à {a, b, c, d}. Convertir cet automate en automate fini déterministe.

133
chapitre sept

langages et automates

J’aimerais être un agitateur pour les réguliers,


et parvenir à ce qu’on laissât s’exprimer les
irréguliers.

Michel Foucault

Langages, au sens de Chomsky, et automates ont beaucoup en commun. Nous allons ainsi
montrer dans ce chapitre que tout langage de type 3 (c.-à-d. engendré par une grammaire de
type 3) est régulier (reconnaissable à l’aide d’un automate fini). Plus généralement, on peut
en fait associer à chaque type de langue un automate correspondant. Le tableau suivant
récapitule ces correspondances :
Nom Génération Reconnaissance
linéaire à droite type 3 ou expression régulière automate finis
non contextuel type 2 ou gram. algébrique automate à pile
contextuel type 1 ou gram. contextuelle automate à mémoire
linéairement bornée
récursivement énumérable type 0 ou gram. générale machine de Turing
Nous aborderons la notion de machine de Turing dans le chapitre suivant.

7.1 Automates et langages


Nous allons tout d’abord étudier les propriétés remarquables des langages engendrés par
un automate : les langages réguliers. Nous montrerons ensuite que les langages réguliers et
les langages de type 3 sont les mêmes.

7.1.1 Relations d’équivalence


Relation d’équivalence associée à un automate
On associe à tout automate fini déterministe A = (E, V, τ, e0 , F ) une relation RA sur
V ⋆ définie par :
∀x ∈ V ⋆ , ∀y ∈ V ⋆ , xRA y ↔ τ̂ (e0 , x) = τ̂ (e0 , y) (7.1)

135
7 – langages et automates

De manière informelle, x et y sont en relation par RA si et seulement s’ils se comportent de


la même manière vis-à-vis de l’automate.

Proposition 10
La relation RA associée à l’automate fini déterministe A = (E, V, τ, e0 , F )
possède les propriétés suivantes :
➊ RA est une relation d’équivalence compatible à droite avec la
concaténation
➋ RA est d’index fini
➌ T (A) est une union de classes de RA

On peut montrer cette proposition de la façon suivante :


➊ RA est par définition réflexive (∀x, xRA x), symétrique (∀x∀y, xRA y → yRA x) et tran-
sitive (∀x∀y∀z, (xRA y∧yRA z) → xRA z). RA est donc bien une relation d’équivalence.
De plus, on a τ̂ (e0 , xz) = τ (τ̂ (e0 , x), z) = τ (τ̂ (e0 , y), z) = τ̂ (e0 , yz). On obtient alors :

∀x ∈ V ⋆ ∀y ∈ V ⋆ , xRA y → ∀z ∈ V ⋆ , xzRA yz

RA est donc bien compatible à droite avec la concaténation.


➋ Soit x ∈ V ⋆ . La classe d’équivalence de x est l’ensemble cl(x) = {y ∈ V ⋆ | yRA x}.
Par définition de RA , tous les éléments de cl(x) se comportent de la même façon vis-
à-vis de l’automate, c.-à-d. que l’automate termine dans le même état pour chacun
des mots de la classe. Ainsi, cl(x) est complètement caractérisée par un état de A.
C’est le cas de chacune des classes d’équivalence. On note, pour e ∈ E, cl−1 (e) =
{x ∈ V ⋆ | τ̂ (e0 , x) = e} la classe d’équivalence qu’il caractérise. Le nombre d’états de
l’automate étant fini, le nombre de classes d’équivalence pour RA l’est lui aussi. RA
est donc d’index1 fini.
➌ Par définition, T (A) = {x ∈ V ⋆ |τ̂ (e0 , x) ∈ F }. On obtient donc que
[
T (A) = cl−1 (e)
e∈F

T (A) est bien une union de classes.

Relation d’équivalence associée à un langage


On associe à tout langage L ⊂ V ⋆ , une relation RL définie sur V ⋆ par :

∀x ∈ V ⋆ , ∀y ∈ V ⋆ , xRL y ↔ ∀z ∈ V ⋆ , (xz ∈ L ↔ yz ∈ L) (7.2)

1 L’index d’une relation d’équivalence est le nombre de classes d’équivalence.

136
automates et langages

Proposition 11
La relation RL associée au langage L ⊂ V ⋆ possède les propriétés suivantes :
➊ RL est une relation d’équivalence compatible à droite avec la
concaténation et pour laquelle L est une union de classes.
➋ RL est moins fine que toute relation d’équivalence R sur V ⋆ compatible
à droite avec la concaténation et pour laquelle L est une union de
classes.

On peut montrer cette proposition de la façon suivante :


➊ RL est réflexive, symétrique et transitive. Il s’agit bien d’une relation d’équivalence. De
plus, considérons x, y et t éléments de V ⋆ . On considère de plus que xRL y. Pour tout
w, on a xtw ∈ L ↔ ytw ∈ L (il suffit en effet de poser z = tw dans l’équation 7.2)
ce qui montre que xtRL yt, montrant bien que RL est compatible à droite avec la
concaténation. Enfin, pour montrer que L est une union de classes, il suffit de montrer
que pour tout x de V ⋆ , si x est dans L alors tout élément y de la classe de x en fait
partie aussi. Pour cela, il suffit de considérer z = ǫ dans l’équation 7.2.
➋ Soit R une relation d’équivalence sur V ⋆ compatible à droite avec la concaténation et
pour laquelle L est une union de classes. Considérons deux éléments x et y quelconques
de V ⋆ tels que xRy. Pour montrer que RL est moins fine que R, il suffit de montrer
que xRL y c’est-à-dire que ∀z ∈ V ⋆ , xz ∈ L ↔ yz ∈ L. Soit z tel que xz ∈ L. Comme
R est compatible à droite avec la concaténation, on a xzRyz. De plus, comme L est
une union de classes de R, yz ∈ L montrant ainsi le résultat.

7.1.2 Le théorème de Nerode➠ et ses conséquences


Le théorème suivant dû à Anil Nerode➠ est fondamental car il permet de faire le lien
entre automates et langages.

Théorème 27 (Nerode)
Soit un langage L ⊂ V ⋆ . Les énoncés suivants sont équivalents :
➊ L est régulier, c’est-à-dire qu’il peut être reconnu par un automate à
un nombre fini d’états
➋ L est l’union de classes d’une relation d’équivalence R sur V ⋆ compa-
tible à droite avec la concaténation et d’index fini
➌ RL est d’index fini

On peut démontrer ce théorème de la façon suivante :


– La proposition 10 montre que ➊ implique ➋.

137
7 – langages et automates

– La proposition 11 nous a permis de montrer que RL était la moins fine des relations
d’équivalence sur V ⋆ compatibles à droite avec la concaténation et pour lesquelles L est
une union de classes. R étant d’index fini (➋ du théorème 27), RL l’est nécessairement
aussi (puisque moins fine). Ainsi, ➋ implique ➌.
– Il reste à montrer que ➌ implique ➊ c’est-à-dire que si RL est d’index fini, alors L
peut être reconnu par un automate à un nombre fini d’états. Considérons l’automate
fini déterministe AL = (E, V, τ, e0 , F ) tel que :
– E = V ⋆ /RL (ensemble fini puisque RL est d’index fini)2 .
– e0 = cl(ǫ)
– F = {cl(x) | x ∈ L}
– τ est définie par ∀x ∈ V ⋆ , ∀a ∈ V, τ (cl(x), a) = cl(xa)
On a alors le résultat suivant (démontrant ➊) :

T (AL ) = {x ∈ V ⋆ | τ̂ (cl(ǫ), x) ∈ F }
= {x ∈ V ⋆ | cl(x) ∈ F }
= {x ∈ V ⋆ | x ∈ L} car L est une union de classes
= L

L’automate AL que l’on vient de définir en démontrant le théorème 27 est très particulier.

Théorème 28
AL est l’automate fini déterministe minimal permettant de reconnaı̂tre L. Il
n’existe donc pas d’automate fini déterministe reconnaissant L ayant moins
d’états que AL .

En effet, considérons un automate A tel que L = T (A). RA est alors plus fine que RL
(proposition 11). Alors, le nombre d’états de A (qui est au moins égal à l’index de RA ) est
au moins égal au nombre d’états de AL qui lui-même est égal à l’index de RL . On ne pourra
donc pas trouver d’automate avec moins d’états.

7.1.3 Application : régularité de langages


Langages non réguliers
Il est possible de montrer qu’un langage n’est pas régulier en montrant que l’index de
la relation d’équivalence RL associée n’est pas fini.

☞ exemple : Montrons que L = {0n 1n | n ∈ N⋆ } n’est pas régulier. Il suffit pour


cela de montrer que l’index de RL n’est pas fini. Considérons deux entiers m
et n tels que m 6= n. Alors, on a cl(0m ) 6= cl(0n ). En effet, 0m 1m ∈ L mais
0n 1m 6∈ L. Donc, l’index est nécessairement infini. L n’est donc pas régulier.
On peut montrer que L est de type 2.

2V ⋆/ est l’ensemble quotient ; l’ensemble des classes de RL .


RL

138
automates et langages

Une autre façon de montrer qu’un langage n’est pas régulier consiste à utiliser le théorème
suivant :

Théorème 29
Soit L un langage régulier. Il existe une constante n (dépendant de L) tel
que tout mot w de L tel que |w| ≥ n puisse être décomposé en trois mots,
w = xyz tels que :
➊ y 6= ǫ
➋ |xy| ≤ n
➌ ∀k ≥ 0, xy k z ∈ L

En effet, comme L est régulier, il existe un automate fini déterministe A tel que L =
T (A). Supposons que A soit constitué de n états. Maintenant, considérons un mot w de
longueur supérieure ou égale à n. On a w = a1 a2 · · · am avec m ≥ n et chaque ai un élément
du vocabulaire. Pour i allant de 0 à n, on définit l’état pi = τ̂ (e0 , a1 a2 · · · ai ) où τ est la
fonction de transition de A et e0 son état de départ. pi est ainsi l’état atteint après avoir lu
les i premiers symboles de w. On a : p0 = e0 .
Nécessairement, les pi ne peuvent être tous différents les uns des autres puisqu’il y en a
n + 1 et qu’il n’existe que n états distincts dans l’automate. Ainsi, on peut déterminer deux
entiers i et j tels que 0 ≤ i < j ≤ n tels que pi = pj . On a alors w = xyz où :
➀ x = a1 a2 · · · ai
➁ y = ai+1 ai+2 · · · aj
➂ z = aj+1 aj+2 · · · am
Ainsi, x permet d’atteindre pi , y permet de revenir à pi et z permet de finir w. La figure 7.1
montre les relations entre ces différentes chaı̂nes sur l’automate. On constate ici que x peut
être vide (lorsque i vaut 0) ; z peut être vide (si j = n = m) mais y ne peut jamais être
vide (car i < j). La décomposition de w en xyz vérifie donc la propriété ➊ du théorème 29.
De même, la condition ➋ est vérifiée naturellement (xy est de longueur j ≤ n).
Il nous reste pour démontrer le théorème 29 à vérifier la propriété ➌. Considérons l’au-
tomate A et l’entrée xy k z pour un k supérieur ou égal à 0.
➀ si k = 0, alors l’automate part de l’état e0 = p0 pour aller vers l’état pi à la lecture de
x puis de ce même état vers l’état d’acceptation de l’automate représenté figure 7.1 à
la lecture de z. Ainsi, A accepte xz qui est donc dans L.
➁ si k > 0, A va de e0 = p0 vers pi à la lecture de x puis de k fois de pi vers pi à la
lecture des k instances de y puis enfin vers l’état d’acceptation de la figure 7.1 à la
lecture de z montrant ainsi que xy k z ∈ L.

139
7 – langages et automates

y = ai+1 · · · aj

x = a1 · · · ai z = aj+1 · · · am
p0 pi

Fig. 7.1 — Toute chaı̂ne plus longue que le nombre d’états d’un automate doit provoquer la répétition d’au
moins un état.

☞ exemple : Montrons de nouveau que L = {0n 1n | n ∈ N⋆ } n’est pas régulier.


Supposons pour cela qu’il le soit. D’après le théorème 29, la constante n existe.
Considérons alors w = 0n 1n . w est un élément de L. Soit une décomposition
de w en trois sous-chaı̂nes telles que w = xyz telle que y 6= ǫ et |xy| ≤ n.
Cette décomposition existe d’après le théorème 29. Nous allons simplement
montrer qu’il existe au moins un k pour lequel xy k z ne peut pas appartenir à
L, mettant ainsi en défaut le théorème. En effet, comme |xy| ≤ n, x et y sont
uniquement constitués de 0 ; le théorème nous assure que xz doit appartenir
à L. Or, z contient nécessairement n 1 (en effet, tous les 1 sont dans z du
fait des contraintes sur x et y). De plus, xz a nécessairement moins de n 0
puisque ce mot a « perdu » les 0 de y (qui ne peut être vide). xz ne peut
donc appartenir à L. Le théorème étant pris en défaut, l’hypothèse de départ
est nécessairement fausse. L n’est donc pas régulier.

➽ exercice 123 : Montrer que les langages suivants ne sont pas réguliers :
➊ {1n | n premier}
➋ {0n 1m | n ≤ m}

✒ nota bene : D’une manière générale, un automate fini n’est pas capable de
« compter ».

Langages réguliers
Montrons que L = {0m 1n | m ∈ N⋆ , n ∈ N⋆ } est régulier. Pour cela, nous allons calculer
l’index de RL la relation d’équivalence de associée à L.
– cl(ǫ) = {ǫ}. En effet, considérons un autre élément potentiel x 6= ǫ de cette classe. Si
x contient au moins un 1, considérons z = 01. On a alors : ǫz ∈ L mais xz 6∈ L. x
ne peut donc être dans la même classe que ǫ. De même, si x n’est constitué que de 0,

140
automates et langages

0
cl(ǫ) cl(0)

1 0, 1 0 1
1

cl(1) cl(01)
0

Fig. 7.2 — L’automate fini déterministe minimal permettant de reconnaı̂tre le langage {0m 1n | m ∈ N⋆ , n ∈
N⋆ }

considérons z = 1. On a alors ǫz 6∈ L mais xz ∈ L. x ne peut non plus être dans la


même classe que ǫ, d’où le résultat.
– cl(0) = 0+ . En effet, soit x ∈ 0+ , on a clairement que pour tout z ∈ V ⋆ , 0z ∈
L ↔ xz ∈ L. Ainsi, cl(0) ⊃ 0+ . Considérons maintenant x ∈ cl(0). On a alors :
∀z ∈ V ⋆ , xz ∈ L ↔ 0z ∈ L. En particulier, si z = 1, x1 ∈ L montrant ainsi que
x ∈ 0+ 1⋆ . De même, si z = 01, comme 001 ∈ L, x01 doit aussi appartenir à L
montrant ainsi que x ∈ 0⋆ . La réunion des deux conditions montre que x ∈ 0+ . On a
donc : cl(0) ⊂ 0+ d’où le résultat.
– cl(1) = (1V ⋆ ) ∪ (V ⋆ 10V ⋆ ). En effet, aucun des mots ne commençant par 1 n’apparte-
nant au langage, ils se comportent tous comme 1 vis-à-vis de la concaténation à droite.
De même pour tout mot contenant la sous-séquence 10. Il suffit de montrer qu’aucun
autre mot ne peut être dans cl(1). Soit x ∈ cl(1) ne commençant pas par 1 (il com-
mence donc par 0) et ne contenant pas la sous-séquence 10. x est donc nécessairement
soit vide (il appartient alors cl(ǫ)), soit uniquement constitué de 0 (il appartient alors
à cl(0)), soit un mot de L (il ne peut alors faire partie de la même classe que 1 qui lui
ne fait pas partie du langage). x ne peut donc exister. D’où le résultat.
– cl(01) = L. En effet tous les mots du langage se comportent comme 01. De plus,
les mots n’étant pas dans L rentrent dans le cadre d’une des catégories rencontrées
auparavant et ne peuvent donc pas faire partie de cl(01).
On constate que la réunion des différentes classes exhibées donne l’ensemble V ⋆ montrant
ainsi que cet ensemble de classes est bien l’ensemble quotient de V ⋆ par RL . L’index de RL
est donc fini. L est régulier.

✒ nota bene : D’après le théorème 28, l’automate fini déterministe de la figure 7.2
est l’automate minimal permettant de reconnaı̂tre L.

On peut aussi utiliser les deux théorèmes suivants montrant l’équivalence entre langages
réguliers et langages de type 3 (c.-à-d. engendrable à l’aide d’une grammaire de type 3).

141
7 – langages et automates

Théorème 30
Tout langage de type 3 est régulier

Pour le montrer, considérons L langage engendré par la grammaire G, de type 3, G =


(VN , V, S, R). Soit la relation ∼ sur V ⋆ définie par :

x∼y ↔ ∀M ∈ VN ∪ {ǫ}, (S =⇒ xM ) ↔ (S =⇒ yM )

➀ ∼ est une relation d’équivalence (elle est symétrique – x ∼ x, reflexive – x ∼ y → y ∼ x


et transitive – x ∼ y ∧ y ∼ z → x ∼ z)
➁ ∼ est compatible à droite avec la concaténation. En effet, considérons x et y tels
que x ∼ y. Soit z ∈ V ⋆ , il faut s’assurer que xz ∼ yz. Soit M ∈ VN ∪ {ǫ} tel que,
S =⇒ xzM . G étant de type 3, on a nécessairement3 l’existence d’un M ′ ∈ VN ∪ {ǫ}
tel que : S =⇒ xM ′ =⇒ xzM (ce qui signifie en particulier que M ′ =⇒ zM ). Or, par
définition de ∼, S =⇒ yM ′ . Donc, S =⇒ yzM . D’où le résultat.
➂ ∼ est d’index fini. En effet, considérons x et y tels que ¬(x ∼ y). Alors, par définition
de ∼, il existe un M ∈ VN ∪ {ǫ} tel que ¬(S =⇒ xM ↔ S =⇒ yM ). Or, cet M est
extrait d’un ensemble fini. Les classes de ∼ sont donc au maximum de |VN | + 1.
➃ L est une union de classes de ∼. En effet, considérons x ∈ L et y ∈ cl(x), il suffit
de montrer que y ∈ L. Comme x ∼ y, en considérant M = ǫ, on obtient S =⇒ x ↔
S =⇒ y et donc y ∈ L.
L est donc l’union de classes d’une relation d’équivalence ∼ sur V ⋆ compatible à droite
avec la concaténation et d’index fini. Par application du théorème 27, L est donc régulier.

✒ nota bene : L est reconnu par l’automate fini non déterministe A = (VN ∪
{f }, V, S, {f }). Considérant x ∈ V et y ∈ VN quelconques, τ est définie de
la façon suivante :
– (y, x) ∈ R ↔ f ∈ τ (y, x)
– ∀z ∈ VN , (y, xz) ∈ R ↔ z ∈ τ (y, x)
– τ (f, x) = ∅

☞ exemple : Considérons la grammaire G, de type 3, G = ({S, M }, {0, 1}, S, R)


où R = {(S, 0M ), (M, 0M ), (M, 1S), (M, 0)}. L’automate de la figure 7.3
permet de reconnaı̂tre ce langage, il est construit en utilisant les règles ci-
dessus. Notons que cet automate est non déterministe.

3 On se souviendra que les grammaires de type 3 sont « linéaire à droite »– voir chapitre 5 et plus

particulièrement la section 5.3.2 page 111.

142
automates et langages

0
0
S M

1 0

Fig. 7.3 — Un automate pour reconnaı̂tre une grammaire de type 3.

➽ exercice 124 : Donner un automate fini déterministe minimal permettant de


reconnaı̂tre L(G).

Théorème 31
Tout langage régulier est de type 3.

Soit L reconnu par l’automate déterministe A = (E, V, τ, e0 , F ). On considère G =


(E, V, e0 , R) avec R = {(e, Xe′ )|τ (e, X) = e′ } ∪ {(e, X)|τ (e, X) ∈ F }. On montre très
facilement, d’une part, que T (A) ⊂ L(G) (en effet, si x ∈ T (A), il existe un chemin de
e0 à F qui donne directement la séquence de règles à appliquer dans G) ; et, d’autre part,
que L(G) ⊂ T (A) (en effet, de la même façon si x ∈ L(G), cela nous permet d’exhiber un
chemin dans l’automate de e0 à f ). Ainsi, on a L(G) = T (A) = L. De plus, G est clairement
de type 3. D’où le résultat.

➽ exercice 125 : Donner la grammaire de type 3 associé à l’automate déterministe


de l’exercice précédent.

➽ exercice 126 : Le langage des mots sur {0, 1} interprétés comme la représentation
binaire d’un entier congru à 0 modulo 5 est-il régulier ? Si oui, donner un au-
tomate minimal permettant de reconnaı̂tre ce langage.

143
7 – langages et automates

7.2 Propriétés des langages réguliers


Les langages réguliers (ou de type 3) possèdent un certain nombre de particularités très
utiles en pratique.

7.2.1 Structure algébrique

Théorème 32
L’ensemble T3 des langages de type 3 sur un vocabulaire V constitue une
algèbre de Boole d’ensembles.

Pour cela, il suffit, d’une part, de montrer que ∅ est un langage régulier ; et que, d’autre
part, les opérations d’union, d’intersection et de complémentation4 sont stables sur T3 .
➀ Considérons A = (E, V, τ, e0 , ∅). On a T (A) = ∅. Ce dernier est donc régulier.
➁ Soit A = (E, V, τ, e0 , F ) et L = T (A) = τe−1 0
(F ). Ainsi, L = V ⋆ \ L = τe−1 0
(E \ F )

ce qui signifie que L est reconnu par A = (E, V, τ, e0 , E \ F ). T3 est donc stable par
complémentation.
➂ Soit A1 = (E1 , V, τ1 , e1 , F1 ) et A2 = (E2 , V, τ2 , e2 , F2 ). Soit A = (E1 ×E2 , V, τ, (e1 , e2 ),
F1 × F2 ) avec :

∀x ∈ V ∀(x1 , x2 ) ∈ E1 × E2 , τ ((x1 , x2 ), x) = (τ1 (x1 , x), τ2 (x2 , x))

On pose :
∀X ∈ V ⋆ , τ̂ ((e1 , e2 ), X) = (τ̂ (e1 , X), τ̂ (e2 , X))
Ainsi, on a X ∈ T (A) si et seulement si :

∃(f1 , f2 ) ∈ F1 × F2 , τ̂ ((e1 , e2 ), X) = (τ̂ (e1 , X), τ̂ (e2 , X)) = (f1 , f2 )

soit si et seulement si X ∈ T (A1 ) et X ∈ T (A2 ) et donc si et seulement si X ∈ L1 ∩L2 .


T3 est donc stable par complémentation.

✒ nota bene : En particulier, l’union de deux langages réguliers est régulier car
L1 ∪ L2 = L1 ∩ L2 .

4 On peut même se limiter à intersection et complémentation du fait des lois de de Morgan. On se

reportera au chapitre 2 (en particulier la section 2.3 à partir de la page 24) pour des rappels sur les algèbres
de Boole.

144
propriétés des langages réguliers

Théorème 33
Tout langage fini est régulier

Comme T3 est stable par rapport à l’union, il suffit de montrer que les langages réduits
à un mot unique sont réguliers. Soit X = x1 x2 · · · xn ∈ V ⋆ le mot du langage. L = {X} est
bien évidemment engendré par la grammaire de type 3 suivante :

G = ({yi |i ∈ [n[}, V, y0 , {ri |i ∈]n]})

où : ∀i ∈]n[, ri = (yi−1 , xi yi) et rn = (yn−1 , xn ). D’où le résultat.

7.2.2 Opérations sur les langages réguliers


On définit le produit (ou la concaténation) L3 de deux langages L1 et L2 de la façon
suivante :
L3 = L1 L2 = {x1 x2 |x1 ∈ L1 ∧ x2 ∈ L2 }

Théorème 34
Le produit de deux langages réguliers L1 et L2 est régulier.

Soit A1 = (E1 , V1 , τ1 , e1 , F1 ) et A2 = (E2 , V2 , τ2 , e2 , F2 ) des automates déterministes


acceptant respectivement les langages L1 et L2 . On suppose que V1 = V2 = V et que
E1 ∩ E2 = ∅. Soit l’automate (non déterministe)

A3 = (E1 ∪ E2 , V, τ3 , e1 , F3 )

avec pour tout x ∈ V :


➀ ∀e ∈ E1 \ F1 , τ3 (e, x) = {τ1 (e, x)}
➁ ∀e ∈ F1 , τ3 (e, x) = {τ1 (e, x), τ2 (e2 , x)}
➂ ∀e ∈ E2 , τ3 (e, x) = {τ2 (e, x)}
De plus, si ǫ 6∈ L2 alors F3 = F2 ; si ǫ ∈ L2 , alors F3 = F1 ∪ F2 (en effet, dans ce cas
L1 ⊂ L1 L2 ).

✒ nota bene : En lisant x1 x2 , par ➀ A3 imite A1 sur x1 ; ➁ permet à A3 de


continuer à simuler A1 ou de deviner le début du mot x2 de L2 ; x1 étant
un mot de L1 ; enfin, ➁ permet à A3 de simuler A2 . A3 permet donc de
reconnaı̂tre L3 .

145
7 – langages et automates

Théorème 35 S
Si L est régulier, sa clôture L⋆ = n∈N Ln est régulier.

✒ nota bene : Par convention, L0 = {ǫ}.

Soit A = (E, V, τ, e0 , F ) un automate déterministe acceptant L. Ln est accepté par


l’automate non déterministe A′ = (E, V, τ ′ , e0 , F ∪ {e0 }) avec, pour tout x ∈ V :
– ∀e ∈ E \ F, τ ′ (e, x) = {τ (e, x)}
– ∀e ∈ F, τ ′ (e, x) = {τ (e, x), τ (e0 , x)}

Théorème 36 (Kleene➠)
T3 est le plus petit sous-ensemble de P(V ⋆ ) stable par rapport à l’union, au
produit et à la clôture qui contient les sous-ensembles finis de V ⋆

Soit M le plus petit sous-ensemble de P(V ⋆ ) stable par rapport à l’union, au pro-
duit et à la clôture qui contient les sous-ensembles finis de V ⋆ . L’ensemble des résultats
précédents permet de montrer directement que M ⊂ T3 . Il nous reste à prouver que tout
langage régulier appartient à la famille M. Soit L le langage régulier reconnu par l’automate
déterministe :
A = ({e1 , . . . , en }, V, τ, e1 , F )
Posons pour (i, j, k) ∈]n]3 , Rij
0
= {x ∈ V |τ (ei , x) = ej )} et :
k
Rij = {X ∈ V ⋆ |τ (ei , X) = ej ∧∀Y ∈ V + ∀Z ∈ V + (X = Y Z∧∃ℓ, τ (ei , Y ) = eℓ ) → ℓ ≤ k}
k
Ainsi, Rij désigne l’ensemble des mots X tels que l’automate commençant à les lire dans
l’état ei termine dans l’état ej sans être jamais passé par un état eℓ tel que ℓ > k. Dans
k
Rij , on distingue :
➀ les mots X tels que l’état ek n’est jamais atteint en cours de calcul (c.-à-d. les mots
k−1
de Rij )
k−1 k−1
➁ les mots composés d’un mot de Rik suivi d’un certain nombre de mots de Rkk puis
k−1 k−1 k−1 ⋆ k−1
d’un mot de Rkj . En d’autres termes, les mots de Rik (Rkk ) Rkj .
On peut donc écrire :
k k−1 k−1 ⋆ k−1 k−1
Rij = (Rik (Rkk ) Rkj ) ∪ Rij (7.3)

146
expressions régulières

k
Montrons pour i et j quelconques, par récurrence sur k, que Rij ∈ M.
0 0
➀ Rij est élément de M car Rij est fini
➁ supposons le résultat établi pour tout entier h strictement inférieur à k c.-à-d. ∀h ∈
j
]k], Rij ∈ M. La relation 7.3 et la stabilité par rapport de M par rapport à l’union,
k
au produit et à la clôture nous donne : Rij ∈ M.
S n
Remarquons, finalement que : L = j∈]n],ej ∈F R1j . Ainsi, L ∈ M.

✒ nota bene : Tout langage régulier sur V peut s’exprimer à l’aide de sous-
ensembles finis de V ⋆ en utilisant les opérations d’union, de produit et de
clôture. On parle d’« expressions régulières ».

7.3 Expressions régulières


Les expressions régulières (représentant exactement l’ensemble des langages de type 3
– théorème 36) sont un outil très puissant et très utilisé dans le monde informatique (en
particulier, pour toutes les manipulations de texte). Nous allons dans cette section les étudier
un peu plus en avant.

7.3.1 Notations, syntaxe


On peut décrire les expressions régulières de manière récursive :
➊ Les expressions suivantes sont des expressions régulières :
➀ ǫ et ∅ sont des expressions régulières, représentant respectivement les langages
{ǫ} et ∅.
➁ Si a est un symbole, alors a est une expression régulière5 . Cette expression
représente le langage {a}.
➂ Une variable, d’ordinaire en capitale et en italiques telle que L est une variable
représentant un langage quelconque.
➋ si E et F sont des expressions régulières, E+F est une expression régulière représentant
l’union de L(E) et de L(F ).
➌ si E et F sont des expressions régulières, EF est une expression régulière représentant
le produit de L(E) et de L(F ).
➍ si E est une expression régulière, alors E ⋆ est une expression régulière représentant la
clôture de L(E).
➎ si E est une expression régulière, alors (E) est aussi une expression régulière.

5 Par convention, nous utilisons cette représentation pour décrire une expression régulière liée à un

symbole.

147
7 – langages et automates

☞ exemple : Si l’on souhaite représenter l’ensemble des mots qui alternent des 0
et des 1, une façon simple est de partir de 01, puis d’en prendre la clôture
(01)⋆ . Mais, il nous manque ici les mots qui commencent par un 1 et ceux
qui finissent pas un 0. Il y a deux manières de régler ce problème. On peut
aussi partir de 10 et alors l’expression régulière que l’on cherche est :

(01)⋆ + (10)⋆ + 0(10)⋆ + 1(01)⋆

Mais, on peut décrire ce langage de manière plus succincte en ajoutant


un 1 ou un 0 optionnel aux endroits idoines :

(ǫ + 1)(01)⋆ (ǫ + 0)

✒ nota bene : L’ordre standard de priorité au sein des expressions régulière est le
suivant : tout d’abord la clôture, puis le produit et enfin l’union. Ainsi, 01⋆ +1
se lit en fait (0(1⋆ )) + 1.

➽ exercice 127 : Donner des expressions régulières permettant de décrire les


langages suivants :
➊ l’ensemble des mots sur {a, b, c} contiennent au moins un a et au moins
un b
➋ l’ensemble des mots sur {0, 1} dont le dixième symbole à partir de la
droite est un 1
➌ l’ensemble des mots sur {0, 1} ayant au plus une paire de 1 consécutifs

➽ exercice 128 : Décrire en langage courant les expressions régulières suivantes :


➊ (1 + ǫ)(00⋆ 1)⋆ 0⋆
➋ (0⋆ 1⋆ )⋆ 000(0 + 1)⋆
➌ (0 + 10)⋆ 1⋆

7.3.2 Calculer l’expression régulière associée à un automate


Pour convertir un automate en une expression régulière, il est utile d’utiliser les outils
k
introduits dans la preuve du théorème 36 vue page 146. Il s’agit de construire les Rij
récursivement pour tous les couples d’états i et j et pour toutes les valeurs de k (de 0 à n
le nombre d’états de l’automate). Mais, le processus est particulièrement long et fastidieux.
Nous allons donc présenter ici une méthode plus simple basée sur une approche à base
d’élimination d’états.

148
expressions régulières

Éliminer un état s consiste à supprimer tous les chemins qui passent par s dans l’auto-
mate. Si on souhaite ne pas modifier le langage reconnu par l’automate, il est alors nécessaire
d’utiliser des transitions étiquetées par des mots et non plus des symboles. Ainsi, sur un
arc allant de l’état p à l’état q, on pourra faire figurer tous les mots (étiquettes) obtenus en
allant de p à q en passant par s. Il est bien évidemment irréalisable de lister tous ces mots.
Heureusement, nous sommes sûrs que cet ensemble de mots peut être représentés par une
expression régulière.
Le langage de l’automate obtenu après élimination d’états intermédiaires est l’union
pour tous les chemins de l’état de départ à un état d’acceptation des langages obtenus par
la concaténation des langages rencontrés le long du chemin.

✒ nota bene : Cette façon de voir les choses est tout à fait compatible avec les
définitions de langages reconnus par les automates vues jusqu’à présent. En
effet, chaque symbole a (ou même ǫ s’il est autorisé) peut être vu comme
une expression régulière dont le langage est un constitué mot unique {a} (ou
{ǫ})

La figure 7.4 présente un état générique s sur le point d’être éliminé. On suppose ici que
dans l’automate considéré, s a pour prédécesseurs les états q1 , q2 , . . . , qk et pour successeurs
p1 , p2 , . . . , pm . Bien sûr, il est possible que des q soit des p mais dans tous les cas s n’est
ni parmi les p et les q même s’il existe une boucle sur s (comme on peut le voir sur la
figure 7.4). Les arcs de qi à s sont étiquetés par une expression régulière Qi ; les arcs de s à
pj sont étiquetés par l’expression régulière Pj . La boucle sur s est étiquetée S. Enfin, Rij
est l’expression régulière étiquetant l’arc entre qi et pj .

✒ nota bene : Si les arcs mentionnés n’existent pas, l’expression régulière les
étiquetant est alors ∅.

La figure 7.5 montre ce que devient l’automate après élimination de l’état s. Tous les arcs
mettant en jeu s ont disparu. En compensation, on introduit pour chaque prédécesseur qi et
chaque successeur pj , une expression régulière représentant tous les chemins éliminés c.-à-d.
les chemins démarrant en qi , allant s, bouclant sur s zéro ou plusieurs fois, et finalement,
allant en pj . Cette expression est tout simplement : Qi S ⋆ Pj . Cette dernière est ajoutée (par
union) à l’expression pré-existant sur l’arc reliant qi à pj .
La démarche pour construire une expression régulière à partir d’un automate est alors
la suivante :
➊ Pour chaque état d’acceptation q, éliminer tous les états intermédiaires entre e0 (état
de départ) et q.
➋ Si q 6= e0 , on obtient un automate à deux états tel que celui de la figure 7.6. L’expres-
sion régulière associée au langage est alors : (R + SU ⋆ T )⋆ SU ⋆ .
➌ Si e0 est un état d’acceptation, alors on obtient un automate à un unique état tel que
celui de la figure 7.7 dont l’expression régulière le représentant est : R⋆ .

149
7 – langages et automates

R1m

R11
q1 p1

Q1 P1
S

Qk Pk

qk pm
Rkm

Rkl

Fig. 7.4 — Un état s en cours d’élimination

➍ L’expression régulière représentant l’automate est alors l’union de toutes les expres-
sions calculées à partir des automates réduits en appliquant les règles ➋ et ➌ pour
chacun des états d’acceptation de l’automate initial.

☞ exemple : Soit l’automate fini non déterministe de la figure 7.8 qui accepte
tous les mots composés de 0 et de 1 dont l’avant-dernière ou l’antépénultième
position est un 1. La première étape consiste à convertir cet automate en un
automate étiqueté par des expressions régulières. On obtient l’automate de la
figure 7.9. Ensuite, il s’agit d’éliminer l’état B. En effet, celui-ci n’est ni état
de départ, ni état d’acceptation, il sera éliminé de toutes les réductions.
L’état B a un prédécesseur A et un successeur C. Selon les conventions de
la figure 7.4, on a Q1 = 1, P1 = 0+1, R11 = ∅ (car il n’y a pas d’arc entre A
et C) et S = ∅ car il n’y a pas de boucle sur B. Ainsi, l’expression sur le nouvel
arc entre A et C est : ∅ + 1∅⋆ (0 + 1). On peut simplifier cette expression
en notant que ∅ est neutre pour l’union et que L(∅⋆ ) = L(∅0 ) = {ǫ} (car
∅ est absorbant pour le produit – voir page 110). On obtient alors au final :

150
expressions régulières

R11 + Q1 S ⋆ P1
q1 p1

R1m + Q1 S ⋆ Pm

Rk1 + Qk S ⋆ P1

Rkm + Qk S ⋆ Pm
qk pm

Fig. 7.5 — Résultats de l’élimination de s sur l’automate générique de la figure 7.4

R U
S

Fig. 7.6 — Un automate générique à deux états

Fig. 7.7 — Un automate générique à un unique état

151
7 – langages et automates

0, 1

1 0, 1 0, 1
A B C D

Fig. 7.8 — Un AFN acceptant les mots ayant un 1 en avant-dernière ou antépénultième position

0+1

1 0+1 0+1
A B C D

Fig. 7.9 — L’automate de la figure 7.8 avec des expressions régulières comme étiquettes

1(0 + 1) que l’on retrouve sur la figure 7.10.


Il faut maintenant faire un choix. On commence par éliminer C, on obtient
l’automate de la figure 7.11. Selon les conventions de la figure 7.6, on a :
R = 0 + 1, S = 1(0 + 1)(0 + 1), T = ∅ et U = ∅. Ainsi, dans notre cas,
le langage de l’automate de la figure 7.11 (R + SU ⋆ T )⋆ SU ⋆ se simplifie en
R⋆ S, c.-à-d. (0+1)⋆ 1(0+1)(0+1). Nous avons obtenu une partie du langage
que nous cherchions (les mots dont l’antepénultième position est un 1).
Il faut maintenant reprendre l’automate de la figure 7.10 et éliminer l’état
D. Comme D n’a pas de successeur, un examen de la figure 7.4 nous montre
que rien ne change pour les étiquettes et les arcs mais que D et l’arc entre C
et D disparaı̂t. On obtient l’automate de la figure 7.12. L’expression régulière
associée (on applique les mêmes règles que précédemment) est : (0+1)⋆ 1(0+
1) (les mots dont l’avant-dernière position est un 1).
Il ne nous reste plus qu’à réaliser l’union des différentes expressions cal-
culées. L’expression régulière associée à l’automate est donc :

(0 + 1)⋆ 1(0 + 1) + (0 + 1)⋆ 1(0 + 1)(0 + 1)

➽ exercice 129 : Construire l’expression régulière associée à l’automate fini déterministe


de la figure 7.13.

152
expressions régulières

0+1

1(0 + 1) 0+1
A C D

Fig. 7.10 — L’automate de la figure 7.9 après suppression de B

0+1

1(0 + 1)(0 + 1)
A D

Fig. 7.11 — L’automate de la figure 7.10 après suppression de C

0+1

1(0 + 1)
A C

Fig. 7.12 — L’automate de la figure 7.10 après suppression de D

0 0, 1
1 2

Fig. 7.13 — Un AFD dont on cherche l’expression régulière associée.

153
7 – langages et automates

Fig. 7.14 — Les automates de base pour l’association d’un automate à une expression régulière

➽ exercice 130 : Quelle est l’expression régulière permettant de définir le langage


reconnu par l’automate dont la table de transition est la suivante :

0 1
→ e1 e2 e1
e2 e3 e1
⋆e3 e3 e2

➽ exercice 131 : Quelle est l’expression régulière permettant de décrire la représentation


binaire des nombres entiers congrus à 0 modulo 5 ?

7.3.3 Associer un automate à une expression régulière


Il est possible d’associer mécaniquement (et récursivement) un ǫ-automate à une expres-
sion régulière. Cet automate vérifie les propriétés suivantes :
– il possède un unique état d’acceptation
– l’état initial ne présente pas d’arc entrant
– l’état final ne présente pas d’arc sortant
Nous utilisons pour cela trois automates de base (figure 7.14) et trois automates génériques
(figures 7.15 à 7.17).
La figure 7.14 présente les trois automates de base. De haut en bas, le premier automate
permet de reconnaı̂tre le langage associé à l’expression régulière ǫ ; le deuxième, permet de
reconnaı̂tre le langage associé à ∅ ; et, enfin, le troisième permet de reconnaı̂tre le langage
associé à l’expression régulière a.
Les expressions régulières sont produites par des opérations d’union, de produit et de
clôture exclusivement. On obtient alors les trois situations suivantes :

154
expressions régulières

R
ǫ ǫ

ǫ ǫ
S

Fig. 7.15 — Automate générique pour l’union de deux expressions régulières

ǫ
R S

Fig. 7.16 — Automate générique pour le produit de deux expressions régulières

ǫ ǫ
R

Fig. 7.17 — Automate générique pour la clôture d’une expression régulière

➊ L’expression R + S est représentée à l’aide de l’automate générique de la figure 7.15


en remplaçant les composants génériques par les automates les décrivant (construits
récursivement de la même façon)
➋ L’expression RS est représentée à l’aide de l’automate générique de la figure 7.16
➌ L’expression R⋆ est représentée à l’aide de l’automate générique de la figure 7.17

✒ nota bene : En présence de l’expression (R), il suffit d’utiliser l’automate associé


à R. En effet, les parenthèses n’ont pas de sens, elle servent uniquement à
grouper correctement les sous-expressions.

155
7 – langages et automates

0
ǫ ǫ

ǫ ǫ
1

Fig. 7.18 — L’automate construit à partir de 0 + 1

0
ǫ ǫ
ǫ ǫ
ǫ ǫ
1

Fig. 7.19 — L’automate construit à partir de (0 + 1)⋆

☞ exemple : Construisons l’automate associé à l’expression régulière :

(0 + 1)⋆ 1(0 + 1)

L’application des règles précédentes donne l’automate construit à partir de


l’automate représentant l’expression 0 + 1 (figure 7.18) et celui représentant
l’expression (0 + 1)⋆ (figure 7.19) donnant l’automate final de la figure 7.20.

✒ nota bene : Un tel ǫ-automate peut être simplifié en supprimant les ǫ-transitions,
on obtient alors un automate tout à fait similaire à celui de la figure 7.12.

➽ exercice 132 : Donner les ǫ-automates associés aux expressions suivantes :


➊ 01⋆
➋ (0 + 1)01
➌ 00(0 + 1)⋆

156
expressions régulières

0
ǫ ǫ
ǫ ǫ
ǫ ǫ
1 ǫ

ǫ
1

0
ǫ ǫ ǫ

ǫ ǫ
1

Fig. 7.20 — L’automate construit à partir de (0 + 1)⋆ 1(0 + 1)

➽ exercice 133 : Soit A = (E, Σ, τ, e0 , {ef }) un ǫ-automate tel que e0 ne soit pas
un successeur et ef un prédécesseur. Décrire le langage accepté par l’automate
résultant des modifications sur A (ceci en terme de L = T (A)) :
➊ ajout d’une ǫ-transition entre ef et e0
➋ ajout d’une ǫ-transition entre e0 et tout état présent sur un chemin issu
de e0
➌ ajout d’une ǫ-transition entre tout état présent sur un chemin aboutis-
sant à ef et ef
➍ les modifications ➋ et ➌ simultanément

7.3.4 Les expressions régulières dans le monde UNIX


Les expressions régulières permettent, entre autres, de décrire des motifs que l’on cherche
à reconnaı̂tre dans un texte. Elles sont particulièrement utilisées dans le monde UNIX, en
particulier dans les éditeurs de texte et plus généralement dans les outils de manipulation de
textes. Mais elles sont aussi très présentes dans les outils liés à la compilation ; en particulier,
lors de la phase dite d’analyse lexicale qui permet d’identifier dans un programme l’ensemble

157
7 – langages et automates

des mots-clés du langage. Ces expressions régulières sont alors codées en interne sous la forme
d’un automate déterministe ou non qui est alors simulé pour identifier les motifs recherchés.
UNIX offre un certain nombre de raccourcis pour permettre d’écrire des expressions
régulières sur l’alphabet ASCII beaucoup plus succinctement. Ainsi :
– le symbole . (un point) représente un caractère quelconque
– [a1 a2 . . . ak ] est un raccourci pour l’expression régulière : a1 + a2 + · · · + ak
– entre des crochets, une expression du type x-y représente l’ensemble des caractères
entre x et y dans l’ordre ASCII. Ainsi, les nombres peuvent représentés par [0-9],
les caractères majuscules par [A-Z] et l’ensemble des caractères alphanumériques par
[A-Za-z0-9].
– il existe des notations spéciales pour les ensemble de caractères souvent utilisés :
– [:digit:] est la même chose que [0-9]
– [:alpha:] est la même chose que [A-Za-z]
– [:alnum:] est la même chose que [A-Za-z0-9]
Enfin, divers opérateurs sont utilisé dans les expressions régulières UNIX :
– l’opérateur | est utilisé à la place de +
– l’opérateur * est utilisé à la place de ⋆
– l’opérateur ? signifie « zéro ou un ». Ainsi, R? en UNIX est la même chose que ǫ + R
dans nos notations
– l’opérateur + signifie « un ou plus ». Ainsi, R+ en UNIX est la même chose que RR⋆
dans nos notations
– l’opérateur {n} signifie « n copies ». Ainsi, R{5} est UNIX est la même chose que
RRRRR dans nos notations

✒ nota bene : UNIX autorise l’utilisation de parenthèses pour grouper les expres-
sions. Les opérateurs ?, + et {n} sont considérés comme * lorsqu’il s’agit de
comparer des priorités.

7.4 Des automates pour tout type de langage


Dans les deux derniers chapitres, nous avons rencontré différents type d’automates (au-
tomates finis déterministes, automates finis non déterministes, ǫ-automates) tous associés
aux langages de type 3 (et donc aux expressions régulières). La figure 7.21 représente les
différents liens que nous avons explicité entre ces différentes sortes d’automates (les liens
pleins signalent une représentation possible spécifiquement démontrée et des liens en poin-
tillés signalent une représentation possible admise).
Il existe d’autres types d’automates. On peut citer en particulier les automates à pile
(une structure de pile est associée à l’automate afin de lui donner une « mémoire »). On
peut montrer que de tels automates permettent de reconnaı̂tre les langages de type 2 (et
uniquement eux). Un certain nombre de propriétés existent sur ces automates. L’automate
« ultime » (pour les langages de type 0) est appelé « machine de Turing➠ ». Les machines
de Turing sont à la base de l’informatique moderne et sont un outil fondamental pour
comprendre calculabilité, décidabilité et complexité des algorithmes et des problèmes. Leur
étude fera l’objet des prochains chapitres.

158
des automates pour tout type de langage

ǫ-AFN AFN

ER AFD

Fig. 7.21 — Équivalences entre différents types d’automates

159
chapitre huit

calculabilité, décidabilité

Le monde jaillit des calculs de Dieu

Leibniz

Jusqu’à présent, nous nous sommes intéressés à l’étude des langages au travers des plus
simples d’entre eux, les langages de type 3. Nous pourrions continuer notre étude en nous
intéressant aux langages de type 2. En effet, les langages de programmation tombant souvent
dans cette catégorie, cela semblerait pertinent. Nous avons vu dans le chapitre précédent
que de tels langages pouvaient être reconnus à l’aide d’un automate particulier dit automate
à pile. [Hopcroft et al., 2001] présente un panorama complet de ces automates et de leurs
propriétés vis-à-vis des langages de type 2.
Nous allons maintenant changer d’optique et plutôt nous intéresser aux aspects plus
généraux des langages et en particulier quels langages peuvent être définis à l’aide d’un
outil informatique quelconque. Nous nous intéressons donc plus maintenant aux limites
des ordinateurs. Nous montrerons ainsi qu’il existe des problèmes qui ne peuvent pas être
résolus à l’aide d’un ordinateur et nous introduirons la notion de machine de Turing qui
est reconnue comme un modèle théorique des ordinateurs actuels. À l’aide des machines de
Turing, nous serons alors capables d’introduire les notions fondamentales de « calculabilité »
et « décidabilité ».

8.1 Langages et problèmes

8.1.1 Notion d’algorithme


Si l’on en croit D. E. Knuth➠ [Knuth, 1997] le mot algorithme provient du nom du
mathématicien arabe du xie siècle : Abu Ja’far, Mohammed ibn Mûsâ al-Khowârizmı̂ c’est-à-
dire « père de Ja’far, Mohammed, fils de Moı̈se, natif de Khowârizm ». Khowârizm s’appelle
aujourd’hui Khiva, ville d’Ouzbékistan. Al-Khowârizm est également à l’origine du mot
« algèbre » par abréviation du titre de son ouvrage écrit à Bagdad vers 1825 : « Kitab al
jabr w’al-mugabala » (règles de restitution et de réduction) bien que sa seule contribution
à l’algèbre ait été d’appeler l’inconnue « shaı̈ », d’où dérive notre x actuel.
Jusqu’en 1950, le mot « algorithme »était surtout associé à l’algorithme d’Euclide➠.

161
8 – calculabilité, décidabilité

✒ nota bene : L’algorithme d’Euclide (que l’on retrouve dans son ouvrage « Éléments »
dans le livre VII, propositions I et II) permet de calculer le pgcd de deux entiers
m et n.
➊ diviser m par n ; soit r le reste (0 ≤ r < n)
➋ si r = 0, fin : le pgcd de m et n est n
➌ sinon m ← n, n ← r, retourner en ➊.

Un algorithme est un ensemble fini de règles, d’instructions définissant une suite


d’opérations et possédant les propriétés suivantes :
➊ fini : un algorithme doit toujours se terminer au bout d’un nombre fini d’étapes
➋ défini : chaque étape de l’algorithme doit être définie de façon précise. On les définit
souvent à l’aide d’un langage de programmation
➌ un algorithme agit sur des données d’entrée en vue de fournir des résultats à la sortie
➍ effectif : les opérations devant être exécutées dans l’algorithme doivent être réalisables
dans le temps et dans l’espace

8.1.2 Problèmes et algorithmes


Différents types de problèmes sont tels que leur résolution amène la définition d’un
algorithme :
– des problèmes de jeux : échecs (une position permet-elle à coup sûr de gagner), dames
(même problème), scrabble (comment maximiser le gain en point au vu du tirage de
lettres courant), jeu de Nim➥, etc.
– des problèmes de graphes : recherche de chemins eulériens1 ou hamiltoniens2 dans
un graphe (problème dit des « ponts de Kœnigsberg », problème du voyageur de
commerce), problème de coloration de graphe, etc.
– des problèmes mathématiques : problèmes arithmétiques (recherche de pgcd, déterminer
si un nombre est premier, etc.), problèmes numériques (résolution d’équations, calcul
intégral, calcul matriciel, etc.), problèmes algébriques (racines rationnelles d’équation,
« grand » théorème de Fermat➠, etc.), etc.
– etc.

➽ exercice 134 : Donner un algorithme permettant de rechercher les solutions


rationnelles de l’équation :

an xn + an−1 xn−1 + · · · + a1 x + a0 = 0

1 Un graphe est eulérien lorsqu’il est possible de parcourir avec un crayon toutes ses arêtes sans lever le

crayon et sans jamais passer deux fois sur la même arête. Un tel parcours forme alors un chemin eulérien.
On pourra aussi consulter la mini-biographie de Leonhard Euler➠.
2 Un chemin est hamiltonien s’il permet de passer une et une seule fois par chacun des sommets d’un

graphe.

162
langages et problèmes

8.1.3 Problèmes sur les langages


Quelques problèmes classiques peuvent être définis sur les langages. Nous nous intéresserons
ici plus particulièrement aux langages réguliers.

Test du langage vide


À première vue, la question de savoir si un langage L est vide ou non est évidente :
si L = ∅, le langage est vide sinon il ne l’est pas. Mais, la question ne se pose pas dans
ces termes car L n’est pas décrit par la liste explicite des mots le composant. On dispose
uniquement d’une représentation de L. On peut être ainsi, par exemple, en présence d’un
automate ou d’une expression régulière.
➊ si L est représenté par un automate, la question de savoir si L est vide revient à
savoir s’il est possible d’atteindre un état quelconque d’acceptation à partir de l’état
de départ. Si c’est le cas, L est non vide, sinon L l’est. Ainsi, le problème se ramène
tout simplement à un problème d’accessibilité dans un graphe (une simple procédure
de marquage peut alors être utilisée). Il existe pour cela un algorithme de complexité
temporelle polynômiale (de l’ordre du nombre d’arcs dans le graphe de transition).
➋ si L est représenté par une expression régulière R, on peut convertir cette expres-
sion sous la forme d’un ǫ-AFN tel que nous l’avons vu au chapitre 7 et appliquer
la procédure ci-dessus. On peut aussi analyser l’expression elle-même et noter que si
l’expression ne possède aucune occurrence de ∅ alors le langage associé ne peut être
vide. Dans le cas contraire, il faut regarder plus en détail en notant que :
➀ ∅ représente le langage vide alors que ǫ et a non
➁ si R = R1 + R2 , L(R) est vide si et seulement si L(R1 ) et L(R2 ) sont vides
➂ si R = R1 R2 , L(R) est vide si et seulement si L(R1 ) ou L(R2 ) est vide
➃ si R = R⋆ , L(R) ne peut être vide (il contient au moins ǫ)
➄ si R = (R1 ), L(R) est vide si et seulement si L(R1 ) est vide (c’est le même
langage).

➽ exercice 135 : Quelle est la complexité de l’algorithme permettant de savoir si


une expression régulière représente le langage vide lorsqu’on utilise la trans-
formation de l’expression en un ǫ-AFN ?

Test de l’appartenance au langage


Un autre problème intéressant consiste, étant donné un mot w et un langage régulier
L, à savoir si w est dans L. On considère que w est représenté explicitement et L, par un
automate ou une expression régulière.

163
8 – calculabilité, décidabilité

– si L est représenté à l’aide d’un automate fini déterministe, l’algorithme est très simple
puisqu’il suffit de simuler l’automate sur w et de regarder tout simplement si en
partant de l’état de départ, on atteint un état d’acceptation. Avec une représentation
idoine de la table de transition, l’algorithme possède alors une complexité temporelle
polynômiale de l’ordre de |w|.
– si L est représenté par un autre type d’automate (ou par une expression régulière), il
suffit de se ramener un automate fini déterministe équivalent (c’est toujours possible,
on l’a vu au chapitre 7).

✒ nota bene : Si L est représenté par un automate fini non déterministe, il


est souvent plus intéressant de simuler ce dernier. En effet, la complexité de
l’algorithme est alors de l’ordre de ns2 si n = |w| et s est le nombre d’états
de l’automate.

➽ exercice 136 : Donner un algorithme permettant de savoir si un langage L est


infini (on pourra utiliser pour cela le théorème 29 page 139).

Les notions de problèmes et de langages sont intrinsèquement liées. En effet, on peut


voir un langage comme un simple ensemble de mots. Mais en réalité, on peut donner du
« sens » à ces mots (en considérant qu’ils codent des graphes, des expressions logiques, des
entiers, etc.) et alors les mots du langage peuvent devenir des solutions à un problème. Être
capable d’identifier un mot d’un langage ou de représenter l’ensemble des mots d’un langage
revient alors à résoudre un problème3 (savoir si un mot codant une instance du problème est
dans le langage du problème) ou trouver l’ensemble de ses solutions (le langage du problème
lui-même).

8.1.4 Les limites des ordinateurs


Nous allons maintenant essayer de caractériser les problèmes (les langages) qu’un or-
dinateur peut résoudre (reconnaı̂tre/décrire). Pour cela, nous allons montrer de manière
informelle qu’un ordinateur ne peut pas résoudre tous les problèmes.
Considérons un programme Java dont le code « utile » est représenté sur la figure 8.1.
Un tel programme, de manière évidente, affiche coucou et se termine.
Il existe d’autres programmes qui affichent coucou, mais il peut être nettement moins
évident de s’en rendre compte et encore moins de le montrer. Un tel programme est
représenté figure 8.2
On ne sait que depuis très récemment [Singh, 1999] que ce programme n’affiche jamais
coucou dès que le paramètre d’entrée est supérieur strictement à 2. En effet, on peut remar-
quer que ce programme affiche coucou si on peut trouver un entier n tel qu’il existe trois
entiers quelconques x, y et z tels que xn + y n = z n . Pour n = 2, ce problème a une solution
3 On entend ici par problème, une question à réponse oui/non.

164
langages et problèmes

public static void main(String[] args) {


System.out.print("coucou");
}

Fig. 8.1 — Un programme Java qui fait coucou

public static void main(String[] args) {


int total, x, y, z;
int n = args[0]; total = 3;
while (true) {
for (x = 1; x <= total-2; x++)
for (y = 1; y <= total - x - 1; y++) {
z = total - x - y;
if (Math.pow(x,n) + Math.pow(y,n) == Math.pow(z,n))
System.out.print("coucou");
}
total++;
}
}

Fig. 8.2 — Le dernier théorème de Fermat sous forme de coucou-programme

mais aucune dès que n ≥ 3 il n’en n’a plus (c’est ce qu’on appelle le dernier théorème de
Fermat).
On définit maintenant le « problème du coucou » ainsi : étant donné un programme Java,
est-ce que les 6 premiers caractères affichés par ce programme forment la chaı̂ne coucou.

✒ nota bene : On ne demande pas à ce que le programme s’arrête. Notons aussi


que par la suite on dira qu’un programme affiche coucou lorsqu’on voudra
dire plus précisément que les 6 premiers caractères qu’il affiche forment la
chaı̂ne coucou.

Comme il a fallu près de 300 ans à des mathématiciens pour dire si le programme de la
figure 8.2 qui ne fait qu’une dizaine de lignes affichait ou non coucou, on peut raisonnable-
ment penser que de dire si un programme donné, pour une entrée donnée, affiche coucou
est un problème difficile. Résoudre ce problème (le problème du coucou) à l’aide d’un ordi-
nateur, revient à écrire un programme qui, étant donné un programme P et une entrée I
dit si P exécuté sur l’entrée I affiche coucou. Nous allons montrer qu’un tel programme ne
peut pas exister.
Supposons qu’un tel programme (appelons-le H) existe. H prend donc deux entrées :
un programme P et son entrée I. Sa sortie est une chaı̂ne unique qui est oui si P affiche
coucou sur l’entrée I et non sinon. Il donne quoi qu’il arrive l’un ou l’autre résultat, il ne

165
8 – calculabilité, décidabilité

peut pas ne jamais rien afficher ni afficher autre chose.

✒ nota bene : Un problème qui peut être résolu par un algorithme tel que H
qui dit toujours correctement si une instance donnée du problème a pour
réponse « oui » ou « non » est dit « décidable ». Sinon, le problème est dit
« indécidable ».

Nous allons montrer que le problème du coucou est indécidable. Pour cela, nous allons
faire quelques modifications très simples sur H. Tout d’abord, nous faisons la supposition
(non restrictive) suivante : toute les sorties de H sont réalisées sous forme de caractères
et la seule instruction d’affichage utilisée est System.out.print. La première modification
consiste à modifier la sortie non. L’idée est de remplacer dans H (qui est censé exister) toutes
les instructions System.out.print qui affichent4 non par System.out.print("coucou").
Ainsi, le nouveau programme que l’on nomme H1 affichera coucou à chaque fois que H
afficherait non.
La seconde modification consiste à restreindre H1 à :
➊ ne prendre qu’une unique entrée (P ) et non pas P et I
➋ faire en sorte que P soit son entrée (son I) pour lui-même
Pour cela, il suffit de modifier H1 (donnant alors le programme H2 ) de la façon suivante :
➊ H2 lit l’entrée P en entier et la stocke dans un tableau A créé en mémoire pour
l’occasion
➋ H2 simule H1 mais à chaque fois qu’H1 lirait une partie de l’entrée P ou I (originelles),
H2 lit dans la copie stockée dans A. Pour savoir où H1 est rendu dans P et I, il suffit
de maintenir dans H2 deux marqueurs de position dans A.

✒ nota bene : À partir de H, la construction de H2 est directe.

Que se passe-t-il maintenant si H2 est fourni comme entrée au programme H2 . Si H2 le


programme exécuté affiche oui c’est que H2 (le programme entrée P ) sur la donnée H2 (le
I de précédemment) affiche coucou comme 6 premiers caractères. Or, on vient justement
de supposer que dans ce cas-là, H2 (le programme exécuté) affichait oui. Ainsi, la sortie ne
peut pas être oui mais plutôt coucou. Mais, alors si c’est le cas, le premier affichage de H2
(le programme exécuté) doit être oui. En d’autres termes, quelque soit la sortie que l’on
considère, on peut montrer que la vraie sortie doit être l’autre. Il y a donc une contradiction.
H2 ne peut donc exister, H1 ne peut donc exister et donc H ne peut donc exister.
Il n’existe donc pas de programme capable de dire si un programme P donné sur une
entrée I donné affiche coucou. Aucun ordinateur ne peut donc résoudre ce problème. Un
tel problème est dit « indécidable » (nous en verrons une définition plus formelle dans la
section 8.3.2).
4 Le non pourrait être affiché en plusieurs instructions séparées, à ce moment-là on peut se concentrer

uniquement sur le n.

166
machines de turing

✒ nota bene : On peut montrer facilement d’une autre façon l’existence d’un
problème indécidable. En effet, on se souvient qu’un « problème » quelconque
peut se ramener au problème de l’appartenance d’un mot à un langage.
Or, l’ensemble des langages différents sur un alphabet quelconques n’est pas
dénombrable (on l’a déja vu dans le chapitre 5 page 110). Mais, l’ensemble
des programmes (qui sont des chaı̂nes finis sur un sous-ensemble de l’alphabet
ASCII) est lui dénombrable. Il y a donc considérablement moins de programme
que de langages. En prenant un langage au hasard, il est quasiment certain
qu’il correspond à un problème indécidable. Bien évidemment, ce qui nous
intéresse en réalité n’est sûrement pas les langages aléatoires.

Le problème du coucou est particulièrement intéressant. En effet, il peut servir de base


pour montrer que d’autres problèmes sont indécidables. Soit P1 un problème indécidable
et P2 un problème dont on souhaite montrer la non-décidabilité. Considérons qu’il existe
un programme D qui devant une instance quelconque de P2 est capable de dire si cette
instance est dans le « langage » de P2 ou non. S’il existe une construction (un algorithme)
qui transforme une instance quelconque de P1 en une instance de P2 qui a la même réponse,
alors P2 est nécessairement indécidable (c.-à-d. D n’existe pas). En effet, si ce n’était pas
le cas, alors P1 ne serait pas indécidable (il suffirait de transformer chaque instance en une
instance de P2 et d’utiliser D).

➽ exercice 137 : Montrer que le problème de savoir si un programme quelconque


appelle la méthode foo est indécidable.

➽ exercice 138 : Montrer que de savoir si un programme s’arrête (c.-à-d. ne boucle


pas indéfiniment) est indécidable.

Notre démonstration ici est purement informelle, nous allons maintenant introduire un
outil formel très puissant qui va nous permettre de préciser la notion de décidabilité et
au-delà de calculabilité.

8.2 Machines de Turing


La théorie des problèmes indécidables n’a pas pour unique but de montrer que de tels
problèmes existent mais plutôt de tracer les limites de ce que peut faire un ordinateur. Nous
verrons, dans le chapitre 9, que cette théorie a un impact plus large car nous verrons qu’il
existe des problèmes, qui bien que solubles à l’aide d’un ordinateur, peuvent prendre un
temps exponentiel pour leur résolution.

167
8 – calculabilité, décidabilité

unité de contrôle

$ X1 X2 Xi Xn $ $

Fig. 8.3 — Une machine de Turing

Au tout début du xxe siècle, David Hilbert➠ s’est posé la question de trouver un algo-
rithme permettant donner la valeur de vérité d’une proposition mathématique quelconque.
Il s’est plus particulièrement intéressé au calcul des prédicats (l’objet de notre chapitre 3).
Comme le calcul des prédicats est suffisamment expressif pour énoncer une affirmation du
type : « ce programme affiche coucou », nous savons maintenant qu’un tel algorithme ne
peut exister.
En 1931, Kurt Gödel➠ a publié son fameux théorème d’incomplétude. Il a construit une
formule du calcul des prédicats concernant les entiers, qui affirme que la formulle elle-même
ne peut pas être prouvée ni infirmée dans le calcul des prédicats. Sa technique ressemble
beaucoup au programme contradictoire H2 qui a été introduit précédemment.
Le calcul des prédicats n’est pas la seule façon de décrire ce qui est « calculable à l’aide
d’un ordinateur ». D’autres notations ont été proposées. Alan Turing➠ a proposé en 1936
la notion de machine de Turing comme un modèle de tout ce qui est calculable. Ce modèle,
comme nous allons le voir, est plutôt orienté « simulation d’un ordinateur » plutôt que
« simulation d’un programme ». Ce qui est fascinant c’est qu’à l’époque où Turing propose
son modèle, aucun ordinateur n’existe encore.

✒ nota bene : On peut montrer que tous les modèles sérieux proposés jusqu’à
présent pour représenter ce qui est calculable à l’aide d’un ordinateur ont le
même pouvoir d’expression : ils calculent les mêmes fonctions ou reconnaissent
les mêmes langages. L’hypothèse (que l’on ne peut prouver) du fait que quelle
que soit la façon dont on calcule, on ne pourra pas calculer autre chose que
ce dont sont capables les ordinateurs actuels (et les machines de Turing) est
appelée la thèse de Turing➠-Church➠.

8.2.1 Définition
Une machine de Turing peut être représentée comme sur la figure 8.3. Une telle machine
est constituée d’une « unité de contrôle » qui peut se trouver dans un nombre fini d’états
distincts. Cette unité de contrôle manipule un « ruban » divisée en « cellules ». Chaque
cellule contient un (et un seul) symbole quelconque provenant d’un ensemble fini. Dans son

168
machines de turing

état initial, l’« entrée » de la machine est un mot constitué d’un nombre fini de symboles
provenant d’un « vocabulaire d’entrée ». Cette entrée est placée sur le ruban. Toutes les
autres cellules (infiniment vers la droite et infiniment vers la gauche) contiennent un symbole
spécial (noté ici $). Ce symbole ne peut être un élément du vocabulaire d’entrée, il fait partie
du « vocabulaire de calcul » (et ne peut apparaı̂tre qu’accolé à une suite infinie de $).
L’unité de contrôle possède une « tête de lecture » qui est toujours positionnée sur une
cellule du ruban. On dit alors que la machine « lit » la cellule. Au départ, la tête de lecture est
sur la cellule la plus à gauche contenant un symbole du mot d’entrée. Un « mouvement » de
la machine de Turing est une fonction de l’état courant de l’unité de contrôle et du symbole
lu par la tête de lecture. En un mouvement, la machine de Turing va :
➊ changer d’état (l’état suivant peut être le même que l’état courant)
➋ écrire un symbole de calcul sur la cellule lue (ce symbole – pas nécessairement nouveau
– remplace ce qui était sur le ruban)
➌ se déplacer5 d’une cellule vers la droite ou la gauche
Formellement, on peut décrire une machine de Turing M à l’aide d’un 6-uplet.

M = (E, W, V, τ, e0 , F )

– E est un ensemble fini d’états


– W est un ensemble fini de symboles d’entrée
– V est un vocabulaire fini (on a toujours W ⊂ V ), le vocabulaire de calcul
– τ est une fonction de transition définie de E × (V ∪ {$}) dans E × (V ∪ {$}) × {G, D}
qui précise le fonctionnement de la machine (il s’agit de son « programme »). G signifie
que la machine se déplace vers la gauche et D, vers la droite.
– e0 est l’état initial de l’unité de contrôle (c’est un élément de E)
– F est un ensemble d’états d’acceptation (un sous-ensemble de E)

☞ exemple : Considérons la machine de Turing suivante :


– E = {e0 , e1 , e2 , e3 , e4 , e5 }
– e0 état initial
– F = {e5 } l’ensemble des états terminaux
– W = {0, 1} le vocabulaire d’entrée
– V = {0, 1, X, Y } le vocabulaire de calcul
On peut représenter τ , la fonction de transition, à l’aide du tableau 8.1.

✒ nota bene : La fonction τ n’est pas nécessairement définie pour toutes les
combinaisons possibles (dans ces cas-là la machine s’arrête). Par contre, à
situation donnée, le comportement de la machine est unique. La machine est
déterministe. Plus complètement, les machines de Turing définies ici sont des
machines de Turing déterministe à un ruban.
5 Dans cette définition, la tête de lecture doit se déplacer. Cette restriction apparente ne limite en

rien ce que la machine peut calculer car une machine acceptant des mouvements dont le déplacement est
stationnaire peut facilement être simulée par une machine avec déplacement effectif obligatoire.

169
8 – calculabilité, décidabilité

τ 0 1 X Y $
e0 (e1 , X, D)
e1 (e1 , 0, D) (e2 , Y, G) (e1 , Y, D)
e2 (e4 , 0, G) (e3 , X, D) (e2 , Y, G)
e3 (e3 , Y, D) (e5 , Y, D)
e4 (e4 , 0, G) (e0 , X, D)

Tab. 8.1 — Table de transition (programme) d’une machine de Turing

8.2.2 Description instantanée


Pour décrire formellement le fonctionnement d’une machine de Turing, on introduit
une notation spécifique pour les configurations rencontrées par la machine. On appelle cela
une description instantanée. En principe, une machine de Turing possède un ruban de
longueur infinie. Mais, on peut constater qu’après un nombre fini quelconque d’étapes seule
une partie finie du ruban ne contient pas le symbole $ et, plus précisément encore, cette
partie finie est contiguë et entourée de deux portions infinie de ruban contenant le symbole
$. Ainsi, on utilisera la notation suivante pour représenter la configuration courante d’une
machine de Turing (on se contente de reporter la partie utile) :

X1 X2 · · · Xi−1 eXi Xi+1 · · · Xn

où :
– e est l’état courant de la machine de Turing
– la tête de lecture lit actuellement le symbole en position i en partant de la gauche du
mot
– X1 X2 · · · Xn est la portion de la chaı̂ne entre le non-$ le plus à gauche et celui le plus
à droite (la seule exception est lorsque la tête de lecture est à gauche ou à droite de
ces deux extrémités – i vaut alors 1 ou n)

☞ exemple : Les différentes descriptions instantanées rencontrées pour la machine


de l’exemple précédent lorsqu’elle traite le mot 000111 sont alors :
e0 000111 XXe1 0Y11 XXXYe1 Y1 XXXYYYe3
Xe1 00111 XX0e1 Y11 XXXYYe1 1 XXXYYYYe5
X0e1 0111 XX0Ye1 11 XXXYe2 YY
X00e1 111 XX0e2 YY1 XXXe2 YYY
X0e2 0Y11 XXe2 0YY1 XXe2 XYYY
Xe2 00Y11 Xe4 X0YY1 XXXe3 YYY
e4 X00Y11 XXe0 0YY1 XXXYe3 YY
Xe0 00Y11 XXXe1 YY1 XXXYYe3 Y

170
machines de turing

✒ nota bene : On notera parfois X1 X2 · · · Xi−1 eXi Xi+1 · · · Xn , ainsi : (e, X1 · · · Xn , i).

On décrit les mouvements réalisés par une machine de Turing M = (E, W, V, τ, eO , F ) à


l’aide d’une relation binaire notée : ⊢ définie de la façon suivante :
➊ Supposons τ (q, Xi ) = (p, Y, G). On a alors :

X1 X2 · · · Xi−1 qXi Xi+1 · · · Xn ⊢ X1 X2 · · · Xi−2 pXi−1 Y Xi+1 · · · Xn

À cela, deux exceptions :


➀ Si i = 1, alors M se déplace vers le symbole $ sur la gauche de X1 . On obtient :

qX1 · · · Xn ⊢ p$Y X2 · · · Xn

➁ Si i = n et Y = $, alors le symbole $ écrit à la place de Xn rejoint la partie


infinie du ruban non représentée :

X1 · · · Xn−1 qXn ⊢ X1 · · · Xn−2 pXn−1

➋ Supposons τ (q, Xi ) = (p, Y, D). On a alors :

X1 X2 · · · Xi−1 qXi Xi+1 · · · Xn ⊢ X1 X2 · · · Xi−1 Y pXi+1 · · · Xn

À cela, deux exceptions :


➀ Si i = n, alors M la cellule i + 1 contient un $. On obtient :

X1 · · · xn−1 qXn ⊢ p$Y X2 · · · Xn−1 Y p$

➁ Si i = 1 et Y = $, alors le symbole $ écrit à la place de X1 rejoint la partie infinie


du ruban non représentée :

qX1 · · · Xn ⊢ pX2 · · · Xn

On notera ⊢⋆ la fermeture transitive et réflexive de la relation ⊢.

➽ exercice 139 : Quels sont les mouvements observés par la machine de Turing
de l’exemple précédent sur les mots :
➊ 01
➋ 0101
➌ 0011
➍ 00011

171
8 – calculabilité, décidabilité

0/0G

X/XD
e0 e4
Y/YD
0/XD 0/0G

1/YG X/XD $/YD


e1 e2 e3 e5

0/0D, Y/YD Y/YG

Fig. 8.4 — Diagramme de transition pour une machine de Turing

On peut enfin représenter une machine de Turing à l’aide d’un diagramme similaire à
ceux présentés pour représenter les automates finis. Ce diagramme de transition consiste en
un ensemble de nœuds représentants les états de la machine de Turing. Un arc d’un état q
vers un état p est étiqueté par une ou plusieurs étiquettes de la forme : X/Y Z où X et Y
sont des éléments du vocabulaire de calcul (y compris $ pour X) et Z une direction (G ou
D). Un tel arc représente le fait que τ (p, X) = (q, Y, Z). Comme pour les automates finis,
un état d’acceptation est doublement cerclé et un état de départ est marqué une d’un arc
entrant sans prédécesseur.

☞ exemple : La figure 8.4 représente la machine de Turing de l’exemple précédent


dont la table de transition est donnée sur la table 8.1.

8.2.3 Langage accepté par une machine de Turing


Le langage L(M ) accepté par une machine de Turing M est par définition l’ensemble
des mots sur W pour lesquels M atteint un état terminal après avoir commencé sont calcul
dans l’état initial e0 et en regardant le symbole le plus à gauche. Formellement, on a :

L(M ) = {x ∈ W ⋆ |∃f ∈ F, ∃y ∈ V ⋆ , ∃i ∈]|y| + 1], (e0 , x, 1) ⊢⋆ (f, y, i)}

172
machines de turing

τ 1 0
e0 (e1 , 0, D)
e1 (e1 , 1, D) (e2 , 1, D)
e2 (e2 , 1, D) (e3 , 0, G)
e3 (e4 , 0, D) (e3 , 0, G)
e4 (e5 , 0, D)

Tab. 8.2 — Table de transition pour une additionneuse

➽ exercice 140 : Quels sont les mots acceptés par la machine de Turing dans
l’exercice précédent ? Quel est le rôle de chacun des états de la machine de
Turing ?

Il y a une autre définition d’acceptation qui existe pour les machines de Turing : l’ac-
ceptation par arrêt. On dit qu’une machine de Turing s’arrête lorsqu’elle se trouve dans
un état e devant un symbole X pour lequel aucun mouvement n’est défini (c.-à-d. τ (e, X)
n’est pas défini).

➽ exercice 141 : Quels sont les mots de l’exercice 139 pour lesquels la machine
de Turing s’arrête ?

On peut toujours s’arranger pour qu’une machine de Turing s’arrête lorsqu’elle accepte
(au sens originel) un mot. Par contre, on ne peut pas toujours s’assurer qu’une machine
s’arrête lorsqu’elle n’accepte pas. Nous le verrons dans la section 8.3.2.

8.2.4 Machines de Turing et calcul de fonctions


Considérons une machine M = ({e0 , e1 , e2 , e3 , e4 , e5 }, {0, 1}, {0, 1}, τ, e0 , {e5 }) dont la
fonction de transition est donnée table 8.2.
On constate immédiatement que M confronté à une entrée de type 01n 01m 0 acceptera le
mot et rendra un ruban sur lequel on pourra lire : 01m+n 00. M est une additionneuse. Plus
généralement, certaines machines codent des fonctions dont les arguments sont placés sur le
ruban d’entrée (séparés par un marquant, ici 0). Par exemple, si on considère une machine
M codant une fonction fM , on peut coder (avec le marquant #) une entrée x = (x1 , . . . , xn )
par x1 #x2 # · · · #xn−1 #xn . Si la machine s’arrête dans un état terminal, le mot y étant sur
le ruban on dit que fM (x) = y.

☞ exemple : La figure 8.5 représente le diagramme de transition d’une multiplieuse.


Plus exactement, cette machine de Turing démarre avec un mot du type

173
8 – calculabilité, décidabilité

$/$D
e0 e9

0/BD copie 0/0G

1/1D 0/0G 1/1G


e6 e1 e5 e7 e8

$/$D
0/0D
e12 e11 e10
1/$D 1/$D

0/$D

Fig. 8.5 — Une machine de Turing pour réaliser une multiplication

0m 10n sur le ruban et termine avec un mot 0mn à la place. Pour cela, on
utilise un sous-programme de copie (représenté figure 8.6) qui transforme une
description instantanée de type 0m−k 1e1 0n 10(k−1)n en : 0m−k 1e5 0n 10kn .

➽ exercice 142 : Décrire en quelques mots la stratégie générale de la multiplieuse.

8.2.5 Machines de Turing et ordinateurs modernes


On peut montrer que les machines de Turing n’ont rien à envier aux ordinateurs mo-
dernes. En effet, un ordinateur peut aisément simuler une machine de Turing. De même,
une machine de Turing peut faire tout ce que fait un ordinateur. Même, elle peut le faire
en un nombre de mouvements qui est au plus un polynôme du nombre d’étapes nécessaire
à l’ordinateur.

Simulation d’une machine de Turing par un ordinateur moderne


La nature finie de la description du contrôle d’une machine de Turing (sa table transi-
tion) rend immédiate l’écriture d’un programme la simulant. La seule question importante
concerne la notion de ruban infini. La mémoire d’un ordinateur ne l’est ordinairement pas.
En fait, l’idée consiste simplement à remplacer à la demande les unités de stockage de l’or-

174
machines de turing

0/0D, 1/1D 1/1G, 0/0G

0/XD $/0G
e1 e2 e3

1/1G X/XD
1/1D
e4 e5

X/0G

Fig. 8.6 — Un sous-programme de copie pour la multiplieuse de la figure 8.5

dinateur simulant la machine de Turing. En effet, la partie de ruban non uniformément


remplie de $ est, rappelons-le, finie et contiguë. De plus, la machine de Turing ne lit qu’une
seule cellule à la fois. Il est donc toujours possible, en jonglant avec des unités de stockage
amovibles, de simuler le ruban infini.

Simulation d’un ordinateur moderne à l’aide d’une machine de Turing


Nous considérons ici que le fonctionnement d’un ordinateur est tel que :
➊ le stockage se fait sur une séquence indéfiniment longue (voir section précédente) de
mots ayant chacun une adresse ;
➋ le programme de l’ordinateur est stocké dans une portion de l’espace de stockage (la
mémoire) ;
➌ chaque instruction met en jeu un nombre limité (fini) de mots et chaque instruction
modifie la valeur d’au plus un mot ;
➍ un ordinateur possède des registres qui sont des mots de la mémoire dont l’accès est
rapide.
Pour simuler un ordinateur à l’aide d’une machine de Turing, il est plus aisé d’utiliser
des extensions6 des machines de Turing :
➊ machines de Turing multi-pistes : le ruban de lecture/écriture présente différentes
pistes permettant à l’unité de contrôle de lire et d’écrire simultanément plusieurs
symboles
➋ machines de Turing multi-rubans : la machine possèdent plusieurs rubans infinis
différents. L’unité de lecture lit simultanément plusieurs cellules (une sur chaque ru-
6 Aucune de ces extensions ne permet de ne faire ni plus ni moins que ce que fait une machine de Turing.

175
8 – calculabilité, décidabilité

ban). Les entrées sont introduites sur le premier ruban, toutes les autres sont vides.
Les déplacements peuvent être stationnaires.
➌ machines de Turing non déterministes : la fonction de transition sur un état et un sym-
bole donnée peut renvoyer plusieurs mouvements simultanément (de manière similaire
aux automates non déterministes).

✒ nota bene : Il y a équivalence (en termes de langages acceptés) entre ces


différentes machines et une machine de Turing conventionnelle (déterministe
à un ruban et une piste). La seule différence tient au temps d’exécution (le
nombre d’opérations – mouvements – effectuées). On peut montrer que le
temps d’exécution d’une machine de Turing conventionnelle pour simuler n
mouvements d’une machine de Turing à k rubans est de l’ordre de n2 . Par
contre, une machine de Turing déterministe peut nécessiter un temps exponen-
tiellement plus grand qu’une machine de Turing non déterministe équivalente
pour effectuer une opération. Nous y reviendrons dans le prochain chapitre. En
particulier, nous rappellerons que personne n’est en mesure de dire, à l’heure
actuelle, si ce surcoût est obligatoire ou non.

On peut, en utilisant une machine multi-rubans, simuler aisément un ordinateur. En


effet, on peut considérer une machine à 5 rubans :
➊ un ruban pour stocker la mémoire de l’ordinateur simulé
➋ un ruban pour stocker un compteur d’instruction (qui indique le lieu dans la mémoire
où consulter la prochaine instruction à exécuter)
➌ un ruban pour stocker une adresse mémoire (c.-à-d. une adresse dans la mémoire ou
son contenu)
➍ un ruban pour stocker un fichier d’entrée pour le programme
➎ un ruban à tout faire
Nous n’irons pas plus loin dans la démonstration dans le cadre de ce cours. On peut
trouver plus de détails dans [Hopcroft et al., 2001]. On peut finalement montrer qu’une
machine de Turing à 5 rubans utilisée pour simuler le fonctionnement d’un ordinateur
demande un nombre d’opérations de l’ordre de n3 pour simuler n opérations sur l’ordinateur.

✒ nota bene : Pour cela, il est nécessaire de supposer (ce qui n’est pas tellement
restrictif) que l’ordinateur simulé :
➀ ne contient que des instructions qui augmente au plus de 1 la longueur
maximale d’un mot ;
➁ ne contient que des instructions qu’une machine de Turing multi-rubans
pourrait réaliser sur des mots de longueur k en un temps de l’ordre de
k2 opérations.

176
machine de turing et langages

8.3 Machine de Turing et langages


La notion de machine de Turing nous permet d’introduire plus formellement les notions
de procédures et algorithmes.
➊ on appellera procédure toute machine de Turing ;
➋ on appellera algorithme toute machine de Turing qui s’arrête au bout d’un nombre
fini d’étapes quel que soit le mot d’entrée.

8.3.1 Calculabilité : langages récursivement énumérables


Un langage est dit récursivement énumérable si et seulement si il existe une machine
de Turing qui l’accepte.

✒ nota bene : On dit que le problème associé est calculable.

Théorème 37 – non démontré


Si L est engendré par une grammaire de Chomsky de type 0, alors L est
récursivement énumérable et réciproquement.

Nous allons montrer qu’il existe au moins un langage sur {0, 1} qui n’est pas récursivement
énumérable. Pour cela, nous allons avoir besoin de montrer que les machines de Turing
peuvent codées de manière unique par un mot.

Encodage des machines de Turing


Il faut commencer par montrer que cela possible. Pour cela, il suffit de montrer que
l’ensemble des grammaires de type 0 est dénombrable. Pour cela, nous proposons un codage
des grammaires de type 0 qui permet de montrer que l’ensemble de ces codages est un
langage de type 3 (donc dénombrable). Nous avons déjà vu (au chapitre 5 section 5.2.1
page 107) comment numéroter les mots de (0+1)⋆ en les classant comme dans un dictionnaire
de mots croisés. Le numéro d’ordre d’un mot w est alors 2|w| + wdec où wdec désigne la
représentation décimale du nombre codé par w en binaire. On notera par la suite wi le mot
numéro i sur (0 + 1)⋆ .

☞ exemple : w37 = 00101

Nous allons numéroter toutes les grammaires de type 0 ayant pour vocabulaire terminal
{0, 1} (ceci est clairement non restrictif). Soit G = (VN , {0, 1}, S, R) avec
– VN = {A1 , A2 , . . . , An }

177
8 – calculabilité, décidabilité

– S = A1
– V = VN ∪ {0, 1}
– R = {ri |i ∈]p]} où ∀i ∈]p], γ(ri ) ∈ VN+ ∧ δ(ri ) ∈ V ⋆
On choisit alors le codage suivant :
– chaque Ai est codé par : 01i+2
– 0 est codé par 01 et 1 par 011
– le symbole de dérivation est codé par 00 et le séparateur de règles par 001
En ce qui concerne les règles, on a (en se souvenant que G est de type 0) :
– le codage de la partie gauche est toujours un élément de L1 = {01i+2 |i ∈]n]}+
– le codage de la partie droite est toujours un élément de L2 = {01i |i ∈]n + 2]}⋆
Ainsi, le codage d’une règle est toujours un élément de L3 = L1 (00)L2 . G étant complètement
caractérisée par sa suite de règles r1 , . . . , rp , le codage de la grammaire G est un élément
de L = (L3 (001))⋆ L3 .
L est une expression régulière, L est donc de type 3. L est dénombrable. L’ensemble des
grammaires de type 0 est donc dénombrable.

✒ nota bene : On peut associer un entier à chaque grammaire (on prend la


traduction décimale du nombre binaire codant la grammaire). On peut aussi
associer une grammaire à chaque entier. On conviendra lorsque l’entier traité
ne correspond pas un codage correct de grammaire de prendre une grammaire
sans règle de production (c.-à-d. dont le langage est ∅).

➽ exercice 143 : Donner la grammaire dont le code est

011100014 015 001014 00015 013 001014 00011001015 00013 014 001015 0001

✒ nota bene : On peut montrer de la même façon que les grammaires de


type 1 codées de la même manière donne un langage de type 2 (lui aussi
dénombrable).

On peut donc associer à toute machine de Turing un codage qui nous permettra de
numéroter ces machines. On peut montrer que tout langage sur {0, 1} qui peut être ac-
cepté par une machine de Turing peut l’être par une machine de Turing dont le voca-
bulaire de calcul est {0, 1, $}. Nous allons donc coder ce type de machine. Soit M =
(E, {0, 1}, {0, 1}, τ, q1 , $, F ) une machine de Turing. On note les symboles 0, 1 et $ res-
pectivement X1 , X2 et X3 . De même, on notera la direction G, D1 et la direction D, D2 .
Un mouvement τ (ei , Xj ) = (ek , Xℓ , Dm ) sera alors codé :

0i 10j 10k 10ℓ 10m

178
machine de turing et langages

Le nombre de mouvements possibles pour une machine donnée étant fini, on peut
numéroter ces mouvements. On notera mi le code correspondant au mouvement numéro i.
Une machine de Turing étant complètement déterminée par les mouvements la définissant,
on peut coder une machine de Turing présentant r mouvements de la façon suivante :

111m1 11m2 11 · · · 11mr 111

➽ exercice 144 : Soit M = ({q1 , q2 , q3 }, {0, 1}, {0, 1}, τ, q1 , {q2 }) où τ est constituée
des règles :
– τ (q1 , 1) = (q3 , 0, D)
– τ (q3 , 0) = (q1 , 1, D)
– τ (q3 , 1) = (q2 , 0, D)
– τ (q3 , $) = (q3 , 1, G)
Quel est le code de M ?

On note Mi la machine de Turing de numéro i. Il s’agit de la machine dont le codage


correspond au mot wi sur {0, 1}

✒ nota bene : De nombreux entiers ne fournissent pas un code correct de machine


de Turing. Dans ce cas, nous considérerons que la machine correspondante
est une machine sans mouvement c.-à-d. une machine dont le langage est ∅.

Un langage non récursivement énumérable

Théorème 38
Le langage Ld = {wi |wi 6∈ L(Mi )} n’est pas récursivement énumérable.

Supposons qu’il existe une machine de Turing M telle que L(M ) = Ld . Comme Ld
est un langage sur {0, 1}, M fait partie de la liste des machines Turing que l’on vient de
construire. Il existe donc i tel que : M = Mi . On peut maintenant considérer wi .
➊ Si wi ∈ Ld , alors Mi accepte wi . Or, par définition de Ld , wi ne peut alors être dans
Ld = L(Mi )
➋ Si wi 6∈ Ld , alors Mi n’accepte pas wi mais alors wi devrait être dans Ld = L(Mi )
On constate donc une contradiction, M ne peut alors pas exister. Ld n’est donc pas
récursivement énumérable.

179
8 – calculabilité, décidabilité

✒ nota bene : Un langage non récursivement énumérable correspond à un problème


qui est dit non calculable

8.3.2 Décidabilité : langages récursifs


Un langage L est dit récursif si L = L(M ) pour une machine de Turing M telle que :
➊ si un mot w est un élément de L alors M l’accepte (et s’arrête)
➋ si un mot w n’est pas un élément de L alors M s’arrête (mais ne rentre pas dans un
état d’acceptation)

✒ nota bene : Un langage récursif est récursivement énumérable

Une telle machine de Turing correspond à notre notion d’algorithme.

✒ nota bene : Si on considère le problème associé à un langage, on dira que le


problème est décidable si le langage est récursif et non décidable sinon

Cette notion de décidabilité est importante car il est souvent plus important de déterminer
l’existence ou non d’un algorithme pour résoudre un problème donné (savoir si le langage
associé est récursif) que de savoir qu’il existe ou non une procédure (sans garantie de ter-
minaison – langage récursivement énumérable). En effet, le fait que la machine de Turing
puisse ne pas s’arrêter ne nous permet pas de savoir quand répondre non. Il y a donc trois
catégories de problèmes :
– les problèmes décidables – langages récursifs
– les problèmes non décidables mais calculables – langages récursivement énumérables
mais non récursifs
– les problèmes non calculables – langages non récursivement énumérables
Nous allons montrer dans cette partie qu’il existe au moins un problème dans la deuxième
catégorie.

Comportement face à la complémentation

Théorème 39
Le complémentaire d’un langage récursif est récursif

180
machine de turing et langages

Soit L = L(M ) un langage récursif (M est donc une machine de Turing qui s’arrête
toujours). On construit M̄ telle que L̄ = L(M̄ ). M̄ se comporte comme M mais les modifi-
cations suivantes sont apportées à M :
➊ les états d’acceptation de M deviennent des états de non acceptation dans M̄ c.-à-d.
dans ces états, M̄ s’arrête mais n’accepte pas
➋ M̄ possède un nouvel état d’acceptation r (aucun mouvement ne peut être effectué
depuis cet état)
➌ pour toutes les combinaisons (état de M , symbole pour M ) telles qu’aucune transition
ne soit possible (c.-à-d. que M s’arrête sans accepter), ajouter une transition vers l’état
d’acceptation r
Comme M s’arrête toujours, la machine M̄ ainsi construite le fait aussi. De plus, M̄
accepte exactement les mots que M n’accepte pas. Ainsi, M̄ accepte L̄.

Théorème 40
Si un langage L et son complément sont tous les deux récursivement
énumérables, alors L est nécessairement récursif (et L̄ aussi)

Soit L = L(M1 ) et L̄ = L(M2 ). Considérons M une machine de Turing à deux rubans qui
simule simultanément M1 et M2 (un ruban pour chaque machine et des états combinaison
des états de M1 et M2 ). Sur une entrée w ∈ L, M1 accepte, M accepte aussi et s’arrête.
Pour w 6∈ L, M2 accepte, M s’arrête alors mais n’accepte pas. Ainsi, sur toute entrée M
s’arrête et L(M ) = L. Ainsi, on a montré que L était récursif.

✒ nota bene : Ld est un langage qui n’est pas récursivement énumérable. L¯d ne
peut donc pas être récursif. Par contre, L¯d peut être soit non récursivement
énumérable soit récursivement énumérable mais non récursif. En fait, L¯d se
trouve dans cette dernière situation, nous allons le montrer par la suite.

Langages récursifs et grammaires de type 1


On peut montrer les deux résultats suivants sur les liens entre langages récursifs et
grammaires de type 1.

Théorème 41 – non démontré


Si G est une grammaire de type 1 alors L(G) est récursif

181
8 – calculabilité, décidabilité

Théorème 42
Il existe au moins un langage récursif qui n’est pas de type 1

En reprenant la numérotation des grammaires de type 0 (voir section 8.3.1, on peut


montrer que les grammaires de type 1 sont codées par L′ = (L′3 (001))⋆ L′3 où L′3 = {x1 00x2 ∈
L3 |x1 ∈ L1 , x2 ∈ L2 , |µ0 (x1 )| ≤ |µ0 (x2 )|}. On peut donc, étant donné un mot sur {0, 1}
savoir s’il s’agit du code d’une grammaire de type 1. Cet ensemble est alors dénombrable7
et on peut numéroter les grammaires de type 1. On note Gi la grammaire de type 1 de
numéro i.
Considérons L = {wi |wi 6∈ Gi }.
➊ L est récursif, en effet : étant donné, wi , on peut calculer i puis Gi et comme Gi est
de type 1, on peut savoir si wi ∈ L(Gi ) (théorème 41)
➋ L n’est pas de type 1. En effet, s’il l’était, on aurait alors Gj la grammaire qui engendre
L (l’ensemble des grammaires de type 1 est dénombrable). Considérons alors wj :
➀ si wj ∈ L alors wj ∈ L(Gj ) et donc wj 6∈ L
➁ si wj 6∈ L alors wj 6∈ L(Gj ) et donc wj∈ L
Dans tous les cas, on obtient donc une contradiction, L ne peut donc pas être de type
1.

Un langage récursivement énumérable non récursif


Considérons un codage des machines de Turing et de leur entrée qui concatène tout
simplement le code de la machine au sens de la section 8.3.1 avec l’entrée considérée. On
notera alors (M, w) le code obtenu pour une machine M à laquelle on présente l’entrée w.

Théorème 43
Le langage Lu = {(M, w)|w ∈ L(M )} est récursivement énumérable mais
pas récursif.

Nous allons construire une machine de Turing U telle que Lu = L(U ). U étant une
machine dont le vocabulaire d’entrée est {0, 1}, il existe j tel que U = Mj (au sens du
codage de la section 8.3.1). Une manière simple de construire U est de construire une
machine de Turing multi-rubans. Un premier ruban permet de stocker l’entrée (le code la
machine M suivie de son entrée), un second ruban permet de stocker le ruban simulé de
M (en utilisant le même type de codage), un troisième ruban stocke l’état courant de M
(l’état qi est représenté à l’aide de i 0 consécutifs) et un quatrième et dernier ruban sert de
ruban à tout faire.
Le fonctionnement général de U permet de :
7 En effet, l’ensemble des grammaires de type 0 qui le contient, l’est

182
machine de turing et langages

➊ s’assurer que l’entrée considérée correspond bien au codage d’une machine de Turing.
Si ce n’est pas le cas, U s’arrête sans accepter. Comme nous avons considéré qu’un
codage incorrect représentait une machine de Turing sans transition et qui donc n’ac-
cepte aucune entrée, le fonctionnement est correct.
➋ initialiser le second ruban avec le codage de w
➌ placer 0 l’état de départ de M sur le troisième ruban et déplacer la tête de lecture
d’une cellule sur le second ruban pour atteindre la première cellule simulée.
➍ simuler une transition de M (rechercher la transition idoine, l’exécuter, etc.)
➎ si M ne présente pas de transition réalisable, M s’arrête dans la simulation et donc
U doit faire de même
➏ si M arrive dans un état d’acceptation alors U aussi
De cette façon U simule le fonctionnement de M sur w et U accepte la paire (M, w) si
et seulement si M accepte w. Ainsi, L(U ) = Lu . Lu est bien récursivement énumérable.
Nous allons montrer par l’absurde que Lu ne peut être récursif. Supposons qu’il le soit :
selon le théorème 39, L¯u est récursif. Mais, si on connaı̂t une machine de Turing M qui
accepte L¯u alors, on peut construire une machine de Turing M ′ qui accepte Ld :
➊ Soit w une entrée de M , M ′ transforme alors tout d’abord cette entrée en ww
➋ M ′ simule M sur cette nouvelle entrée. Si w = wi alors M ′ permet de savoir si Mi
accepte wi . Comme L(M ) = L¯u , M accepte si et seulement si Mi n’accepte pas wi
soit si et seulement si wi ∈ Ld .
Or ceci est impossible puisque nous avons montré que Ld n’est pas récursivement
énumérable. Lu n’est donc pas récursif.

✒ nota bene : U est appelée machine de Turing universelle et Lu le langage


universel.

Réductions
Soit deux problèmes (à réponse oui-non) P1 et P2 . On dit que P1 se réduit en P2 s’il
existe un algorithme permettant de transformer une instance de P1 en une instance de P2
ayant même réponse. Formellement un tel algorithme est une machine de Turing qui prend
en entrée une instance de P1 et qui s’arrête en ayant sur son ruban une instance de P2 .

✒ nota bene : L’équivalence déjà montrée entre ordinateurs et machines de Turing


nous permet de considérer aisément les deux approches

183
8 – calculabilité, décidabilité

Théorème 44
S’il existe une réduction de P1 vers P2 alors :
➊ si P1 est indécidable alors P2 l’est aussi
➋ si P1 correspond à un langage non récursivement énumérable alors P2
aussi

On démontre facilement ce théorème par l’absurde.

➽ exercice 145 : Démontrer le théorème 44.

✒ nota bene : Le théorème 44 montre bien l’intérêt des langages Lu et Ld . Lu


permet de montrer qu’un problème est indécidable (par réduction de Lu à
ce problème). Tandis que Ld permet de démontrer qu’un problème n’est pas
calculable (en réduisant Ld à ce problème).

Il existe une grande variété de problèmes indécidables :


– savoir si le langage accepté par une machine de Turing donnée est vide
– savoir si le langage accepté par une machine de Turing est fini
– savoir si le langage accepté par une machine de Turing est régulier
– savoir si le langage accepté par une machine de Turing est type 2
– savoir si une machine de Turing donnée s’arrête sur une entrée donnée
Mais, les problèmes indécidables ne se limitent pas à des propriétés sur les machines
de Turing. Nous allons conclure notre premier aperçu des notions de calculabilité et de
complexité en introduisant un problème fondamental pour la décidabilité : le problème de
correspondance de Post➠.

8.4 Un problème indécidable : le problème de correspondance de Post


Nous présentons ici un problème indécidable qui ne porte pas sur des propriétés de
machine de Turing. On peut considérer que ce problème est plus réel que les problèmes
rencontrés jusqu’à présent.

8.4.1 Le problème de correspondance de Post


Une instance du problème de correspondance de Post (PCP) est constituée de deux
listes de mots sur un vocabulaire fini V A = {w1 , w2 , . . . , wn } et B = {x1 , x2 , . . . , xn }. Une
solution est une séquence d’entiers i1 , i2 , . . . , im (m ≥ 1) telle que :
wi1 wi2 . . . wim = xi1 xi2 . . . xim

184
un problème indécidable : le problème de correspondance de post

Le PCP est alors :

Étant donnée une instance de PCP, cette instance possède-t-elle une solution ?

☞ exemple : Soit V = {0, 1}, A = {1, 10111, 10} et B = {111, 10, 0}. Cette
instance de PCP possède une solution. On pose m = 4, i1 = 2, i2 = 1,
i3 = 1 et i4 = 3. On a alors : w2 w1 w1 w3 = x2 x1 x1 x3 = 101111110. On
peut représenter cette solution par la liste : 2, 1, 1, 3.
Cette solution n’est pas unique. 2, 1, 1, 3, 2, 1, 1, 3 en est une autre.

➽ exercice 146 : Soit V = {0, 1}, A = {01, 001, 10} et B = {011, 10, 00}. Cette
instance de PCP possède-t-elle une solution ?

✒ nota bene : Il est nécessaire de représenter le problème PCP comme un langage


pour savoir s’il est décidable. Pour cela, on peut coder une instance donnée
comme nous avons codé les machines de Turing jusqu’à présent : codage des
éléments de l’alphabet, codage de l’instance elle-même en utilisant des 0, des
1 et un indicateur de séparation pour les listes.

8.4.2 Décidabilité de PCP

Théorème 45 – non démontré


PCP est un problème non décidable.

On peut le montrer en réduisant Lu vers le langage représentant PCP. On trouvera une


description complète de cette réduction (et donc une preuve du théorème) dans [Hopcroft
et al., 2001].
PCP est donc un problème particulièrement intéressant car c’est un problème réel non
décidable qui va donc pouvoir nous servir de base pour montrer l’indécidabilité d’autres
problèmes.

185
chapitre neuf

complexité

La vie, ce concept mystérieux, est ramenée à


la présence d’ADN. Il n’y a plus de frontière
entre matière animée et inanimée. Tout n’est
qu’une question de degré de complexité.

Albert Jacquard

Dans ce chapitre, nous nous intéressons maintenant aux langages récursifs (problèmes
décidables). Nous allons tout d’abord chercher à mesurer la capacité des algorithmes à
résoudre plus ou moins vite les problèmes auxquels ils sont confrontés. Nous nous intéresserons
donc à ce qu’on appelle la complexité des algorithmes. Ensuite, nous étudierons les problèmes
eux-mêmes afin d’être capable de déterminer si certains sont plus difficiles que d’autres.
Cette difficulté peut se mesurer à l’aide de la complexité du « meilleur » algorithme définissable
pour les résoudre. Nous serons alors capables de classifier les problèmes décidables en
différentes classes qui possèdent des propriétés particulières. Il s’agit alors de complexité
des problèmes.

9.1 Complexité des algorithmes


Lorsqu’on s’intéresse à la complexité des algorithmes, on cherche à répondre à deux
types de question :
➊ comment évaluer la performance d’un algorithme ?
➋ comment comparer les performances de divers algorithmes ?

9.1.1 Mesure de la performance d’un algorithme


Une machine de Turing (déterministe à un ruban) M est dite de complexité tem-
porelle T (n) si pour une entrée w de longueur n, M s’arrête au bout d’un nombre de
mouvements d’au plus T (n) (que la machine accepte ou non l’entrée – M est un algo-
rithme).

187
9 – complexité

➽ exercice 147 : Quelle est la complexité temporelle de l’additionneuse dont la


table de transition est donnée dans le tableau 8.2 (page 173) ?

Bien évidemment pour un algorithme résolvant un problème donné, la longueur n dépend


du codage que l’on choisit pour l’entrée. On peut montrer que le choix de ce codage n’est
finalement pas si important dès lors que les différents codages considérés sont équivalents à
un temps polynômial près.

☞ exemple : Un graphe quelconque G = (V, E) peut se coder à l’aide de différentes


structures :
– une matrice d’adjacence (la taille de la donnée sera alors de l’ordre de
|V |2 ) ;
– une liste d’adjacence (la taille sera alors de l’ordre de |V | × |E| ×
log(|V |)) ;
– une liste d’arêtes (de l’ordre de 2 × |E| × log(|V |))

✒ nota bene : certains codages n’ont pas cette propriété : par exemple, choisir
de coder un entier n en binaire donne une donnée de taille log2 n alors qu’un
codage unaire donne une taille n. Ils ne sont pas équivalents à un temps
polynômial près.

Un codage standard consiste, par exemple, à :


– représenter les entiers en décimal ;
– coder les sommets des graphes en décimal et leurs arêtes par un couple (i1 , i2 ) ;
– coder les expressions booléennes de n variables par des mots où les entiers de ]n]
représenteront les variables propositionnelles ;
– etc.
Une machine de Turing (déterministe à un ruban) M est dite de complexité spatiale
S(n) si pour une entrée w de longueur n, M s’arrête en ayant occupé un espace1 maximum
sur le ruban d’au plus T (n) cellules.

➽ exercice 148 : Quelle est la complexité spatiale de l’additionneuse dont la table


de transition est donnée dans le tableau 8.2 (page 173) ?

1 L’espace occupé sur le ruban correspond à la portion finie du ruban infini qui est représentée dans la

description instantanée.

188
complexité des algorithmes

Calculer exactement les complexités spatiales et temporelles peut s’avérer une tâche fas-
tidieuse. Pour éviter cet écueil, on utilise la notion de classe de complexité, notion introduite
dans [Knuth, 1997]. On définit ansi les classes de fonctions suivantes :
➊ O(f ) = {g|∃c∃n0 ∈ N, ∀n ≥ n0 , g(n) ≤ c × f (n)}
➋ o(f ) = {g|∀c∃n0 ∈ N, ∀n ≥ n0 , g(n) ≤ c × f (n)}
➌ Ω(f ) = {g|∃c∃n0 ∈ N, ∀n ≥ n0 , g(n) ≥ c × f (n)}
➍ Θ(f ) = Ω(f ) ∩ O(f )
Ainsi, on dira qu’une fonction g est de l’ordre de f si et seulement si g ∈ O(f ).

✒ nota bene : on utilise principalement en complexité des algorithmes et des


problèmes la notation O (on ne s’intéresse donc qu’aux bornes supérieures)

➽ exercice 149 : Montrer que g(n) = 3 + 6 + · · · + 3n ∈ O(n2 ).

✒ nota bene : on montre facilement que n ∈ O(n2 ). En pratique, on cherche des


bornes plus serrées c.-à-d. une classe telle que la fonction approchée soit aussi
dans Ω(f ).

Les complexités introduites jusqu’à présent sont des complexités « au pire ». Elles
évaluent le pire cas qui puisse se poser pour une entrée donnée. Il existe d’autre manières
d’évaluer la complexité : complexité « en moyenne » (ou « amortie »), etc. Celles-ci sont
souvent autrement plus ardues à calculer.

9.1.2 Complexité des différentes sortes de machines de Turing


Lorsque nous avons vu qu’une machine de Turing pouvait simuler un ordinateur moderne
(et vice-versa) au chapitre 8 section 8.2.5 page 175, nous avons introduit informellement
différents types de machines de Turing. Nous allons donc maintenant voir comment on
peut définir les notions de complexités spatiale et temporelle pour ces différents types de
machines.

Machine de Turing k-rubans


Une machine de Turing k-rubans est constituée de k rubans infinies. Chaque ruban est
divisé en cellules qui peuvent contenir chacune un symbole de calcul. La machine comprend,
d’autre part, une unité centrale (pouvant prendre un nombre fini d’états) à laquelle sont
associées k têtes de lecture-écriture.

189
9 – complexité

Suivant l’état de l’unité centrale et le symbole lu par chaque tête de lecture, la machine
peut effectuer certaines ou toutes les opérations suivantes :
– changer l’état de l’unité centrale ;
– écrire un nouveau symbole dans chacune (ou certaines ) des cellules situées sous les
têtes d’écriture ;
– déplacer certaines des têtes de lecture à gauche (G), à droite (D) ou les laisser « sta-
tionnaires » (S).
Formellement, une machine de Turing à k-rubans est un sextuplet :

M = (E, V, W, τ, e0 , ef )

où :
– E est un ensemble fini d’états ;
– W est le vocabulaire d’entrée ;
– V est le vocabulaire « global » de calcul utilisé ;
– e0 est l’état initial ;
– ef est l’état terminal ou final ;
– τ est une fonction partiellement définie de E × (V ∪ {$})k dans E × ((V ∪ {$}) ×
{G, D, S})k .
Une description instantanée pour une telle machine est un k-uplet (α1 , α2 , . . . , αk ) avec
αi = xey (où xy est le mot écrit sur le ruban i, e étant l’état de l’unité centrale).
Une machine k-rubans M = (E, V, W, τ, e0 , ef ) accepte le mot x1 x2 . . . xn si et seulement
s’il existe une description instantanée (α1 , α2 , . . . , αk ) avec une occurrence de ef dans chaque
αi telle que :

(e0 x1 x2 . . . xn , e0 , . . . , e0 ) ⊢⋆M (α1 , α2 , . . . , αk )

où ⊢⋆M désigne la fermeture réflexive et transitive de la relation ⊢M (⊢M est définie par :
D1 ⊢M D2 si seulement si D1 devient D2 après un unique mouvement de la machine).

☞ exemple : la machine de Turing à deux rubans dont la fonction de transition


➲ palin-,drom- est donnée dans le tableau 9.1 reconnaı̂t les palindromes sur {0, 1}.

➽ exercice 150 : Quelles sont les suites de descriptions instantanées de la machine


sur les entrées 010 et 001 ?

➽ exercice 151 : Quel est le principe de fonctionnement de cette machine ?

190
complexité des algorithmes

état symboles lus symboles écrits nouvel état commentaires


b1 b2 b1 b2
e0 0 $ 0,S X,D e1 si le mot d’entrée est non vide, on écrit
1 $ 1,S X,D e1 X sur ruban 2 et on déplace la tête vers
$ $ $,S $,S e5 la droite. Sinon on passe à e5
e1 0 $ 0,D 0,D e1 L’état e1 permet de recopier le mot sur
1 $ 1,D 1,D e1 la ruban 2. Lorsque le travail est terminé,
$ $ $,S $,G e2 on passe à l’état e2
e2 $ 0 $,S 0,G e2 On garde la tête 1 sur le $ à droite. On
$ 1 $,S 1,G e2 amène la tête 2 à droite du symbole X
$ X $,G X,D e3 dans l’état e3
e3 0 0 0,S 0,D e4 L’unité centrale alterne e3 et e4 . Dans
1 1 1,S 1,D e4 l’état e3 , on compare les symboles sur
e4 0 0 0,G 0,S e3 les 2 rubans, on déplace la tête 2 et on
0 1 0,G 1,S e3 passe à e4 . Dans l’état e4 , on passe à
1 0 1,G 0,S e3 e5 dans le cas où la tête 2 atteint le $.
1 1 1,G 1,S e3 Sinon, on déplace la tête 1 vers la
0 $ 0,S $,S e5 gauche et on passe en e3 .
1 $ 1,S $,S e5

Tab. 9.1 — Machine de Turing 2-rubans reconnaissant les palindromes

Théorème 46 – non démontré


La classe des langages acceptés par une machine de Turing multi-rubans
déterministe est la même que la classe des langages acceptés par une machine
de Turing déterministe à un ruban.

La définition de la complexité temporelle pour une telle machine ne change pas. Pour la
complexité spatiale, il suffit de prendre en compte les différents rubans pour calculer l’espace
maximum occupé (on détermine sur quel ruban se produit le pire cas et on considère ce pire
cas).

➽ exercice 152 : Quelles sont les complexités temporelle et spatiale de la machine


reconnaissant les palindrome du tableau 9.1 ?

191
9 – complexité

Théorème 47
Soit L un langage reconnu par une machine de Turing à k-rubans en un
temps T (n). L est alors reconnu par une machine de Turing avec un seul
ruban en un temps O(T (n)2 ).

En effet, chacun des rubans utilise au plus T (n) cellules (le nombre de mouvements
correspond au nombre de cellules parcourues). Il suffit alors de coder les contenus des
différents rubans sur le ruban unique de la machine de Turing déterministe classique. Chaque
mouvement nécessite alors le parcours et la mise à jour de cette simulation. Ceci se fait en
O(T (n)). La simulation des T (n) mouvements est donc réalisable en O(T (n)2 ).

Théorème 48 – non démontré


Soit L un langage reconnu par une machine de Turing avec k-rubans de
travail en un temps T (n). L est alors reconnu par une machine de Turing
avec deux rubans de travail en un temps O(T (n) log T (n)).

Nous avons vu au chapitre 8 section 8.2.5 page 175 que les machines de Turing multi-
rubans servaient à la simulation des ordinateurs modernes. Nous venons maintenant de
voir que nous pouvions calculer la complexité d’un algorithme en travaillant directement
sur le langage et qu’il n’était pas nécessaire de « redescendre » au niveau des machines
de Turing pour ce faire car le rapport entre les complexités au niveau « langage » et au
niveau « machine de Turing » n’est qu’un polynôme connu fonction de la taille de la donnée
d’entrée.

Machine de Turing non déterministe


Une machine de Turing non déterministe à k-rubans est une machine :

M = (E, V, W, τ, e0 , ef )
où : τ est une fonction de transition définie de E × (V ∪ {$})k dans P(E × ((V ∪ {$}) ×
{G, D, S})k ). Les notions de description instantanée et de langage engendré ne changent
pas.

☞ exemple : Le problème partition peut s’exprimer de la façon suivante. Étant


donné un ensemble fini A tel que chaque élément a ∈ A possède un « poids »
p(a) ∈ N, existe-t-il un sous-ensemble A′ ⊆ A tel que :
X X
p(a) = p(a)
a∈A′ a∈A\A′

La machine de Turing non déterministe à 3 rubans dont la fonction de


transition est donnée dans le tableau 9.2 permet de résoudre ce problème. Une

192
complexité des algorithmes

état symboles lus symbole écrit nouvel état


b1 b2 b3 b1 b2 b3
e0 1 $ $ 1,S b,D b,D e1
e1 1 $ $ 1,D $,S $,S e2
1,D $,S $,S e3
e2 0 $ $ 0,D 0,D $,S e2
1 $ $ 1,S $,S $,S e1
$ $ $ $,S $,G $,G e4
e3 0 $ $ 0,D $,S 0,D e3
1 $ $ 1,S $,S $,S e1
$ $ $ $,S $,G $,G e4
e4 $ 0 0 $,S 0,G 0,G e4
$ b b $,S b,S b,S e5

Tab. 9.2 — Une machine de Turing 3-rubans non déterministe pour résoudre le problème partition.

entrée est un mot de la forme 10i1 . . . 10ik codant les différents « poids » pour
chacun des éléments de A. On a :

M = ({e0 , e1 , e2 , e3 , e4 , e5 }, {0, 1, b}, {0, 1}, τ, e0 , e5 )

– L’état e0 permet de marquer la première case du ruban 1 et du ruban


2 à l’aide du symbole b.
– L’état e1 (qui introduit du non déterminisme) permet le choix entre
l’écriture du prochain bloc de 0 sur le ruban 2 ou sur le ruban 3.
– L’état e2 recopie un bloc de 0 rencontrés sur le ruban 1 sur le ruban 2
et revient en e1 dès qu’un 1 est rencontré. Si b est atteint sur le ruban
1, on passe en e4 .
– L’état e3 permet de recopier un bloc de 0 sur le ruban 3 plutôt.
– L’état e4 permet de comparer la longueur des mots sur les rubans 2 et
3.

➽ exercice 153 : Quelles sont les configurations instantanées atteignables par la


machine de l’exemple précédent sur l’entrée : 1010010 ?

Une machine de Turing non déterministe M est de complexité temporelle T (n) si


et seulement si pour tout mot d’entrée accepté de longueur n, il existe une suite d’au plus
T (n) mouvements conduisant à l’état d’acceptation.

➽ exercice 154 : Quelle est la complexité temporelle de la machine de Turing


résolvant le problème partition dont la fonction de transition est donnée
dans le tableau 9.2 ?

193
9 – complexité

Une machine non déterministe M est de complexité spatiale S(n) si et seulement si


pour tout mot d’entrée accepté de longueur n, il existe une suite de mouvements conduisant
à l’acceptation et n’utilisant pas plus de S(n) cellules différentes sur l’un quelconque des
rubans.

➽ exercice 155 : Quelle est la complexité spatiale de la machine de Turing résolvant


le problème partition dont la fonction de transition est donnée dans le
tableau 9.2 ?

Théorème 49
Si M est une machine de Turing non déterministe de complexité T (n), il
existe une constante c et une machine de Turing déterministe M ′ tels que
L(M ) = L(M ′ ) et que la complexité de M ′ soit O(cT (n) ).

On peut montrer ce théorème en construisant M ′ de telle sorte qu’elle simule M à l’aide


d’un algorithme d’énumération exhaustive des possibilités. Il existe une constante d telle
qu’il n’existe pas plus de d choix possibles dans une certaine configuration de la machine M .
Ainsi, une séquence d’au plus T (n) mouvements sur M peut être représentée par un mot
sur l’alphabet Σ = {0, 1, . . . , d − 1} de longueur au plus T (n) (exprimant les choix successifs
devant être faits à chaque mouvement). M ′ simule alors le fonctionnement de M sur une
entrée x de longueur n de la façon suivante :
– M ′ génère les mots sur Σ de longueur au plus T (n) dans l’ordre lexicographique (il
n’y en a pas plus de (d + 1)T (n) )
– Dès qu’un mot w est généré, M ′ simule la séquence σw de mouvements de M représentée
par w. Si σw conduit à une acceptation par M alors M ′ s’arrête et accepte. Sinon (que
la séquence ne soit pas valide ou que le mot ne soit pas accepté), M ′ réitère le processus
avec le mot suivant dans Σ⋆ .
M ′ peut simuler σw en un temps O(T (n)). Il faut un temps O(T (n)) pour générer un
mot w. Ainsi la simulation de M par M ′ nécessite un temps O(T (n)(d + 1)T (n) ) ce qui est
bien, pour une constante c, O(cT (n) ).

✒ nota bene : Toute la question est de savoir si cette simulation est aussi en
Ω(cT (n) ). À l’heure actuelle, nul ne le sait.

194
complexité des algorithmes

10 20 30 40 50 60
n 10−5 s 2 × 10−5 s 3 × 10−5 s 4 × 10−5 s 5 × 10−5 s 6 × 10−5 s
n2 10−4 s 4 × 10−4 s 9 × 10−4 s 1.6 × 10−3 s 2.5 × 10−3 s 3.6 × 10−3 s
n3 10−3 s 8 × 10−3 s 2.7 × 10−2 s 6.4 × 10−2 s 12.5 × 10−2 s 21.6 × 10−2 s
n5 1/10s 3.2s 24.3s 1.7mn 5.2mn 13mn
2n 10−3 s 1s 17.9mn 12.7j 35.7a 366si
3n 6 × 10−2 s 58mn 6.5a 3855si 2 × 108 si 1013 si

Tab. 9.3 — Évolution du temps nécessaire à l’exécution d’un algorithme de complexité donnée (en ligne) en
fonction de la taille de la donnée (en colonne). L’hypothèse de base est un temps d’exécution par opération
d’une µs (10−6 s).

9.1.3 Comment choisir un algorithme ?


Deux types d’algorithmes doivent être très largement différenciés : les algorithmes poly-
nomiaux d’une part et les algorithmes exponentiels d’autre part. En effet, ces deux classes
d’algorithmes ont des comportements très différents. Le tableau 9.3 montre l’évolution du
temps nécessaire pour exécuter des algorithmes de complexités différentes en fonction de la
taille de la donnée. On constate très vite que les algorithmes de complexité exponentielle
résistent très mal à un passage à l’échelle.
Une réponse à cet état de fait est souvent de dire qu’il n’est pas forcément nécessaire de
travailler sur les algorithmes car il suffit d’attendre que la puissance des ordinateurs aug-
mente (comme elle le fait très régulièrement depuis les débuts de l’informatique). Considérons
le tableau 9.4 qui reporte l’évolution de la taille d’un problème traitable en un temps fixé
en fonction de la puissance de l’ordinateur et de la complexité de l’algorithme. L’augmen-
tation de la puissance de l’ordinateur ne donne donc des résultats intéressants que pour des
algorithmes de faible complexité. Pour les algorithmes de complexité polynômiale élevée ou
exponentielle, il est plus profitable de changer l’algorithme que d’augmenter la vitesse de
l’ordinateur.

✒ nota bene : Ainsi, avec un algorithme de complexité 2n qui nécessite un temps


t pour résoudre un problème de taille 10, il faut un ordinateur 1000 fois plus
rapide pour résoudre dans le même temps un problème de taille 20. Si le
problème est de taille 100 et que l’on souhaite passer à une taille 200, il faut
alors un ordinateur 2100 fois plus rapide !

On peut se poser la question de savoir s’il existe des algorithmes dont la complexité se
situe entre une complexité polynômiale ou une complexité exponentielle. Ils existent bien
sûr. Lorsqu’on parle de complexité exponentielle, on cherche juste à montrer que le temps
d’exécution est plus grand que n’importe quel polynôme.

✒ nota bene : Un exemple de fonction entre les polynômes et les exponentielles


est nlog2 n . Une telle fonction croı̂t plus vite que n’importe quel polynôme

195
9 – complexité

ordinateur actuel 100 fois plus rapide 1000 fois plus rapide
n N1 100 × N1 1000 × N1
n2 N2 10 × N2 31.6 × N2
n3 N3 4.64 × N3 10 × N3
n5 N4 2.5 × N4 3.98 × N4
2n N5 N5 + 6.64 N5 + 9.97
3n N6 N6 + 4.19 N6 + 6.29

Tab. 9.4 — Évolution de la taille d’un problème traitable en un temps fixé en fonction de la puissance de
l’ordinateur (en colonne) et de la complexité de l’algorithme (en ligne)

en n (puisque log2 n pour n assez grand est plus grand que n’importe quelle
2
constante k). D’un autre côté, nlog2 n = 2(log2 n) . Cette fonction croı̂t donc
plus lentement que n’importe quelle fonction 2cn pour c > 0.

9.2 Complexité des problèmes : classes P et NP


Nous allons maintenant nous intéresser à la complexité des problèmes. La complexité
d’un problème peut se résumer à la complexité du meilleur algorithme existant pour le
résoudre. Cela nous donne en effet une mesure de la difficulté de ce problème.

9.2.1 Les classes P et N P


On note P l’ensemble des langages récursifs (resp. des problèmes) qui peuvent être re-
connus (resp. résolus) par une machine de Turing déterministe en un temps de complexité
polynomiale.

☞ exemple : Le problème de la reconnaissance d’un palindrome est dans P. En


effet, la machine de Turing déterministe dont la table de transition est décrite
dans le tableau 9.1 page 191 permet de le résoudre et est de complexité
temporelle polynomiale.

On note N P l’ensemble des langages récursifs qui peuvent être reconnus par une machine
de Turing non déterministe en un temps de complexité polynomiale.

☞ exemple : Le problème partition introduit section 9.1.2 page 192 est dans
N P puisque la machine de Turing non déterministe dont la table de transition
est décrite dans le tableau 9.2 permet de le résoudre et est de complexité
polynomiale.

196
complexité des problèmes : classes p et np

Proposition 12
Pour montrer qu’un problème est dans N P, il faut et il suffit d’être capable
de vérifier en temps polynômial avec un algorithme déterministe une réponse
« oui » (une solution au problème).

En effet, si une telle machine de Turing M existe, il suffit alors de définir une ma-
chine de Turing non déterministe M ′ générant de manière non déterministe de générer les
informations nécessaires pour donner une réponse positive (par exemple, une solution au
problème – c’est ce qu’on appelle un certificat) et de simuler M sur M ′ pour vérifier la
réponse. De manière similaire, si on possède une machine de Turing non déterministe M ′
pour reconnaı̂tre le langage associé au problème, il suffit pour un mot du langage donné
de sélectionner une séquence de mouvements permettant l’acceptation et de définir M en
fonction des mouvements effectifs de la machine (on connaı̂t en effet les « bonnes » décisions
à prendre).

Théorème 50

P ⊂ NP

En effet, une machine de Turing déterministe est une machine de Turing non déterministe
un peu particulière.

✒ nota bene : par contre, on ne sait toujours pas à l’heure actuelle si N P ⊂ P.


C’est d’ailleurs une des grandes questions de l’informatique.

9.2.2 Réduction polynomiale


Dans le chapitre 8, nous avons introduit la notion de réduction entre deux problèmes.
Dans la théorie de la complexité, il est important de caractériser cette réduction pour
pouvoir rester, à l’aide de ces réductions, dans les mêmes classes de complexité.
On dit ainsi qu’une réduction entre un problème P1 et un problème P2 est polynômiale
si la transformation d’une instance de P1 en une instance de P2 se fait en temps polynômial
en fonction de la taille de l’instance de P1 .

197
9 – complexité

Théorème 51
Soient P1 et P2 deux problèmes tels qu’il existe une réduction polynômiale
de P1 vers P2 . Si P1 n’est pas dans P alors P2 non plus.

➽ exercice 156 : Montrer le théorème 51.

Corollaire 1
Soient P1 et P2 deux problèmes tels qu’il existe une réduction polynômiale
de P1 vers P2 . Si P2 est dans P alors P1 aussi

➽ exercice 157 : Montrer le corollaire 1 du théorème 51.

9.2.3 C-complétude
Soit une classe de complexité C (comme P ou N P). On dit qu’un problème P est C-
complet si :
➊ P ∈C
➋ pour tout problème P ′ dans C, il existe une réduction polynômiale de P ′ vers P

✒ nota bene : Un problème C-complet est au moins aussi « dur » que n’importe
quel problème de C. D’ailleurs, lorsque la preuve qu’un problème est dans C
n’est pas encore faite, mais que l’item ➋ est vérifié, on dit qu’un tel problème
est C-dur (ou C-difficile).

Théorème 52
Si P1 est N P-complet et qu’il existe une réduction polynômiale entre P1 et
P2 alors P2 est lui aussi N P-complet.
198
complexité des problèmes : classes p et np

➽ exercice 158 : Démontrer le théorème 52

Théorème 53
S’il existe un problème N P-complet qui est dans P, alors P = N P.

➽ exercice 159 : Démontrer le théorème 53

Le problème sat (ou de satisfiabilité) est le problème de savoir si une expression donnée
du calcul propositionnel (expression booléenne représentée à l’aide des opérateurs ¬, ∧ et
∨) est satisfaisable.

☞ exemple : L’expression x∧¬(y∨z) est une instance du problème sat. La réponse


pour cette instance est « oui » puisque l’interprétation (, , ) pour (x, y, z)
permet de satisfaire la formule.

Théorème 54 (Cook, 1971) – non démontré


sat est N P-complet

L’idée générale est de transformer une instance d’un problème P de N P en une instance
de sat en considérant des variables propositionnelles décrivant les états et configurations
successives de la machine M résolvant P et en exprimant un certain nombre de relations
sur ces variables (la tête de la lecture regarde exactement une case par configuration, on
a un seul symbole par case, la machine est dans un seul état, au plus une case peut être
modifiée, etc.). Cette transformation est polynômiale.

199
9 – complexité

9.2.4 Autres problèmes NP-complets


[Garey et Johnson, 1979], dans leur ouvrage de référence sur les problèmes N P-complets
ont introduit six problèmes N P-complets de base à partir desquels les preuves de N P-
complétude sont généralement réalisées. Il s’agit des problèmes suivants :
➊ 3sat
instance : une collection C = {c1 , c2 , . . . , cn } de clauses sur un ensemble fini U de
variables propositionnelles telles que |ci | = 3.
question : existe-t-il une interprétation pour U qui satisfait simultanément les clauses
de C ?
➋ 3dm – couplage tri-dimensionnel – 3-dimensional matching
instance : un ensemble M ⊆ W × X × Y où W , X et Y sont des ensembles disjoints
ayant le même nombre q d’éléments.
question : est-ce que M contient un couplage maximal (c.-à-d. un sous-ensemble
M ′ ⊆ M tel que |M ′ | = q et deux éléments quelconques de M ′ diffèrent sur toutes
leurs coordonnées) ?
➌ vc – transversal – vertex cover
instance : un graphe G = (V, E) et un entier positif K ≤ |V |
question : existe-t-il un transversal de taille K ou moins pour G c.-à-d. un sous-
ensemble V ′ ⊆ V tel que |V ′ | ≤ K et, pour chaque arête {u, v} de E, au moins un
des deux u ou v est dans V ′ ?
➍ clique
instance : un graphe G = (V, E) et un entier positif J ≤ |V |
question : est-ce que G contient une clique de taille J ou plus, c.-à-d. un sous-
ensemble V ′ ⊆ V tel que |V ′ | ≥ J et tout couple de sommets de V ′ est relié par une
arête de E ?
➎ hc – circuit Hamiltonien – Hamiltonian circuit
instance : un graphe G = (V, E)
question : G contient-il un circuit Hamiltonien c.-à-d. un ordre v1 , v2 , . . . , vn sur les
sommets de G (n = |V |) tel que {vn , v1 } ∈ E et {vi , vi+1 } ∈ E pour tout i entre 1 et
n?
➏ partition
instance : un ensemble fini A et un « poids » w(a) ∈ N pour chaque a de A
question : existe-t-il un sous-ensemble A′ ⊆ A tel que :
X X
w(a) = w(a)
a∈A′ a∈A\A′

✒ nota bene : Le problème de couplage classique (en deux dimensions) est lui
dans P

➽ exercice 160 : Montrer que vc est N P-complet par réduction de 3sat vers vc.

200
autres classes de complexité

9.3 Autres classes de complexité


Parmi les langages récursifs, les classes P et N P sont loin d’être les seules à avoir été
étudiées. Le site http://www.complexityzoo.com/ en recensent par exemple 417 différentes.
Nous en présentons ici quelques unes parmi les plus importantes.

9.3.1 Compléments de problèmes NP

Théorème 55
P est clos par complémentation

En effet, lorsque nous avons montré le théorème 39 qui montrait que le complémentaire
d’un langage récursif était lui-même récursif, nous avons utilisé une machine de Turing
modifiée dont le comportement était le même que la machine de Turing initiale (seuls les
états d’acceptation étaient modifiés). Ceci montre indirectement le théorème 55.

✒ nota bene : par contre, on ne sait pas à l’heure actuelle si N P est clos par
complémentation.

On définit la classe co-N P comme étant l’ensemble des langages dont le complément est
dans N P.

☞ exemple : Le problème taut dont une instance est une formule booléenne et
dont la question est de savoir si cette formule est une tautologie est dans
co-N P.

✒ nota bene : une façon de prouver qu’un problème est dans co-N P consiste
à montrer qu’il est possible de vérifier une réponse « non » à l’aide d’un
algorithme déterministe de complexité temporelle polynômiale.

201
9 – complexité

NP co-N P

N P-c P co-N P-c

Fig. 9.1 — Positions relatives supposées des classes de complexité (de P à N P)

Théorème 56 – non démontré


N P =co-N P si et seulement si il existe un problème N P-complet dont le
complément est dans N P

✒ nota bene : jusqu’à l’heure actuelle, aucun tel problème n’a été identifié

La figure 9.1 représente les positions relatives supposées dans différentes classes vues
jusqu’à présent.

✒ nota bene : bien sûr, si P = N P alors ces différentes classes n’en font plus
qu’une

9.3.2 Problèmes solubles en espace polynomial


La classe PS est l’ensemble des langages récursifs qui peuvent être reconnus par une
machine de Turing déterministe de complexité spatiale polynomiale.

✒ nota bene : La classe PS est parfois notée pspace. L’intérêt de notre notation
est qu’elle permet d’être consistante avec les notations passées.

202
autres classes de complexité

La classe N PS est l’ensemble des langages récursifs qui peuvent être reconnus par une
machine de Turing non déterministe de complexité spatiale polynomiale.

Proposition 13

P ⊆ PS N P ⊆ N PS

Une machine de Turing ne pouvant visiter plus de cellules qu’elle ne fait de mouvements,
les inclusions ci-dessus sont naturelles.

Théorème 57 (Savitch) – non démontré

PS = N PS

Corollaire 1

P ⊆ NP ⊆ PS

Ce résultat est immédiat.

Théorème 58
Soit P un problème PS-complet :
➊ si P ∈ P alors P = PS
➋ si P ∈ N P alors N P = PS

➽ exercice 161 : Démontrer le théorème 58

203
9 – complexité

NP co-N P

N P-c P co-N P-c

PS = N PS
langages récursifs

Fig. 9.2 — Positions relatives supposées des classes de complexité (de P à PS)

Théorème 59 – non démontré


Le problème qbf (formule booléenne quantifiée – quantified boolean for-
mula) dont une instance est une formule du calcul propositionnel avec quan-
tificateurs et aucune variable libre et dont la question est de savoir si cette
formule est vraie est un problème PS-complet

La figure 9.2 présente les positions relatives des classes de complexité vues jusqu’à
présent.

✒ nota bene : Si P = N P, toutes ces classes n’en font plus qu’une

9.3.3 Les classes basées sur des algorithmes aléatoires


Nous nous intéressons maintenant aux classes de langages qui peuvent être reconnus
par une machine de Turing capable d’utiliser des nombres générés aléatoirement dans leur
calcul.

✒ nota bene : un exemple d’algorithme « aléatoire » est le célèbre algorithme de


tri QuickSort dont les versions efficaces choisissent aléatoirement le pivot
à la base du déroulement de l’algorithme.

204
autres classes de complexité

Un modèle randomisé de machine de Turing


Pour représenter des machines de Turing capables de faire des choix aléatoires, on peut
utiliser un modèle particulier de machine multi-rubans. Le premier ruban n’est plus la seule
à contenir des symboles non vide (l’entrée de la machine), un deuxième ruban aussi. Il
contient en fait une séquence de 0 et de 1 chacun choisi indépendamment l’un de l’autre
avec une égale probabilité de 12 .

✒ nota bene : le deuxième ruban n’a pas besoin d’être initialisé réellement avec
cette séquence aléatoire. On peut utiliser lorsqu’on en a besoin un algorithme
générant un tel nombre.

Langage accepté par une machine de Turing aléatoire


La notion de langage accepté est plus délicate à définir pour une machine de Turing
aléatoire. En effet, pour une entrée donnée la machine peut accepter ou ne pas accepter2
l’entrée suivant le contenu du ruban « aléatoire ».
Si on considère l’acceptation d’une machine de Turing aléatoire M comme l’entrée de
l’unité de contrôle dans un état final, comme pour une machine conventionnelle, une entrée
w sur la machine possède alors une probabilité d’acceptation3 .

Les classes RP et ZPP


Un langage L est dit dans la classe RP (random polynomial) si ce langage est accepté
par une machine aléatoire M selon les conventions suivantes :
➊ si w 6∈ L alors la probabilité que M accepte w est 0 (w est donc rejeté)
1
➋ si w ∈ L alors la probabilité que M accepte w est au moins 2
➌ il existe un polynôme T (n) tel que pour une entrée w de longueur n, M s’arrête (quel
que soit le contenu du ruban « aléatoire ») après au plus T (n) mouvements

✒ nota bene : Les conditions ➊ et ➋ décrivent ce qu’on appelle les algorithmes de


type « Monte Carlo ». Lorsqu’ils répondent « non », ils ne se trompent pas ;
lorsqu’ils répondent « oui » ils se trompent au plus une fois sur deux.

2 C’est d’ailleurs tout l’intérêt d’une telle machine si on veut être capable de faire des choses différentes

d’une machine conventionnelle.


3 Cette probabilité peut être assez délicate à calculer. Mais, n’importe quelle séquence de mouvements

ne peut observer qu’une portion finie du ruban aléatoire. Si on suppose que cette portion est de longueur
m alors la probabilité de chacune des différentes situations possibles est exactement 21m .

205
9 – complexité

☞ exemple : Soit p un entier, l’algorithme suivant est un algorithme de type


Monte-Carlo pour déterminer si p n’est pas premier.
➊ choisir aléatoirement x entier entre 1 et p − 1
➋ calculer xp−1 modulo p
➌ si xp−1 6= 1 modulo p répondre oui, sinon répondre non
Cet algorithme est basé sur le fait que si p est premier alors pour tout
entier x n’ayant pas de diviseur commun avec p, xp−1 = 1 modulo p (c’est le
« petit » théorème de Fermat). De plus, si p n’est pas premier et qu’il existe
au moins un x tel que xp−1 modulo p est différent de 1 alors au moins la
moitié des valeurs de x de 1 à p − 1 sont telles que : xp−1 6= 1 modulo p.
De plus, on peut montrer que l’opération ➋ peut se calculer en O(n3 ) si la
représentation binaire de p est de longueur n.

Pour un langage L donné, on appelle « faux négatif » un mot w qui est rejeté par M lors
d’une exécution particulière alors que w ∈ L ; on appelle « faux positif », un mot w accepté
par M alors que w 6∈ M .

✒ nota bene : Un algorithme de type Monte-Carlo ne peut avoir de faux positifs.

On ne peut bien sûr jamais ne pas avoir du tout de faux négatifs. Mais, du fait de la
condition ➋, on peut toujours (en répétant autant de fois que nécessaire l’exécution de M
sur w), faire en sorte que la probabilité que le mot w soit un faux négatif pour la machine
M soit aussi petite que souhaité.

➽ exercice 162 : Si on veut que la probabilité de faux négatif soit inférieure à 1


chance sur 1 milliard, combien de fois faut-il exécuter un algorithme de type
Monte-Carlo ?

On peut ainsi montrer facilement le résultat suivant :

Théorème 60
Si un langage L est dans RP, alors pour toute constante c > 0, il existe un
algorithme aléatoire de temps d’exécution polynômial qui donne une réponse
quelle que soit son entrée w (de L) sans donner un faux positif et sans que
la probabilité de donner un faux négatif soit supérieure à c.

206
autres classes de complexité

✒ nota bene : La constante 21 introduite dans la définition de RP pourrait


être remplacée par n’importe quelle constante. Par contre, cette constante
est ce qui permet de faire une distinction claire entre le non-déterminisme
et l’aléatoire. En effet, une machine de Turing non déterministe peut être
simulée par une machine de Turing aléatoire mais la condition d’acceptation
est différente : pour une machine non déterministe, il suffit que la probabilité
d’acceptation soit non nulle pour accepter alors qu’une machine aléatoire
telle que définie ici doit tenir compte de la constante précisée pour tracer la
frontière entre acceptation et rejet.

La classe ZPP (zero-error, probabilistic, polynomial) est basée sur les machines de Turing
aléatoires qui s’arrêtent quelle que soit leur entrée et qui ont un temps d’exécution attendu
avant l’arrêt qui est un polynôme de la taille de l’entrée. Cette machine de Turing accepte
lorsqu’elle entre dans un état d’acceptation et rejette si elle s’arrête avant d’être entrée dans
un tel état.

✒ nota bene : ZPP ressemble beaucoup à P excepté que les algorithmes sont
potentiellement aléatoires et que le temps de calcul pris en compte n’est pas
le temps au pire mais plutôt le temps de calcul escompté (l’espérance au sens
probabiliste du temps de calcul).

Une telle machine de Turing donne toujours la bonne réponse mais le temps d’exécution
peut varier de manière aléatoire.

✒ nota bene : Une telle machine de Turing est dite de type « Las-Vegas ».

Proposition 14
ZPP est clos par complémentation. RP peut ne pas l’être.

En effet, pour ZPP, il suffit de constater que s’il existe un algorithme de type Las-Vegas
pour reconnaı̂tre un langage de ZPP alors ce même algorithme pour lequel on inverse les
conditions d’acceptation et de rejet est aussi de type Las-Vegas et permet de reconnaı̂tre
L̄. Pour RP, il suffit de constater qu’un algorithme de type Monte-Carlo ne traite pas
symétriquement acceptation et rejet. On note co-RP l’ensemble des langages L tels que L̄
est dans RP.

207
9 – complexité

Théorème 61

ZPP = RP ∩ co−RP

➊ En effet, soit L ∈ RP ∩ co−RP. À l’aide des deux machines M ′ (resp. M ′′ ) de type


Monte-Carlo existant pour reconnaı̂tre L (resp. L̄) on peut définir une machine de
Turing M de type Las-Vegas de la façon suivante :
➀ faire tourner M ′ . Si elle accepte alors M accepte
➁ si non, faire tourner M ′′ . Si elle accepte alors M s’arrête sans accepter, sinon M
revient à l’étape ➀.
Clairement, M n’accepte w que si w ∈ L et ne rejette que si w 6∈ L. Si p(n) est un
polynôme assez grand pour borner le temps d’exécution de M et M ′ (ce polynôme
existe), alors le temps d’exécution attendu d’une séquence de la boucle est de 2 × p(n).
De plus, la probabilité pour qu’un tour de boucle suffise pour résoudre le problème est
de 21 . En effet, si w ∈ L alors l’étape ➀ à une chance sur deux d’accepter, et si w 6∈ L,
l’étape ➁ a une chance sur deux de rejeter. Ainsi, le temps d’exécution attendu de M
est alors :
1 1 1
2p(n) + 2p(n) + 2p(n) + 2p(n) + · · · = 4p(n)
2 4 8
L est donc bien dans ZPP
➋ Supposons un langage L dans ZPP. On sait alors qu’il existe une machine de Turing
de type Las-Vegas M1 qui a un temps d’exécution attendu polynomial p(n). Nous
construisons une machine de Turing de type Monte-Carlo M2 de la façon suivante.
M2 simule M1 pour 2 × p(n) mouvements. Si M1 accepte dans cet intervalle, M2
accepte sinon M2 rejette.
Supposons que l’entrée w de longueur n n’est pas dans L. Alors, de manière certaine,
M1 ne va pas accepter w et donc M2 non plus (même si le rejet par M1 n’intervient
qu’après les 2 × p(n) mouvements autorisés). Par contre, si w est dans L alors M1 ,
va bien sûr accepter w, mais pas forcément dans les 2 × p(n) mouvements. Montrons
que M1 accepte w en moins de 2 × p(n) mouvements avec une probabilité d’au moins
1 1
2 . Supposons pour cela que cette probabilité soit c < 2 alors le temps d’exécution
attendu de M1 sur l’entrée w est alors (1 − c) × 2 × p(n) puisque 1 − c est la probabilité
que M1 ait besoin de plus de 2 × p(n) mouvements. Mais, comme c < 21 le temps
d’exécution attendu de M1 est alors supérieur à p(n) ce qui est contradictoire avec
le fait que l’on a supposé ce temps borné par p(n). c ne peut donc être strictement
inférieur à 12 montrant par la même occasion que M2 est bien de type Monte-Carlo et
donc que L est dans RP.
➌ On montre de la même façon qu’un langage dans ZPP est nécessairement dans co-RP.

208
autres classes de complexité

ZPP
NP RP P co-RP co-N P

PS = N PS
langages récursifs

Fig. 9.3 — Positions relatives supposées des classes de complexité (de P à ZPP)

Proposition 15

P ⊆ ZPP

En effet, une machine de Turing déterministe de temps d’exécution polynomial est un


algorithme de type Las-Vegas de temps d’exécution polynômial (il se trouve qu’elle ne fait
aucun choix aléatoire)

Proposition 16

RP ⊆ NP

Ce résultat est dû à la différence entre non déterminisme et aléatoire que nous avons déjà
eu l’occasion de préciser plus haut. Il est donc aisé de définir une machine de Turing non
déterministe à partir d’une machine de Turing aléatoire de type Monte-Carlo pour montrer
le résultat.
La figure 9.3 présente le paysage des langages récursifs tels que nous l’avons vu dans ce
chapitre.

✒ nota bene : Encore une fois, si P = N P toutes ces classes se trouvent réduites
à une seule.

209
9 – complexité

☞ exemple : Soit le problème primes dont une instance est un entier p (codé par
un mot sur {0, 1} de longueur n = log2 p) et la question est de savoir si p est
premier (prime number en anglais). On a :
➊ primes ∈ N P (prouvé en 1975)
➋ primes ∈ co-N P
➌ primes ∈ co-RP (prouvé en 1976 – c’est l’algorithme présenté page 9.3.3)
➍ primes ∈ RP (prouvé en 1992 – prouvant donc que primes ∈ ZPP)

✒ nota bene : en 2002 (seulement !), Agrawal, Kayal et Saxena ont montré que
primes ∈ P. Ce n’était pas si évident que cela paraı̂t mais il faut bien voir

que l’algorithme qui consiste à réaliser les p divisions pour voir s’il existe un
n
diviseur de p est en Ω(2 2 ) (ce n’est donc clairement pas un polynôme en n).

9.4 Décidabilité et complexité en pratique


L’ensemble des concepts et problèmes abordés dans ce chapitre et le précédent ont un
intérêt pratique très direct. En effet, confronté à un problème, la lecture de ces documents
permet de ne pas se retrouver dans la situation de chercher, sans le trouver, un algorithme
efficace pour un problème indécidable (voire simplement N P-complet). [Garey et Johnson,
1979] illustre cette situation à l’aide de la saynète représentée figure 9.4.
À l’aide de ce document, on sait maintenant qu’on peut se retrouver dans deux situations
(excepté la précédente qui ne saurait arriver à un lecteur de ce cours) :
– le problème traité est indécidable. [Garey et Johnson, 1979] illustre cette situation à
l’aide de la saynète représentée figure 9.5.
– le problème traité est N P-complet (ou difficile). [Garey et Johnson, 1979] illustre cette
situation à l’aide de la saynète représentée figure 9.6.

✒ nota bene : tout ceci est valide tant que on n’a pas prouvé que P = N P ...

210
décidabilité et complexité en pratique

Fig. 9.4 — Je n’arrive pas à trouver un algorithme efficace, j’imagine que je ne suis pas assez doué pour
cela. Illustration tirée de [Garey et Johnson, 1979].

Fig. 9.5 — Je n’arrive pas à trouver un algorithme efficace, parce qu’un tel algorithme n’existe pas. Illus-
tration tirée de [Garey et Johnson, 1979].

211
9 – complexité

Fig. 9.6 — Je n’arrive pas à trouver un algorithme efficace, mais aucune de ces personnes très connues n’a
réussi non plus. Illustration tirée de [Garey et Johnson, 1979].

212
module trois

contexte

213
chapitre dix

indications biographiques

Aristote — Philosophe grec (Stagire, Macédoine, 384 – Chalcis, ı̂le d’Eubée, 322 av. J.-C.).
Son père est médecin du roi de Macédoine, Amyntas II. Aristote demeure vingt ans
à Athènes à l’académie de Platon, d’abord comme étudiant, puis comme disciple et
professeur. Il critique la théorie des idées développée par son maı̂tre mais, jusqu’à la
mort de celui-ci, en 347, il lui garde son amitié. Il quitte alors Athènes, puis devient
précepteur d’Alexandre à la cour de Philippe de Macédoine. Il revient à Athènes
pour fonder sa propre école philosophique, le Lycée, du nom d’un gymnase proche
dédié à Appolon Lycien. À la mort d’Alexandre, Athènes se soulevant contre les
Macédoniens, Aristote se réfugie à Chalcis où il meurt en 322. Le système de pensée
que constitue la philosophie d’Aristote eut une portée exceptionnelle car elle réalisait
une synthèse audacieuse des données culturelles de l’Antiquité, que les civilisations
islamique puis médiévale réactualisèrent. La logique d’Aristote est une logique des
termes, des classes ou des prédicats.

Backus, John Warner — Mathématicien et informaticien américain (né à Philadelphie


en 1924). À sa sortie de l’université Columbia, il entre, en 1950, chez IBM, où il
dirige l’équipe qui crée en 1954 le premier « langage évolué », fortran (FORmula-
tion TRANsposée). Auparavant, chaque modèle d’ordinateur devait être programmé
avec un langage spécifique, tandis que fortran est adapté à des centaines d’ordi-
nateurs différents, et il est de ce fait toujours utilisé, ce qui représente un progrès
considérable. John Backus participe ensuite à la conception du langage algol et,
à cette occasion, invente avec le danois Peter Naur➠ la BNF : Backus-Naur-Form.
algol est le premier langage établi sur une base formelle rigoureuse. L’ensemble des
travaux de John Backus constitue une contribution majeure au développement des
langages informatiques.

Boole, George — Mathématicien et logicien anglais (Lincoln, 1815 – Cork, Irlande, 1864).
Autodidacte, il reprend un problème posé par Gottfried Wilhelm Leibniz➠, celui de
la characteristica universalis, c’est-à-dire d’un « calcul » qui représenterait les raison-

215
10 – indications biographiques

nements logiques. Si les tentatives de Leibniz s’avèrent infructueuses, Boole apporte


la solution la plus achevée dans « L’Analyse mathématique de la logique » (1847) et
surtout dans « Une étude des lois de la pensée sur lesquelles sont fondées les théories
mathématiques de la logique et des probabilités » (1854). Ces travaux tiennent compte
d’une approche plus abstraite de l’algèbre qui cesse d’être exclusivement liée aux
nombres ; Boole propose un symbolisme algébrique pouvant simuler le raisonnement.
Se plaçant dans la lignée de la logique d’Aristote➠, il donne, entre autres, dans « Les
lois de la pensée », une application de son calcul à l’analyse d’un texte de Spinoza.
Mais, c’est surtout avec l’informatique qu’on a pris l’habitude d’utiliser les algèbres
de Boole.

Brouwer, Luitze Egbertus Jan — Mathématicien hollandais (Overschie, maintenant quar-


tier de Rotterdam, 27 février 1881 – Blaricum, 2 décembre 1966). Né d’un père
proviseur, il réalise des études secondaires très brillantes, et très rapides. À l’univer-
sité d’Amsterdam, il est formé par Korteweg, qui est connu pour des contributions en
mathématiques appliquées. Il soutient son doctorat le 16 juin 1904. De 1909 à 1913,
Brouwer s’intéresse à la topologie➲, et découvre la majeure partie des théorèmes
auxquels son nom est resté attaché, dont son fameux théorème du point fixe. Pour
beaucoup, Brouwer est le père de la topologie moderne. En 1912, il obtient grâce aux
recommandations de Hilbert➠ une chaire à l’Université d’Amsterdam. Il y enseigne
la théorie des ensembles, celle des fonctions, et l’axiomatique. Plus tard, il refusera
de rejoindre Hilbert à Göttingen. La Première Guerre mondiale, et sa santé fragile,
l’éloignent quelques temps des champs de la recherche scientifique. Quand il y re-
vient, c’est pour se consacrer à ses premières amours (sa thèse portait déjà sur ce
sujet) : les fondements des mathématiques.
➥ intuitio- Brouwer est le fer de lance avec Poincaré des mathématiques intuitionnistes,
nisme par opposition au logicisme de Russel➠ et Frege➠, et au formalisme de Hilbert. En
particulier, pour Brouwer, un théorème d’existence ne peut être vrai que si on peut
exhiber un processus, même formel, de construction. Cela le conduit notamment à
rejeter la loi du tiers exclu, qui dit qu’une propriété est ou vraie, ou fausse. Les preuves
ainsi obtenues sont souvent plus longues, mais Brouwer fut capable de réécrire des
traités de théorie des ensembles, de théorie de la mesure, et de théorie des fonctions
en se conformant aux règles de l’intuitionnisme.
Bizarrement, Brouwer n’enseigna jamais la topologie. C’est probablement que les
théorèmes que lui-même avait prouvés ne rentraient plus dans le cadre qu’il s’était
fixé. Selon les témoignages de quelques-uns de ses étudiants, il était un personnage
vraiment étrange, fou amoureux de sa philosophie, et un professeur auquel il ne fallait
surtout pas poser de questions !

Buridan, Jean — Philosophe scolastique➥ (Béthune, v. 1300 – id. apr. 1358). Recteur de
l’université de Paris en 1328 et 1340, commentateur et disciple d’Aristote➠, il doit
sa célébrité à la fable dite de l’âne de Buridan, qui, toutefois, ne figure pas dans
ses écrits : placé entre un seau d’eau et un boisseau de blé, un âne se laisse mourir
de faim et de soif, faute de pouvoir choisir entre les deux biens. Buridan aurait eu

216
recours à cette fable dans ses leçons afin de démontrer par l’absurde le caractère
nécessaire du choix, même lorsque les biens entre lesquels il convient de choisir sont
d’égale valeur.

Cantor, Georg — Mathématicien allemand (Saint-Pétersbourg 1845 – Halle 1918). Après


des études de mathématiques à Zurich et à Berlin, il s’oriente vers la théorie des
nombres, puis entame des recherches sur les séries de Fourier. C’est à propos de ces
recherches qu’il est amené à préciser certaines notions sur les propriétés topologiques
de la droite. Il définit ainsi une opération sur un segment de droite, que l’on désignera
sous le nom de « discontinu de Cantor », dont les propriétés étranges ont amené à
approfondir les notions de continuité et discontinuité. Ces travaux le conduisent à
s’éloigner, à partir de 1882, des conceptions mathématiques classiques.
Cantor s’interroge alors sur la possibilité de « mesurer » l’infini : deux collec-
tions infinies seront dites « égales », si l’on peut établir une correspondance terme à
terme (biunivoque) entre elles. À partir de cette définition, Cantor montre qu’il est
impossible de trouver une correspondance entre les nombres réels et les nombres en-
tiers : c’est le théorème de Cantor. Cela le conduit à définir des nombres➥ transfinis,
c’est-à-dire une suite de nombres infinis différents les uns des autres, dont il présente
l’exposé dans son dernier ouvrage Contributions à la fondation des nombres transfi-
nis (1897). Cette approche, qui heurte les convictions de bien des mathématiciens de
son époque, mettra du temps à s’imposer. Georg Cantor construit alors une théorie
qu’il considère comme la base logique des mathématiques : la théorie des ensembles.
Cette théorie s’avère plus difficile à préciser qu’il ne l’avait cru. Elle forme aujourd’hui
l’une des bases indiscutables de l’édifice mathématique. Les travaux et les luttes que
Cantor a été contraint de mener pour imposer ses idées ont eu raison de sa santé. Il
a fini ses jours dans l’asile psychiatrique de Halle, ville où il a enseigné pendant la
majeure partie de sa vie.

Chomsky, Noam — Linguiste américain (né à Philadelphie en 1928). En 1957, avec la


publication de « Structures syntaxiques », il fonde l’une des plus importantes écoles de
la linguistique moderne. Sa « Grammaire générative transformationnelle » se propose
de construire un modèle scientifique du fonctionnement syntaxique des langues. Ce
modèle postule une « structure profonde », où les élément s’agencent en un certain
nombre de relations simples, et dont on tire la « structure de surface » des énoncés
par des transformations formulées sous forme de règles. À partir de 1981, il réduit la
part des transformations et postule l’existence de catégories phonétiquement vides
mais qui jouent un rôle syntaxique essentiel.

Chrysippe — Philosophe grec (Soli, Asie mineure v. 281 – Athènes, v. 205 av. J.-C.).
Chrysippe s’est attaché à fixer et à organiser la doctrine stoı̈cienne, ce qui le fait ➥ stoı̈cisme
considérer comme le « second fondateur » de cette école après Zénon de Cition. Féru
de logique, il excelle dans la pratique de la dialectique➥ et enrichit également le
corpus stoı̈cien en matière de morale.

217
10 – indications biographiques

Church, Alonzo — Logicien américain (1903 – 1905). Un des plus grands logiciens du xx
e siècle. En 1932, il invente du λ-calcul➥. En 1936, il démontre l’arithmétique est

indécidable. C’est le premier à poser la conjecture sur l’équivalence entre program-


mation et fonctions récursives.

Cohen, Paul Joseph — Mathématicien américain né le 2 avril 1934 à Long Branch (New
Jersey). Il est surtout connu pour avoir démontré en 1963 que l’hypothèse du continu
était indépendante des axiomes de la théorie des ensembles de Zermelo➠-Fraenkel➠,
travaux qui lui ont valu la Médaille Fields en 1966. Il a utilisé pour cela une méthode
originale, le forcing.

Euclide — Mathématicien grec (autour de 300 avant J.-C.). Le nom d’Euclide désigne
finalement plus un livre, « Les Éléments », et un style de connaissance, l’exposé
➲ axiome axiomatique et déductif➲déduire, qu’un homme. Il est presque certain qu’Euclide
vécut à Alexandrie, en Égypte, sous le règne du roi Ptolémée Ier, autour de 300
avant Jésus-Christ. Il travailla sans doute au Musée, centre intellectuel de cette ville.
Il est plus vieux qu’Archimède et Eratotosthène, de quelques dizaines d’années. Mais
on ne connaı̂t presque rien de l’homme, si ce n’est quelques anecdotes peut-être
significatives, mais sujettes à caution. On raconte qu’à un de ses élèves débutants,
qui lui demandait ce qu’il allait gagner à apprendre cette matière ardue, il fit donner
par un de ses esclaves un pièce de monnaie, puisque, dit le maı̂tre, ce personnage
voulait tirer profit de qu’il apprenait, etc.
Certains historiens doutent même de ce qu’un homme appelé Euclide ait existé,
et voient dans ce nom une sorte de nom d’auteur collectif, derrière lequel se seraient
cachés plusieurs mathématiciens.
« Les Éléments » constituent une encyclopédie du savoir mathématique de la
civilisation grecque du temps. Mais plus que son contenu, c’est l’organisation de
l’ouvrage qui est remarquable. En effet, cette œuvre entreprend de déduire l’ensemble
des résultats mathématiques à partir d’un petit nombre d’entre eux, explicitement
admis. Tous les autres résultats n’apparaissent alors que comme des conséquences
des résultats premiers, à l’issue de raisonnements qui se veulent absolument précis et
rigoureux. La certitude des théorèmes semble découler alors implacablement de celle
des énoncés premiers, et cela sans recours à l’intuition ou à l’évidence sensible, mais
par le seul moyen de la démonstration mathématique.
Ce type de présentation, euclidien, est devenu le modèle même de l’exposé mathé-
matique, et à plus de deux millénaires de distance, le groupe Bourbaki de mathématiciens
français s’est réclamé d’Euclide pour composer au xxe siècle de nouveaux « Éléments
de mathématiques », sous une forme elle aussi encyclopédique et parfaitement déductive
(combien plus vaste et plus ardue, évidemment). Il est clair que les démonstrations
d’Euclide ne pouvaient atteindre à la rigueur parfaite, et qu’elles contiennent de
nombreuses approximations qui les invalident. Mais, tel qu’il est, l’œuvre et surtout
sa conception restent impressionnantes.

218
Comme le veut sa structure, les éléments commencent, dans le Livre I, par des
Définitions, des Demandes ou Postulats, des Notions communes. La fin du Livre I, et
les Livres II, III, IV, traitent de géométrie plane. Le Livre V instaure une rupture, et
traite des Proportions ; cette théorie des proportions est attribuée à Eudoxe. Au xx
e siècle, nous y voyons une théorie de l’ensemble R. Le Livre VI est une application
de la théorie des proportions à la géométrie (on y trouve par exemple le théorème
de Thalès).
Le Livre VII traite d’arithmétique, de ppcm, de pgdc, de nombres premiers, etc.
On y trouve décrit l’algorithme d’Euclide (voir page 162). Le Livre VIII traite des
nombres en suites géométriques, sous l’angle de la divisibilité, et des rapports entiers
ou rationnels. Le Livre IX concerne également l’arithmétique. Le Livre X étudie ce
que nous appellerions, en notre langage, la rationalité d’expressions où figurent des
racines carrées. C’est un des plus difficiles des « Éléments ». Les Livres XI, XII, et
XIII traitent de géométrie dans l’espace, le Livre XIII étudiant plus précisément les
polyèdres réguliers.
Outre les « Éléments », quelques autres ouvrages d’Euclide nous sont parvenus,
avec d’autres, dont il n’est pas l’auteur, mais qui lui étaient traditionnellement at-
tribués.

Euler, Leonhard — Mathématicien et physicien suisse (15 avril 1707 – 18 septembre 1783).
Né à Bâle le 15 avril 1707, Leonhard Euler étudia les mathématiques sur les conseils
de Jean Bernoulli, qui était ami avec son père. Il s’installa à Saint-Petersbourg,
auprès de Pierre le Grand, puis à Berlin sous le règne de Frédéric II, où a chaque fois
il rencontra un environnement scientifique exceptionnel. Son œuvre est considérable.
Euler intervint dans les trois domaines fondamentaux de la science de son époque :
l’astronomie (orbites planétaires, trajectoires des comètes), les sciences physiques
(champs magnétiques, hydrodynamique, optique, nature ondulatoire de la lumière,
etc.), les mathématiques, où il met au premier plan le concept de fonction. On lui
doit aussi la très jolie relation entre les nombres de sommets S, d’arêtes C et de faces
F d’un polyèdre convexe (F − C + S = 2).
La santé d’Euler était assez fragile. Il perdit son œil droit en 1735, puis son oeil
gauche en 1771 en raison d’une cataracte. Il fut donc pendant 12 ans totalement
aveugle. Cela obligeait ce mathématicien très prolixe, qui publia 886 ouvrages, le
tout en 80 volumes, à faire appel à des personnes de son entourage à qui il dictait
ses mémoires. Il décède le 18 septembre 1783 à Saint-Petersbourg d’une hémorragie
cérébrale.

Fermat, Pierre de — Mathématicien français (1601–1665). Pierre de Fermat était un génial


mathématicien français du xviie siècle, qui a contribué avec Descartes à la création
de la géométrie analytique (il est le premier à donner une méthode générale pour la
détermination des tangentes à une courbe plane), à celle du calcul infinitésimal (avec
Leibniz➠ et Newton), et à celle du calcul des probabilités (avec Pascal). C’est surtout
le fondateur de la théorie moderne des nombres, la branche des mathématiques qui
étudie les nombres entiers.

219
10 – indications biographiques

Né près de Toulouse (précisément à Beaumont de Lomagne) en 1601, d’un père


négociant en cuir, Fermat a toujours vécu bien loin des centres intellectuels européens.
Il n’était d’ailleurs pas mathématicien professionnel, mais magistrat (il fut aussi
conseiller au parlement de Toulouse à partir de 1631, puis membre de la chambre de
l’édit de Castres), et il ne participa à la vie mathématique de son époque que par sa
correspondance privée avec d’autres savants. Il est mort à Castres en 1665.
Fermat a été très influencé par la lecture des classiques de l’Antiquité, notamment
celle de Diophante, mathématicien grec auteur de l’Arithmetica, que les européens
ont redécouverte au milieu du xvie siècle. Fermat annotera abondamment la marge
de son exemplaire (son fils rééditera l’Arithmetica avec les notes de Fermat). Il y
était annoncé, plus rarement prouvé, de nombreux théorèmes. En 1840, tous étaient
démontrés ou invalidés. Tous sauf un : la conjecture appelée grand théorème de
Fermat, qui a maintenu les mathématiciens en haleine jusqu’en 1994.
En marge du problème qui consiste à trouver des carrés qui sont sommes de deux
autres carrés (on appelle cela chercher des triplets pythagoriciens, car il s’agit des
côtés d’un triangle rectangle – ex. : 52 = 32 + 42 ), Fermat écrivit : « D’autre part, un
cube n’est jamais somme de deux cubes, une puissance quatrième n’est jamais somme
de deux puissances quatrièmes, et plus généralement aucune puissance supérieure
stricte à 2 n’est somme de deux puissances analogues. J’ai trouvé une merveilleuse
démonstration de cette proposition, mais je ne peux l’écrire dans cette marge car
elle est trop longue ». On ne saura jamais si Fermat avait réellement une preuve de
son théorème, c’est peu probable, mais après tout qu’importe ! Des générations de
mathématiciens s’y sont cassés les dents, tout en y forgeant les outils modernes de
l’arithmétique.
On retrouva une démonstration de Fermat pour le cas des puissances 4-ièmes,
fondée sur l’ingénieuse méthode de la descente infinie. Il a fallu attendre 100 ans
pour que Leonhard Euler➠ fournisse une démonstration du cas n=3, avec une erreur
certes, mais les idées essentielles y étaient, puis 1820 pour que Dirichlet et Legendre
traitent le cas n = 5. Un grans pas fut franchi par Kümmer au milieu du xixe
➥ nombre siècle avec des travaux très importants sur les entiers cyclotomiques. Il est parvenu à
démontrer le théorème pour tous les exposant premiers inférieurs à 100, hormis 37,
59 et 67.
Il faudra attendre le 19 septembre 1994, et le mathématicien anglais Andrew
Wiles, pour qu’après nombre de progrès, le théorème de Fermat soit entièrement
résolu. La démonstration de Wiles prend environ 1 000 pages. Il n’y avait effective-
ment pas assez de place dans la marge !

Fraenkel, Abraham — Mathématicien allemand (Munich, 1891 – Jérusalem, 1965). Les


premiers travaux de Fraenkel concernaient les nombres p-adiques. Il a ensuite beau-
coup travaillé sur une axiomatisation de la logique permettant d’éviter les paradoxes.
C’est lui qui prouve l’indépendance de l’axiome du choix de Zermelo➠. Robinson➠ a
été son élève.

220
Frege, Gottlob — Mathématicien et logicien allemand (Wismar, 1848 – Bad Kleinen,
1925). Après avoir étudié à Iéna et à Göttingen, Frege est nommé professeur de
mathématiques à l’université d’Iéna en 1879. Il est certainement le plus grand lo-
gicien de son temps et, bien que son œuvre soit demeurée longtemps méconnue, le
fondateur de la logique mathématique. Il invente un symbolisme logique très détaillé,
une idéographie permettant d’expliciter la structure d’une proposition ou d’une
démonstration de façon beaucoup plus claire que cela n’était fait jusqu’alors. Il est le
premier à analyser de façon précise la logique des concepts mathématiques. Abordant
la sémantique, il publie une théorie sur les relations entre sens et dénotation. ➲ dénoter

Gödel, Kurt — Logicien et mathématicien autrichien (Brünn, 1906 – Princeton, 1978).


Il fait des études de mathématiques et de philosophie à l’université de Vienne et
s’installe définitivement aux États-Unis en 1940. Kurt Gödel s’intéresse au problème
de la complétude des théories mathématiques. Après la découverte des géométries
non euclidiennes, les mathématiques adoptent un point de vue axiomatique : une
théorie est le développement formel d’un ensemble d’axiomes, sans aucun contact
avec l’expérience sensible. Deux questions se posent alors : comment peut-on être sûr
que la théorie ne conduira pas à une contradiction ? Peut-on affirmer que, de deux
propositions p et ¬p d’une théorie, l’une pourra être démontrée ? La première question
est celle de la non-contradiction (on dit aussi consistance) de la théorie ; la seconde est
celle de la complétude. Dans sa thèse, Kurt Gödel démontre tout d’abord que le calcul
logique des prédicats est non contradictoire et complet, puis il s’attache à des théories
mathématiques plus complexes. En 1931, il démontre que la non-contradiction de
l’arithmétique, théorie des nombres entiers, ne peut être démontrée à l’intérieur de
cette même théorie. On ne peut prouver sa consistance qu’en la plongeant dans une
théorie plus vaste. Il montre ensuite que l’arithmétique n’est pas complète : il existe
des propositions indécidables, c’est-à-dire qu’on ne peut démontrer ni ces propositions
ni leurs négations. Ces théorèmes avaient plongé le monde mathématique dans une
grande perplexité. Depuis, on a découvert de nombreuses propositions indécidables.

Herbrand, Jacques — Mathématicien français (Paris, 1908 – La Bérarde, Isère, 1931).


Jacques Herbrand est entré à l’École Normale Supérieure à l’âge de 17 ans. Son sujet
de thèse de doctorat portait sur la logique mathématique malgré le peu d’intérêt pour
la discipline à l’époque en France. Il obtint son doctorat en 1929. Il a travaillé à Berlin
avec von Neumann➠, à Hambourg avec Artin, à Göttingen avec Emmy Noether. Il est
mort dans un accident de montagne dans les Alpes après son séjour à Göttingen. On
peut dire que sa mort a été tragique pour les mathématiques. En effet, en très peu de
temps il a produit de très nombreux résultats. Bien sûr, les plus connus concernent le
théorème qui porte son nom mais celui-ci apparaissait déjà dans sa thèse. Le théorème
de Herbrand est à la base de tous les outils de démonstration automatique actuels.
Il a aussi travaillé sur les extensions abéliennes des champs des nombres algébriques.
Sur ce seul sujet, il a publié en quelques mois une dizaine d’articles qui simplifient
des preuves existantes par Kronecker, Weber, Hilbert➠, Takagi et Artin. Il généralise
aussi un certain nombre de résultats et propose de nouveaux théorèmes.

221
10 – indications biographiques

Hilbert, David — Mathématicien et logicien allemand (Königsberg 1862 – Göttingen 1943).


Son œuvre a marqué l’évolution des mathématiques contemporaines. David Hilbert
fait la plus grande partie de ses études à l’université de Königsberg, où il obtient son
doctorat en 1884 et où il enseignera jusqu’en 1895. Il est ensuite nommé à l’université
de Göttingen, qui deviendra, sous son impulsion, un centre mathématique essentiel
du xxe siècle.
Son œuvre mathématique concerne de nombreuses branches : théories des in-
variants, algèbre des polynômes, théorie des nombres algébriques, axiomatique de
la géométrie (1899), calcul des variations, théorie des équations intégrales. Ses re-
cherches débouchent sur l’analyse fonctionnelle où il introduit les espaces vectoriels
topologiques qui portent son nom. En logique mathématique, David Hilbert apparaı̂t
comme le fondateur de la philosophie formaliste dont les conceptions et les méthodes
dominent les mathématiques contemporaines. Au cours du congrès mathématique de
Paris, en 1900, David Hilbert énonce une série de vingt-trois problèmes qui forment
un programme de recherches pour les mathématiciens du xxe siècle. Certains de ces
problèmes attendent toujours une solution.

Karnaugh, Maurice — Informaticien américain (actuellement à la retraite). Il a beaucoup


travaillé sur l’utilisation des techniques numériques en télécommunications. Il est
particulièrement connu pour l’invention du diagramme qui porte son nom en logique
(1950) et il a été co-inventeur des premiers circuits logiques.

Kleene, Stephen Cole — Logicien et mathématicien américain (5 janvier 1909 – 25 janvier


1994). Après des études à Princeton, Kleene a beaucoup travaillé sur le λ-calcul de
Church et plus particulièrement sur les fonctions récursives calculables fondant ainsi
en quelque sortes les bases mathématiques de l’informatique. Il est aussi connu pour
ses travaux dans le domaine de la logique mathématique.

Knuth, Donald Ervin — Informaticien américain né le 10 janvier 1938 à Milwaukee, Wis-
consin, USA. D. E. Knuth est mieux connu en tant qu’auteur de l’ouvrage « The Art
of Computer Programming », une des références dans le domaine de l’informatique,
pour ne pas dire la « bible » des informaticiens. Ce livre a créé un domaine : la
complexité des algorithmes (voir le chapitre 9). Knuth consacre désormais presque
toute son énergie à achever les 7 volumes de cette somme (la première édition du
premier volume remonte à 1968 et seuls trois volumes ont paru). Il est le pionnier
de l’algorithmique, et a fait de nombreuses contributions dans plusieurs branches
de l’informatique théorique. Il est le créateur du système de composition de docu-
ments TEX et du système de création de polices metafont, et a inauguré le concept
de programmation littérale.
Knuth est une figure de l’informatique, connue pour son humour spécial : il offre
par exemple une prime de $2,56 pour chaque faute de frappe ou erreur découverte

222
dans ses livres car « 256 pennies font un dollar hexadécimal ». Les numéros de version
de TEX convergent vers π, c’est-à-dire que les versions se suivent de la sorte : 3, 3.1,
3.14, etc. ; les numéros de version de metafont convergent eux vers e. Il a également
mis en garde les utilisateurs d’un de ses logiciels ainsi : « faites attention aux bogues
dans ce code ; je n’ai fait que le prouver, je ne l’ai pas essayé » 1 .
Il a reçu son bachelor’s degree en mathématiques à la Case Western Reserve
University. Il obtient ensuite son doctorat en mathématiques au California Institute
of Technology en 1963. En 1968, il devient membre de la faculté de l’Université de
Stanford, où il a préalablement reçu un curieux titre académique créé à son intention :
Professor Emeritus of the Art of Computer Programming. En 1971, Knuth fut le
premier à recevoir le prix ACM Grace Murray Hopper Award. Il a reçu de nombreuses
autres distinctions honorifiques, entre autres le prix Turing, la National Medal of
Science, la médaille John von Neumann (États-Unis) ainsi que le prix Kyoto. Il est
élu membre associé de l’Académie des sciences française en 1992 et membre de la
Royal Society en 2003.
Knuth apprécie la musique et aime en particulier jouer de l’orgue. Il dispose
d’un orgue dans sa propre maison qu’il a construit lui-même. Knuth nie cependant
tout talent particulier pour jouer de cet instrument. Il a cessé d’utiliser le courrier
électronique en prétendant qu’il s’en était servi entre 1975 et le 1er janvier 1990, et
que cela suffisait pour toute une vie. Il trouve plus efficace de tenir une correspon-
dance en « mode batch », et y consacrer une journée tous les trois mois, en répondant
par courrier « classique ».

Kripke, Saul Aaron — Philosophe et logicien américain né en 1940. Il a eu une grande
influence dans de nombreux domaines, depuis la logique jusque la philosophie du
langage. Une grande partie de ses travaux ne sont pas publiés, ou n’existent que sous
la forme d’enregistrements et de manuscrits circulant de manière restreinte. Il est
considéré comme l’un des philosophes vivants les plus importants. Kripke est surtout
connu pour trois contributions en philosophie : la logique modale, des travaux sur la
logique des noms propres et des travaux sur le langage privé et les jeux de langage.

Leibniz, Gottfried Wilhelm — Philosophe et scientifique allemand (Leipzig, 1646 – Hanovre,


1716). Tour à tour homme de cour, bibliothécaire, conseiller de divers princes, diplo-
mate, il fut affilié à la société des Rose-Croix. Penseur européen, il correspond avec
tous les grands esprits de son temps, comme en témoignent ses quinze mille lettres
conservées. Il meurt cependant abandonné et solitaire, évoluant dans les dernières
années de sa vie vers une religion naturelle détachée des rites. Leibniz a élaboré un
plan de fédération des royaumes chrétiens, s’est occupé de droit et de généalogie,
de chimie, d’arts mécaniques, et ses découvertes mathématiques et physiques ont
été décisives. Il est encore considéré aujourd’hui comme l’un des métaphysiciens les
plus remarquables et l’un des maı̂tres du rationalisme➥ classique. Parallèlement à
Isaac Newton, il dégage de façon systématique les concepts fondamentaux de calcul

1 Source http ://www-cs-faculty.stanford.edu/ knuth/faq.html

223
10 – indications biographiques

infinitésimal : notion de fonction, de dérivée, d’intégrale, d’infiniment petit et d’in-


finiment grand, avec des notations toujours en usage. Ses réflexions le conduisent à
envisager une géométrie fondée sur les relations des positions, la geometria situ, qui
est l’origine de la topologie. En mécanique, il apparaı̂t comme l’un des fondateurs
de la dynamique (Theoria motu concreti et abstracti, 1671). Ses recherches concer-
nant un langage symbolique général font de Leibniz l’un des créateurs de la logique
mathématique moderne.

Lindebaum, Adolf — Mathématicien et logicien polonais (Lvov, 1904 – 1942). Élève de


Tarski➠, il a beaucoup travaillé sur la théorie des ensembles avant d’être assassiné.

Lukasiewicz, Jan — Philosophe et logicien polonais (Lemberg, auj. Lvov, 1878 – Dublin
1956). Il est le premier à avoir énoncé une logique trivalente, admettant le vrai, le
faux et le possible.

Morgan, Augustus de — Mathématicien et logicien britannique (Madurā, auj. Madurai,


1806 – Londres, 1871). Refusant l’ambition de ses parents de faire un prêtre de
lui, Augustus de Morgan, joua d’abord avec l’idée d’étudier la médecine, ensuite le
droit. Mais, il décida enfin que sa vocation était de devenir mathématicien. Augus-
tus de Morgan contribua beaucoup aux mathématiques dans de divers domaines.
Il introduisit la première notion d’induction➲ mathématique et développa une loi
sur la convergence d’une suite mathématique. Il proposa aussi une définition de li-
mite. Il définit aussi un système décimal de monnaie ainsi qu’un almanach de pleines
lunes de 2000 avant J.-C. à 2000 après. Il développa un théorème sur les probabilités
d’événements-vie encore utilisé par les sociétés d’assurances aujourd’hui. Mais son
plus grand apport fut dans le domaine de la logique. Augustus de Morgan nous a bien
évidemment donné ses fameuses lois reliant union et intersection, conjonction et dis-
jonction, . . .. Mais, il ne faut pas oublier qu’Augustus de Morgan était très intéressé
par l’histoire des mathématiques. Il a écrit la biographie de Newton et Haley, a pu-
blié un dictionnaire des mathématiciens du xviie siècle. En 1847, il publia ce qui est
considéré comme la première bibliographie scientifique « Arithmetical Books » dans
lequel il décrit aussi bien les travaux de plus de 1500 mathématiciens que l’histoire
du « pied », unité de mesure.

Naur, Peter — Astronome et informaticien danois, né en 1928. Il a contribué à la création


du langage de programmation algol. À cette occasion, avec l’américain John Ba-
ckus➠, il invente la Backus-Naur-Form utilisée dans la description de la syntaxe de la
plupart des langages de programmation. Il a commencé sa carrière comme astronome
(avec un doctorat en 1957) mais sa découverte des ordinateurs a complètement changé
sa profession. Ses centres d’intérêt concernent la conception, la structure et la per-
formance des programmes et des algorithmes. Dans son livre, Computing : A Human
Activity (1992), qui est un répertoire de ses contributions à l’informatique, il rejette

224
l’école formaliste qui voit la programmation comme une branche des mathématiques.
En fait, il n’aime pas être identifié à la BNF et dit souvent qu’il préférerait qu’on
l’appelle la Backus-Normal-Form.

Nerode, Anil — Mathématicien américain, né en 1933. Depuis plus de quarante ans, Anil
Nerode produit des travaux fondamentaux dans le domaine des mathématiques ap-
pliquées et de l’informatique théorique : depuis les automates (dont son fameux
théorème), la logique, le calcul symbolique jusqu’aux contraintes, le contrôle, la
modélisation et la simulation. Il est un des pionnier de la recherche sur les systèmes
hybrides.

Neumann, John von — Mathématicien et logicien d’origine hongroise naturalisé américain


(Budapest 1903 – Washington 1957). Von Neumann est un des mathématiciens im-
portants du xxe siècle et un des fondateurs de l’informatique. Il étudie d’abord la
chimie à l’université de Berlin et à Zurich où il obtient un diplôme d’ingénieur en
1926, avant de soutenir une thèse de mathématiques à Budapest. De 1926 à 1929, il
est maı̂tre de conférences à l’université de Berlin, puis à l’université de Hambourg
jusqu’en 1930. Il s’oriente alors vers la physique théorique et étudie la formalisation
mathématique de la mécanique quantique. En 1930, invité par le mathématicien Os-
wald Veblen, il se rend à l’université de Princeton, aux États-Unis, où il entreprend
des recherches en mathématiques et en physique. De 1933 jusqu’à la fin de sa vie,
il travaillera à l’Institute for Advanced Study. Durant la Seconde Guerre mondiale, il
participe à la mise au point des armes nucléaires américaines dans le cadre du projet
Manhattan. C’est au cours de ce projet qu’il commence à s’intéresser au problème du
calcul par ordinateur et collabore au développement du précurseur de l’ordinateur
moderne, l’ENIAC. Son œuvre scientifique est très abondante ; en mathématiques,
on lui doit des résultats en théorie des ensembles, en logique, en topologie, en théorie
de l’intégration, en analyse fonctionnelle, en analyse numérique ; en physique, outre
les fondements de la mécanique quantique, il étudie la mécanique des fluides, la balis-
tique, la météorologie ; il est aussi l’un des fondateurs de la recherche opérationnelle
et le créateur de la théorie des jeux, qu’il applique à l’économie. L’informatique
lui doit quelques-uns de ses fondements, notamment l’« architecture de von Neu-
mann », selon laquelle sont conçus encore aujourd’hui la plupart des ordinateurs, et
les prémisses de l’intelligence artificielle➥.

Peano, Giuseppe — Mathématicien et logicien italien (Cueno 1858 – Turin 1932). Il


commence sa carrière en 1884, comme maı̂tre de conférences à l’université de Tu-
rin, où il est nommé, en 1890, professeur d’analyse ; simultanément, il enseigne les
mathématiques à l’académie militaire de Turin de 1886 à 1901. Les ouvrages écrits
à partir de ses cours (Calcolo differenziale e principii di calcolo integrale, 1884 ; Lezioni
di analisi infinitesimale, 1893 ; Applicazioni geometriche del calcolo infinitesimale, 1887)
contribuent au renouvellement de l’exposé de l’analyse et révèlent de très grandes
qualités pédagogiques. Il publiera plus de deux cents études sur l’analyse, la géométrie

225
10 – indications biographiques

différentielle, la logique, le fondement des mathématiques et la linguistique. En 1890,


il découvre une fonction dont la courbe remplit toute une région du plan. Cette
fonction continue et non dérivable remet en question les notions de continuité et de
dimension. En 1889, il définit un système d’axiomes, pour la théorie des nombres
entiers et l’arithmétique, qui demeure un modèle du genre. Son œuvre la plus connue
est le Formulaire de mathématiques (publié en français) où il tente une axiomati-
sation et un exposé systématique de l’ensemble des mathématiques, œuvre marquée
par la rigueur logique et l’abandon de l’intuition. Le symbolisme logique qu’il utilise
sera largement repris par Bertrand Russell➠, et sa conception des mathématiques in-
fluencera l’évolution de cette discipline au xxe siècle. Peano est également le créateur
d’une langue universelle (Interlingua).

Post, Emil Leon — Mathématicien américain (Augustów, Pologne 1897 – New-York 1954).
Mathématicien américain né à Augustów (Pologne) et mort à New York. Arrivé aux
États-Unis en 1904, Emil Post obtint son doctorat à luniversité Columbia de New
York en 1920. Il était membre de lAmerican Mathematical Society depuis 1918 et de
lAssociation for Symbolic Logic dès sa fondation en 1935.
Sa thèse de doctorat, publiée en 1921, porte sur le calcul propositionnel de A.
N. Whitehead et B. Russell➠ dont il montre la consistance et le caractère complet.
Ici, consistance et complétude sont définies de façon syntaxique. Cest le début de la
théorie moderne de la démonstration. Pour arriver à ces résultats, il utilise cepen-
dant la méthode « sémantique » des tables de vérité. Il examine ensuite les logiques à
plusieurs valeurs à lépoque où J. Lukasiewicz➠ étudiait, de façon plus philosophique
que mathématique, les logiques à trois valeurs. En 1925, poursuivant les travaux de
sa thèse, il cherche à montrer le caractère incomplet du système des Principia Mathe-
matica de Russell et Whitehead. Les résultats quil obtient ainsi sont contenus dans
ceux que K. Gödel➠ et A. Church➠ obtiendront dans les années 1930. Ses principaux
travaux sont ensuite consacrés à létude des processus effectifs que lon rencontre en
mathématiques.
Ainsi, en 1947, il résout, en même temps que A. A. Markov, le problème posé
par A. Thue en 1914 de savoir sil existe un algorithme permettant de décider, étant
donné un mot sur un alphabet fini et un système fini de relations entre des mots sur
cet alphabet, si le mot donné est équivalent à lidentité dans le monoı̈de quotient du
monoı̈de libre par la plus petite congruence compatible avec les relations données.
Pour montrer quil nexiste pas de tel algorithme, il introduit ce que lon appelle les
systèmes de Post, grâce auxquels on peut exprimer (comme avec les machines de Tu-
ring, les algorithmes de Markov, etc.) le calcul de nimporte quelle fonction récursive.
Ce résultat de Post est équivalent à la non-résolubilité du problème des mots (le
problème de correspondance de Post introduit dans la section 8.4 du chapitre 8)
Ce sont ces différents résultats dindécidabilité qui sont à la base de ceux que lon
rencontre dans la théorie des grammaires formelles.
Pour terminer, indiquons ce que W. Quine➠ écrivait en 1954 à loccasion de la
mort de Post : « Le concept de fonction récursive, concept mathématique précis
rendant compte de la notion de calculabilité, fut découvert indépendamment et sous
des formes différentes par quatre mathématiciens et Post fut lun dentre eux », et,

226
en 1972, W. Quine ajoutait : « La théorie des fonctions récursives dont Post fut un
des cofondateurs est deux fois plus âgée quen 1954 ; elle a bien montré, depuis, quel
champ fertile elle est. »

Pythagore — Philosophe et mathématicien grec (Samos v. 570 – Métaponte v. 480 av. J.-
C.). Il n’a laissé aucune œuvre écrite. Le théorème sur l’hypothénuse, auquel son nom
est resté attaché, était connu des Babyloniens un millénaire avant lui. L’arithmétique
pythagoricienne, limitée aux nombres entiers, incluait une théorie des proportions.
Pythagore considérait que les nombres sont le principe et la source de toutes choses.

Quine, Willard Van Orman — Philosophe et logicien américain (25 juin 1908 - 25 décembre
2000). Willard Van Orman Quine fut l’un des plus importants philosophe et logicien
américain du xxe siècle et l’un des grands représentants de la philosophie analytique.
Il est notamment l’auteur de « Les deux dogmes de l’empirisme », article célèbre qui
critiquait la distinction entre analytique et synthétique et de « Le Mot et la Chose »
(Word and Object, 1960) où il propose sa thèse de l’indétermination de la traduction
radicale et la critique du concept de « signification ». Quine étudia la logique avec
le mathématicien et philosophe Alfred North Whitehead à Harvard. Après sa thèse
en logique mathématique, il fit un voyage en Europe où il rencontra notamment
Rudolf Carnap. Il fut professeur de philosophie à Harvard de 1956 à sa mort. Quine
contribua à la logique formelle, à la fondation des mathématiques mais aussi à la
philosophie du langage et à l’épistémologie.

Robinson, John Alan — Scientifique anglais né en 1930. Robinson est arrivé aux États-
Unis en 1952 après des études à Cambridge. Il étudie la philosophie à l’université
de l’Oregon avant d’aller à Princeton où il devient docteur en Philosophie en 1960.
Temporairement déçu par la philosophie, il travaille pour la société Du Pont en
tant qu’analyste en recherche opérationnelle. C’est là qu’il apprend à programmer
et se met aux mathématiques. C’est en 1961 qu’il s’intéresse à la démonstration
automatique lors d’un séjour dans un laboratoire de mathématiques appliquées. Il y
découvre un article de Martin Davis et Hilary Putnam (qui deviendra son directeur
de thèse) proposant un algorithme de démonstration pour le calcul des prédicats
qui n’avait pas encore été programmé. Robinson se lance dans l’implantation de cet
algorithme et se rend rapidement compte que l’algorithme proposé est relativement
inefficace. Mais, il se rend compte que l’idée développée combinée avec une idée
proposée par Dag Prawitz, donne une méthode de preuve automatique pour le calcul
des prédicats, il l’appelle : la résolution.

Russell, Bertrand — Mathématicien, philosophe et logicien britannique (Trellek, pays de


Galles, 1872 – Penrhyn, pays de Galles, 1970). L’apport de Bertrand Russell au
mouvement scientifique contemporain fait de lui l’un des plus importants penseurs
de ce siècle. Il fut le créateur des mathématiques modernes, l’inventeur de la théorie

227
10 – indications biographiques

des types et de celle des descriptions. Il se distingue aussi comme l’un des fonda-
teurs, avec Gottlob Frege➠, de la logique moderne, et avec Moore, de la philosophie
analytique. En 1900, à l’âge de vingt-huit ans, il publiait déjà son Essai sur les
fondements de la géométrie, puis ses Principia mathematica, en 1910, qui visaient
essentiellement à interpréter les mathématiques comme une extension de la logique.
Il écrivit, au total, 70 ouvrages et plus de 25 000 lettres et articles. Nommé fellow
(professeur résident) au Trinity College de Cambridge en 1894, Russell s’intéresse
aux idées de Leibniz➠, dans lequel il voit le précurseur de la philosophie scientifique.
En 1900, il fait la connaissance de Giuseppe Peano➠ et de sa logique symbolique, qui
se révèle à lui comme un remarquable instrument d’analyse, permettant d’étendre
la précision mathématique à des domaines où régnaient jusqu’alors la confusion du
langage philosophique. Trois ans plus tard, il découvre les travaux de Frege➠, sur
les fondements de l’arithmétique. Toutes ces réflexions amèneront Russell à publier,
entre 1910 et 1913 (avec la collaboration Alfred North Whitehead), ce qu’il considère
comme son œuvre essentielle : les Principia mathematica, gigantesque entreprise dont
on pourrait dire qu’elle a démythisé, désacralisé les mathématiques. Si le philosophe
veut atteindre le réel, considère Russell, c’est vers la science qu’il doit se tourner.
Cependant, tout ne peut être prouvé par les seules mathématiques : pour atteindre
à la totalité de la réalité, il faut donc se soumettre à l’expérience, qui permet de
choisir entre les possibles (La Connaissance humaine, son but et ses limites, 1948).
On parlera désormais d’épistémologies➥ pré- et post- russelliennes.

Saxe, Albert de — Philosophe du xive siècle. Albert de Saxe est un des docteurs les plus
puissants et les plus originaux qui aient illustré la scolastique➥. La tradition de ses
enseignements fut de longue durée. Les maı̂tres de l’École, à la fin du Moyen-Âge et
au début de la Renaissance, les Niphus, les Soto, les Tolet, citent souvent ses écrits
ou s’en inspirent. Ses doctrines n’eurent pas moins d’influence sur les penseurs que
la Science positive préoccupait plus que la Philosophie et la Théologie : Blaise de
Parme, Cardan, Copernic, Guido Ubaldo et, par ce dernier, Galilée ont subi cette
influence, dont leurs œuvres portent la trace reconnaissable.

Schwartz, Laurent — Mathématicien français (1915–2002). Ancien élève de l’École Normale


Supérieure, le mathématicien Laurent Schwartz, premier Français à avoir obtenu la
prestigieuse médaille Fields, a apporté une contribution fondamentale dans plusieurs
domaines mathématiques, notamment en établissant la célèbre théorie des distribu-
tions. Mais Laurent Schwartz ne s’est pas contenté d’être cet exceptionnel scienti-
fique, il a également pris une part majeure dans la défense des droits de l’homme
ainsi que dans la réforme des universités et des grandes écoles.
Laurent Schwartz a profondément influencé les mathématiques du xxe siècle par
l’invention de la théorie des distributions (1944). En généralisant la notion classique
de fonctions, il a formulé clairement et mis au point un concept nouveau permettant
d’utiliser la dérivation et la transformation de Fourier dans des situations inacces-
sibles au calcul différentiel de Newton et Leibniz➠. La pureté, la simplicité et la
généralité étonnantes de ses idées nouvelles leur ont assuré une fécondité incompa-

228
rable. La théorie des distributions pour laquelle il a reçu la médaille Fields en 1950
des mains d’Harold Bohr est devenue un outil essentiel dans des domaines aussi variés
que la théorie des équations aux dérivées partielles – où ses élèves J.L. Lions et B.
Malgrange ainsi que L. Hörmander l’ont merveilleusement illustrée – en physique et
en particulier dans la théorie des champs quantiques où elle joue un rôle essentiel,
dans la théorie des représentations des groupes, et même en théorie des nombres où
joue un rôle clef l’analogue de l’espace de Schwartz dû à F. Bruhat, un autre de ses
élèves.

Skolem, Albert Thoraf — Mathématicien norvégien (Sandsvaer, 1887 – Oslo, 1963). Thoraf
Skolem a travaillé sur les équations diophantiennes, la logique mathématique, la
théorie des groupes, des treillis et des ensembles. En 1912, il a produit la description
d’un treillis libre distributif. Entre 1922 et 1929, il travaille sur des raffinements de
la théorie axiomatique de Zermelo➠. À partir de 1933, il a réalisé un véritable travail
de pionnier autour de la méta-logique et a construit un modèle non standard de
l’arithmétique. Il a aussi travaillé sur une théorie des fonctions récursive qui permet
d’éviter le paradoxe de l’infini dans ce domaine.

Tarksi, Alfred — Mathématicien et logicien américain d’origine polonaise (Varsovie, 1902


– Berkeley, 1983). Il est l’un des plus éminents logiciens du xxe siècle et l’un des
représentants de l’importante école polonaise de logique du début du siècle. En 1942,
Tarski rejoint l’université de Californie, à Berkeley. Ses nombreux travaux concernent
la logique, la méta-mathématique (fondement des mathématiques), l’algèbre générale,
la théorie des ensembles et la théorie de la mesure. En logique, ses travaux les plus
importants concernent la théorie des modèles et la formalisation de diverses branches
des mathématiques. Tarski fonde la sémantique logique, montre la nécessité de dis-
tinguer langage et méta-langage et définit la notion de vérité pour un système formel.

Turing, Alan Mathison — Mathématicien britannique (Londres 1912 – Wilmslow 1954).


Turing formule, entre 1936 et 1938, le principe théorique fondateur de l’informatique,
connu depuis sous le nom de machine de Turing.
Après des études au King’s College de Londres (Cheshire), il prépare à l’université
de Princeton, aux États-Unis, une thèse sous la direction du logicien argentin Alonzo
Church, inventeur du λ-calcul. Le λ-calcul est une formulation mathématique des-
tinée à approfondir la notion de fonction. Turing étudie les notions fondamentales de
fonction récursive, de calculabilité et de procédure effective qui permettent de mener
un calcul à bien.
Turing s’attaque en fait au problème de la décidabilité, dans la lignée des travaux
de David Hilbert➠ et de Kurt Gödel➠, cherchant à savoir si les mathématiques peuvent
être réduites à un ensemble d’énoncés formels de la logique : un système formel est
décidable s’il existe une procédure effective (qu’on appelle aussi un algorithme) pour
distinguer les propositions démontrables des autres. Pour définir rigoureusement la
notion de procédure effective, Turing élabore un modèle d’automate, la machine

229
10 – indications biographiques

de Turing, qui lui permet de préciser la notion d’exécution d’un algorithme. Ce


faisant, il fonde l’informatique, puisqu’il invente une machine universelle dont tous
les ordinateurs sont des réalisations matérielles.
Pendant la guerre, Turing contribue à l’effort allié en mettant au point des ma-
chines et des méthodes pour percer les codes secrets de l’armée allemande, qui
rencontrent des succès notables dans le contre des attaques de sous-marins. Après
1945, il s’intéresse à la possibilité d’une intelligence artificielle➥ et à une théorie
mathématique de la biologie. En 1954, incompris de son entourage et persécuté à
cause de son homosexualité, il se suicide.

Zadeh, Lotfi A. — Mathématicien américain d’origine iranienne né dans les années 1930
à Téhéran. Internationalement reconnu pour ses travaux pionniers sur la théorie des
systèmes linéaires, il a introduit en 1965 la théorie des sous-ensembles flous puis, en
1978 la théorie des possibilités, qui ont donné naissance au champ de recherches sur
la logique floue et ses applications (Intelligence Artificielle➥, linguistique , logique,
analyse décisionnelle, systèmes experts et les réseaux neuronaux). Actuellement, ses
recherches se concentrent sur la logique floue, la programmation (soft computing),
et la toute récente théorie des perceptions discrètes (computational theory of percep-
tions).
Il est actuellement Professeur à l’Université de Californie à Berkeley, directeur du
BISC (Berkeley Initiative in Soft Computing). Il a reçu de très nombreux prix, tels
que le prix de la Fondation Honda en 1989, la médaille d’honneur de IEEE en 1995,
la médaille du millénaire IEEE, la distinction du Richard E. Bellman Control Heritage
qui récompense une oeuvre marquante en automatique et, très récemment, le Allen
Newell Award, plus haute distinction remise par l’ACM en Intelligence Artificielle.

Zermelo, Ernst — Mathématicien allemand (Berlin, 1871 – Freiburg, 1956). Après avoir tra-
vaillé pendant sa thèse sur le calcul des variations de Weierstrass, Zermelo s’intéresse
à la statistique mécanique avant de travailler sur la théorie des ensembles et en par-
ticulier sur l’axiome du choix.

230
chapitre onze

dictionnaire morphologique

axiome — n. m. Proposition indémontrable mais admise par tout le monde sans discussion,
ou admise comme nécessaire (en sciences), et dont on peut déduire des conséquences.
étym. gr. axiôma, de axioun « juger digne, valable ».

calcul — n. m. Opération ou ensemble d’opération effectuées sur des symboles représentant


des grandeurs, des relations logiques.

catén- — Élément qui signifie « chaı̂ne (attache) ». Il prend aussi la forme caden-. Il apparaı̂t
dans les mots : caténaire, concaténation, cadenas. étym. lat. catena « chaı̂ne ».

co- — Élément qui signifie « avec, ensemble ». syn. sy(n)-. Il s’utilise devant une voyelle
(coauteur, . . .) et devant une consonne dans certains mots (copropriétaire, . . .). Il
prend parfois les formes col- devant l, com- devant b, m, p, cor- devant r et con-
devant les autres consonnes. Il apparaı̂t, par exemple, dans les mots : cofinancer,
cohabiter, colocataire, collaborer, collectif, compacter, compatir, combattre, com-
merce, comparaison, corrélation, concentrer, concitoyen, conjonction, conséquence,
consonance, . . .. rem. quand le deuxième élément commence par un i, ce i prend un
tréma : coı̈ncider. étym. lat. co-, de cum « avec ».

cogn- — Élément qui, en liaison avec l’augment -if, signifie « connaı̂tre ». Il apparaı̂t dans
les mots : cognitif, incognito. étym. lat. cognitum, supin de cognoscere « apprendre,
étudier ».

cognitif — adj. • cogn- • Qui a rapport avec ou qui concerne la connaissance.

231
11 – dictionnaire morphologique

cohésion — n. f. • co-, -hér- • Caractère d’un ensemble dont les parties sont solidaires,
unies, harmonisées. contr. confusion, désagrégation, dispersion, dissolution.

concaténation — n. f. • co-, catén- • Enchaı̂nement de termes, de signes dans le discours.

conjonction — n. f. • co-, jonc(t)- • Action de joindre. contr. disjonction.

conséquence — n. f. • co-, séqu- • Suite qu’une action, un fait entraı̂ne.

contingent — adj. Qui peut se produire ou non.

dé- — ➊ Élément qui indique le mouvement de haut en bas, au propre ou au figuré. syn.
cat(a)-. Il apparaı̂t dans les mots : dégouliner, déglutir, descendre, dévaler, dépressif,
détracteur, déduire, dots. étym. lat. de, qui indique le mouvement de haut en bas.
— ➋ Élément à valeur intensive. Il prend aussi la forme des-. Il apparaı̂t, par exemple,
dans les mots : déambuler, débonnaire, démontrer, dénoter, détenir. étym. lat. de,
qui indique l’achèvement, la plénitude.

déduire — v. tr. • ➀ dé-, du(ct)- • Conclure, décider ou trouve (qqch.) par un raisonnement,
à titre de conséquence.

démonstration — n. f. • ➁ dé-, -monstr- • Opération mentale, raisonnement qui montre


comment on arrive à un résultat.

dénoter — v. tr. • ➁ dé-, not- • Renvoyer à (un objet, une personne) en parlant d’un signe.

déont- — Élément qui signifie « obligation ». Il apparaı̂t dans les mots : déontique,
déontologie. étym. gr. deon, deontos « ce qu’il faut, ce qui convient ».

déontique — adj. • déont- • Qui constitue une obligation, une nécessité, un devoir. « il
faut » est une modalité déontique.

232
di(s)- — Élément qui signifie l’éloignement, la séparation. syn. ➀ dé-, dia-, sé-. Il apparaı̂t,
par exemple, dans les mots : digression, dimension, discorde, disjonction, district,
disséminer, disséquer, dissuader. étym. lat. dis- qui indique la séparation.

disjonction — n. f. • di(s)-, jonc(t)- • Action de disjoindre (deux questions, des idées) ; son
résultat. contr. conjonction.

drom- — Élément qui signifie « courir ». Il apparaı̂t dans les mots : aérodrome, autodrome,
boulodrome, cynodrome, hippodrome, vélodrome ; palindrome, prodrome, syndrome ;
dromadaire. étym. gr. dromos action de courir, lieu de la course

du(ct)- — Élément qui signifie « mener, faire aller, modifier ». syn. -ig-. Il prend les formes
-duc- ou -duqu- ou du- dans les verbes en -ire (infinitif) et les dérivés de ces verbes. On
trouve ainsi -duc à la finale de noms masculins. Il apparaı̂t dans les mots : ductile,
adduction, conducteur, déductible, induction, introduction, production, réduction,
conduire, traduire, aqueduc, gazoduc, viaduc. étym. lat. ductum, supin de ducere
« conduire, mener ».

-ème — Élément de noms masculins. Il apparaı̂t dans : chrysanthème, érythème, exanthème,


poème, théorème. étym. gr. êma, suffixe nominal.

épistémique — adj. • épistém(o)- • Relatif à l’ensemble des connaissances.

épistém(o)- — Élément qui signifie « science, ensemble des connaissances ». Il apparaı̂t


dans les mots : épistémique, épistémologie. étym. gr. epystêmê « science ».

équ(i)- — Élément qui signifie « égal ». Il apparaı̂t dans les mots : équateur, équation,
équidistant, équilatéral, équilibre, équinoxe, équipotent, équité, équanimité, équitable,
équivalent ; adéquat ; ex-aequo ; péréquation. étym. lat. aequus « égal ».

équipotent — adj. • équ(i)-, potent- • Se dit d’un ensemble A par rapport à un ensemble B,
s’il existe une bijection de A sur B (ces deux ensembles ont alors même puissance).

233
11 – dictionnaire morphologique

ex- — Élément qui signifie « en dehors, hors de ». Il indique un mouvement vers l’extérieur
(souvent avec l’idée d’éloignement d’un point de départ), ou une position à l’extérieur.
syn. é-, ecto-, exo-. Il précède un élément verbal ou nominal comme dans les exemples
suivants : excursion, exhiber, expliquer, explicite, exploser, extradition, excentrique,
exorbitant. étym. lat. ex « en dehors, hors de ».

explicite — adj. • ex-, -plic-, -it • Qui est suffisamment clair et précis dans l’énoncé ; qui,
étant formellement exprimé, ne peut laisser aucun doute. contr. implicite.

formaliser — v. tr. Réduire (un système de connaissances) à ses structures formelles en


utilisant des symboles.

formule — n. f. Expression concise, générale (souvent symbolique), définissant avec précision


soit des relations fondamentales entre termes qui entrent dans la composition d’un
tout, soit des règles à suivre pour un type d’opération.

gramm- — Élément qui signifie « lettre, écriture ». syn. ➀ graph(o)-. Il apparaı̂t dans les
mots : anagramme, calligramme, cryptogramme, diagramme, épigramme, idéogramme,
parallélogramme, programme, grammaire. étym. gr. gramma, grammatos « lettre »
et grammê « trait », déverbaux de graphein « écrire, dessiner ».

grammaire — n. f. • gramm- • Ensemble des structures et des règles qui décrivent les
manières les plus usuelles dont s’articulent les mots d’un lexique.

graph(o)- — ➊ Élément à valeur intensive. Il prend aussi la Élément qui signifie « écrire,
écriture (partie visuelle d’une langue) », syn. scri(pt)- ; gramm-, opposé à « parler,
parole (partie sonore) ». Au sens de « signe matériel », il apparaı̂t dans les mots :
graphème, graphie, homographe, orthographe, graphologie ; cryptographie, pictogra-
phie, sténographie ; calligraphie, dysgraphie ; dactylographie, télégraphie, typogra-
vie. Il désigne aussi des objet servant à écrire : graphite, pantographe, normographe.
Au sens de « écrit, texte » (syn. lit(t)ér-), il apparaı̂t dans les mots désignant des
écrits : autographe, épigraphe, monographie, pornographie. On le trouve aussi pour
caractériser un auteur (cacographe) notamment par son sujet (biographe, hagio-
graphe, historiographe) et dans les noms de liste (ex. bibliographie, discographie,
filmographie, nosographie).
— ➋ Élément qui signifie « étudient (un domaine de la connaissance), étude savante
écrite », dans des finales de noms en -graphe, -graphie. Il est parfois opposé à log- (ex.
lexicologue / lexicographe). Il apparaı̂t dans des mots qui désignent des personnes :
démographe, ethnographe, géographe, lexicographe, océanographe, paléographe, etc.

234
et dans des mots qui désignent la science correspondante (en -graphie) : géographie,
musicographie, muséographie, etc.). On le trouve dans d’autres noms qui impliquent
souvent un texte ou des représentations : cosmographie, cristallographie, glyptogra-
phie, hydrographie, orographie, pétrographie, scénographie, sratigraphie.

-hér- — Élément qui signifie « attacher ». Il prend aussi la forme -hés-. Il apparaı̂t dans
les mots : adhérer, cohérent, inhérent, etc. étym. lat. haerere, haesi, haesum « être
attaché, fixé, accroché ».

heuristique — adj. et n. f. Qui sert à la découverte. étym. all. heuristik, heuristisch du grec
heuriskein « trouver ».

-(i)fér- — Élément qui signifie « qui porte, contient ». syn. -lat, -phor-. Il apparaı̂t par
exemple dans : aquifère, calorifère, somnifère, mammifère, conifère, pestiféré, référendum,
circonférence, conférer, différer, indifférencié, inférence, interférer, légiférer, préférer,
proférer, proliférer, référer, transférer, vociférer. étym. lat. -(-)fer-, de ferre « porter »
en composition (ex. cum + ferre → conferre ; leg- + -i- de liaison + -fer → legifer)

-(i)fi(c)- — Élément qui signifie « faire ». syn. -fac(t)-,-fect(u)-,-urg-. Il apparaı̂t dans des
verbes à base nominale dans la finale . . . fier (cocufier, liquéfier, unifier), dans des
noms (amplificateur, bénéfice, codification, difficulté, édifice, efficacité, électrification,
magnificence, modification, sacrifice) et dans des adjectifs (artificiel, déficient, hono-
rifique, magnifique, maléfique, spécifique). étym. lat. -(i)fic- de facere « faire » en
composition.

implicite — adj. • in-, -plic-, -it • Qui est virtuellement contenu, impliqué dans une propo-
sition, un fait, sans être formellement exprimé. contr. explicite.

in- — Élément qui devient il- devant l, im- devant b, m, p, ir- devant r. syn. en-, endo-,
intro-. Il signifie, entre autres, « dans, en, sur » et « vers l’intérieur de », associé à
une base généralement verbale. On le trouve, par exemple, dans : illuminer, imbiber,
immanent, implicite, importer, induction, inhérent, injecter, inné, inscrire, irruption.
étym. lat. in « dans, en ».

induction — n. f. • in-, du(ct)- • Opération mentale qui consiste à remonter des faits à la
loi, de cas singuliers une proposition plus générale. contr. déduction.

235
11 – dictionnaire morphologique

inférence — n. f. • in-, -(i)fér- • Opération logique par laquelle on admet une proposition
en vertu de sa liaison avec d’autres propositions déjà tenus pour vraies.

interprétation — n. f. Action d’expliquer, de donner une signification claire à une chose


obscure, ambiguë ; son résultat.

intrinsèque — adj. Qui est intérieur et propre à l’objet dont il s’agit. étym. lat. intrinsecus
« au-dedans ».

-it ou -ite — Élément qui indique une action accomplie, subie, ou considérer dans son
résultat. La base est le plus souvent verbale, mais l’élément peut suivre aussi, associé
à un préfixe, une base adjectivale (comme érudit). Il apparaı̂t notamment dans des
adjectifs en -it, -ite (comme décrépit), dans des adjectifs en -ite au masculin (comme
composite, explicite, tacite), dans des substantifs masculins en -it (comme appétit,
crédit, débit). étym. lat. -itum, finale de participe passé (ex. eruditum → érudit) ;
-itum, finale à l’accusatif de mots de la quatrième déclinaison (appetitum → appétit).

jonc(t)- — Élément qui signifie « attacher, joindre, relier ». Il apparaı̂t dans les mots :
jonction, adjonction, conjonction, conjoncture, disjonction, subjonctif, conjonctivite.
étym. lat. junctum, supin de jungere « joindre, unir, combiner ».

-lect- — Élément qui signifie « dire, parler ». syn. dic(t)-, fac-, -fess-, -lég-, log-, -nonc(i)-. Il
prend aussi la forme -lex-. Il apparaı̂t dans les mots : dialecte, dyslexie, lexique, etc.
étym. gr. lektos « qu’on peut dire » et lexis « action de parler, manière de parler »,
dérivés de legein « dire ».

lexique — n. m. • -lect- • Ensemble des mots d’une langue, considéré comme l’un des
parties qui forment le code de cette langue.

lexico- — Élément qui signifie « lexique, liste de mots ». Il apparaı̂t dans les mots : lexico-
graphe, lexiocologie, lexicologue. étym. gr. lexicos « qui concerne les mots ».

lexicographie — n. m. • lexico-, ➁ graph(o)- • Recensement et étude des mots d’une langue ;


art et techniques propres au lexicographe.

236
log- — Élément qui signifie « dire (v. tr.) oralement ou par écrit ». syn. dic(t)-, fac-, -fess-
, -lect-, -lég-, -nonc(i)-. Il prend aussi la forme logo- et logue à la finale. Il apparaı̂t
dans les termes qui désignent la rationalité dans le langage : logique, logicien, logiciel,
illogique, syllogisme, tautologie. étym. gr. logos « parole, discours, expression de la
raison ».

méta- — Élément qui signifie « qui est au-delà, qui englobe (ce que désigne la base) ». On
le trouve dans des noms de sciences et les adjectifs correspondants. Il apparaı̂t dans
les mots : métalangage, métalinguistique, métaphysique, etc. étym. gr. meta « après,
au-delà ».

mimétique — adj. Qui concerne le mimétisme, la capacité d’imiter.

modalité — n. f. Adverbe de modalité, modifie le sens d’une phrase entière.

-monstr- — Élément qui signifie « montrer » syn. mon- (→ montrer). Il apparaı̂t dans les
mots : démonstratif, démonstration. étym. lat. monstrare « montrer, faire connaı̂tre,
conseiller ».

-nex- — Élément qui signifie « lien ». Il apparaı̂t dans les mots : annexe, connexe. étym.
lat. nexum, supin de nectere « lier, attacher, nouer ».

normaliser — v. tr. Soumettre à des normes ; unifier, uniformiser.

normatif — adj. Qui constitue une norme, est relatif aux règles, impose des règles.

not- — Élément qui signifie « connaı̂tre, remarquer ; faire connaı̂tre, être connu ». syn.
(g)nos(t)-. Il apparaı̂t dans les mots : notion, notable, notice, connoter, dénoter,
notoire, notoriété. étym. lat. notus, connu, p. passé de noscere, apprendre à connaı̂tre,
reconnaı̂tre.

opération — n. f. Processus de nature déterminée qui, à partir d’éléments connue, permet


d’engendre un nouvel élément.

237
11 – dictionnaire morphologique

palin- — Élément qui signifie « de nouveau, en sens inverse ». Il apparaı̂t dans les mots :
palindrome, palingénésie, palinodies. étym. gr. palin, de nouveau, à rebours.

-plic- — Élément qui signifie « embrouillé, obscur » et aussi « lié, inextricable ». Il prend
aussi la forme -plex(e)-. Il apparaı̂t dans les mots : explicite, implicite, expliquer,
compliquer, complice, complexe, perplexe, plexus. étym. lat. plicare « plier », intensif
de plectere, plexere « tresse, enlacer » et son participe passé plexus « embrouillé,
ambigu » au figuré.

postulat — n. m. Principe indémontrable (d’un système déductif) qui est la base d’une
démonstration ultérieure.

potent- — Élément qui signifie « qui peut, puissant ». syn. autor-. Il apparaı̂t dans les
mots : équipotent, impotent, omnipotent ; plénipotentiaire, potentat, potentiel, ven-
tripotent. étym. lat. potens, potentis « puissant, qui pouvoir de », participe présent
de posse « pouvoir », remplacé en lat. populaire par potere (qui a donné despote,
potence).

pré- — Élément qui indique l’antériorité dans le temps, dans l’espace ou dans un ordre de
valeur. syn. ante-, pro-. contr. post(er)-, sub-. L’accent disparaı̂t en accord avec la
prononciation (prescrire). Il a un sens temporel dans : préambule, préavis, précaution,
précéder, prédestiner, préhistoire, présage, présomptif, prévenir. Il prend une valeur
spatiale dans : préface, préfixe, prénexe, prénom, préposition. Il signifie aussi l’im-
portance dans un ordre de valeurs : prédominer, préoccuper, prépondérant, prescrire,
présent, préserver, présomptueux, prestance, prétendre, prétention, prévaloir. étym.
lat. prae « devant, en avant, d’abord ».

prédicat — n. m. Ce qui, dans un énoncé, est affirmé à propos d’un autre terme (sujet).

raisonnement — n. m. Suite de propositions déduites les unes des autres ; argumentation.

re- — Élément à valeur intensive et qui signifie « davantage, complètement » avec une base
verbales et « rendre (plus) » avec une base nominale ou adjectivale. syn. ➁ dé-. On
le trouve, par exemple, dans : raffiner, ramollir, recherche, réclamer, récriminer, re-
doubler, refroidir, relater, remplir, renier, repaı̂tre, représenter, résolution, ressentir,
réunir, revêtir, rédemption, réchauffer, rembourrer, rembourser, renforcer, se rengor-
ger. étym. lat. re-, red- indiquant un mouvement en arrière, un retour à un état
antérieur.

238
résolution — n. f. • re-,-soudre • Opération par laquelle l’esprit découvre la solution (d’une
difficulté, d’un problème).

sém(a)- — Élément qui signifie « signe et son sens ». Il prend aussi les formes sémant- et
sémio(t)-. Il apparaı̂t dans les mots : monosémique, polysémie, sémaphore, sémantique,
sémiologie, sémiotique. étym. gr. sêma, sêmatos « signe, caractère distinctif, marque »
et sêmeion même sens.

sémantique — n. f. • sém(a)- • ➊ Étude scientifique du sens des unités linguistiques et de


leurs combinaisons.
— ➋ log. Étude de propositions d’une théorie déductive du point de vue de leur
vérité ou de leur fausseté.

séqu- — Élément qui signifie « suivre ». Il prend aussi la forme séc(u)-. Il apparaı̂t dans les
mots : conséquence, séquelle, séquence, second, secte, consécutif, persécuter. étym.
lat. sequi « suivre » supin de secutum, et secta, habitudes suivies.

-soudre — Élément qui signifie « expliquer ». Il prend aussi la forme sol(u)-. Il apparaı̂t
dans les mots : résolution, solution. étym. lat. solvere « réduire, résoudre », supin
solutum.

-stitu(t)- — Élément qui signifie « état, situation ». syn. -sist-, -stand-, -st(atu)-, -staur-. Il
prend aussi la forme -stice. Il apparaı̂t dans les mots : constituer, destituer, instituer,
prostituer, substituer, armistice, interstice, solstice. étym. lat. -stit- en composition,
supin -stitum, de statuere « établir, poser, déterminer ».

sub- — Élément qui exprime une position inférieure, ce qui est, se fait en-dessous. Il devient
su- devant s (suspect, . . .), suc-, suf-, sup- respectivement devant c, f , p (succession,
suffixe, supporter), et également sus- (susceptible, susciter, suspendre, . . .). On le
trouve aussi sous la forme subter- (dans subterfuge). Il exprime la position en dessous
(sublingual, submerger, substrat, subreptice), la dépendance (subalterne, subjonctif,
subordonner), le faible degré dans une série (subconscient, subdivision, subodorer,
subsister), la proximité dans l’espace ou dans le temps (suburbain, succéder). syn.
hypo-, infra-, sou(s)-. étym. lat. sub, subter « sous ».

239
11 – dictionnaire morphologique

substituer — v. tr. • sub-, -stitu(t)- • Mettre (qqch., qqn) à la place (de qcch., qqun d’autre),
pour faire jouer le même rôle.

supin — n. m. Substantif verbal latin, sur lequel est s’est formé le participe passé en -us.
étym. lat. supinum, de supinus « renversé en arrière ». (en pente, même image que
décliner un mot).

syllogisme — n. m. • sy(n)-, log- • Raisonnement déductif rigoureux qui, ne supposant


aucune proposition étrangère sous-entendue, lie des prémisses à une conclusion.

symbole — C e qui, en vertu d’une convention, correspond à une chose, à une relation ou à
une opération (→ icone, signe).

sy(n)- — Élément qui signifie « ensemble » et indique l’idée de réunion, de communauté,


dans l’espace ou dans le temps. syn. co-. Il devient sym- devant b ou p et syl- de-
vant l. Il apparaı̂t dans les mots : syndic, synagogue, syndrome, synergie, idiosyncra-
sie, synonyme, syntaxe, synthèse, synchrone, syncope, synopsis, symétrie, sympathie,
symphonie, symbiose, syllogisme. étym. gr. sun « ensemble, avec ».

syntaxe — n. f. • sy(n)-, tax(i)- • ➊ ling. Partie de la grammaire qui décrit les règles par
lesquelles les unités linguistiques se combinent en phrases ♦ Ensemble de ces règles,
caractéristiques de telle ou telle langue.
— ➋ fig. Ensemble de règles qui régissent un moyen d’expression donné (musique,
cinéma, . . .).
— ➌ log. Étude des relations entre les expression d’un langage formel.
— ➍ inform. Ensemble des règles d’écriture d’un langage de programmation et
formant la grammaire de ce langage.

tauto- — Élément qui signifie « le même ». syn. homo-, iso-. Il apparaı̂t dans les mots :
tautochrone, tautologie. étym. gr. to auton, « la même chose ».

tautologie — n. f. • tauto-, log- • En logique, proposition complexe qui reste vraie quelle
que soit la valeur de vérité des propositions qui la composent.

tax(i)- — Élément qui signifie « arrangement, ordre ». syn. ordin-. Il prend aussi la forme -
tact- dans certains dérivés. Il apparaı̂t dans les mots : taxidermie, syntaxe, taxinomie,
tactique. étym. gr. taxis « mise en ordre, arrangement ».

240
théor- — Élément qui signifie « examiner ». Il apparaı̂t dans les mots : théorème, théorie.
étym. gr. théôrein « observer, considérer ».

théorème — n. m. • théor-,-ème • Proposition démontrable qui résulte d’autres propositions


déjà posées (opposé à définition, axiome, postulat).

top(o)- — Élément qui signifie « lieu » syn. loc-. Il apparaı̂t dans les mots : biotope, isotope,
topographie, topologie, toponyme, topique, diatopique. étym. gr. topos « lieu ».

topologie — n. f. • top(o)-, log- • Géométrie qui étudie les positions indépendamment des
formes et des grandeurs.

unifier — v. tr. • -(i)fi(c)- • ➊ Faire de plusieurs éléments une seule et même chose ; rendre
unique, faire l’unité de.
— ➋ Rendre semblables (divers éléments)

241
chapitre douze

dictionnaire encyclopédique

axiome du choix — Soit (E, ≤) un ensemble ordonné. On rappelle qu’une partie A de E


est totalement ordonnée maximale si elle est maximale, relativement à l’inclusion,
dans l’ensemble des parties totalement ordonnées. Alors les conditions suivantes sont
équivalentes :
➊ Soient X et Y deux ensembles, et f : X ← Y une application surjective. Il
existe une application g : Y ← X tel que f ◦ g = IdY .
➋ Soit X un ensemble non vide. Il existe une application (appelée fonction de
choix) c : P(X) \ {∅} ← X telle que c(A) ∈ A pour toute partie non vide de X
(axiome du choix)
➌ Tout ensemble ordonné possède une partie totalement ordonnée maximale (théo-
rème de maximalité de Hausdorff)
➍ Tout ensemble ordonné inductif admet un élément maximal (Lemme de Zorn)
Même si les propositions ➊ et ➋ peuvent sembler évidentes, l’axiome du choix
est en fait quelque chose qu’on ne peut déduire de la construction de la théorie des
ensembles classiques. Il est même possible de construire une théorie mathématique
non contradictoire en posant un axiome contredisant l’axiome du choix. Pourtant,
l’axiome du choix a de nombreuses conséquences : existence d’un idéal maximal,
existence de bases dans un espace vectoriel, théorème de Hahn-Banach, existence de
la clôture algébrique d’un corps, . . .

dialectique — n. f. Dans son acception première (du gr. dialektikè, « discussion »), le terme
dialectique désigne l’art du dialogue qui cherche à atteindre le vrai par le jeu des ques-
tions et des réponses. Dans la culture grecque classique, à Athènes particulièrement,
la parole joue un rôle très important. Ceux qu’on appelle les sophistes sont des
rhéteurs, des professeurs dans l’art de parler. Parmi les exercices qu’ils préconisent
figurent les « cours doubles », dans lesquels s’affrontent des points de vue contradic-
toires. Socrate, puis Platon radicalisent ce point de vue. Le premier montre comment
un dialogue bien mené permet de détruire les opinions communes, d’en montrer l’ina-
nité ; le second, dans son grand projet pédagogique et politique, situe la technique

243
12 – dictionnaire encyclopédique

dialectique – art de poser les questions qui conviennent et de donner les réponses
adéquates, de diviser les notions en leurs articulations internes – comme la plus
haute des sciences, celle de la connaissance vraie, qui prépare l’âme à se dépendre
des apparences sensibles et à accéder aux plus hautes réalités, les essences ou idées.
Cette définition de la dialectique est fondamentale, puisqu’elle insiste sur le fait que
le savoir ne peut se construire que sur des contradictions dépassées. Cependant, dans
son opposition au platonisme, Aristote➠ inaugure une autre tradition : l’ordre de la
dialectique, selon lui, est du discutable. Ainsi, au syllogisme➲ scientifique qui, partant
de prémisses vérifiées, conclut à un énoncé nécessaire, s’oppose le syllogisme dialec-
tique qui, procédant de prémisses probables, aboutit à une conclusion probable. La
dialectique n’est plus un science mais un art. Cette acception est celle qui est reçue
durant toute la période médiévale et l’âge classique.

épistémologie — n. f. Discipline qui a pour objet les sciences et s’attache à définir les prin-
cipes, les concepts et les méthodes dont elles usent pour se constituer et se développer.
Ce terme récent (début du xxe siècle) – qui est maintenant d’usage courant en philo-
sophie – signifie étymologiquement « réflexion sur la science ». La nécessité de créer
une discipline autonome de ce genre, appartenant classiquement à la logique, s’est
manifestée lorsque le développement et les succès tant théoriques que techniques des
sciences physiques et des sciences sociales ont imposé celles-ci comme étant le lieu par
excellence de la pensée rationnelle. L’épistémologie se distingue de la méthodologie,
telle qu’elle était conçue par la philosophie dans la seconde moitié du xixe siècle et
dans la première moitié du xxe siècle, en ce qu’elle ne prétend aucunement définir
les règles générales que doivent suivre les sciences pour être en conformité avec la
théorie de la vérité philosophiquement établie : l’invention scientifique ne se passe
jamais comme on l’attend, et la philosophie n’a pas d’ordres à donner aux savants
quant aux modalités de leur travail. L’épistémologie prend pour référence la science
qui se fait et s’efforce d’en rendre intelligible le processus. Elle ne se confond pas pour
autant avec l’histoire des sciences : en effet, cette dernière (comme toute histoire)
s’attache à retrouver les événements dans leur singularité et leur absolue contingence ;
elle tient compte des diversités contextuelles (les circonstances individuelles, les « ha-
sards », l’entourage, l’imaginaire). L’épistémologie a pour matériau cette histoire, à
laquelle elle porte fidélité totale ; mais elle s’applique à mettre en évidence la manière
dont s’élaborent les rationalités scientifiques : la phase critique au cours de laquelle le
savant repère l’insuffisance de la théorie dominante dans le champ donné, la réflexion
théorique accompagnant cette phase, la mise en place d’un dispositif expérimental
original, la constitution de la nouvelle théorie ou la définition d’un « objet » nouveau
. . .. La finalité de l’épistémologie n’est pas d’enseigner la science, mais, au contraire,
de préciser ce que les sciences, dans leur diversité et leur fonds commun, nous en-
seignent quant à la rationalité et à la réalité. Aujourd’hui que les sciences prennent
une part de plus en plus grande dans la vie des sociétés et constituent une force
productive, à cette épistémologie interne s’ajoute une réflexion qui s’interroge sur
le statut de cette rationalité en tant qu’elle est institutionnalisée et qu’elle produit
un monde d’objets techniques et un imaginaire qui se substituent à la réalité dite
« naturelle ». Ce qui est alors en question, ce sont le sens et les limites de l’entreprise
de domination de la « nature » par l’ordre technique.

244
intelligence artificielle — L’intelligence artificielle est une branche de l’informatique qui
tente de reproduire sur des machines le raisonnement humain. Discipline née dans
les années 1950, l’intelligence artificielle a connu un développement très important
dans les années 1980. Dès le xviie siècle, Blaise Pascal et Gottfried Wilhelm Leibniz➠
envisageaient qu’une machine puisse « raisonner ». En 1943, Warren S. McCulloch
et Walter Pitts écrivaient un article sur « Le calcul logique des idées immanentes à
l’activité nerveuse », à l’origine des « réseaux de neurones », cependant qu’Arturo
Rosenblueth, Norbert Wiener et Julian Bigelow publiaient « Comportement, inten-
tion, téléologie ». Ces deux textes fondent la conception moderne d’un automate
pensant.
L’acte de naissance du terme même d’intelligence artificielle date cependant de
1956. Les précurseurs en ce domaine, John McCarthy, Alan Newell et Herbert Si-
mon, ont fondé leurs travaux sur des idées développées par Alan Turing➠, mort deux
années auparavant. Cette même année, Newell et Simon développent une machine,
le Logic Theorist, capable de démontrer des théorèmes de logique mathématique. Les
années 1980 ont été très riches en programmes de recherche-développement dans ce
domaine. Les Japonais ont lancé par exemple leur programme d’ordinateur de « cin-
quième génération ». En Europe, de nombreux projets ont vu le jour, notamment dans
le cadre des programmes de recherche scientifique de la Commission européenne (Es-
prit et Eurêka). Cet enthousiasme est un peu retombé aujourd’hui, même si certaines
appellations opérationnelles ont pu bénéficier de ces recherches dans différents sec-
teurs économiques : conduite de processus industriels, mais aussi banque, médecine,
etc.
Plusieurs branches de l’intelligence artificielle se sont déjà constituées en disci-
plines relativement autonomes : la reconnaissance de formes, ou vision artificielle, la
reconnaissance de la parole, la traduction automatique, les systèmes experts, etc. Il
s’agit alors de comprendre le langage naturel, de résoudre des problèmes de toute
sorte, de jouer aux échecs, de reconnaı̂tre une personne ou un objet sur une image, de
traduire un texte d’une langue dans une autre, d’effectuer le diagnostic de maladies
ou de pannes, etc.
La distinction principale entre informatique classique et intelligence artificielle est
que la première manipule des données – elle est numérique et algorithmique, alors
que la seconde traite des connaissances de manière symbolique et heuristique – elle
fait intervenir la notion de relation plutôt que d’opération. P et Q représentant des
faits (« Paul est le fils de Jean » ou « Philippe aime Marie », etc.), les programmes
d’intelligence artificielle comprennent des propositions du type « si P alors Q » ; cela
s’appelle une inférence➲. Ce type de raisonnement se retrouve en particulier dans les
systèmes experts➥. L’intelligence artificielle doit aussi faire face à la représentation
de connaissances imprécises ou incertaines, pourtant couramment utilisées dans les
activités humaines ; pour traiter celles-ci, les programmes peuvent faire appel à la
« logique floue », théorie inventée par le mathématicien Lotfi Zadeh➠ aux États-
Unis en 1986, théorie associant en quelques sortes le calcul des probabilités et la
logique. Les travaux en intelligence artificielle concernent également la vision, ap-
pliquée notamment à la robotique (guidage des robots) et à la bureautique (lecture
automatique, traduction automatique de textes, recherche documentaire, etc.).

245
12 – dictionnaire encyclopédique

Des langages de programmation ont été créés spécialement pour l’intelligence


artificielle. Un des plus connus est prolog. Ces langages, ainsi d’ailleurs que lisp,
se prêtent mieux que les langages algorithmiques classiques, tels que fortran ou
c, à représenter et à traiter des connaissances, à établir des liaisons entre elles, et
non plus simplement à effectuer des opérations sur des données numériques. Pour
optimiser les programmes d’intelligence artificielle, les informaticiens ont été amenés
à construire des ordinateurs spéciaux, fonctionnant avec l’un des langages spécifiques :
ce sont les « machines-langage ». Aux États-Unis, il existe notamment des machines-
lisp mettant en œuvre ce langage, tandis que les Japonais ont plutôt opté pour le
langage prolog.
L’intelligence de ces systèmes est essentiellement contenue dans les programmes
(le logiciel). Lorsque les informaticiens essaient de simuler l’intelligence humaine, ils
font en sorte que l’utilisateur ait l’impression de communiquer avec un homme par
l’intermédiaire de la machine. Cependant, la structure de celle-ci n’a rien de com-
mun avec un cerveau humain. Aussi certaines recherches tentent-elles justement de
s’inspirer du modèle humain pour réaliser des ordinateurs encore plus efficaces et
dotés d’un fonctionnement plus proche de celui du raisonnement de l’homme, avec
notamment des facultés d’adaptation, d’apprentissage, d’auto-organisation et de fia-
bilité qui permettraient aux ordinateurs de raisonner, d’agir et d’évoluer en fonction
de leur environnement. C’est ainsi que les Japonais ont lancé un programme pour
une sixième génération d’ordinateurs, impliquant le développement de recherches
fondamentales en physiologie, neurobiologie, psychologie, linguistique et logique, en
vue de créer des machines capables « de penser et de parler comme des hommes ».
Ce « bio-ordinateur » serait fondé sur l’imitation du cerveau humain et comporte-
➲ mimétique rait ainsi des structures neuro-mimétiques (imitant les neurones), notamment pour
➲ cognitif la reconnaissance des formes. Les cogniticiens (spécialistes de la représentation des
connaissances) travaillent aujourd’hui en collaboration avec des biologistes, des neu-
rologues et des généticiens en vue d’appliquer les mécanismes de fonctionnement du
cerveau à des machines dont l’intelligence artificielle serait alors plus proche de l’in-
telligence naturelle. Cette pluridisciplinarité des approches est certainement la voie
d’avenir dans ce domaine.

intuitionnisme — n. m. Lorsqu’un mathématicien réfléchit, cherche à résoudre un problème,


. . ., il a en général deux méthodes de travail qui s’offrent à lui. La première consiste à
essayer de visualiser physiquement la situation, et d’avoir l’intuition de la solution à
l’aide de son sens géométrique, de son sens physique, . . .. Les mathématiciens ont une
expression très éloquente à ce sujet, ils disent chercher « ce qui fait que ça marche »,
alors que tous savent très bien que c’est l’ensemble des axiomes, lois, règles logiques
de déduction, . . ., qui « font que ça marche ». On est là dans le domaine intuitionniste.
Mais il arrive que l’on ne voie rien. Il faut alors poser clairement les axiomes dont on
dispose, et mécaniquement chercher la suite de conséquences valides qui mènera au
résultat, sans vraiment comprendre intuitivement l’interprétation physique du travail
mené. On est là dans le domaine classique, ou moderne.
La démarche moderne ne cherche plus à accorder de sens primitif aux termes
primitifs et se contente de poser les axiomes et d’en déduire les théorèmes, plus à

246
même de conduire à des interprétations physiques. Cette méthodologie a soulevé de
nombreuses critiques, notamment sur le choix des axiomes. Comment déterminer les
axiomes intéressants, si on refuse d’accorder un sens intuitif aux termes primitifs ?
Comment choisir si un axiome est meilleur si on ne sait pas ce qu’il signifie ? Au vu des
résultats, répondent certains, mais on ne connaı̂t pas les résultats qu’auraient donné
d’autres axiomes ! La pensée intuitionniste propose de donner une interprétation phy-
sique dès le niveau des axiomes, et de tenter de formuler des énoncés que l’on pense
physiquement vrais, évitant ainsi ce que Kleene➠ appelle le nihilisme mathématique :
une construction stérile ne parlant pas de notre expérience physique quotidienne. Le
débat entre intuitionniste et axiomatique standard est loin d’être clos. Les intuition-
nistes refusent la construction d’objets mathématiques à partir de simples axiomes,
de mots, et proposent de se contenter de procédés mécaniques. L’existence même
des entiers naturels est au cœur du débat. Les intuitionnistes, notamment Brouwer➠,
furent les premiers à critiquer la loi du tiers exclu : valable dans un ensemble fini,
elle est caduque dans le cas infini, puisqu’il est humainement impossible de vérifier
pour chaque élément de l’ensemble infini s’il vérifie une propriété donnée ou non. La
question la plus saine qu’un tel débat suggère, « Quelles sont les mathématiques les
plus utiles, formalistes ou intuitionnistes ? » n’a jamais vraiment été résolue ou même
traitée correctement. Il est fort probable que les mathématiques que nous utilisons
soient en fait un compromis entre ces deux approches : intuitionniste puisqu’elles ont
toujours su rendre compte efficacement de la réalité physique, classique puisqu’elles
ont su s’affranchir du sens des axiomes dans la recherche de théorèmes et qu’elles
ont pris le parti d’englober l’infini.
La logique intuitionniste, c’est la logique qu’on obtient en retirant la loi de Pierce
(((a → b) → a) → a) des axiomes du calcul propositionnel. L’idée c’est qu’en logique
intuitionnisme, ¬a dit vraiment que a est complètement absurde, et que quelque
chose qui n’est pas complètement absurde n’est pas pour autant vrai. Ceci permet
d’éliminer des raisonnements non constructifs, dans lesquels on montre l’existence
d’un objet sans le fournir explicitement, tout simplement parce que son inexistence
est absurde. L’intuitionnisme introduit une complication dans les valeurs de vérité :
on n’a plus une algèbre de Boole mais une algèbre de Heyting (on peut l’assimiler
à la structure que forment les ouverts d’un espace topologique). Alors que {0, 1}
est d’une certaine manière « à la base » de toute algèbre de Boole, les algèbres de
Heyting ont une structure plus compliquée. Non seulement on ne peut pas forcément
montrer a ou ¬a, mais on ne peut même plus montrer a∨¬a (principe du tiers exclu)
(alors qu’en logique classique, même si a est indécidable, il s’agit d’une tautologie).

Jeu de Nim — Ce jeu très simple se joue à deux. On dispose des paquets d’allumettes sur
une table. Chaque joueur, à tour de rôle, prend le nombre d’allumettes qu’il veut (au
moins une) dans un des paquets. Le gagnant est celui qui prend la dernière allumette.
Ce jeu est aussi connu sous le nom « Fan Tan » ou « jeu des allumettes ». Le film
« L’année dernière, à Marienbad » le rendit très à la mode dans les années soixante.
Dans le « jeu de Marienbad », il y a 4 tas contenant 1, 3, 5 et 7 allumettes mais c’est
celui qui prend la dernière allumette qui perd.

247
12 – dictionnaire encyclopédique

λ-calcul — Branche de la logique développée par Alonzo Church➠ à la fin des années 1930.
Le problème est d’étudier les fonctions lorsqu’elles sont appliquées à leurs propres
arguments. Les langages fonctionnels sont des extensions du λ-calcul (on y ajoute les
constantes et les types).

nombre — n. m. Un nombre est un élément abstrait qui permet de décrire une quantité ou
une position de façon précise.
Les nombres sont historiquement apparus dans cet ordre :
– les entiers naturels,
– les nombres rationnels positifs,
– les entiers relatifs,
– les nombres rationnels,
– les nombres irrationnels et les nombres réels,
– les nombres complexes,
– les nombres hypercomplexes,
– les nombres cyclotomiques,
– les nombres p-adiques,
– les nombres réels transcendants1 et les nombres réels algébriques2 ,
– les nombres transfinis3 ,
– les nombres hyperréels,
– les nombres pseudo-réels.
Ce n’est pas fortuit : on passe de la façon la plus simple de mesurer à des tech-
niques beaucoup plus élaborées. La compréhension des limites des nombres ration-
nels, et de la nécessité des nombres réels fut particulièrement douloureuse pour les
pythagoriciens (voir Pythagore➠) ; on dit même que cela scella la fin de cette École.
Les nombres complexes se sont imposés dans un premier temps comme un argument
spécieux mais efficace pour résoudre les équations polynômiales (d’où le vocable
d’« imaginaire » pour désigner certains d’entre eux), avant de finalement être recon-
nus comme des nombres tout à fait convenables. Les nombres hypercomplexes furent
inventés par Hamilton (quaternions) puis par Cayley (octanion ou octave). À chaque
composante d’un nombre hypercomplexe, on peut associer une base à plusieurs di-
mensions (4 pour les quaternions, 8 pour les octonions et 16 pour les sédonions). On
a été amené à considérer la racine carrée de −1. Et pourquoi pas la racine n-ième de
−1. C’est le monde des nombres cyclotomiques.
L’apparition des nombres p-adiques➥ est liée à la notion de valeur absolue, et sont
très utilisés en théorie des nombres ; ces nombres sont cependant assez méconnus au
sein même de la communauté mathématique. Les nombres hyperréels furent conçus
pour résoudre certains problèmes de l’analyse et leur création par Abraham Robinson
permit le développement de l’Analyse non-standard. Un nombre x est dit hyperréel
si et seulement si il est infinitésimal (c.-à-d. si |x| est strictement inférieur à tout
standard positif) ou s’il est infiniment grand (c.-à-d. si 1/x est infinitésimal). Un
1 Un tel nombre n’est la racine d’aucun polynôme à coefficients entiers.
2 Un tel nombre est racine d’un polynôme à coefficients entiers.
3 Il s’agit des nombres introduisant une hiérarchie dans l’infini.

248
nombre hyperréel est donc en quelque sorte un « nombre au-delà du réel » en étendant
le champs réel à des quantités infinies ou dépendantes de l’infini.
Les nombres pseudo-réels (ou surréels) sont très semblables aux hyper-réels (en-
semble plus vaste) mais la construction est différente.

nombre p-adique — Un nombre p-adique est un élément d’un des corps Qp . p est un nombre
premier fixé une fois pour toutes. Le corps Qp est défini par complétion du corps Q
des nombres rationnels, lorsque ce dernier est muni de la valeur absolue | · |p , appelée
valeur absolue p-adique, définie comme suit : la valeur absolue |r|p d’un rationnel r
vaut 1/pk lorsque r se décompose en r = (a/b) × pk avec a, b et k entiers relatifs,
b > 0, a et b premiers entre eux et ni a ni b n’est divisible par p4 Si r est entier, k
est simplement le plus grand exposant d’une puissance de p qui divise r. En quelque
sorte, plus r est divisible par p plus sa valeur absolue p-adique est petite.
En considérant Qp comme un Qp -espace vectoriel on peut munir Qp d’une norme
puis d’une distance.
Le théorème d’Ostrowski donne une classification des normes sur les rationnels :
– la valeur absolue habituelle, qui donne par complétion les réels ;
– les valeurs absolues p-adiques, qui donnent par complétion les Qp , puis éven-
tuellement par extension algébrique, d’autres corps, dont les éléments sont aussi
appelés nombres p-adiques.
Ces valeurs absolues donnent naissance aux Qp , qui sont des analogues des réels,
mais qui présentent des propriétés spécifiques, car munis d’une valeur absolue et
d’une norme non-archimédienne. On obtient alors une analyse différente de l’analyse
usuelle, que l’on appelle analyse p-adique.

paradoxe de Russell — Considérons l’ensemble qui serait constitué de tous les ensembles
imaginables. Posons-nous la question : l’ensemble de tous les ensembles est-il un
ensemble ?. Si x désigne un tel ensemble, on devrait avoir x ∈ x. Ce qui est assez
gênant. Cantor➠ s’en aperçut en 1899. Soit alors W « l’ensemble » de tous les en-
sembles qui n’appartiennent pas à eux-mêmes. On constate facilement que W ∈ W
et W 6∈ W sont toutes deux contradictoires. Plus concrètement : Si dans un village,
un barbier déclare raser la barbe de tous ceux qui ne se rasent pas eux-mêmes, le
barbier se rase-t-il lui même ? Dans le même esprit : peut-on rédiger le catalogue de
tous les catalogues ? le catalogue obtenu est-il un catalogue ? Si non : rédigeons donc
le catalogue de tous les catalogues qui ne se mentionnent pas eux-mêmes. Mais alors,
. . . Pour Russell➠ et Whitehead, la solution à ces phénomènes contradictoires est
l’axiomatisation des mathématiques : on met tout à plat et on repart à zéro . . .. La
logique est reconstruite sur des postulats et doit pouvoir permettre la reconstruction
de toutes les mathématiques : c’est ce que l’on appela le logicisme. Russell développe
la théorie des types permettant d’instaurer une hiérarchie dans le langage ensem-
bliste et de définir le concept de classe afin d’éliminer les paradoxes de la théorie
des ensembles. Ces premiers travaux d’axiomatisation seront complétés par ceux de
4 Une telle décomposition est unique.

249
12 – dictionnaire encyclopédique

Zermelo➠, Fraenkel➠, Bernays. Un point final, calmant enfin les esprits, sera placé
par Gödel➠ et Cohen avec la « découverte » des propositions indécidables, après 64
ans d’incertitude sur le devenir des mathématiques : 1899-1963.

rationalisme — n. m. Doctrine qui affirme les droits de la pensée claire et distincte, la


souveraineté et la primauté de la raison, à la fois contre les arguments d’autorité
tirés des croyances religieuses (la révélation) et contre l’attitude qui fait reposer la
connaissance sur la seule expérience immédiate (empirisme). Le terme évoque une
confiance serein dans les capacités, les critères et les méthodes de la raison pour
atteindre la vérité. Le rationalisme ainsi défini renvoie à l’une des orientations es-
sentielles prises par la pensée européenne des xviie et xviiie siècles, en particulier en
France et en Allemagne. On a coutume d’en attribuer la paternité à René Descartes,
dont la philosophie se caractérise en effet par un scepticisme envers la tradition et
par le rôle décisif qu’elle accorde à la raison. Le rationalisme est donc inséparable de
l’esprit de méthode : rien ne peut en droit échapper à la raison à condition que nous
sachions en faire bon usage, et pourvu que, à l’instar des mathématiques, l’enten-
dement procède de manière déductive à partir de quelques axiomes simples. Baruch
Spinoza, autre illustre représentant du rationalisme classique, s’est ainsi attaché à
faire valoir qu’en philosophie, l’ensemble des propositions est également déductible
de principes premiers. Fort de cette conviction, les tenants du rationalisme affirment
donc la possibilité de connaı̂tre la réalité et la vérité à partir des ressources propres
de la raison, et proclament leur foi illimitée dans la capacité de celle-ci à trouver,
pour toute question, des solutions rationnelles.

scolastique — n. f. Enseignement philosophique propre au Moyen-Âge, par lequel l’Église


entendait relier ses dogmes à la philosophie. Il s’agit, en fait, de mobiliser la philo-
sophie au service de la théologie. La préoccupation première de la scolastique est de
montrer comment la raison peut et doit se mettre au service de la foi, sinon en la ren-
dant pleinement intelligible, du moins en en justifiant totalement les fondements et
en défendant victorieusement les mystères contres les objections des contestataires,
qualifiés d’hérétiques. La scolastique traduit donc la volonté qu’a le christianisme
d’apporter une vision globale de l’histoire et de définir le monde, la vie et l’homme.
Ce programme suppose la récupération et l’intégration, au sien du corpus doctrinal
chrétien, de la tradition philosophie grecques. C’est en cela que réside la complexité
de la scolastique : elle veut concilier, en une vaste synthèse embrassant l’universalité
des choses, les données de l’expérience sensible, les principes communs de la raison
naturelle et les principes propres de la fois (qui sont les dogmes révélés), en subor-
donnant l’expérience à la raison qui l’interprète, et la raison à la foi qu’elle a pour
but de justifier.

stoı̈cisme — n. m. École philosophique grecque qui s’est développé de la période hellénistique


à l’Antiquité tardive et qui rie son nom du Portique (stoa en grec) d’Athènes, auprès
duquel les premiers stoı̈ciens ont enseigné leur doctrine. Celle-ci combine une théorie

250
complexe de la nature, de la connaissance et du langage, avec un style de vie fondé
sur l détachement, la quête de l’autonomie intérieure et lap ix de l’âme. Le stoı̈cien
le plus fécond fur sûrement Chrysippe➠. La logique des stoı̈ciens est une logique des
propositions, c’est-à-dire une logique qui analyse les raisonnements sans entrer dans
la structure interne de leurs propositions. Elle est donc plus élémentaire que la lo-
gique d’Aristote➠. La logique stoı̈cienne était, par ailleurs, axiomatisée et, parmi ses
axiomes, certains ont fait l’objet d’un ré-examen par les logiciens contemporains.
L’un de ces axiomes stoı̈ciens est le modus ponens.

système expert — Les systèmes experts constituent la première application opérationnelle


de l’intelligence artificielle➥. Dans un système expert, on collecte un ensemble de
règles (quelques dizaines, voire quelques milliers, selon la complexité du problème)
auprès d’experts dans un certain domaine. Ces règles sont ensuite exploitées par
la partie du système appelée « moteur d’inférence➲ », lequel agit sur la base de
connaissances. Avec le même moteur d’inférence, il est possible de réaliser différents
systèmes experts, en changeant seulement la collection de règles constituant la base
de connaissances. Ainsi, à partir de Mycin, système expert servant au diagnostic
médical, mis au point en 1974 à l’université Stanford (États-Unis), IBM a élaboré en
1981 le système expert Dart, destiné au diagnostic des pannes d’ordinateur, d’autres
un système expert pour le diagnostic des incidents de forage pétrolier.
Toutefois, les systèmes experts posent des problèmes difficiles, en particulier dans
les cas où plusieurs règles d’inférence entrent en conflit. De plus, une difficulté certaine
réside dans le grand nombre de connaissances que le système doit intégrer et le choix
de la forme sous laquelle elles doivent être représentées. Le système expert devra donc
disposer de connaissances sur la façon d’utiliser les connaissances ; cela s’appelle les
« méta-connaissances ». Ces dernières devraient également permettre de résoudre le ➲ méta-
problème de l’apprentissage par le système expert, afin que celui-ci soit capable de
découvrir par lui-même de nouvelles connaissances.

251
bibliographie

[Aho et al., 1991] Alfred Aho, Ravi Sethi, et Jeffrey Ullman. Compilateurs, principes, tech-
niques et outils. InterÉditions, Paris, 1991.
[Allen, 1984] J. F. Allen. Towards a general theory of action and time. Artificial Intelligence,
23 :123–154, 1984.
[Arsac, 1987] Jacques Arsac. Les machines à penser : des machines et des hommes. Seuil,
Paris, 1987.
[Audureau et others, Paris] Éric Audureau et al. Logique temporelle. Masson, 1990, Paris.
[Bouchon-Meunier, 1993] Bernadette Bouchon-Meunier. La logique floue. Que sais-je ? P.
U. F., Paris, 1993.
[Bouchon-Meunier, 1995] Bernadette Bouchon-Meunier. La logique floue et ses applications.
Addisson-Wesley, Paris, 1995.
[Carroll, 1966] Lewis Carroll. Logique sans peine. Hermann, Paris, 1966.
[Chang et Lee, 1973] Chin-Liang Chang et Richard Lee. Symbolic logic and mechanical
theorem proving. Academic Press, Londres, 1973.
[Delahaye, 1986] Jean-Paul Delahaye. Outils logique pour l’intelligence artificielle. Eyrolles,
Paris, 1986.
[Dreyfus, 1984] Hubert Dreyfus. L’intelligence artificielle : mythes et limites. Flammarion,
Paris, 1984.
[Friant et L’Hospitalier, 1986] Jean Friant et Yvon L’Hospitalier. Jeux-problèmes : de la
logique à l’intelligence artificiel le. Les éditions d’organisation, Paris, 1986.
[Gardner, 1979] Martin Gardner. Ha Ha. Pour la Science, Paris, 1979.
[Gardner, 1980] Martin Gardner. La magie des paradoxes. Pour la Science, Paris, 1980.
[Garey et Johnson, 1979] Michael R. Garey et David S. Johnson. Computers and Intracta-
bility – a guide to the theory of NP-completeness. W.H. Freeman and company, 1979.
[Genesereth et Nilsson, 1986] M. Genesereth et Nils Nilsson. Logical Foundations of Arti-
ficial Intelligence. Morgan Kaufmann Publishers, Inc., Los Altos, CA, 1986.
[Gochet et Gribomont, 1990] Paul Gochet et Pascal Gribomont. Logique, méthodes pour
l’informatique fondamentale. Hermès, Paris, 1990.

253
bibliographie

[Haton, 1989] Jean-Paul Haton. L’intelligence artificielle. P. U. F., Paris, 1989.


[Hofstadter, 1985] Douglas Hofstadter. Gödel, Escher, Bach : les Brins d’une Guirlande
Éternelle. InterÉditions, Paris, 1985.
[Hopcroft et al., 2001] John Hopcroft, Rajeev Motwani, et Jeffrey Ullman. Introduction to
automata theory, languages and computation. Addison Wesley, Reading, MA, 2001.
[Hopcroft et Ullman, 1969] John Hopcroft et Jeffrey Ullman. Formal languages and their
relation to automata. Addison Wesley, Reading, MA, 1969.
[Jacquemin, 1994] Christian Jacquemin. Logique et mathématiques pour l’informatique et
l’I. A. Masson, Paris, 1994.
[Kaufmann, 1973] Arnold Kaufmann. Introduction à la théorie des sous-ensembles flous :
éléments théoriques de base. Masson, Paris, 1973.
[Kayser, 1997] Daniel Kayser. La représentation des connaissances. Hermès, Paris, 1997.
[Kleen, 1971] Stephen Kleen. Logique mathématique. Armand Colin, Paris, 1971.
[Knuth, 1997] Donald E. Knuth. Fundamental Algorithms, volume 1 of The art of Computer
Programming. Addison-Wesley, Reading, MA, 1997.
[Kowalski, 1979] Robert Kowalski. Logic for problem solving. North Holland, New York,
1979.
[Lalement, 1990] René Lalement. Logique, réduction, résolution. Études et recherches en
Informatique. Masson, Paris, 1990.
[Lassaigne et de Rougement, 1993] Richard Lassaigne et Michel de Rougement. Logique et
fondements de l’informatique. Hermès, Paris, 1993.
[Lassaigne et de Rougemont, 1996] Richard Lassaigne et Michel de Rougemont. Logique et
complexité. Hermès, Paris, 1996.
[Leitsch, 1997] Alexander Leitsch. The resolution calculus. Springer, Paris, 1997.
[L’Hospitalier, 1998] Yvon L’Hospitalier. Énigmes et Jeux logiques. Eyrolles, Paris, 1998.
[Martin, 1991] John Martin. Introduction to languages and the theory of computation. Mac
Graw Hill, Paris, 1991.
[Rayward-Smith, 1986] V. J. Rayward-Smith. A first cours in Computability. Blackwell
Scientific Publications, Oxford, 1986.
[Singh, 1999] Simon Singh. Le dernier théorème de Fermat. Hachette, 1999.
[Smullyan, 1981] Raymond Smullyan. Quel est le titre de ce livre ? Dunod, Paris, 1981.
[Smullyan, 1984] Raymond Smullyan. Le livre qui rend fou. Dunod, Paris, 1984.
[Sombé, 1989] Léa Sombé. Raisonnement sur des informations incomplètes en intelligence
artificielle. Teknea, Paris, 1989.
[Stern, 1988] Jacques Stern. Fondements mathématiques de l’informatique. Mac Graw Hill,
Paris, 1988.
[Tisseau, 1996] Gérard Tisseau. Intelligence artificielle, problèmes et méthodes. P. U. F.,
Paris, 1996.
[Turner, 1986] R. Turner. Logiques pour l’intelligence artificielle. Masson, Paris, 1986.

254
annexes

255
annexe A

corrections des exercices

A.1 Calcul propositionnel

Correction de l’exercice 1 page 6 :


Il suffit de supprimer les parenthèses entourant les variables et de tenir compte de
la priorité des connecteurs (ordre standard ¬, ∧, ∨, →, ↔). De plus, un opérateur
unaire l’emporte toujours sur un opérateur binaire. Ainsi, ¬p ∧ q correspond à la
formule syntaxiquement correcte (¬(p)) ∧ (q).

Correction de l’exercice 2 page 8 :


Il s’agit bien d’un mot sur VT et ce mot dérive de S par l’application successive de
r→ , r∧ , rp , rq , rr .

Correction de l’exercice 3 page 8 :


L’arbre syntaxique est représenté sur la figure A.1. Les parenthèses n’apparaissent
explicitement qu’à un unique endroit dans la grammaire.

Correction de l’exercice 4 page 9 :


On cherche à obtenir p ∧ (q → r). On peut utiliser la dérivation suivante :

257
a – corrections des exercices

prop.

implic prop. ↔ implic.

terme implic → terme

facteur terme ∨ fact.

prop.sec. fact. ∧ prop.sec.

prop. prim. ¬ prop.prim.

(prop.) p

Fig. A.1 — Arbre syntaxique correction de l’exercice 3

prop =⇒ implic.
=⇒ terme
=⇒ facteur
=⇒ facteur ∧ prop. sec.
=⇒ prop. sec. ∧ prop. sec.
=⇒ prop. prim. ∧ prop. sec.
=⇒ p ∧ prop. sec.
=⇒ p ∧ prop. prim.
=⇒ p ∧ (prop.)
..
=⇒ .
=⇒ p ∧ (q → r)

Correction de l’exercice 5 page 9 :


pq ∧ r → ¬

Correction de l’exercice 6 page 10 :


¬ → ∧pqr

Correction de l’exercice 7 page 10 :


r¬ ,r→ ,r∧ r ′′ ,r ′′ ,r ′′
Soit F = ¬(p ∧ q → r). On a S =⇒ F . Donc, on a S ¬ =⇒ → ∧
F ′′ . Ce qui donne
′′
F = ¬ → ∧pqr. On a omis ici volontairement les règles terminales.

258
calcul propositionnel

∧ r

p q

Fig. A.2 — Arbre syntaxique de l’expression ¬(p ∧ q → r).

Correction de l’exercice 8 page 10 :


Prenons un exemple. Soit F = ¬(p ∧ q → r). On peut représenter F par un arbre
syntaxique (représenté figure A.2). Cet arbre est indépendant de la notation utilisée.
Un tel arbre peut être parcouru de plusieurs façons différentes. Notons qu’un par-
cours de type Gauche-Racine-Droite (GRD) donnera la notation infixée, un parcours
de type GDR donnera la notation postfixée et un parcours de type RGD donnera la
notation préfixée.

Correction de l’exercice 9 page 11 :


En notation parenthésée, on obtient :
– VT = {x, y, z, . . .} ∪ {+, −, ×, /, ↑} ∪ {(, )} ∪ N
– VN = {S}
– RN = {r+ : (S, (S) + (S)), r− : (S, (S) − (S)), r× : (S, (S) × (S)), r/ :
(S, (S)/(S)), r↑ : (S, (S) ↑ (S))}
– RT = {rx : (S, x), rn : (S, n)}
En notation postfixée, on obtient :
– VT′ = {x, y, z, . . .} ∪ {+, −, ×, /, ↑} ∪ N
– VN = {S}
′ ′ ′
– RN = {r+ : (S, SS+), r− : (S, SS−), r× : (S, SS×), r/ : (S, SS/), r↑ : (S, SS ↑
)}
– RT = {rx : (S, x), rn : (S, n)}
L’expression algébrique x2 + y 2 s’écrit en notation parenthésée (en omettant les
r+ ,r↑ ,rx ,r2 ,r↑ ,ry ,r2
parenthèses inutiles) : (x ↑ 2) + (y ↑ 2) = F . On a : S =⇒ F . On
′ ′ ′ ′ ′ ′ ′
r+ ,r↑ ,rx ,r2 ,r↑ ,ry ,r2
′ ′
obtient donc S =⇒ F . Ce qui nous donne, F = x2 ↑ y2 ↑ +.

Correction de l’exercice 10 page 11 :


Soit p représentant l’expression « l’accusé est coupable » et q représentant « l’accusé
a un complice ». La déclaration du procureur général peut se modéliser : p → q. Or,
d’après le tableau de la figure 2.1, le seul cas où une telle implication est fausse est
lorsque p est vrai et q fausse. L’avocat réplique donc que non seulement son client
est coupable mais qu’en plus il n’a pas de complice !

259
a – corrections des exercices

Correction de l’exercice 11 page 15 :


L’écriture des tables de vérité de chacune des formules permet de prouver très faci-
lement les équivalences rappelées.

Correction de l’exercice 12 page 16 :


Une tautologie étant toujours vraie, la propriété est naturellement vérifiée.

Correction de l’exercice 13 page 16 :


Une application directe du théorème 1 permet de démontrer aisément le résultat.

Correction de l’exercice 14 page 17 :


9
Il a 22 fonctions booléennes à 9 variables. Ce qui représente largement plus que le
nombre présumé d’électrons dans l’Univers !

Correction de l’exercice 15 page 18 :


2
Il y a 22 = 16 fonctions booléennes à 2 variables. Elles sont données dans les
tableaux de la figure A.3.

p q ϕ0 ϕ1 ϕ2 ϕ3 ϕ4 ϕ5 ϕ6 ϕ7
         
         
         
         
p ∧ ¬p p∧q p ∧ ¬q p q ∧ ¬p q p xor q p∨q
p q ϕ8 ϕ9 ϕ10 ϕ11 ϕ12 ϕ13 ϕ14 ϕ15
         
         
         
         
p↓q p↔q ¬q q→p ¬p p→q p↑q p ∨ ¬p

Fig. A.3 — Les 16 fonctions booléennes à deux variables

260
calcul propositionnel

Correction de l’exercice 16 page 19 :

➊ {¬, ∧} est complet car ⊢ (F ∨ G) ↔ ¬(¬F ∧ ¬G).


➋ {¬, →} est complet car ⊢ (F ∨ G) ↔ (¬F → G).
➌ {↑} est complet car :
➀ ⊢ (¬K) ↔ (p ↑ p) (voir ϕ14 sur le tableau de la figure A.3)
➁ ⊢ (K1 ∧ K2 ) ↔ ((K1 ↑ K2 ) ↑ (K1 ↑ K2 )) (car ⊢ (K1 ↑ K2 ) ↔ ¬(K1 ∧ K2 ))
➍ {↓} est complet car :
➀ ⊢ (¬K) ↔ (K ↓ K) (voir ϕ8 sur le tableau de la figure A.3)
➁ ⊢ (K1 ∨ K2 ) ↔ ((K1 ↓ K2 ) ↓ (K1 ↓ K2 )) (car ⊢ (K1 ↓ K2 ) ↔ ¬(K1 ∨ K2 ))

Correction de l’exercice 17 page 20 :

➊ Dans {¬, ∨}, p ∧ q → r s’écrit : ¬p ∨ ¬q ∨ r


➋ Dans {↓}, p ∧ q → r s’écrit : (((p ↓ p) ↓ (q ↓ q)) ↓ ((p ↓ p) ↓ (q ↓ q)) ↓ r) ↓
(((p ↓ p) ↓ (q ↓ q)) ↓ ((p ↓ p) ↓ (q ↓ q)) ↓ r)

Correction de l’exercice 18 page 21 :


Soit F = (p ∧ q ∧ r) ∨ (p ∧ q ∧ ¬r) ∨ (p ∧ ¬q ∧ r),
⊢F ↔ (p ∧ q ∧ r) ∨ (p ∧ q ∧ ¬r) ∨ (p ∧ q ∧ r) ∨ (p ∧ ¬q ∧ r)
(p ∧ q) ∨ (r ∧ ¬r) ∨ (p ∧ r) ∨ (q ∧ ¬q)
(p ∧ q) ∨ (p ∧ r)
On peut aussi le montrer en calculant les tables de vérités.

Correction de l’exercice 19 page 21 :


On démontre ce théorème par récurrence sur le nombre de variables considérées :
➊ n = 1 immédiat
➋ On suppose le résultat vérifié pour toutes les formules à au plus n variables. Soit
F une formule portant sur n+1 variables. F = F (p1 , . . . , pn+1 ). Un peu comme
lors de la démonstration du théorème 2, on décompose F en deux fonctions à
n variables telles que : F ′ (p1 , . . . , pn ) = F (p1 , . . . , pn , ) et F ′′ (p1 , . . . , pn ) =
F (p1 , . . . , pn , ). On a alors :
⊢ F ↔ (¬pn+1 ∧ F ′ (p1 , . . . , pn )) ∨ (pn+1 ∧ F ′′ (p1 , . . . , pn )
On peut alors appliquer le théorème 4 sur les formules F ′ et F ′′ . On obtient :
⊢ F ↔ (¬pn+1 ∧ (H1′ ∨ . . . ∨ Hℓ′ ) ∨ (pn+1 ∧ (H1′′ ∨ . . . ∨ Hm
′′
)))
Ce qui s’écrit :
′′
⊢ F ↔ (¬pn+1 ∧ H1′ ) ∨ . . . ∨ (¬pn+1 ∧ Hℓ′ ) ∨ (pn+1 ∧ H1′′ ) ∨ . . . ∨ (pn+1 ∧ Hm )
Comme les Hi′ et les Hj′′ sont des conjonctions de littéraux, on a le résultat.

261
a – corrections des exercices

Correction de l’exercice 20 page 22 :


La formule ¬F peut être mise sous forme normale disjonction (théorème 4). On a
donc :

⊢ ¬F ↔ H1 ∨ . . . ∨ Hn
⊢ ¬¬F ↔ ¬(H1 ∨ . . . ∨ Hn )
⊢F ↔ ¬H1 ∧ . . . ∧ ¬Hn

Comme les Hi sont des disjonctions de littéraux, ¬Hi est une conjonction de littéraux.
On a donc le résultat.

Correction de l’exercice 21 page 22 :


Un diagramme de Karnaugh à cinq variables (a, b, c, d, e) a cette allure :
abc
de        





Correction de l’exercice 22 page 23 :


Les cinq affirmations recueillies peuvent être modélisées de la façon suivante (d’une
manière générale, un littéral positif fait référence à la présence de la personne
référencée en cours et un littéral négatif à son absence) :
➊ A
➋ ¬C ∧ ¬L
➌ ¬L ∧ ¬A
➍ ¬A
➎ A
Le diagramme suivant reporte les conditions de vérification de chacune des affirma-
tions.
AC
L    
 (2) (3) (4) (3) (4) (1) (5) (1) (2) (5)
 (4) (4) (1) (5) (1) (5)
Seules deux situations vérifient trois affirmations à la fois : lorsque Cale et Lelinge
sèchent. Notons qu’on ne peut rien déduire sur la présence d’Archiduc au cours et
encore moins sur Sahara.

Correction de l’exercice 23 page 23 :


On obtient : (¬q ∧ ¬r) ∨ (¬p ∧ ¬r) ∨ (p ∧ q ∧ r).

262
calcul propositionnel

Correction de l’exercice 24 page 23 :


Les  permettent d’obtenir la forme normale conjonctive. En effet, considérer les
 comme proposé pour les  permet d’obtenir une forme normale disjonctive de
la négation de la formule F représentée. Soit ¬F = H1 ∨ . . . ∨ Hn . On obtient
alors : ¬¬F = F = ¬(H1 ∨ . . . ∨ Hn ) = ¬H1 ∧ . . . ∧ ¬Hn . Comme les Hi sont
des conjonctions de littéraux, ¬Hi est bien une disjonction de littéraux, une clause.
La méthode pour obtenir une forme normale conjonctive à partir d’un diagramme
de Karnaugh consiste donc à : considérer les conditions d’obtention d’un , en
considérant la disjonction des négations des valeurs des variables et considérant la
conjonction de ces différentes clauses.

Correction de l’exercice 25 page 23 :


Les  du diagramme de la figure 2.9 donnent la forme canonique suivante :

(p ∨ q ∨ ¬r) ∧ (p ∨ ¬q ∨ ¬r) ∧ (¬ ∨ ¬q ∨ r) ∧ (¬p ∨ q¬r)

qui peut se simplifier en :

(p ∨ r) ∧ (q ∨ r) ∧ (¬p ∨ ¬q ∨ r)

Correction de l’exercice 26 page 24 :


On nous donne une forme normale disjonctive permettant d’obtenir les conditions
d’ouverture de la porte du coffre. Ce que l’on cherche, c’est plutôt une forme normale
conjonctive. En effet, chaque clause correspondra à une serrure dont les clefs seront
distribuées à chacune des personnes mentionnées dans la clause. Ainsi, il faudra que
toute les serrures soient ouvertes pour permettre l’ouverture du coffre. Le nombre de
clauses dans la forme normale conjonctive nous donnera donc le nombre de serrures
nécessaires.
Soit la variable propositionnelle a (respectivement b, c, d et e) correspondant
à la présence du directeur (respectivement secrétaire général, caissier, comptable,
adjoint du caissier). F est la formule du calcul propositionnel précisant les conditions
d’ouvertures du coffre. L’énoncé nous précise que :

F = (a ∧ b) ∨ (a ∧ c ∧ d) ∨ (b ∧ d ∧ e)

On cherche à mettre F sous forme normale conjonctive. On peut remarquer


que la nature physique du problème nous conduit à considérer que le résultat (sous
forme simplifiée) ne peut faire apparaı̂tre des littéraux négatifs. En effet, on ne peut
interdire la présence d’une personne pour l’ouverture du coffre.
À l’aide du diagramme de Karnaugh de F reporté dans la figure A.4, on obtient
la forme normale conjonctive suivante :

(a ∨ b) ∧ (a ∨ d) ∧ (a ∨ e) ∧ (b ∨ d) ∧ (b ∨ c)

263
a – corrections des exercices

Ceci montre donc qu’il faut au minimum 5 serrures dont les différentes clés sont
distribuées telles que dans la formule ci-dessus.
On peut retrouver ce résultat en travaillant directement sur la forme normale
disjonctive. En effet,
F ↔ (a ∧ b) ∨ (a ∧ c ∧ d) ∨ (b ∧ d ∧ e)
↔ ((a ∨ a) ∧ (b ∨ a) ∧ (a ∨ c) ∧ (b ∨ c) ∧ (a ∨ d) ∧ (b ∨ d)) ∨ (b ∧ d ∧ e) −distribution
↔ (a ∧ (b ∨ c) ∧ (b ∨ d)) ∨ (b ∧ d ∧ e) −absorption a, a ∨ b, a ∨ c, a ∨ d
↔ (a ∨ b) ∧ (a ∨ d) ∧ (a ∨ e) ∧ (b ∨ c ∨ b) ∧ (b ∨ c ∨ d) ∧ (b ∨ c ∨ e) ∧ (b ∨ d ∨ b)
∧(b ∨ d ∨ d) ∧ (b ∨ d ∨ e) −distribution
↔ (a ∨ b) ∧ (a ∨ d) ∧ (a ∨ e) ∧ (b ∨ c) ∧ (b ∨ d) −absorption

abc
de        
        
        
        
        

Fig. A.4 — Diagramme de Karnaugh de (a ∧ b) ∨ (a ∧ c ∧ d) ∨ (b ∧ d ∧ e)

Correction de l’exercice 27 page 25 :

– théorème 5. On a : a = a ⊕ (a ⊗ a) = (a ⊕ a) ⊗ (a ⊕ a) = a ⊕ a. De même,
a = a ⊗ (a ⊕ a) = (a ⊗ a) ⊕ (a ⊗ a) = a ⊗ a.
– théorème 6. On a : a ⊕ ⊤ = a ⊕ (a ⊕ a) = (a ⊕ a) ⊕ a = (a ⊕ a) ⊕ a ⊕ a = ⊤.
De même, a ⊗ ⊥ = a ⊗ (a ⊗ a) = (a ⊗ a) ⊗ a = (a ⊗ a) ⊗ a ⊗ a = ⊥.
– théorème 7. On a (a⊕b)⊗(a⊗b) = (a⊗a⊗b)⊕(b⊗a⊗b) = (⊥⊗b)⊕(a⊗⊥) =
⊥ ⊕ ⊥ = ⊥. On montre de manière similaire que (a ⊕ b) ⊕ (a ⊗ b) = ⊤. Ce qui
montre que a ⊕ b = a ⊗ b. On démontre de la même façon que a ⊗ b = a ⊕ b.
– théorème 8. On a :

a ⊕ (a ⊗ b) = (a ⊗ ⊤) ⊕ (a ⊗ b)
= (a ⊗ (b ⊕ b)) ⊕ (a ⊗ b)
= (a ⊗ b) ⊕ (a ⊗ b) ⊕ (a ⊗ b)
= (a ⊗ b) ⊕ (a ⊗ b)
= (a ⊗ (b ⊕ b))
= (a ⊗ ⊤)
= a

On démontre de la même façon l’autre résultat.

Correction de l’exercice 28 page 25 :


On a x ⊕ x = ⊤ et x ⊗ x = ⊥, ceci montre que le complémentaire de x est x (en
plus de montrer que le complémentaire de x est x). En d’autres termes : x = x.

264
calcul propositionnel

Correction de l’exercice 29 page 26 :


On suppose que a et b (b 6= a) sont tous deux compléments de x, on a alors :

x⊕a=⊤ x⊗a=⊥ x⊕b=⊤ x⊗b=⊥

On a alors :
1: prop. ➍ a=a⊕⊥
2: b compl. a = a ⊕ (x ⊗ b)
3: prop. ➌ a = (a ⊕ x) ⊗ (a ⊕ b)
4: prop. ➊ a = (x ⊕ a) ⊗ (a ⊕ b)
5: a compl. a = ⊤ ⊗ (a + b)
6: prop. ➍ a = (a ⊕ b)
On montre de la même manière (en échangeant les rôles de a et b) que b = (a⊕b).
Comme l’opération ⊕ est commutative (propriété ➊), on obtient a = b.

Correction de l’exercice 30 page 26 :


On cherche à montrer que x 6 x = ⊥. On a :

(x 6 x) ⊗ (x 6 x) = x 6 x −idempotence de ⊗
(x ⊗ x) 6 (x ⊗ x) 6 (x ⊗ x) 6 (x ⊗ x) = x 6 x −distribution
x6x6x6x = x 6 x −idempotence
x6x = ⊥ −simplification

Correction de l’exercice 31 page 27 :


Soit ϕ : E → E, une fonction qui à x ∈ E associe ⊤6x. ϕ est une bijection. En effet,
on vérifie que ϕ◦ϕ = Id . ϕ est en fait la complémentation. On vérifie que : ϕ(⊤) = ⊥
et ϕ(⊥) = ⊤. Posons x ⊕′ y = ϕ(ϕ(x) ⊗ ϕ(y)). Il s’agit de la définition classique du
⊕ à partir du ⊗ et de la complémentation. On obtient donc naturellement un treillis
de Boole. Il suffit juste de vérifier que pl et pl′ sont les mêmes opérations. On a :

x ⊕′ y = ϕ((⊤ 6 y) ⊗ (⊤ 6 y)) −definition


= ϕ(⊤ 6 x 6 y 6 (x ⊗ y)) −distribution
= ϕ(ϕ(x 6 y 6 (x ⊗ y)) −definition
= x 6 y 6 (x ⊗ y) ϕ ◦ ϕ = Id
= x⊕y

Correction de l’exercice 32 page 27 :


La table de vérité du xor correspond à la fonction ϕ6 du tableau de la figure A.3 de
la page 260.

265
a – corrections des exercices

Correction de l’exercice 33 page 29 :


Montrons que f est un homomorphisme (c’est-à-dire qu’il préserve la structure) :
➊ Montrons que f (F̂ ) = f (F̂ )

f (F̂ ) = ˆ )
f (¬F
= {δ ∈ {, }P | δ(¬F ) = }
= {δ ∈ {, }P | δ(F ) = }
= {δ ∈ {, }P | δ(F ) = }
= f (F̂ )

➋ Montrons que f (F̂ ⊗ Ĝ) = f (F̂ ) ∩ f (Ĝ).

f (F̂ ⊗ Ĝ) = f (F\


∧ G)
= {δ ∈ {, }P | δ(F ∧ G) = }
= {δ ∈ {, }P | δ(F ) =  et δ(G) = }
= {δ ∈ {, }P | δ(F ) = } ∩ {δ ∈ {, }P | δ(G) = }
= f (F̂ ) ∩ f (Ĝ)

Montrons ensuite que f est injective. Il suffit pour cela de montrer que son noyau
ˆ Soit F̂ ∈ F/≡ tel que f (F̂ ) = ∅ l’élément neutre de P({, }P ).
est réduit à .
Alors, {δ ∈ {, }P | δ(F ) = } = ∅. Donc, ∀δ, δ(F ) = . D’où, F̂ = . ˆ f est
donc bien un isomorphisme. Il permet de démontrer le théorème précédent.

Correction de l’exercice 34 page 29 :


∅ ⊢ F montre que F est une tautologie (⊢ F ) car elle est vraie sans condition.

Correction de l’exercice 35 page 29 :


A ⊢ G est équivalent à ∀δ, δ(F1 ) = · · · = δ(Fn ) =  → δ(G) = . Ce qui peut
s’écrire : ∀δ, δ(F1 ∧· · ·∧Fn ) =  → δ(G) = , ou encore, ∀δ, δ((F1 ∧· · ·∧Fn ) → G) =
, ce qui montre que (F1 ∧ · · · ∧ Fn ) → G est une tautologie : ⊢ (F1 ∧ · · · ∧ Fn ) → G.

Correction de l’exercice 36 page 30 :


Le théorème 14 montre que A ⊢ F est équivalent à ⊢ (F1 ∧ · · · ∧ Fn ) → G ou encore
que ¬((F1 ∧ · · · ∧ Fn ) → G) est une formule inconsistante. Or, cette dernière formule
peut s’écrire (on utilise les propriétés faisant le lien entre → et ∨ et les lois de de
Morgan) : F1 ∧ . . . ∧ Fn ∧ ¬G.

266
calcul propositionnel

Correction de l’exercice 37 page 31 :


Si on a J |= A avec J = ∅, A est alors un théorème car sa démonstration ne dépend
que d’axiomes et d’aucune hypothèse particulière.

Correction de l’exercice 38 page 31 :


Il suffit de montrer (à l’aide la méthode que l’on choisira) que ⊢ (p → q ∧ p) → q,
⊢ (p → q ∧ ¬q) → ¬p et que ⊢ (p → q ∧ q → r) → (p → r). Cela montre que ces
règles sont « valides ».

Correction de l’exercice 39 page 31 :


La démonstration de A sous les hypothèses de J1 ne fait intervenir que des axiomes
ou des énoncés de J1 qui sont aussi des éléments de J2 . La démonstration de A sous
les hypothèses J2 est donc la même. On a donc naturellement J2 |= A.

Correction de l’exercice 40 page 32 :


En effet, pour réaliser la preuve de A sous les hypothèses J2 , il suffit de prendre
la preuve de A sous les hypothèses J1 et, à chaque fois, qu’un énoncé B de J1 est
utilisé de le remplacer par sa preuve sous les hypothèses J2 .

Correction de l’exercice 41 page 32 :


Les tables de vérités des trois formules montrent aisément ce résultat.

Correction de l’exercice 42 page 33 :


Il suffit d’utiliser la règle du modus ponens sur An → B pour le prouver.

Correction de l’exercice 43 page 34 :


Pour démontrer la proposition ➊, on utilise le corollaire 1 du théorème 3. On a :

|= (A → B) → ((B → C) → (A → C)) ≡ (A → B) |= ((B → C) → (A → C))


≡ A → B, B → C |= A → C
≡ A → B, B → C, C |= C

Cette dernière proposition se démontre tout simplement par l’application du modus


ponens.

267
a – corrections des exercices

1: hyp A→B
2: hyp B→C
3: hyp C
4: mp 1 · 3 B
5: mp 2 · 4 C
On utilise la même démarche pour montrer les autres résultats de la proposi-
tion 4.

Correction de l’exercice 44 page 36 :


Il faut montrer que {ℓ ∨ C1′ , ¬ℓ ∨ C2′ } ⊢ C1′ ∨ C2′ . Pour cela, il suffit donc de montrer
que : ⊢ ((ℓ ∨ C1′ ) ∧ (¬ℓ ∨ C2′ )) → (C1′ ∨ C2′ ). Pour cela, on peut se contenter de
montrer que lorsque la prémisse de l’implication est vraie, sa conclusion n’est pas
fausse (c’est le seul cas qui mettrait en défaut l’implication considérée). Supposons
donc (ℓ ∨ C1′ ) ∧ (¬ℓ ∨ C2′ ) vérifié. On a alors deux cas possibles :
➀ ℓ est vrai. Comme ¬ℓ est alors faux, nécessairement C2′ est vraie (sinon le ∧
serait faux). Par voie de conséquence, C1′ ∨ C2′ est aussi vrai.
➁ ℓ faux. Nécessairement, C1′ est vrai. Par voie de conséquence, C1′ ∨ C2′ aussi.
On a donc bien prouvé la validité du principe de résolution.

Correction de l’exercice 45 page 38 :

➊ modus ponens : p, p → q ⊢ q. On a bien p, ¬p ∨ q ⊢reso q.


➋ modus tollens : p → q, ¬q ⊢ ¬p. On a bien ¬p ∨ q, ¬q ⊢reso ¬p
➌ syllogisme : p → q, q → r ⊢ p → r. On a bien ¬p ∨ q, ¬q ∨ r ⊢reso ¬p ∨ r.

Correction de l’exercice 46 page 38 :


On peut modéliser les affirmations de l’énoncé de la façon suivante (A désigne la
proposition « A est coupable ») :
➊ (A ∧ B) → C
➋ A → (B ∨ C)
➌ C→D
➍ ¬A → C
Sous forme clausale, on obtient :
➊ ¬A ∨ ¬B ∨ C
➋ ¬A ∨ B ∨ C
➌ ¬C ∨ D
➍ A∨C

268
calcul propositionnel

On peut démontrer C (ligne 5) et D de la façon suivante :


1: ➊ ¬A ∨ ¬B ∨ C
2: ➋ ¬A ∨ B ∨ C
3: reso ¬A ∨ C
4: ➍ A∨C
5: reso C
6: ➌ ¬C ∨ D
7: reso D
On peut aussi faire des preuves par réfutation.
1: hyp ¬C
2: ➊ ¬A ∨ ¬B ∨ C
3: reso ¬A ∨ ¬B
4: ➍ A∨C
5: reso ¬B ∨ C
6: ➋ ¬A ∨ B ∨ C
7: reso ¬A ∨ C
8: ➍ A∨C
9: reso C
10: hyp ¬C
11: reso 
On ne peut être sûr d’avoir démontré tout ce qui était possible, mais l’écriture
du diagramme de Karnaugh de la conjonction des affirmations considérés montre
qu’il s’agit des deux seuls résultats démontrables.

Correction de l’exercice 47 page 39 :


Un atome possède une valeur de vérité, pas le terme (qui n’est qu’un nom).

Correction de l’exercice 48 page 39 :

➊ il est faux de dire que tout nombre est pair : SS0ḃ = c signifie que c = 2b,
∃b, (SS0 · b) signifie donc que c est pair, ∀c, ∃b(SS0 · b = c) signifie donc que
tout nombre est pair.
➋ tout nombre est impair
➌ ∀c∃b, 2b 6= c (vrai – il suffit de prendre b = c + 1)
➍ il n’existe pas de nombre qui soit la moitié de tous les autres (après le ¬, on a
∃b∀c, 2b = c)
➎ ∃b∃c, 2b 6= c
➏ ∃b∀c, 2b 6= c (non vérifié – par exemple, si on prend c = 2b)

Correction de l’exercice 49 page 39 :

➊ ∃b SSSSSS0 = (SS0 · b)

269
a – corrections des exercices

➋ ¬∃b SS0 = (b · b)
➌ ∃b∃c S . . . S 0 = (((b · b) · b) + ((c · c) · c))
| {z }
1729

➍ ∀a¬∃b∃c ((a · a) · a) = (((Sb · Sb) · Sb) + ((Sc · Sc) · Sc)) (on élimine le cas 0)
➎ ¬∃b∃c (SSb · SSc) = SSSSS0
➏ ∀b∃c¬∃d∃e (SSd·SSe) = (b+Sc) (b+Sc est premier et b+Sc est nécessairement
plus grand que b).

Correction de l’exercice 50 page 40 :


1: axiome A3 ∀a∀b, (a + Sb) = S(a + b)
2: spécification sur 1 (S0/a) ∀b, (S0 + Sb) = S(S0 + b)
3: spécification sur 2 (0/b) (S0 + S0) = S(S0 + 0)
4: axiome A2 ∀a, (a + 0) = a
5: spécification sur 4 (S0/a) (S0 + 0) = S0
6: succession S(S0 + 0) = SS0
7: transitivité 3 · 6 (S0 + S0) = SS0
On a montré que 1 + 1 = 2.

Correction de l’exercice 51 page 40 :


1: axiome A5 ∀a∀b, (a · Sb) = ((a · b) + a)
2: spécification (S0/a) ∀b, (S0 · Sb) = ((S0 · b) + S0)
3: spécification (0/b) (S0 · S0) = ((S0 · 0) + S0)
4: axiome A3 ∀a∀b, (a + Sb) = S(a + b)
5: spécification (S0 · 0/a) ∀b, ((S0 · 0) + Sb) = S((S0 · 0) + b)
6: spécification (0/b) ((S0 · 0) + S0) = S((S0 · 0) + 0)
7: axiome A2 ∀a, (a + 0) = a
8: spécification (S0 · 0/a) ((S0 · 0) + 0) = (S0 · 0)
9: axiome A4 ∀a, (a · 0) = 0
10: spécification (S0/a) (S0 · 0) = 0
11: transitivité 8 · 10 ((S0 · 0) + 0) = 0
12: succession S((S0 · 0) + 0) = S0
13: transitivité 6 · 12 ((S0 · 0) + S0) = S0
14: transitivité 3 · 13 (S0 · S0) = S0
On a montré que 1 × 1 = 1.

A.2 Calcul des prédicats


Correction de l’exercice 52 page 45 :
Soient les prédicats l(x) : « x est un lion », f (x) : « x est féroce », c(x) : « x boit du
café », s(x) : « x est un singe », st(x) : « x est un soldat », m(x) : « x est malicieux ».
Les expressions à modéliser sont alors :

270
calcul des prédicats

➀ ∀x l(x) → f (x)
➁ ∃x l(x) ∧ ¬c(x)
➂ ∀x s(x) → ¬st(x)
➃ ∀x s(x) → m(x)

Correction de l’exercice 53 page 46 :

terme terme
z }| { z }| {
➊ ∃y(R(|{z}
x , f (y) , z) → (v(|{z}
b ) ∨ s(|{z}
a , g(b) ))). Les variables de la formule
| {z } |{z}
var atome cte cte atome
sont : x, y et z. x a une occurrence (libre), y a une occurrence (liée) et z, une
occurence (libre).
➋ (∀xp(x)) ∨ (∃yf (x) = y) Les variables sont x et y. f est une fonction, p est un
symbole de prédicat. x a deux occurrences (une liée, la première et une libre).
y a une occurrence (liée).
➌ ∀x∀y(x = y → f (x) = f (y)). Les variables sont x et y (f est une fonction).
Elles ont chacune deux occurrences, toutes les deux liées.

Correction de l’exercice 54 page 48 :

– HG signifie « pour tous êtres humains x, y, z, si (x est le père de y et y est le


père de z) alors (x est un grand-père de z) ».
– HP signifie « pour tout individu x il existe un individu y tel que y est le père
de x », soit plus simplement, « tout individu a un père ».
– C signifie « tout individu a un grand-père ».
– D signifie « si z est le père de la mère de x alors z est un grand père de x ».

Correction de l’exercice 55 page 48 :


On peut représenter les choses de la façon suivante :
a

c b

P (x, y) signifie « x précède immédiatement y » et G(x, y) signifie « x suit immé-


diatement y ». La formule HP signifie que tout point a un prédécesseur immédiat. La
formule HG signifie que pour tous points x, y et z si x précède immédiatement y et
si y précède immédiatement z, alors x suit immédiatement z. Finalement la formule
C signifie que tout point a un successeur immédiat. La formule D signifie que pour
tout z et pour tout x, si z précède immédiatement f (x), alors z suit immédiatement
x.

271
a – corrections des exercices

Correction de l’exercice 56 page 49 :


Les quatre formules sont vraies dans cette interprétation (sauf peut-être HP : soit
il y a un premier homme et il n’a pas de père, soit on se retrouve peu à peu, en
remontant l’évolution, à inclure dans le genre humain des singes, des poissons, des
bactéries, . . .).
HP , HG et C sont vraies dans l’interprétation de l’exercice 55. Ce n’est pas le
cas pour D. En effet, c précède f (a) = a sans pour autant que c suive immédiatement
a.

Correction de l’exercice 57 page 50 :

➀ les propositions ➊ à ➍ sont vraies, ➎ ne l’est pas (il suffit de considérer x = 0)


et ➏ non plus (il suffit de considérer x = 1 et y = 2)
➁ les propositions ➊, ➌ et ➍ sont vraies. ➋ ne l’est pas (ce n’est pas une propriété
de (), ➎ non plus (il suffit de considérer x = ∅) et ➏ non plus (il suffit par
exemple de considérer x = {1, 2} et y = {1, 2, 3}).
➂ toutes les propositions sont vraies (entre deux rationnels, il y a toujours un
rationnel)
➃ toutes les propositions sont vraies
➄ toutes les propositions sont vraies sauf la proposition ➎ (à cause de 0)
➅ seules les propositions ➊, ➍, ➎ et ➏ sont vraies, les autres sont fausses (➋ car
la négation de ≥ est < et ➌ car x ≥ x)
➆ toutes les propositions sont vraies (0 n’est en effet plus le plus petit élément)

Correction de l’exercice 58 page 52 :


Ces deux expressions n’ont pas le même sens. C’est pour cela que la continuité simple
est différente de la continuité uniforme.

Correction de l’exercice 59 page 52 :


On a :
(∀xF ) ∨ (∀xH) → ∀x(F ∨ H)

∃x(F ∧ H) → (∃xF ) ∧ (∃xH)

272
calcul des prédicats

Correction de l’exercice 60 page 53 :


Soit F = (∀x∃y∀tR(x, z, y)) → (∃x∀y∃tS(x, z, t)) On a :
F ≡ ∃x∀y∃t¬R(x, z, y) ∨ ∃x∀y∃tS(x, z, t)
≡ ∃x(∀y∃t¬R(x, z, y) ∨ ∃x∀y∃tS(x, z, t))
≡ ∃x(∀y∃t¬R(x, z, y) ∨ ∃x∃tS(x, z, t))
≡ ∃x∀y∃t(¬R(x, z, y) ∨ S(x, z, t))

Correction de l’exercice 61 page 53 :


On obtient ∃y∀x(((¬A(x) ∨ B(y)) ∧ ¬C(x)) ∨ D(y))

Correction de l’exercice 62 page 53 :


On obtient ∃x∃t(¬R(x, z, t) ∨ S(x, z, t)) et ∃x∀z∀z ′ ∃t(¬R(x, z, t) ∨ S(x, z ′ , t))

Correction de l’exercice 63 page 55 :


« f est continue » s’écrit : ∀x∀ǫ∃η∀y(|x − y| < η → |f (x) − f (y)| < ǫ). La forme de
Skolem de cette formule est : ∃g∀x∀ǫ∀y(|x − y| < g(x, ǫ) → |f (x) − f (y)| < ǫ) avec
g : R × R∗+ → R∗+ , (x, ǫ) 7→ η.
« f est uniformément continue » s’écrit : ∀ǫ∃η∀x∀y(|x − y| < g(x, ǫ) → |f (x) −
f (y)| < ǫ). La forme de Skolem de cette formule est : ∃g∀ǫ∀x∀y(|x − y| < g(ǫ) →
|f (x) − f (y)| < ǫ) avec g : R∗+ → R∗+ , ǫ 7→ η.
La différence entre les deux est maintenant flagrante et particulièrement expli-
cite.

Correction de l’exercice 64 page 55 :


C’est une conséquence directe du corollaire 1 du théorème 4 page 21 et du théorème 21.
En effet, toute formule peut se mettre sous forme de Skolem. Ensuite, la partie
sans quantificateur peut toujours être mise sous forme normale, ce qui montre le
théorème.

Correction de l’exercice 65 page 56 :

F = ¬(∀x∃yp(x, y)) ∨ ∃y∀xp(x, y)


≡ ∃x∀y¬p(x, y) ∨ ∃y∀xp(x, y)
≡ ∃x∀y¬p(x, y) ∨ ∃x∀zp(z, x)
≡ ∃x(∀y¬p(x, y) ∨ ∀zp(z, y))
≡ ∃x∀y∀z(¬p(x, y) ∨ p(z, y)) (forme standard de Skolem)

273
a – corrections des exercices

On a donc : C = {¬p(a, y) ∨ p(z, a)}, forme clausale de F .

Correction de l’exercice 66 page 57 :


Les énoncés proposés se modélisent de la façon suivante. On considère les prédicats :
H(x), « x est heureux » ; P (x, y), « x est parent de y » ; V o(x), « x peut voler » ;
V e(x), « x est vert » et R(x), « x est rose ».
➊ ∀x∀yP (x, y) → V o(y)
➋ ∃xP (x, Archie) ∧ (V e(x) ∨ R(x))
➌ ∀x(∀y(P (x, y) → V o(y)) → H(x))
➍ ∀xV e(x) → V o(x)
➎ ∀x((∃y(P (y, x) ∧ (V e(y) ∨ R(y))) → V e(x))
On peut remarquer que ➎ est équivalent à : ∀x∀y(P (y, x)∧(V e(y)∨R(y))) → V e(x)).
La mise sous forme clausale des formules considérées donne :
➌ Soit F3 = ∀x(∀y(P (x, y) → V o(y)) → H(x)).

F3 ≡ ∀x(∃y(P (x, y) ∧ ¬V o(y))) ∨ H(x)


≡ ∀x∃y((P (x, y) ∨ H(x)) ∧ (¬V o(y) ∨ H(x)))
≡ ∃f ∀x((P (x, f (x)) ∨ H(x)) ∧ (¬V o(f (x)) ∨ H(x)))

D’où : CF3 = {P (x1 , f (x1 )) ∨ H(x1 ), ¬V o(f (x2 )) ∨ H(x2 )}.


➍ Soit F4 = ∀xV e(x) → V o(x).

F4 ≡ ∀x¬V e(x) ∨ V o(x)

D’où : CF4 = {¬V e(x3 ) ∨ V o(x3 )}.


➎ Soit F5 = ∀x(∃y(P (y, x) ∧ (V e(y) ∨ R(y)))) → V e(x).

F5 ≡ ∀x((∀y(¬P (y, x) ∨ (¬V e(y) ∧ ¬R(y)))) ∨ V e(x))


≡ ∀x∀y(¬P (y, x) ∨ ¬V e(y) ∨ V e(x)) ∧ (¬P (y, x) ∨ ¬R(y) ∨ V e(x))

D’où : CF5 = {¬P (y1 , x4 ) ∨ ¬V e(y1 ) ∨ V e(x4 ), ¬P (y2 , x5 ) ∨ ¬R(y2 ) ∨ V e(x5 )}


On a donc C = CF3 ∪ CF4 ∪ CF5 .

Correction de l’exercice 67 page 57 :

➊ tout élément a un unique successeur


➋ 0 n’est successeur d’aucun élément
➌ tout élément non nul a un prédécesseur unique

Correction de l’exercice 68 page 58 :

274
calcul des prédicats

➊ définition de la réflexivité
➋ définition de l’antisymétrie
➌ définition de la transitivité

Correction de l’exercice 69 page 58 :


Pour avoir un groupe, il faut et il suffit que f soit associative, f possède un élément
neutre (e), chaque élément possède un symétrique pour f . Ceci s’écrit :
➊ associativité : ∀x∀y∀zf (f (x, y), z) = f (x, f (y, z))
➋ élément neutre : ∀xf (e, x) = x ∧ ∀xf (x, e) = x
➌ symétrique : ∀x∃yf (x, y) = f (y, x) ∧ ∀x∃yf (x, y) = e

Correction de l’exercice 70 page 59 :


57 = 25 + 24 + 23 + 20 = {0, 3, 4, 5}

Correction de l’exercice 71 page 59 :


(2, 1) = {{2}, {2, 1}} = {4, 6} = 80

Correction de l’exercice 72 page 59 :


25 ∩ 57 = {0, 3, 4} ∩ {0, 3, 4, 5} = {0, 3, 4} = 25

Correction de l’exercice 73 page 59 :


11 = {0, 1, 3} donc ⋒11 = 0 ∪ 1 ∪ 3 = ∅ ∪ {0} ∪ {0, 1} = {0, 1} = 3. De même,
8 = {3} donc ⋒8 = 3 aussi.

Correction de l’exercice 74 page 59 :


P(5) = P({0, 2}) = {∅, {0}, {2}, {0, 2}} = {0, 1, 4, 5} = 51

Correction de l’exercice 75 page 60 :


⋒P(x) = x En effet, par définition, tous les éléments de P(x) sont inclus dans x
qui est lui-même un élément de P(x). La réunion des éléments de P(x) donne donc
nécessairement x.

275
a – corrections des exercices

Correction de l’exercice 76 page 60 :


34 = {1, 5} = {{0}, {0, 2}} = (0, 2) = (0, 0, 0) car 2 = {1} = {{0}} = (0, 0). 34 est
donc l’application vide l’ensemble vide vers l’ensemble vide.

Correction de l’exercice 77 page 61 :

H0 = {a, b}
H1 = {a, b} ∪ {f (a), f (b), g(a), g(b)}
H2 = H1 ∪ {f 2 (a), f 2 (b), g 2 (a), g 2 (b), f (g(a)), f (g(b)), g(f (a)), g(f (b))}
..
.
Hi = {f n (g p (b)), f k (g ℓ (a)) | ∀x ∈ {n, p, k, ℓ}, x ≤ i}

D’où : H∞ = {f n (g p (b)), f k (g ℓ (a)) | ∀(n, p, k, ℓ) ∈ N4 }.

Correction de l’exercice 78 page 62 :


On a H∞ = {b, f (b), b(b), f 2 (b), f (g(b)), . . .}. Un ensemble fini d’instances de base
insatisfiable est alors : C ′ = {¬P (g(b)) ∨ Q(f (g(b)), g(b)), P (g(b)), ¬Q(f (g(b)), g(b))}

Correction de l’exercice 79 page 63 :


La négation de la formule à prouver est : ∃f ∀x(U (x) ∨ T (x)) ∧ (¬U (f (x)) ∨ T (x)) ∧
(¬T (f (x))). Sous forme clausale, on obtient : C = {U (x1 ) ∨ T (x1 ), ¬U (f (x2 )) ∨
T (x2 ), ¬T (f (x3 ))}. On a : H∞ = {f n (a)|n ∈ N}.
En considérant x3 = a, x2 = f (a), x1 = f 2 (a), et x3 = f (a), on obtient
un ensemble fini d’instances de base insatisfiable : C ′ = {¬T (f (a)), ¬U (f 2 (a)) ∨
T (f (a)), U (f 2 (a)) ∨ T (f 2 (a)), ¬T (f 2 (a))}.

Correction de l’exercice 80 page 64 :


On considère les prédicats ch(x), « x est une chandelle » ; ecl(x), « x est un objet
fait pour éclairer » ; malecl(x), « x est un objet qui éclaire mal ». La modélisation
des prémisses donne :
➊ ∃xch(x) ∧ malecl(x)
➋ ∀xch(x) → ecl(x)(∀x¬ch(x) ∨ ecl(x)
➌ ∃xecl(x) ∧ malecl(x) dont la négation est : ∀x¬ecl(x) ∨ ¬malecl(x)

276
calcul des prédicats

La forme clausale de cet ensemble de prémisses (en considérant de plus la


négation de la conclusion) est :
C = {ch(a), malecl(a), ¬ch(x1 ) ∨ ecl(x1 ), ¬ecl(x2 ) ∨ ¬malecl(x2 )}
Ici, H∞ = {a}, l’ensemble d’instance de base suivant est insatisfiable, validant ainsi
le raisonnement : C ′ = {ch(a), malecl(a), ¬ch(a) ∨ ecl(a), ¬ecl(a) ∨ ¬malecl(a)}.

Correction de l’exercice 81 page 64 :


On considère les prédicats s(x), « x est un singe » ; sdt(x), « x est un soldat » ;
mal(x) : « x est malicieux ». La formalisation du raisonnement donne :
➊ ∀xs(x) → ¬sdt(x)(¬s(x) ∨ ¬sdt(x))
➋ ∀xs(x) → mal(x)(¬s(x) ∨ mal(x))
➌ ∃xmal(x) ∧ ¬sdt(x) dont la négation est : ∀x¬mal(x) ∨ sdt(x)
La forme clausale est : C = {¬s(x1 )∨¬sdt(x1 ), ¬s(x2 )∨mal(x2 ), ¬mal(x3 )∨sdt(x3 )}.
On a H∞ = {a}. On ne trouve pas d’ensemble de clauses contradictoire. Par contre,
on peut montrer que C ′ = {¬s(a) ∨ ¬sdt(a), ¬s(a) ∨ mal(a), ¬mal(a) ∨ sdt(a)} est
satisfiable. Or, C ′ est maximal vis-à-vis de l’inclusion. Donc, tout ensemble d’ins-
tances de base est satisfiable. On peut alors appliquer le corollaire 1 du théorème 23,
invalidant ainsi le raisonnement.

Correction de l’exercice 82 page 66 :


D = {f (y, z), a, g(x)}

Correction de l’exercice 83 page 67 :


On utilise la technique proposée par [Chang et Lee, 1973]. On a : D0 = {f (y, z), a}.
Il n’y a pas de variable. Les expressions ne sont donc pas unifiables.

Correction de l’exercice 84 page 67 :


On utilise la technique proposée par [Chang et Lee, 1973]. On a : D0 = {f (a), y}.
On a σ1 = {f (a)/y}. W1 = W0 {f (a)/y} = {Q(f (a), g(x)), Q(f (a), x)}. On a :
D1 = {g(x), x}. Comme x a une occurrence dans g(x), l’algorithme s’arrête : les
expressions ne sont pas unifiables.

Correction de l’exercice 85 page 67 :


On utilise la technique proposée par [Chang et Lee, 1973]. On a : D0 = {f (a), y}.
On a σ1 = {f (a)/y}. W1 = W0 {f (a)/y} = {Q(f (a), g(x)), Q(f (a), z)}. On a : D1 =
{g(x), z}. σ2 = σ1 ◦ {g(x)/z}. W2 = W1 {g(x)/z} = {Q(f (a), g(x)), Q(f (a), g(x))}.
Les expressions sont identiques, donc σ1 ◦ σ2 = {f (a)/y, g(x)/z} est un unificateur
minimal des expressions considérées.

277
a – corrections des exercices

Correction de l’exercice 86 page 69 :


1: ➊ av(x1 ) → ¬al(x1 )
2: contraposition al(x1 ) → ¬av(x1 )
3: ➋ coq(x2 ) → av(x2 )
4: contraposition ¬av(x2 ) → ¬coq(x2 )
5: substitution {x1 /x2 } ¬av(x1 ) → ¬coq(x1 )
6: syllogisme 2 · 5 al(x1 ) → ¬coq(x1 )
7: substitution {x3 /x1 } al(x3 ) → ¬coq(x3 )

Correction de l’exercice 87 page 69 :


Les expressions ➊ à ➌ ont été modélisée à la correction de l’exercice 66. On a : On
considère les prédicats : H(x), « x est heureux » ; P (x, y), « x est parent de y » ;
V o(x), « x peut voler » ; V e(x), « x est vert » et R(x), « x est rose ». La forme
clausale de la conjonction de ces expressions est :

C = {P (x1 , f (x1 )) ∨ H(x1 ), ¬V o(f (x2 )) ∨ H(x2 ), ¬V e(x3 ) ∨ V o(x3 ),


¬P (y1 , x4 ) ∨ ¬V e(y1 ) ∨ V e(x4 ), ¬P (y2 , x5 ) ∨ ¬R(y2 ) ∨ V e(x5 )}

➍ Montrons que « les dragons sont enfant sont heureux ». Une modélisation de
cette expression est :
∀x(∀y¬P (y, x) → H(x))
La négation de cette expression est équivalente à :

∃x∀y¬P (y, x) ∧ ¬H(x)

Dont une forme clausale est :

C4 = {¬P (b, y), ¬H(a)}

On a H0 = {a} et H∞ = {{f n (a)|n ∈ N}}. On cherche à montrer que C ∪ Cs4


est insatisfaisable. Nous allons utiliser la résolution avec réfutation.
1: C4 ¬P (a, y)
2: C P (x1 , f (x1 )) ∨ H(x1 )
3: subst {a/x1 , f (a)/y} {¬P (a, f (a)), P (a, (a)) ∨ H(a)}
4: reso H(a)
5: C4 ¬H(a)
6: reso 
➎ Montrons que « les dragons verts sont heureux ». Une modélisation de cette
expression est :
∀x, V e(x) → H(x)
La négation de cette expression est équivalente à :

∃xV e(x) ∧ ¬H(x)

Dont une forme clausale est :

C5 = {V e(a), ¬H(a)}

278
logiques non classiques

On a H0 = {a} et H∞ = {{f n (a)|n ∈ N}}. On cherche à montrer que C ∪ Cs5


est insatisfaisable. Nous allons utiliser la résolution avec réfutation.
1: C5 ¬H(a)
2: C ¬V o(f (x2 )) ∨ H(x2 )
3: reso {a/x2 } ¬V o(f (a))
4: C V o(x3 ) ∨ ¬V e(x3 )
5: reso {f (a)/x3 } ¬V e(f (a))
6: C V e(x4 ) ∨ ¬V e(y1 ) ∨ ¬P (y1 , x4 )
7: reso {f (a)/x4 } ¬V e(y1 ) ∨ ¬P (y1 , f (a))
8: C P (x1 , f (x1 )) ∨ H(x1 )
9: reso {a/x1 , a/y1 } ¬V e(a) ∨ H(a)
10: C5 ¬H(a)
11: reso ¬V e(a)
12: C5 V e(a)
13: reso 

A.3 Logiques non classiques


Correction de l’exercice 88 page 74 :

1: hyp A→B
2: néc (A → B)

3: K (A → B) → A → B
4: mp 2 · 3 A → B
1: hyp A→B
2: contr ¬B → ¬A
➁ 3: ➀ ¬B → ¬A
4: contr ¬¬A → ¬¬B
5: déf ♦A → ♦B
1: M ¬A → ¬A
2: contr A → ¬¬A
3: déf A → ♦A
4: ➎ ♦A → ♦A
➂ 5: syll 3 · 4 A → ♦A
6: règl S5 ♦A → A
7: ➀ sur 6 ♦A → A
8: 5{¬A/A} A → ♦A
9: syll 7 · 8 A → A

Correction de l’exercice 89 page 74 :


R est réflexive, non symétrique, non transitive, non séquentielle et non convergente.

279
a – corrections des exercices

Correction de l’exercice 90 page 75 :


En w2 , on a ♦p, ♦¬p et p mais pas p.

Correction de l’exercice 91 page 79 :


Fred ouvre la porte
ine débu
term te

touche
porte fermée porte ouverte

chev
auche
soleil brille
Pour ➌ et ➍, on peut avoir après, finit, pendant. Pour ➍ et ➋, on peut avoir
avant, touche, chevauche, finit, contient.

Correction de l’exercice 92 page 80 :


L’écriture des tables de vérité de chacune des formules donne le résultat.

Correction de l’exercice 93 page 81 :

A ¬A ∧  ❍  ∨  ❍ 
        ❍ 
❍ ❍ ❍   ❍ ❍ ❍  
    ❍     
→  ❍  ↔  ❍ 
      ❍ 
❍ ❍   ❍ ❍  ❍
  ❍    ❍ 

Correction de l’exercice 94 page 81 :


Dans K3, SA1 est indéterminé lorsque p est indéterminé et q vrai ou indéterminé,
dans tous les autres cas SA1 est vérifié. SA2 est indéterminé lorsque p est indéterminé
(et vrai dans tous les autres cas). De même, SA3 est indéterminé lorsque p et q sont
indéterminés et vrai dans tous les autres cas.

Correction de l’exercice 95 page 82 :


Dans B3, SA1 (comme SA3) est indéterminé lorsque p et q sont indéterminés, dans
tous les autres cas SA1 est vérifié. SA2 est indéterminé lorsque p est indéterminé (et
vrai dans tous les autres cas).

280
logiques non classiques

Correction de l’exercice 96 page 82 :


L’écriture des tables de vérité permet de répondre à la question. Par exemple, la
première proposition est valide pour L3, mais pas pour K3 ni pour B3. La deuxième,
elle, est valide pour L3 et B3, mais pas pour K3.

Correction de l’exercice 97 page 83 :


C’est évident (on se retrouve immédiatement dans un treillis de Boole).

Correction de l’exercice 98 page 83 :

δ(p → (q → p)) = min(1, 1 − δ(p) + δ(q → p))


= min(1, 1 − δ(p) + min(1, 1 − δ(q) + δ(p)))
= 1

En effet, si δ(p) = 1, le deuxième min vaut 1 quelle que soit la valeur de δ(q). Si
δ(p) = 0, la plus petite valeur possible du deuxième min est 0 mais alors le min
général vaut encore 1. Comme min est monotone, quelle que soit la valeur de δ(p)
entre 0 et 1, on aura la validité de la formule.
On peut démontrer de la même façon la validité du deuxième axiome.

Correction de l’exercice 99 page 85 :

– F ′ est normalisé, supp(F ′ ) = {P, A}, noy(F ′ ) = {A} et |F ′ | = 1.2. Il s’agit


d’un choix préférentiel de V , modéré par l’acceptation avec un faible degré de
P.
– F ′′ est normalisé, supp(F ′′ ) = noy(F ′′ ) = {N } et |F ′′ | = 1. Il s’agit d’un
choix très net de N .

Correction
R
de l’exercice 100 page 86 :
R
fA (x) = 13 = (38 − 30) + (30 − 24)/2 + (42 − 38)/2

Correction de l’exercice 101 page 87 :


A ∩ A′ = 0.2/P + 0.6/V + 0/B et A ∪ A′ = 0.8/P + 1/V + 0.4/B.

281
a – corrections des exercices

Correction de l’exercice 102 page 89 :


A0.1 = A0.4 = X, A0.5 = A0.6 = {P, A}, A0.7 = A0.8 = {P } et A0.9 = ∅.

Correction de l’exercice 103 page 93 :


Le prix d’achat pa de l’immeuble est l’intervalle flou (1.5, 3, 0.15, 0.15)LR et le coût
de remise en état cr est l’intervalle flou (4.5, 6, 0.3, 0.3)LR . Le prix de revient de
l’immeuble est alors : pa ⊕ cr = (6, 9, 0.45, 0.45)LR .

A.4 Langages formels et grammaires


Correction de l’exercice 104 page 102 :
(m, n) est avant (m′ , n′ ) dans la liste des éléments de N × N si et seulement si
m + n < m′ + n′ ou si m + n = m′ + n′ implique que m < m′ .
On obtient ainsi :

(1, 1) (1, 2) (1, 3) (1, 4) (1, 5) ...

(2, 1) (2, 2) (2, 3) (2, 4) ... ...

(3, 1) (3, 2) (3, 3) ... ... ...

(4, 1) (4, 2) ... ... ... ...

(5, 1) ... ... ... ... ...

... ... ... ... ... ...

Correction de l’exercice 105 page 107 :


Il s’agit d’attribuer un numéro d’ordre à chaque mot sur Σ. Une méthode consiste à
mettre dans Σ un ordre total (ordre des lettres de l’alphabet latin), à numéroter les
mots dans l’ordre des longueurs croissantes en utilisant l’ordre alphabétique pour
deux mots de même longueur. C’est le principe de l’ordre dans les dictionnaires de
mots croisés. Remarquons qu’on ne pourrait pas utiliser l’ordre alphabétique sans
utiliser la longueur. Voyez-vous pourquoi ?

282
langages formels et grammaires

Correction de l’exercice 106 page 107 :


On choisit l’ordre lexicographique. On obtient :
0 ǫ 4 ab
1 a 5 ba
2 b 6 bb
3 aa 7 aaa
On remarque plus généralement le lien évident entre cet alphabet et le système
binaire.
Pn−1 k
Le premier mot de longueur n (soit n fois a) a ainsi le numéro 2n − 1
(= k=0 2 )
Ainsi, aaaaaa porte le numéro 26 −1 = 63. aababa qui se situe après aaaaaa porte
alors le numéro (26 −1)+aababadec où xdec représente la notation décimale du nombre
(binaire) représenté par x. On obtient ici 63 + 10 = 73. Enfin, le mot numéro 156 est
un mot de longueur 7 (car 27 −1 = 127 et 28 −1 = 255). 156−127 = 29 = 16+8+4+1
(c.-à-d. 11101 en binaire), on obtient donc le mot aabbbab.

Correction de l’exercice 107 page 107 :


On choisit là encore l’ordre lexicographique. On passe ici en système ternaire. Ainsi,
cba peut s’écrire en ternaire 210 dont la valeur en décimal est 2×32 +1×31 +0×30 =
21. Pour obtenir le numéro de cba dans notre énumération, il suffit d’ajouter le
développement décimal aux nombre de mots précédantPles mots à 3 lettres. Or, le
n−1 k n
nombre de mots précédant les mots à n lettres est : k=0 3 = (3 − 1)/2. On
obtient donc ici le numéro de cba : 13 + 21 = 34.
Le mot numéro 511 est de longueur 6 (car le nombre de mots précédant les mots
de longueur 6 est 364 et le nombre de mots précédant les mots de longueur 7 est
1093). Parmi les mots de longueur 6, il suffit de trouver le développement ternaire
du mot dont l’écriture en décimal est 511 − 364 = 147. Or, 147 = 81 + 2 × 27 + 9 + 3.
147 s’écrit donc 12110. On obtient ainsi : abcbba.

Correction de l’exercice 108 page 109 :


Dans la première série, f est un codage, ni g ni h ne le sont. h est un morphisme
d’effacement. Dans la deuxième série, f est un codage et g aussi.

Correction de l’exercice 109 page 112 :


On a déjà montré que {0n 1n |n ∈ N⋆ } ⊂ L(G). Partant de S, il suffit d’appliquer
n − 1 fois r1 puis d’appliquer une fois r2 .
Montrons maintenant que L(G) ⊂ {0n 1n |n ∈ N⋆ }. r2 ne peut s’appliquer qu’une
seule fois (et nécessairement en dernière position). Tout mot sur {0, 1} dérivant de
S sera obtenu alors en appliquant r1 un certain nombre de fois puis r2 pour obtenir
un mot terminal. Il sera alors bien de la forme 0n 1n .

283
a – corrections des exercices

Correction de l’exercice 110 page 113 :


Il est immédiat de constater que G est de type 1. On montre facilement que {an bn cn |n ∈
N⋆ } ⊂ L(G). En effet, partant de S, l’application de n − 1 fois la règle r1 , de la règle
r2 , de n(n−1)
2
fois la règle r3 , de la règle r4 , n − 1 fois la règle r5 , de la règle r6 puis
enfin de n − 1 fois la règle r7 donne an bn cn . En effet, après les deux premières règles
on obtient an (BC)n , puis après la suivante an B n C n , puis après les deux suivantes
an bn C n et enfin an bn cn .
Dans l’autre sens, on voit que r1 et r2 permettent de positionner correctement
a, et BC, d’autres règles ne devenant accessibles qu’une fois ce processus terminé ;
la règle r3 permet de mettre les B devant les C ; les règles r4 et r5 transforment les
B en b à droite de a ou à droite de b. En fin les règles r6 et r7 transforment les C
en c à droite de b ou de c. On ne peut arriver au niveau terminal qu’en passant par
un mot du type an β n γ n où β ∈ {b, B} et γ ∈ {c, C} qui génère an bn cn .

A.5 Automates
Correction de l’exercice 111 page 119 :
On obtient e0 1101, 1e2 101, 11e0 01, 110e1 1 puis finalement 1101e3 . Le mot n’est donc
pas reconnu par l’automate.

Correction de l’exercice 112 page 119 :


La nature totalement symétrique du graphe ainsi que l’étude des transitions possibles
montre clairement que l’ensemble des mots acceptés par le langage est l’ensemble
des mots ayant un nombre pair de 0 et un nombre pair de 1.

Correction de l’exercice 113 page 121 :

a, b

e0 b a e3
e4
a a a
b b
e1 b
e2

La figure donne le diagramme de l’automate. e4 sert à s’assurer que l’automate


est bien déterministe, c’est un état poubelle. En effet, les mots reconnus par cet
automate sont les mots de (ab)+ . L’état e3 est inutile et peut être remplacé par
l’état e1 , simplifiant ainsi l’automate.

284
automates

Correction de l’exercice 114 page 121 :


1 0
1

0 0
0 1 2


1 0 0, 1

0 1 1
0 1 2 3


0, 1

0 1
0 1 2
1 0
1 0
0

0 1
3 4 5

Correction de l’exercice 115 page 122 :


Il permet de reconnaı̂tre les mots constitués d’un nombre impair de 1. Pour cela, on
va montrer par récurrence que τ̂ (e0 , w) = e0 si et seulement si w possède un nombre
pair de 1. ǫ possède bien un nombre pair de 1 et τ̂ (e0 , ǫ) = ǫ. La propriété est donc
vérifiée pour les mots de longueur 1.
Soit w = za et la propriété vérifiée pour z.

285
a – corrections des exercices

➊ considérons a = 0.
➀ Si w a un nombre pair de 1 alors z aussi. Or, par hypothèse, τ̂ (e0 , z) = e0 .
Ainsi, τ̂ (e0 , w) = τ (τ̂ (e0 , z), 0) = e0 (d’après l’automate).
➁ Si w a un nombre impair de 1, z aussi. Or, comme la propriété est vérifiée
τ̂ (e0 , z) = e1 et toujours d’après l’automate, τ̂ (e0 , w) = τ (τ̂ (e0 , z), 0) = e1 .
La propriété est donc vérifiée dans ce cas.
➋ considérons a = 1.
➀ Si w a un nombre pair de 1 alors z en a un nombre impair. Or, par
hypothèse, τ̂ (e0 , z) = e1 . Ainsi, τ̂ (e0 , w) = τ (τ̂ (e0 , z), 1) = e0 (d’après
l’automate).
➁ Si w a un nombre impair de 1, z en a un nombre pair. Or, comme
la propriété est vérifiée τ̂ (e0 , z) = e0 et toujours d’après l’automate,
τ̂ (e0 , w) = τ (τ̂ (e0 , z), 1) = e1 . La propriété est donc vérifiée dans ce cas.

Correction de l’exercice 116 page 122 :


Il permet de reconnaı̂tre les mots qui ne contiennent pas la séquence 00. On peut le
prouver par récurrence.

Correction de l’exercice 117 page 124 :

1
1 e1 e2 0, 1

e0 0, 1

0 e3 e4 0, 1
0

La figure donne le diagramme de l’automate. On a : T (A) = V ⋆ · {00, 11} · V ⋆ .

286
automates

Correction de l’exercice 118 page 125 :

➊ Sur la figure suivante, toutes les boucles concernent tous les éléments de l’al-
phabet

0 1
1 0
1 2
2 2
3 3
3
4 4
4
5 5 ef
es 5

6 6 6
7
7
8 7 8
9
8 9

➋ Il suffit de considérer l’automate précédent et d’inverser le statut d’acceptation


de chacun des états

0, 1 0, 1

es 0 0 ef
0
0, 1 0, 1

3 1

0, 1 0, 1
2

287
a – corrections des exercices

Correction de l’exercice 119 page 128 :

0, 1 0, 1

0 0, 1 0
p q r s

on pose les correspondances suivantes :

A≡ {p} C≡ {p, r} C≡{p, q, r} D≡{p, q, r}


E≡{p, q, s} F ≡{p, q, r, s} G≡{p, r, s} H≡ {p, s}

1
1

0 1 0
A B C E
1 0
0 0
0
D F 0 H 1 1

1
1
0
G

Correction de l’exercice 120 page 128 :

0
1

0, 1 0, 1 0
p q r s

on pose les correspondances suivantes :

A≡{p} B≡{q, s} C ≡ {r} D≡{p, q, r}


E≡{q} F ≡{p, r} G≡{q, r, s} H≡ {r, s}
I ≡{s} J≡ ∅ K≡ {q, r}

288
automates

1
0, 1
1 0 0
A C I J
0
1 0
0
0
0 0
E B G H
0
1 1 1
1
F
K D 1

Correction de l’exercice 121 page 129 :

0, 1 0
0

p 0 q 0
r

1
0 1

s t

on pose les correspondances suivantes :

A≡{p} B≡{p, q} C≡{p, t} D≡{p, q, r, s}

289
a – corrections des exercices

1 0

0 0
A B D

0 1

1 1
C

Cet automate accepte les mots qui terminent en 00 ou en 01.

Correction de l’exercice 122 page 132 :

b c
1 2 3
a

a b d
0 4 5 6

a, b, c, d
a
a c d
7 8 9 10

on pose les correspondances suivantes :

A≡ {0} B≡{0, 1, 4, 7} C≡{0, 1, 4, 7, 8} D≡{0, 2, 5}


E≡{0, 9} F ≡ {0, 3} G≡ {0, 6} H≡ {0, 10}

290
langages et automates

b, c, d

b, c, d b, c, d a a
b a
c
a b
A B D
c, d
a d
a a
d
d b, c, d G b E H

C
b, c
c
a

A.6 Langages et automates


Correction de l’exercice 123 page 140 :

➊ Soient n et m deux nombres premiers strictement supérieurs à 2 distincts. On


a cl(1n−1 ) 6= cl(1m ). En effet, 1n−1 1 ∈ L mais 1m 1 6∈ L (en effet, ce dernier
nombre est nécessairement pair). Le langage considéré n’est donc pas régulier
car l’index de RL est infini.
➋ Soient n et m deux entiers tels que m − n > 1. On a : cl(0n ) 6= cl(0m ). En
effet, soit k = m − n. On a : 0n 1n+k−1 ∈ L mais 0m 1n+k−1 6∈ L (en effet,
n + k − 1 ≤ m. L’index de RL est donc infini. Le langage n’est pas régulier.

Correction de l’exercice 124 page 142 :

0 0
S A B

1 1
0
C 0, 1

291
a – corrections des exercices

Correction de l’exercice 125 page 143 :


On obtient les règles suivantes : (S, 0A), (A, 0B), (A, 0), (A, 1S), (B, 0B), (B, 0), (B, 1S)
et les règles improductives suivantes : (S, 1C), (C, 0C), (C, 1C).

Correction de l’exercice 126 page 143 :


Il suffit de remarquer que l’ajout d’un nouveau bit à droite d’un mot dans ce langage
consiste simplement à multiplier par 2 (avec 0) ou à multiplier par deux et ajouter
1) (avec un 1) la représentation décimale du mot considéré. Ainsi, il est absolument
inutile de connaı̂tre le mot dans son entier pour connaı̂tre le reste par une division
par 5.
Plus formellement, soit un mot w dont la représentation décimale s’écrit : wdec =
5m + k. Considérons wa avec a ∈ {0, 1}. On alors :
– w0dec = 2 × (5m + k) = 10m + 2k ≡ 2k[5]
– w1dec = 2 × (5m + k) + 1 = 10m + 2k + 1 ≡ 2k + 1[5]
Le comportement des mots dans le cadre du langage considéré, ne dépend donc
que de k. Or, il n’y a que 5 valeurs possibles pour k (congruence modulo 5 oblige).
La relation RL présente donc 5 classes. RL est d’index fini, L est donc régulier.
L’automate minimal permettant de reconnaı̂tre les mots du langage est donné ci-
après. Pour le construire, il suffit de déterminer les différentes possibilités suivant
les valeurs de k.

1
0 1

0
1
0
2 0 1
1
0
1

0
4 3

Cet automate est minimal car il correspond exactement aux classes de RL relation
la moins fine possible.

292
langages et automates

Correction de l’exercice 127 page 148 :

➊ c⋆ a(a + c)⋆ b(a + b + c)⋆ + c⋆ b(b + c)⋆ a(a + b + c)⋆


➋ (0 + 1)⋆ 1(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)
➌ 0⋆ (10⋆ 0)⋆ (ǫ + 11)(00⋆ 1)⋆ 0⋆

Correction de l’exercice 128 page 148 :

➊ les chaı̂nes ne présentant pas deux 1 consécutifs


➋ les chaı̂nes qui présentent au moins trois 0 consécutifs (0⋆ 1⋆ )⋆ = (0 + 1)⋆ )
➌ les mots qui à partir du moment où deux 1 sont consécutifs ne contiennent
plus que des 1.

Correction de l’exercice 129 page 152 :


On se trouve directement dans le cas de la figure 7.6 avec R = 1, S = 0, T = ∅,
U = 0 + 1. L’expression régulière correspondant à cet automate est alors : (R +
SU ⋆ T )⋆ SU ⋆ qui se simplifie ici en R⋆ SU ⋆ c.-à-d. 1⋆ 0(0 + 1)⋆ .

Correction de l’exercice 130 page 152 :


Après élimination de l’état e2 , on obtient un automate générique à deux états.
1 0 1 + 01 0 + 10

0 0 00
1 2 3 1 3

1 1 11

On a : R = 1 + 01, S = 00, T = 11 et U = 0 + 10. L’expression régulière


correspondant au langage reconnu par cet automate est alors (R + SU ⋆ T )⋆ SU ⋆ =
(1 + 01 + 00(0 + 10)⋆ 11)⋆ 00(0 + 10)⋆ .

Correction de l’exercice 131 page 154 :


Reprenons l’automate de l’exercice 126. Il permet en effet de reconnaı̂tre le langage
dont on cherche une expression régulière.
➊ on élimine l’état 2. Cet état possède deux prédécesseurs (1 et 3) et deux suc-
cesseurs (0 et 4).
➀ on considère 1 et 0. On a : Q1 = 0, P0 = 1, S = ∅ et R10 = ∅. L’étiquette
de l’arc entre 1 et 0, après élimination, est alors : R10 + Q1 S ⋆ P0 = 01.

293
a – corrections des exercices

➁ on considère 1 et 4. De même, on obtient l’étiquette 00


➂ on considère 3 et 0. On obtient 11.
➃ on considère 3 et 4. On obtient 10.
➋ on élimine l’état 4. Cet état possède deux prédécesseurs (1 et 3) et un unique
successeur (3).
➀ on considère 1 et 3. On a : Q1 = 00, P3 = 0, S = 1 et R13 = 1. L’étiquette
de l’arc entre 1 et 3, après élimination, est alors : R13 +Q1 S ⋆ P3 = 1+001⋆ 0
➁ on considère 3 et 3. On a : Q3 = 10, P3 = 0, S = 1 et R33 = ∅. L’étiquette
de la boucle sur 3, après élimination, est alors : R33 + Q3 S ⋆ P3 = 101⋆ 0.
➌ on élimine l’état 3. Cet état possède un prédécesseur (1) et deux successeurs
(0 et 1).
➀ on considère 1 et 0. On a : Q1 = 1 + 001⋆ 0, P0 = 11, S = 101⋆ 0 et
R10 = 01. L’étiquette de l’arc entre 1 et 0, après élimination est alors :
R10 + Q1 S ⋆ P0 = 01 + (1 + 001⋆ 0)(101⋆ 0)⋆ 11.
➁ on considère 1 et 1. On a : Q1 = 1 + 001⋆ 0, P1 = 0, S = 101⋆ 0 et
R11 = ∅. L’étiquette de la boucle sur 1, après élimination est alors :
R11 + Q1 S ⋆ P1 = (1 + 001⋆ 0)(101⋆ 0)⋆ 0.
➍ on élimine l’état 1. Cet état a pour unique prédécesseur 0 et pour unique
successeur 0. On a : Q0 = 1, P0 = 01 + (1 + 001⋆ 0)(101⋆ 0)⋆ 11, S = (1 +
001⋆ 0)(101⋆ 0)⋆ 0 et R00 = 0. L’étiquette de la boucle sur 0, après élimination,
est alors : R00 +Q0 S ⋆ P0 = 0+1((1+001⋆ 0)(101⋆ 0)⋆ 0)⋆ (01+(1+001⋆ 0)(101⋆ 0)⋆ 11)
Nous sommes maintenant dans les conditions de la figure 7.6. L’expression régulière
cherchée est :

(0 + 1((1 + 001⋆ 0)(101⋆ 0)⋆ 0)⋆ (01 + (1 + 001⋆ 0)(101⋆ 0)⋆ 11))⋆

01 01

1 1 1
0 1 0 1 0 1
0 00
1
0 1 0 1 + 001⋆ 0
2 0 1
0 0 0
0
0 11 11
1 4 3 3
0
4 3
10
1 101⋆ 0
1
01 + (1 + 001⋆ 0)(101⋆ 0)⋆ 11

1
0 1 (1 + 001⋆ 0)(101⋆ 0)⋆ 0 0

0
0 + 1((1 + 001⋆ 0)(101⋆ 0)⋆ 0)⋆ (01 + (1 + 001⋆ 0)(101⋆ 0)⋆ 11)

294
langages et automates

Correction de l’exercice 132 page 156 :


Dans les diagrammes suivants, les transitions non étiquetées sont des ǫ-transitions.

0 1


0

0 1

0 0

Correction de l’exercice 133 page 156 :

➊ on obtient L+
➋ on obtient l’ensemble des suffixes des mots de L
➌ on obtient l’ensemble des préfixes des mots de L
➍ on obtient l’ensemble des sous-chaı̂nes des mots de L

295
a – corrections des exercices

A.7 Calculabilité, décidabilité


Correction de l’exercice 134 page 162 :
Soit x une solution de l’équation. x s’écrit alors sous la forme d’une fraction irréductible :
p
q
. On peut alors réécrire l’équation dont on recherche les solutions sous la forme :

pn pn−1 p
an n
+ an−1 n−1 + · · · + a1 + a0 = 0 (A.1)
q q q

En multipliant de chaque côté par q n , on obtient :

an pn + an−1 pn−1 q + · · · + a1 pq n−1 + a0 q n = 0 (A.2)

Ce qui peut s’écrire :


pX = −a0 q n (A.3)
ou encore :

qY = −an pn (A.4)
Ce qui signifie que d’une part, p divise a0 et que, d’autre part, q divise an . On
obtient alors l’algorithme suivant :
➊ calculer les diviseurs de a0
➋ calculer les diviseurs de an
➌ tester chacun des quotients entre éléments des deux listes précédentes et vérifier
qu’ils sont ou non solution de l’équation

Correction de l’exercice 135 page 163 :


La transformation d’une expression régulière en ǫ-AFN présentée chapitre 7, sec-
tion 7.3.3 page 154 montre que cette transformation se fait en un temps de l’ordre
de n (la longueur de l’expression régulière) et résulte en un automate possédant un
nombre d’états de l’ordre de n et d’un nombre d’arcs de l’ordre de n. La preuve de
l’existence d’un chemin de l’état initial vers l’état d’acceptation se fait en un nombre
d’opérations de l’ordre de n (le nombre d’arc de l’ǫ-AFN).

Correction de l’exercice 136 page 164 :

Soit n la constante du théorème 29. Testons l’appartenance à L de chacun des


mots dont la longueur est entre n et 2n − 1.
➊ Si un de ces mots appartient au langage, celui-ci est infini (le théorème s’ap-
plique alors générant un nombre infini de mots dans le langage).
➋ Si aucun de ces mots n’appartient au langage, alors on peut montrer qu’aucun
mot de longueur 2n au plus ne peut appartenir au langage (celui-ci est alors
fini). En effet, soit w mot de L de longueur au moins 2n. On choisit w de telle
sorte qu’aucun mot de L de longueur d’au moins 2n ne soit plus court que w.
Le théorème 29 s’applique et on peut donc écrire w = xyz avec xz ∈ L.

296
calculabilité, décidabilité

➀ |xz| < 2n car xz est nécessairement plus court que w et w est le plus court
des mots de L de longueur 2n ou plus
➁ |xz| ≥ n car [xy| < n et donc xz ne peut être plus court que w de plus de
n symboles
xz, élément de L, est donc d’une longueur comprise entre n et 2n − 1, ce qui
est contradictoire avec notre hypothèse. w n’existe donc pas.

Correction de l’exercice 137 page 167 :


Le problème de savoir si un programme Q sur une entrée y appelle la méthode foo est
noté P2 . Nous noterons P1 , le problème du coucou. Il faut transformer une instance
quelconque de P1 en une instance de P2 . Il faut donc construire un programme R
et une entrée x qui appelle foo si et seulement si Q sur y affiche coucou.
➊ si Q possède une méthode foo, la renommer partout dans le programme. Le
fonctionnement de Q n’est pas modifié. On obtient le programme Q1 .
➋ ajouter à Q une méthode foo. Cette méthode ne fait rien et n’est jamais
appelée. On obtient le programme Q2 .
➌ modifier Q2 de telle sorte que l’on stocke les 6 premiers caractères qu’il imprime
(ils seront stockés dans un tableau A). On obtient le programme Q3 .
➍ modifier Q3 de telle sorte qu’aucun affichage sans tester si le tableau A est
rempli et si les 6 premiers caractères affichés forment la chaı̂ne coucou. Si c’est
le cas, la méthode foo est alors appelée. On obtient le programme R, son entrée
z est y.
Supposons que Q affiche coucou. R, tel qu’il est construit, appelle donc foo.
Mais, si Q n’affiche pas coucou alors foo ne sera jamais appelée. On a donc réussi
une « réduction » correcte. Comme P1 est indécidable, P2 l’est nécessairement aussi.

Correction de l’exercice 138 page 167 :


On prend un programme P et on le modifie de telle sorte que :
➊ ne s’arrête jamais sauf si on lui dit explicitement
➋ s’arrête s’il affiche coucou
Pour ➊, il suffit d’ajouter une boucle infinie1 avant la fin du main et à chaque
fois que celui retourne une valeur2 .
Pour ➋, il suffit de modifier P pour stocker les 6 premiers caractères affichés et
s’il s’agit de coucou de terminer le programme en allant à la fin du main.
On aura ainsi transformer une instance du problème du coucou en une instance
du problème de l’arrêt avec la même réponse. Ce dernier est donc indécidable.

1 while(true) x = x ; par exemple


2 Ceci capture toutes les terminaisons normales du problème, il faudrait en toute rigueur capturer toutes
les exceptions et insérer cette boucle.

297
a – corrections des exercices

Correction de l’exercice 139 page 171 :

➊ 01 : e0 01, Xe1 1, e2 XY , Xe3 Y , XY e3 , XY Y e5 (accepté)


➋ 0101 : e0 0101, Xe1 01, e2 XY 01, Xe3 Y 01, XY e3 01 (bloqué)
➌ 0011 : e0 0011, Xe1 011, X0e1 11, Xe2 0Y 1, e4 X0Y 1, Xe0 0Y 1, XXe1 Y 1, XXY e1 1,
XXe2 Y Y , Xe2 XY Y , XXe3 Y Y , XXY e3 Y , XXY Y e3 , XXY Y Y e5 (accepté)
➍ 00011 : la machine bloque après la dix-huitième opération de la liste donnée
page 170.

Correction de l’exercice 140 page 172 :


La machine accepte les mots de la forme : 0n 1n .
– e0 transforme les 0 en X
– e1 transforme les 1 en Y
– e2 recherche le premier 0 non transformé
– e3 contrôle le $ après le dernier 1 et le transforme en Y
– e4 permet de repartir à la recherche des 0
– e5 est l’état d’acceptation

Correction de l’exercice 141 page 173 :


Tous !

Correction de l’exercice 142 page 174 :

➊ dans le cas général, le mot sur le ruban est de type : 0i 10n 10kn
➋ le mouvement de base consiste à changer un 0 du premier groupe en un
$ puis d’ajouter n 0 au dernier groupe, fournissant ainsi un mot de type :
0i−1 10n 10(k+1)n
➌ pour cela, il faut copier le groupe de n 0 à la fin du mot sur le ruban et ceci m
fois (une fois à chaque changement d’un 0 du premier groupe en $). Dès que
le premier groupe de 0 est complètement transformé en $, le dernier groupe
contient mn 0.
➍ l’étape finale consiste à changer les 10n 1 de tête en $ pour ne laisser que la
réponse attendue

Correction de l’exercice 143 page 178 :


On obtient l’ensemble de règles : A1 → A2 A3 , A2 → A3 A1 , A2 →1, A3 → A1 A2 et
A3 → 0.

298
complexité

Correction de l’exercice 144 page 179 :

11101001000101001100010101001001100010010010100110001000100010010111

Correction de l’exercice 145 page 184 :

➊ supposons que P1 soit indécidable. Si P2 est décidable alors il est possible de


montrer que P1 l’est aussi (il suffit pour cela de considérer ce que nous avons
fait pour le problème du coucou page 167) ce qui est contradictoire
➋ on démontre de la même façon l’autre partie du théorème

Correction de l’exercice 146 page 185 :


Il n’y a pas de solution.
➊ une solution doit commencer par la paire de mots d’index 1 car c’est la seule
paire de mots dont l’un est préfixe de l’autre
➋ notre solution potentielle doit commencer par A : 01, B : 011
➌ ensuite, il faut prendre une paire dont le mot en A commence par un 1, seule
la paire 3 est donc possible, on obtient : A : 0110, B : 01100
➍ maintenant, il faut une paire dont le mot en A commence par 0, les paires 1
et 2 sont disponibles :
➀ si on utilise la paire 1, on obtient : A : 011001, B : 01100011, on se retrouve
dans la situation ➋
➁ si on utilise la paire 2, on obtient : A : 0110001, B : 0110010, on se retrouve
avec une différence.
Dans aucun cas, on n’arrive à rattraper le retard ni à obtenir des mots similaires. Il
n’y a donc pas de solution possible pour cette instance.

A.8 Complexité
Correction de l’exercice 147 page 187 :
Pour une entrée de taille k = m + n + 3, l’additionneuse fait k + 2 opérations.

Correction de l’exercice 148 page 188 :


Pour une entrée de taille k = m + n + 3, l’additionneuse ne nécessite pas d’espace
mémoire supplémentaire (la quantité de ruban utilisée reste inchangée à k)

299
a – corrections des exercices

Correction de l’exercice 149 page 189 :

g(n) = 3+6 P
+ · · · + 3n
= 3× n i=1 i
= 3 × n(n+1)
2
= 3
2
× (n2 + n)
< 3 × n2
Il existe donc une constante c bornant supérieurement g(n) à l’aide du polynôme
n2 . On a donc bien : g(n) ∈ O(n2 ).

Correction de l’exercice 150 page 190 :


On obtient
010 001
(e0 010, e0 ) (e0 001, e0 )
(e1 010, Xe1 ) (e1 001, Xe1 )
(0e1 10, X0e1 ) (0e1 01, X0e1 )
(01e0 0, X01e1 ) (00e1 1, X00e1 )
(010e1 , X010e1 ) (001e1 , X001e1 )
(010e2 , X01e2 0) (001e2 , X00e2 1)
(010e2 , X0e2 10) (001e2 , X0e2 01)
(010e2 , Xe2 010) (001e2 , Xe2 001)
(010e2 , e2 X010) (001e2 , e2 X001)
(01e3 0, Xe3 010) (00e3 1, Xe3 001)
(01e4 0, X0e4 10)
(0e3 10, X0e3 10)
(0e4 10, X01e4 0)
(e3 010, X01e3 0)
(e4 010, X010e4 )
(e5 010, X010e5 )
Pour 010 la machine s’arrête sur un état final (e5 ) tandis que pour 001, la
machine s’arrête mais sans accepter le mot.

Correction de l’exercice 151 page 190 :


Le principe général est de recopier le mot à tester sur le deuxième ruban puis de
parcourir un mot dans un sens et l’autre dans l’autre pour vérifier l’identité des
parcours. Dès que ce n’est pas le cas, la machine s’arrête sans accepter.

Correction de l’exercice 152 page 191 :


Le fonctionnement la machine sur une entrée w de longueur n est en trois étapes :
➊ recopie du mot présent sur le premier ruban sur le deuxième : n+1 mouvements
nécessaires
➋ repositionnement de la tête de lecture en tête du deuxième ruban : n + 1
mouvement nécessaires

300
complexité

➌ comparaison : 2n +1 mouvement nécessaires (lorsque le mot est accepté, moins


sinon)
La complexité temporelle de la machine est donc exactement : 4n + 3 ∈ O(n)
La complexité spatiale est tout simplement : n + 1 (la recopie du mot sur le
deuxième ruban et ajout d’un X en tête)

Correction de l’exercice 153 page 193 :


Les premières séquences (déterministes) donnent : (e0 1010010, e0 , e0 ) puis (e1 1010010, be1 , be1 ).
Ici, un choix se présente :
➊ (1e3 010010, be3 , be3 ) (recopie sur le ruban 3)
➋ (1e2 010010, be2 , be2 ) (recopie sur le ruban 2) qui conduit à (10e2 10010, b0e2 , be2 )
et (10e1 10010, b0e1 , be1 ).
Dans cette dernière situation, un autre choix se présente :
➊ (101e2 0010, b0e2 , be2 ) (recopie sur le ruban 2)
➋ (101e3 0010, b0e3 , be3 ) (recopie sur le ruban 3) qui conduit à (1010e3 010, b0e3 , b0e3 ),
(101000e3 10, b0e3 , b00e3 ) et (10100e1 10, b0e1 , b00e1 )
Dans cette dernière situation, un dernier choix se présente :
➊ (101001e3 0, b0e3 , b00e3 ) (recopie sur le ruban 3)
➋ (101001e2 0, b0e2 , b00e2 ) (recopie sur le ruban 2) qui conduit à : (1010010e2 b00e2 , b00e2 ),
(1010010e4 , b0e4 0, b0e4 0), (1010010e4 , be4 00, be4 00), (1010010e4 , e4 b00, e4 b00)
et finalement (1010010e5 , e5 b00, e5 b00)
Tous les choix n’ont pas été développés mais la généralisation est aisée.

Correction de l’exercice 154 page 193 :


Il faut considérer le « pire » cas possible c.-à-d. le plus long chemin conduisant à
un état d’acceptation. Pour une entrée n, le nombre maximal de mouvements (pour
arriver à un état d’acceptation) est alors 2 × n + 2 (recopie des mots sur les bons
rubans à chaque alternative, puis vérification a posteriori).

Correction de l’exercice 155 page 194 :


La complexité spatiale est de n + 1 pour une entrée de taille n (l’ajout du b initial
sur l’un quelconque des deux rubans).

Correction de l’exercice 156 page 198 :


En effet, supposons que P2 soit dans P . Soit t(n) le polynôme bornant la trans-
formation de P1 et en P2 et p(n) le polynôme bornant la résolution d’une instance
de P2 sur une machine de Turing déterministe. On pourrait alors résoudre une ins-
tances quelconque de P1 en la transformant en une instance de P2 (coût t(n)) puis
en résolvant cette instance (de manière polynômiale – coût p(n)). Il existerait alors

301
a – corrections des exercices

un algorithme polynômial pour résoudre une instance de P1 (en O(t(n) + p(n))) ce


qui est contradictoire avec l’hypothèse. P2 ne peut donc pas non plus être dans P.

Correction de l’exercice 157 page 198 :


Supposons que P1 ne soit pas dans P, alors P2 ne peut pas l’être (c’est le théorème 51)
ce qui est contradictoire. P1 l’est donc forcément.

Correction de l’exercice 158 page 198 :


Si P1 est N P -complet, tout problème de N P peut être réduit polynômialement en
une instance de P1 puis en une instance de P2 . La réduction polynômiale est donc
transitive. P2 est donc nécessairement lui aussi N P-complet.

Correction de l’exercice 159 page 199 :


Soit Pr un tel problème. Soit P un problème quelconque de N P. Comme il existe
une réduction polynômiale de P vers Pr , et que l’on peut résoudre Pr en temps
polynômial (sur une machine de Turing déterministe), P est donc soluble en temps
polynômial (sur une machine de Turing déterministe). P est donc dans P. D’où
N P ⊂ P. Or, P ⊂ N P. D’où le résultat.

Correction de l’exercice 160 page 200 :


Soit U = {u1 , u2 , . . . , un } l’ensemble des variables propositionnelles d’une instance
de 3sat. L’ensemble C = {c1 , c2 , . . . , cm } est alors l’ensemble des clauses sur U à
satisfaire. Nous allons chercher à construire une instance de vc : un graphe G =
(V, E) et un entier positif K ≤ |V | tel que G possède un transversal de taille K (ou
moins) si et seulement si C est satisfiable.
La construction du graphe comprend trois parties :
➊ Pour chaque variable ui ∈ U , on construit un sous-graphe Ti = (Vi , Ei ) tel que
Vi = {ui , ¬ui } et Ei = {{ui , ¬ui }} (soit deux sommets reliés par un unique
arête). Notons d’ores et déjà qu’un transversal devra contenir au moins un de
ces deux sommets pour couvrir l’arête dans Ei .
➋ Pour chaque clause cj ∈ C, on construit un sous-graphe Sj = (Vj′ , Ej′ ) constitué
de trois sommets et de trois arêtes les reliant pour former un triangle :
– Vj′ = {aj1 , aj2 , aj3 }
– Ej′ = {{aj1 , aj2 }, {aj1 , aj3 }, {aj2 , aj3 }}
Notons qu’un transversal doit contenir au moins deux des sommets de Vj′ pour
couvrir l’ensemble des arêtes de Ej′ .
➌ Il reste maintenant à relier variables et clauses. Soit cj ∈ C une clause dont
les trois littéraux en jeu sont : xj , yj et zj . On considère les arêtes suivants :

Ej′′ = {{aj1 , xj }, {aj2 , yj }, {aj3 , zj }}

302
complexité

u1 ¬u1 u2 ¬u2 u3 ¬u3 u4 ¬u4

a12 a22

a11 a13 a21 a23

Fig. A.5 — Instance de vc obtenue à partir d’une instance de 3sat pour laquelle U = {u1 , u2 , u3 , u4 } et
C = {{u1 , ¬u3 , ¬u4 }, {¬u1 , u2 , ¬u4 }}. Ici, K = n + 2m = 8.

La construction de l’instance de vc se termine en considérant K = n + 2m et


G = (V, E) où :
n
[ m
[
V =( Vi ) ∪ ( Vj′ )
i=1 j=1

et
n
[ m
[ m
[
E=( Ei ) ∪ ( Ej′ ) ∪ ( Ej′′ )
i=1 j=1 j=1

Cette construction est clairement polynômiale (la figure A.5 donne un exemple
d’une telle transformation). Il ne reste plus qu’à montrer l’équivalence entre les deux
problèmes.
➊ Supposons V ′ ⊆ V est un transversal de G de cardinal inférieur ou égal à K.
V ′ contient au moins un sommet de chaque Ti et au moins deux sommets de
chaque Sj . En fait, comme K = n + 2m, V ′ contient exactement un sommet de
chaque Ti et exactement 2 sommets de chaque Sj . Ainsi, on peut affecter une
valeur de vérité à chaque variable propositionnelle en consultant V ′ . On a :
δ(ui ) =  si ui ∈ V ′ et δ(ui ) =  si (¬ui ) ∈ V ′ . Considérons maintenant les
trois arêtes de Ej′′ . Seuls deux de ces arêtes sont couvertes par des sommets de
Vj′ ∩ V ′ , la dernière l’est donc forcément par un sommet de Vi qui appartient
à V ′ mais ceci implique que le littéral correspondant est nécessairement 
satisfaisant du même coup la clause considérée. C’est le cas de chacune des
clauses de C, C est donc satisfiable.
➋ Supposons donnée une interprétation δ des variables de U telle que C soit
satisfaite. On construit un transversal de la manière suivante : le sommet de
Ti dans V ′ est ui si δ(ui ) =  et ¬ui sinon. Ceci assure qu’au moins une
des trois arêtes de chaque Ej′′ est couverte (puisque δ permet de satisfaire C
et donc chaque clause). Il suffit donc d’ajouter à V ′ les sommets de Sj pour
chacun des deux autres arêtes de Ej′′ fournissant ainsi un transversal du bon
cardinal.

303
a – corrections des exercices

Correction de l’exercice 161 page 203 :

➊ On sait déjà que P ⊂ PS. Soit Q un problème de PS, il existe un algorithme


déterministe de complexité temporelle polynômiale permettant de transformer
une instance de Q en une instance de P qui elle-même est soluble par un al-
gorithme déterministe en temps polynômial (hypothèse). Q est donc lui-même
soluble par un algorithme déterministe de complexité temporelle polynômiale.
Q est donc dans P. D’où PS ⊂ P , d’où le résultat.
➋ la preuve est similaire

Correction de l’exercice 162 page 206 :


Au moins 30 fois car 2130 < 10−9 . En effet, les exécutions successives d’un algorithme
de type Monte-Carlo étant indépendantes les unes des autres, la probabilité d’obtenir
consécutivement n fois « oui » pour une entrée w 6∈ L est 21n .

304

You might also like