Logique

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 122

Université de Sherbrooke

Département d’informatique

Logique et mathématiques discrètes


MAT115

Notes de cours
Version du 2019-08-08

Marc Frappier, Ph.D.


professeur

UNIVERSITÉ DE
SHERBROOKE
Notes de cours (très) synthétiques complétées par les présentations en classe.

i
Contenu

1 Introduction à la logique propositionnelle et la logique du premier ordre 2


1.1 Logique propositionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Tables de vérité des connecteurs logiques . . . . . . . . . . . . . . . . . . . . . 5
1.1.3 Expression de faits en logique propositionnelle . . . . . . . . . . . . . . . . . . 6
1.2 Logique du premier ordre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.2 Tarski’s World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.3 Formes typiques des formules quantifiées . . . . . . . . . . . . . . . . . . . . . 21
1.2.4 Formalisation de texte en langage naturel . . . . . . . . . . . . . . . . . . . . 22
1.3 Lois de la logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.1 Lois de la logique propositionnelle (tautologies) . . . . . . . . . . . . . . . . . 23
1.3.2 Lois de la logique du premier ordre . . . . . . . . . . . . . . . . . . . . . . . . 26
1.4 Preuve en logique propositionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.1 Déduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.2 Règles d’inférence de la déduction naturelle . . . . . . . . . . . . . . . . . . . 31
1.4.3 Cohérence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.5 Preuve en logique du premier ordre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.5.1 Règles d’inférence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.6 Formes normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2 Ensemble, relation et fonction 43


2.1 Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.2 La logique du premier ordre en B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.3 Les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.4 Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.5 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.5.1 Fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.5.2 Fonction totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.5.3 Fonction injective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.5.4 Fonction injective totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.5.5 Fonction surjective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.5.6 Fonction surjective totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.5.7 Fonction bijective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.5.8 Fonction bijective totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.6 Les nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

ii
2.7 Les suites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.7.1 Suite géométrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.7.2 Suite arithmétique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.7.3 Limite et monotonie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.7.4 Séries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.7.5 Opérateur du langage B sur les suites . . . . . . . . . . . . . . . . . . . . . . 60
2.8 Propriétés des relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.8.1 Exemples de relations réflexives . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.8.2 Exemples de relations irréflexives . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.8.3 Exemple de relation transitive . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.8.4 Exemple de relation symétrique . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.8.5 Exemple de relation asymétrique . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.8.6 Exemple de relation antisymétrique . . . . . . . . . . . . . . . . . . . . . . . . 64
2.8.7 Exemple de relation d’équivalence . . . . . . . . . . . . . . . . . . . . . . . . 64
2.8.8 Exemple de relation d’ordre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.8.9 Exemple de relation d’ordre strict . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.8.10 Relations bien fondée et acyclique . . . . . . . . . . . . . . . . . . . . . . . . 65
2.9 Lois des ensembles, fonctions et relations . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.10 Utilisation de ProB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.11 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3 Types de preuve 73
3.1 Preuve par induction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.1.1 Preuve par induction sur les naturels . . . . . . . . . . . . . . . . . . . . . . . 73
3.1.2 Règle générale de preuve par induction . . . . . . . . . . . . . . . . . . . . . . 81
3.1.3 Application de la règle générale d’induction aux naturels . . . . . . . . . . . . 81
3.1.4 Plusieurs cas de base sur les naturels . . . . . . . . . . . . . . . . . . . . . . . 83
3.1.5 Preuve par induction sur d’autres structures . . . . . . . . . . . . . . . . . . . 85
3.1.6 Preuve de la règle générale de preuve par induction . . . . . . . . . . . . . . . 88
3.2 Exprimer une preuve en langage naturel . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.1 A ⇒ B - Implication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.2 A ⇔ B - Équivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.3 A ∧ B - Conjonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.4 Preuve par contradiction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.2.5 Preuve par contraposition (contraposée) . . . . . . . . . . . . . . . . . . . . . 91
3.2.6 Preuve par cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.2.7 ∀ - Quantification universelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.2.8 ∃ - Quantification existentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.2.9 Illustration d’une preuve en langage naturel . . . . . . . . . . . . . . . . . . . 92
3.3 Preuve dans le style équationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4 Automate 97
4.1 Automate fini déterministe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.2 Automate fini non-déterministe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.3 Déterminisation d’un AFND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4 Minimisation d’un AFD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

iii
Bibliographie 118

1
Chapitre 1

Introduction à la logique propositionnelle


et la logique du premier ordre

La logique est au centre du développement des sciences et du bon fonctionnement de la société en


général. L’humain est capable de raisonnement, c’est-à-dire de déduire des faits ou de nouvelles
connaissances, à partir d’autres faits. On qualifie d’esprit “logique” une personne capable d’agir
avec cohérence et rigueur, de raisonner correctement. Les mathématiques constituent le langage
commun des sciences, et la logique est le fondement des mathématiques. L’informatique a été
fondée dans les années 30 en tentant de résoudre un problème fondamental de la logique, proposé
par David Hilbert et Wilhelm Ackermann en 1928, soit de déterminer si une formule quelconque est
un théorème (Entscheidungsproblem en allemand). Ce problème a été résolu par Alonzo Church et
Alan Turing, de manière indépendante, en 1935 et 1936. Ils ont démontré que cela était impossible
en général. Ces travaux ont nécessité le développement de la notion d’algorithme et d’ordinateur,
sous la forme de la machine de Turing1 (par Turing) et du λ-calcul (par Church et Kleene). Le
λ-calcul est le fondement des langages de programmation fonctionnelle comme Lisp, F#, Haskell
et Scala. La logique date d’Aristote, mais sa version moderne date de la fin du 19ième au début
du 20ième siècle. Ses pionniers furent Boole, De Morgan, Frege, Peano, Peirce, Whitehead, Russell,
Hilbert, Ackermann, Gödel, ainsi que plusieurs autres.
La logique permet principalement deux choses:
1. exprimer de manière formelle des faits;

2. déduire de manière formelle de nouveaux faits.


L’adjectif formel utilisé ici signifie “sans ambiguïté”, “avec rigueur”, “objectif” (par opposition à “sub-
jectif”), “calculable”, “analysable par une machine”. Les faits sont exprimés comme des formules. Un
ensemble de formules logiques peut être analysé pour déterminer sa cohérence, c’est-à-dire l’absence
de contradiction entre les formules. Les règles utilisées pour faire de la déduction peuvent aussi être
analysées pour déterminer leur cohérence, c’est-à-dire l’impossibilité de déduire une formule fausse
1
Alan Turing (1912—1954) est devenu “célèbre” en 2015 suite au très populaire film The imitation game qui
raconte le développement par Alan Turing d’une machine pouvant déchiffrer le code Enigma utilisé par les allemands
durant la deuxième guerre mondiale, et qui se mérita l’Oscar du meilleur scénario adapté. L’équivalent du prix Nobel
en informatique, le ACM Turing Award, est nommé en l’honneur d’Alan Turing, qui est souvent considéré comme le
“père” de l’informatique. Il est décerné chaque année depuis 1966 à un informaticien ayant effectué une contribution
exceptionnelle à l’informatique. Deux canadiens se sont mérités ce prix: Stephen Arthur Cook (né aux États-Unis,
mais professeur à l’Université de Toronto depuis 1970) en 1982 pour ses travaux en théorie de la complexité des
algorithmes, et William Morton Kahan en 1986 pour ses travaux en analyse numérique. Google offre maintenant un
prix de 1 000 000 $ au récipiendaire du prix Alan Turing.

2
à partir de formules considérées comme vraies. Une preuve, au sens de la logique formelle, est une
suite de déductions. Les déductions sont effectuées en appliquant des règles d’inférence.
Les formules de logique sont énoncées à l’aide d’une syntaxe formelle (c’est-à-dire précise et sans
ambiguïté). Plusieurs types de logiques ont été proposées. La logique propositionnelle constitue
la base de tous les types de logique. Une formule est une représentation formelle d’un fait, d’une
connaissance à propos d’un concept d’intérêt pour l’humain. La première compétence que vous
devrez acquérir sera de représenter des faits, des connaissances, sous forme de formules logiques.
La deuxième sera de raisonner sur ces formules. Le verbe “représenter” a une importance capitale:
une formule n’est rien d’autre qu’une suite de symboles. Il faut aussi associer ces symboles à des
objets, des concepts, des faits du “monde” représenté par la formule. Le “monde” dénote ce dont la
formule traite, sur quoi porte la formule. On appelle interprétation le lien entre les symboles d’une
formule et les objets du monde qu’ils représentent La beauté de la logique est que le raisonnement
et les calculs effectués sont indépendants du “monde” en question.
La logique est utilisée dans tous les domaines de l’informatique. Tous les langages de program-
mation utilisent les connecteurs (c’est-à-dire les opérateurs) de la logique propositionnelle. Les
méthodes les plus avancées pour déterminer la correction d’un logiciel (c’est-à-dire vérifier qu’un
logiciel fait bien ce qu’il est supposé faire, vérifier qu’un logiciel est correct, vérifier qu’un logiciel
ne contient pas de faute (bug)) sont fondées sur la logique. Les logiciels contrôlent maintenant une
foule d’objets comme des trains, des avions, des autos, des centrales nucléaires, des stimulateurs
cardiaques, des appareils de radiologie. Une erreur dans ces logiciels peut entraîner des conséquences
dramatiques pour les humains et l’environnement. L’étude de leur correction est primordiale. Cela
ne serait possible sans la logique. Les opérations les plus élémentaires d’un ordinateur (opéra-
tions arithmétiques) sont exprimées en logique propositionnelle. Le fonctionnement de base d’un
ordinateur est fondé sur l’algèbre de Boole, qui est essentiellement la même chose que la logique
propositionnelle. Une algèbre permet de faire des calculs, c’est-à-dire appliquer des opérateurs à
des opérandes. La logique permet aussi de faire des calculs, comme déterminer si une formule est
vrai ou fausse pour une interprétation donnée, mais aussi de déduire de nouvelles formules.

1.1 Logique propositionnelle


1.1.1 Syntaxe
Une formule de la logique propositionnelle est construite à l’aide de connecteurs logiques, de vari-
ables propositionnelles et des constantes vrai (parfois représentée par “1” ou “>”) et faux (parfois
représentée par “0” ou “⊥”). Les connecteurs logiques usuels sont les suivants:

• ¬ : la négation,

• ∧ : la conjonction, aussi appelé le “et” logique,

• ∨ : la disjonction, aussi appelé le “ou” logique,

• ⊕ : la disjonction exclusive, aussi appelé le “ou exlusif”,

• ⇒ : l’implication, aussi noté “→” dans certains textes et logiciels,

• ⇐ : l’implication inverse, aussi noté “←” dans certains textes et logiciels,

• ⇔ : l’équivalence, aussi noté “↔” dans certains textes et logiciels.

3
Une variable propositionnelle peut prendre la valeur vrai ou la valeur faux. Dans les exemples et
définitions, nous utiliserons, par convention, X pour dénoter une variable propositionnelle (possi-
blement indexée par un nombre, comme X0 , X1 , . . ., si plusieurs variables sont nécessaires). Nous
utiliserons A, B, C, . . . pour désigner des formules propositionnelles.

Définition 1 Une formule propositionnelle est une suite de symboles construite seulement à partir
des règles suivantes:

1. vrai et faux sont des formules propositionnelles;

2. si X est une variable propositionnelle, alors X est une formule propositionnelle;

3. si A est une formule propositionnelle, alors ¬A est une formule propositionnelle;

4. si A et B sont des formules propositionnelles, alors

• A∧B
• A∨B
• A⊕B
• A⇒B
• A⇐B
• A⇔B

sont des formules propositionnelles;

5. si A est une formule propositionnelle, alors (A) est une formule propositionnelle.

Les parenthèses servent à définir un ordre dans l’évaluation des connecteurs logiques, exactement
comme dans les expressions arithmétiques.

Remarque 1 Dans le cadre du cours, par souci de lisibilité, les connecteurs sont parenthésés selon
les priorités suivantes, de la plus forte à la plus faible; les opérateurs sur une même ligne ont la
même priorité:

1. ¬,

2. ∧,

3. ∨, ⊕

4. ⇒, ⇐

5. ⇔.

Attention : Il n’existe pas de convention universelle pour la priorité en logique. Elle peut varier
d’un livre à l’autre et d’un outil à l’autre. Il vous incombe de prendre connaissance de la priorité
utilisée selon le livre ou l’outil.

4
1.1.2 Tables de vérité des connecteurs logiques
La valeur de vérité d’une formule, qui est soit vrai, soit faux, peut-être calculée à l’aide des tables
de vérité suivantes. Elles se lisent de la même manière que les tables de calculs des opérateurs
arithmétiques que l’on vous a enseignées dès l’école primaire, comme pour les additions et les
multiplications. Par soucis de concision, on utilise 0 et 1 pour les valeurs faux et vrai, respectivement.
Les lignes indiquent les valeurs de l’opérande de gauche, alors que les colonnes indiquent les valeurs
de l’opérande de droite (cela a une importance pour les connecteurs ⇒ et ⇐, qui ne sont pas
commutatifs, alors que les autres opérateurs le sont).

¬ 0 1 ∧ 0 1 ∨ 0 1 ⇒ 0 1 ⇐ 0 1 ⇔ 0 1 ⊕ 0 1
1 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 0 0 1
1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0

Voici une représentation équivalente et plus compacte des tables de vérité des opérateurs binaires.
X1 X2 ∧ ∨ ⇒ ⇐ ⇔ ⊕
0 0 0 0 1 1 1 0
0 1 0 1 1 0 0 1
1 0 0 1 0 1 0 1
1 1 1 1 1 1 1 0
La valeur de vérité d’une formule propositionnelle peut être calculée si la valeur de chaque variable
propositionnelle qu’elle contient est connue. Nous noterons X := 0 le fait que la valeur de la variable
X est 0. Notons que X := 0 n’est pas une formule propositionnelle, car le symbole “:=” ne fait pas
partie de la syntaxe de la logique propositionnelle. La valeur de la formule X1 ∨ (X2 ∧ X3 ) est 0 pour
X1 := 0, X2 := 1, X3 := 0. On peut aussi calculer la valeur d’une formule propositionnelle pour
toutes les combinaisons des valeurs de ses variables. Voici le calcul pour la formule X1 ∨ (X2 ∧ X3 ).
Cela est plutôt fastidieux, car le nombre de combinaisons est égal à 2n pour une formule contenant
n variables propositionnelles.
no X1 X2 X3 X2 ∧ X3 X1 ∨ (X2 ∧ X3 )
1 0 0 0 0 0
2 0 0 1 0 0
3 0 1 0 0 0
4 0 1 1 1 1
5 1 0 0 0 1
6 1 0 1 0 1
7 1 1 0 0 1
8 1 1 1 1 1
Le problème de la satisfaction d’une formule propositionnelle est un problème classique en algorith-
mique. Il s’agit de trouver une combinaison de valeur des variables d’une formule de sorte que la
formule est vrai. Dans l’exemple précédent, les lignes 4 à 8 sont des solutions pour la satisfaction
de la formule X1 ∨ (X2 ∧ X3 ). Ce problème de la satisfaction d’une formule propositionnelle est
très important pour les outils de vérification automatique des logiciels (appelés en anglais model
checking tools) et la preuve automatique de théorèmes. C’est un problème dit NP-complet (ce qui
veut dire, pour simplifier, que le meilleur algorithme connu actuellement exige un temps de cal-
cul qui augmente de manière exponentielle en fonction de la taille de la formule, qu’une solution

5
peut-être vérifiée en temps polynomial, et que si un jour on trouve un algorithme polynomial pour
calculer une solution, cet algorithme pourra aussi résoudre tous les autres problèmes NP-complet).
Ce théorème de Stephen A. Cook, considéré comme un théorème fondamental en théorie de la
complexité, lui mérita (avec d’autres contributions) le prix Alan Turing en 1982. Il existe une
compétition annuelle en informatique pour déterminer les meilleurs algorithmes de satisfaction de
formules propositionnelles.

1.1.3 Expression de faits en logique propositionnelle


La logique a été inventée pour exprimer des faits, des connaissances avec plus de précision que le
langage naturel (par exemple, le français, l’anglais, etc). L’humain utilise le langage naturel pour
communiquer, mais le langage naturel comporte souvent des ambiguïtés, c’est-à-dire qu’il permet
des interprétations différentes d’un ensemble d’énoncés, en fonction de la personne qui les considère.
La logique permet d’éviter toute ambiguïté et de raisonner de manière rigoureuse. Il est difficile,
voire impossible, de proposer une traduction systématique d’un langage naturel vers des formules
de logique, à cause du trop grand nombre de façons d’exprimer des faits en langage naturel et de
l’ambiguïté omniprésente dans le langage naturel. On peut toutefois identifier quelques correspon-
dances classiques. Nous vous présenterons un résumé très simple de quelques correspondances en
logique d’énoncés en langage naturel. Nous utilisons la police suivante pour identifier les variables
propositionnelles: variablePropositionnelle. Par exemple, supposons qu’on s’intéresse au fait qu’une
personne ait la grippe. On peut utiliser la variable aLaGrippe; si cette variable vaut faux, alors
la personne n’a pas la grippe; si cette variable vaut vrai, alors on considère que la personne a la
grippe. Puisqu’une variable propositionnelle est aussi une formule propositionnelle, alors énoncer le
fait (c’est-à-dire la formule)
aLaGrippe (1.1)
signifie que la personne a la grippe. Énoncer le fait

¬aLaGrippe (1.2)

signifie que la personne n’a pas la grippe. Dans un langage de programmation comme le C ou
le Java, on aurait plutôt écrit “aLaGrippe == 1” et “aLaGrippe == 0”. On voit que la logique
propositionnelle a une notation distincte de la programmation. Bien sûr, on pourrait aussi écrire en
logique propositionnelle quelque chose qui ressemble à la programmation, en utilisant l’équivalence,
qui est analogue à l’égalité:
aLaGrippe ⇔ vrai (1.3)
et
aLaGrippe ⇔ faux (1.4)
(1.1) est équivalent à (1.3), et (1.2) est équivalent à (1.4), mais elles sont plus compliquées que
nécessaire. Les sous-section suivantes présentent brièvement quelques traductions pour chaque con-
necteur.

1.1.3.1 Négation (¬)


C’est la négation au sens usuel en langage naturel. La formule (1.2) est un exemple de négation.

6
1.1.3.2 Conjonction (∧)
La conjonction est généralement, mais pas toujours, équivalente au “et” du langage naturel. La
phrase suivante

“L’étudiant a réussi les cours IFT001 et IFT002.” (1.5)

se traduit comme suit:


IFT001Réussi ∧ IFT002Réussi
Toutefois, la phrase

“Dans la table d’hôte, vous avez le choix entre la soupe et le dessert.” (1.6)

ne signifie pas que la soupe et le dessert sont inclus dans le forfait de la table d’hôte. Il s’agit de
l’un ou l’autre. Cela serait plutôt représenté par un “ou exclusif” ⊕.

soupe ⊕ dessert

1.1.3.3 Disjonction (∨)


La disjonction est généralement, mais pas toujours, équivalente au “ou” du langage naturel. La
phrase suivante illustre un cas classique de disjonction, au sens où les deux options peuvent être
vraies en même temps.

“Pour s’inscrire au cours IFT003, il faut avoir réussi IFT001 ou IFT002.” (1.7)

La partie “il faut avoir réussi . . . ” se traduit par une disjonction.

IFT001Réussi ∨ IFT002Réussi

Une personne qui a réussi IFT001 seulement, IFT002 seulement, ou bien les deux, peut s’inscrire à
IFT003.
La phrase suivante, qui est presque identique à la phrase (1.6), mais avec un “ou” au lieu d’un
“et”, sera aussi traduite avec un “ou exclusif”.

“Dans la table d’hôte, vous avez le choix entre la soupe ou le dessert.” (1.8)

On constate que les ambiguïtés surgissent très rapidement en langage naturel.

1.1.3.4 Implication (⇒)


L’implication correspond typiquement à la forme “si . . . alors . . . ”, mais elle est aussi représentée
sous une multitude d’autres formes. Par exemple,

“Une personne qui a la grippe fait de la fièvre.” (1.9)

Cette phrase est traduite comme suit:

aLaGrippe ⇒ faitDeLaFièvre

Le connecteur ⇒ est souvent décrit en terme de condition nécessaire ou condition suffisante. Ainsi,
dans une formule de la forme A ⇒ B, on dit que B est une condition nécessaire pour A, et, de

7
manière duale, que A est une condition suffisante pour B. Par exemple, on dit que faitDeLaFièvre
est une condition nécessaire pour aLaGrippe; faire de la fièvre n’est pas suffisant pour diagnostiquer
une grippe; on peut faire de la fièvre pour plusieurs autres raisons (par exemple, pour une infection
bactérienne, alors que la grippe est une infection virale, ou à la suite d’une insolation). De manière
duale, on dit que que aLaGrippe est une condition suffisante pour faitDeLaFièvre, parce que on est
sûr qu’une personne ayant la grippe fait de la fièvre.
Les mathématiciens utilisent aussi la formulation “seulement si” pour représenter les conditions
nécessaires et suffisantes. La phrase “A seulement si B” indique que B est une condition nécessaire
pour A et, de manière duale, que A est une condition suffisante pour B. Par exemple, la phrase
suivante est équivalente à la phrase (1.9).

“Une personne a la grippe seulement si elle fait de la fièvre.” (1.10)

La phrase (1.7) se traduit en entier par une implication.

IFT001Réussi ∨ IFT002Réussi ⇒ PeutSinscrireIFT003

Grâce aux tautologies présentées dans la prochaine section (Section 1.3.1), cette phrase peut aussi
s’écrire, de manière équivalente, comme suit:

(IFT001Réussi ⇒ PeutSinscrireIFT003) ∧ (IFT002Réussi ⇒ PeutSinscrireIFT003)

On dit que IFT001Réussi est une condition suffisante pour PeutSinscrireIFT003 (c’est-à-dire, que
réussir IFT001 est une condition suffisante pour s’inscrire à IFT003). IFT002Réussi est aussi une
condition suffisante pour PeutSinscrireIFT003. On remarque que réussir un des cours IFT001 et
IFT002 est suffisant pour s’inscrire à IFT003. On remarque que le dual, “PeutSinscrireIFT003 est
une condition nécessaire pour IFT001Réussi”, semble un peu bizarre. Cela est techniquement correct
d’un point de vue mathématique, mais pas usuel dans le langage courant, car cela porterait à
confusion; personne ne dira que “pouvoir s’inscrire à un cours” est une condition nécessaire pour
la réussite d’un cours préalable! La formule suivante, qui n’a pas le même sens, permet de mieux
visualiser la distinction entre condition nécessaire et suffisante pour ce contexte.

IFT003Réussi ⇒ (IFT001Réussi ∨ IFT002Réussi)

On voit que “réussir IFT001 ou réussir IFT002” est une condition nécessaire pour réussir IFT003.
La formule suivante permet aussi de voir la distinction entre une conjonction et une disjonction.

IFT001Réussi ∧ IFT002Réussi ⇒ PeutSinscrireIFT003 (1.11)

Cette formule indique que si on a réussi les deux cours IFT001 et IFT002, on peut s’inscrire à
IFT003.
On pourrait se poser la question suivante: y a-t-il d’autres conditions qui permettent de s’inscrire
à IFT003? Une formule contenant une implication ne nous le dit pas. La formule peut être vraie,
avec PeutSinscrireIFT003 vraie et IFT001Réussi et IFT002Réussi fausse, comme le montre la table
de vérité suivante, où X1 , X2 et X3 représentent respectivement IFT001Réussi, IFT002Réussi et
PeutSinscrireIFT003.

8
no X1 X2 X3 X1 ∧ X2 (X1 ∧ X2 ) ⇒ X3
1 0 0 0 0 1
2 0 0 1 0 1
3 0 1 0 0 1
4 0 1 1 0 1
5 1 0 0 0 1
6 1 0 1 0 1
7 1 1 0 1 0
8 1 1 1 1 1
On remarque que la formule (1.11) est vraie dans tous les cas, sauf pour la ligne 7, où IFT001Réussi
et IFT002Réussi sont vraies, et PeutSinscrireIFT003 est fausse. Donc, si l’université affirme que la
formule (1.11) est vraie, alors on est dans les cas 1 à 6 et 8. Si un étudiant a réussi IFT001 et
IFT002, alors l’université doit lui permettre de s’inscrire à IFT003, si elle veut respecter sa formule,
car sinon la formule est fausse. On remarque aussi que cette formule indique aussi que l’université
peut permettre à l’étudiant de s’inscrire à IFT003 même s’il n’a pas réussi IFT001 ou IFT002; ce
cas est représenté par les lignes 1 à 6. Si on veut exclure la possibilité d’inscrire un étudiant à
IFT003 sans avoir réussi IFT001 et IFT002, alors on utilisera plutôt une équivalence, au lieu d’une
implication.

1.1.3.5 Équivalence (⇔)


L’équivalence correspond typiquement à la forme “. . . si, et seulement si, . . . ”, que l’on représente
souvent par l’abréviation ssi dans les textes mathématiques. Par exemple, la phrase
“On est admis au bac en informatique ssi on a réussi les cours collégiaux
(1.12)
suivants: MAT103, MAT105 et MAT203.”
admisBacInfo ⇔ (MAT103Réussi ∧ MAT105Réussi ∧ MAT203Réussi) (1.13)
Pour une formule de la forme A ⇔ B, on dit que A est une condition nécessaire et suffisante pour
B, et vice-versa, car l’équivalence est commutative (donc, B est aussi une condition nécessaire et
suffisante pour A). Dans l’exemple (1.13), on dit que
MAT103Réussi ∧ MAT105Réussi ∧ MAT203Réussi
est une condition nécessaire et suffisante pour être admis au baccalauréat en informatique.
Si on veut indiquer que la seule façon de s’inscrire à IFT003 est d’avoir réussi IFT001 et IFT002,
on écrit alors:
(IFT001Réussi ∧ IFT002Réussi) ⇔ PeutSinscrireIFT003
La phrase suivante est aussi un exemple d’équivalence, mais sans utiliser la forme “si et seulement
si”. Il s’agit d’une définition d’un terme; les définitions sont typiquement représentées par une
équivalence.
“Les mammifères sont caractérisés essentiellement par l’allaitement des
jeunes, un cœur à quatre cavités, un système nerveux et encéphalique (1.14)
développé, une homéothermie et une respiration pulmonaire.”
se traduit comme suit:
mammifère ⇔ allaitement ∧ cœurÀ4Cavités ∧
systèmeNerveuxEncéphaliqueDéveloppé ∧ homéothermie ∧
respirationPulmonaire

9
1.2 Logique du premier ordre
La logique du premier ordre est plus riche que la logique propositionnelle. Elle permet d’utiliser des
variables d’autres types que les variables booléennes, comme par exemple les naturels, les entiers,
les ensembles, les relations, les fonctions, . . . .

1.2.1 Syntaxe
Les formules de la logique du premier ordre sont construites en appliquant des symboles de relation
à des termes pour obtenir des formules atomiques, et en combinant des formules atomiques à l’aide
de connecteurs logiques et de quantificateurs.

Définition 2 Un terme est une suite de symboles construite à partir des règles suivantes:

1. si x est une variable, alors x est un terme;

2. si c est une constante, alors c est un terme;

3. si f est un symbole de fonction d’arité (i.e., nb de paramètres) n > 0 et que t1 , . . . , tn sont


des termes, alors f (t1 , . . . , tn ) est un terme.

Remarque 2 Par souci de généralité, certains auteurs classifient les constantes comme des sym-
boles de fonction d’arité 0, c’est-à-dire qu’une constante est une fonction qui ne prend pas de
paramètre et qui retourne toujours la même valeur.

Définition 3 Une formule atomique est une suite de symboles construite à partir des règles suiv-
antes:

1. vrai et faux sont des formules atomiques;

2. si r est un relation (i.e., une fonction booléenne, un prédicat) d’arité n > 0 et que t1 , . . . , tn
sont des termes, alors r(t1 , . . . , tn ) est une formule atomique.

Définition 4 Une formule est une suite de symboles construite à partir des règles suivantes:

1. une formule atomique est une formule;

2. si A est une formule, alors ¬A est une formule.

3. si A et B sont des formules, alors

• A∧B
• A∨B
• A⊕B
• A⇒B
• A⇐B
• A⇔B

10
sont des formules;

4. si A est une formule, alors (A) est une formule

5. si x est une variable et A est une formule, alors

• ∀x · A
• ∃x · A

sont des formules.

Les symboles ∃, ∀ sont appelés des quantificateurs (existentiel pour ∃ et universel pour ∀). Une
variable en logique du premier ordre représente un objet du monde que l’on désire décrire. Dans le
langage du logiciel Tarski’s World, une variable désigne un objet (c’est-à-dire un cube, un tétraèdre
ou un dodécaèdre). En arithmétique, une variable désigne un nombre. La variable en logique
du premier ordre joue donc un rôle différent de la variable en logique propositionnelle, qui peut
seulement désigner une valeur de vérité (vrai et faux). Nous utilisons le symbole “≡” pour indiquer
une équivalence syntaxique, c’est-à-dire que e1 ≡ e2 signifie que e1 est une abréviation pour e2 . Il
s’agit d’une forme d’égalité.

Remarque 3 Soit T un ensemble. Certains auteurs utilisent les abréviations suivantes:

∃x : T · A ≡ ∃x · x ∈ T ∧ A
∃x : T | A · B ≡ ∃x · x ∈ T ∧ A ∧ B
∀x : T · A ≡ ∀x · x ∈ T ⇒ A
∀x : T | A · B ≡ ∀x · x ∈ T ∧ A ⇒ B
∀x, y · A ≡ ∀x · ∀y · A
∀x, y : T · A ≡ ∀x · ∀y · x ∈ T ∧ y ∈ T ⇒ A
∃x, y · A ≡ ∃x · ∀y · A
∃x, y : T · A ≡ ∃x · ∀y · x ∈ T ∧ y ∈ T ⇒ A

Remarque 4 Dans ces notes de cours, les quantificateurs ∀, ∃ ont la même priorité, et leur priorité
est plus faible que les connecteurs logiques, ce qui donne les priorités suivantes, 1 étant la plus forte
priorité, et les opérateurs sur une même ligne ayant la même priorité:

1. ¬,

2. ∧,

3. ∨, ⊕

4. ⇒, ⇐

5. ⇔

6. ∀, ∃

Définition 5 Dans les formules ∀x · A et ∃x · A, les occurrences de x dans A sont dites liées
aux quantificateurs ∀x et ∃x, respectivement. Si une occurrence est sous la portée de plusieurs
quantificateurs, elle est alors liée au quantificateur le plus près (i.e., le plus imbriqué). 

11
Définition 6 Dans une formule A, une occurrences de x est dite libre si elle n’est pas liée à un
quantificateur. 

Définition 7 Une formule est dites fermée ssi elle ne contient aucune variable libre. 

Dans la formule suivante, la variable x est liée et la variable y est libre. Cette formule n’est pas
fermée, à cause de y.
∀x · x > 0 ∧ y = 1
Dans la formule suivante, la première occurrence de la variable x est liée (i.e., x > 0), mais la
deuxième est libre (i.e., x = 0), car elle est hors de la portée du quantificateur ∀. Donc, la variable
x est à la fois libre et liée dans cette formule. Cette formule n’est pas fermée, à cause de l’occurence
libre de x.
(∀x · x > 0) ∧ x = 1
Les deux occurrences de x ne désigne donc pas la même chose.
Dans l’exemple suivant, les variables x et y sont liées de plusieurs manières, indiquées par un
indice en rouge. Cette formule est fermée, car toutes les variables sont liées.
  
∀x, y · pere(x, y ) ⇒ parent(x, y ) ∧ ∀x, y · mere(x, y ) ⇒ parent(x, y ) ∧ homme(x) (1.15)
1 1 1 1 1 1 2 2 2 2 2 2 1

On peut considérer les occurrences de x identifiées par x comme distinctes de celles identifiées par
1
x. On verra, avec les lois de la logique et de la substitution, qu’il est plus clair d’utiliser la formule
2
équivalente suivante, où les occurrences de x sont regroupées
1
   
∀x, y · pere(x, y ) ⇒ parent(x, y ) ∧ homme(x) ∧ ∀x, y · mere(x, y ) ⇒ parent(x, y ) (1.16)
1 1 1 1 1 1 1 2 2 2 2 2 2

Il est très fréquent d’utiliser la même variable plusieurs fois avec des quantificateurs différents. En
pratique, chaque quantificateur définit une “nouvelle” variable.

Définition 8 L’expression A[x := t], appelée la substitution de x par t dans A, où A est une
formule, x est une variable et t est un terme, dénote la substitution de toutes les occurrences libres
de x dans A par t. Le terme t peut contenir la variable x. La substitution est dite valide si t ne
contient pas de variables qui deviennent liées dans le résultat de la substitution.
Si une substitution est invalide, on peut toujours renommer dans A les variables des quantifi-
cateurs en choisissant une variable qui n’apparaît pas dans A. On peut renommer une variable
quantifiée en utilisant la substitution. Soit x0 une variable n’apparaissant pas dans la formule A.
Alors, la formule ∀x · A est équivalente à la formule ∀x0 · (A[x := x0 ]), et la formule ∃x · A est
équivalente à la formule ∃x0 · (A[x := x0 ]). 

La substitution a une priorité plus forte que tous les connecteurs logiques. Voici le problème
engendré par une application incorrecte d’une substitution2 .

la formule suivante est valide

n ∈ N ⇒ ¬ ∀m · ( m ∈ N ⇒ m = n )

2
Source: Jean-Raymond Abrial, présentation du langage B

12
on donc peut lui appliquer une substitution pour l’utiliser pour n := m

( n ∈ N ⇒ ¬ ∀m · ( m ∈ N ⇒ m = n ) )[n := m]

ce qui donne comme résultat

m ∈ N ⇒ ¬ ∀m · ( m ∈ N ⇒ m = m )

problème !!! l’occurrence libre de n devient liée et la formule résultante est fausse

pour rendre la substitution valide, on peut remplacer ∀m par ∀z

( n ∈ N ⇒ ¬ ∀z · ( m ∈ N ⇒ m = n )[m := z] )[n := m]

( n ∈ N ⇒ ¬ ∀z · ( z ∈ N ⇒ z = n ) )[n := m]

m ∈ N ⇒ ¬ ∀z · ( z ∈ N ⇒ z = m ) )

Remarque 5 Certains auteurs utilisent les notations alternatives suivantes pour la substitution :
A[x\t], et A[t/x].

Une formule de la forme “∀x · A” signifie que la formule A est vraie pour tous les objets du
monde. Supposons que les objets du monde sont représentés par l’ensemble {o1 , . . . , on }. La valeur
de vérité de ∀x · A est donné par la formule suivante:

A[x := o1 ] ∧ . . . ∧ A[x := on ]

Il peut y avoir une infinité d’objets dans le monde, comme en arithmétique. Par exemple, l’ensemble
des nombres naturels N = {0, 1, 2, . . .} peut être décrit avec des formules quantifiées, et on obtient
alors une conjonction infinie, d’où l’intérêt d’utiliser le symbole ∀ pour désigner une conjonction
infinie.

∀x · x + 0 = x ≡ (x + 0 = x)[x := 0] ∧ (x + 0 = x)[x := 1] ∧ (x + 0 = x)[x := 2] ∧ . . .

En mathématiques, il arrive souvent que l’on donne une formule sans utiliser de quantification. Par
exemple, la loi
x+0=x
ne contient aucun quantificateur, mais, par convention, on sait que cela s’applique à tout nombre
x, donc que la formule réelle est plutôt ∀x · x + 0 = x. La convention usuelle en mathématiques
est que les variables libres d’une formule sont quantifiées universellement. Lorsqu’on effectue des
preuves formelles de correction, on doit gérer les quantificateurs avec beaucoup de rigueur. Si une
variable est libre dans plusieurs hypothèses d’une preuve, c’est qu’il s’agit de la même variable.
Une formule de la forme “∃x · A” signifie que la formule A est vrai pour au moins un objet du
monde. La valeur de vérité de ∃x · A est donné par la formule suivante:

A[x := o1 ] ∨ . . . ∨ A[x := on ]

13
Prédicat Signification
Triangle(x) x est un triangle
Square(x) x est un carré
Pentagon(x) x est un pentagone
Small(x) x est petit
Medium(x) x est moyen
Large(x) x est grand
Smaller(x, y) x est plus petit que y
SameSize(x, y) x est de même taille que y
LeftOf(x, y) x est à gauche de y
SameRow(x, y) x est sur la même ligne que y
SameCol(x, y) x est sur la même colonne que y
Between(x, y, z) x est entre y et z sur une même ligne, colonne ou diagonale
x=y x et y représentent le même objet
x <> y x et y représentent des objets distincts

Table 1.1: Prédicats du langage Tarski

1.2.2 Tarski’s World


Le logiciel Tarski’s World3 [2] permet de se familiariser avec la logique du premier ordre. Il a été
développé à l’Université Stanford par les logiciens Jon Barwise et John Etchemendy4 . Nous utilisons
une version gratuite et simplifiée de Tarski’s World produite par Robert Stärk [10].

1.2.2.1 Syntaxe du langage Tarski’s World


Le langage porte sur un monde composé d’objets dans un plan. Il y a trois types d’objets: triangle,
carré et pentagone. Chaque objet a une taille: petit, moyen et grand. On peut associer une lettre
à un objet, ce qui permet de référer à cet objet dans une formule. Le langage contient les prédicats
décrits dans le tableau 1.1, où les variable x, y, z dénotent des objets. On utilise la syntaxe données
au tableau 1.2 pour représenter les connecteurs logiques dans Tarski’s World de Robert Stärk, avec
leur priorité, la priorité 1 étant la plus forte. La seule différence avec la priorité utilisée dans les
notes de cours est qu’un quantificateur s’applique à la première formule qui suit. Par exemple, la
formule suivante
A x Large(x) /\ Square(x)
est syntaxiquement correcte, mais Tarski’s World ne peut l’évaluer, car il la considère comme si elle
était parenthésée comme suit (i.e., en utilisant les priorités) .
(A x Large(x)) /\ Square(x)
3
Alfred Tarski (1901—1983) fut l’un des logiciens les plus importants du vingtième siècle, et un mathématicien
prolifique. Juif polonais, il fut sauvé bien malgré lui de l’extermination systématique des juifs polonais durant la
deuxième guerre mondiale, en prenant le dernier bateau qui quitta la Pologne pour les États-Unis en août 1939, étant
invité à prononcer une conférence au Symposium de l’Unité de la science à Harvard. La Pologne fut envahie par
l’Allemagne et la Russie en septembre 1939, ce qui marqua le début de la deuxième guerre mondiale. Tarski devint
professeur à Berkeley en 1942 et y demeura jusqu’à sa mort, continuant à superviser des étudiants au doctorat même
après sa retraite. Il dirigea au doctorat un nombre important de femmes, ce qui est remarquable pour l’époque.
Tarski fit d’importantes contributions en logique, en algèbre et en théorie des ensembles, entre autres.
4
En plus d’être logicien et philosophe, John Etchemendy fut aussi recteur de l’Université Stanford de 2010 à 2017,
comme quoi la logique mène à tout!

14
Symbole mathématique Tarski’s World de R. Stärk Priorité
∀x · A x 1
∃x · E x 1
¬ ~ 1
∧ /\ 2
∨ \/ 3
⇒ => 4
⇔ <=> 5

Table 1.2: Syntaxe du langage Tarski

La variable x est donc libre dans la sous-formule Square(x). Tarski’s World ne peut pas évaluer
les formules non fermées, c’est-à-dire les formules qui contiennent une variable libre. Il faut la
parenthéser comme suit pour qu’elle soit fermée.

A x (Large(x) /\ Square(x))

On utilise des parenthèses pour déterminer à quelle formule un connecteur s’applique. La figure 1.1
illustre un monde où tous les types d’objets et de tailles sont illustrés. Le bouton Create permet de
créer un objet du type et de la taille sélectionnée. Le bouton Apply permet de modifier l’objet sélec-
tionné selon la taille et le type spécifiés. Le bouton Delete permet de supprimer l’objet sélectionné.

1.2.2.2 Exemples
Voici quelques exemples de phrases représentées par des formules qui sont vraies dans le monde
de la figure 1.1. Pour chaque formule, nous donnons une version écrite en syntaxe mathématique
traditionnelle avec le nombre minimum de parenthèses selon la précédence définie à la remarque 4
page 11, et l’autre en utilisant la syntaxe du langage Tarski, qui ne contient pas de précédence, et
donc les formules doivent y être parenthésées pour imposer un ordre d’évaluation des connecteurs.
1. “L’objet a est un pentagone de grande taille.”

Pentagon(a) ∧ Large(a)

Pentagon(a) /\ Large(a)

Dans cet exemple, la formule porte sur un objet particulier, le pentagone a. Le symbole a est
donc une constante du langage, tel que décrit à la définition 2.
2. “Le carré b est situé entre les objets a et c.”

Square(b) ∧ Between(b, a, c)

Square(b) /\ Between(b,a,c)

Ici aussi, les symboles a, b, c sont des constantes qui dénotent des objets particuliers.
3. “Tous les objets de grande taille sont sur la même ligne.”

∀x · ∀y · Large(x) ∧ Large(y) ⇒ SameRow(x, y)

15
Figure 1.1: Un exemple de monde dans Tarski

A x A y ((Large(x) /\ Large(y)) => SameRow(x,y))

Cette phrase ne vise pas un objet en particulier, mais des objets quelconques du monde. Il faut
donc utiliser des variables, x, y, introduites par un quantificateur. C’est ce qui distingue une
variable d’une constante dans Tarski: une variable doit être introduite par un quantificateur
universel ou existentiel; une constante est déclarée dans le monde en l’associant à une objet lors
de sa création ou modification. Pour formaliser cette phrase, il suffit d’utiliser deux variables.
Ces variables permettront de comparer chaque paire d’objets. Ainsi, la formule quantifiée est
traduite par la formule suivante, qui est une conjonction de tous les cas possibles de valeurs
pour x et y (il y en a 9 ∗ 9 = 81).

1 (Large(a) ∧ Large(a) ⇒ SameRow(a, a))


2 ∧ (Large(a) ∧ Large(b) ⇒ SameRow(a, b))
∧ ...
9 ∧ (Large(a) ∧ Large(j) ⇒ SameRow(a, j))
10 ∧ (Large(b) ∧ Large(a) ⇒ SameRow(b, a))
11 ∧ (Large(b) ∧ Large(b) ⇒ SameRow(b, b))
∧ ...
81 ∧ (Large(j) ∧ Large(j) ⇒ SameRow(j, j))

Examinons le cas no 9. L’opérande de gauche de l’implication (⇒) est une conjonction dont la
valeur est fausse, car l’objet j n’est pas de grande taille (il est de taille petite). L’implication
est donc vraie. Le cas no 9 traite un objet grand et un objet petit, donc, ces objets n’ont pas
besoin d’être sur la même ligne. Il est très fréquent d’utiliser une implication à l’intérieur d’une
quantification universelle, car une phrase porte généralement sur un sous-ensemble d’objets.

16
On utilise l’opérande de gauche de “⇒” pour indiquer à quels objets on s’intéresse dans la
phrase à formaliser. On note aussi que les cas où x = y sont aussi traités systématiquement.
Par exemple, pour le cas 1, la formule est vraie aussi, car a est grand et sur la même ligne que
lui-même.
Puisque la formule est vraie dans tous les cas, la formule quantifiée originale est donc vraie.
4. “Il y a au moins un objet de grande taille pour chaque type d’objet.”
∃x · (Large(x) ∧ Pentagon(x))
∧ ∃x · (Large(x) ∧ Square(x))
∧ ∃x · (Large(x) ∧ Triangle(x))

E x (Large(x) /\ Pentagon(x))
/\ E x (Large(x) /\ Square(x))
/\ E x (Large(x) /\ Triangle(x))

On utilise une conjonction de trois quantifications existentielles, chacune traitant un type


d’objet. Cette formule se traduit de la manière suivante pour éliminer le ∃. Chaque occurrence
du quantificateur ∃ est remplacée par une disjonction des 9 cas possibles, c’est-à-dire un cas
pour chaque objet du monde.
( (Large(a) ∧ Pentagon(a))
∨ ...
∨ (Large(j) ∧ Pentagon(j))
)
∧ ( (Large(a) ∧ Square(a))
∨ ...
∨ (Large(j) ∧ Square(j))
)
∧ ( (Large(a) ∧ Triangle(a))
∨ ...
∨ (Large(j) ∧ Triangle(j))
)

5. “Tous les carrés sont situés entre un pentagone à gauche et un triangle à droite, de même
taille, sur la même ligne.”

∀x·
(
Square(x)
⇒ ∃y · ∃z·
( Pentagon(y)
∧ Triangle(z)
∧ Between(x, y, z)
∧ LeftOf(y, z)
∧ SameRow(y, z)
∧ SameSize(x, y)
∧ SameSize(y, z)
)
)

17
A x
(
Square(x)
=> E y E z
( Pentagon(y)
/\ Triangle(z)
/\ Between(x,y,z)
/\ SameSize(x,y)
/\ SameSize(y,z)
)
)

Ce dernier exemple démontre l’importance de l’ordre des quantificateurs. Le quantificateur ∀


doit précéder les quantificateurs ∃, car cela permet de “choisir” pour chaque valeur de x, une
nouvelle valeur pour y et z. L’exemple suivant illustre le cas inverse.
6. “Il existe un carré situé à gauche de tous les pentagones”
Cette phrase est fausse dans le monde de la figure 1.1, mais elle est vraie dans le monde
ci-dessous. Elle permet d’illustrer l’ordre des quantificateurs.

Voici sa formalisation.
∃x · (Square(x) ∧ (∀y · (Pentagon(y) ⇒ LeftOf(x, y))))
E x (Square(x) /\ (A y (Pentagon(y) => LeftOf(x,y))))
Et voici sa traduction. Il y a 4 ∗ 4 = 16 cas à considérer.
1 (Square(a) ∧ ( (Pentagon(a) ⇒ LeftOf(a, a)) 1.1
∧ (Pentagon(b) ⇒ LeftOf(a, b)) 1.2
∧ (Pentagon(c) ⇒ LeftOf(a, c)) 1.3
∧ (Pentagon(d) ⇒ LeftOf(a, d)) 1.4
))
2 ∨ (Square(b) ∧ ( (Pentagon(a) ⇒ LeftOf(b, a)) 2.1
∧ (Pentagon(b) ⇒ LeftOf(b, b)) 2.2
∧ (Pentagon(c) ⇒ LeftOf(b, c)) 2.3
∧ (Pentagon(d) ⇒ LeftOf(b, d)) 2.4
))
3 ∨ (Square(c) ∧ ( (Pentagon(a) ⇒ LeftOf(c, a)) 3.1
∧ (Pentagon(b) ⇒ LeftOf(c, b)) 3.2
∧ (Pentagon(c) ⇒ LeftOf(c, c)) 3.3
∧ (Pentagon(d) ⇒ LeftOf(c, d)) 3.4
))
4 ∨ (Square(d) ∧ ( (Pentagon(a) ⇒ LeftOf(d, a)) 4.1
∧ (Pentagon(b) ⇒ LeftOf(d, b)) 4.2
∧ (Pentagon(c) ⇒ LeftOf(d, c)) 4.3
∧ (Pentagon(d) ⇒ LeftOf(d, d)) 4.4
))

18
Figure 1.2: Une erreur de syntaxe dans une formule dans Tarski’s World

Le prédicat Square est vrai seulement dans les cas 1 et 2. Dans le cas 1, toutes les sous-
formules sont vraies. La formule est donc vraie. Dans le cas 2, la sous-fourmule 2.3 est fausse
car Pentagon(c) est vrai mais LeftOf(b, c) est faux, donc la formule Pentagon(c) ⇒ LeftOf(b, c)
est fausse.

1.2.2.3 Erreurs
Tarski’s World très peu d’information quand votre formule est erronée. Il y a deux types d’erreur:
i) erreur de syntaxe, ii) erreur de formule non fermée. Une erreur de syntaxe est simplement notée
par un symbole “?” en marge de la formule, tel qu’illustré dans la figure 1.2, où le mot Squaree
est incorrect. Une erreur de formule non fermée est notée par un symbole “..” sous Mac OSX,
ou bien “U” sous Ubuntu, en marge de la formule, tel qu’illustré dans la figure 1.3: le symbole x
est utilisé dans la formule, mais il n’apparait pas comme une constante dans le monde en-dessous;
Tarski considère donc que le symbole x est une variable, et qu’elle est libre, vu qu’il n’y a pas de
quantificateur sur x, et il ne peut pas évaluer la formule. En effet, pour évaluer cette formule, il
faut savoir si elle doit être vraie pour au moins une valeur de x, ou bien pour toutes les valeurs de
x. La formule suivante est un autre exemple.

A x Large(x) /\ Square(x)

La variable x est libre dans la sous-formule Square(x), à cause de la précédence des opérateurs
dans Tarski’s World, qui fait en sorte que la portée du quantificateur ∀ se termine à la sous-formule
Large(x), donc la formule n’est pas fermée.
Pour vous aider à corriger vos erreurs, vous pouvez utiliser la commande cfml avec le nom du
fichier contenant vos formules de Tarski’s World. Par exemple, la formule suivante contient une
erreur de syntaxe.

Squaree(c) \/ Square(e)

La commande suivante donne l’erreur de syntaxe et affiche un arbre syntaxique de la formule.

ubuntu@ub-14-04:~/Bureau$ cfml test2.fml


line 1:6 extraneous input ’e’ expecting ’(’

Elle vous affiche vos erreurs de syntaxe (ligne 1 colonne 6) ainsi que l’arbre syntaxique de la formule
(voir figure 1.4). La partie erronée est affichée en rose. Chaque formule du fichier est sur une ligne.

19
Figure 1.3: Une erreur de formule non fermée dans Tarski’s World

Figure 1.4: Arbre syntaxique affiché par la commande cfml pour la formule Squaree(c) ∨
Square(e)

20
1.2.3 Formes typiques des formules quantifiées
On remarque deux formes typiques pour les formules quantifiées. Pour un quantificateur universel,
on a:
∀x · A ⇒ B
Cette forme correspond à des phrases de la forme suivante:

Tous les A satisfont la propriété B.

Voici quelques exemples concrets de cette forme avec leur formalisation.

1. Tous les carrés sont petits.


Un carré est petit.
Les carrés sont petits.
Ce qui est carré est petit.
∀x · Square(x) ⇒ Small(x)

2. Tous les petits carrés sont sur la même ligne.


Les petits carrés sont sur la même ligne.
Si deux carrés sont petits, alors ils sont sur la même ligne.
∀x · ∀y · Square(x) ∧ Small(x) ∧ Square(y) ∧ Small(y) ⇒ SameRow(x, y)

On remarque que le prédicat Small apparait dans les deux exemples, mais pas à la même place dans
la formalisation. Dans le premier exemple, “petit” dénote une propriété des carrés, alors que dans
le deuxième, on a deux propriétés pour les carrés. Être sur la même ligne dépend d’être petit. On
retrouve donc “petit” à gauche plutôt qu’à droite dans le deuxième exemple. Nous verrons la loi
de la logique (LP-37) qui nous permet de conclure que la formule suivante est une formalisation
équivalente du deuxième exemple.

∀x · ∀y · Square(x) ⇒ (Small(x) ⇒ (Square(y) ⇒ (Small(y) ⇒ SameRow(x, y))))

Par soucis de lisibilité, on utilise plutôt la première forme.


Il n’est pas toujours nécessaire d’utiliser une implication avec un quantificateur universel. Par
exemple, la phrase suivante

Tous les objets sont des petits carrés.

est formalisée comme suit.

∀x · Square(x) ∧ Small(x)

Elle ne requière pas d’implication, car la propriété “petit carré” s’applique à tous les objets.
Pour un quantificateur existentiel, la forme typique est la suivante

∃x · A ∧ B

Voici quelques exemples concrets de cette forme avec leur formalisation.

1. Il existe un petit carré.


Il y a au moins un petit carré.
∃x · Square(x) ∧ Small(x)

21
2. Il existe un petit carré ayant à sa droite un grand triangle.
∃x · Square(x) ∧ Small(x) ∧ ∃y · Triangle(y) ∧ LeftOf(x, y)

La forme
∃x · A ⇒ B
n’est quasiment jamais utilisée, car elle est très facilement satisfaisable. En effet, il suffit de trouver
un objet qui ne satisfait pas A et la formule est satisfaite, car une implication est vraie si son
opérande de gauche est fausse.

1.2.4 Formalisation de texte en langage naturel


Voici un petit exemple de formalisation de texte en logique du premier ordre. Considérons cet
extrait du règlement des études, que nous allons formaliser:

“ Une activité pédagogique, en lien avec une autre, est :

• préalable, si elle doit être réussie avant l’inscription à une autre;


• antérieure, si elle doit être complétée avant une autre, sans exigence de réussite;
• concomitante, si elle doit être suivie en même temps qu’une autre, à moins d’avoir
été réussie. ”

Pour simplifier le jargon universitaire, nous utiliserons le terme cours au lieu du terme activité
pédagogique dans la suite.
Pour formaliser ce texte, nous avons besoin de définir des prédicats et d’utiliser des variables.

1. peutSInscrire(e, c) : retourne vrai si, et seulement si, l’étudiant e peut s’inscrire au cours c.

2. réussi(e, c) : retourne vrai si, et seulement si, l’étudiant e a réussi le cours c.

3. suivi(e, c) : retourne vrai si, et seulement si, l’étudiant e a suivi le cours c. Notons que cela ne
signifie pas que l’étudiant a réussi le cours.

4. préalable(c1 , c2 ) : retourne vrai si, et seulement si, le cours c1 est préalable au cours c2 .

5. antérieur(c1 , c2 ) : retourne vrai si, et seulement si, le cours c1 est antérieur au cours c2 .

6. concomitant(c1 , c2 ) : retourne vrai si, et seulement si, le cours c1 est concomitant au cours c2 .

Préalable est une condition nécessaire pour s’inscrire à un cours, mais elle n’est pas une condition
suffisante. Il existe d’autres conditions nécessaires pour pouvoir s’inscrire à un cours, soit d’avoir
payé ses frais de scolarité des sessions antérieures, avoir payés ses amendes à la bibliothèque, etc.
Voici une formalisation d’une propriété de la notion de préalable.

∀e, c2 · peutSInscrire(e, c2 ) ⇒ (∀c1 · préalable(c1 , c2 ) ⇒ réussi(e, c1 )) (1.17)

Notons que cette formalisation utilise une implication, au lieu d’une équivalence. Elle indique que
préalable est une condition nécessaire pour s’inscrire, mais elle n’est pas suffisante. Dans le contexte
universitaire, le prédicat préalable est défini par énumération de tous les préalables. Pour connaître
l’impact de ce prédicat sur le reste des règlements universitaire, on donne une formule qui énumère
une propriété de préalable. Donc, avoir réussi les préalables est une condition nécessaire pour

22
pouvoir s’inscrire à un cours, ce qui correspond à la forme suivante, équivalente à la forme (1.18),
grâce aux lois (LP-38) et (LPO-26).
∀e, c1 , c2 · préalable(c1 , c2 ) ⇒ (peutSInscrire(e, c2 ) ⇒ réussi(e, c1 )) (1.18)
Par souci de lisibilité, on peut aussi écrire la formule (1.18) en l’indentant comme suit:
∀e, c1 , c2 ·
préalable(c1 , c2 )

peutSInscrire(e, c2 )

réussi(e, c1 )
Voici une formalisation de antérieur
∀e, c1 , c2 · antérieur(c1 , c2 ) ⇒ (peutSInscrire(e, c2 ) ⇒ suivi(e, c1 ))
∀e, c1 , c2 ·
antérieur(c1 , c2 )

peutSInscrire(e, c2 )

suivi(e, c1 )
Voici une formalisation de concomittant
∀e, c1 , c2 · concomitant(c1 , c2 ) ⇒ (peutSInscrire(e, c2 ) ⇒ réussi(e, c1 ) ∨ peutSInscrire(e, c1 ))
∀e, c1 , c2 ·
concomitant(c1 , c2 )

peutSInscrire(e, c2 )

réussi(e, c1 )

peutSInscrire(e, c1 )

1.3 Lois de la logique


1.3.1 Lois de la logique propositionnelle (tautologies)
Une tautologie est une formule de logique propositionnelle dont la valeur est vrai pour toutes les
combinaisons possibles des valeurs des variables propositionnelles. Autrement dit, une tautologie
est une formule qui est toujours vraie. Par exemple, voici deux tautologies très connues, identifiées
par Augustus De Morgan, et communément appelées Lois de De Morgan.
¬(X1 ∧ X2 ) ⇔ ¬X1 ∨ ¬X2 (1.19)
¬(X1 ∨ X2 ) ⇔ ¬X1 ∧ ¬X2 (1.20)
Voici le calcul de la valeur de vérité de la formule (1.19), en utilisant une forme encore plus compacte.
La valeur de vérité de chaque partie de la formule est donnée sous le connecteur principal de cette
partie. La valeur de vérité de la formule est donc donnée sous la colonne (en rouge) du connecteur
“⇔” pour cet exemple.

23
no X1 X2 ¬( X1 ∧ X2 ) ⇔ ¬ X1 ∨ ¬ X2
1 0 0 1 0 0 0 1 1 0 1 1 0
2 0 1 1 0 0 1 1 1 0 1 0 1
3 1 0 1 1 0 0 1 0 1 1 1 0
4 1 1 0 1 1 1 1 0 1 0 0 1
Les tautologies sont importantes, car elles sont à la source de lois de la logique propositionnelle.
Entre autres, les tautologies de la forme A ⇔ B nous permettent de remplacer la formule A par
la formule B, et vice-versa, car les deux formules sont équivalentes, au sens où la valeur de vérité
de A est la même que celle de B, peu importe la valeur des variables propositionnelles. On peut
remplacer A par B lorsque A est une sous-formule d’une formule, exactement comme pour l’égalité
entre les nombres. Les tautologies de la forme A ⇒ B nous permettent de déduire la formule B de
la formule A si on sait que A est vrai, car si A est vraie, alors B est vraie, selon la table de vérité
de “⇒”. Les tables 1.3, 1.4, 1.5, 1.6 donnent une liste des principales tautologies.

élément absorbant et A ∧ faux ⇔ faux (LP-1)


élément absorbant ou A ∨ vrai ⇔ vrai (LP-2)
élement neutre et A ∧ vrai ⇔ A (LP-3)
élement neutre ou A ∨ faux ⇔ A (LP-4)
idempotence et A∧A ⇔ A (LP-5)
idempotence ou A∨A ⇔ A (LP-6)
commutativité et A∧B ⇔ B∧A (LP-7)
commutativité ou A∨B ⇔ B∨A (LP-8)
associativité et A ∧ (B ∧ C) ⇔ (A ∧ B) ∧ C (LP-9)
associativité ou A ∨ (B ∨ C) ⇔ (A ∨ B) ∨ C (LP-10)
distributivité et sur ou A ∧ (B ∨ C) ⇔ (A ∧ B) ∨ (A ∧ C) (LP-11)
distributivité ou sur et A ∨ (B ∧ C) ⇔ (A ∨ B) ∧ (A ∨ C) (LP-12)
absorbtion et sur ou A ∧ (A ∨ B) ⇔ A (LP-13)
absorbtion ou sur et A ∨ (A ∧ B) ⇔ A (LP-14)
absorbtion et avec négation A ∧ (¬A ∨ B) ⇔ A∧B (LP-15)
absorbtion ou avec négation A ∨ (¬A ∧ B) ⇔ A∨B (LP-16)
De Morgan négation et ¬(A ∧ B) ⇔ ¬A ∨ ¬B (LP-17)
De Morgan négation ou ¬(A ∨ B) ⇔ ¬A ∧ ¬B (LP-18)
contradiction A ∧ ¬A ⇔ faux (LP-19)
tiers exclu A ∨ ¬A ⇔ vrai (LP-20)
involution ¬¬A ⇔ A (LP-21)

Table 1.3: Lois de ∧, ∨ et ¬

24
implication comme disjonction A⇒B ⇔ ¬A ∨ B (LP-22)
implication comme tiers exclu A⇒A ⇔ vrai (LP-23)
implication comme négation et A⇒B ⇔ ¬(A ∧ ¬B) (LP-24)
négation implication ¬(A ⇒ B) ⇔ A ∧ ¬B (LP-25)
Contraposée A⇒B ⇔ ¬B ⇒ ¬A (LP-26)
implication divers 1 A ⇒ vrai ⇔ vrai (LP-27)
implication divers 2 vrai ⇒ A ⇔ A (LP-28)
implication divers 3 A ⇒ faux ⇔ ¬A (LP-29)
implication divers 4 faux ⇒ A ⇔ vrai (LP-30)
implication divers 5 A ⇒ ¬A ⇔ ¬A (LP-31)
implication divers 6 ¬A ⇒ A ⇔ A (LP-32)
distributivité implication et gauche C ⇒ (A ∧ B) ⇔ (C ⇒ A) ∧ (C ⇒ B) (LP-33)
distributivité implication ou gauche C ⇒ (A ∨ B) ⇔ (C ⇒ A) ∨ (C ⇒ B) (LP-34)
distributivité implication et droite (A ∧ B) ⇒ C ⇔ (A ⇒ C) ∨ (B ⇒ C) (LP-35)
distributivité implication ou droite (A ∨ B) ⇒ C ⇔ (A ⇒ C) ∧ (B ⇒ C) (LP-36)
implication conjonction A ⇒ (B ⇒ C) ⇔ (A ∧ B) ⇒ C (LP-37)
implication conjonction A ⇒ (B ⇒ C) ⇔ B ⇒ (A ⇒ C) (LP-38)
définition par cas (A ⇒ B) ∧ (¬A ⇒ C) ⇔ (A ∧ B) ∨ (¬A ∧ C) (LP-39)

Table 1.4: Lois de ⇒

équivalence comme implication (A ⇔ B) ⇔ (A ⇒ B) ∧ (B ⇒ A) (LP-40)


équivalence comme ou (A ⇔ B) ⇔ (A ∧ B) ∨ ¬(A ∨ B) (LP-41)
équivalence comme négation (A ⇔ B) ⇔ (¬A ⇔ ¬B) (LP-42)
commutativité de l’équivalence (A ⇔ B) ⇔ (B ⇔ A) (LP-43)
associativité de l’équivalence (A ⇔ (B ⇔ C)) ⇔ ((A ⇔ B) ⇔ C) (LP-44)
équivalence divers 1 (A ⇔ A) ⇔ vrai (LP-45)
équivalence divers 2 (A ⇔ ¬A) ⇔ faux (LP-46)
équivalence divers 3 (A ⇔ vrai) ⇔ A (LP-47)
équivalence divers 4 (A ⇔ faux) ⇔ ¬A (LP-48)
équivalence divers 5 (A ⇒ B) ⇔ (A ⇔ (A ∧ B)) (LP-49)
équivalence divers 6 (A ⇒ B) ⇔ (B ⇔ (A ∨ B)) (LP-50)
équivalence divers 7 (A ∨ (B ⇔ C)) ⇔ ((A ∨ B) ⇔ (A ∨ C)) (LP-51)

Table 1.5: Lois de ⇔

ou exclusif 1 A⊕B ⇔ (¬A ⇔ B) (LP-52)


ou exclusif 2 A⊕B ⇔ ¬(A ⇔ B) (LP-53)
ou exclusif 3 A⊕B ⇔ (A ∨ B) ∧ ¬(A ∧ B) (LP-54)
ou exclusif 4 A⊕B ⇔ (A ∧ ¬B) ∨ (¬A ∧ B) (LP-55)

Table 1.6: Lois de ⊕

25
1.3.2 Lois de la logique du premier ordre
On utilise aussi A, B, . . . pour désigner des formules de logique du premier ordre. On utilise N pour
désigner une formule où x n’est pas libre (c’est-à-dire, il n’y a aucune occurrence libre de x dans
N ). Les lois de la logique propositionnelle s’appliquent aussi à la logique du premier ordre.

point univ (∀x · x = t ⇒ A) ⇔ A[x := t] (LPO-1)


point exist (∃x · x = t ∧ A) ⇔ A[x := t] (LPO-2)
point univ ensemble (∀x · x ∈ {t1 , . . . , tn } ⇒ A) ⇔ A[x := t1 ] ∧ . . . ∧ A[x := tn ] (LPO-3)
point existe ensemble (∃x · x ∈ {t1 , . . . , tn } ∧ A) ⇔ A[x := t1 ] ∨ . . . ∨ A[x := tn ] (LPO-4)
idempotence univ (∀x · ∀x · A) ⇔ ∀x · A (LPO-5)
idempotence exist (∃x · ∃x · A) ⇔ ∃x · A (LPO-6)
permutation univ (∀x · ∀y · A) ⇔ ∀y · ∀x · A (LPO-7)
permutation exist (∃x · ∃y · A) ⇔ ∃y · ∃x · A (LPO-8)
univ en exist (∀x · A) ⇔ ¬∃x · ¬A (LPO-9)
exist en univ (∃x · A) ⇔ ¬∀x · ¬A (LPO-10)
De Morgan univ (¬∀x · A) ⇔ ∃x · ¬A (LPO-11)
De Morgan exist (¬∃x · A) ⇔ ∀x · ¬A (LPO-12)
distribution univ (∀x · A ∧ B) ⇔ (∀x · A) ∧ (∀x · B) (LPO-13)
distribution exist (∃x · A ∨ B) ⇔ (∃x · A) ∨ (∃x · B) (LPO-14)
exist avec implication (∃x · A ⇒ B) ⇔ (∀x · A) ⇒ (∃x · B) (LPO-15)

Table 1.7: Lois d’équivalence des formules du premier ordre

univ exist (∀x · A) ⇒ ∃x · A (LPO-16)


univ ou (∀x · A) ∨ (∀x · B) ⇒ ∀x · A ∨ B (LPO-17)
univ avec implication (∀x · A ⇒ B) ⇒ (∀x · A) ⇒ (∀x · B) (LPO-18)
exist avec et (∃x · A ∧ B) ⇒ (∃x · A) ∧ (∃x · B) (LPO-19)
exist avec ou (∃x · A) ⇒ (∃x · B) ⇒ ∃x · A ⇒ B (LPO-20)
exist sur univ (∃x · ∀y · A) ⇒ ∀y · ∃x · A (LPO-21)
univ point (∀x · A) ⇒ A[x := t] (LPO-22)
univ point A[x := t] ⇒ ∃x · A (LPO-23)

Table 1.8: Lois d’implication des formules du premier ordre

26
déplacement univ et (∀x · N ∧ A) ⇔ N ∧ ∀x · A (LPO-24)
déplacement univ ou (∀x · N ∨ A) ⇔ N ∨ ∀x · A (LPO-25)
déplacement univ implication 1 (∀x · N ⇒ A) ⇔ N ⇒ ∀x · A (LPO-26)
déplacement univ implication 2 (∀x · A ⇒ N ) ⇔ (∃x · A) ⇒ N (LPO-27)
déplacement exist et (∃x · N ∧ A) ⇔ N ∧ ∃x · A (LPO-28)
déplacement exist ou (∃x · N ∨ A) ⇔ N ∨ ∃x · A (LPO-29)
déplacement exist implication 1 (∃x · N ⇒ A) ⇔ N ⇒ ∃x · A (LPO-30)
déplacement exist implication 2 (∃x · A ⇒ N ) ⇔ (∀x · A) ⇒ N (LPO-31)
absorption exist (∃x · N ) ⇔ N (LPO-32)
absorption univ (∀x · N ) ⇔ N (LPO-33)

Table 1.9: Lois de déplacement des quantificateurs

1.4 Preuve en logique propositionnelle


1.4.1 Déduction
Les lois des tableaux 1.3, 1.4, 1.5, 1.6 nous permettent de faire des preuves, c’est-à-dire de déduire
une formule à partir d’autres formules. Par exemple, on peut déduire la formule (LP-33) à partir
des formules (LP-12) et (LP-22). Voici une manière assez naturelle de représenter cette preuve.

C ⇒ (A ∧ B)
⇔ h (LP-22) i
¬C ∨ (A ∧ B)
⇔ h (LP-12) i
(¬C ∨ A) ∧ (¬C ∨ B)
⇔ h (LP-22) i
(C ⇒ A) ∧ (C ⇒ B)

Chaque étape de raisonnement de cette preuve est de la forme

D
⇔ h justification i
E

Le connecteur ⇔ est transitif, c’est-à-dire que si on a les formules A ⇔ B et B ⇔ C que l’on considère
vraies, alors on peut déduire que A ⇔ C est vraie; le connecteur “⇔” est similaire à l’égalité “=”
sur les nombres. On utilisant la transitivité, la preuve ci-dessus permet de conclure que la première
formule est équivalente à la dernière, donc

C ⇒ (A ∧ B) ⇔ (C ⇒ A) ∧ (C ⇒ B)

Dans cette preuve, nous avons utilisé deux lois, (LP-12) et (LP-22), pour déduire (LP-33). Nous
allons exprimer cela de manière formelle en utilisant la notation suivante:

(LP-12), (LP-22) ` (LP-33)

Voici une preuve assez complexe de la loi (LP-39) en utilisant seulement les lois de (LP-1) à
(LP-22).

27
(A ⇒ B) ∧ (¬A ⇒ C)
⇔ h (LP-22) deux fois i
(¬A ∨ B) ∧ (¬¬A ∨ C)
⇔ h (LP-21) i
(¬A ∨ B) ∧ (A ∨ C)
⇔ h (LP-11) deux fois i
(¬A ∧ A) ∨ (¬A ∧ C) ∨ (B ∧ A) ∨ (B ∧ C)
⇔ h (LP-19) i
faux ∨ (¬A ∧ C) ∨ (B ∧ A) ∨ (B ∧ C)
⇔ h (LP-4) i
(¬A ∧ C) ∨ (B ∧ A) ∨ (B ∧ C)
⇔ h (LP-3) i
(¬A ∧ C) ∨ (B ∧ A) ∨ ((B ∧ C) ∧ vrai)
⇔ h (LP-20) i
(¬A ∧ C) ∨ (B ∧ A) ∨ ((B ∧ C) ∧ (A ∨ ¬A))
⇔ h (LP-11) i
(¬A ∧ C) ∨ (B ∧ A) ∨ (B ∧ C ∧ A) ∨ (B ∧ C ∧ ¬A)
⇔ h (LP-7), (LP-8), (LP-14) deux fois i
(A ∧ B) ∨ (¬A ∧ C)

Ce style de preuve basé sur une suite d’équivalences est assez courant. Toutefois, nous allons
maintenant remonter aux racines des mathématiques et définir de manière formelle et générale ce
qu’est une preuve, et définir quelles sont les déductions valides que l’on peut faire dans une preuve
à l’aide de règles d’inférence.

Définition 9 On dénote par A1 , . . . , An ` B la relation de déduction entre les formules de la logique


propositionnelle (et aussi celle des prédicats du premier ordre). On dit alors que l’on peut déduire
le théorème B à partir des hypothèses A1 , . . . , An .  

Par convention, nous utiliserons le symbole Γ pour désigner un ensemble de formules A1 , . . . , An .


Selon ce qui est le plus approprié dans un contexte donné, nous utiliserons A1 , . . . , An ` B ou bien
Γ ` B.
L’expression A1 , . . . , An ` B signifie que si les formules A1 , . . . , An sont vraies, alors la formule
B est vraie aussi. L’expression A1 , . . . , An ` B est aussi appelée un séquent; il s’agit d’une relation,
représentée par “`”, entre les formules. On confond souvent la formule A ⇒ B avec le séquent
A ` B. Un séquent n’est pas une formule; c’est une relation entre des formules (une relation de
déduction). On peut calculer cette relation ` à l’aide de règles d’inférence de la forme

A1 ... Ak
B
où A1 , . . . , Ak sont appelées les prémisses et B la conclusion. Cette règle se lit comme suit: si
les hypothèses A1 , . . . , Ak sont vraies, alors on peut conclure que B est vraie. On peut composer
les règles pour obtenir une preuve. Une preuve est donc une suite de déductions obtenues par
application de règles d’inférence. Par exemple, les déductions suivantes

A1 A2 A3 A4
A5 A6
A7

28
permettent de conclure A1 , A2 , A3 , A4 ` A7 , c’est-à-dire que A7 est vraie si A1 , A2 , A3 , A4 sont
vraies.
La composition des règles forme une preuve, que l’on représente par un arbre. Les feuilles de
l’arbre, soient A1 , A2 , A3 , A4 , sont les hypothèses, alors que la racine est la conclusion, soit A7 . Les
formules A5 et A6 sont des résultats intermédiaires dans la déduction de A7
Certaines preuves utilisent la notion de déchargement d’hypothèse. C’est typiquement le cas
pour la preuve d’une formule de la forme A ⇒ B. Pour faire cette preuve, on procède généralement
comme suit: on suppose que A est vraie et on déduit que B est vraie. Le sequent A ` B résultant
de cette preuve permet de conclure, grâce à la table de vérité de “⇒”, que le séquent ` A ⇒ B est
aussi vrai; ce séquent ne contient aucune hypothèse. L’arbre de preuve final aura la forme suivante.

dAe[i]
..
.
B [i]
A⇒B
On dit que l’hypothèse A est déchargée, et que le séquent représenté par cet arbre de preuve est
` A ⇒ B (c’est-à-dire que A n’apparait pas dans les hypothèses du séquent). Par exemple, dans
l’arbre suivant,

A1 dA2 e[i] A3 A4
A5 A6
[R][i]
A7
la conclusion de la déduction est A1 , A3 , A4 ` A7 , car A2 a été déchargée à la dernière étape à
cause de l’application de la règle d’inférence R. On notera une règle qui décharge une hypothèse de
la manière suivante:

dAe[i]
..
.
B
[i]
C
.
Les “ .. ” indiquent que A apparait comme une feuille de l’arbre (c’est-à-dire une hypothèse).
Pour illustrer ce concept, voici un théorème en algèbre linéaire que nous allons prouver en
utilisant tout d’abord une approche classique, et ensuite une approche très formelle.

Théorème 1 Si une matrice carrée E possède un inverse à gauche F et un inverse à droite G, alors
F = G. 

Dans ce théorème, on a les hypothèses suivantes:

1. A1 ≡ “E est une matrice carrée”

2. A2 ≡ “F est l’inverse à gauche de E”

3. A3 ≡ “G est l’inverse à droite de E”

29
La conclusion (le théorème) est que F = G. Lorsque ces trois hypothèses sont vraies, alors la
conclusion est vraie. Ce théorème peut s’énoncer de manière formelle comme suit. Tout d’abord,
il faut rappeler quelques définitions d’algèbre linéaire. Soit I la matrice identité. On dit qu’une
matrice F est un inverse à gauche d’une matrice E ssi F ∗ E = I. De manière duale, on dit qu’une
matrice G est un inverse à droite d’une matrice E ssi E ∗ G = I. Finalement, une matrice M est
dite carrée, notée Carrée(M ), ssi son nombre de lignes est égal à son nombre de colonnes. On peut
formaliser ce théorème de deux manières. Dans la première, on met les hypothèses à gauche du
symbole ` :
A1 , A2 , A3 ` F = G
c’est-à-dire,
Carrée(E), F ∗ E = I, E ∗ G = I ` F =G
Dans la deuxième forme, on met toutes les hypothèses dans la formule à prouver :

` A1 ∧ A2 ∧ A3 ⇒ F = G

c’est-à-dire,
` Carrée(E) ∧ F ∗ E = I ∧ E ∗ G = I ⇒ F = G
Les deux formes sont équivalentes. Dans la deuxième forme, il n’y a aucune hypothèse; tout est
dans la formule à prouver (i.e., le théorème). La preuve de ce théorème est généralement écrite de
manière concise comme suit dans un bouquin d’algèbre linéaire.

F = F ∗ I = F ∗ (E ∗ G) = (F ∗ E) ∗ G = I ∗ G = G

On peut justifier chaque étape de manière plus rigoureuse comme suit.

F
= h Loi de l’identité : pour toute matrice carrée M , on a M ∗ I = M i
F ∗I
= h hypothèse A3 i
F ∗ (E ∗ G)
= h Associativité du produit matriciel : M1 ∗ (M2 ∗ M3 ) = (M1 ∗ M2 ) ∗ M3 i
(F ∗ E) ∗ G
= h hypothèse A2 i
I ∗G
= h Loi de l’identité i
G

Certaines lois de l’algèbre linéaire qui sont utilisées dans cette preuve n’ont pas été déclarées dans
le séquent initial. Pour être complètement formel, il faudrait les inclure aussi dans les hypothèses
du séquent. On a aussi utilisé de manière implicite les lois suivantes de l’égalité.

x=y y=z x=y


(LE-1) (LE-2)
x=z f (x) = f (y)
Voici un arbre de preuve très détaillé de cette preuve en utilisant la première forme.
∀M · M = M ∗ I I =E∗G
E∀ [M := F ] (LE-2)
F =F ∗I F ∗ I = F ∗ (E ∗ G) associativité ∗
(LE-1)
F = F ∗ (E ∗ G) F ∗ (E ∗ G) = (F ∗ E) ∗ G
tr. =
F = (F ∗ E) ∗ G

30
Par manque d’espace, nous continuons cette preuve en prenant la conclusion de l’arbre précédent
et en la mettant comme hypothèse de l’arbre ci-dessous (en rouge).
..
. F ∗E =I
(LE-2)
F = (F ∗ E) ∗ G (F ∗ E) ∗ G = I ∗ G ∀M · I ∗ M = M
tr. = E∀ [M := G]
F =I ∗G I ∗G=G
tr. =
F =G

L’hypothèse “associativité ∗” est l’application de la règle de l’associativité du produit matriciel.


∀M1 , M2 , M3 · (M1 ∗ M2 ) ∗ M3 = M1 ∗ (M2 ∗ M3 ) avec [M1 := F ][M2 := E][M3 := G]

L’hypothèse A1 indiquant que la matrice est carrée a été implicitement utilisée pour s’assurer que
le produit matriciel de chaque étape est bien défini, c’est-à-dire que les dimensions des matrices
sont compatibles pour le produit matriciel. Nous avons aussi utilisé la commutativité de l’égalité
de manière implicite. Dans cette preuve, il n’y a aucune hypothèse déchargée.
On constate que si on veut détailler une preuve a priori très simple et énumérer toutes les
hypothèses requises, il faut énumérer un nombre considérable de lois du domaine en question. Pour
simplifier et illustrer facilement le concept de preuve, nous allons utiliser seulement un ensemble
restreint de règles d’inférence de la logique propositionnelle, appelé la déduction naturelle, et prouver
des tautologies de la logique propositionnelle.

1.4.2 Règles d’inférence de la déduction naturelle


Voici un système de règles appelé déduction naturelle pour la logique propositionnelle.

A∧B [E∧1 ]
A∧B [E∧2 ]
A B [I∧ ]
A B A∧B

dAe[i] dBe[i]
.. ..
. .
A∨B C C A B
[E∨ ][i] [I∨1 ] [I∨2 ]
C A∨B A∨B

dAe[i]
..
.
B A A⇒B
[I⇒ ][i] [E⇒ ]
A⇒B B

A⇒B B⇒A [I⇔ ]


A⇔B [E⇔1 ]
A⇔B [E⇔2 ]
A⇔B A⇒B B⇒A

dAe[i] d¬Ae[i]
.. ..
. .
faux A ¬A faux faux
[I¬ ][i] [E¬ ] [Efaux ][i] [E⊥ ]
¬A faux A A

Nous utiliserons Panda [3] pour construire et vérifier nos preuves. Panda n’utilise pas la règle [Efaux ][i] .
Il utilise à la place la règle suivante.

31
¬¬A [E ][i]
¬¬
A
En combinant les règles [E¬¬ ][i] et [I¬ ][i] , on obtient la règle [Efaux ][i] . Voici quelques exemples de
preuve, où p, q, r dénotent des formules quelconques.

1. ` (p ⇒ (q ⇒ r)) ⇒ ((p ∧ q) ⇒ r)

dp ∧ qe[1]
[E∧1 ]
p dp ⇒ (q ⇒ r)e[2] dp ∧ qe[1]
[E⇒ ] [E∧2 ]
q⇒r q
[E⇒ ]
r [I⇒ ][1]
(p ∧ q) ⇒ r
[I⇒ ][2]
(p ⇒ (q ⇒ r)) ⇒ ((p ∧ q) ⇒ r)

2. ` (p ⇒ (q ∧ r)) ⇒ ((p ⇒ q) ∧ (p ⇒ r))

dp ⇒ (q ∧ r)e[1] dpe[2] dp ⇒ (q ∧ r)e[1] dpe[3]


[E⇒ ] [E⇒ ]
q∧r q∧r
[E∧1 ]
q
[I⇒ ] [2] r [E ∧2 ]
[I⇒ ][3]
p⇒q p⇒r
[I∧ ]
(p ⇒ q) ∧ (p ⇒ r)
[I⇒ ][1]
(p ⇒ (q ∧ r)) ⇒ ((p ⇒ q) ∧ (p ⇒ r))

3. ` ((p ⇒ q) ∧ (p ⇒ r)) ⇒ (p ⇒ (q ∧ r))

d(p ⇒ q) ∧ (p ⇒ r)e[1] d(p ⇒ q) ∧ (p ⇒ r)e[1]


[E∧1 ] [E∧2 ]
p⇒q dpe[2] p⇒r dpe[2]
[E⇒ ] [E⇒ ]
q r
[I∧ ]
q∧r [2]
[I⇒ ]
p ⇒ (q ∧ r)
[I⇒ ][1]
((p ⇒ q) ∧ (p ⇒ r)) ⇒ (p ⇒ (q ∧ r))

4. ` p ∨ (q ∧ r) ⇒ (p ∨ q) ∧ (p ∨ r)

dq ∧ re[2] dq ∧ re[2]
[E∧1 ]
dpe[2] dpe[2] q r [I∨2[E] ∧2 ]
[I ] [I ] [I∨2 ]
p ∨ q ∨1 p ∨ r ∨1 p∨q p∨r
[I∧ ] [I∧ ]
dp ∨ (q ∧ r)e[1] (p ∨ q) ∧ (p ∨ r) (p ∨ q) ∧ (p ∨ r) [2] [E∨ ]
(p ∨ q) ∧ (p ∨ r)
[I⇒ ][1]
p ∨ (q ∧ r) ⇒ (p ∨ q) ∧ (p ∨ r)

5. ` ¬(p ∨ q) ⇒ ¬p ∧ ¬q

dpe[2] dqe[3]
[I∨1 ] [I∨2 ]
d¬(p ∨ q)e[1] p∨q d¬(p ∨ q)e[1] p∨q
[E¬ ] [E¬ ]
faux [I¬ ][2]
faux [I¬ ][3]
¬p ¬q
[I∧ ]
¬p ∧ ¬q
[I⇒ ][1]
¬(p ∨ q) ⇒ ¬p ∧ ¬q

32
6. ` p ∧ (q ∨ r) ⇒ (p ∧ q) ∨ (p ∧ r)

dp ∧ (q ∨ r)e[1] dp ∧ (q ∨ r)e[1]
[E∧1 ] [E∧1 ]
p dqe[2] p dre[2]
[I∧ ] [I∧ ]
dp ∧ (q ∨ r)e[1] p∧q p∧r
[E∧2 ] [I∨1 ] [I∨2 ]
q∨r (p ∧ q) ∨ (p ∧ r) (p ∧ q) ∨ (p ∧ r)
[E∨ ][2]
(p ∧ q) ∨ (p ∧ r)
[I⇒ ][1]
p ∧ (q ∨ r) ⇒ (p ∧ q) ∨ (p ∧ r)

7. ` (p ⇒ (q ⇒ r)) ⇒ (q ⇒ (p ⇒ r))

dp ⇒ (q ⇒ r)e[1] dpe[2]
[E⇒ ]
q⇒r dqe[3]
[E⇒ ]
r [2]
p ⇒ r [I⇒ ] [3]
[I⇒ ]
q ⇒ (p ⇒ r)
[I⇒ ][1]
(p ⇒ (q ⇒ r)) ⇒ (q ⇒ (p ⇒ r))

8. ` ¬(p ∧ q) ⇒ ¬p ∨ ¬q

d¬pe[1] d¬qe[3]
[I∨1 ] [I∨2 ]
¬p ∨ ¬q d¬(¬p ∨ ¬q)e[2] ¬p ∨ ¬q d¬(¬p ∨ ¬q)e[2]
[E¬ ] [E¬ ]
faux [E ][1] faux [E ][3]
p false q false
[I∧ ]
p∧q d¬(p ∧ q)e[4]
[E¬ ]
faux [E ][2]
¬p ∨ ¬q false
[I⇒ ][4]
¬(p ∧ q) ⇒ ¬p ∨ ¬q

9. ` p ∧ (¬p ∨ q) ⇒ p ∧ q

dp ∧ (¬p ∨ q)e[1]
[E∧1 ]
p d¬pe[2] dp ∧ (¬p ∨ q)e[1]
[E¬ ] [E∧1 ]
dp ∧ (¬p ∨ q)e[1] faux [E ] p dqe[2]
[E∧2 ]
¬p ∨ q p ∧ q false p∧q
[E∨ ][2]
p∧q
[I⇒ ][1]
p ∧ (¬p ∨ q) ⇒ p ∧ q

10. ` p ∨ (¬p ∧ q) ⇒ p ∨ q

d¬p ∧ qe[2]
[E∧2 ]
dpe[2] q
[I ] [I∨2 ]
dp ∨ (¬p ∧ qe[1] p ∨ q ∨1 p∨q [2] [E∨ ]
p∨q
[I⇒ ][1]
p ∨ (¬p ∧ q) ⇒ p ∨ q

33
1.4.3 Cohérence
Définition 10 Une valuation est une affectation de valeurs à des variables propositionnelles; elle
est notée [X1 := v1 , . . . , Xn := vn ], où vi ∈ {0, 1}. Certains auteurs utilisent le terme interprétation
comme synonyme de valuation. La valeur de vérité d’une formule propositionnelle A pour une
valuation V est notée AV . Cette valeur de vérité est calculée en remplaçant les variables de la
formule par leur valeur donnée par la valuation, et en calculant le résultant à l’aide des tables de
vérité. 

Exemple 1 Par exemple, la valeur de vérité de la formule X1 ∧ ¬X2 sous la valuation [X1 :=
1, X2 := 0], notée (X1 ∧ ¬X2 )[X1 := 1, X2 := 0], est 1. On peut la calculer ainsi à l’aide des tables
de vérité.

(X1 ∧ ¬X2 )[X1 := 1, X2 := 0]


= h substitution des variables par leur valeur i
1 ∧ ¬0
= h calcul de ¬0 = 1 i
1∧1
= h calcul de 1 ∧ 1 = 1 i
1

Définition 11 On dit qu’une valuation V satisfait une formule A, notée V |= A, ssi AV = 1.


Lorsque V |= A, on dit que V est un modèle de A, et que A est satisfaisable. Une formule A est
dite valide, notée |= A, ssi toute valuation V est un modèle de A. Une tautologie est donc un
synonyme de formule valide. Soit Γ = {A1 , . . . , An } un ensemble de formules propositionnelles et
V une valuation; on dit que V est un modèle de Γ, noté V |= Γ, ssi V est un modèle pour chaque
formule de Γ. 

Dans l’exemple 1, la valuation [X1 := 1, X2 := 0] est un modèle de la formule (X1 ∧ ¬X2 )


On utilise la notation {e1 , . . . , en } pour dénoter un ensemble formé des éléments e1 , . . . , en . La
notion d’ensemble sera définie formellement plus tard dans le cours.

Définition 12 Un ensemble de formules propositionnelles Γ est dit tautologiquement cohérent ssi


il existe un modèle V pour Γ. 

Par exemple, les trois formules suivantes ne sont pas tautologiquement cohérente.

aLaGrippe ⇒ faitDeLaFièvre (1.21)

aLaGrippe (1.22)
¬faitDeLaFièvre (1.23)
Si quelqu’un affirme que ces trois formules sont vraies, alors on peut dire qu’il est incohérent, car
il n’existe pas de valuation permettant de satisfaire les trois formules en même temps. La seule
valuation pouvant satisfaire la formule (1.22) contient aLaGrippe := 1. La seule valuation pouvant
satisfaire la formule (1.23) contient faitDeLaFièvre := 0. La valuation

[aLaGrippe := 1, faitDeLaFièvre := 0]

34
ne satisfait pas la formule (1.21). On peut donc systématiquement vérifier si un discours ou un
document de spécification est cohérent en calculant toutes les valuations possibles. Il peut exister
plusieurs valuations satisfaisant l’ensemble des formules considérées; l’important est qu’il en existe
au moins une.

Définition 13 On dit que B est une conséquence logique de Γ, notée Γ ( B, ssi tout modèle de Γ
est aussi un modèle de B. 

Exemple 2 Dans le tableau ci-dessous, on montre que la formule X3 est une conséquence logique
des formules X1 ∧ X2 et (X1 ∧ X2 ) ⇒ X3 , c’est-à-dire
{ X1 ∧ X2 , (X1 ∧ X2 ) ⇒ X3 } ( X3
.
no X1 X2 X3 X1 ∧ X2 (X1 ∧ X2 ) ⇒ X3 X3
1 0 0 0 0 1 0
2 0 0 1 0 1 1
3 0 1 0 0 1 0
4 0 1 1 0 1 1
5 1 0 0 0 1 0
6 1 0 1 0 1 1
7 1 1 0 1 0 0
8 1 1 1 1 1 1
Il n’y qu’un seul modèle des formules à gauche du symbole ( , soit la ligne 8. Il faut donc vérifier
que la formule X3 est vraie aussi pour ce modèle, et c’est bien le cas. 

Exemple 3 Dans le tableau ci-dessous, on montre que la formule X3 n’est pas une conséquence
logique des formules X1 ∨ X2 et (X1 ∧ X2 ) ⇒ X3 .
{ X1 ∨ X2 , (X1 ∧ X2 ) ⇒ X3 } (
6 X3
.
no X1 X2 X3 X1 ∨ X2 (X1 ∧ X2 ) ⇒ X3 X3
1 0 0 0 0 1 0
2 0 0 1 0 1 1
3 0 1 0 1 1 0
4 0 1 1 1 1 1
5 1 0 0 1 1 0
6 1 0 1 1 1 1
7 1 1 0 1 0 0
8 1 1 1 1 1 1
Les formules à gauche du symbole 6( ont cinq modèles, soit les lignes 3, 4, 5, 6 et 8. Il faut donc
vérifier que la formule X3 est vraie pour chacun de ces modèles, et ce n’est pas le cas pour les lignes
3 et 5. 

Une autre façon de définir la cohérence est d’utiliser la relation déduction. On dit qu’un ensemble
de formule A1 , . . . , An est cohérent ssi il n’est pas possible d’obtenir A1 , . . . , An ` B et A1 , . . . , An `
¬B. On peut montrer que les formules (1.21), (1.22), (1.23) sont incohérentes, à l’aide de la déduction
suivante.

35
aLaGrippe aLaGrippe ⇒ faitDeLaFièvre
[E⇒ ]
faitDeLaFièvre
On peut donc déduire la formule faitDeLaFièvre, ce qui contredit la formule (1.23). Cette approche
est moins facile à automatiser. La plupart des approches de vérification de la cohérence utilisent la
recherche d’un modèle à l’aide des formes normales, qui sont l’objet de la prochaine section.
Les règles d’inférence de la déduction naturelle sont dites cohérentes, car si Γ ` B, alors Γ ( B,
c’est-à-dire tout théorème B est aussi une conséquence logique. Ces règles sont aussi dites complètes,
car si Γ ( B, alors Γ ` B, c’est-à-dire toute conséquence logique est aussi un théorème.

Théorème 2 Γ ( B ssi Γ ` B. 

Ainsi, on peut calculer si une formule est vraie en utilisant soit les tables de vérité, soit les règles
d’inférences. C’est une propriété fondamentale de la logique. Notons que ` et ( sont deux relations
distinctes sur les formules propositionnelles; la première est calculée avec les règles d’inférence; la
seconde est calculée avec les tables de vérités. Pour calculer Γ ( B en utilisant la définition 13,
il faut évaluer 2n valuations, où n est le nombre de variables propositionnelles apparaissant dans
les formules de Γ et B. Les outils utilisent plutôt le théorème suivant, qui réduit le problème de
conséquence logique au problème de satisfaction d’un ensemble de formules.

Théorème 3 Γ ( B ssi l’ensemble des formules Γ ∪ ¬B est incohérent. 

Le symbole ∪ est l’opérateur usuel d’union sur les ensembles. Finalement, la satisfaction d’un
ensemble de formules peut être réduit au problème de la satisfaction d’une formule, qui est NP-
complet.

Théorème 4 Un ensemble de formules {A1 , . . . , An } est cohérent ssi la formule A1 ∧ . . . ∧ An est


satisfaisable. 

Les logiciels sont généralement spécifiés avec la logique du premier ordre, qui est l’objet de la
prochaine section. Toute formule représentant la correction d’un logiciel peut être traduite en une
formule propositionnelle (souvent gigantesque). Quand on désire faire la preuve de correction d’un
logiciel, on a deux options. Soit on utilise les algorithmes de satisfaction d’une formule proposi-
tionnelle (c’est-à-dire, la relation “|=”) si le nombre de variables est relativement petit (quelques
dizaines de million de variables!). Si le nombre de variables est trop grand, on utilisera les règles
d’inférence et la déduction (donc, la relation “`”), car le calcul d’une preuve est indépendant du
nombre de variables propositionnelles. Malheureusement, la plupart des logiciels nécessitent un
nombre astronomique (très très grand!) de variables propositionnelles et la relation |= n’est pas
calculable en un temps et un espace mémoire acceptables. D’autre part, Gödel a démontré que
l’arithmétique est indécidable, au sens où il existe des formules qui ne peuvent être ni prouvées ni
réfutées (cf, le théorème d’incomplétude de l’arithmétique de 1931). En 1936, Turing et Church ont
montré qu’il existe des problèmes indécidables, c’est-à-dire qu’il n’existe pas d’algorithme pouvant
déterminer s’il existe une preuve d’un séquent Γ ` B pour n’importe quel Γ et B. C’est pour ce
problème que Turing a défini le concept de machine de Turing, le premier modèle mathématique
abstrait d’un ordinateur, afin de définir formellement la notion d’algorithme. Sa preuve montre
qu’il n’existe pas de machine qui peut lire la description d’une machine et déterminer si elle termine
(i.e., communément appelé le problème de l’arrêt). À la même époque, Church a défini le λ-calcul
pour montrer qu’il n’existe pas de fonction récursive permettant de dire si deux λ-expressions sont
équivalentes. Le λ-calcul constitue la deuxième définition de la notion d’algorithme.
Les théorèmes de Gödel, Church et Turing établissent les limites de la déduction en logique. Bien
sûr, cela n’empêche pas de faire de la preuve automatisée. En pratique, les prouveurs automatisés

36
arrivent très souvent à trouver une preuve pour les séquents; ils utilisent des heuristiques pour le
faire, ou bien ils sont guidés par un humain dans la recherche d’une preuve. Si on n’arrive pas
à trouver une preuve d’un séquent Γ ` B, on peut alors essayer de prouver Γ ` ¬B, ou bien de
satisfaire Γ ∪ ¬B. Si on trouve un modèle pour Γ ∪ ¬B, alors on sait que Γ ` B est faux, donc que
Γ ` ¬B est vrai. Bien sûr, il faut aussi s’assurer que Γ est cohérent, car si Γ est incohérent, alors
on peut prouver à la fois Γ ` ¬B et Γ ` B. Si Γ est incohérent, cela signifie que la spécification du
logiciel est mal construite.

1.5 Preuve en logique du premier ordre


1.5.1 Règles d’inférence
Les règles d’inférence de la logique propositionnelle s’appliquent aussi à la logique du premier or-
dre, car elle contient aussi les connecteurs propositionnels. Il reste à ajouter des règles pour les
quantificateurs existentiel (∃) et universel (∀).

∀x · A [E∀ ] A [I∀ ] où x n’est pas libre dans les hypothèses de A


A[x := t] ∀x · A

dAe[i]
..
.
A[x := t] ∃x · A B où x n’est pas libre dans B ni
[I∃ ] [E∃]
∃x · A B dans les hypothèses de B

1.6 Formes normales


Plusieurs travaux en logique, comme l’analyse de complexité algorithmique de la satisfaction d’une
formule et la preuve automatisée de théorèmes, nécessitent de transformer une formule en une autre
formule équivalente, mais sous une forme appelée “normale”. Il y a deux principales formes normales,
conjonctive et disjonctive.

Définition 14 Une formule est dite en forme normale conjonctive (FNC) ssi elle est de la forme

(A1 ∨ . . . ∨ Ak ) ∧ . . . ∧ (Ak0 ∨ . . . ∨ An )

où chaque formule constituante Ai est soit une variable propositionnelle (Xi ), soit la négation d’une
variable propositionnelle (¬Xi ). 

Exemple 4 Les formules suivantes sont en FNC

(X1 ∨ ¬X2 ) ∧ ¬X3 ∧ (X1 ∨ X4 ∨ X5 )

X1 ∨ ¬X3
X1 ∧ ¬X3
X1

37
¬X1
Les formules suivantes ne sont pas en FNC. Les parties qui font en sorte que la définition est violée
sont en rouge.
(X1 ∨ X4 ) ∧ ¬(X2 ∨ ¬X3 )
X1 ∨ (X2 ∧ ¬X3 )
X1 ∧ (X2 ∨ (X3 ∧ X4 ))


Définition 15 Une formule est dite en forme normale disjonctive (FND) ssi elle est de la forme

(A1 ∧ . . . ∧ Ak ) ∨ . . . ∨ (Ak0 ∧ . . . ∧ An )

où chaque formule constituante Ai est soit une variable propositionnelle (Xi ), soit la négation d’une
variable propositionnelle (¬Xi ). 

Exemple 5 Les formules suivantes sont en FND

(X1 ∧ ¬X2 ) ∨ ¬X3 ∨ (X1 ∧ X4 ∧ X5 )

X1 ∨ ¬X3
X1 ∧ ¬X3
X1
¬X1
Les formules suivantes ne sont pas en FND. Les parties qui font en sorte que la définition est violée
sont en rouge.
(X1 ∧ X4 ) ∨ ¬(X2 ∧ ¬X3 )
X1 ∧ (X2 ∨ ¬X3 )
X1 ∨ (X2 ∧ (X3 ∨ X4 ))


Toute formule propositionnelle peut être transformée en une formule équivalente en FNC à l’aide
des lois (LP-12), (LP-17), (LP-18), (LP-21), (LP-22) et (LP-40), ou en FND, avec les mêmes lois,
mais en utilisant (LP-11) au lieu de (LP-12). Voici un exemple de transformation d’une formule en
FNC.

¬(X1 ∨ ¬X2 ) ∨ X3
⇔ h (LP-18) i
(¬X1 ∧ ¬¬X2 ) ∨ X3
⇔ h (LP-8) i
X3 ∨ (¬X1 ∧ ¬¬X2 )
⇔ h (LP-10) i
(X3 ∨ ¬X1 ) ∧ (X3 ∨ ¬¬X2 )
⇔ h (LP-21) i
(X3 ∨ ¬X1 ) ∧ (X3 ∨ X2 )

38
La FND est calculée de manière similaire.

¬(X1 ∨ ¬X2 ) ∨ X3
⇔ h (LP-18) i
(¬X1 ∧ ¬¬X2 ) ∨ X3
⇔ h (LP-21) i
(¬X1 ∧ X2 ) ∨ X3

39
1.7 Exercices
1. Prouvez les formules suivantes en utilisant seulement les règles d’inférence de la déduction
naturelle. Indiquez pour chaque étape de preuve, la règle utilisée et les hypothèses déchargées
(s’il y a déchargement avec cette règle). Toutes les hypothèses doivent être déchargées, puisque
chaque séquent ci-dessous ne contient aucune hypothèse (c’est-à-dire, chaque séquent est de
la forme ∅ ` A, que nous notons simplement ` A par souci de concision).

(a) ` (p ∨ q) ∧ (p ∨ r) ⇒ p ∨ (q ∧ r)
Solution:
q(3) r(5)
(I∧)
((p∨q)∧(p∨r))(1) p(4) (q∧r)
(E∧) (I∨) (I∨)
((p∨q)∧(p∨r))(1) p(2) (p∨r) (p∨(q∧r)) (p∨(q∧r))
(E∧) (I∨) (E∨)(4)(5)
(p∨q) (p∨(q∧r)) (p∨(q∧r))
(E∨)(2)(3)
(p∨(q∧r))
(((p∨q)∧(p∨r))⇒(p∨(q∧r)))
(I⇒)(1)

(b) ` (p ∧ q) ∨ (p ∧ r) ⇒ p ∧ (q ∨ r)
Solution:
(p∧q)(4) (p∧r)(5)
(E∧)
(p∧q)(2) (p∧r)(3) ((p∧q)∨(p∧r))(1)
q r (E∧)
((p∧q)∨(p∧r))(1) p (E∧) p (E∧) (q∨r)
(I∨)
(q∨r)
(I∨)
p (E∨)(2)(3) (E∨)(4)(5)
(q∨r)
(I∧)
(p∧(q∨r))
(((p∧q)∨(p∧r))⇒(p∧(q∨r)))
(I⇒)(1)

(c) ` p ∧ q ⇒ p ∧ (¬p ∨ q)
Solution:
(p∧q)(1)
(p∧q)(1) q (E∧)
p (E∧) (I∨)
(¬p∨q)
(I∧)
(p∧(¬p∨q))
((p∧q)⇒(p∧(¬p∨q)))
(I⇒)(1)

(d) ` ¬¬p ⇒ p
Solution:
¬¬p(1)
p (E¬)
(¬¬p⇒p)
(I⇒)(1)

(e) ` p ⇒ ¬¬p
Solution:
p(1) ¬p(2)
(I⊥)
⊥ (I¬)(2)
¬¬p
(p⇒¬¬p)
(I⇒)(1)

(f) ` (p ⇒ q) ⇒ (¬q ⇒ ¬p)


Solution:
(p⇒q)(1) p(3)
q (E⇒) ¬q(2)
(I⊥)
⊥ (I¬)(3)
¬p
(I⇒)(2)
(¬q⇒¬p)
((p⇒q)⇒(¬q⇒¬p))
(I⇒)(1)

40
(g) ` (¬q ⇒ ¬p) ⇒ (p ⇒ q)
Solution:
(¬q⇒¬p)(1) ¬q(3)
p(2) ¬p (E⇒)
(I⊥)
⊥ (I¬)(3)
¬¬q
q (E¬)
(I⇒)(2)
(p⇒q)
((¬q⇒¬p)⇒(p⇒q))
(I⇒)(1)

(h) ` ¬p ∧ ¬q ⇒ ¬(p ∨ q)
Solution:
(¬p∧¬q)(1) (¬p∧¬q)(1)
p(3) ¬p (E∧) q(4) ¬q (E∧)
(p∨q)(2) (I⊥) (I⊥)
⊥ ⊥ (E∨)(3)(4)
⊥ (I¬)(2)
¬(p∨q)
((¬p∧¬q)⇒¬(p∨q))
(I⇒)(1)

(i) ` ¬p ∨ ¬q ⇒ ¬(p ∧ q)
Solution:
(p∧q)(2) (p∧q)(2)
p (E∧) ¬p(3) q (E∧) ¬q(4)
(¬p∨¬q)(1) (I⊥) (I⊥)
⊥ ⊥ (E∨)(3)(4)
⊥ (I¬)(2)
¬(p∧q)
((¬p∨¬q)⇒¬(p∧q))
(I⇒)(1)

2. Prouvez les formules suivantes avec les règles d’inférences de la déduction naturelle.

(a) ` a ∨ ¬a (loi du tiers exclu, c’est-à-dire la loi LP-20)

Solution:
a(2) (I∨) ¬(a∨¬a)(1)
(a∨¬a)
(I⊥)
⊥ (I¬)(2)
¬a (I∨) ¬(a∨¬a)(1)
(a∨¬a)
(I⊥)
⊥ (I¬)(1)
¬¬(a∨¬a)
(a∨¬a)
(E¬)

(b) ` a ∨ b ⇒ a ∨ (¬a ∧ b)

Solution:

b(3) ¬a(5)
(I∧)
(¬a∧b)
(I∨) ¬(a∨(¬a∧b))(4)
(a∨(¬a∧b))
(I⊥)
⊥ (I¬)(5)
¬¬a (E¬)
a (I∨) ¬(a∨(¬a∧b))(4)
(a∨(¬a∧b))
(I⊥)
⊥ (I¬)(4)
(a∨b)(1) a(2) (I∨)
¬¬(a∨(¬a∧b))
(E¬)
(a∨(¬a∧b)) (a∨(¬a∧b))
(E∨)(2)(3)
(a∨(¬a∧b))
((a∨b)→(a∨(¬a∧b)))
(I→)(1)

41
(c) ` (a ⇒ b) ⇔ (¬a ∨ b)

Solution:

(a→b)(1) a(3)
(E→)
b (I∨) ¬(¬a∨b)(2)
(¬a∨b)
(I⊥)
⊥ (I¬)(3)
¬a (I∨) ¬(¬a∨b)(2) a(5) ¬a(6)
(¬a∨b) (I⊥)

(I⊥) (¬a∨b)(4) ⊥ (E⊥) b(7)
(I¬)(2) b (E∨)(6)(7)
¬¬(¬a∨b) b
(E¬) (I→)(5)
(¬a∨b) (a→b)
(I→)(1) (I→)(4)
((a→b)→(¬a∨b)) ((¬a∨b)→(a→b))
((a→b)↔(¬a∨b))
(I∧)

La branche gauche de la preuve est la plus difficile. On se retrouve avec une hypothèse
a ⇒ b. Pour l’utiliser, il faut avoir a en hypothèse. On serait tenté de prouver ¬a ∨ b à
partir de ¬a et monter a en hypothèse à l’aide d’une preuve par contradiction, mais cela
ne suffit pas pour obtenir la contradiction. Il faut plutôt prouver ¬a∨b par contradiction,
et monter ensuite a en hypothèse à l’aide d’une deuxième preuve par contradiction.

3. Prouvez les lois (LP-23) à (LP-43) en utilisant le style équationnel et les lois (LP-1) à (LP-22).
Il n’est pas nécessaire de toutes les prouver pour se préparer à l’examen. Plusieurs ont déjà
été prouvées en exercices ou en devoir.

4. Transformez les formules suivantes en FNC et en FND.

(a) ¬(X1 ⇒ ¬(X2 ∨ X3 ))


(b) ¬(X1 ∨ ¬((X2 ∧ X3 ) ⇒ ¬X4 ))

5. Déterminez si X1 ⇒ ¬(X2 ∨ X3 ), X1 ∧ X2 ( ¬X3

42
Chapitre 2

Ensemble, relation et fonction

Les mathématiques discrètes comprennent un éventail assez large d’objets mathématiques. Dans le
cadre de ce cours, nous nous limiterons aux fondements des mathématiques discrètes, soit la théorie
des ensembles, les relations, les fonctions et les suites. Les structures de données et les bases de
données relationnelles sont inspirées des mathématiques discrètes. Peter Codd se mérita le prix
Alan Turing en 1981 pour sa contribution à la définition des bases de données relationnelles fondées
sur les relations (i.e., l’algèbre des relations).
Nous utilisons le langage de spécification B [1] pour illustrer les mathématiques discrètes, ainsi
que l’outil ProB [7, 8], conçu par Michael Leuschel. Consultez le fichier

http://info.usherbrooke.ca/mfrappier/mat115/ref/resume-ens-rel-fonction-abrial.pdf

pour des exemples des opérateurs du langage B. Ce document a été produit par Jean-Raymond
Abrial1 , auteur de la méthode B.

2.1 Conventions
Nous utilisons les conventions suivantes
1
Jean-Raymond Abrial est docteur honoris causa de l’Université de Sherbrooke, diplômé de l’École Polytechnique
en France et de l’Université de Stanford aux États-Unis. Il a débuté sa carrière d’informaticien dans les années 60, en
concevant l’un des tout premiers systèmes de gestion de bases de données de type réseau, permettant aux développeurs
d’applications de gestion de l’époque de faire abstraction de la complexité de la représentation interne des données. Il
participa aussi à la conception du langage de programmation Ada en 1978-79 au sein de l’équipe CII-Honeywell-Bull
qui remporta le concours international organisé par le Ministère de la défense américain. Il y fut responsable des
aspects concurrentiels et notamment de la notion de rendez-vous, qui est à la base de la programmation concurrente.
Dès le début des années 70, il a amorcé ses travaux sur les modèles sémantiques de données et sur la spécification
formelle des systèmes, avec la méthode Z, la méthode B et finalement Event-B, qui constituent sans aucun doute une
des plus grandes contributions en génie logiciel. Il a réalisé le défi colossal de mener à terme une idée, de son concept
théorique initial jusqu’à son application industrielle à grande échelle, une performance encore plus remarquable qu’il
fut le premier à le faire au niveau des méthodes formelles, plusieurs grands chercheurs s’y étant attaqué sans succès
auparavant.

43
Symbole Description
X variable propositionnelle
A, B, C formule
t terme
x variable (terme)
~x x1 , . . . , xn (liste de variables)
S, T, U ensemble (terme)
f, g, h fonction (terme)
r relation (terme)
i, j, k, m, n nombre (terme)
s suite

2.2 La logique du premier ordre en B


Le langage B a une syntaxe légèrement différente de la syntaxe traditionnelle. Voici la syntaxe des
formules en B.

Syntaxe
Description Expression ASCII B Notes
négation ¬A not (A)
conjonction A∧B A & B
disjonction A∨B A or B
implication A⇒B A => B
équivalence A⇔B A <=> B
pour tout ∀(~x) · (A ⇒ C) !(~x).(A => B) A doit typer chaque xi
il existe ∃(~x) · (A ∧ B) #(~x) · (A ∧ B) A doit typer chaque xi
égalité t1 = t2 t1 = t2
inégalité t1 6= t2 t1 /= t2

Table 2.1: Syntaxe des formules de logique du premier ordre en B

2.3 Les ensembles


Un ensemble est une collection d’objets, sans ordre particulier. Les ensembles servent, entre autres,
à donner un type aux variables d’une formule de logique du premier ordre. Il existe plusieurs
méthodes pour définir un ensemble; nous en utiliserons deux, soit la définition par extension (aussi
appelée par énumération) et la définition par compréhension. La définition par extension consiste
à énumérer les éléments de l’ensemble:
{e1 , . . . , en }
où e1 , . . . , en représentent les éléments de l’ensemble. Par exemple, voici l’ensemble CouleurPrimaire,
qui contient 3 couleurs.
CouleurPrimaire = {rouge, vert, bleu}
L’appartenance d’un élément e à un ensemble E est notée

e∈E

44
Par exemple, on a
rouge ∈ CouleurPrimaire
L’appartenance à un ensemble défini par extension est définie comme suit:
y ∈ {e1 , . . . , en } ⇔ y = e1 ∨ . . . ∨ y = en (2.1)
Si un ensemble comprend un grand nombre d’éléments, ou bien une infinité d’éléments, on utilise
parfois les “. . . ” :
N = {0, 1, 2, . . .}
MultipleTrois = {0, 3, 6, 9, . . .}
Toutefois, cela n’est pas formel. Pour obtenir une définition formelle, on utilise alors la deuxième
méthode, c’est-à-dire par compréhension. Soit x une variable et A une formule de logique du premier
ordre; la forme générale d’une définition d’un ensemble par compréhension est la suivante:
{x | A}
La variable x représente un élément quelconque de l’ensemble et la formule A représente le critère
d’appartenance d’un élément x à l’ensemble. L’appartenance d’un élément à un ensemble défini par
compréhension est définie comme suit.
y ∈ {x | A} ⇔ A[x := y] (2.2)
On peut choisir la variable que l’on veut pour définir un ensemble par compréhension. Toutefois,
cette variable devient liée par cette définition, un peu comme la variable x est liée dans une formule
∀x · A. Par exemple, l’ensemble suivant contient tous les multiples de 3:
MultipleTrois = {x | x ∈ N ∧ ∃y · y ∈ N ∧ x = y ∗ 3}
On peut lire cette définition comme suit.
Un multiple de 3, représenté ici par la variable x, est un nombre naturel (x ∈ N) tel
qu’il existe un nombre naturel y tel que x = y ∗ 3.
On suppose ici que la définition des nombres naturels N est déjà donnée. La définition de N n’est pas
si triviale à formuler. Elle n’utilise pas la notion de compréhension; elle est basée sur les axiomes de
Peano, proposés en 1889! Un axiome est une formule que l’on suppose vraie, et qui sert à définir une
structure mathématique. Dans ce cours, nous n’aborderons pas la définition de N; nous supposerons
qu’elle existe.
Pour vérifier qu’un nombre n appartient à MultipleTrois, il suffit de vérifier si n satisfait la formule
définissant MultipleTrois, c’est-à-dire vérifier A[x := n]. Voici le calcul pour n = 6.
6 ∈ MultipleTrois
⇔ h (2.2) i
(x ∈ N ∧ ∃y · y ∈ N ∧ x = y ∗ 3)[x := 6]
⇔ h application de la substitution i
6 ∈ N ∧ ∃y · y ∈ N ∧ 6 = y ∗ 3
⇐ h règle I∃ avec y := 2 i
6 ∈ N ∧ ((y ∈ N ∧ 6 = y ∗ 3)[y := 2])
⇔ h application de la substitution i
6∈N∧2∈N∧6=2∗3
⇔ h arithmétique i
vrai

45
Une définition par compréhension peut mener à une contradiction. Russell2 l’a illustré par la
définition suivante:
y = {x | x 6∈ x}
On peut alors effectuer les déductions suivantes.

y∈y
⇔ h (2.2) i
(x 6∈ x)[x := y]
⇔ h application de la substitution i
y 6∈ y

On obtient donc y ∈ y ⇔ y 6∈ y, ce qui est une contradiction. De la même manière, “l’ensemble de


tous les ensembles” n’existe pas, car si on essaie de le définir, on obtient aussi une contradiction.
Pour éviter ces contradictions, on s’assure que chaque ensemble est défini à partir d’un ensemble
S qui est lui-même bien défini, comme par exemple N, ou bien un ensemble défini par énumération.
Pour éviter ces paradoxes, on utilise la forme générale suivante, où S est un ensemble bien défini.

E = {x | x ∈ S ∧ A}

De cette façon, l’ensemble est E est un sous-ensemble de l’ensemble bien défini S. Ce type de
définition ne peut mener à une contradiction comme celle illustrée par le paradoxe de Russell. Les
mécanismes utilisés pour produire des ensembles bien définis sont hors de la portée de ce cours;
il s’agit, entre autres, de la théorie des types. Par exemple, N est défini avec le nombre 0 et la
fonction succ qui dénote le successeur d’un nombre. Ainsi, 1 est défini comme succ(0), 2 comme
succ(succ(0)), et ainsi de suite.
On dit que qu’un ensemble E1 est un sous-ensemble de E2 , noté E1 ⊆ E2 , ssi tous les éléments
de E1 sont aussi des éléments de E2 . Voici la définition formelle du prédicat ⊆.

E1 ⊆ E2 ⇔ ∀x · x ∈ E1 ⇒ x ∈ E2 (2.3)

Finalement, l’ensemble vide, noté ∅, ne contient aucun élément, et il est donc inclus dans tous
les ensembles. Soit S un ensemble.
x ∈ ∅ ⇔ faux (2.4)
Soit S un ensemble quelconque, on a donc, par (2.3) et (2.4):

∅⊆S (2.5)
2
Bertrand Russell (1872—1970) est un mathématicien, logicien, philosophe, épistémologue, homme politique et
moraliste britannique. Il est considéré, avec Frege, comme l’un des fondateurs de la logique contemporaine (avec son
livre Principia Mathematica). Il s’engage dans de nombreuses polémiques : il défend des idées proches du socialisme
de tendance libertaire et milite également contre toutes les formes de religion, considérant qu’elles sont des systèmes
de cruauté inspirés par la peur et l’ignorance. Il organise le tribunal Sartre-Russell contre les crimes commis pendant
la guerre du Viêt Nam. Son œuvre, qui comprend également des romans et des nouvelles, est couronnée par le prix
Nobel de littérature en 1950.

46
Syntaxe
Description Expression ASCII B Notes
ensemble vide ∅ {} x ∈ ∅ ⇔ faux
x ∈ {t1 , . . . , tn }
extension (énumération) {t1 , . . . , tn } { t1 , . . . , t n } ⇔
x = t1 ∨ . . . ∨ x = tn
compréhension {x | A} {x | A} y ∈ {x | A} ⇔ A[x := y]
A doit donner un type à x
naturels N NATURAL {0, 1, 2, . . .}
naturels non nuls N1 NATURAL1 {1, 2, . . .}
entiers Z INTEGER {. . . , −2, −1, 0, 1, 2, . . .}
intervalle d’entiers i..j i..j {x | x ∈ Z ∧ i ≤ x ∧ x ≤ j},
où i ∈ Z et j ∈ Z
plus petit entier implé- MININT MININT valeur dépend du processeur
mentable
plus grand entier im- MAXINT MAXINT valeur dépend du processeur
plémentable
naturels implémentables NAT NAT 0..MAXINT
nat. impl. non nuls NAT1 NAT1 1..MAXINT
entiers implémentables INT INT MININT..MAXINT
chaîne de caractères STRING STRING
booléens BOOL BOOL {TRUE, FALSE}, pas une formule!!!

Table 2.2: Constructeurs d’ensemble

Syntaxe
Description Expression ASCII B Définition
appartenance x∈S x : S x est un élément de S
négation appartenance x 6∈ S x /: S ¬(x ∈ S)
inclusion S⊆T S <: T ∀x · x ∈ S ⇒ x ∈ T
négation inclusion S 6⊆ T S /<: T ¬(S ⊆ T )
inclusion stricte S⊂T S <<: T S ⊆ T ∧ S 6= T
négation inclusion stricte S 6⊂ T S /<<: T ¬(S ⊂ T )
fini finite(S) N/A S est fini

Table 2.3: Prédicat sur les ensembles

47
Syntaxe
Description Expression ASCII B Définition
union S∪T S \/ T {x | x ∈ S ∨ x ∈ T }
intersection S∩T S /\ T {x | x ∈ S ∧ x ∈ T }
différence S−T S−T {x | x ∈ S ∧ x 6∈ T }
ens. des parties
(ens. des sous-ens.) P(S) POW(S) {T | T ⊆ S}
(ens. de puissance)
ens. des parties
P1 (S) POW1(S) P(S) − {∅}
non vides
ens. des parties
F(S) FIN(S) {T | T ⊆ S ∧ finite(T )}
finies
ens. des parties
F1 (S) FIN1(S) F(S) − {∅}
finies non vides
union généralisée union(S) union(S) {x | ∃T · T ∈ S ∧ x ∈ T }
intersection
inter(S) inter(S) {x | ∀T · T ∈ S ⇒ x ∈ T }
généralisée S
union quantifiée (~x).(A | S) UNION(~x).(A | S) {y | ∃(~x) · (A ∧ y ∈ S)}
T
intersection quantifiée (~x).(A | S) INTER(~x).(A | S) {y | ∀(~x) · (A ⇒ y ∈ S)}
cardinalité card(S) card(S) nb. d’éléments de S (si finite(S))

Table 2.4: Opérations sur les ensembles

2.4 Les relations


Soit S et T deux ensembles; soit x un élément de S et y un élément de T . On note par x 7→ y le
couple formé des éléments x et y. Le produit cartésien de S par T , noté S × T , est l’ensemble de
tous les couples formés à partir des élément de S et de T . Voici la définition formelle.

S × T = {x 7→ y | x ∈ S ∧ y ∈ T } (2.6)

Notons que nous utilisons ici une version “abrégée” de la définition par compréhension; en effet, selon
la syntaxe introduite à la section précédente, on devrait retrouver une seule variable à la gauche du
séparateur “|”, alors qu’on retrouve ici un couple de variable x 7→ y. La version non-abrégé, qui est
beaucoup moins lisible, est la suivante:

S × T = {z | ∃x, y · z = x 7→ y ∧ x ∈ S ∧ y ∈ T }

48
Syntaxe
Description Expression ASCII B Définition
couple (élément d’une relation) x 7→ y x |-> y parfois aussi noté (x, y)
couple (notation alternative) (x, y) (x, y) (x, y) = x 7→ y
n-uplet (x1 , . . . , xn ) (x1 , . . . , xn ) (x1 , . . . , xn ) = ((x1 7→ x2 ) 7→ . . . xn )
produit cartésien S×T S * T {x 7→ y | x ∈ S ∧ y ∈ T }
ensemble de relations S↔T S <-> T P(S × T )
identité id(S) id(S) {x 7→ x | x ∈ S}
domaine d’une relation dom(r) dom(r) {x | ∃y · x 7→ y ∈ r}
codomaine d’une relation ran(r) ran(r) {y | ∃x · x 7→ y ∈ r}
composition (produit) (r1 ; r2 ) (r1 ; r2 ) {x 7→ y | ∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ r2 }
restriction du domaine SCr S <| r {x 7→ y | x ∈ S ∧ x 7→ y ∈ r}
restriction du codomaine rBS r |> S {x 7→ y | y ∈ S ∧ x 7→ y ∈ r}
antirestriction du domaine SC −r S <<| r {x 7→ y | x 6∈ S ∧ x 7→ y ∈ r}
antirestriction du codomaine rB−S r |>> S {x 7→ y | y 6∈ S ∧ x 7→ y ∈ r}
surcharge r1 C− r2 r1 <+ r2 (dom(r2 ) C − r1 ) ∪ r2
inverse r−1 r~ {x 7→ y | y 7→ x ∈ r}
image r[S] r[S] ran(S C r)
itération rn iterate(r, n) r0 = id(S), rn = r ; rn−1 , où r ∈ S × S
r∗ (n).(n ≥ 0 | rn )
S
fermeture réflexive et transitive closure(r)
r+ (n).(n ≥ 1 | rn )
S
fermeture transitive closure1(r)

Table 2.5: Opérations sur les relations

2.5 Les fonctions


Une fonction est un cas particulier de relation. Dans cette section, nous introduisons huit classes
de fonction, la plus générale étant la classes des fonctions.

2.5.1 Fonction
Une fonction f d’un ensemble S vers un ensemble T , notée f ∈ S → 7 T , est une relation telle que
chaque élément de dom(f ) est associé à exactement un élément de T . De manière équivalente,
on peut aussi dire que chaque élément de S est associé via f à au plus un élément de T (i.e., les
éléments de S qui ne sont pas dans le domaine de f ne sont pas associés à un élément de T , bien
entendu). Ce qui donne les définitions suivantes, qui sont toutes équivalentes.

f ∈S→
7 T

f ∈S↔T
∧ ∀x, y, z · x 7→ y ∈ f ∧ x 7→ z ∈ f ⇒ y = z

f ∈S↔T
∧ f −1 ; f ⊆ id(T )

On a les propriétés suivantes.

49
f ∈S→
7 T

∀x · x ∈ dom(f ) ⇒ card(f [{x}]) = 1

∀x · x ∈ S ⇒ card(f [{x}]) ≤ 1

∀x · x ∈ S ⇒ card(f [{x}]) ∈ 0..1 ** lien avec diag. UML **

∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 0.. card(S) ** lien avec diag. UML **
Ce qui donne ceci comme exemple typique, avec la partie en rouge qui montre la caractéristique
distinctive d’une fonction par rapport aux autres classes de fonctions, c’est-à-dire qu’un élément de
S peut ne pas être relié à un élément de T par la fonction f .

f ∈S→
7 T

2.5.2 Fonction totale


Une fonction totale (aussi appelée application en mathématiques) f d’un ensemble S vers un en-
semble T , notée f ∈ S → T , est une relation telle que chaque élément de S est associé à exactement
un élément de T . Ce qui donne les définitions alternatives suivantes, qui sont toutes équivalentes.
f ∈S→T

f ∈S→ 7 T
∧ dom(f ) = S

f −1 ; f ⊆ id(T )
∧ id(S) ⊆ f ; f −1

On a les propriétés suivantes.


f ∈S→T

∀x · x ∈ S ⇒ card(f [{x}]) = 1

∀x · x ∈ S ⇒ card(f [{x}]) ∈ 1..1 ** lien avec diag. UML **
Ce qui donne ceci comme exemple typique, avec la partie en rouge qui montre la caractéristique
distinctive d’une fonction totale, c’est-à-dire que tous les éléments de S sont reliés à un élément de
T par la fonction f .

50
f ∈S→T

On note aussi que


S→T ⊆S→
7 T
ce qui signifie qu’une fonction totale est un cas particulier de fonction.

2.5.3 Fonction injective


Une fonction injective (aussi appelée injection) f d’un ensemble S vers un ensemble T , notée
f ∈S 7 T , est une fonction telle que f −1 est aussi une fonction. Cela signifie que chaque élément
de T est associé à au plus un élément de S. Ce qui donne les définitions suivantes, qui sont toutes
équivalentes.
f ∈S
7 T

f ∈S→ 7 T
∧ ∀x, y, z · x 7→ z ∈ f ∧ y 7→ z ∈ f ⇒ x = y

f ∈S→
7 T
−1
∧ f ∈T →7 S

f ; f −1 ⊆ id(S)
∧ f −1 ; f ⊆ id(T )

f ∈S→ 7 T
∧ ∀x · x ∈ S ⇒ card(f [{x}]) ∈ 0..1 ** lien avec diag. UML **
∧ ∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 0..1 ** lien avec diag. UML **
Ce qui donne ceci comme exemple typique.

f ∈S
7 T

51
2.5.4 Fonction injective totale
Une fonction injective totale f d’un ensemble S vers un ensemble T est notée f ∈ S  T . Ce qui
donne les définitions suivantes, qui sont toutes équivalentes.
f ∈ST

f ∈S 7 T
∧ dom(f ) = S

f ; f −1 = id(S)
∧ f −1 ; f ⊆ id(T )

f ∈S→ 7 T
∧ ∀x · x ∈ S ⇒ card(f [{x}]) ∈ 1..1 ** lien avec diag. UML **
∧ ∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 0..1 ** lien avec diag. UML **
Ce qui donne ceci comme exemple typique.

f ∈ST

2.5.5 Fonction surjective


Une fonction surjective (aussi appelée surjection) f d’un ensemble S vers un ensemble T , notée
f ∈S 7 T , est une fonction telle que chaque élément de T est une image d’un élément de S. Ce
qui donne les définitions suivantes, qui sont toutes équivalentes.
f ∈S
7 T

f ∈S→ 7 T
∧ ∀y · y ∈ T ⇒ ∃x · x ∈ dom(f ) ∧ f (x) = y

f ∈S→ 7 T
∧ ran(f ) = T

f ∈S→ 7 T
∧ f −1 ; f = id(T )

f ∈S→ 7 T
∧ ∀x · x ∈ S ⇒ card(f [{x}]) ∈ 0..1 ** lien avec diag. UML **
∧ ∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 1.. card(S) ** lien avec diag. UML **

52
Ce qui donne ceci comme exemple typique.

f ∈S
7 T

2.5.6 Fonction surjective totale


Une fonction surjective totale f d’un ensemble S vers un ensemble T est notée f ∈ S  T . Ce qui
donne les définitions suivantes, qui sont toutes équivalentes.

f ∈ST

f ∈S
7 T
∧ f ∈S→T

f ∈S→T
∧ ran(f ) = T

f ∈S→ 7 T
∧ f −1 ; f = id(T )
∧ id(S) ⊆ f ; f −1

f ∈S→ 7 T
∧ ∀x · x ∈ S ⇒ card(f [{x}]) ∈ 1..1 ** lien avec diag. UML **
∧ ∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 1.. card(S)

Ce qui donne ceci comme exemple typique.

f ∈ST

53
2.5.7 Fonction bijective
Une fonction bijective f d’un ensemble S vers un ensemble T , notée f ∈ S  7 T , est une fonction
injective et surjective. Ce qui donne les définitions suivantes, qui sont toutes équivalentes.
f ∈S
7 T


f ∈S7 T
∧ f ∈S
7 T

f ∈S→ 7 T
∧ ∀x · x ∈ S ⇒ card(f [{x}]) ∈ 0..1 ** lien avec diag. UML **
∧ ∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 1..1

f −1 ∈ T  S
Ce qui donne ceci comme exemple typique.

f ∈S
7 T


Vu que l’inverse d’une bijection est une injection totale, les bijections ne sont pas utilisées en
pratique; on utilise au lieu les injections totales.

2.5.8 Fonction bijective totale


Une fonction bijective totale f d’un ensemble S vers un ensemble T , notée f ∈ S   T , est une
fonction totale, injective et surjective. Ce qui donne les définitions suivantes, qui sont toutes équiv-
alentes.
f ∈S
T

f ∈ST
∧ f ∈ST

f ; f −1 = id(S)
∧ f −1 ; f = id(T )

f ∈S→ 7 T
∧ ∀x · x ∈ S ⇒ card(f [{x}]) ∈ 1..1 ** lien avec diag. UML **
∧ ∀y · y ∈ T ⇒ card(f −1 [{y}]) ∈ 1..1 ** lien avec diag. UML **
Ce qui donne ceci comme exemple typique.

54
f ∈S
T

Dans le langage courant, les bijections totales sont simplement appelées des bijections.

55
Le tableau 2.6 résume les classes de fonctions.

Syntaxe
Description Expression ASCII B Définition
fonctions S→7 T S +-> T {f | f ∈ S ↔ T ∧ f −1 ; f ⊆ id(T )}
fonctions totales S→T S --> T {f | f ∈ S →7 T ∧ dom(f ) = S}
injections S 7 T S >+> T {f | f ∈ S → 7 T ∧ f −1 ∈ T → 7 S}
injections totales ST S >-> T {f | f ∈ S  7 T ∧ dom(f ) = S}
surjections S 7 T S +->> T {f | f ∈ S → 7 T ∧ ran(f ) = T }
surjections totales ST S -->> T {f | f ∈ S  7 T ∧ dom(f ) = S}
bijections S 7 T S >+>> T {f | f ∈ S  7 T ∧f ∈S 7 T}
bijections totales ST S >->> T {f | f ∈ S  T ∧ f ∈ S  T }
lambda expression λx.(A | t) %x.(A | t) {x 7→ t | A}

Table 2.6: Classes et constructeur de fonctions

2.6 Les nombres

Syntaxe
Description Expression ASCII B Exemple
addition m+n m+n 1+1=2
soustraction m−n m−n 2−1=1
multiplication m∗n m∗n 2∗2=4
puissance mn m ** n 32 = 9
division entière m/n m/n 5/2 = 2
modulo m mod n m mod n 5 mod 2 = 1
maximum max(S) max(S) max({1, 2, 3}) = 3
minimum min(S) min(S) min({1, 2, 3}) = 1
somme quantifiée Σ(x).(A | t) SIGMA(x).(A | t) Σ(x).(x ∈ 1..3 | x ∗ 2) =
1 ∗ 2 + 2 ∗ 2 + 3 ∗ 2 = 12
produit quantifié Π(x).(A | t) PI(x).(A | t) Π(x).(x ∈ 1..3 | x + 1) =
(1 + 1) ∗ (2 + 1) ∗ (3 + 1) = 24
plus petit x<y x < y 1<2
plus petit ou égal x≤y x <= y 1≤1
plus grand x>y x > y 2>1
plus grand ou égal x≥y x >= y 2≥2

Table 2.7: Opérations et prédicats sur les nombres

2.7 Les suites


3

3
Section rédigée en collaboration avec le professeur D. Ziou.

56
Une suite est une collection ordonnée, possiblement infinie, d’objets indexés par un nombre
naturel. On note souvent une suite comme une liste d’éléments :

e0 , e1 , e2 , . . .

Parfois, la numérotation des objets débute à 1 au lieu de 0; ce choix est arbitraire et n’influence
en rien les principes de base d’une suite. On utilise parfois le terme séquence comme synonyme de
suite, mais il s’agit d’un anglicisme fréquemment utilisé, et généralement toléré.
D’un point de vue formel, une suite est représentée par une fonction f telle que
f ∈N→ 7 S
∧ finite(f ) ⇒ dom(f ) = 0..(card(f ) − 1)
∧ ¬ finite(f ) ⇒ dom(f ) = N
Cette définition semble un peu compliquée, mais elle indique seulement que le domaine de la fonction
est un intervalle commençant à 0; les objets sont donc numérotés séquentiellement en commençant
par 0; la complication vient du fait que si la suite est infinie, la fonction card n’est pas définie; il
faut donc faire deux cas distincts.
Voici quelques exemples de suites sur les naturels :
• les nombres pairs 0, 2, 4, 6, . . .

• les nombres impairs 1, 3, 5, 7, . . .

• les nombres premiers 2, 3, 5, 7, 11, . . .


Il faut bien distinguer qu’une suite n’est pas un ensemble. La suite des nombres pairs est distincte de
l’ensemble des nombres pairs: dans une suite, on énumère les élément dans un ordre particulier, alors
que dans un ensemble, il n’y a pas d’ordre. Les éléments de la suite des nombres pairs constituent
l’ensemble des nombres pairs. La suite permet de parler du iième nombre pair, alors que ce concept
n’existe pas dans un ensemble. Lorsqu’on énumère un ensemble, on choisit un ordre particulier,
donc on construit une suite.
On peut définir formellement une suite à l’aide d’une fonction. Voici quelques exemples, en
utilisant diverses notations équivalentes.
• la suite f des nombres pairs :

f = {(x, y) | x ∈ N ∧ y = 2 ∗ x}

ou bien, en utilisant la notation λ pour définir une fonction

f = λx.(x ∈ N | 2 ∗ x)

ou bien, en utilisant la notation mathématique traditionnelle

f (x) = 2 ∗ x, pour un nombre naturel x ≥ 0

• la suite des nombres impairs : {(x, y) | x ∈ N ∧ y = 2 ∗ x + 1} = λx.(x ∈ N | 2 ∗ x + 1)


Certaines suites sont plus difficiles à définir. Par exemple, la suite des nombres premiers est très
difficile à définir, et très coûteuse en temps à calculer sur un ordinateur. Pourtant, l’ensemble des
nombres premiers est très facile à définir.

ensembleDesNombresPremiers = {x | x ∈ N ∧ x > 1 ∧ ¬∃y · y 6∈ {1, x} ∧ x mod y = 0}

57
La définition de la suite des nombres premiers est un problème célèbre en mathématiques et en
informatique. Une bonne partie de la cryptographie en informatique repose sur les nombres premiers,
car il est aussi très difficile de calculer les facteurs premiers d’un nombre. On utilise les nombres
premiers pour encrypter les messages dans la plupart des protocoles utilisés pour les communications
et les transactions sur internet.

2.7.1 Suite géométrique


Une suite f est dite géométrique ssi

∃k · k ∈ N ∧ ∀x · x ∈ dom(f ) ∧ x > 0 ⇒ f (x)/f (x − 1) = k

Ainsi, le ratio de deux éléments consécutifs est constant. On dit aussi que f est une suite géométrique
de raison k. Ce qui donne la forme suivante:

f1 = f0 ∗ k
f2 = f1 ∗ k = (f0 ∗ k) ∗ k = f0 ∗ k 2
f3 = f2 ∗ k = (f0 ∗ k 2 ) ∗ k = f0 ∗ k 3
...

Donc, si f est une suite géométrique, on a :

∀x · x ∈ dom(f ) ⇒ f (x) = f (0) ∗ k x

Voici un exemple de suite géométrique, avec f (0) = 1 et k = 2.

f = λx.(x ∈ N | 2x )

2.7.2 Suite arithmétique


Une suite f est dite arithmétique ssi

∃k · k ∈ N ∧ ∀x · x > 0 ⇒ f (x) − f (x − 1) = k

Ainsi, la différence de deux éléments consécutifs est constante. On a donc que

∀x · x ∈ dom(f ) ⇒ f (x) = f (0) + k ∗ x

La suite des nombres pairs et la suite des nombres impairs sont des suites géométriques, avec k = 2.

2.7.3 Limite et monotonie


Soit R l’ensemble des nombres réels et |x| la valeur absolue de x. Une suite infinie f est dite
convergente ssi

∃l · l ∈ R ∧
∀ ·  ∈ R ∧  > 0 ⇒
∃x1 · x1 ∈ N ∧
∀x2 · x2 ∈ N ∧ x1 ≤ x2 ⇒
|l − f (x2 )| ≤ 

58
On dit que l est la limite de la suite f , et on note lim f = l. Une suite infinie qui n’est pas
convergente est dite divergente.
Une suite f est dite croissante ssi

∀x1 , x2 · x1 < x2 ⇒ f (x1 ) ≤ f (x2 )

Une suite f est dite strictement croissante ssi

∀x1 , x2 · x1 < x2 ⇒ f (x1 ) < f (x2 )

Une suite f est dite décroissante ssi

∀x1 , x2 · x1 < x2 ⇒ f (x1 ) ≥ f (x2 )

Une suite f est dite strictement décroissante ssi

∀x1 , x2 · x1 < x2 ⇒ f (x1 ) > f (x2 )

On dit que b est une borne supérieure d’une suite f ssi

∀x · f (x) ≤ b

On dit que b est une borne inférieure d’une suite f ssi

∀x · f (x) ≥ b

La limite d’une suite croissante convergente est la plus petite borne supérieure de la suite. La limite
d’une suite décroissante convergente est la plus grande borne inférieure de la suite. Par exemple, la
suite f = λx.(x ∈ N | 1/x) converge vers 0, tandis que la suite f = λx.(x ∈ N | x) diverge.

2.7.4 Séries
La somme des éléments d’une suite est appelée une série mathématique. Soit f une suite. La série
de f est définie comme suit dans le langage B :

Σ(x).(x ∈ dom(f ) | f (x))

En mathématiques, on utilise souvent la notation suivante pour les séries finies


n
X
f (x)
x=0

ou bien, la forme suivante, qui fonctionne pour les séries finies et infinies:
X
f (x)
x∈dom(f )

De manière informelle, on écrit aussi

f (0) + f (1) + f (2) + . . .

Voici quelques exemples de séries.


n
X n ∗ (n − 1)
x=
2
x=0

59
n
X
2x = 2n+1 − 1
x=0

La série d’une suite géométrique f de raison k avec k ∈ R ∧ k 6= 1 est calculée comme suit :
n
1 − k n+1
X  
x
f (0) ∗ k = f (0) ∗
1−k
x=0

On remarque que pour k = 2 et f (0) = 1, on obtient nx=0 2x = 2n+1 − 1.


P
En faisant varier n, on peut construire une suite avec une série. Considérons la suite g suivante,
dont les éléments sont les séries géométriques f de raison k ayant pour domaine 0..n.
n
!
X
x
g = λn. n ∈ N | f (0) ∗ k
x=0

On remarque que cette suite diverge pour k > 1, c’est-à-dire que la somme n’admet pas de borne
supérieure. Toutefois, cette suite converge pour 0 < k < 1 et donne la limite suivante:

f (0)
lim g =
1−k
Dans ce cas, on voit que la somme d’un nombre arbitrairement grand de termes s’approche d’un
nombre réel (ie, qu’elle est bornée par un nombre réel). Par exemple, soit
n  x
!
X 1
g = λn. n ∈ N |
2
x=0

alors on a
1
lim g = 1 =2
1− 2
Notons que la somme n’atteint jamais 2, mais que l’on peut s’approcher aussi près que l’on veut de
2 (i.e., le  de la définition (2.7.3)), on choisissant une valeur de n assez grande

2.7.5 Opérateur du langage B sur les suites


Le langage B comprend les suites, mais la numérotation des objets débute à 1 au lieu de 0. Le
tableau 2.8 décrit les principales opérations sur les suites.

60
Syntaxe
Description Expression ASCII B Définition/Exemple
suite vide [] []
suite par extension [t1 , . . . , tn ] [t1 , . . . , tn ]
suite sur S seq(S) seq(S) {f | f ∈ N → 7 S ∧ finite(f )
∧ dom(f ) = 1.. card(f )}
suite non-vide sur S seq1 (S) seq1(S) seq(S) − [ ]
suite injective sur S iseq(S) iseq(S) seq(S) ∩ N  7 S
suite inj. non-vide sur S iseq1 (S) iseq1(S) iseq1 (S) − [ ]
concaténation s1 _ s2 s1 ^s2 [a, b] _[c, d] = [a, b, c, d]
premier élément first(s) first(s) s 6= [ ], first([a, b, c]) = a
sauf premier élément tail(s) tail(s) s 6= [ ], tail([a, b, c]) = [b, c]
dernier élément last(s) last(s) s 6= [ ], last([a, b, c]) = c
sauf dernier élément front(s) front(s) s 6= [ ], front([a, b, c]) = [a, b]
inverse rev(s) rev(s) rev([a, b, c]) = [c, b, a]

Table 2.8: Opérations et prédicats sur les suites

2.8 Propriétés des relations


Définition 16 Soit r ∈ S ↔ S. On définit les propriétés suivantes pour r.

61
Propriété Définition en logique Définition Exemples
relationnelle
réflexive ∀x · x ∈ S ⇒ x 7→ x ∈ r id(S) ⊆ r =, ≤, ⊆
irréflexive ∀x · x ∈ S ⇒ x 7→ x 6∈ r id(S) ∩ r = ∅ 6=, <, ⊂
(syn. antiréflexive)
∀(x, y, z) ·
x∈S∧y ∈S∧z ∈S∧
transitive x 7→ y ∈ r ∧ y 7→ z ∈ r r;r ⊆r =, <, ≤, ⊂, ⊆

x 7→ z ∈ r
∀(x, y) ·
x∈S∧y ∈S∧
symétrique x 7→ y ∈ r r−1 = r =

y 7→ x ∈ r
∀(x, y) · (x, y)
asymétrique x∈S∧y ∈S∧
(syn. antisymétrique x 7→ y ∈ r r ∩ r−1 = ∅ <, ⊂
forte) ⇒
y 7→ x 6∈ r
∀(x, y) ·
x∈S∧y ∈S∧
antisymétrique x 7→ y ∈ r ∧ y 7→ x ∈ r r ∩ r−1 ⊆ id(S) =, <, ≤, ⊆

x=y
totale ∀x · x ∈ S ⇒ ∃y · x 7→ y ∈ r dom(r) = S =, <, ≤, ⊆
surjective ∀x · x ∈ S ⇒ ∃y · y 7→ x ∈ r ran(r) = S =, <, ≤, ⊆
pré-ordre réflexive et transitive =, ≤, ⊆
équivalence réflexive, transitive, symétrique =
ordre réflexive, transitive et antisymétrique =, ≤, ⊆
ordre strict irréflexive et transitive (par déduction, <, ⊂
elle est aussi asymétrique)
bien fondée ∀T · T ∈ P1 (S) ⇒ < sur N, ⊂
∃s1 · s1 ∈ T ∧ ∀s2 · s2 7→ s1 6∈ r
i.e., il existe un élément minimal dans
T.
Ou bien, de manière équivalente,
il n’existe pas de suite infinie x0 , x1 , . . .
telle que xn+1 7→ xn ∈ r
i.e., . . . < x2 < x1 < x0
acyclique il n’existe pas de suite x0 , . . . , xn r+ ∩ id(S) = ∅ < sur N, Z, R, ⊂
telle que xn 7→ x0 ∈ r et
∀i · i ∈ 0..(n -1) ⇒ xi 7→ xi+1 ∈ r


2.8.1 Exemples de relations réflexives


Soit T = {a, b}. Il existe 4 relations réflexives dans T ↔ T .

62
1. {(a 7→ a), (b 7→ b)}

2. {(a 7→ a), (b 7→ b), (a 7→ b)}

3. {(a 7→ a), (b 7→ b), (b 7→ a)}

4. {(a 7→ a), (b 7→ b), (a 7→ b), (b 7→ a)}

Pour être réflexive, une relation doit contenir id(T ) = {(a 7→ a), (b 7→ b)}.

2.8.2 Exemples de relations irréflexives


Soit T = {a, b}. Il existe 4 relations irréflexives dans T ↔ T .

1. {}

2. {(a 7→ b)}

3. {(a 7→ b), (b 7→ a)}

4. {(b 7→ a)}

Pour qu’une relation soit irréflexive, elle ne doit contenir aucun couple de l’identité id(T ).
Pour T = {a, b}, il y a 8 relations qui ne sont ni réflexives, ni irréflexives. En voici 4 exemples.

1. {(a 7→ a)}

2. {(a 7→ a), (a 7→ b)}

3. {(a 7→ a), (b 7→ a)}

4. {(a 7→ a), (a 7→ b), (b 7→ a)}

Leur caractéristique commune est qu’elles contiennent un sous-ensemble strict de id(T ).

2.8.3 Exemple de relation transitive


Soit T = {a, b, c, d}. La relation suivante n’est pas transitive

r = {a 7→ b, b 7→ c, c 7→ d}

Il lui manque les 3 couples suivants

1. a 7→ c, puisque a 7→ b ∈ r et b 7→ c ∈ r

2. a 7→ d, puisque a 7→ c devrait être dans r et c 7→ d ∈ r

3. b 7→ d, puisque b 7→ c ∈ r et c 7→ d ∈ r

Si une relation r est transitive, alors r = r+ = n≥1 rn . Voyons pourquoi. Par définition de
S

transitivité, on a r ; r ⊆ r. Donc r2 ⊆ r. Pour prouver que n > 0 ⇒ rn ⊆ r, nous allons utiliser la


propriété suivante, soit la monotonie de la composition relationnelle.

r1 ⊆ r2 ⇒ r1 ; r3 ⊆ r2 ; r3

Montrons que r3 ⊆ r.

63
r2 ⊆ r
⇒ h monotonie de ; i
r2 ; r ⊆ r ; r
⇔ h def. de rn i
r3 ⊆ r2
⇒ h r2 ⊆ r et transitivité de ⊆ i
r3 ⊆ r
On pourrait continuer ainsi pour chaque valeur de n > 3. Pour prouver complètement, nous
pourrions effectuer une preuve par induction, ce qui est l’objet du chapitre 3.

2.8.4 Exemple de relation symétrique


Soit T = {a, b, c, d}. La relation suivante n’est pas symétrique
r = {a 7→ b, b 7→ c, c 7→ d}
Il lui manque les couples suivants pour être symétrique.
{b 7→ a, c 7→ b, d 7→ c}

2.8.5 Exemple de relation asymétrique


Soit T = {a, b, c, d}. La relation suivante n’est pas asymétrique
r = {a 7→ a, a 7→ b, b 7→ a, b 7→ c, c 7→ d}
Il faut lui retirer les couples suivants pour être asymétrique.
1. a 7→ a, par définition de asymétrique (x 7→ y ∈ r ⇒ y 7→ x 6∈ r); dans ce cas, on a x = y
pour le couple a 7→ a, donc il ne peut y avoir de couple de la forme x 7→ x dans une relation
asymétrique. Donc une relation asymétrique est toujours irréflexive.
2. l’un des deux couples suivants: a 7→ b, ou bien b 7→ a

2.8.6 Exemple de relation antisymétrique


Soit T = {a, b, c, d}. La relation suivante n’est pas antisymétrique
r = {a 7→ a, a 7→ b, b 7→ a, b 7→ c, c 7→ d}
Il faut lui retirer les couples suivants pour être antisymétrique.
1. l’un des deux couples suivant: a 7→ b, ou bien b 7→ a
Une relation asymétrique est aussi antisymétrique, mais pas l’inverse, car les couples de la forme x 7→
x ne sont pas permis dans une relation asymétrique, mais ils le sont dans une relation antisymétrique.

2.8.7 Exemple de relation d’équivalence


Soit T = {a, b, c}. La relation suivante n’est pas une relation d’équivalence
r = {a 7→ a, a 7→ b, b 7→ a, b 7→ c}
Il faut lui ajouter les couples suivants pour en faire une relation d’équivalence.
{b 7→ b, c 7→ c, c 7→ b, a 7→ c, c 7→ a}

64
2.8.8 Exemple de relation d’ordre
Soit T = {a, b, c}. La relation suivante n’est pas une relation d’ordre.

r = {a 7→ a, a 7→ b, b 7→ a, b 7→ c}

On peut la transformer en relation d’ordre en retirant le couple b 7→ a, et en lui ajoutant les couples
suivants.
{b 7→ b, c 7→ c, a 7→ c}
Il y a bien sûr d’autres façons de la transformer en relation d’ordre. Par exemple, en retirant a 7→ b
et en ajoutant
{b 7→ b, c 7→ c}

2.8.9 Exemple de relation d’ordre strict


Soit T = {a, b, c}. La relation suivante n’est pas une relation d’ordre strict.

r = {a 7→ a, a 7→ b, b 7→ a, b 7→ c}

On peut la transformer en relation d’ordre en retirant les couples a 7→ a et b 7→ a, et en lui ajoutant


le couple a 7→ c. Il y a bien sûr d’autres façons de la transformer en relation d’ordre strict. Par
exemple, en retirant a 7→ a et a 7→ b.

2.8.10 Relations bien fondée et acyclique


Une relation est acyclique si elle ne contient pas de cycle x0 7→ . . . 7→ x0 . Une relation bien fondée
ne permet pas de remonter les flèches infiniment; il faut que la relation s’arrête quand on remonte
les flèches. Une relation bien fondée est donc aussi acyclique. Une relation acyclique n’est pas
nécessairement bien fondée; par exemple, la relation < sur les entiers (Z) ne contient pas de cycle,
mais on peut remonter les flèches infiniment, i.e., vers la gauche, dans la l’exemple ci-dessous.

. . . 7→ −3 7→ −2 7→ −1 7→ 0

La relation < sur les naturels (N) est bien fondée, car on s’arrête à 0 quand on remonte les flèches.

0 7→ 1 7→ 2 7→ 3 7→ . . .

La relation < sur N1 est aussi bien fondée. La relation < sur les réels n’est pas bien fondée. La
relation ⊂ est bien fondée sur les ensembles.

65
2.9 Lois des ensembles, fonctions et relations

Égalité transitive x=y∧y =z ⇒ x=z (LE-1)


Leibniz x∈S∧y ∈S∧f ∈S→T ⇒ (x = y ⇒ f (x) = f (y)) (LE-2)
inclusion prédicat A⇒B ⇒ {x | A} ⊆ {x | B} (LE-3)
appartenance 1 x ∈ {y | A} ⇔ A[y := x] (LE-4)
appartenance 2 x ∈ {x | A} ⇔ A (LE-5)
égalité ensemble 1 S=T ⇔ ∀x · x ∈ S ⇔ x ∈ T (LE-6)
égalité ensemble 2 S=T ⇔ S ⊆T ∧T ⊆S (LE-7)
monotonie union S1 ⊆ S2 ⇒ S1 ∪ S3 ⊆ S2 ∪ S3 (LE-8)
monotonie intersection S1 ⊆ S2 ⇒ S1 ∩ S3 ⊆ S2 ∩ S3 (LE-9)
antitonie différence S1 ⊆ S2 ⇒ S3 − S1 ⊇ S3 − S2 (LE-10)
monotonie produit r1 ⊆ r2 ⇒ r1 ; r3 ⊆ r2 ; r3 (LE-11)
monotonie inverse r1 ⊆ r2 ⇒ r1−1 ⊆ r2−1 (LE-12)

Table 2.9: Diverses lois sur les ensembles

2.10 Utilisation de ProB


Nous utilisons le langage B et l’outil ProB pour texter des formules de logique du premier ordre ainsi
que des expressions sur des structures discrètes (ensemble, relation et fonction). Une spécification
B a la forme suivante:

MACHINE nomMachine

SETS
nomEnsemble = {element, . . . , element}
; ...
; nomEnsemble = {element, . . . , element}

CONSTANTS
nomConstante, . . . , nomConstante

PROPERTIES
A
END

La clause SETS permet de déclarer des ensemble par énumération de leurs éléments. Les décla-
rations des ensembles sont séparées par des “;”. Ces ensembles peuvent ensuite être utilisés pour
définir d’autres ensembles dans la clause CONSTANTS. La clause CONSTANTS permet de dé-
clarer des noms de constante, séparées par des “,”. La valeur de ces constantes est déterminée par
la clause PROPERTIES. La clause PROPERTIES permet de déclarer une (et une seule) formule
qui détermine la valeur des constantes. Il s’agit généralement d’une conjonction, que l’on écrit avec
l’indentation suivante, pour en faciliter la lecture.

A1

66
∧ A2
∧...
∧ An
Voici un exemple de machine qui définit des relations familiales.
MACHINE Exemple

/* Voici un commentaire */

SETS

Personne = {p0, p1, p2, p3, p4, p5, p6}

CONSTANTS

Homme
, Femme
, Parent /* (x,y) : Parent ssi x est un parent de y */
, OncleTante /* (x,y) : OncleTante ssi x est un oncle ou une tante de y */
, OncleTante_alt /* Définition alternative de OncleTante,
utilisant seulement des opérations sur les relations */
, Oncle /* (x,y) : Oncle ssi x est un oncle de y */
, Tante /* (x,y) : Tante ssi x est une tante de y */
, EnsOncle /* ensemble des personnes qui sont des oncles */

PROPERTIES

Homme={p0, p1}
& Femme=Personne-Homme
& Parent={
(p0,p1)
,(p0,p2)
,(p1,p3)
,(p1,p4)
,(p2,p5)
,(p2,p6)
}
& OncleTante =
{(x,y) |
#(z1,z2).
(
z2 /= x
& (z1,x) : Parent
& (z1,z2) : Parent
& (z2,y) : Parent
)
}
& OncleTante_alt = (((Parent~ ; Parent) - id(Personne)) ; Parent)

67
Figure 2.1: L’écran principal de ProB

& Oncle = Homme <| OncleTante


& Tante = Femme <| OncleTante

& EnsOncle = dom(OncleTante) /\ Homme


END

La figure 2.1 représente l’écran principal de ProB. La partie supérieure est un éditeur de spécification.
La partie inférieure est divisée en trois parties. À droite, sous la section State Properties, on retrouve
la définition des symboles. Au départ, seuls les symboles prédéfinis (ex., MAXINT et MININT) y
apparaissent, ainsi que les ensembles de la clause SETS. Ces informations sont affichées lorsqu’on
ouvre une spécification. Si on modifie une spécification, il faut la ré-ouvrir (menu File→Reopen, ou
bien le raccourci CTRL-R) pour la recompiler. Si la spécification contient des erreurs de syntaxe ou
si elle est insatisfaisable, un message d’erreur approprié (mais pas toujours très intuitif) est affiché.
Pour afficher les constantes de la spécification, il faut double-cliquer sur SETUP_CONSTANTS dans
la partie centrale intitulée Enabled Operations. ProB affiche alors les valeurs des constantes qu’il a
calculées pour satisfaire la formule de la clause PROPERTIES (voir figure 2.2). La figure 2.3 illustre
un message d’erreur quand la spécification est insatisfaisable. On peut aussi appeler l’évaluateur
de ProB, avec le (menu Analyse→Eval. . . , ou bien en double-cliquant n’importe où dans la fenêtre
State Properties. L’évaluateur peut évaluer n’importe quelle formule ou expression du langage en
utilisant la valeur actuelle des constantes (voir figure 2.4).

68
Figure 2.2: Affichage de la valeur des constantes

...
& Parent = {
(p0,p1)
,(p0,p2)
,(p2,p6)
}
& Parent = {}
...

Figure 2.3: Spécification insatisfaisable

Figure 2.4: L’évaluateur d’expressions et de formules de ProB

69
2.11 Exercices
1. Soit

• A = {0, 1},
• B = {a, b},
• C = B ∪ {c, d},
• D = {0 7→ a, 1 7→ b, 2 7→ c, 3 7→ d},
• E = {0 7→ c, 1 7→ d},
• F = {c 7→ 0, c 7→ 1, d 7→ 1}

Évaluez les expressions suivantes.

(a) Calculez A × B. Solution: {0 7→ a, 0 7→ b, 1 7→ a, 1 7→ b}


(b) Déterminez si les énoncés suivants sont vrais. Justifiez votre réponse
i. ∅ ∈ P(∅) Solution: Vrai
ii. ∅ ⊆ P(∅) Solution: Vrai
iii. ∅ ∈ A × B Solution: Faux
iv. ∅ ⊆ A × B Solution: Vrai
v. ∅ ∈ ∅ Solution: Faux
vi. ∅ ⊆ ∅ Solution: Vrai
vii. ∅ ⊆ {∅} Solution: Vrai
viii. ∅ ∈ {∅} Solution: Vrai
ix. 0 7→ a ∈ A × B Solution: Vrai
x. (0, a) ∈ A × B Solution: Vrai
xi. {0 7→ a, 1 7→ b} ∈ A × B Solution: Faux
xii. {0 7→ a, 1 7→ b} ⊆ A × B Solution: Vrai
xiii. {0 7→ a, 1 7→ b} ∈ A ↔ B Solution: Vrai
xiv. {0 7→ a, 1 7→ b} ⊆ A ↔ B Solution: Faux
xv. {0 7→ a, 1 7→ b} ∈ A →
7 B Solution: Vrai
xvi. {0 7→ a, 1 7→ b} ∈ A → B Solution: Vrai
xvii. {0 7→ a} ∈ A → B Solution: Faux
xviii. {0 7→ a, 1 7→ b} ∈ A  7 B Solution: Vrai
xix. {0 7→ a} ∈ A  7 B Solution: Vrai
xx. {0 7→ a, 1 7→ a} ∈ A  7 B Solution: Faux
xxi. {0 7→ a, 1 7→ a} ∈ A  B Solution: Faux
xxii. {0 7→ a, 1 7→ b} ∈ A  B Solution: Vrai
xxiii. {0 7→ a, 1 7→ b} ∈ A 7 B Solution: Vrai
xxiv. {0 7→ a} ∈ A  7 B Solution: Faux
xxv. {0 7→ a, 1 7→ b} ∈ A  B Solution: Vrai
xxvi. {0 7→ a, 1 7→ b} ∈ A 
 7 B Solution: Vrai
xxvii. {0 7→ a, 1 7→ b} ∈ A 
 B Solution: Vrai
(c) Calculez les expressions suivantes (ie, en donnant les éléments de l’ensemble résultant)

70

{x | x ∈ P(A) ∧ 0 ∈ x} Solution: {0}, {0, 1}
i.
A C D Solution: {0 7→ a, 1 7→ b}
ii.
iii.dom(A C D) Solution: {0, 1}
iv.ran(A C D) Solution: {a, b}
v.AC − D Solution: {(2 7→ c), (3 7→ d)}
vi.DB − B Solution: {0 7→ a, 1 7→ b}
vii.D ; E Solution: ∅
viii.(D ; F ) Solution: {(2 7→ 0), (2 7→ 1), (3 7→ 1)}
ix.((E ; F )−1 ; D) Solution: {0 7→ a, 1 7→ a, 1 7→ b}
x.(id(A) ; D) Solution: {0 7→ a, 1 7→ b}
xi.DC − E Solution: {(0 7→ c), (1 7→ d), (2 7→ c), (3 7→ d)}
xii.F [{c}] Solution: {0, 1}
xiii.{(x, y) | x ∈ 0..3 ∧ y = x + 1}∗
Solution: {(0, 0), (0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)}
xiv. {(x, y) | x ∈ 0..3 ∧ y ∈ 0..3 ∧ y = x + 1}+
Solution: {(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)}

2. Soient les définitions suivantes:

MACHINE ExerciceMathDiscrete_1
SETS
Personne={h1,h2,h3,h4,h5,f1,f2,f3,f4,f5}
CONSTANTS NombrePair,Homme,Femme,Pere,Mere
PROPERTIES
NombrePair = {x | x : 1..12 & x mod 2 = 0} &
Homme={h1,h2,h3,h4,h5} &
Femme={f1,f2,f3,f4,f5} &
Pere={h1|->h2,h1|->f2,h2|->h3} &
Mere={f1|->h2,f1|->f2,f2|->h4}
END

(a) Définissez l’ensemble Facteur qui contient les facteurs du nombre 12 (ie, x est un facteur
de y ssi il existe un nombre z tel que y = x∗z, ou, de manière équivalente, y mod x = 0).
(b) Définissez l’ensemble Premier qui contient l’ensemble des nombres premiers entre 2 et 12
(ie, un nombre x est premier ssi il est supérieur à 1 et ses seuls facteurs sont 1 et x).
(c) Définissez la constante s qui est égale à la somme des éléments de Premier.
(d) Définissez l’ensemble FacteurPremier qui contient seulement les facteurs premiers de 12.
(e) Définissez par compréhension l’ensemble Papa qui contient les personnes qui sont des
pères.
(f) Définissez l’ensemble Papa2 qui contient les mêmes éléments que Papa, mais en utilisant
seulement des opérations sur les relations.
(g) Définissez par compréhension l’ensemble Fils qui contient les personnes qui sont des en-
fants de sexe masculin.
(h) Définissez par compréhension la relation GrandParent qui contient les couples x 7→ y telles
que x est un grand-parent de y.

71
(i) Définissez la relation GrandParent2 qui contient les mêmes éléments que GrandParent,
mais en utilisant seulement des opérations sur les relations.
(j) Définissez par compréhension la relation Conjoint qui contient des couples de personnes
qui sont des conjoints. On dit que x est un conjoint de y ssi x et y ont eu un enfant
ensemble. Donnez seulement les couples x 7→ y tels que x est un homme et y une femme.
(k) Définissez la relation Conjoint2 qui contient les mêmes éléments que Conjoint, mais en
utilisant seulement des opérations sur les relations.
(l) Définissez la relation Fraterie, dont les éléments sont des frères et sœurs (ie, des personnes
qui ont un parent en commun).

3. Utilisez le fichier prop-relation.mch pour répondre aux questions suivantes

(a) Examinez les définitions des propriétés dans prop-relation.mch. Pour chaque propriété,
choisissez des valeurs pour r et vérifiez que votre relation r satisfait la propriété.
(b) Vérifiez avec ProB les questions suivantes
i. Existe-t-il une relation qui n’est ni réflexive, ni irréflexive?
ii. Une relation asymétrique forte est-elle aussi une relation antisymétrique?
iii. Pour un ensemble fini S, est-ce que les propriétés bien fondée et acyclique sont
équivalentes?
iv. Pour un ensemble infini S, est-ce que les propriétés bien fondée et acyclique sont
équivalentes? (Vous ne pouvez tester cette question dans ProB, puisque S est infini;
ProB ne peut traiter "complètement" que des ensembles finis).
v. Existe-t-il une relation r qui est à la fois une relation d’ordre et une relation d’équivalence?
vi. En général, est-ce qu’une relation d’ordre est aussi une relation d’équivalence?
vii. Une relation peut-elle être à la fois symétrique et antisymétrique?

72
Chapitre 3

Types de preuve

Dans ce chapitre, nous abordons différents types de preuves. Nous présentons tout d’abord les
preuves par induction (aussi appelée preuve par récurrence), qui permettent de prouver une formule
de la forme ∀x · x ∈ S ⇒ A, en utilisant une relation bien fondée sur S. Elle sont typiquement
utilisées pour les nombres naturels, mais aussi pour les ensembles et les structures de données
utilisées fréquemment en informatique, comme les arbres, les listes, ou tout autre objet, en utilisant
leur structure syntaxique, qui est naturellement inductive, comme relation bien fondée.
Nous illustrons ensuite le style classique de rédaction d’une preuve en langage naturel, qui est
une abstraction compacte d’un arbre de preuve tel que vu au chapitre 1. Les preuves écrites en
langage naturel sont fréquemment utilisées en mathématiques. Nous présentons ensuite le style de
preuve équationnel, qui consiste à formuler une suite d’équivalences, d’implications, d’égalités ou
d’inclusions, en utilisant à chaque étape des lois ou les définitions des objets manipulés.
Nous utiliserons la convention suivante pour faciliter la lecture de certaines preuves, en identifiant
ce qui change d’une ligne à l’autre à l’aide des symboles x y et p q.
A1 . . . x A2 y . . . A3
⇔ h étape 1 i
A1 . . . pA4 q . . . xA3 y
⇔ h étape 2 i
A1 . . . A4 . . . pA5 q

Une formule entourée des symboles x y est réécrite sur la ligne suivante dans la formule p q. Dans
l’exemple ci-dessus, A2 est réécrit en A4 à l’étape 1, et A3 est réécrite en A5 à l’étape 2. Si les
symboles p q n’apparaissent pas dans la ligne en-dessous, cela veut dire que l’expression entourée de
x y de la ligne au-dessus est supprimée par la réécriture dans l’étape de preuve. Voici un exemple
A1 ∧ xA1 y
⇔ h (LP-5) i
A1

3.1 Preuve par induction


3.1.1 Preuve par induction sur les naturels
Soit Nk les nombres naturels supérieurs ou égal à k, i.e., Nk = {y | y ∈ N ∧ y ≥ k} pour k ∈ N. Soit
à prouver la formule
∀x · x ∈ Nk ⇒ A

73
x>0

À prouver A[0] A[x-1] ⇒ A[x]

Conséquences A[1] A[2] A[3] …

Figure 3.1: Le principe de preuve par induction

par induction.

1. Preuve du cas de base. On fait la preuve pour la valeur minimale k de Nk (par exemple,
min(N1 ) = 1). Il faut donc prouver la formule suivante

A[x := k]

2. Preuve du cas d’induction (x > k), où on utilise l’hypothèse d’induction

A[x := x − 1] (HI)

pour prouver A. Pour ce faire, on cherche à ré-écrire A pour faire apparaître A[x := x − 1] et
utiliser l’hypothèse d’induction.

La figure 3.1 illustre le principe de preuve par induction.


Pour décrire Ples preuves par induction, nous allons débuter par des théorèmes utilisant l’opérateur
de sommation “ ”. De manière informelle, on a
n
X
t
i=1
=
t[i := 1] + t[i := 2] + . . . + t[i := n]
n
X X
Dans une sommation t, l’opérateur de sommation déclare la variable i, et i est une variable
i=m
quantifiée, exactement comme dans une quantification universelle; m est la borne inférieure de la
sommation, et n est la borne supérieure. Le symbole t est un terme où la variable i apparaît; c’est
le terme quantifié par la sommation. Par exemple, soit t = 2i − 1. On a
n
X
2i − 1
i=1
=
(2i − 1)[i := 1] + (2i − 1)[i := 2] + . . . + (2i − 1)[i := n]
=
1 + 3 + . . . + 2n − 1

74
Voici la définition formelle d’une sommation.
n n−1
!
X X
n>m ⇒ t = t + (t[i := n]) (3.1)
i=m i=m
Xm
n=m ⇒ t = (t[i := m]) (3.2)
i=m
Xn
n<m ⇒ t = 0 (3.3)
i=m

Voici un exemple d’illustration d’une sommation.


3
X
i2
i=1
=
i2 [i := 1] + i2 [i := 2] + i2 [i := 3]
=
12 + 2 2 + 3 2
=
14

Voici un premier exemple de preuve par induction. Nous allons prouver le théorème suivant par
induction.

Théorème 5
x
X x(x + 1)
∀x · x ∈ N ⇒ i=
2
i=0

Preuve. Par induction. Soit


x
X x(x + 1)
A ≡ i=
2
i=0

Puisque S = N, min = 0.

Cas de base x = 0.

Montrons
0
X 0(0 + 1)
A[x := 0] ≡ i=
2
i=0

0
X
i
i=0
= h (3.2) i
0
= h arithmétique i
0(0 + 1)
2

75
Cas x > 0, en utilisant l’hypothèse d’induction
x−1
X (x − 1)((x − 1) + 1) (x − 1)x
A[x := x − 1] ≡ i = = (HI) (3.4)
2 2
i=0

et prouvons A.
x
X
i
i=0
x−1
X
= h (3.1). Cette étape permet de faire apparaitre le terme de gauche de (3.4), soit i i
i=0
x−1
!
X
i +x
i=0
= h Hypothèse d’induction (HI) i
(x − 1)x
+x
2
= h arithmétique: dénominateur commun i
x2 − x 2x
+
2 2
= h arithmétique i
x2 − x + 2x
2
= h arithmétique i
x2 + x
2
= h arithmétique i
x(x + 1)
2

Voici un autre exemple pour N1

Théorème 6
x
X
∀x · x ∈ N1 ⇒ (2i − 1) = x2
i=1

Preuve. Par induction. Soit


x
X
A ≡ (2i − 1) = x2
i=1

Cas de base x = 1 (car le nombre 1 est l’élément minimal de N1 ). Il faut donc prouver
1
X
A[x := 1] ≡ (2i − 1) = 12
i=1

Ce qui se prouve comme suit:

76
1
X
(2i − 1)
i=1
= h (3.3) i
2−1
= h arithmétique i
1
= h arithmétique i
2
1

Cas x > 1. Hypothèse d’induction:


x−1
X
A[x := x − 1] ≡ (2i − 1) = (x − 1)2 (HI) (3.5)
i=1

On prouve A comme suit:


x
X
(2i − 1)
i=1
= h (3.1) i
x−1
!
X
(2i − 1) + (2x − 1)
i=1
= h Hypothèse d’induction (3.5) i
(x − 1)2 + (2x − 1)
= h arithmétique i
(x2 − 2x + 1) + (2x − 1)
= h arithmétique i
x2

Voici une autre exemple à propos des exposants. Considérons les définitions suivantes de la
notion d’exposant sur les nombres naturels.

b0 = 1 (3.6)
n n−1
n ∈ N1 ⇒ b = b b (3.7)

Théorème 7
∀x, y · x ∈ N ∧ y ∈ N ⇒ bx+y = bx by
Cette formule contient deux variables quantifiées. On peut réécrire cette formule à l’aide des lois
(LP-37) et (LPO-26), comme suit.
∀x, y · x ∈ N ∧ y ∈ N ⇒ bx+y = bx by
⇔ h (LP-37) i
∀x, y · x ∈ N ⇒ (y ∈ N ⇒ bx+y = bx by )
⇔ h (LPO-26) i
∀x · x ∈ N ⇒ (∀y · y ∈ N ⇒ bx+y = bx by )

77
On peut donc faire une induction sur cette formule pour x. La quantification sur y fera partie de
A.

Preuve. Par induction sur x seulement. Soit

A ≡ ∀y · y ∈ N ⇒ bx+y = bx by

Cas de base x = 0 (car le nombre 0 est l’élément minimal de N). Il faut donc prouver

A[x := 0] ≡ ∀y · y ∈ N ⇒ b0+y = b0 by

Cette formule contient un quantificateur. On peut la prouver comme suit, avec les règles I∀ (voir
page 37) et I⇒ (voir page 31).

dy ∈ Ne[1]
..
.
b0+y = b0 by [I⇒ ][1]
y ∈ N ⇒ b0+y = b0 by
I∀
∀y · y ∈ N ⇒ b0+y = b0 by
Il reste donc à prouver ce qui est en rouge, que nous prouvons comme suit.
b0 by
= h (3.6) i
1by
= h arithmétique i
by
= h y =0+y i
b0+y

Cas x > 0. Hypothèse d’induction:

A[x := x − 1] ≡ ∀y · y ∈ N ⇒ b(x−1)+y = bx−1 by (HI) (3.8)

Pour prouver A, qui contient aussi un quantificateur comme dans le cas de base, on utilise les règles
I∀ et I⇒ , on suppose y ∈ N, et il reste à prouver

bx+y = bx by

Ce qui se prouve comme suit.


bx+y
= h arithmétique: x + y = (x − 1) + (y + 1) i
b(x−1)+(y+1)
On peut utiliser ici l’hypothèse d’induction (3.8). Pour ce faire, il suffit d’instancier (3.8) avec
y := y + 1, grâce à la règle d’inférence E∀ de la page 37 et la règle E⇒

y∈N (HI) : (3.8)


Arith. E∀ avec [y := y + 1]
y+1∈N y + 1 ∈ N ⇒ b(x−1)+(y+1) = bx−1 by+1
[E⇒ ]
b(x−1)+(y+1) = bx−1 by+1

78
et obtenir la déduction suivante
b(x−1)+(y+1) = bx−1 by+1 (3.9)
de notre hypothèse d’induction, et de poursuivre notre preuve pour le cas x > 0.
b(x−1)+(y+1)
= h (3.9) i
bx−1 by+1
= h puisque y + 1 ∈ N1 , (3.7) avec n := y + 1 donne by+1 = by b i
bx−1 by b
= h commutativité multiplication i
bx−1 bby
= h (3.7) et hypothèse x > 0 i
bx by

Voici un autre exemple avec les nombres de Fibonacci. Soient les définitions suivantes des nombres
de Fibonacci, désignés ici par Fx avec x ∈ N.
F0 = 0 (3.10)
F1 = 1 (3.11)
n > 1 ⇒ Fn = Fn−1 + Fn−2 (3.12)

Théorème 8
∀x, y · x ∈ N ∧ y ∈ N1 ⇒ Fx+y = Fx+1 Fy + Fx Fy−1
Comme pour le théorème précédent, nous avons deux variables quantifiées. On peut réécrire cette
formule à l’aide des lois (LP-37) et (LPO-26), ce qui donne à prouver la formule suivante:
∀x · x ∈ N ⇒ (∀y · y ∈ N1 ⇒ Fx+y = Fx+1 Fy + Fx Fy−1 )

Preuve. Par induction. Soit


A ≡ ∀y · y ∈ N1 ⇒ Fx+y = Fx+1 Fy + Fx Fy−1

Cas x = 0 (car le nombre 0 est l’élément minimal de N). Il faut donc prouver
A[x := 0] ≡ ∀y · y ∈ N1 ⇒ F0+y = F0+1 Fy + F0 Fy−1
Ce qui se prouve comme suit. Avec les règles I∀ et I⇒ , on suppose y ∈ N1 et on prouve
F0+y = F0+1 Fy + F0 Fy−1 .
Ce qui se prouve comme suit.
F0+1 Fy + F0 Fy−1
= h (3.10) et (3.11) i
1Fy + 0Fy−1
= h arithmétique i
Fy
= h arithmétique: y = 0 + y i
F0+y

79
Cas x > 0. Hypothèse d’induction:
A[x := x − 1] ≡ ∀y · y ∈ N1 ⇒ F(x−1)+y = F(x−1)+1 Fy + F(x−1) Fy−1 (HI) (3.13)
Pour prouver A, on utilise les règles I∀ et I⇒ comme suit:
dy ∈ N1 e[1]
..
.
Fx+y = Fx+1 Fy + Fx Fy−1
[I⇒ ][1]
y ∈ N1 ⇒ Fx+y = Fx+1 Fy + Fx Fy−1
I
∀y · y ∈ N1 ⇒ Fx+y = Fx+1 Fy + Fx Fy−1 ∀
Il reste donc à prouver ce qui est en rouge:
Fx+y = Fx+1 Fy + Fx Fy−1 .
à partir de l’hypothèse y ∈ N1 , ce qui se prouve comme suit. Typiquement, on commence avec
le terme le plus complexe et on essaie de le réécrire jusqu’à obtenir le terme le plus simple. En
suivant cette stratégie, nous devrions commencer avec le terme de droite (i.e., Fx+1 Fy + Fx Fy−1 )
et essayer d’y faire apparaitre l’hypothèse d’induction. Toutefois, cette stratégie ne fonctionne pas
ici (essayez-là pour le constater). Nous allons donc débuter avec le terme de gauche (i.e., Fx+y ) et
essayer d’y faire apparaitre un des termes de l’hypothèse d’induction.
Fx+y
= h arithmétique: x + y = (x − 1) + (y + 1) i
F(x−1)+(y+1)
Remarquons que ce terme apparait presque dans (3.13). Pour l’obtenir, il suffit d’instancier (HI)
(soit (3.13)) avec y := y + 1, grâce à la règle d’inférence E∀ de la page 37. Puisque nous avons
supposé que y ∈ N1 , on a donc y + 1 ∈ N1 . On peut donc utiliser la règle E⇒ comme suit:
y ∈ N1 (HI) : (3.13)
Arith. E∀ avec [y := y + 1]
y + 1 ∈ N1 y + 1 ∈ N1 ⇒ F(x−1)+(y+1) = F(x−1)+1 Fy+1 + F(x−1) F(y+1)−1
[E⇒ ]
F(x−1)+(y+1) = F(x−1)+1 Fy+1 + F(x−1) F(y+1)−1
et obtenir la déduction suivante, après simplification des indices.
F(x−1)+(y+1) = Fx Fy+1 + F(x−1) Fy (3.14)
Poursuivons donc la preuve du cas d’induction, en utilisant (3.14).

xF(x−1)+(y+1) y
= h (3.14) i
pFx Fy+1 + Fx−1 Fy q
x y
= h (3.12) i
p q
xFx (Fy + Fy−1 ) y + Fx−1 Fy
= h distributivité multiplication sur addition i
pFx Fy + Fx Fy−1 q + Fx−1 Fy
x y
= h commutativité addition i
p q
xFx Fy + Fx−1 Fy y + Fx Fy−1
= h distributivité multiplication sur addition i
p (Fx + Fx−1 ) Fy q + Fx Fy−1
x y
= h hyp. x > 0, donc x + 1 > 1, (3.12) avec n := x + 1 donne Fx+1 = Fx + Fx−1 i
pFx+1 qFy + Fx Fy−1

80


3.1.2 Règle générale de preuve par induction


Voici la règle générale de preuve par induction. Soit S un ensemble et ≺ ∈ S ↔ S une relation bien
fondée.

(∀x · x ∈ S ⇒ A) ⇔ (∀x · x ∈ S ⇒ ((∀y · y ∈ S ∧ y ≺ x ⇒ A[x := y]) ⇒ A)) (3.15)

Application aux nombres naturels avec ≺ := <.

(∀x · x ∈ N ⇒ A) ⇔ (∀x · x ∈ N ⇒ ((∀y · y ∈ N ∧ y < x ⇒ A[x := y]) ⇒ A)) (3.16)

Application aux sous-ensembles finis d’un ensemble S avec ≺ := ⊂.

(∀x · x ∈ F(S) ⇒ A) ⇔ (∀x · x ∈ F(S) ⇒ ((∀y · y ∈ F(S) ∧ y ⊂ x ⇒ A[x := y]) ⇒ A)) (3.17)

Notons que l’on peut aussi utiliser S ≺ S 0 ⇔ card(S) < card(S 0 ) pour les ensembles. Ce ne change
pas la difficulté de la preuve lorsqu’elle est faite à la main. Toutefois, les prouveurs automatisés,
comme ceux du langage B, travaillent plus facilement avec ⊂ qu’avec card(S) < card(S 0 ).

3.1.3 Application de la règle générale d’induction aux naturels


Examinons comment cette règle peut être utilisée pour N. Supposons que nous voulons prouver une
formule de la forme
∀x · x ∈ N ⇒ A
La formule (3.16) nous indique qu’on peut la prouver en utilisant son côté droit, soit

∀x · x ∈ N ⇒ ((∀y · y ∈ N ∧ y < x ⇒ A[x := y]) ⇒ A)

Soit
B ≡ y ∈N∧y <x
En utilisant la règle I∀ , il reste à prouver

x ∈ N ⇒ ((∀y · B ⇒ A[x := y]) ⇒ A)

En utilisant la règle d’introduction de l’implication (I⇒ ), on pose comme hypothèse

x∈N (3.18)

et on doit prouver
(∀y · B ⇒ A[x := y]) ⇒ A (3.19)
En utilisant la règle d’introduction de l’implication (I⇒ ), on pose comme hypothèse

∀y · B ⇒ A[x := y] (HIG) (3.20)

et on prouve
A
La formule (3.20) est appelée l’hypothèse d’induction générale. Pour pouvoir utiliser cette hypothèse
afin de prouver A, il faut prouver B. Pour x = 0, l’hypothèse d’induction ne peut pas être utilisée,

81
car B[x := 0] ≡ y ∈ N ∧ y < 0 est fausse : il n’y a pas de valeur pour y qui puissent satisfaire
y ∈ N ∧ y < 0, le nombre 0 n’ayant pas de prédécesseur dans N pour la relation “<”. Il faut donc
prouver la formule A pour le cas x = 0, et on peut prouver les autres cas (x > 0) avec l’hypothèse
d’induction. Cela justifie donc les deux cas que l’on retrouve dans une preuve par induction sur les
naturels. Nous utilisons donc une preuve par cas (E∨ ) avec la formule x = 0 ∨ x > 0, qui se déduit
facilement de l’hypothèse (3.18) (x ∈ N).
Voici un arbre de preuve qui illustre ces déductions. Ce qui reste à faire dans cette preuve est
en rouge. Ce sont les deux étapes de la preuve par d’induction, soit le cas de base avec x = 0 en
hypothèse, et le cas d’induction, avec A[x := x − 1] et x > 0 en hypothèse.

dx ∈ Ne[1] dx > 0e[2] dHIGe[3]


Arith. E∀ y:=x−1
B[y := x − 1] B[y := x − 1] ⇒ A[x := x − 1]
[E⇒ ]
dx = 0e[2] A[x := x − 1]
.. ..
dx ∈ Ne[1] . .
x=0∨x>0 A A
[E∨ ][2]
A
[I⇒ ][3]
HIG ⇒ A
[I⇒ ][1]
x ∈ N ⇒ (HIG ⇒ A)
[I∀ ]
∀x · x ∈ N ⇒ (HIG ⇒ A)
(3.16)
∀x · x ∈ N ⇒ A
Illustrons cela sur la preuve du théorème 5.

Cas x = 0.
Puisque x = 0 , on peut remplacer x par 0 dans notre formule à prouver (i.e., A[x := 0]), il faut
donc prouver
0
X 0(0 + 1)
i= .
2
i=0
Ce qui se prouve comme suit:
0
X
i
i=0 P
= h Définition de i
0
= h arithmétique i
0(0 + 1)
2

Cas x > 0. Il faut prouver


x
X x(x + 1)
i= (3.21)
2
i=0

en utilisant l’hypothèse d’induction générale (3.20). Nous l’utilisons en l’instanciant avec y := x − 1


avec la règle E∀
 
∀y · y ∈ N ∧ y < x ⇒ yi=0 i = y(y+1)
P
2
  [E∀] avec y := x − 1
x − 1 ∈ N ∧ x − 1 < x ⇒ i=0 i = (x−1)((x−1)+1)
Px−1
2

82
Puisque que nous avons x > 0, alors x − 1 ∈ N ∧ x − 1 < x est vrai. Avec la règle E⇒ , on peut donc
conclure
x−1
X (x − 1)((x − 1) + 1)
i= (HI) (3.22)
2
i=0
ce qui est notre hypothèse d’induction générale (3.20) instanciée avec y := x−1, que nous identifions
par (HI). Nous avons maintenant ce qu’il faut pour faire la preuve de (3.21).
x
X
i
i=0
= h (3.1) i
x−1
!
X
i +x
i=0
= h Hypothèse d’induction (3.22) i
(x − 1)((x − 1) + 1)
+x
2
= h arithmétique i
...
= h arithmétique i
x(x + 1)
2

Ce qui complète la preuve. La règle de preuve donnée à la section 3.1.1 est donc une application
particulière de la règle générale de preuve par induction. 

3.1.4 Plusieurs cas de base sur les naturels


Voici un dernier théorème sur les nombres de Fibonacci. Soit

1+ 5
φ= (3.23)
2
communément appelé le nombre d’or. Ce nombre satisfait la propriété suivante:

φ2 = φ + 1 (3.24)

De plus, il est relié aux nombres de Fibonacci par le théorème suivant.

Théorème 9
∀x · x ∈ N1 ⇒ Fx ≤ φx−1
On peut prouver par induction ce théorème, mais on observera une particularité par rapport aux
preuves précédentes : il faudra prouver deux cas de base plutôt qu’un seul.

Preuve. Par induction. Soit


A ≡ Fx ≤ φx−1
Cas x = 1 (car le nombre 1 est l’élément minimal de N1 ). Il faut donc prouver

A[x := 1] ≡ F1 ≤ φ1−1

ce qui se prouve comme suit:

83
F1
= h (3.11) i
1
= h φ0 = 1 i
φ1−1

Cas x > 1. Hypothèse d’induction:

A[x := x − 1] ≡ Fx−1 ≤ φx−2 (HI) (3.25)

Preuve de A

Fx
= h hyp. x > 1, (3.12) i
Fx−1 + Fx−2
≤ h (3.25) i
φx−2 + Fx−2

Nous avons instancié l’hypothèse d’induction avec x := x − 1, ce qui nous permet de l’appliquer
au premier terme Fx−1 . Par contre, nous ne pouvons l’utiliser pour le deuxième terme Fx−2 , car
B[x := x − 2] est fausse pour x = 2 dans (3.20), car nous n’avons que x > 1 en hypothèse. Nous
allons donc faire une sous-preuve par cas, avec x = 2 ∨ x > 2.

Cas x = 2. Il faut prouver


A[x := 2] ≡ F2 ≤ φ2−1
Ce qui se prouve comme suit:

F2
= h (3.12) i
F0 + F1
= h (3.10) et (3.11) i
0+1
< h par (3.23), φ = 1, 6180339887499 i
φ
= h arithmétique i
φ2−1

Cas x > 2. On peut instancier l’hypothèse d’induction générale (3.20) avec y := x − 2, car x > 2
entraine que x − 2 ∈ N1 ∧ x − 2 < x, ce qui donne comme deuxième application de l’hypothèse
d’induction
A[x := x − 2] ≡ Fx−2 ≤ φx−3 (HI) (3.26)
On prouve A comme suit.

Fx
= h hyp. x > 2, (3.12) i
Fx−1 + Fx−2
≤ h (3.25) et (3.26) i
x φx−2 y+ φx−3
= h hyp. x > 2, (3.7) entraine φx−2 = φx−3 φ i

84
pφx−3 φq + φx−3
= h distributivité i
φx−3 (φ + 1)
= h (3.24): φ + 1 = φ2 i
φx−3 φ2
= h théorème 7 i
φx−1

3.1.4.1 Schéma général de preuve par induction sur les naturels


On constate avec le théorème 9 que si on veut instancier l’hypothèse d’induction générale avec
x := x − 2, il faut ajouter un cas de base avec x := k + 1 pour une preuve sur Nk . Voici un schéma
de preuve plus général sur les naturels, mais qui est moins fréquemment utilisé.
Soit la formule ∀x · x ∈ Nk ⇒ A à prouver par induction.

1. Déterminer le cas d’induction (x > j)

2. Prouver les cas de bases, c’est-à-dire les éléments de k..j; c-à-d prouver A[x := i] pour chaque
i ∈ k..j.

3. Pour chaque i ∈ k..j, instancier l’hypothèse d’induction

A[x := x − 1 − (i − k)]

et prouver A pour le cas x > j.

3.1.5 Preuve par induction sur d’autres structures


3.1.5.1 Preuve par induction sur les ensembles
La règle générale de preuve par induction peut être utilisée pour prouver des propriétés sur les
ensembles finis, lorsqu’on l’instancie avec ≺ := ⊂, ce qui donne la règle (3.17). Pour l’illustrer, nous
prouvons le théorème suivant.

Théorème 10 Soit S un ensemble.

∀x · x ∈ F(S) ⇒ card(P(x)) = 2card(x)

Preuve. Par induction. Soit


A ≡ card(P(x)) = 2card(x)
Cas de base : x = ∅
Il faut prouver
A[x := ∅] ≡ card(P(∅)) = 2card(∅)

card(P(∅))
=
card({∅})
=

85
1
=
20
=
2card(∅)
Cas d’induction : x 6= ∅

On pose comme hypothèse d’induction l’hypothèse d’induction générale (HIG)

∀y · y ∈ P(S) ∧ y ⊂ x ⇒ A[x := y] (3.27)

Puisque x 6= ∅, soit z un élément quelconque de x. Soit

x0 = x − {z}.

On a donc x0 ⊂ x. Puisque x0 ⊂ x, on peut instancier (3.27) avec y := x0 , ce qui donne notre


hypothèse d’induction instanciée.

A[x := x0 ] ≡ card(P(x0 )) = 2card(x0 ) (HI)

Soit T l’ensemble des sous-ensembles de x qui ne contiennent pas z.

T = {y | y ⊆ x ∧ z 6∈ y} = P(x0 ) (3.28)

Soit U l’ensemble des sous-ensembles de x qui contiennent z.

U = {y | y ⊆ x ∧ z ∈ y}

Par définition de T et U , on a
P(x) = T ∪ U (3.29)
et
T ∩U =∅ (3.30)
On note que
card(x0 ) = card(x) − 1 (3.31)
Considérons les fonctions f et g suivantes.

f ∈T →U ∧g ∈U →T

f (t) = t ∪ {z} ∧ g(u) = u − {z}


Puisque f ; g = id(T ) et g ; f = id(U ), on a que f ∈ T  U et g = f −1 (vous devrez prouver cette
loi en devoir). La loi suivante établit un lien entre bijection et cardinalité.

(∃f · f ∈ A 
 B) ⇒ card(A) = card(B) (3.32)

Donc,
card(T ) = card(U ) (3.33)
Finalement, la loi suivante sera utile pour calculer la cardinalité d’une union.

card(A ∪ B) = card(A) + card(B) − card(A ∩ B) (3.34)

Nous avons maintenant tout ce qu’il faut pour prouver le cas d’induction.

86
card(P(x))
= h (3.29) i
card(T ∪ U )
= h (3.34) i
card(T ) + card(U ) − card(T ∩ U )
= h (3.30) i
card(T ) + card(U ) − card(∅)
= h card(∅) = 0 i
card(T ) + card(U )
= h (3.33) i
card(T ) + card(T )
= h arithmétique i
2 card(T )
= h (3.28) i
2 card(P(x0 ))
= h (HI) i
2 2card(x0 )
= h (3.31) i
2 2card(x)−1
= h Théorème 7 i
2card(x)

3.1.5.2 Preuve par induction sur les arbres


On peut aussi utiliser la preuve par induction pour prouver des propriétés sur des structures définies
inductivement. Considérez les définitions suivantes de l’ensemble T des arbres binaires. Soit E un
ensemble (habituellement appelé l’ensembles des étiquettes des noeuds de l’arbre).

1. ∅ ∈ est un arbre binaire (il dénote l’arbre vide).

2. Si e ∈ E, g ∈ T et d ∈ T , alors he, g, di ∈ T est un arbre d’étiquette e, avec g comme


sous-arbre de gauche et d comme sous-arbre de droite.

La hauteur h(t) d’un arbre t est définie comme suit.

h(∅) = 0 (3.35)

h(he, g, di) = 1 + max({h(g), h(d)}) (3.36)


On définit la relation < sur les arbres, où t1 < t2 ssi t1 est un sous-arbre propre de t2 , i.e.,

g < he, g, di ∧ d < he, g, di (3.37)

Finalement, le nombre de noeuds card(t) d’un arbre t est défini comme suit:

card(∅) = 0 (3.38)

card(he, g, di) = card(g) + card(d) + 1 (3.39)

87
Théorème 11
∀x · x ∈ T ⇒ card(x) ≤ 2h(x) − 1

Preuve. Par induction. Soit


A ≡ card(x) = 2h(x) − 1
Cas de base : x = ∅
card(∅) = 0 = 20 − 1 = 2h(∅) − 1
Cas d’induction: x = he, g, di. On pose comme hypothèse d’induction

∀y · y ∈ T ∧ y < x ⇒ A[x := y] (HI) (3.40)

Puisque g < x et d < x, on peut instancier (3.40) comme suit

A[x := g] ≡ card(g) ≤ 2h(g) − 1 (3.41)

A[x := d] ≡ card(d) ≤ 2h(d) − 1 (3.42)

card(he, g, di)
= h (3.39) i
card(g) + card(d) + 1
≤ h (3.41), (3.42) i
2h(g) − 1 + 2h(d) − 1 + 1
≤ h soit i = max({h(d), h(g)}) i
2i −1+ 2i −1+1
= h i = h(x) − 1 i
2h(x)−1 −1+ 2h(x)−1 −1+1
= h Arithmétique i
2(2h(x)−1 ) −1
= h Théorème 7 i
2h(x) −1

Comme pour les ensembles, on peut utiliser la relation bien-fondée x ≺ y ⇔ h(x) < h(y) sur les
arbres. Toutefois, comme indiqué pour les ensembles, la relation x est un sous-arbre propre de y
est plus facile à utiliser avec les prouveurs automatisés.

3.1.6 Preuve de la règle générale de preuve par induction


Rappelons la règle générale de preuve par induction (3.15). Soit S un ensemble et ≺ ∈ S ↔ S une
relation bien fondée.

(∀x · x ∈ S ⇒ A) ⇔ (∀x · x ∈ S ⇒ ((∀y · y ∈ S ∧ y ≺ x ⇒ A[x := y]) ⇒ A)) (3.15)

Cette formule est de la forme C ⇔ D. De par la règle d’inférence I⇔ , il faut prouver C ⇒ D et D ⇒ C.


La preuve de C ⇒ D est triviale, puisque A est en hypothèse. La preuve de D ⇒ C représente la
principale difficulté. La preuve se fait par contradiction comme suit. Soit

B ≡ ∀y · y ∈ S ∧ y ≺ x ⇒ A[x := y]

88
C ≡ ∀x · x ∈ S ⇒ A
D ≡ ∀x · x ∈ S ⇒ (B ⇒ A)
La preuve par contradiction a la structure suivante:

dDe[1] d¬Ce[2]
..
.
faux [E ][2]
false
C [I⇒ ][1]
D⇒C
Ré-écrivons ¬C
¬C
⇔ h (LPO-11),(LP-25) i
∃x · x ∈ S ∧ A

De ¬C, on peut déduire qu’il existe des valeurs de x pour lesquelles A est fausse. Soit T l’ensemble
de ces valeurs.
T = {x | x ∈ S ∧ ¬A}
Puisque T est un sous-ensemble non-vide de S et que ≺ est bien fondée, alors, par définition de
relation bien fondée, il existe au moins une valeur minimale x0 dans T et ¬A[x := x0 ]. La preuve
par contradiction se fera avec la formule A[x := x0 ].

d¬Ce[1] dDe[2] d¬Ce[1]


.. ..
. .
¬A[x := x0 ] A[x := x0 ]
faux [E ][1]
false
C [I⇒ ][2]
D⇒C
Voic l’arbre de preuve (simplifié) de ¬A[x := x0 ].
¬C (LPO-11), (LP-25)
∃x · x ∈ S ∧ ¬A définition de T
T 6= ∅
≺ est bien fondée
x0 ∈ min(T )
définition de T
¬A[x := x0 ]
Voici l’arbre de preuve (simplifié) de A[x := x0 ], afin de contredire ¬A[x := x0 ].
Voir arbre P1 Voir arbre P2
B[x := x0 ] ⇒ A[x := x0 ] B[x := x0 ]
A[x := x0 ]
Arbre de preuve P1
¬C
T 6= ∅ D [E∀ ]
x0 ∈ min(T ) D[x := x0 ]
x0 ∈ S x0 ∈ S ⇒ (B[x := x0 ] ⇒ A[x := x0 ])
B[x := x0 ] ⇒ A[x := x0 ]

89
Arbre de preuve P2
[2]
¬C dy ∈ S ∧ y ≺ x0 e[1] d¬A[x := y]e
déf. C et T [E∧2 ] déf. T
T 6= ∅ y ≺ x0 y∈T
≺ bien fondée déf. T
x0 ∈ min(T ) x0 6∈ min(T )
[E¬ ]
faux [I¬ ][2]
A[x := y]
[I⇒ ][1]
y ∈ S ∧ y ≺ x0 ⇒ A[x := y]
[I∀ ]
∀y · y ∈ S ∧ y ≺ x0 ⇒ A[x := y]
déf. B
B[x := x0 ]


3.2 Exprimer une preuve en langage naturel


Les arbres de preuves sont très utiles pour comprendre la structure d’une preuve et la justifier, mais
ils sont pénibles à écrire, tant à la main qu’en utilisant un traitement de texte. Les mathématiciens
utilisent généralement le langage naturel pour décrire un arbre de preuve. Voici les différents cas de
figure pour écrire une preuve “en français” , tout en étant très rigoureux.

3.2.1 A ⇒ B - Implication
Soit à prouver une formule de la forme
A⇒B
On décrira cette preuve comme suit:
Supposons A et montrons B. . . . (comment prouver B) . . .
Cela découle de la règle de preuve I⇒ .

3.2.2 A ⇔ B - Équivalence
Soit à prouver une formule de la forme
A⇔B
On décrira cette preuve comme suit:
Montrons A ⇒ B et ensuite montrons B ⇒ A. . . .
Cela découle de la règle de preuve I⇔ .

3.2.3 A ∧ B - Conjonction
Soit à prouver une formule de la forme
A∧B
On décrira cette preuve comme suit:
Montrons A et montrons ensuite B.
. . . (comment prouver A) . . . .
. . . (comment prouver B) . . .
Cela découle de la règle de preuve I∧ .

90
3.2.4 Preuve par contradiction
Soit à prouver une formule A. On décrira cette preuve comme suit:
Preuve par contradiction. Supposons ¬A. . . . (comment obtenir une contradiction) . . .
Cela découle de la règle de preuve I¬ et la contradiction se prouve avec la règle E¬ .

3.2.5 Preuve par contraposition (contraposée)


Soit à prouver une formule A ⇒ B. On décrira cette preuve comme suit:
Preuve par contraposition. Supposons ¬B. Montrons ¬A. . . . (comment prouver ¬A)
...
Cela découle de la loi (LP-26).

3.2.6 Preuve par cas


Soit à prouver une formule C en utilisant la règle E∨ sur une formule A ∨ B disponible en hypothèse,
ou bien déduite des hypothèses. On décrira cette preuve comme suit:
Preuve de C par cas sur A ∨ B.
Cas A. . . . (comment prouver C) . . .
Cas B. . . . (comment prouver C) . . .

On utilise souvent la loi du tiers exclu (LP-20) pour distinguer les cas.

3.2.7 ∀ - Quantification universelle


Soit à prouver une formule de la forme
∀x · A
On décrira cette preuve comme suit:
Soit x . . . (comment prouver A) . . .
Tel qu’indiqué dans la règle de preuve I∀ (voir page 37), la preuve de A ne doit rien supposer à
propos de x; toutes les hypothèses qui mentionnent x proviendront de la preuve de A et seront
déchargées.
Les quantifications universelles sont généralement de la forme

∀x · x ∈ S ⇒ A

On décrira cette preuve comme suit:


Soit x ∈ S . . . (comment prouver A) . . .
Cela se justifie par la règle d’introduction de l’implication I⇒ qui permet de mettre x ∈ S en hy-
pothèse, et de décharger cette hypothèse. Il y a parfois plusieurs variables quantifiées, par exemple,

∀(x, y, z) · x ∈ S ∧ y ∈ S ∧ z ∈ S ⇒ A

On décrira cette preuve comme suit:


Soit x, y, z ∈ S . . . (comment prouver A) . . .

91
3.2.8 ∃ - Quantification existentielle
Soit à prouver une formule de la forme
∃x · A
On décrira cette preuve comme suit:

Montrons A[x := t]. . . . (comment prouver A[x := t]) . . .

où t est un terme représentant une valeur de x. Tel qu’indiqué dans la règle de preuve I∃ (voir page
37), la preuve de A[x := t] ne doit rien supposer à propos de x. Aucune hypothèse de la preuve
de A[x := t] ne peut mentionner x; les hypothèses doivent porter sur t. Entre autres, t ne peut
contenir x.

3.2.9 Illustration d’une preuve en langage naturel


Voici un théorème à prouver.

Théorème 12 Soit A, B des ensembles.

f ∈ A → B ∧ g ∈ B → A ∧ f ; g = id(A) ∧ g ; f = id(B) (3.43)


⇒ (3.44)
f ∈A
B (3.45)

Nous utiliserons les définitions suivantes d’injection et de surjection, pour simplifier les preuves et
pour illustrer différents cas de figure.

f ∈ A  B ⇔ dom(f ) = A ∧ ∀(x, y) · (x ∈ A ∧ y ∈ A ⇒ (f (x) = f (y) ⇒ x = y)) (3.46)


f ∈ A  B ⇔ ∀x · (x ∈ B ⇒ ∃y · y ∈ A ∧ f (y) = x) (3.47)

Voici les arbres de preuves de ce théorème.


Soit C ≡ (3.43).

P1 P2
f ∈AB f ∈AB
def. 

f ∈A
B
C⇒f ∈A B

Voici l’arbre de preuve P1 .

dx ∈ A ∧ y ∈ Ae[1] df (x) = f (y)e[2] dCe[3]


..
.
x=y
[I⇒ ][2]
f (x) = f (y) ⇒ x = y
[I⇒ ][1]
x ∈ A ∧ y ∈ A ⇒ f (x) = f (y) ⇒ x = y
[I∀ ]
∀(x, y) · (x ∈ A ∧ y ∈ A ⇒ (f (x) = f (y) ⇒ x = y)
(3.46)
f ∈AB
P1
Voici l’arbre de preuve P2 .

92
... ...
... ∈ A f (. . .) = x
[I∧ ]
. . . ∈ A ∧ f (. . .) = x
I∃ [y := . . .]
∃y · y ∈ A ∧ f (y) = x
[I⇒ ]
x ∈ B ⇒ ∃y · y ∈ A ∧ f (y) = x
[I∀ ]
∀x · x ∈ B ⇒ ∃y · y ∈ A ∧ f (y) = x
(3.47)
f ∈AB
P2
Cette preuve se décrit en langue naturelle comme suit. Elle sera à compléter en devoir ou en
exercices, d’où la présence de parties à compléter, identifiées par les “. . . ”.

Supposons (3.43). Montrons f ∈ A   B à partir de (3.46) et (3.47). Preuve de (3.46). Soit x, y ∈ A


et supposons f (x) = f (y), montrons x = y.

f (x) = f (y)
⇒ h ... i
...
⇒ h ... i
x=y

Preuve de (3.47). Soit x ∈ B. Posons y := . . . et montrons y ∈ A ∧ f (y) = x.

(3.43)
⇒ h ... i
...
⇒ h ... i
... ∈ A

(3.43)
⇒ h ... i
...
⇒ h ... i
f (. . .) = x

3.3 Preuve dans le style équationnel


Plusieurs théorèmes se prouvent en utilisant simplement les définitions et les lois de la logique. Une
stratégie de preuve fréquente pour les mathématiques discrètes consiste à ré-écrire une expression
sous forme d’un ensemble par compréhension ou d’un prédicat définissant l’opération en question.
Voici un premier exemple de théorème à prouver en utilisant les définitions.

Théorème 13 Soit r1 , r2 , r3 ∈ S ↔ S des relations sur un ensemble S.

r1 ; (r2 ∩ r3 ) ⊆ (r1 ; r2 ) ∩ (r1 ; r3 ) (3.48)

Preuve.
Montrons que la partie de gauche est incluse dans la partie de droite.

93
xr1 ; (r2 ∩ r3 )y
= h Déf. “;” i
p{x 7→ y | ∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ ( r2 ∩ r3 )}q
x y
Dans cette étape, nous avons simplement appliqué la définition de “;” telle que donnée au tableau 2.5.
La prochaine étape consiste à ré-écrire r2 ∩ r3 en utilisant la définition de “∩” du tableau 2.4.

= h déf. ∩ i
{x 7→ y | ∃z · x 7→ z ∈ r1 ∧ xz 7→ y ∈ p{z → 7 y ∈ r2 ∧ z 7→ y ∈ r3 }qy}
7 y|z→
= h (LE-5) i
7 y ∈ r2 ∧ z 7→ y ∈ r3 q}
{x 7→ y | ∃z · x 7→ z ∈ r1 ∧ pz →

Ces deux étapes survenant fréquemment et étant particulièrement fastidieuses, nous les combinerons
en une seule étape dans les preuves.

= h déf. ∩, (LE-5) i
{x 7→ y | ∃z · xx 7→ z ∈ r1 y ∧ z 7→ y ∈ r2 ∧ z 7→ y ∈ r3 }

Poursuivons.

= h (LP-5) i
{x 7→ y | ∃z · px 7→ z ∈ r1 ∧ xx 7→ z ∈ r1 q ∧ z 7→ y ∈ r2 y ∧ z 7→ y ∈ r3 }
= h (LP-7) i
{x 7→ y | x∃z y · x 7→ z ∈ r1 ∧ pz 7→ y ∈ r2 ∧ x 7→ z ∈ r1 q ∧ z 7→ y ∈ r3 }
⊆ h (LPO-19),(LE-3) i
p q p q
{x 7→ y | x( ∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ r2 )y ∧ x( ∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ r3 )y}
= h déf. “;” et (LE-5) i
p q p q
x{x 7→ y | x 7→ y ∈ r1 ; r2 ∧ x 7→ y ∈ r1 ; r3 }y
= h déf. ∩ i
pr1 ; r2 ∩ r1 ; r3 q

On peut aussi faire cette preuve en utilisant la définition de l’inclusion, c’est-à-dire

S ⊆ T ⇔ ∀x · (x ∈ S ⇒ x ∈ T ) (3.49)

Pour prouver l’inclusion S ⊆ T , il suffit de prouver x ∈ S ⇒ x ∈ T pour un x quelconque. Voici la


preuve du théorème 13 en utilisant (3.49).

xx 7→ y ∈ r1 ; (r2 ∩ r3 )y
⇔ h Déf. “;” et (LE-5) i
p∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ (r2 ∩ r3 ) q
x y
⇔ h déf. ∩ et (LE-5) i
∃z · xx 7→ z ∈ r1 y ∧ pz 7→ y ∈ r2 ∧ z 7→ y ∈ r3 q
⇔ h (LP-5) i
∃z · px 7→ z ∈ r1 ∧ xx 7→ z ∈ r1 q ∧ z 7→ y ∈ r2 y ∧ z 7→ y ∈ r3
⇔ h (LP-7) i
p 7 y ∈ r2 ∧ x 7→ z ∈ r1 q ∧ z 7→ y ∈ r3
x∃z y · x 7→ z ∈ r1 ∧ z →
⇒ h (LPO-19) i

94
p q p q
x( ∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ r2 )y ∧ x( ∃ z · x 7→ z ∈ r1 ∧ z 7→ y ∈ r3 )y
⇔ h déf. “;” et (LE-5) i
px 7→ y ∈ r1 ; r2 q ∧ px 7→ y ∈ r1 ; r3 q
x y
⇔ h déf. ∩ et (LE-5) i
px 7→ y ∈ r1 ; r2 ∩ r1 ; r3 q
Cette preuve comprend le même nombre d’étapes que la preuve précédente, mais les lignes sont plus
courtes, vu qu’on utilise seulement les prédicat définissant les ensembles de la preuve précédente; la
partie {x 7→ y | . . .} est absente.
Voici un autre exemple utilisant l’opérateur ran, qui extrait un ensemble d’une relation. Voici
un premier exemple de théorème à prouver en utilisant les définitions.
Théorème 14 Soit r1 , r2 ∈ S ↔ S des relations sur un ensemble S.
ran(r1 ; r2 ) ⊆ ran(r2 ) (3.50)

Preuve.
Montrons que la partie de gauche est incluse dans la partie de droite.
x ran(r1 ; r2 )y
= h Déf. ran i
p{x | ∃y · y 7→ x ∈ r1 ; r2 }q
x y
= h Déf. “;”, (LE-5) i
{x | ∃y · p∃z · xy 7→ z ∈ r1 y ∧ z 7→ x ∈ r2 q}
⊆ h E∧ , (LE-3) i
{x | x∃y y · ∃z · z 7→ x ∈ r2 }
= h (LPO-32) i
{x | ∃z · z 7→ x ∈ r2 }
= h Déf. ran i
ran(r2 )

Théorème 15 Soit r1 , r2 ∈ S ↔ S des relations sur un ensemble S et T ⊂ S.
(T C r1 ) ; r2 = T C (r1 ; r2 ) (3.51)

Preuve.
Montrons que la partie de gauche est égale à la partie de droite.
(T C r1 ) ; r2
= h Déf. “;” i
{x 7→ y | ∃z · x 7→ z ∈ T C r1 ∧ z 7→ y ∈ r2 }
= h Déf. C, (LE-5) i
{x 7→ y | ∃z · x ∈ T ∧ x 7→ z ∈ r1 ∧ z 7→ y ∈ r2 }
= h (LPO-28) i
{x 7→ y | x ∈ T ∧ ∃z · x 7→ z ∈ r1 ∧ z 7→ y ∈ r2 }
= h Déf. “;”, (LE-5) i
{x 7→ y | x ∈ T ∧ x 7→ y ∈ r1 ; r2 }
= h Déf. C i
T C (r1 ; r2 )


95
3.4 Exercices
1. Prouvez par induction les formules suivantes.

(a) ∀x · x ∈ N ⇒ xi=0 2i = 2x+1 − 1


P

(b) ∀x · x ∈ N1 ⇒ xi=1 5i−1 = (5x − 1)/4


P

(c) ∀x · x ∈ N3 ⇒ 2x + 1 < 2x
(d) ∀x · x ∈ N1 ⇒ φx−2 ≤ Fx
(e) ∀x · x ∈ N ⇒ Fx < 2x

2. Prouvez les formules suivantes: soit r, r1 , r2 , r3 ∈ S ↔ S et T ⊆ S

(a) (r1 ; r2 )−1 = r2−1 ; r1−1


(b) (r1 ∪ r2 )−1 = r1−1 ∪ r2−1
(c) id(T ) ; r = (T × S) ∩ r
(d) id(T ) ; r = T C r
(e) id(T ) ; (r1 ∩ r2 ) = (id(T ) ; r1 ) ∩ (id(T ) ; r2 )
(f) (T × S) ; (T × S) = (T × S)
(g) r1 ⊆ r2 ⇔ r1−1 ⊆ r2−1
(h) r1 ∈ S →7 S ⇒ r1 ; (r2 ∩ r3 ) = (r1 ; r2 ) ∩ (r1 ; r3 )
Indice: Utilisez le lemme suivant, que vous prouverez ensuite.

r∈S→
7 S ⇒ ((x, y) ∈ r ∧ (x, z) ∈ r ⇒ y = z)

(i) f ∈ A → B ∧ g ∈ B → A ∧ f ; g = id(A) ∧ g ; f = id(B)



f = g −1 ∧ f ∈ A 
B∧g ∈B
A
(j) f ∈ST

∀(x, y).(x ∈ S ∧ y ∈ S ⇒ (f (x) = f (y) ⇒ x = y)) ∧ dom(f ) = S
(k) r ∈S↔S

id(S) ⊆ r ; r−1 ⇔ dom(r) ⊆ S
3. Déterminez si les formules suivantes sont vraies ou fausses. Donnez une preuve si elles sont
vraies. Donnez un contre-exemple si elles sont fausses.
Soit A, B, C, D des ensembles.

(a) (A ∩ B) × (C ∩ D) = (A × C) ∩ (B × D)
(b) (A ∪ B) × (C ∪ D) = (A × C) ∪ (B × D)

96
Chapitre 4

Automate

Les automates sont largement utilisés en informatique. Ils permettent de reconnaitre les mots d’un
langage, et définissent la classe des langages dits réguliers. On les retrouvent dans les compilateurs,
les spécifications de systèmes, la vérification de systèmes, entre autres. Ils constituent le modèle
le plus simple de représentation du calcul dans un ordinateur. En effet, un ordinateur n’est rien
d’autre qu’une machine qui dispose d’une mémoire finie, d’un état (i.e., la valeur courante de sa
mémoire), et qui effectue une opération qui change son état. Les automates sont étroitement reliés
aux expressions régulières et aux grammaires régulières, qui représentent tous la même classe de
langages, soit les langages dits réguliers. Les expressions régulières et les grammaires sont présentées
dans le cours IFT313. Il existe plusieurs variantes d’automates (machine de Mealy et de Moore,
automate à pile, diagramme états-transitions, machine de Turing). Dans MAT115, on s’intéresse
seulement aux automates finis déterministes et non-déterministes, qui sont équivalents. Les autres
formes d’automates sont traitées dans les cours suivants : IFT313 – Introduction aux langages
formels, IFT232 – Méthodes de conception orientée objet, IGL301 – Spécification et vérification
des exigences, IFT580 – Compilation et interprétation des langages, IFT503 – Théorie du calcul et
IGL501 – Méthodes formelles en génie logiciel.

4.1 Automate fini déterministe


Définition 17 Un automate fini déterministe (AFD) est un quintuplet hQ, Σ, δ, q0 , F i tel que

• Q est l’ensemble fini des états de l’automate.

• Σ est un ensemble fini de symboles; on appelle cet ensemble l’alphabet de l’automate.

• δ ∈ Q × Σ → Q est la fonction de transition de l’automate.

• q0 ∈ Q est l’état initial de l’automate.

• F ⊆ Q est l’ensemble des états finaux de l’automate.

La figure 4.1 illustre deux AFD. L’état initial d’un AFD est identifié par l’un ou l’autre des pic-
togrammes ci-dessous.

0 ou 0

97
b

(i) a c
0 1 2

(ii) a c
0 1 2

a
b,c a,b,c
3

a,b,c

Figure 4.1: AFD incomplet (i), complété en (ii)

Un état final est représenté par un double cercle.

Un état initial peut aussi être final; il est représenté comme suit.

0 ou 0

L’AFD (i) est dit incomplet, car sa fonction de transition n’est pas totale. Pour l’état 0, les
transitions sur b et c ne sont pas définies. Idem pour l’état 1 avec a, et l’état 2 avec a,b,c. On utilise
souvent la convention suivante, par soucis de lisibilité: les transitions non définies sont implicitement
des transitions vers un état appelé puits; ce nom signifie qu’on ne peut plus sortir de cet état après
y être entré. L’AFD (ii) représente l’AFD (i) avec son état 3, qui est un état puits, ajouté afin que
la fonction de transition δ soit totale. Voici la définition formelle de l’automate (ii).

• Q = {0, 1, 2, 3}

• Σ = {a, b, c}

• δ = {(0, a, 1), (0, b, 3), (0, c, 3),


(1, a, 3), (1, b, 1), (1, c, 2),
(2, a, 3), (2, b, 3), (2, c, 3),
(3, a, 3), (3, b, 3), (3, c, 3)}

• q0 = 0

• F = {2}

Chaque triplet de δ représente une transition dans l’automate. Voici quelques autres définitions
utiles.

98
• w = [σ1 , . . . , σn ] dénote une suite formée des symboles σ1 , . . . , σn , tel que chaque σi ∈ Σ.
En B, une suite w formée d’éléments de S est une fonction de N →
7 S telle que

dom(w) = 1.. card(w)

On écrit donc w(i) en B pour dénoter σi . Le tableau 2.8 du chapitre 2 présente les opérateurs
du langage B permettant de manipuler des suites.
Plusieurs synonymes du terme suite sont utilisés dans la littérature:

– mot,
– chaîne de caractères (inspiré de l’anglais character string),
– séquence de symboles.

Une suite se distingue d’un ensemble par les caractéristiques suivantes:

– l’ordre d’énumération des éléments de la suite est important, alors que l’ordre d’énumération
des éléments d’un ensemble n’est pas important;
– un élément peut apparaître plusieurs fois dans une suite, et chaque occurrence compte,
alors qu’un élément peut apparaitre une seule fois dans un ensemble.

Par exemple, on a les propriétés suivantes.

6
[a, b] = [b, a] {a, b} = {b, a}
[a, a] = 6 [a] {a, a} = {a}

Nous utiliserons généralement le terme “mot” au lieu de “suite de symboles” dans le reste de
ce chapitre.

• Σ∗ est l’ensemble de tous les mots formés d’éléments de Σ.


Σ∗ est noté seq(Σ) dans le langage B.

• [ ] dénote le mot vide (i.e., il ne contient aucun symbole).


[ ] est parfois notée  dans plusieurs ouvrages sur les automates.
[ ] est l’élément neutre de la concaténation:

[ ] _ w = w _[ ] = w

• Σ+ = Σ∗ − [ ]
Σ+ est noté seq1 (Σ) dans le langage B.

• Pour simplifier la représentation d’une transition de q1 à q2 sur σ, c’est-à-dire le triplet

(q1 , σ, q2 ) ∈ δ

on utilise à la place la notation suivante, qui rappelle une transition dans l’automate.
σ
q1 −
→ q2

99
• δb ∈ Q × Σ∗ → Q est l’extension de δ aux mots. Elle est définie comme suit:

δ(q,
b [ ]) = q (4.1)
b w _[σ]) = δ(δ(q,
δ(q, b w), σ) (4.2)

• L(M ) = {w | w ∈ Σ∗ ∧ δ(q
b 0 , w) ∈ F } dénote le langage accepté par l’AFD M .
En termes plus simples, on dit qu’un automate accepte le mot w = σ1 . . . σn si la séquence de
transitions qui lit le mot w termine sur qn ∈ F .
σ1 2 σ n σ
q0 −→ q1 −→ . . . −→ qn et qn ∈ F

Rappelons que q0 dénote l’état initial de l’automate. Voici un exemple d’acceptation du mot
abbc par l’automate de la Figure 4.1(ii)
a b b c
0−
→1→
− 1→
− 1→
− 2∈F

Le mot bb est refusé par le même automate, car l’automate termine dans l’état 3 après avoir
lu tous les symboles, et cet état n’est pas final.
b b
0→
− 3→
− 3 6∈ F

La fonction δb permet de représenter formellement la séquence de transitions qui permet de


lire un mot dans un automate. Pour le voir, représentons cette séquence de transitions en
utilisant δ, en remplaçant q1 par δ(q0 , σ1 ), q2 par δ(δ(q0 , σ1 ), σ2 ), et ainsi de suite.
1σ σ
2 σn
q0 −→ δ(q0 , σ1 ) −→ δ(δ(q0 , σ1 ), σ2 ) . . . −→ δ(δ((. . .), σn−1 ), σn )

La fonction δb permet de calculer le terme δ(δ((. . .), σn−1 ), σn ). À titre illustratif, appliquons
la définition de δb à l’automate de la Figure 4.1(ii) pour le mot abbc.

xδ(0, abbc)y
b
= h déf. de δb i
pδ( δ(0,
b abb) , c)q
x y
= h déf. de δb i
δ(pδ(xδ(0,
b ab) , b)q, c)
y
= h déf. de δb i
δ(δ(pδ(xδ(0,
b a) , b)q, b), c)
y
= h déf. de δb i
δ(δ(δ(pδ(xδ(0,
b [ ]) , a)q, b), b), c)
y
= h déf. de δb i
δ(δ(δ(xδ(p0q, a)y, b), b), c)
= h déf. de δ i
δ(δ(xδ(p1q, b)y, b), c)
= h déf. de δ i
δ(xδ(p1q, b)y, c)
= h déf. de δ i
p q
xδ( 1 , c)y
= h déf. de δ i
p2q

100
a b
(i) 0 1 2

a,b

l a b
(ii) 0 1 2 3

a,b

b
a

a b
(iii) 0 1 2

b a

Figure 4.2: Les AFND (i) et (ii) acceptent le même langage que l’AFD (iii)

4.2 Automate fini non-déterministe


Définition 18 Un automate fini non-déterministe (AFND) est un quintuplet hQ, Σ, δ, q0 , F i tel que

• Q, Σ, q0 , F sont de même nature que Q, Σ, q0 , F dans un AFD.

• δ ⊆ Q × (Σ ∪ {λ}) × Q est la relation de transition de l’automate.

Les différences entre un AFND et un AFD sont les suivantes:

• Les transitions d’un AFND peuvent être étiquetées avec λ, un symbole particulier qui dénote
un changement d’état sans lecture d’un symbole dans la suite à traiter par un automate.
Autrement dit, λ ne fait pas partie de l’alphabet du langage accepté par l’AFND.

• δ est une fonction totale dans un AFD, alors que δ est une relation dans un AFND. Il n’est
donc pas nécessaire de faire un état puits dans un AFND, puisque la relation δ peut être
partielle.

La figure 4.2 illustre deux AFND, soit (i) et (ii), qui acceptent le même langage, ainsi qu’un AFD
(iii) qui accepte le même langage que (i) et (ii). Le non-déterminisme est présent dans (i) pour
l’état 0, car il y a deux transitions possibles pour a. Le non-déterminisme est présent dans (ii) pour
l’état 0, car il y a une transition sur λ.
Les définitions suivantes seront utiles.

• La fonction λ-filtre ∈ (Σ ∪ {λ})∗ → Σ∗ supprime le symbole λ d’un mot.

λ-filtre([ ]) = [ ] (4.3)
∗ _ _
σ ∈ Σ ∧ w ∈ (Σ ∪ {λ}) ⇒ λ-filtre([σ] w) = [σ] λ-filtre(w) (4.4)
∗ _
w ∈ (Σ ∪ {λ}) ⇒ λ-filtre([λ] w) = λ-filtre(w) (4.5)

101
• Le langage accepté par un AFND M = hQ, Σ, δ, q0 , F i est défini comme suit:

L(M ) = {w1 | w1 ∈ Σ∗ ∧
∃w2 · w2 ∈ (Σ ∪ {λ})∗ ∧ λ-filtre(w2 ) = w1 ∧
∃z · z ∈ Q+ ∧ card(z) = card(w2 ) + 1 ∧
first(z) = q0 ∧ last(z) ∈ F ∧
∀i · i ∈ dom(w2 ) ⇒ (z(i), w2 (i), z(i + 1)) ∈ δ
}

Autrement dit, w1 ∈ L(M ) ssi il existe w2 tel que w1 = λ-filtre(w2 ), et il existe z tel que
q0 = z(1) et last(z) ∈ F et
w2 (1) w2 (2) w2 (n)
z(1) −−−→ z(2) −−−→ . . . −−−→ z(n + 1)

Dans le cas où w1 = w2 = [ ], on a dom(w2 ) = ∅, et w1 ∈ L(M ) ⇔ z = [q0 ] et q0 ∈ F .

4.3 Déterminisation d’un AFND


Cette section décrit comment déterminiser un AFND M , c’est-à-dire construire un AFD MD tel
que L(M ) = L(MD ). Les définitions suivantes seront utiles.

• La relation λ-closure contient les couples d’états (q1 , q2 ) telles qu’il existe, dans M , une suite
(possiblement vide) de transitions λ menant de q1 à q2 , i.e.,
λ λ
q1 −
→ ... −
→ q2

On peut définir λ-closure en utilisant la fermeture réflexive et transitive.

λ-closure = {(q1 , q2 ) | (q1 , λ, q2 ) ∈ δ}∗

Voici la valeur de λ-closure pour l’AFND (ii) de la figure 4.2:

λ-closure = {(0, 0), (0, 1), (1, 1), (2, 2), (3, 3)}

• La relation t ∈ Q × Σ × Q contient les triplets (q1 , σ, q2 ) tels qu’il existe, dans M ,

– une suite (possiblement vide) de transitions λ menant de q1 à q10 ,


– puis une transition sur σ de q10 à q20 ,
– et finalement une suite (possiblement vide) de transitions λ menant de q20 à q2 .

Ce que l’on peut résumer comme suit:


λ λ σ λ λ
q1 − → q10 −
→ ... − → q20 −
→ ... −
→ q2

Intuitivement, on aimerait simplement définir t comme suit:

t = λ-closure ; δ ; λ-closure

102
mais la syntaxe du langage B ne le permet pas, à cause d’un problème de typage1 . Elle est
définie formellement comme suit:

t = {(q1 , σ, q2 ) | q1 ∈ Q ∧ σ ∈ Σ ∧ q2 ∈ Q ∧
∃q3 · (q1 , q3 ) ∈ λ-closure ∧ (q3 , σ, q2 ) ∈ δ ; λ-closure}

Voici la valeur de t pour l’AFND (ii) de la figure 4.2:

t = {(0, a, 0), (0, a, 1), (0, a, 2), (0, b, 0), (0, b, 1), (1, a, 2), (2, b, 3)}

Soit un AFND M = hQ, Σ, δ, q0 , F i. Il existe un algorithme calculant un AFD MD = hQD , Σ, δD , q0D , FD i,


tel que L(M ) = L(MD ). Les composantes de MD sont typées comme suit.
• QD ⊆ P(Q), c’est-à-dire que les états de QD sont des sous-ensembles d’états de Q.

• δD ∈ QD × Σ → QD

• q0D ∈ QD

• FD ⊆ QD
Cet algorithme est donné à la figure 4.4. Il utilise le prédicat transitionADef inir(X, σ), défini
comme suit:
transitionADef inir(X, σ) ⇔ X ∈ QD ∧ (X, σ) 6∈ dom(δD )
Cet algorithme utilise également l’opérateur ANY, dont la forme générale est la suivante:
ANY ~x WHERE A THEN p END
Cet opérateur choisit de manière non-déterministe une valeur de ~x satisfaisant A et exécute ensuite
la partie p.
Un état de MD est un sous-ensemble de Q. L’algorithme simule le parcours de tous les chemins
permettant d’accepter un mot. L’état initial de MD est λ-closure[{q0 }], i.e., tous les états de M
accessibles de l’état q0 par une suite (possiblement vide) de transitions λ. L’algorithme utilise t pour
calculer tous les états accessibles en lisant σ en effectuant des transitions λ avant et/ou après σ.
Une transition (X, σ, Y ) ∈ δD signifie qu’il existe, à partir d’un état de X, une suite (possiblement
vide) de transitions λ, suivie d’une transition sur σ et suivie d’une suite (possiblement vide) de
transitions λ, menant à un des états de Y . Ainsi, Y est constitué de tous les états de M accessibles
à partir d’un état de X en lisant σ. La figure 4.3 illustre l’AFD résultant de la déterminisation de
l’AFND (ii) de la figure 4.2.

b
a

a b
0,1 0,1,2 0,1,3

b a

Figure 4.3: L’AFD résultant de la déterminisation de l’AFND (ii) de la figure 4.2

1
Le langage Alloy nous le permettrait, car les relations y sont n-aires au lieu de binaires comme en B, et la
composition relationnelle est généralisée aux relation n-aires.

103
q0D := λ-closure[{q0 }];
QD := {q0D };
δD := {};
WHILE dom(δD ) 6= (QD × Σ) DO
ANY X, σ, Y WHERE
transitionADef
[ inir(X, σ)
∧Y = t[(q2 , σ)]
q2 ∈X
THEN
QD := QD ∪ {Y };
δD := δD ∪ {(X, σ, Y )}
END
END;
FD := {X | X ∈ QD ∧ X ∩ F 6= ∅}

Figure 4.4: Algorithme de déterminisation d’un AFND

4.4 Minimisation d’un AFD


Étant donné un AFD M1 , il est possible de calculer un AFD M2 tel que L(M1 ) = L(M2 ) et le
nombre d’états de M2 est minimal, c’est-à-dire, il n’existe pas d’autre AFD M3 tel L(M3 ) = L(M1 )
et le nombre d’états de M3 est plus petit que le nombre d’états de M2 . La minimisation repose sur
le principe suivant: deux états q1 , q2 sont équivalents ssi

∀w · w ∈ Σ∗ ⇒ (δ(q
b 1 , w) ∈ F ⇔ δ(q
b 2 , w) ∈ F )

Quand deux états sont équivalents, ont dit, de manière équivalente, qu’ils sont indistinguables. S’ils
ne sont pas équivalents, on dit qu’ils sont distinguables, c’est-à-dire,

∃w · w ∈ Σ∗ ∧ ¬(δ(q
b 1 , w) ∈ F ⇔ δ(q
b 2 , w) ∈ F )

Deux états équivalents peuvent être fusionnés, puisque tout mot acceptée par un le sera par l’autre
aussi. On peut déterminer les états équivalents d’un AFD en identifiant les états qui sont distin-
guables, et en propageant cette distinguabilité aux états qui sont reliés aux états distinguables par
une transition de l’AFD sur un même symbole. Après avoir parcouru toutes les paires d’états, ceux
qui ne sont pas distinguables sont alors considérés comme étant équivalents, et ils peuvent être
fusionnés. Au départ, on sait qu’un état final q1 ∈ F se distingue d’un état non final q2 6∈ F , parce
b 1 , []) ∈ F et δ(q
que δ(q b 2 , []) 6∈ F . Ensuite, si δ(x1 , σ) = y1 et δ(x2 , σ) = y2 , et si les états y1 et y2
sont distinguables, alors x1 et x2 sont aussi distinguables, car l’un permet de terminer après avoir
accepté σ, alors que l’autre ne le permet pas. En itérant sur ce principe, on peut trouver tous les
états distinguables, et, par conséquent, les états équivalents. L’algorithme de minimisation applique
ce principe comme suit:

• La variable D contient les paires d’états {q1 , q2 } tels que q1 et q2 sont distinguables. On
utilise un ensemble au lieu d’un couple q1 7→ q2 , car si q1 et q2 sont distinguables, alors q2 et
q1 sont aussi distinguables. Utiliser une paire {q1 , q2 } évite d’utiliser deux couples q1 7→ q2 et
q2 7→ q1 . Il n’est donc pas nécessaire de conserver les deux couples, et un ensemble suffit. La
distinguabilité est une relation d’équivalence, c’est-à-dire qu’elle est symétrique, transitive et

104
réflexive. On utilise le prédicat paire(x, y, Q) pour indiquer que x et y forment une paire de
Q.
paire(x, y, Q) ⇔ x ∈ Q ∧ y ∈ Q ∧ x 6= y

• La variable r est une relation sur les paires d’états. Si on découvre que {x2 , y2 } sont distin-
guables, alors toutes transitions δ(x1 , σ) = x2 et δ(y1 , σ) = y2 entrainent que x1 et y1 sont
distinguables; on ajoute alors le couple {x2 , y2 } 7→ {x1 , y1 } à r. On itère sur r (i.e., r∗ ) pour
propager la distinguabilité lorsqu’on détermine que x2 et y2 sont distinguables.

• La variable V contient les paires d’états {q1 , q2 } pour lesquels la distinguabilité reste à déter-
miner.

• La variable E contient, à la fin de l’algorithme, les paires d’états {q1 , q2 } tels que q1 et q2 sont
équivalents. Il suffit alors de regrouper en un seul état les états qui sont équivalents entre
eux, c’est-à-dire les classes d’équivalences. On note dqe la classe d’équivalence de q. Donc, on
forme les ensembles suivants, en considérant chaque état q1 ∈ Q.

dq1 e = {q1 } ∪ {q2 | {q1 , q2 } ∈ E}

On voit que si {q1 , q2 } ∈ E, alors dq1 e = dq2 e.

La figure 4.5 illustre le calcul de D et de r. Au départ, on sait que la paire {1, 2} ∈ D, car 1 ∈ F et
2 6∈ F . Ensuite, en traitant la paire {3, 4}, on déduit que {3, 4} ∈ D, car {1, 2} ∈ D et δ(3, a1 ) = 1
et δ(4, a1 ) = 2. La paire {5, 6} est traitée de manière similaire. Pour la paire {7, 8}, on ne trouve
pas de transition menant à une paire d’états {x, y} ∈ D. Toutefois, comme il existe une paire {9, 10}
dont on ne connait encore pas la distinguabilité, et que δ(7, a3 ) = 9 et δ(8, a3 ) = 10, on ajoute alors
le couple {9, 10} 7→ {7, 8} à r, car si on déduit subséquemment que {9, 10} ∈ D, alors on ajoutera
aussi {7, 8} à D. À la fin du traitement de toutes les paires d’états, si on n’a pu distinguer {7, 8},
alors on ajoute {7, 8} à E, et ils seront considérés comme équivalents.
L’algorithme de minimisation est présenté à la figure 4.6. Il est issu des travaux de Edward
F. Moore, un des auteurs de la théorie des automates, qui est centrale en informatique. John E.
Hopcroft a aussi proposé un algorithme, plus performant que celui inspiré des travaux de Moore;
la complexité de l’algorithme de Hopcroft est de O(ns log n), où n = card(Q) et s = card(Σ), alors
que celle de Moore est de l’ordre de O(n2 s). Hopcroft a reçu le prix Alan Turing en 1987 pour
ses travaux en théorie des compilateurs, en architecture des grands systèmes, et pour l’invention
des architectures RISC pour les processeurs. La figure 4.7 illustre un AFD et sa minimisation. La
figure 4.8 illustre le tableau de sa minimisation. Les états équivalents sont ceux qui n’apparaissent
pas dans D, c’est-à-dire {1, 3} et {2, 4}; donc E = {{1, 3}, {2, 4}}. Les états équivalents sont
regroupés dans l’AFD (iii) de la figure 4.7. Donc, étant donné un AFD hQ, Σ, δ, q0 , F i, on calcule
l’automate minimisé
Mmin = hQmin , Σ, δmin , q0min , Fmin i

• Qmin ⊆ P(Q)

• δmin ∈ (P(Q) × Σ) → P(Q)

• Fmin ⊆ P(Q)

comme suit:

105
a3 a2 a1
7 9 5 3 1

? r ? D D D

a3 a2 a1
8 10 6 4 2

Figure 4.5: Calcul de D et r


S
D := (x, y).(paire(x, y, Q) ∧ (x ∈ F ⇔ y 6∈ F ) | {{x, y}})
E := ∅
S
V := (x, y).(paire(x, y, Q) ∧ (x ∈ F ⇔ y ∈ F ) | {{x, y}})
r := ∅
WHILE V 6= ∅ DO
ANY x1 , y1 WHERE
{x1 , y1 } ∈ V
THEN
IF ∃(u, x2 , y2 ) · (u ∈ Σ ∧ x2 = δ(x1 , u) ∧ y2 = δ(y1 , u) ∧ x2 6= y2 ∧ {x2 , y2 } ∈ D)
THEN
D := D ∪ r∗ [{{x1 , y1 }}]
ELSE
r := r S∪
(u, x2 , y2 ).(u ∈ Σ ∧ x2 = δ(x1 , u) ∧ y2 = δ(y1 , u) ∧ x2 6= y2 ∧
{x1 , y1 } =
6 {x2 , y2 } | {{x2 , y2 } 7→ {x1 , y1 }})
END;
V := V − {{x1 , y1 }}
END
END;S
E := (x, y).(paire(x, y, Q) | {{x, y}}) − D

Figure 4.6: Algorithme de minimisation d’un AFD

• Qmin = {X | ∃x · x ∈ Q ∧ X = dxe}

• δmin = {(X, u, Y ) | ∃x, y · x ∈ X ∧ y ∈ Y ∧ (x, u, y) ∈ δ}

• q0min = dq0 e

• Fmin = {X | ∃x · x ∈ F ∧ X = dxe}

Donc, les états de l’automate minimal (Qmin ) sont les classes d’equivalence des états de l’automate
d’origine. Les états finaux (Fmin ) sont les classes d’équivalences des états finaux de l’automate
d’origine. Il y a une transition de X sur σ vers Y s’il y a une transition entre un élément de X sur
σ vers un élément de Y dans δ.

106
c
a 1 2

(i) 0

b c
3 4

c
a 1 2
S
0

b c
(ii) a,b 3 4
a,b S
c
5

(iii) a,b c
0 1,3 2,4

Figure 4.7: Minimisation de l’automate incomplet (i), complété en (ii), et minimisé en (iii)

Paire D r E
{0,2} X
{0,4} X
{1,2} X
{1,4} X
{2,3} X
{2,5} X
{3,4} X
{4,5} X

{0,1} X
{0,3} X
{0,5} X2(r[{1,5}])
{1,3} X
{1,5} X {0,5}
{2,4} {1,3} X
{3,5} X {0,5}

Figure 4.8: Tableau du calcul pour la minimisation de l’automate de la figure 4.7

107
L’AFD résultant de la déterminisation d’un AFND n’est pas nécessairement minimal. On doit
le minimiser. Considérons l’AFND suivant.

a
a
b

λ b 3 λ
0
a 1
b 2
b

Voici l’AFD résultant de sa déterminisation.

{1,3} a a

b
b b
{0,1,3}
b a
a b
{1,2,3}
a
a {1} {}
{0,1} b

Voici l’AFD résultant de sa minimisation.

b
a

{{}}
a

b
{{1}}
a b a
{{0,1}} b
{{0,1,3},{1,3},{1,2,3}}

108
4.5 Exercices
1. Définissez un automate déterministe qui accepte une suite de symboles représentant un entier
dans un langage de programmation comme Java ou C++. Le signe (+ ou −) apparait au
début du nombre et il est facultatif. L’entier doit comprendre au moins un chiffre.
Σ = 0..9 ∪ {+, −}.

2. Définissez un automate déterministe qui accepte une suite de symboles représentant un nombre
en point flottant dans un langage de programmation comme Java ou C++. Le nombre peut
débuter par un “.”. L’exposant, introduit par le symbole e ou le symbole E, est optionnel; il
est donné par un entier facultativement signé.
Σ = 0..9 ∪ {+, −, e, E, .}.

3. Définissez un automate déterministe qui décrit le comportement d’une pile de taille maxi-
male 2. L’état final est une pile vide. On peut empiler les éléments de l’ensemble {0, 1}.
Σ = ({push, top} × {0, 1}) ∪ {pop}.

• L’opération (push,x) ajoute l’élément x au sommet de la pile, avec x ∈ {0, 1}.


• L’opération (top,x) indique que l’élément x est sommet de la pile, avec x ∈ {0, 1}. Elle
ne modifie pas l’état de la pile.
• L’opération pop supprime l’élément au sommet de la pile. Elle n’a pas de paramètre, car
il n’est pas nécessaire vu que c’est élément au sommet de la pile qui est enlevé.

4. Définissez un automate déterministe qui décrit le comportement d’une file de taille maximale 2.
Pour simplifier, on suppose qu’une file ne peut contenir deux fois le même élément. L’état
final est une pile vide. On peut enfiler les éléments de l’ensemble {0, 1}.
Σ = ({enfiler, tête} × {0, 1}) ∪ {défiler}.

• L’opération (enfiler,x) ajoute l’élément x à la queue de la file, avec x ∈ {0, 1}.


• L’opération (tête,x) indique que l’élément x est en tête de la file, avec x ∈ {0, 1}. Elle
ne modifie pas l’état de la pile.
• L’opération defiler supprime l’élément en tête de la file. Elle n’a pas de paramètre, car il
n’est pas nécessaire vu que c’est élément en tête de la file qui est enlevé.

5. Définissez un automate déterministe qui décrit le cycle de vie d’un livre dans un système qui
gère une bibliothèque; supposez qu’il n’existe que deux membres, identifiés par l’ensemble
M = {0, 1}. L’état final représente un livre supprimé.
Σ = {créer, supprimer, retourner} ∪ ({emprunter, réserver, annuler} × M ). On suppose qu’il faut
réserver un livre avant de l’emprunter.

• L’opération créer crée le livre.


• L’opération supprimer supprime le livre. Avant de supprimer un livre, il faut avoir terminé
son prêt et ses réservations.
• L’opération (réserver,x) réserve le livre pour le membre x, avec x ∈ {0, 1}. Un membre
ne peut avoir deux réservations actives pour un même livre.
• L’opération (emprunter,x) prête le livre au membre x, avec x ∈ {0, 1}. Le membre doit
être en tête de la file de réservation. Le membre doit avoir réservé le livre au préalable.
• L’opération (annuler,x) annule la réservation du membre x, avec x ∈ {0, 1}. Un membre
ne peut avoir deux réservations actives pour un livre.

109
• L’opération retourner retourne le livre prêté; elle n’a pas de paramètre, car on sait que le
livre est prêté.

6. Définissez un automate déterministe qui accepte le paiement d’un café avec des pièces de 5,
10 et 25 cents (i.e., Σ = {5, 10, 25}. La suite de pièces est acceptée ssi la somme des pièces
donne au moins le coût d’un café, soit 50 cents.

7. Soit Σ = {a, b, c, d}. Définissez un automate déterministe pour chaque sous-question suivante.
L’automate doit accepter seulement les suites décrites, et refuser toutes les autres suites.

(a) une suite acceptée commence par la sous-suite [a, b].


(b) une suite acceptée contient la sous-suite [a, b].
(c) une suite acceptée contient la sous-suite [a, b] suivie (pas nécessairement immédiatement)
de la sous-suite [c, d].
(d) une suite acceptée termine par la sous-suite [a, b].
(e) une suite acceptée contient la sous-suite [a, b] ou la sous-suite [c, d].
(f) une suite acceptée contient la sous-suite [a, b] et la sous-suite [c, d].
(g) une suite acceptée contient un nombre pair de a et un nombre impair de b.

8. Est-il possible de définir un automate qui accepte seulement les suites de la forme an bn , c’est-
à-dire que la suite est formée d’une suite de a suivie d’une suite de b, et qu’il y a exactement
le même nombre de a que de b?

9. Déterminisez les automates suivants:

(a)

λ
2
0 a a
λ 1

Solution:
a

a
{0,1} {0,1,2}

(b)

3
c
2 b
λ
a
λ 1
0

Solution:

110
b
c
b
a
c
{1}
a a {}
b
b
a {2} a
c c
{0,1,2} b
c
{3}

(c)

b b

a a
0 1 2
b

Solution:

b
a
b
b {}
a
{0} {1} a
a
b
{2}
b

a {1,2}

(d)

b
b
a
b 1
a 2
0 b

Solution:

111
b
a

{}

a
b

b b
{0} {0,1}
a
a
b {2} {1}
a

(e)
a

b b
a 1 3 a
2
0 a

Solution:
b

{0} a b
b a
{1,2}

a {}
a a
b
b {3}
a b
{1,3} {1}
a a
b {2}
b

{2,3}

(f)
a
b
b
a b
0 2
a b
3 1
a

Solution:
b
a

a
{2} {}
a
b
b
{3} b b
b b {1,3}
a a
a {0,1,3}
a {0,2} b a
{0} {1,2} b
a
{0,3} b {0,1,2}
a

112
(g)

a c

c
0 1
λ b
b

Solution:

c
b b
a a
a
{1,2}
b c
c {}
a
{0,2} c
b
{1}

(h)

a
a
b

λ b 3 λ
0
a 1
b 2
b

Solution:
{1,3} a a

b
b b
{0,1,3}
b a
a b
{1,2,3}
a
a {1} {}
{0,1} b

10. Minimisez les automates suivants:

(a)

113
Solution: E = {{0, 3}, {1, 2}, {1, 4}, {2, 4}}

(b)

Solution: E = {{0, 2}}

(c)

114
Solution: E = {{4, 5}, {4, 6}, {5, 6}}

(d)

Solution: E = {{1, 3}, {2, 4}}

115
(e)

Solution: E = {{1, 3}, {2, 4}}

(f)

116
Solution: E = {{1, 3}, {2, 4}, {5, 6}}

117
Bibliographie

[1] J.-R. Abrial. The B-book: Assigning Programs to Meanings. Cambridge University Press, New
York, NY, USA, 1996. Manuel disponible à la bibliothèque.

[2] D. Barker-Plummer, J. Barwise, and J. Etchemendy. https://ggweb.gradegrinder.net/


tarskisworld.

[3] Olivier Gasquet, François Schwarzentruber, and Martin Strecker. Panda: A Proof Assistant in
Natural Deduction for All. A Gentzen Style Proof Assistant for Undergraduate Students, pages
85–92. Springer Berlin Heidelberg, Berlin, Heidelberg, 2011.

[4] D. Gries and F. B. Schneider. A Logical Approach to Discrete Math. Springer-Verlag New York,
Inc., New York, NY, USA, 1993. Manuel disponible à la bibliothèque.

[5] Daniel Jackson. Software Abstractions: Logic, Language, and Analysis. The MIT Press, 2012.
Manuel disponible à la bibliothèque.

[6] R. Lalement. Logique, réduction, résolution. Masson, Paris, 1990. Manuel disponible à la
bibliothèque.

[7] Michael Leuschel and Michael J. Butler. ProB: an automated analysis toolset for the B method.
STTT, 10(2):185–203, 2008.

[8] Michael Leuschel and et al. https://www3.hhu.de/stups/prob/index.php/The_ProB_


Animator_and_Model_Checker.

[9] K. H. Rosen. Discrete Mathematics and Its Applications, Fourth Edition. McGraw-Hill, 1999.
Manuel disponible à la bibliothèque.

[10] R. Stärk. https://courses.cs.washington.edu/courses/cse590d/03sp/tarski/tarski.


html.

[11] T. A. Sudkamp. Languages and Machines: An Introduction to the Theory of Computer Science,
Third Edition. Addison Wesley, 2005. Manuel disponible à la bibliothèque.

118

Vous aimerez peut-être aussi