0% ont trouvé ce document utile (0 vote)
226 vues187 pages

Ift1065 2

note de cours

Transféré par

t4vvwgr9pr
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
226 vues187 pages

Ift1065 2

note de cours

Transféré par

t4vvwgr9pr
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

M I K L Ó S C S Ű R Ö S

IFT1065 STRUCTURES DISCRÈTES

NOTES DE COURS — AUTOMNE 2023

8 décembre 2023
Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Uti-
lisation Commerciale 4.0 International (CC BY-NC 4.0).
© Texte et images (sauf celles de Wikimédia et dans le domaine publique). 2023 Miklós Csűrös, Département
d’informatique et de recherche opérationnelle, Université de Montréal. [email protected]
Table des matières

Introduction 9

1 Logique propositionnelle 11
1.1 Propositions 11
1.2 Constantes, variables propositionnelles et opérateurs 11
Ordre des opérations 12
1.3 Tautologie et équivalence logique 13
1.4 Modèles et satisfiabilité 15
1.5 Formes normales 16

2 Calcul des prédicats 17


2.1 Quantificateurs 17
2.2 Ordre des opérations 18
2.3 Notations explicite et abrégée du domaine 18
2.4 Négation de quantifications 19
2.5 Quantification avec plusieurs variables 19
Jeux logiques entre ∀ et ∃ 20
2.6 Quantification existentielle unique 22
2.7 Théories, modèles et structures 22

3 Inférence logique 23
3.1 Règles d’inférence 24
3.2 Inférence pour calcul des propositions 25
3.3 Déduction naturelle 26
Règles d’élimination et d’introduction 27
Règles dérivées 28
3.4 Égalité 28
3.5 Règles pour quantificateurs 29
3.6 Systèmes d’inférence formelle 30
3.7 Sémantique et inférence 31
2

4 Preuves 33
4.1 Preuve directe 33
4.2 Preuve indirecte 34
Preuve par contraposition 34
Preuve par contradiction 35
4.3 Stratégies de démonstration 36
Si et seulement si 36
Preuve par cas 36
Preuves d’existence 38
Preuve d’unicité 39

5 Ensembles 41
5.1 Appartenance et égalité 41
Notation par compréhension 42
Notation en image 42
Cardinalité d’un ensemble 43
5.2 Opérations ensemblistes 44
Théorie des opérations 45
5.3 Sous-ensembles 46
Propriétés de la relation d’inclusion 46
Techniques de preuve avec ensembles 47
5.4 Collections d’ensembles 47
Ensemble puissance 48
5.5 Paradoxe du barbier qui rase ceux qui ne se rasent pas 49

6 Relations et fonctions 51
6.1 Produit cartésien 51
Définition de couples 51
6.2 Relations binaires 53
Inverse et complément 53
Équivalence et ordre 54
3

6.3 Fonctions 55
Opérateurs binaires 56
L’univers des fonctions 56
La fonction vide 56
Composition de fonctions 56
6.4 Bijections 58
Techniques de preuve 58
Inverse d’une fonction 58
Composition et les bijections 59
Cardinalité par bijection 59

7 Séquences et induction 61
7.1 Séquences 61
Le produit cartésien généralisé 62
7.2 Chaînes de caractères 63
7.3 Induction mathématique 64
Preuve par induction 64
Choisir le cas de base 66
Induction d’ordre 2 66
Induction généralisée 67
7.4 Minimum, maximum et bon ordre 68
7.5 Fonction de plancher 69
Calcul avec le plancher 69
Système de numération 70

8 Sommation et définitions récursives 71


8.1 Sommations 71
8.2 Séries 73
Nombres harmoniques 73
8.3 Définitions récursives de ∑ et d’autres grands opérateurs 75
Récurrences pour ∑ et preuves par induction 76
4

8.4 Suites récurrentes 77


Suite arithmétique 78
Suite géométrique 78
Nombres Fibonacci 79
Factorielles 79

9 Structures récursives 81
9.1 Structures récursives 81
Successeur dans la théorie axiomatique et les ordinaux finis 81
Chaînes et concaténation 82
Listes et arbres 83
Syntaxe 83
9.2 Induction structurale 84
Théorie de chaînes avec concaténation 84
Induction avec arbres 86
9.3 Construction des entiers 87
Axiomes de Peano 87
Propriétés des opérations arithmétiques 88
Les entiers négatifs 89

10 Examen intra : liste de sujets et références 91


10.1 Logique propositionnelle 91
10.2 Calcul des prédicats 91
10.3 Inférence logique 91
10.4 Preuves 91
10.5 Ensembles 92
10.6 Relations et fonctions 92
10.7 Séquences 92
10.8 Récursion 92

11 Divisibilité et congruence 93
11.1 Divisibilité 93
5

11.2 Congruences 95
Arithmétique modulaire 96
Types entiers en programmation 98
11.3 Les nombres premiers et le plus grand commun diviseur 99
Plus grand commun diviseur : l’algorithme d’Euclide 100
Décomposition en produit de facteurs premiers 102

12 Algorithmes 105
12.1 Modèles de calcul 105
12.2 Correction et efficacité 107
Exactitude 107
Complexité 107
12.3 Analyse de temps de calcul 108
Meilleur, pire, ou moyen 108
12.4 Tri par sélection et tri par insertion 109
12.5 Algorithmes récursifs 111
Algorithme et définition récursive 111
Penser en récurrences 111
Diviser pour régner 112
Programmation dynamique 113

13 Analyse d’algorithmes 115


13.1 Notation asymptotique et l’ordre de croissance 115
13.2 Diviser pour régner et récurrences pour temps de calcul 116
Temps logarithmique : recherche dichotomique et ses amies 116
Temps linéarithmique : tri fusion 118
13.3 Notation grand-O 120
Ordres de croissance comme relations et ensembles 120
Expressions avec termes asymptotiques 121
Fonctions notables 122
Calcul avec bornes asymptotiques 122
13.4 Algorithmes numériques avec entiers 123
Algorithme d’Euclide 124
6

13.5 Protocoles cryptographiques basés sur l’arithmétique des entiers 126

14 Dénombrement 129
14.1 Égalité et ordre 129
14.2 Principe de multiplication 130
Principe d’exponentiation 130
Permutations 131
14.3 Principe d’addition 132
Principe de soustraction 133
14.4 Principe de division 134
Combinaisons 134
14.5 Inclusion-exclusion 136
14.6 Coefficients binomiaux 138
Identités remarquables 138
Coefficients multinomiaux 139
14.7 Principe des tiroirs 140

15 Graphes 143
15.1 Terminologie 143
Adjacence, incidence et degré 144
15.2 Opérations et preuves avec graphes 145
Poignées de main 145
15.3 Chemins 147
15.4 Couplage dans les graphes bipartis 148
Théorème de Kőnig 148
Ensembles défectueux 149
Hypergraphes et familles d’ensembles 150
Matrices 0-1 150
Théorème de Cantor-Schröder-Bernstein 151

16 Propriétés des graphes 153


16.1 Isomorphisme 153
16.2 Matrice d’adjacence 154
Matrice d’une relation binaire et composition de relations 154
7

16.3 Connexité 155


Composantes connexes 155
Coupures 155
Clôture d’un graphe 156
Clôtures d’une relation binaire 157
Dénombrement de chemins 157

17 Arbres 159
17.1 Forêts et arbres 159
17.2 Arbre enraciné 162
17.3 Hauteur et profondeur 163
Implémentations informatiques 164
17.4 Parcours 165
17.5 Arbre syntaxique 166
Ambiguïté et les parenthèses 167
Évaluation de formules 167
Liaison de variables 168

18 Examen final : liste de sujets et références 169


18.1 Les entiers 169
18.2 Algorithmes 169
18.3 Analyse d’algorithmes 169
18.4 Dénombrement 170
18.5 Graphes 170
18.6 Arbres 170

42 L’infini et les limites du savoir 171


42.1 Les infinis 171
L’infini dénombrable : ℵ0 171
Les infinis non-dénombrables 173
42.2 Indécidablité et incalculabilité 174

Bibliographie 185
Introduction
C E S N O T E S D E C O U R S accompagnent et complémentent le livre principal
du cours (en version française ou anglaise) :
RosenFR Kenneth H. Rosen. Mathématiques discrètes (édition révisée). Che-
nelière Education, 2002. Traduction française de la 3e édition anglaise.
RosenEN Kenneth H. Rosen. Discrete Mathematics and Its Applications 7th
edition. McGraw-Hill, 2012.
D’autres références à des articles Wikipédia sont indiquées sur la marge par
le logo .
......................................................................................

Calendrier

Dates (cours) Sujets Évaluations


1 (4)P /5 (lundi/mardi) et 8 septembre (vendredi) Logique propositionnelle Test 1 (5%)
2 11/12 et 15 septembre Logique des prédicats Test 2 (5%)
3 18/19 et 22 septembre Inférence logique Devoir 1 (5%)
4 25/26 et 29 septembre Preuves
5 2/3 et 6 octobre Ensembles, relations Test 3 (5%)
6 (9)P /10 et 13 octobre Suites, induction mathématique Test 4 (5%)
16–20 octobre Activités libres
7 23/24 et 27 octobre Récursion Devoir 2 (5%)
8 30/31 octobre (lundi/mardi) Les entiers Test 5 (5%)
3 novembre (vendredi) Semaines 1–7 Examen intra (15%)
9 6/7 et 10 novembre Dénombrement Test 6 (5%)
10 13/14 et 17 novembre Algorithmes Devoir 3 (5%)
11 20/21 et 25 novembre Analyse d’algorithmes Test 7 (5%)
12 27/28 novembre et 1 décembre Graphes Test 8 (5%)
13 4/5 et 8 décembre Arbres Test 9 (5%)
12 décembre (mardi) Semaines 8–13 Examen final (25%)
()P : enregistrement vidéo seulement (jour férié)
1 Logique propositionnelle
L A L O G I Q U E est le fondement définitif de toutes les sciences parce qu’elle
étudie les règles 1 d’inférence de vérité. Le calcul propositionnel formalise les
règles de base pour travailler avec des énoncés censés parler de vérité. Un tel
énoncé qui affirme un fait est appelé une proposition : elle peut être vraie
ou fausse, mais jamais aucune, ni les deux en même temps. Le calcul définit F IGURE 1.1: Une proposition. [«Trahision
des images», René Magritte, 1929]
la syntaxe des formules logiques (comment écrire des énoncés composés), et
1. C’est pourquoi la philatélie (collection
leur sémantique (vérité d’un énoncé composé). de timbres), et catalogage en général ne
sont pas des sciences. Ils n’ont aucune règle
d’inférence car il n’y a pas de vérité à inférer.
1.1 Propositions
(fr) :calcul des propositions
Définition 1.1. Une proposition est un énoncé qui est soit vrai soit faux.

Exemple 1.1. Quelques exemples :


2 · 2 = 4 est une proposition (vraie).
2 · 2 = 5 est une proposition (fausse).
«Veux-tu m’épouser ?» C’est une question et non pas une proposition logique.

x + 2 > 0 n’est pas une proposition (parce qu’elle contient une variable x libre)
x + 2 > x n’est pas une proposition (même si toujours vraie — parce qu’elle contient la variable x)
«Je m’excuse.» N’est pas une proposition (mais plutôt un énoncé performatif).

TABLE 1.1: Constantes logiques et variantes


1.2 Constantes, variables propositionnelles et opérateurs de notation
constante valeur variantes
Il y a deux constantes logiques : vrai et faux. En informatique, on aime les 1 vrai >, T, V, true
0 faux ⊥, F, false
encoder par un bit : l’entier 0 représente faux et 1 encode vrai. De même,
j’écris 2 0 pour faux et 1 pour vrai dans ce cours. Le plus souvent, on 2. Noter les caractères en gras 0, 1 — ne pas
travaille avec des variables propositionnelles, dénotées par une lettre. Par confondre avec les entiers 0 et 1.

exemple, on a le droit de définir une variable r ≡ 2 · 2 = 4 .


Les formules atomiques sont les plus simples possibles, consistant de juste
une seule variable ou constante. On construit des formules (ou expressions)
TABLE 1.2: Table de vérité pour les opéra-
plus élaborées à l’aide des opérateurs logiques (ou connecteurs). À partir
teurs logiques de base.
d’une proposition p, on peut formuler ¬ p («non p»). À partir de deux propo-
sitions p, q, on peut aussi construire p ∧ q («p et q»), p ∨ q («p ou q), p → q p q p∧q p∨q p→q p↔q
(«p implique q»), et p ↔ q («p équivaut q»). 0 0 0 0 1 1
0 1 0 1 1 0
Table de vérité. La manière sémantique de représenter la valeur d’une expres- 1 0 0 1 0 0
sion logique est par la table de vérité. Une telle table contient une rangée 1 1 1 1 1 1
pour chaque combinaison de valeurs des variables propositionnelles dans la
formule. Les colonnes correspondent aux valeurs des sous-formules d’intérêt.
12

Négation. La négation de p est dénotée par ¬ p (lire : «non p»). Quand p


est vrai, ¬ p est faux, et quand p est faux, ¬ p est vrai.

ET logique. La conjonction de p et q est notée par p ∧ q (lire : «p et q»).


Elle est vraie quand p et q sont tous les deux vrais, et autrement elle est fausse.

OU logique. La disjonction de p et q est notée par p ∨ q (lire :«p ou q»).


Elle est fausse quand p et q sont tous les deux faux. Autrement, elle est vraie,
incluant aussi le cas quand tous les deux sont vrais. On dit que ∨ est OU
inclusif, tandis que le OU exclusif (p ⊕ q, v. plus bas) est faux quand p et q
sont vrais.

Implication. L’implication matérielle 3 , aussi appelée énoncé conditionnel, 3. :implication matérielle


(fr)

s’écrit par le connecteur p → q (lire «si p alors q»). On utilise l’implication


p → q pour exprimer que p est une condition suffisante pour que q
soit vrai (il suffit que p est vrai, mais q peut être vrai autrement aussi), ou
que q est une condition nécessaire pour que p soit vrai (p ne peut être
vrai que si q l’est aussi). L’implication antécédent → conséquence (ou
hypothèse → conclusion) est fausse seulement quand l’antécédent est vrai
mais la conséquence est fausse. Quand l’antécédent p est faux, p → q est vrai
aussi, peu importe la valeur de q (toute conclusion est possible à partir d’un TABLE 1.3: Implication logique. Le condi-
hypothèse faux). Mais quand l’antécédent p est vrai, l’implication est vraie tionnel p → q est vrai quand p est faux ou q
seulement quand la conséquence q l’est aussi. Dans d’autres mots, p → q est vrai.

est équivalent à (¬ p) ∨ q, et sa négation ¬( p → q) est juste p ∧ (¬q) :


p q p→q ¬p ¬p ∨ q p ∧ ¬q
voir Table 1.3.
0 0 1 1 1 0
Théorème 1.1 montre que p → q est équivalente à sa contraposée ¬q → ¬ p,
0 1 1 1 1 0
mais non pas à sa réciproque q → p. 1 0 0 0 0 1
1 1 1 0 1 0
Biconditionnel. La proposition «p si et seulement si q», ou l’énoncé bicon-
ditionnel, est dénotée par p ↔ q . Le biconditionnel est vrai quand p est q TABLE 1.4: Table de vérité pour OU
exclusif et des formules équivalentes avec
ont la même valeur (fausse ou vraie), et autrement il est faux. Théorème 1.1 négation, conjonction et disjonction.
montre que p ↔ q est équivalente à son inverse ¬ p ↔ ¬q.
p ⊕ q ≡ ( p ∧ ¬q) ∨ (¬ p ∧ q)
| {z } | {z }
OU exclusif. L’exclusivité «soit p soit q» est noté par le connecteur p ⊕ q , ≡a ≡b
ce qui est équivalent à ¬( p ↔ q) : p ⊕ q est vrai si exactement une des deux ≡ ( p ∨ q) ∧ (¬ p ∨ ¬q) .
| {z } | {z }
propositions p, q est vraie (v. Table 1.4). C’est un opérateur utilisé plutôt dans ≡c ≡d

le contexte d’opérations sur des chaînes de bits.


p q p⊕q a b c d
0 0 0 0 0 0 1
Ordre des opérations 0 1 1 0 1 1 1
Table 1.5 montre notre convention sur l’ordre des opérations logiques : 1 0 1 1 0 1 1

évaluer les ¬, ∧, ∨, →, ↔, dans cet ordre, en respectant la priorité induite par 1 1 0 0 0 1 0

les parenthèses. Ainsi, ¬ p ∧ q veut dire (¬ p) ∧ q. Mais il est recommandé


d’utiliser des parenthèses quand ils améliorent lisibilité et clarté. Par exemple,
13

priorité opération notation variantes TABLE 1.5: Ordre et notation des opéra-
tions logiques de base. La dernière colonne
plus forte négation ¬p p̄ montre des variations communes de nota-
↑ conjonction (et) p∧q pq tion.
disjonction (ou) p∨q p+q
↓ conditionnel p→q p ⇒ q, p ⊃ q
plus faible biconditionnel p↔q p⇔q

même si p ∨ q ∧ r est plus économique que p ∨ (q ∧ r ), ce dernier est plus


difficile à mécomprendre 4 . 4. Notons que l’ordre de Table 1.5 n’est
pas assumé par tout le monde : il y a des
logicien/nes qui préfèrent la même priorité
Associativité. Les opérations ET et OU sont associatives : p ∧ q ∧ r est la pour disjonction et conjonction. Une telle
même chose que ( p ∧ q) ∧ r et p ∧ (q ∧ r ). En général, on omet donc les pa- convention serait bien justifiable, basée sur le
rôle symétrique entre ∧ et ∨ dans les règles
renthèses dans une série de conjonctions ou dans une série de disjonctions. Par de distributivité, ou les lois de De Morgan,
contre, les opérations conditionnelles ne sont pas associatives. La convention dans Table 1.6.
usuelle est d’intérpreter, p → q → r comme p → (q → r ), mais il est sage TABLE 1.6: Équivalences logiques.
de délimiter les arguments dans les énoncés conditionnels et biconditionnels
p∧1 ≡ p
quand il y a des imbrications : (identité)
p∨0 ≡ p

( p → q ) ∧ ( q → p ) ↔ ( p ↔ q ). (1.1) p∧0 ≡ 0
(domination)
p∨1 ≡ 1
L’opération ⊕ (OU exclusif) est associative, mais on ne définit pas sa prio-
p∧p ≡ p
rité dans ce cours : on va mettre des parenthèses si on doit la combiner avec (idempotence)
p∨p ≡ p
d’autres opérations logiques.
p ∧ ¬p ≡ 0
(négation)
p ∨ ¬p ≡ 1
1.3 Tautologie et équivalence logique
¬(¬ p) ≡ p (double négation)
Définition 1.2. Une proposition qui est toujours vraie, quelles que soient les valeurs p∧q ≡ q∧p
(commutativité)
de ses variables propositionnelles, est appelée une tautologie. Une proposition qui est p∨q ≡ q∨p
toujours fausse est une contradiction. p ∧ (q ∧ r ) ≡ ( p ∧ q) ∧ r
(associativité)
p ∨ (q ∨ r ) ≡ ( p ∨ q) ∨ r
La plus simple tautologie est la constante vrai 1, et la plus simple contradic-
tion est la constante 0 : ce sont des propositions sans aucune variable. Avec la p ∧ (q ∨ r ) ≡ ( p ∧ q) ∨ ( p ∧ r )
(distributivité)
variable p, on a la tautologie fondamentale ( p ∨ ¬ p) qui exprime l’impossi- p ∨ (q ∧ r ) ≡ ( p ∨ q) ∧ ( p ∨ r )

bilité d’une troisième valeur logique ou le principe du tiers exclu (p doit être p ∨ ( p ∧ q) ≡ p
(absorption)
p ∧ ( p ∨ q) ≡ p
faux ou vrai). La contradiction fondamentale ( p ∧ ¬ p) exprime le principe de
¬( p ∧ q) ≡ ¬ p ∨ ¬q
non-contradiction (p ne peut être faux et vrai en même temps). (De Morgan)
¬( p ∨ q) ≡ ¬ p ∧ ¬q
Si la proposition biconditionnelle A ↔ B est une tautologie, alors les
formules A et B sont égales pour toutes valeurs de vérité aux variables dans A
et B, et donc elles ont des tables de vérité identiques. En conséquence, les TABLE 1.7: Équivalences logiques avec
propositions conditionnelles
deux formules sont équivalentes pour le calcul.
p → q ≡ ¬p ∨ q
Définition 1.3. Deux propositions p et q sont dites logiquement équivalentes
( p → q) ∧ ( p → r ) ≡ p → (q ∧ r )
quand p ↔ q est une tautologie, et alors on écrit p ≡ q . ( p → r ) ∧ (q → r ) ≡ ( p ∨ q) → r
( p → q) ∨ ( p → r ) ≡ p → (q ∨ r )
L’équivalence p ≡ q est exploitée dans le calcul logique parce qu’on a le
( p → r ) ∨ (q → r ) ≡ ( p ∧ q) → r
droit de remplacer p par q dans tout contexte de formule. C’est notre outil
p ↔ q ≡ ( p ∧ q) ∨ (¬ p ∧ ¬q)
p ↔ q ≡ ¬ p ↔ ¬q

Théorème 1.1

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

fondamental pour évaluer les formules plus complexes, et pour développer des
preuves. Par exemple, l’équivalence p ↔ q ≡ ( p → q) ∧ (q → p) est utilisé
fréquemment quand on démontre «si et seulement si» en le séparant dans les
deux implications «si p alors q» et la réciproque «si q alors p».
Si on veut démontrer une équivalence avec juste quelques variables, le plus simple est d’afficher sa table de vérité, et
inspecter les colonnnes qui correspondent aux deux cotés de l’équivalence :

Loi de De Morgan : ¬( p ∨ q) ≡ (¬ p) ∧ (¬q) Loi de De Morgan : ¬( p ∧ q) ≡ (¬ p) ∨ (¬q)


p q p∨q ¬( p ∨ q) ¬ p ¬q (¬ p) ∧ (¬q) p∧q ¬( p ∧ q) (¬ p) ∨ (¬q)
0 0 0 1 1 1 1 0 1 1
0 1 1 0 1 0 0 0 1 1
1 0 1 0 0 1 0 0 1 1
1 1 1 0 0 0 0 1 0 0

Théorème 1.1 (contraposée et réciproque). Étant donné l’implication p → q , on définit


? sa contraposée ¬q → ¬ p ,
? sa réciproque q → p ,
? et son inverse ¬ p → ¬q .
Alors,

¬( p → q) ≡ p ∧ ¬q non-implication (1.3a)
p → q ≡ ¬q → ¬ p équivalence de la contraposée (1.3b)
q → p ≡ ¬ p → ¬q équivalence entre réciproque et inverse (1.3c)
p ↔ q ≡ ( p → q) ∧ (q → p) expansion avec réciproque (1.3d)
p ↔ q ≡ ( p → q) ∧ (¬ p → ¬q) expansion avec inverse (1.3e)

Démonstration. I. Preuve avec table de vérité. On confirme les équivalences par les colonnes identiques dans la table
de vérité. Voir Table 1.3 pour Eq. (1.3a).
p q p→q ¬p ¬q ¬q → ¬ p ¬ p → ¬q q→p p↔q ( p → q) ∧ (¬ p → ¬q) ( p → q) ∧ (q → p)
implication contraposée inverse réciproque
0 0 1 1 1 1 1 1 1 1 1
0 1 1 1 0 1 0 0 0 0 0
1 0 0 0 1 0 1 1 0 0 0
1 1 1 0 0 1 1 1 1 1 1

II. Preuve avec De Morgan et d’autres équivalences.

¬( p → q) ≡ ¬(¬ p ∨ q) définition du conditionnel p → q ≡ ¬p ∨ q définition du conditionnel


≡ ¬(¬ p) ∧ (¬q) De Morgan ≡ q ∨ ¬p commutativité
≡ p ∧ ¬q double négation ≡ ¬(¬q) ∨ ¬ p double négation

et c’est (1.3a). ≡ ¬q → ¬ p définition du conditionnel

qui montre (1.3b). (1.3c) découle de (1.3b) par


l’échange de variables.
15

Supposons maintenant qu’on définit le biconditionnel par p ↔ q ≡ ( p ∧ q) ∨ (¬ p ∧ ¬q) :

( p → q) ∧ (q → p) ≡ (¬ p ∨ q) ∧ (¬q ∨ p) défn. du conditionnel ×2


 
≡ (¬ p ∨ q) ∧ ¬q ∨ (¬ p ∨ q) ∧ p distributivité
 
≡ (¬q) ∧ (¬ p ∨ q) ∨ p ∧ (¬ p ∨ q) commutativité ×2
 
≡ (¬q ∧ ¬ p) ∨ (¬q ∧ q) ∨ ( p ∧ ¬ p) ∨ ( p ∧ q) distributivité ×2
 
≡ (¬q ∧ ¬ p) ∨ 0 ∨ 0 ∨ ( p ∧ q) comm. + loi de négation
≡ ( p ∧ q) ∨ (¬ p ∧ ¬q) loi d’identité+comm.
≡p↔q définition du biconditionnel

qui est l’énonce de (1.3d). Par (1.3c) et (1.3d),

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

ce qui montre (1.3e).




1.4 Modèles et satisfiabilité TABLE 1.8: Théorie pour un modèle simple


de météo
Le langage de la logique des propositions est suffisant pour définir des
modèles simples : quelques (un nombre fini de) variables avec leur valeur de p ≡ «il pleut»
vérité, et une collection de propositions (les axiomes) qui sont des formules n ≡ «il neige»
logiques avec les variables définies. Table 1.8 montre un tel exemple. c ≡ «il faut chaud»

Une proposition logique est satisfaisable s’il y a un modèle qui la rend f ≡ «il fait froid»
m ≡ «je mets mon manteau»
vraie. Dans ce cas-là, on peut trouver des valeurs pour des variables avec les-
u ≡ «je prends ma parapluie»
quelles la formule est vraie. La formule ( p ∨ q) ∧ (¬ p) ∧ (¬q), par exemple,
f ∧n → m axiome
n’est pas satisfaisable parce qu’elle reste fausse avec toutes valeurs de p, q.
p∧c → u axiome
Une formule est donc non-satisfaisable si et seulement si sa négation est une
tautologie. Avec le même exemple :

¬ ( p ∨ q) ∧ (¬ p) ∧ (¬q) ≡ (¬ p ∧ ¬q) ∨ p ∨ q  par De Morgan

est toujours vraie.


Une théorie décrit un modèle, en définissant les axiomes et les règles pour
inférer de nouveaux énoncés à partir des axiomes. Dans calcul des proposi-
tions, chaque rangée de la table de vérité correspond à un modèle possible. En
calculant la table de vérité, on vérifie le modèle : est-ce qu’il satisfait la théorie ?
La verification de modèles 5 (model checking) est un problème important 5. :vérification de modèles
(fr)

d’informatique. Notamment, lors de spécification de systèmes, on utilise une


logique temporelle pour décrire le comportement de systèmes, en ajoutant des
modalités comme «toujours» ou «un jour» aux formules logiques décrivant les
propriétés des états.
16

1.5 Formes normales


TABLE 1.9: Terminologie pour formes
Définition 1.4. Un littéral est une variable ou sa négation. Une formule est normales
en forme normale disjonctive (disjunctive normal form, DNF) si elle est atome : variable (ou constante, mais on
une disjonction de conjonction de littéraux. Une formule est en forme normale élimine les constantes dans DNF et
CNF)
conjonctive (conjunctive normal form, CNF), si elle est une conjonction de
littéral : variable ou sa négation : p, ¬q
disjonction de littéraux.
clause disjonctive : OU de littéraux : p,
p ∨ ¬q
On peut transformer toute formule en DNF ou en CNF équivalente. Pour
clause conjonctive : ET de littéraux : q,
voir ceci, supposons qu’on veut construire une formule pour exprimer une ¬p ∧ q
condition quelconque, définie par la table de vérité. Considérons l’exemple DNF : OU de ETs de littéraux ( p ∧ ¬q) ∨
de dessiner un compteur de 0 à 7. On stocke la valeur du compteur sur trois (q ∧ r )
CNF : ET de OUs de littéraux ( p ∨ q) ∧
bits par les variables a, b, c. Quand le compteur est incrémenté on doit calcu- (¬ p ∨ r )
ler (n + 1) dans la représentation binaire : on cherche les formules pour les
TABLE 1.10: Table de vérité pour in-
bits d, e, f dans le résultat. Table 1.10 montre le table de vérité pour le pro-
crémenter un compteur sur trois bits
blème : on veut trois formules pour d, e, f . Le bit faible est facile : f ≡ ¬c. abc + 1 = de f .
Mais comment trouver les expressions pour d et e ? Il y a deux recettes géné-
a b c d e f
riques. La première donne la formule en DNF. Pour inférer une DNF de la 0 0 0 0 0 1
table de vérité, on considère chaque rangée où la formule doit être vraie. Ici, 0 0 1 0 1 0
0 1 0 0 1 1
e est vrai pour abc = 001, 010, 101, 110. (Donc e ≡ b ⊕ c, mais on veut des
0 1 1 1 0 0
connecteurs de base ∧, ∨, ¬.) On inclut une conjonction pour chaque rangée, 1 0 0 1 0 1
incluant toute variable : comme ¬ x si x ≡ 0 ou comme x si x ≡ 1. Suivant la 1 0 1 1 1 0
1 1 0 1 1 1
recette, on obtient les DNFs pour e et d : 1 1 1 0 0 0

e ≡ (¬ a ∧ ¬b ∧ c) ∨ (¬ a ∧ b ∧ ¬c) ∨ ( a ∧ ¬b ∧ c) ∨ ( a ∧ b ∧ ¬c)
001 010 101 110
d ≡ (¬ a ∧ b ∧ c) ∨ ( a ∧ ¬b ∧ ¬c) ∨ ( a ∧ ¬b ∧ c) ∨ ( a ∧ b ∧ ¬c)
011 100 101 110

La deuxième recette donne une CNF. On considère les rangées où la formule


doit être fausse, et on ajoute une disjonction incluant toutes les variables pour
la rangée : ¬ x si x ≡ 1 ou x si x ≡ 0. Pour notre compteur :

e ≡ ( a ∨ b ∨ c) ∧ ( a ∨ ¬b ∨ ¬c) ∧ (¬ a ∨ b ∨ c) ∧ (¬ a ∨ ¬b ∨ ¬c)
000 011 100 111
d ≡ ( a ∨ b ∨ c) ∧ ( a ∨ b ∨ ¬c) ∧ ( a ∨ ¬b ∨ c) ∧ (¬ a ∨ ¬b ∨ ¬c)
000 001 010 111

On remarque que ni la CNF ni la DNF ne sont uniques. Par exemple, le bit


faible f ≡ ¬c est en CNF et en DNF, et la formule f ≡ (b ∨ ¬c) ∧ (¬b ∨
¬c) est une CNF équivalente.
Une formule en DNF est facile à rendre vraie : elle est vraie si une des clauses est vraie, et chaque clause ne contient que
des littéraux. Dans le cas de CNF, on emploie des contraintes pour fixer la valeur des variables en déterminant satisfai-
sabilité. Par exemple, si on a une clause avec un seul littéral p ou ¬ p, on marque que p ≡ 1 ou 0 est nécessaire pour
satisfaire la CNF. Si on a les deux contraintes : p ∧ (¬ p), on déclare que la formule est non-satisfaisable. Autrement,
décider la satisfaisabilité d’un CNF est un problème difficile.
2 Calcul des prédicats
L E C A L C U L D E S P R É D I C AT S 1 étend la formalisation logique aux proprié- 1. :calcul des prédicats
(fr)

tés et aux relations des éléments dans un univers de discours. On utilise des
variables (x, y, . . .) pour dénoter ces éléments dans les énoncés. Un tel énoncé,
ou prédicat, devient une proposition quand on remplace les variables par
des éléments actuels du domaine. On dénote les prédicats comme des fonc-
tions. P( x ) est un prédicat avec un argument x dans l’univers de discours U
si P( x ) est une proposition (soit vrai soit faux) pour chaque élément x de U.

univers / domaine de discours F IGURE 2.1: Un prédicat P scinde l’univers


en deux : les P et les non-P. Il est impossible
d’avoir un élément x avec P( x ) faux et
x
i
es P

tf P
ra

au

vrai en même temps (principe de non-


tv

contradiction), et il est également impossible


es

principe du tiers exclu d’avoir un élément x pour lequel P( x ) n’est


(pas de troisième possibilité) ni vrai ni faux (principe du tiers exclu).

principe de non-contradiction
(pas de vrai et faux simultanément) TABLE 2.1: Quelques domaines importants
domaine opérations relations
N +· =≤
Z +−· =≤
Q + − ·/ =≤
Définition 2.1 (Domaine). Un domaine ou univers de discours comprend (i) les R + − ·/ =≤
éléments (objets) du domaine, (ii) l’égalité (=) et d’autres relations fondamentales, ensembles ∪ ∩ −4× ∈=⊆
incluant (iii) les fonctions et les opérations sur les éléments.
Définition 2.2 (Prédicat). P( x ) est un prédicat (aussi appelé fonction pro-
positionnelle) avec un 2 argument x dans l’univers de discours U si et seulement 2. En général, le prédicat peut avoir
si P( x ) est une proposition (soit vrai soit faux) pour chaque élément x de U. 0, 1, 2, 3, . . . arguments, dénotés par
variables distinctes.

Exemple 2.1. Quelques exemples :


1. D ( x ) ≡ x + 2 ≤ x est un prédicat (avec x entier)
2. D (3) ≡ 3 + 2 ≤ 3 est une proposition (fausse).
3. G ( x, y) ≡ x est le petit-fils de y est un prédicat à deux arguments (avec personnes x, y)
4. G (Batu Khan, Gengis Khan) ≡ Batu Khan est le petit-fils de Gengis Khan est une proposition (vraie)
5. pair( x ) ≡ x est un nombre pair est un prédicat (avec x entier)
6. P( x ) ≡ x est un nombre premier est un prédicat (avec x un nombre naturel)
7. H ( x ) ≡ x est humain et M( x ) ≡ x est mortel sont des prédicats (dans notre univers)

2.1 Quantificateurs
On construit une proposition sur un élément particulier par le remplace-
ment de l’argument du prédicat : M(Socrates) est la proposition «Socrates
18

est mortel». Mais on voudrait aussi formuler des propositions sur l’ensemble
des éléments du domaine : «Tous les humains sont mortels», ou «Il existe (au
moins) un être immortel.» Les propositions de ce genre sont des prédicats
quantifiés. Dans les formules logiques, on précède les arguments par des
quantificateurs 3 qui établissent les liaisons des variables. En particulier, le 3. :quantificateur logique
(fr)

symbole ∀ est utilisé dans les propositions universelles, et ∃ est utilisé dans les
propositions existentielles :

∀ x : H ( x ) → M( x ) et ∃y : ¬ M(y)

correspondents à nos énoncés sur mortalité.

Définition 2.3. La quantification universelle d’un prédicat P( x ) est la  ∀ x P( x ) exprime que P( x ) est toujours
proposition ∀ x P( x ) qui affirme que P( x ) vaut pour chaque élément du domaine : vrai (et donc jamais faux).

«pour tout x [dans le domaine], P( x )».


La quantification existentielle d’un prédicat P( x ) est la proposition ∃ x P( x )  ∃ x P( x ) veut dire que P( x ) est parfois
qui affirme que P( x ) vaut pour au moins un élément du domaine : «il existe x [dans vrai (et donc n’est pas toujours faux).

le domaine] tel que P( x )».

2.2 Ordre des opérations


Les quantificateurs ont une priorité plus forte que toutes les opérations de calcul de propositions (¬, ∧, ∨, →, ↔). En
conséquence, on doit utiliser les parenthèses dans des prédicats combinés :

∀ x P( x ) ∧ Q( x ) ≡ ∀ x P( x ) ∧ Q(y)  variable libre dans l’argument de Q

n’est pas une proposition, mais ∀ x P( x ) ∧ Q( x ) est une proposition bien formulée. Afin d’économiser sur les paren-
thèses, on va aussi utiliser la notation avec un séparateur (colonne) :

∀ x : P( x ) ∧ Q( x ) ≡ ∀ x P( x ) ∧ Q( x )  même variable liée dans les arguments de P et Q

2.3 Notations explicite et abrégée du domaine


En général, on n’indique pas le domaine de la quantification dans les formules parce qu il ressort du contexte. Si
nécéssaire, on peut spécifier le domaine U explicitement avec la notation de ∀ x ∈ U ou ∃ x ∈ U :

∃ x ∈ R x2 = x ou, avec séparateur, ∃ x ∈ R : x2 = x  il existe un nombre réel x t.q. x2 = x

Si on veut un domaine restreint, on inclut la restriction dans la formule avec quantification explicite :

∃ x ∈ R : x > 0 ∧ x2 = x  restreindre avec ∧ dans énoncé existentiel


2
∀x ∈ R : x > 1 → x > x  restreindre avec → dans énoncé universel

Ou, en notation abrégée on combine la restriction avec la variable quantifiée :

∃ x > 0 : x2 = x  il existe un nombre positif x t.q. x2 = x


∀ x > 1 : x2 > x  x2 > x pour tout x plus grand que 1
19

2.4 Négation de quantifications


Une proposition avec le quantificateur universel est une grande conjonc-
tion à travers les éléments du domaine :
∀ x P ( x ) ≡ P (0) ∧ P (1) ∧ P (2) ∧ P (3) ∧ · · ·
quand P est un prédicat dans le domaine de nombres naturels. De même, la
quantification existentielle correspond à une disjonction :
∃ x P ( x ) ≡ P (0) ∨ P (1) ∨ P (2) ∨ P (3) ∨ · · ·
Le théorème suivant étend les lois de De Morgan aux quantificateurs :
Théorème 2.1 (Lois de De Morgan). On a les équivalences suivantes :  Comparer à la version avec ∨ et ∧ dans
un domaine fini :
¬∀ x P( x ) ≡ ∃y ¬ P(y)
¬( p ∧ q ∧ r ∧ . . . ) ≡ ¬ p ∨ ¬q ∨ ¬q ∨ . . .
¬∃ x P( x ) ≡ ∀y ¬ P(y). ¬( p ∨ q ∨ r ∨ . . . ) ≡ ¬ p ∧ ¬q ∧ ¬r ∧ . . .

On n’est pas surpris par ce théorème : l’échec d’universalité, écrite par la


négation ¬∀ x P( x ), est vrai si et seulement s’il existe un contre-exemple y ∃ x : P( x ) ∧ ∀y : ¬( x = y) → ¬ P(y)
t.q. ¬ P(y). La négation de la quantification existentielle ¬∃ x P( x ) veut dire Décomposition :
qu’en fait il n’y a aucun x avec P( x ), et c’est plutôt le contraire ¬ P( x ) qui
vaut pour chaque x. ∃ x : P( x ) ∧ ∀y : ( x 6= y) → ¬ P(y)
x, y liées
x liée, y libre
2.5 Quantification avec plusieurs variables x, y variables libres, dans le domaine du prédicat P

Construction :
Il faut quantifier chaque variable séparément dans une formule avec plus
( x 6= y) → P(y)  x, y libres
qu’une variable. Dans une telle formule, un prédicat quantifié (p.e., ∀ x Q( x )) P( x ) ∧ ∀y : ( x 6= y) → ¬ P(y)  x libre, y lié
contient une proposition imbriquée avec d’autres quantificateurs (p.e., ∃ x : P( x ) ∧ ∀y : ( x 6= y) → ¬ P(y)  x, y liés
Q( x ) = ∀y : R( x, y)). On peut mettre en évidence les imbrications par F IGURE 2.2: Imbrication et liaison de
parenthèses, mais comme les quantificateurs ont la priorité la plus forte, on variables. La formule exprime qu’il y a
exactement un élément x qui satisfait le
peut les laisser tomber sans confusion : prédicat P.

∀ x ∀ y : x 2 + y2 ≥ 0 ≡ ∀ x : ∀ y : x 2 + y2 ≥ 0
| {z } | {z }
≡ R( x,y) ≡ Q( x )

∀ x ∀y : R( x, y) ≡ ∀ x : Q( x )
Quand les quantificateurs sont tous ∀ ou tous ∃, l’ordre n’est pas important :  Observer que Q( x ) ≡ ∀ a : R( x, a) n’est
pas la même chose que S( x ) ≡ ∀ a : R( a, x )
∀ x ∀y : R( x, y) ≡ ∀y ∀ x : R( x, y) ∃ x ∃y : Z ( x, y) ≡ ∃y ∃ x : Z ( x, y) mais ∀ x : Q( x ) ≡ ∀ x : S( x ).
| {z }
≡S(y)

∀ x : Q( x ) ≡ ∀y : S(y) ∃ x ∃y : Z ( x, y) ≡ ∃ x ∃y : Z (y, x ).
Avec des quantificateurs variés, il faut faire attention à l’ordre :


∀ x ∃y : x + y = 0 ≡ ∀ x ∃y : x + y = 0  pour tout x, il existe y — cet y peut être différent pour tout x

∃y∀ x : x + y = 0 ≡ ∃y ∀ x : x + y = 0  il existe y tel que pour tout x — cet y est le même pour tout x
sont deux propositions complètement différentes.
20

Le prédicat V ( x ) = ∃y : x + y = 0 est vrai pour tout nombre réel x,


parce qu’il y a toujours un nombre opposé y = − x. Par contre, le prédicat
W ( x ) = ∀y : y + x = 0, est faux pour tout nombre réel parce qu’il n’existe
aucun x qui est opposé de tout nombre y en même temps.

Jeux logiques entre ∀ et ∃


On peut interpreter les quantifications imbriquées comme un jeu d’adver-
saires 4 : la méchante Alouette (∀) et le gentil Eléphant (∃). Une proposition 4. Dans la littérature de logique mathéma-
avec quantificateurs correspond à un jeu, où soit ∀ soit ∃ choisit la valeur pour tique, les adversaires sont nommés Abélard et
Eloïse.
une variable quantifiée à son tour. L’Alouette gagne si elle rend la proposition
fausse, et l’Eléphant gagne si la proposition est vraie à la fin. Par exemple, dans
le jeu ∀ x ∃y : x + y = 0 , ∀ peut choisir n’importe quel x au premier tour.
Le 2e tour est pour ∃ à choisir y : il va choisir 5 y = − x, et rendre l’égalité 5. Mais si le domaine n’inclut pas l’inverse
vraie. On voit que ∃ gagne toujours, donc la proposition est vraie. additif (− x ) pour tout x, comme c’est le cas
avec les nombres naturels, l’Alouette gagne
La correspondance au jeux d’adversaires montre aussi immédiatement que avec x 6= 0.

∀ x ∀y : P( x, y) ≡ ∀y∀ x : P( x, y) et ∃ x ∃y : P( x, y) ≡ ∃y∃ x : P( x, y)

parce que c’est un seul joueur qui a le droit de choisir x et y dans n’importe
quel ordre.

Exemple 2.2. Rappelons la définitions de la limite d’une fonction f en un


point fini c :

lim f ( x ) = L ≡ ∀e > 0 ∃δ > 0∀ x : | x − c| < δ → f ( x ) − L < e


x →c | {z }
si x est δ-proche à c alors f ( x ) est e-proche à L.

Correspondance au jeu : F IGURE 2.3: f ( x ) tend à L quand x tend à


(1) ∀ choisit e c.

(2) ∃ choisit δ
(3) ∀ choisit x avec c − δ < x < c ou c < x < c + δ
(4) si L − e < f ( x ) < L + e, on gagne (avec ∃).
Une preuve de la limite peut en fait suivre cette recette : prenons l’exemple
de
x2 − 1
lim = 2. (2.1)
x →1 x − 1
(1) Soit e un nombre réel positif. (2) Choisir δ = e. (3) Soit x un nombre
2
quelconque avec 1 < x < 1 + δ. On a alors 2 < xx−−11 < 2 + δ. De même,
x 2 −1
pour tout 1 − δ < x < 1, on a 2 − δ < x −1 < 2. (4) En conclusion, on a
x 2 −1
toujours x −1 − 2 < δ = e, donc la limite dans (2.1) est correcte.
21

TABLE 2.2: Conditions de victoire ∀/∃


pour un prédicat à 2 arguments P( x, y) (dans
y · · · un domaine non-vide).
↑ · P( x,y) ·
· · ·
→ x

jeu victoire ∃ (valeur 1) victoire ∀ (valeur 0)


1 1 1 · · ·
∀ x ∀y : P( x, y)
1 1 1 · 0 ·
∀y ∀ x : P( x, y)
1 1 1 · · ·
aucun 0 au moins un 0
· 1 · · 0 ·
∀ x ∃y : P( x, y) 1 · 1 · 0 ·
· · · · 0 ·
au moins un 1 dans chaque colonne aucun 1 dans une colonne
· · · · 0 ·
∃y ∀ x : P( x, y) 1 1 1 · · 0
· · · · 0 ·
aucun 0 dans une rangée au moins un 0 dans chaque rangée
· 1 · · · ·
∃ x ∀y : P( x, y) · 1 · 0 · 0
· 1 · · 0 ·
aucun 0 dans une colonne au moins un 0 dans chaque colonne
· 1 · · · ·
∀y ∃ x : P( x, y) 1 · · 0 0 0
· 1 · · · ·
au moins un 1 dans chaque rangée aucun 1 dans une rangée
· · · 0 0 0
∃ x ∃y : P( x, y)
· 1 · 0 0 0
∃y ∃ x : P( x, y)
· · · 0 0 0
au moins un 1 aucun 1
22

2.6 Quantification existentielle unique


Les quantificateurs ∀ et ∃ sont fondamentaux, mais on peut imaginer d’autres quantifications importantes : p.e., «il y
a exactement deux solutions à x2 − 5x + 6 = 0». Le plus important parmi ces quantificateurs rares est l’assertion
d’unicité : ∃!x : P( x ) veut dire qu’il y a exactement un élément x pour lequel P( x ) est vrai dans dans l’univers.
Comme ∃ x : P( x ) ne dit rien sur le nombre d’éléments x qui peuvent satisfaire le prédicat, on est obligé de spécifier
aussi que «si y est différent de x, alors P(y) est faux» :

∃!x : P( x ) ≡ ∃ x : P( x ) ∧ ∀y : y 6= x → ¬ P(y) ,

en incluant la condition que pour tout autre y, P(y) est faux. Ou bien, avec la contraposée («si P(y) vaut, alors c’est le
même élément que x») :

∃!x : P( x ) ≡ ∃ x : P( x ) ∧ ∀y : P(y) → y = x . (2.2)
On peut aussi remplacer le conditionnel par la disjonction (y = x ∨ ¬ P(y)), et même continuer avec De Morgan («il
n’y pas d’autre élément y pour lequel P(y) soit vrai») :

∃!x : P( x ) ≡ ∃ x : P( x ) ∧ ¬ ∃y : P(y) ∧ y 6= x .

2.7 Théories, modèles et structures


Un modèle en logique propositionnelle est simple : il correspond à une
rangée de la table de vérité. La rangée définit la valeur de vérité pour un
nombre fixe de variables. Une structure est un modèle plus flexible qu’on
définit dans le langage des calcul des prédicats. Une structure est une col-
lection d’objets avec fonctions et relations. Elle sert à satisfaire une théorie
décrite par quantificateurs et prédicats.
Exemple 2.3 (Théories minimalistes). Considérons les théories les plus simples
qu’on peut décrire sans prédicats :
∃ x La formule ∃ x est vraie s’il y au moins 6 1 élément. Donc cette théorie est 6. Si le domaine est vide, la formule ∃ x
satisfaite par tout modèle (structure) non-vide. correspond à une disjonction vide qui
doit être 0, car c’est l’élément d’identité :
∀ x La formule ∀ x est vraie dans tout modèle, même vide 7 .
p ∨ 0 ≡ p.
¬∃ x Une théorie avec l’axiome ¬∃ x est satisfaite seulement par un modèle vide. 7. Si le domaine est vide, ∀ x correspond à
une conjonction vide qui doit être 1, car
∃!x Cette formule équivaut ∃ x ∀y : x = y par Éq. (2.2). La théorie est satisfaite
c’est l’élément d’identité : p ∧ 1 ≡ p.
par un modèle avec un seul élément. Ou aussi par un modèle qui ne comprend que
des copies identiques du même objet (p.e., je, moi et moi-même, mais personne
d’autre).

Exemple 2.4 (Théories des nombres). La théorie des nombres naturels N contient les objets 0, 1, 2, . . . , les opérations d’addition
(+) et de multiplication (·), l’ordre (≤), et la fonction de successeur s(n). Cette dernière permettre de définir les axiomes pour la
structure :
? tout nombre naturel possède un successeur : ∀n ∈ N : s(n) ∈ N ;
? mais 0 n’est le successeur d’aucun nombre naturel : ¬∃n ∈ N : s(n) = 0 ;
et d’autres, avec les axiomes pour les opérations : p.e., ∀n : 0 · n = 0 ou a + s(b) = s( a + b).
La théorie des nombres rationnels Q contient aussi les opérations soustraction et division, satisfaisant des axiomes additionnels
1
comme ∀ x : x 6= 0 → ∃y : x · y = 1 qui exprime que tout x, à l’exception de 0, possède un inverse multiplicatif (égale à x −1 et x
dans notations usuelles).
3 Inférence logique
U N E P R E U V E établit une nouvelle proposition (la conclusion) à partir
d’autres propositions (les prémisses), selon des règles formelles d’inférence.
En général, on définit un argument comme une séquence de propositions
logiques, avec une conclusion (la dernière proposition) et des prémisses (toute
autre proposition précédant la conclusion, possiblement aucune). Un argu-
ment est dit valide si lorsque les prémisses 1 sont vraies, la conclusion est vraie 1. Donc s’il n’y a pas de prémisses, l’argu-
aussi. Noter bien qu’on peut avoir un argument valide avec des fausses pré- ment est valide quand la conclusion est une
tautologie.
misses. Si l’argument est valide et ses prémisses sont vraies, l’argument est dit
correct.
Considérons, par exemple, les deux raisonnements suivants 2 . 2. Michael Huth and Mark Ryan. Logic in
Computer Science: Modelling and Reasoning
? «Si le train est délayé, et elle ne trouve pas de taxi libre à la gare, Jeanne about Systems. Cambridge University Press,
arrivera en retard. Jeanne est arrivée à temps. Or le train était délayé. Donc, 2nd edition, 2004
elle a dû trouver un taxi.» TABLE 3.1: Table de vérité pour l’exemple
de Jeanne et Jean, avec les deux rangées où
? «S’il pleut, et Jean ne prend pas son parapluie, il sera trempé. Il est sec. Or deux prémisses, p et ¬r, sont vraies.
il pleut. Donc, il a dû prendre son parapluie.»
Tous les deux raisonnements suivent le même arrangement : on a trois p q r ¬r p ∧ ¬q p ∧ ¬q → r
 ···
prémisses p ∧ ¬q → r , ¬r ), et p d’où on déduit la conclusion q. 1 0 0 1 1 0
On peut afficher la structure de l’argument verticalement avec une ligne 1(p) 1(c) 0 1(p) 0 1(p)
horizontale qui sépare les prémisses de la conclusion : ···
(p)=prémisse, (c)=conclusion
p ∧ ¬q → r p ∧ ¬q → r
¬r ¬r
ou, pour effet dramatique à la fin, (3.1)
p p
q ∴q

On peut vérifier la validité de ces arguments par la table de vérité (Table 3.1).  Le symbole de trois points en triangle
La vérité des trois prémisses entraîne la vérité de la conclusion. Pourtant un ∴ veut dire «par conséquent» (therefore).

argument valide peut toujours être incorrect si les prémisses sont fausses 3 : 3. En fait, on n’a même pas besoin de dé-
Jeanne a peut-être pris sa voiture et peut–être avec Jean même. battre la correction des prémisses (y incluant
l’implication). Le raisonnement suivant est
Les variables propositionnelles dans (3.1) dénotent des propositions diffé- aussi valide, «Si la terre est bleue comme une
rentes, mais du point de vue de validité, les deux arguments suivent la même orange, et les mots ne mentent pas, alors les
guêpes fleurissent vert. Les guêpes ne fleu-
recette. En fait, on peut remplacer les variables par des formules quelconques rissent pas vert. Or la terre est bleue comme
et l’argument reste valide. On peut même conclure que l’équation (3.1) nous une orange. Donc, les mots mentent.»
donne une forme d’argument qu’on peut employer dans tout contexte en rem-
plaçant p, q, r par des formules pertinentes. Par exemple, avec un ensemble
de taxis T, et avec les prédicats «t est à la gare» G (t), «t est libre» L(t), on
peut écrire «il y a un taxi libre à la gare» comme ∃t ∈ T : G (t) ∧ L(t) et
remplacer chaque occurrence de q par cette formule.
24

3.1 Règles d’inférence


Une règle d’inférence 4 est une forme d’argument qu’on utilise pour 4. :règle d’inférence
(fr)

construire une démonstration formelle. On utilise le symbole de taquet


(turnstile en anglais) ` pour dénoter qu’il existe une démonstration formelle
à partir des prémisses (listées à la gauche) jusqu’à la conclusion (à la droite) :
φ
χ
φ, χ, η . . . ` ψ .
 c’est la même chose que
η
prémisses conclusion ..
.
Une telle expression s’appelle un séquent. Par tradition, on utilise les minus- ∴ψ
cules grecques pour formules logiques et les majuscules pour ensembles de
TABLE 3.2: Quelques lettres grècques.
formules : v. Table 3.2 pour rappel. minuscule nom majuscule
Le contexte de la preuve définit le modèle, incluant les règles syntaxiques φ phi Φ
ψ psi Ψ
des formules et des termes du domaine de discours, ainsi que les axiomes χ khi X
qui sont des propositions logiques fondamentales du modèle, et les variables ξ ksi Ξ
éta H
avec leur liaisons. On se sert des axiomes dans les démonstrations, mais on les η
ω oméga Ω
omet 5 dans la notation `. Une conclusion ψ qu’on démontre sans prémisses λ lambda Λ
s’écrit par ` ψ et s’appelle un théorème. (Typiquement, ψ est une implica- ι iota I
e epsilon E
tion de forme p → q, où l’antécédent p encode les conditions sous lesquelles γ gamma Γ
le résultat de la conséquence q est applicable. ) δ delta ∆
béta B
On engendre une conclusion à partir des axiomes et des prémisses à tra- β
α alpha A
vers d’une démonstration formelle en utilisant les règles d’inférence. Une ‘
démonstration Γ ` ψ est valide si et seulement si ψ est vrai toujours quand les 5. Par exemple, dans géométrie euclidienne,
prémisses Γ sont vraies, c’est à dire Γ → ψ est une tautologie. un théorème ne réitère pas les 5 axiomes
fondamentaux d’Euclid. Mais si on est pé-
Il faut bien observer que Γ ` ψ n’est pas la même chose que Γ → ψ : ce dantique, on peut toujours les inclure parmi
dernier est une proposition logique avec une valeur de vraie ou fausse, tandis les antécédents Γ, . . . ` · · ·
que ` dénote la manipulation de symboles selon des règles «mécaniques», sans
égard à la vérité.
Un jeu de règles mal conçu peut mener à des démonstration formelles de
fausses conclusions 6 . D’autre part, il peut aussi arriver qu’on n’a pas assez de 6. Par exemple, si on introduit une règle
règles pour formaliser tout argument : Γ → ψ peut être vrai mais on ne trouve non-valide φ ∨ η, φ ` ¬η, on peut déduire
toute proposition η ≡ q (et sa négation ¬q)
pas de preuve Γ ` ψ. en mettant φ ≡ 2 × 2 = 4 avec la prémisse
On dit qu’un jeu de règles est correct si chaque règle d’inférence est «2 × 2 = 4 ou q» (ou sa négation avec
«2 × 2 = 4 ou ¬q»).
valide, et ainsi toute démonstration formelle est valide aussi (dans d’autres
mots, lorsqu’il y a une preuve Γ ` ψ, Γ → ψ est une tautologie).
25

3.2 Inférence pour calcul des propositions


Table 3.3 montre des règles d’inférence nommées dans calcul des proposi-
tions. Chaque règle est valide parce qu’elle correspond à une tautologie.

TABLE 3.3: Règles d’inférence dans calcul


des propositions
nom prémisses conclusion
modus ponens φ, φ→ψ `ψ
modus tollens ¬ψ, φ→ψ ` ¬φ
addition φ ` φ∨ψ
simplification φ∧ψ `φ
conjonction φ, ψ ` φ∧ψ
syllogisme hypothétique φ → ψ, ψ → η `φ→η
syllogisme disjonctif φ ∨ ψ, ¬φ `ψ
résolution φ ∨ ψ, ¬φ ∨ η ` ψ∨η

La plus importante règle est le modus ponens qui a la forme


φ φ→ψ
(MP)
ψ

correspondant à la tautologie p ∧ ( p → q) → q. Modus ponens, ou la
méthode d’affirmer (poser) l’antécedent, est une forme d’argument classique.
Elle est fondamentale 7 dans le sens que les autres règles correspondent souvent 7. En fait, l’approche classique à l’inférence
à une application de modus ponens, possiblement en combinaison avec une logique, celle de systèmes à la Hilbert, ne
permet que modus ponens dans l’inférence.
tautologie.
Modus tollens, ou la méthode de dénier le conséquent, utilise modus
ponens avec la contraposée : ( p → q) ≡ (¬q → ¬ p)
¬ψ φ→ψ
(MT)
¬φ
Addition, simplification, et conjonction permettent de grouper et
séparer les arguments par cas, ou par preuves imbriquées. Comme les autres
règles, on peut les inférer aussi à partir de modus ponens. Addition ajoute une
formule quelconque à la conséquence par disjonction, et simplification laisse
tomber une partie des prémisses :
φ φ∧ψ
(Addition) (Simplification) (3.2)
φ∨ψ φ
par (MP) avec les implications φ → (φ ∨ ψ) et φ ∧ ψ → φ qui sont des
tautologies 8 . La règle de conjonction définit le rôle de multiples prémisses : il 8. Par exemple,
faut les combiner par conjonction. φ → (φ ∨ ψ) ≡ ¬φ ∨ (φ ∨ ψ) défn. de →
φ ψ ≡ (¬φ ∨ φ) ∨ ψ associativité de ∨
(Conjonction) (3.3) ≡ 1∨ψ négation
φ∧ψ
≡1 domination
Le syllogisme hypothétique est basé sur la tautologie

( p → q) ∧ (q → r ) → ( p → r )
26

énonçant la transitivité du conditionnel :


φ→ψ ψ→η
(SH) (3.4)
φ→η
Le syllogisme disjonctif est modus ponens avec l’implication ¬φ → ψ ≡
φ∨ψ :
φ∨ψ ¬φ
(SD) (3.5)
ψ
Résolution est une règle utilisée souvent dans des logiciels de démonstra-
tion automatique :
φ∨ψ ¬φ ∨ η
(RES) (3.6)
ψ∨η
qui correspond à un syllogisme hypothétique ¬ψ → φ, φ → η ` (¬ψ → η ).

3.3 Déduction naturelle


Disons qu’on a un théorème φ → ψ avec des formules quelconques φ, ψ. Maintenant, si on suppose φ, et accepte
toujours φ → ψ, alors on obtient ψ par modus ponens. Donc
φ→ψ
φ`ψ
est un argument valide, où φ ` ψ dénote la mini-preuve avec sa prémisse supposée φ.
Cette règle nous dit que si une implication est vraie, alors il y a aussi une preuve valide qui infère la conclusion à
partir de la prémisse de l’hypothèse. Cet argument, et plus généralement, modus ponens éliminent l’opérateur →. Si
on veut démontrer des théorèmes, on a besoin de règles pour introduire des → aussi. Considérons par exemple, la règle
de modus tollens qui nous donne le raisonnement valide p → q, ¬q ` ¬ p. Est-ce qu’on peut construire le séquent
( p → q) ` (¬q → ¬ p) ? On procède avec une preuve conditionnelle («mini-preuve») qui commence avec une
supposition parce qu’on suppose ¬q afin d’appliquer les règles formelles :

1 p→q prémisse
2 ¬q supposition
3 ¬p MT, 2, 1  Déduction dans notation Fitch :
? format vertical, énoncés étiquetés ;
4 ¬q → ¬ p → I, 2––3
? indentation dénote preuve conditionnelle, avec
une supposition au début ;
? justification exacte pour chaque ligne (règle
appliquée et référence à ses prémisses).
On a besoin d’une règle dans Ligne 4 qui introduit l’implication à partir de la preuve imbriquée 2––3. C’est la règle → I
du théorème suivant. La preuve exacte du théorème dépend de l’ensemble de règles qu’on adopte.
Théorème 3.1 (Théorème de Déduction). Soit Γ un ensemble (possiblement
vide) de formules (le contexte), et soit φ, ψ deux formules (l’hypothèse et la conclusion).
Alors
Γ, φ ` ψ
( → I)
Γ ` (φ → ψ)
est une forme d’argument valide.
27

TABLE 3.4: Règles de base dans déduction


naturelle.
I : règle d’introduction
Règles d’élimination et d’introduction E : règle d’élimination

En fait, on peut trouver des règles d’élimination et d’introduction systéma-


φ ψ
∧I .
φ∧ψ
tiquement pour tous nos opérateurs, et non pas seulement pour →. Table 3.4
φ∧ψ φ∧ψ
montre la collection complète. ∧E et la forme symétrique .
φ ψ
Les règles d’introduction (∧I) et élimination (∧E) de conjonction cor- φ ψ
∨I et la forme symétrique .
respondent à ce qu’on appelle Conjonction et Simplification dans Éqs. (3.3) φ∨ψ φ∨ψ
et (3.2). La règle d’élimination existe en deux formes (∧E1 et ∧E2 ) selon le φ∨ψ φ`χ ψ`χ
∨E .
côté qu’on garde dans la conclusion. Les propriétés des opérateurs (commuta- χ
φ`ψ
tivité, associativité, distributivité) ne sont pas définies par règles additionnelles, →I .
φ→ψ
parce qu’on peut les inférer par l’interaction des règles d’élimination et d’in-
φ φ→ψ
troduction. Par exemple, le séquent p ∧ q ` q ∧ p est valide : →E .
ψ
¬¬φ
1 p∧q prémisse ¬¬E
φ
2 p ∧E1 , 1 ¬I
φ`0
.
(3.7) ¬φ
3 q ∧E2 , 1 φ ¬φ
¬E ou 0I .
4 q∧p ∧I, 3, 2 0
0
0E .
La règle d’introduction de disjonction est la règle d’Addition de (3.2). φ
TABLE 3.5: Preuve de ¬ p ∨ q ` p → q et
Elle existe en deux formes (∨I1 et ∨I2 ) selon le côté où on copie la prémisse.
de p → q ` ¬ p ∨ q.
L’élimination de disjonction (∨E) nous donne une recette : démonter la
prémisse, donner des preuves cas par cas, et combiner les conclusions à la fin. 1 ¬p ∨ q prémisse
La règle d’élimination d’implication ou «élimination de flèche» (→ E) 2 ¬p supposition
est modus ponens. La règle d’introduction (→ I) correspond au théorème de 3 p supposition
déduction. 4 0 0I, 3, 2
Les règles de double négation (¬¬I et ¬¬E) expriment que φ ≡ ¬¬φ 5 q 0E, 4
(«il n’est pas vrai que φ soit faux»), donc on a le droit de les introduire ou 6 p→q → I, 3––5
enlever librement. La règle d’introduction (¬¬I) est dérivée en combinant ¬E 7 q supposition
et ¬I (v. Table 3.7). 8 p supposition
Les règles de négation considèrent les contradictions. Par la définition 9 q copier, 7
de l’implication, 0 → φ est une tautologie pour toute formule logique φ.
10 p→q → I, 8––9
La règle d’élimination de faux (0E) encode le fait que tout peut être inféré à
11 p→q ∨E, 1, 2––6, 7––9
partir d’une prémisse fausse : 0 ` φ. La règle d’élimination de négation (¬E)
encode le principe de non-contradiction. Elle est aussi la règle d’introduire 1 p→q prémisse
faux (0I). L’introduction de la négation (¬I) nous permet de laisser tomber 2 p ∨ ¬p TXC

une supposition. (Voir aussi réduction à l’absurde). La règle ¬I encode le 3 p supposition


principe du tiers exclu. En particulier, elle nous permet de dériver une règle 4 q → E, 3, 1
qui correspond à la loi directement : ` φ ∨ ¬φ (TXC, voir Table 3.7 plus 5 ¬p ∨ q ∨I2 , 4
tard). 6 ¬p supposition
Table 3.4 contient toutes les règles dont on a besoin. Les propriétés des 7 ¬p ∨ q ∨I1 , 6
opérateurs, et les équivalences sont bel et bien encodées par ce jeu. Eq. (3.7) 8 ¬p ∨ q ∨E, 2, 3––5, 6––7
montre la commutativité de conjonction. Pour un exemple plus compliqué, Théorèmes d’équivalence (par → I) :
` (¬ p ∨ q) → ( p → q)
` ( p → q) → (¬ p ∨ q)
28

l’équivalence ¬ p ∨ q ≡ p → q est impliée : les séquents ¬ p ∨ q ` p → q et


p → q ` ¬ p ∨ q sont tous les deux valides. Table 3.5 montre les preuves.
TABLE 3.6: Règles d’introduction et
d’élimination pour ↔.
Règles dérivées φ→ψ ψ→φ
↔I .
φ↔ψ
Table 3.4 contient assez de règles valides et on peut y ajouter d’autres
φ↔ψ φ↔ψ
règles d’élimination et d’introduction si on a besoin d’opérateurs additionnels ↔E et .
φ→ψ ψ→φ
(v. Table 3.6 pour ↔). En fait, pour toute tautologie φ → ψ de logique pro-
positionnelle (sans quantificateurs), il existe une preuve φ ` ψ par déduction
naturelle : il s’agit d’un jeu de règles complet. Donc on peut dériver tout
argument valide dans logique propositionnelle. Il y a des règles dérivées qu’on
utilise souvent (p.e., ceux dans Table 3.3), voir Table 3.7 pour les plus impor-
tantes dans déduction naturelle. Voir Table 3.10 pour résolution, syllogisme
hypothétique et syllogisme disjonctive. TABLE 3.7: Règles dérivées dans déduction
naturelle.
MT : modus tollens ; RAA : réduction à
Modus tollens. On peut arriver à modus tollens (MT) déjà avec les règles de l’absurde (preuve par contradiction) ; TXC :
base de Table 3.4. tiers exclu.
¬ψ φ→ψ
MT .
¬φ
Preuve par contradiction. Réduction à l’absurde (RAA) est la technique de
1 ¬ψ prémisse
démontrer une formule φ en raisonnant que la supposition de ¬φ aurait des
2 φ→ψ prémisse
ramifications contradictoires. Cette règle nous donne le droit d’inférer φ si on
3 φ
a une preuve conditionnelle ¬φ ` 0.
4 ψ → E, 3, 2
5 0 ¬E, 4, 1
Tiers exclu. Pour toute proposition p, p ∨ ¬ p est une tautologie parce que p 6 ¬φ ¬I, 3––5
est soit vrai soit faux. C’est le principe du tiers exclu. La règle correspon-
dante (TXC) formalise le principe, en posant que le séquent ` φ ∨ ¬φ est ¬¬I
φ
.
valide pour toute formule φ. La règle permet de diviser une preuve en deux ¬¬φ

selon une condition utile φ : afin de démontrer χ, on ajoute la proposition 1 φ prémisse


φ ∨ ¬φ, et on construit deux mini-preuves φ ` χ et ¬φ ` χ ; à la fin 2 ¬φ supposition
on élimine l’atout par la règle ∨E. (Table 3.5 montre un exemple de cette 3 0 ¬E, 1, 2
technique). 4 ¬¬φ ¬I, 2––3

¬φ ` 0
.
3.4 Égalité RAA
φ
1 ¬φ ` 0 prémisse
Les règles pour le calcul des prédicats servent à travailler avec les éléments
2 ¬¬φ ¬I, 1
du domaine. Le domaine est toujours équipé d’un prédicat d’égalité : x = y
3 φ ¬¬E, 2
peut être faux ou vrai quand x, y sont des éléments quelconques du domaine.
Il est important de souligner que cette égalité = est spécifique aux éléments du TXC φ ∨ ¬φ.
domaine. On n’écrit pas φ = ψ entre deux formules logiques (on avait défini
1 ¬(φ ∨ ¬φ) supposition
l’équivalence de propositions ≡ pour cela). La négation d’égalité 6= définit la
2 φ supposition
notion d’éléments distincts, et ainsi on a les conditions d’unicité
3 φ ∨ ¬φ ∨I1 , 2
 4 0 ¬E, 3, 1
∃!xP( x ) ≡ ∃ x ∀y : P( x ) ∧ x 6= y → ¬ P(y)
 5 ¬φ ¬I, 2––4
≡ ∃ x ∀y : P( x ) ∧ P(y) → x = y .
6 φ ∨ ¬φ ∨I2 , 5
7 0 ¬E, 6, 1
8 ¬¬(φ ∨ ¬φ) ¬I, 1––7
9 φ ∨ ¬φ ¬¬E, 8
29

Il y a deux règles sur l’égalité. La règle de réflexivité (= I) introduit l’égalité.


La règle de substitution (= E) l’élimine : si on a deux termes t = u, on a le
droit d’inférer φ(u) à partir de φ(t).

t=u φ(t)
=I =E
t=t φ(u)

La règle de substitution = E est formidable, parce que φ peut être tout


prédicat. En particulier, on obtient symétrie t = u ` u = t immédiatement
avec le prédicat φ( x ) ≡ x = t , et transitivité t = u, u = v ` t = v avec le
prédicat ψ( x ) ≡ t = x :

1 t=u prémisse 1 t=u ≡ ψ(u) prémisse


2 t=t ≡ φ(t) =I 2 u=v prémisse
3 u=t ≡ φ(u) = E, 1, 2 3 t=v ≡ ψ(v) = E, 2, 1

3.5 Règles pour quantificateurs


TABLE 3.8: Règles d’introduction et
Les règles d’élimination d’un quantificateur sont appelées règles d’ins- élimination de quantificateurs. Dans toute
tanciation : à partir de la prémisse ∀ x : φ( x ) ou ∃ x : φ( x ), on infère φ(t), les formules, t est un terme et y est une
nouvelle variable ajoutée à Γ.
avec un terme particulier t. Cet élément particulier et un élément qu’on peut
instanciation universelle
choisir dans le cas de ∀, ou un élément spécifique qui satisfait φ dans le cas
∀ x : φ( x )
de ∃, et on introduit une nouvelle variable pour cela. ∀E
φ(t)
Les règles d’introduction des quantificateurs sont des règles de générali-
généralisation universelle avec nouvelle
sation. Ici, on infère ∃ x : φ( x ) de la prémisse φ(t) qu’on a déduite avec un
variable y par rapport au contexte Γ
terme quelconque t. Ou bien, si on veut ∀ x : φ( x ) (par exemple, «la somme
Γ ` φ(y)
des angles de toute triangle est 180°») on peut juste démontrer φ(y) pour ∀I
Γ ` ∀ x : φ( x )
un élément arbitraire qu’on dénote par une nouvelle variable y («soit y un
instanciation existentielle avec nouvelle
triangle quelconque»). Table 3.8 montre les règles de quantificateurs.
variable y par rapport au contexte Γ
Exemple 3.1. On démontre que le séquent H (s), ∀ x : H ( x ) → M( x ) ` M(s) est
Γ ` ∃ x : φ( x )
valide (modus ponens universel) : ∃E
Γ ` φ(y)
1 H (s) prémisse «Socrates est humain.» ou comme preuve par un exemple (avec
2 ∀ x : H ( x) → M( x) prémisse témoin/vérificateur y) :
«Tous les humains sont mortels.»
3 H (s) → M(s) ∀E, 2 Γ ` ∃ x : φ( x ) φ(y) ` χ
∃E
Γ→χ
4 M(s) → E, 1, 3 ∴ «Socrates est mortel.»
généralisation existentielle avec une
terme t qui spécifie un élément du
domaine
φ(t)
∃I
∃ x : φ( x )
30

Exemple 3.2. On veut démontrer qu’il n’y a pas de plus grand nombre naturel.
L’idée de la preuve est de se servir de la propriété fondamentale des nombres naturels :
avec le successeur de n, dénoté par la fonction s(n) = n + 1, on a toujours n < s(n) :

∀n : n < s(n) ` |¬∃n : ¬∃{z


m : n < m}
| {z }
(n + 1) est plus grand que n il n’y a pas de n t.q. aucune m ne soit plus grand TABLE 3.9: Preuve altérnative pour «il n’y a
pas de plus grand nombre naturel»
est un séquent valide. Par De Morgan, on peut viser également
∀n : n < s(n) ` ∀n∃m : n < m
1 ∀n : n < s(n) axiome
dans une preuve qui est plus courte :
2 ∃n : ¬∃m : n < m supposition
1 ∀n : n < s(n) axiome
3 N ¬∃m : N < m supposition (avec exemple N)
2 N N < s( N ) ∀ E, 1
4 N < s( N ) ∀E, 1
3 ∃m : N < m ∃I, 2
5 ∃m : N < m ∃I, 4 4 ∀n∃m : n < m ∀I, 2––3
6 0 ¬E, 5, 3
Il suffit d’introduire N («un nombre quel-
7 0 ∃E, 2, 3––6 conque») pour instancier dans Ligne 1, et
Lignes 2–3 se généralisent dans Ligne 4.
8 ¬∃n : ¬∃m : n < m ¬I, 2––7
Dans Ligne 2, on suppose qu’en fait il existe un «plus grand nombre». Dans Ligne 3,
on introduit N («le plus grand nombre»). Or, notre axiome instancié dans 4 mène à la
généralisation existentielle dans 5, et c’est une contradiction énoncée dans 6. Table 3.9
montre une preuve altérnative.

3.6 Systèmes d’inférence formelle


Le système d’inférence présenté, appelé déduction naturelle, comprend les
règles fondamentales d’élimination et d’introduction :

∧E ∨E → E 0E ¬E ¬¬E
 règles pour logique des propositions
∧I ∨I → I (¬E) ¬I (¬¬I dérivée)
= E ∀E ∃E
 règles pour logique des prédicats
= I ∀I ∃I

Le système de déduction naturelle est correct, donc tout séquent Γ ` φ


est valide. Mais est-ce que le système est complet : peut-on trouver une dé-
monstration formelle pour toute tautologie Γ → φ ? Notons qu’on considère
ici la sémantique de l’énoncé Γ → φ déterminée par la table de vérité (imagi-
née car trop grande) : lorsque Γ est vrai, φ l’est aussi. Le séquent Γ ` φ, par
contre, dénote une procédure mécanique de substitutions de formules dans les 9. On verra plus tard comment démontrer
qu’il existe des vérités impossibles à
règles (pattern matching). démontrer ! Mais intuitivement, le système
est incomplet parce que les prédicats avec des
(1) Déduction naturelle est complète pour la logique des propositions : on quantificateurs sont beaucoup plus
peut toujours démontrer Γ ` φ si φ est vrai lorsque Γ est vrai. Table 3.10 complexes si le domaine de discours est
montre quelques exemples. infini (p.e., nombres naturels). On ne peut
pas calculer la valeur de vérité d’une formule
(2) Déduction naturelle n’est pas complet pour la logique des prédicats : il y a compliquée avec quantificateurs en
parcourant un domaine infini. Donc on ne
des énoncés vrais Γ → φ sur les nombres entiers qui sont impossibles 9 à sait jamais si on n’a pas encore réussi à
démontrer formellement (ni Γ → ¬φ). démontrer qu’en fait Γ → φ est faux, ou si
on n’a pas encore réussi à trouver une
démonstration formelle Γ ` φ.
31

Il existe d’autres systèmes d’inférence corrects, basé sur d’autres jeux de TABLE 3.10: Régles de proposition logique
dérivées dans déduction naturelle.
règles basiques. L’approche classique est celle des systèmes à la Hilbert : SH syllogisme hypothétique, SD syllogisme
on n’a que modus ponens pour l’inférence. Afin d’introduire des implica- disjonctif, RES résolution.
φ→ψ ψ→η
tions pour modus ponens, on a le droit d’instancier un des axiomes (il y en a SH .
φ→η
7). Les preuves dans un tel système sont plutôt pénibles : voir Exemple 3.3.
Déduction naturelle avec la mécanique des suppositions et démonstrations 1 φ→ψ prémisse

imbriquées, par contre, n’est pas seulement proche au raisonnement mathéma- 2 ψ→η prémisse

tique humaine, mais a des applications importantes en informatique. 3 φ supposition


Exemple 3.3 (Démonstration dans un système à la Hilbert). Considèrons la dé- 4 ψ → E, 3, 1
monstration formelle de ` p → p avec modus ponens, à l’aide de deux axiomes fonda- 5 η → E, 4, 2
mentaux : 6 φ→η → I, 3––5

`φ → (ψ → φ) (K) φ∨ψ ¬φ
  SD .
` φ → (ψ → χ) → (φ → ψ) → (φ → χ) (S) ψ

La technique est d’instancier les axiomes (S) et (K) avec des formules opportunes (p ou 1 φ∨ψ prémisse
p → p ici) : 2 ¬φ prémisse
     3 φ supposition
1 p → ( p → p) → p → p → ( p → p) → ( p → p) (S)
φ ψ χ φ ψ φ χ 4 0 ¬E, 3, 2

2 p → ( p → p) → p (K) 5 ψ 0E, 4
φ ψ φ
6 ψ supposition
3 p → ( p → p) (K)
φ ψ
 φ 7 ψ copier, 6
4 p → ( p → p) → ( p → p) MP, 2, 1 8 ψ ∨E, 1, 3––5, 6––7
5 p→p MP, 3, 4
φ∨ψ ¬φ ∨ η
RES .
ψ∨η
3.7 Sémantique et inférence
1 φ∨ψ prémisse
Les règles de l’inférence logique visent l’inférence de la vérité : 2 ¬φ ∨ η prémisse
3 supposition
φ est vrai φ → ψ est vrai φ est vrai ψ est vrai φ
(→ E) (∧I) 4 ¬¬φ ¬¬I, 3
ψ est vrai φ ∧ ψ est vrai
5 η SD, 4, 2
La sémantique de l’inférence est bien définie par les tables de vérité : on s’in- 6 ψ∨η ∨I2 , 5
téresse à 0 et 1. D’autres systèmes d’inférence accompagnent des sémantiques 7 ψ supposition
différentes. Par exemple, on définit la notion de «formule avec syntaxe cor- 8 ψ∨η ∨I1 , 7
recte» (ou formule bien formée) par des règles d’inférence de syntaxe : 9 ψ∨η ∨E, 1, 3––6, 7––8

φ est une formule ψ est une formule


(∨F)
φ ∨ ψ est une formule

D’autres règles de syntaxe pour la logique des prédicats incluent ∧F, ¬F,
→ F, ∀F, et ∃F, et celle de liaison de variables du domaine. Les «axiomes»
sont les formules atomiques. Les systèmes d’inférence logique et syntaxique
sont des systèmes formels.
32

Définition 3.1. Un système formel comprend


? un langage de formules : phrases écrites en un alphabet fini de symboles ;
? les règles formelles d’inférence ;
? les axiomes de départ ; et
? la sémantique du langage (interprétation des phrases).

(i) Un théorème est une phrase qu’on peut inférer par des règles à partir des
axiomes : ` φ.
(ii) Le système est consistant si on ne peut pas inférer toutes les phrases pos-
sibles.
(iii) Le système est correct si l’inférence est valide selon la sémantique.
La notion d’inférence dans un système formel est au cœur de l’informatique :
voir Table 3.11. Exemple 3.4 montre comment adapter la déduction naturelle
au typage.

démonstration = inférence de vérité TABLE 3.11: Systèmes formels en informa-


tique
compilation = inférence de code exécutable
analyse syntaxique (parsing) = inférence de syntaxe
typage = inférence de type (Exemple 3.4)
évaluation (p.e., calculatrice) = inférence de valeur numérique
...

Exemple 3.4 (Esquis d’un système d’inférence de types). Constantes : 0 dénote erreur ; au lieu de 1, on a des types t.q. int ou
Object. La flèche p → q dénote une fonction qui prend un argument de type p et retourne une valeur de type q.
? élimination de flèche = application d’une fonction
? p ∧ q dénote deux types en même temps (p.e., Object et Triangle) ; avec élimination et introduction
? p ∨ q dénote un de deux types (p.e., union dans C) avec élimination et introduction
? pas de connecteur ↔
? négation ¬ p interpretée comme p → 0 (appeler la fonction avec type p jète une erreur)
? pas de principe du tiers exclu (pas de règle ¬¬E) : ¬¬φ correspond à (φ → 0) → 0, une fonction qui jète une erreur quand on
l’appèle avec une fonction φ → 0
? mais on a l’analogue de non-contradiction ¬E :
φ ¬φ type p avec p → 0 jète erreur
car
0 erreur 0

Exemple : inférer le type de y dans x=2; y=sqrt(x); avec la fonction sqrt de type double → double et conversion automa-
tique int → double.
1 int x=2
2 int → double conversion de types
3 double → double sqrt()

4 double → E, 1, 2
5 double → E, 4, 3
Avec typage strict, par contre, sqrt est de type (double → double) ∧ (int → 0) : inférez la conséquence !
4 Preuves

U N E P R E U V E est l’inférence formelle d’une vérité logique. Entre nous,


les humaines, on communique une preuve en une forme narrative 1 mais 1. On raconte les étapes de l’inférence lo-
précise — sa correction peut être confirmée 2 par n’importe qui dans le même gique, sans la formalité rigide du système
d’inférence formel.
univers. Si on accepte les axiomes du domaine, et on a un système de règles 2. On peut traduire chaque étape de la
valides, la preuve ne laisse aucune doute rationnelle : elle établit la vérité dans preuve en une ou quelques étapes dans
l’inférence logique formelle.
l’univers assumé. Les vérités établies (ou soupçonnées) peuvent être de genres
différentes :
? un théorème : proposition importante, sa vérité est démontrée ;
? un axiome ou postulat : proposition fondamentale, sa vérité en général
est par définition assumée dans l’univers de discussion (mais parfois elle
découle 3 d’autres axiomes) ; 3. Rien ne nous oblige de choisir un en-
semble d’axiomes non-redondants. S’il n’y a
? un lemme : un théorème moins important en soi, mais utile dans la dé- pas de contradiction entre eux, les système
monstration d’autres théorèmes ; reste consistant.

? un corollaire : conséquence d’un théorème ;


TABLE 4.1: Démonstration formelle de
? une conjecture : proposition importante, sa vérité n’est pas démontrée Théorème 4.1.
Le domaine de discours est celui des
(on utilise la conjecture comme une supposition si on veut voir ses consé-
nombres naturels avec les règles standardes
quences). d’arithmétique (multiplication et exponentia-
tion). En particulier : On définit le prédicat
«n est un nombre carré» :
4.1 Preuve directe Q ( n ) ≡ ∃ k : n = k2 .

Dans une preuve directe, on veut démontrer H → C, et on travaille On veut le théorème universel
∀n∀m : Q(n) ∧ Q(m) → Q(nm).
directement : on assume H et infère C, en une séquence de propositions avec On commence avec la démonstration de
justifications. Le théorème suivant est démontré directement. Q(n), Q(m) ` Q(nm) («lemme») :

1 ∃ k : n = k2 prémisse Q(n)
Théorème 4.1. Le produit de deux nombres carrés est un nombre carré.
2 ∃ k : m = k2 prémisse Q(m)
Preuve directe. (1) Supposons que m et n sont des nombres carrés. 3 p n= p2 ∃ E, 1

(2) On peut donc écrire m = p2 et n = q2 avec des nombres naturels p, q ∈ N. 4 q m = q2 ∃ E, 2


5 nm = nm =I
(3) On a alors mn = p2 · q2 = ( pq)2 .
6 nm = p2 m = E, 3, 5
(4) Le nombre naturel pq témoigne que mn est un nombre carré.
7 nm = p2 q2 = E, 4, 6

8 nm = ( pq)2 distributivité, 7
9 ∃k : nm = k2 ∃I, 8
La preuve informelle ci-dessus correspond à une démonstration formelle :
(1) on traduit «nombre carré» en un prédicat Q(n) ≡ ∃k : n = k2 , et (2) on Maintenant, avec ce résultat on a le théo-
rème universel :
commence avec deux instanciations existentielles (∃E ) pour avoir p et q (sans
spécifier directement c’est quoi exactement leur valeur). (3) L’arithmétique de 1 n m Q(n) ∧ Q(m) supposition

mn = p2 q2 correspond à deux applications de la de substitution (= I), (4) et 2 Q(n) ∧ E1 , 1

on finit par généralisation existentielle (∃I) pour inférer Q(nm). Table 4.1 3 Q(m) ∧ E2 , 2

donne les détails. Il n’est pas difficile d’imaginer qu’un ordinateur aurait pu 4 Q(nm) lemme, 2, 3

trouver la déduction à partir de l’énoncé formel du théorème, s’il trouve 5 Q(n) ∧ Q(m) → Q(nm) → I, 1––4
6 ∀m : Q(n) ∧ Q(m) → Q(nm) ∀I, 5
7 ∀n∀m : Q(n) ∧ Q(m) → Q(nm) ∀I, 6
34

l’étape clé d’employer distributivité. Mais pour les lecteurs et lectrices hu-
maines, c’est mieux de condenser la preuve, épargner les détails de mani-
pulations simples, et transcrire les formules logiques en parole. La preuve
informelle est alors une recette de construire la preuve formelle.

Théorème 4.2. Le carré d’un entier impair est impair 4 . 4. On veut ∀n : impair(n) → impair(n2 )
avec le prédicat
Preuve directe. (1) Soit n un nombre impair quelconque.
impair(n) ≡ ∃k : n = 2k + 1.
(2) Il existe alors un nombre entier k tel que n = 2k + 1.
(3) On a donc

n2 = (2k + 1)2 = 4k2 + 4k + 1 = 2(2k2 + 2k) + 1.

(4) Or, (2k2 + 2k) est un nombre entier, donc n2 est impair.


4.2 Preuve indirecte


Parfois il est plus viable de démontrer une proposition p indirectement,
à l’aide d’une autre proposition q dont la preuve implique p. Il y a deux
techniques importantes : une basée sur la contraposée et l’autre basée sur la
réduction à l’absurde. Quand p est un énoncé conditionnel ( H → C ), la
méthode indirecte de la contraposée cherche une démonstration (¬C ` ¬ H ),
tandis qu’une preuve par contradiction cherche plutôt ¬( H → C ) ` 0.

Preuve par contraposition


Dans une preuve par contraposition, on vise un théorème ( H → C ),
mais pour une certaine raison pragmatique 5 on préfère démontrer plutôt 5. Parce que c’est plus facile.
la contaposée (¬C → ¬ H ). Lors d’une telle démonstration, on assume
la négation de la conclusion (¬C), et on montre comment cela entraîne la
négation de l’hypothèse (¬ H ).

Théorème 4.3. Un entier est pair si son carré est pair 6 . 6. On veut ∀n : pair(n2 ) → pair(n) avec le
prédicat
Preuve par contraposition. (1) Supposons que n n’est pas pair,
pair(n) ≡ ∃k : n = 2k.
(2) donc 7 il est impair.
(3) Par Théorème 4.2, n2 est impair, 7. Ici on a besoin d’un lemme : «tout entier n
(4) donc n2 n’est pas pair. est soit pair soit impair» qu’on va démontrer
(5) On vient de démontrer [(1)–(4)] que si n n’est pas pair, alors n2 n’est pas pair non formellement un jour, mais pour le moment
on le prend pour acquis.
plus.
(6) On conclut la contraposée : que si n2 est pair alors n est pair aussi.


Théorème 4.4. Si n = ab, avec des entiers positifs a et b, alors


√ √
a≤ n ou b≤ n. (4.1)

Preuve par contraposition. (1) Supposons 8 que pour deux entiers positifs a, b, n<a 8. En (1)–(4), on fait une preuve

et n < b, ce qui est équivalent à dire que (4.1) n’est pas vrai par la loi de De conditionnelle,
Morgan. ¬C ` ¬ H
et ça donne immédiatement la contraposée
¬C → ¬ H par le théorème de la déduction
en (5).
35

√ √
(2) En multipliant les deux inégalités, ( n) · ( n) < ab,
(3) et donc n < ab
(4) et spécifiquement 9 n 6= ab. 9. Formellement, on doit travailler avec
√ √
(5) Par la contraposée, si n = ab, alors a ≤ n ou b ≤ n, comme affirmé par le l’axiome d’antiréflexivité pour «supérieur» :
théorème. ∀ x ¬( x < x ), d’où (par règle de substitution
après instanciation universelle)
 n = ab → ¬(n < ab) Par la contraposée,
n < ab → n 6= ab.
Preuve par contradiction
Dans une preuve par contradiction (aussi appelée démonstration à l’ab-
surde) on vise à démontrer une proposition p par réduction à l’absurde. On
assume (¬ p), et on infère une contradiction. Souvent, c’est une contradiction
dans la forme φ ∧ ¬φ avec un énoncé quelconque φ.
Noter la différence subtile par rapport à la contraposée quand on veut
démontrer un énoncé conditionnel H → C. La preuve par contraposition
assume la négation de la conclusion (¬C) et arrive à la négation de l’hypo-
thèse (¬ H ). La preuve par contradiction assume l’hypothèse et la négation
de la conclusion (H ∧ ¬C), et arrive à une contradiction qui est typiquement
( H ∧ ¬ H ). Toutes les deux sont des preuves indirectes, et en fait la preuve
par contraposition peut être facilement transformée dans une preuve par
contradiction. Pour cette dernière, on suppose la négation de l’énoncé condi-
tionnel, et on assume H et ¬C. La preuve avec la contraposée nous donne
(¬C ` ¬ H ), et cela mène à la contradiction ( H ∧ ¬ H ). On doit conclure
(réduction à l’absurde) que ¬( H ∧ ¬C ), ou bien ( H → C ). Avec l’exemple
de démontrer Théorème 4.3 par contradiction : «Supposons que n2 est pair
et n n’est pas pair. [. . . ] donc n2 n’est pas pair et c’est une contradiction.»

Théorème 4.5. 2 n’est pas un nombre rationnel.

Preuve par contradiction. Supposons que 2 est un nombre rationnel. Alors
√ p
il existe 10 deux entiers positifs p et q avec 2 = q , et p et q ne sont pas 10. Un nombre rationnel s’écrit comme p/q
p
pairs simultanément. (Car on peut simplifier p/q quand tous les deux sont ou q , avec des entiers p et q > 0. L’égalité
p2 du domaine Q est définie par l’égalité entre
pairs.) En élevant au carré, il s’ensuit que q2
= 2. Ainsi, p2 = 2q2 , et cela entiers (Z) à l’aide de deux axiomes :
signifie que p2 est pair, ce qui implique que p doit être pair (Théorème 4.3). a c
= ≡ ( ad = cb)
Puisqu’on peut écrire p = 2k avec un entier k, on a 4k2 = 2q2 , de sorte b d
que 2k2 = q2 . Cela signifie que q2 est pair, et donc q est également pair ∀p ∈ Z :
p
≡p
1
(Théorème 4.3). Or, c’est une contradiction : selon la supposition originale, p | {z }

ou q doit être impair. On conclut que 2 ne peut pas être rationnel. établit que les entiers sont des rationnels

 Donc 2/3 = 4/6. Parmi tous les


nominateurs et dénominateurs possibles, on
peut simplifier jusqu’à ce que p et q n’ont
pas de diviseurs en commun (à part de 1),
donc au moins un des deux est impair.
36

4.3 Stratégies de démonstration

Si et seulement si
Supposons que A ↔ B est une tautologie, et on veut la démontrer. Il y a
deux démarches basiques :
? démontrer A → B, et sa réciproque B → A ; ou
? démontrer A → B, et son inverse ¬ A → ¬ B.

Théorème 4.6. Un entier est impair si et seulement si son carré est impair.

Démonstration. On veut démontrer que impair(n) ↔ impair(n2 ) pour tout n


entier avec le prédicat impair. Selon Théorème 4.2, si n est impair, alors n2
est impair.
Nous démontrons l’inverse 11 directement : supposons que n n’est pas 11. On peut continuer avec la réciproque
impair. L’entier n est donc nécessairement pair, et on peut écrire n = 2k avec («si n2 est impair alors n est impair»), ou avec
l’inverse («si n est pair, alors n2 est pair»).
un entier k. Ainsi, n2 = (2k)2 = 2(2k2 ), ce qui implique que n2 est pair L’inverse semble plus simple ici.
aussi, et non pas impair. Puisque l’implication et son inverse tiennent, on a
équivalence entre impair(n) et impair(n2 ). 

L’équivalence entre plus que deux propositions est démontrée de façon ef-
ficace comme un cycle d’implications. Par exemple, si on a trois propositions
équivalentes p ≡ q ≡ r (p ≡ q, q ≡ r, r ≡ p), on cherche la démonstration
des théorèmes p → q, q → r et r → p.

Théorème 4.7. Soit n un entier quelconque. Les propositions suivantes sont équiva-
lentes.
? n est pair
? (n + 1) est impair
? n2 est pair

Démonstration. Théorème 4.3 montre pair(n2 ) → pair(n) .

pair(n) → impair(n + 1) Supposons que n est pair. Il existe alors un entier k tel
que n = 2k. On a alors n + 1 = 2k + 1, donc (n + 1) est impair.

impair(n + 1) → pair(n2 ) Supposons que (n + 1) est impair. Il existe alors un


entier k tel que n + 1 = 2k + 1. Donc n = 2k, d’où n2 = (2k)2 = 2(2k2 ) montre
que n2 est pair.
En conclusion, les trois propositions sont équivalentes : pair(n) ≡ impair(n +
1) ≡ pair(n2 ). 

Preuve par cas


Il arrive qu’on doit démontrer un théorème de forme H → C, et l’hypo-
thèse peut être exprimé comme une disjonction H ≡ H1 ∨ H2 . Cela nous
donne l’opportunité de monter deux preuves H1 ` C et H2 ` C, ou autre-
ment dit, donner une preuve par cas 12 . Une telle inférence est valide parce 12. Une preuve par cas correspond à la règle
de l’élimination de disjonction dans dé-
duction naturelle (∨E) qui nous fournit la
preuve ( H1 ∨ H2 ) ` C :
H1 ∨ H2 H1 ` C H2 ` C
C
37

que
( H1 ∨ H2 ) → C ≡ ( H1 → C ) ∧ ( H2 → C ).
Il n’est pas nécessaire que H1 et H2 soient des cas exclusifs, mais en pratique
on travaille souvent avec des cas qui ne se chevauchent pas.
La technique se généralise à une partition dans plus que deux cas : si on
peut écrire H comme une disjonction d’un nombre fini de cas, on peut don-
ner autant de preuves avec la même conclusion et les combiner pour H ` C.

Théorème 4.8. Le carré d’un nombre naturel n est supérieur ou égal à n.

Preuve par cas. (cas 1) D’abord, supposons que n = 0 : on a 0 ≤ 02 . (cas


2) Ensuite, supposons que 1 ≤ n. En multipliant les deux cotés de l’inégalité
par le nombre positif n : on obtient n · 1 ≤ n · n, ou n ≤ n2 . En conclusion,
n ≤ n2 dans tous les cas. 

Preuve exhaustive. Dans la rare situation qu’on a une théorème universelle


dans un domaine assez petit, on peut examiner chaque élément dans la preuve.
Une telle preuve par cas est dite exhaustive. Une preuve exhaustive est pos-
sible dans un domaine fini pour affirmer l’universalité d’un prédicat ∀ x : P( x ),
ou pour dénier l’existence d’un autre ¬∃ x : Q( x ). Ce dernier correspond
à ∀ x : ¬ Q( x ) par de Morgan, donc aussi un énoncé universel qu’on peut
attaquer par exhaustion.

Théorème 4.9. Chaque nom de jour de la semaine contient «di» en français.


Preuve exhaustive. 1. lunDI 2. marDI 3. mercreDI 4. jeuDI 5. vendreDI 6. sameDI
7. DImanche 

Théorème 4.10. 197 est un nombre premier 13 . 13. Un nombre naturel n ∈ N est un nombre
premier ssi il a exactement deux diviseurs
La preuve exploite Théorème 4.4 pour réduire le nombre de cas dans la positifs. Dans d’autres mots, n > 1 et n ne
possède aucun autre diviseur que 1 et n :
recherche de diviseurs.
prime(n)
Preuve par exhaustion. Supposons que 197 n’est pas un nombre premier, et il
≡ (2 ≤ n )
a des diviseurs entre 2 et 196 (inclusivement). Donc il existe deux nombres 
∧ ∀ a∀b : ab = n → ( a = 1 ∨ b = 1)
entiers a, b t.q. 1 < a, b < 197 et ab = 197. Sans perte de généralité 14 ,
√ 14. Ici, on commence une preuve par cas :
supposons que a ≤ b, et donc a ≤ 197 (Théorème 4.4). Or, si a ≤
√ a ≤ b ou b ≤ a. Les deux cas sont sy-
197 < 15 (152 = 225), a doit être une des valeurs 2, 3, 4, 5, 6, 7, 8, 9, 10, métriques. «Sans perte de généralité» veut
11, 12, 13, ou 14. dire qu’on fournit juste une moitié de la
preuve, parce que l’autre cas est démontré
On montre qu’aucun 1 < a < 15 ne divise 197 dans une preuve par ex- identiquement après échange de symboles
haustion. (cas 1) a ne peut pas être pair (2, 4, 6, 8, 10, 12, 14) car 2 ne divise (travail pour le lecteur ou la lectrice).
pas 197. (cas 2) a ne peut pas être 3 ou 9 car 3 ne divise pas 197. (cas 3) Ni 5
ne divise 197 (197 = 5 · 39 + 2), (cas 4) ni 7 ne divise 197 (197 = 7 · 28 + 1),
(cas 5) ni 11 ne divise 197 (197 = 11 · 17 + 10), et (cas 6) ni 13 ne divise 197
(197 = 13 · 15 + 2) sans reste. Il n’y a pas d’autres cas, donc il n’y a au-
cun choix possible pour un diviseur a. Par conséquence, 197 est un nombre
premier. 
38

Preuves d’existence
Un grand nombre de théorèmes en informatique affirment qu’il existe un
objet avec des propriétés particulières (ou qu’il existe un groupe d’objets avec
des relations particulières entre eux). On peut donner une preuve d’existence
directement : il suffit de montrer un élément (ou un group d’éléments) qui est
un témoin de l’existence. Dans le cas spécial où le théorème est

¬∀ x : P( x ) ≡ ∃ x : ¬ P( x ) par De Morgan
pas tout le monde est P il y a non-P

avec un prédicat P, la preuve cherche un contre-exemple (de non-existence),


ou un élément avec ¬ P( x ) qui ne possède pas les propriétés encodées dans P.
Dans une preuve par construction on construit un témoin y avec P(y)
afin de démontrer le théorème ∃ x : P( x ) pour un prédicat P. Sans construire
un témoin d’existence, on peut donner une preuve indirecte, ou une preuve
non-constructive.

Théorème 4.11. Il existe un nombre premier qui est pair.

Preuve par construction. Soit n = 2. Il est pair, et il a deux diviseurs : 1 et 2,


donc il est un nombre premier pair. 

Théorème 4.12. Il existe des nombres irrationnels a, b tel que ab est rationnel.

On construit une preuve par élimination, en utilisant que r = 2 est
irrationnel (r 6∈ Q)
r
(r 2 = 2) ∧ (0 < r ) → r r ∈ Q ∨ r r ∈ Q
| {z } | {z } | {z }
≡H ≡C1 ≡C2

Une preuve par élimination montre ( H ∧ ¬C1 ) → C2 ce qui est équivalent à


H → (C1 ∨ C2 ).

Preuve non-constructive. Soit r = 2 qui est irrationnel (Théorème 4.5).
Si x = rr est irrationnel, y = xr est un example car
 r 2 √ 2 u
y = xr = rr = r (r ) = 2 = 2.  ( at ) = atu


√ √
Preuve constructive. Soit a = 2, et b = log2 9. a = 2 est irrationnel par
Théorème 4.5. On montre que ab est rationnel et que b est irrationnel.
√ log2 9
 1/2 log2 9
ab = 2 = 3| log32
{z }
=2
| {z }

= 2
1
= 3 2 ·log3 2·2·log2 3
1
= 3.  log3 2 =
log2 3
39

Si b est rationnel, alors b = p/q avec des entiers positifs p et q. Par défi-
nition du logarithme 15 , 2 p = 9q , et c’est impossible parce que 2 p est pair 15. En particulier, si b = log2 9 = q , alors
p

quand p > 0 tandis que 9q est impair. En conséquence, b = log2 9 doit être p = q log2 9 et donc
 q
irrationnel.  2 p = 2q log2 9 = 2log2 9 = 9q .

Théorème 4.13. Un nombre de Mersenne 16 est un entier de forme n = 2 p − 1, 16. :nombre de Mersenne
(fr)

où p est un nombre premier. Les nombres de Mersenne ne sont pas tous des nombres
premiers.

Preuve par contre-exemple. On cherche un contre-exemple : 23 − 1 = 7, 25 −


1 = 31, 27 − 1 = 127 sont des nombres premiers. Mais le nombre de
Mersenne 211 − 1 = 2047 = 23 × 89 n’est pas un nombre premier.
Un autre contre-exemple par la preuve fameuse 17 de Frank Nelson 17. :Cole et sa preuve
(fr)

Cole 18 : 18. F. N. Cole. On the factoring of large


numbers. Bulletin of the American Ma-
267 − 1 = 147573952589676412927 thematical Society, 10(3):134–137, 1903.
https://projecteuclid.org/download/pdf_1/
193707721 × 761838257287 = 147573952589676412927 euclid.bams/1183417760

Preuve d’unicité
Supposons qu’on doit démontrer non pas seulement qu’il existe une solu-
tion à un problème ∃ x : P( x ), mais aussi que cette solution est unique. Il faut
complémenter la preuve d’existence d’un x avec une preuve d’unicité : que
tout y est soit x = y soit ¬ P(y). On a les démarches possibles 19 : 19. Rappelons les formules équivalentes pour
l’existence d’un x unique satisfaisant le
(i) démontrer que pour un y quelconque, si y 6= x alors ¬ P(y) ; prédicat P( x ) :

(ii) démontrer que pour un y quelconque, si P(y), alors x = y ; ∃!x : P( x ) ≡ ∃ x : P( x ) ∧ ∀y : y 6= x → ¬ P(y))

(iii) démontrer que P(y) avec y 6= x mène à une contradiction. ≡ ∃ x : P( x ) ∧ ∀y : P(y) → y = x

Notons qu’on peut monter une preuve d’unicité sans ou avec construction ≡ ∃ x : P( x ) ∧ ¬ ∃y : P(y) ∧ y 6= x .

pour existence. Dans la preuve de Théorème 4.14 ci-dessous, existence est


non-constructive.

Théorème 4.14. Il y a une solution unique x à

2− x = x.

Démonstration. Soit f ( x ) = x − 2− x . On a f (0) = −1 et f (1) = 1/2.


Comme f (0) < 0 et f (1) > 0, et f est une fonction continue, par le
théorème de Bolzano 20 , il existe une racine x t.q. 0 < x < 1 et f ( x ) = 0. 20. Théorème de Bolzano : si f est une
Nous démontrons que la solution est unique. Soit x une solution avec fonction continue, alors

x = 2− x , et y 6= x. Il y a deux cas possibles : x < y ou y < x. (cas 1) Si ∀ a ∀ b : ( a < b ) ∧ ( f ( a ) · f ( b ) < 0)

x < y, alors 2−y < 2− x , donc par transitivité (de <), 2−y < y et 0 < f (y). → ∃c : ( a < c) ∧ (c < b) ∧ f (c) = 0
(cas 2) Si y < x, alors 2− x < 2−y , donc par transitivité y < 2−y , et
f (y) < 0. Dans les deux cas, on a f (y) 6= 0. En conséquence, x est une
solution unique. 
40

méthode A ` B théorème assumer A déduire B


directe H→C H C
indirecte (contraposition) H→C ¬C ¬H
par contradiction (1) H→C H ∧ ¬C 0 (faux)
par cas (2) ( H1 ∨ H2 ) → C H1 , H2 C, C
par élimination H → (C1 ∨ C2 ) H ∧ ¬C1 C2

choix (3) («quelconque») H → ∀ x : P( x ) → Q( x ) H ∧ P(y) Q(y)

spécialisation (4) (instanciation) ∀ x : P( x ) → C P(t) C
construction H → ∃ x : P( x ) H c avec P(c)
contre-exemple H → ¬∀ x : P( x ) H c avec ¬ P(c)
unicité (5) H → ∃!x : P( x ) H, P( x ) P(y) → ( x = y)
ou (y 6= x ) → ¬ P(y)
Table après Daniel Solow How to Read and Do Proofs, Wiley, 2014.
(1) Preuve par contradiction est risquée parce qu’on peut arriver à une contradiction par erreur — plus difficile à déboguer
(2) Ou preuve avec plus que deux cas : on arrive à la même conclusion dans tous les cas. Souvent, mais non pas nécessairement, H2 ≡ ¬ H1 .
(3) Afin de démontrer P( x ) → Q( x ) pour tout x, on choisit un élément y (arbitraire) avec P(y), et on déduit Q(y)
(4) On exploite l’énoncé universel en choisissant un élément spécial par l’instanciation avec un terme t opportun
(5) Stratégie pour complémenter une preuve d’existence H → (∃ x : P( x )).
TABLE 4.2: Méthodes de preuve
5 Ensembles
L A T H É O R I E D E S E N S E M B L E S est la fondation des mathématiques. Un
ensemble 1 est une collections d’objets sans ordre particulier. On définit une 1. :ensemble
(fr)

telle collection non-ordonnée par la relation d’appartenance ∈. Si l’objet x


est un membre de l’ensemble S, on écrit 2 x ∈ S. L’addition de ∈ à la 2. Les ensembles sont habituellement dénotés
par des majuscules latines A, B, C, . . . ,
loqique des prédicats nous permet de définir la structure pour des opérations
ou par des majuscules calligraphiques
ensemblistes telle que l’union de deux ensembles A ∪ B par opérations A, B, C, . . . .

logiques ∀ x : x ∈ ( A ∪ B) ↔ ( x ∈ A) ∨ ( x ∈ B) .
En principe, on peut définir tous les objets mathématiques intéressants,
incluant les nombres, les fonctions et d’autres fondements communs, ainsi
que les structures étudiées, avec une maline 3 représentation ensembliste. En 3. L’astuce est d’exploiter le fait que le
informatique, on construit les structures discrètes fondamentales (p.e., graphes, membre d’un ensemble peut être un autre
ensemble. On verra des exemples.
arbres, relations, fonctions) par des ensembles 4 . 4. Mais il est également possible de débuter
avec relations ou avec fonctions, et ainsi arri-
ver à la représentation des ensembles. Nous
5.1 Appartenance et égalité suivons ici la voie canonique qui commence
par la théorie axiomatique des ensembles.
Définition 5.1 (Relation d’appartenance). Un ensemble est une collection
non-ordonnée d’objets, appelés les éléments ou les membres de l’ensemble.
Le symbole ∈ («est membre de» ou «est un élément de») dénote la relation
d’appartenance 5 : 5. :appartenance
(fr)


 a ∈ A si a est membre de l’ensemble A ;
On écrit
 a 6∈ A si ¬( a ∈ A)

Définition 5.2 (Axiome de l’ensemble vide). Il existe un ensemble vide :

∃S : ∀ x : x 6∈ S (5.1)
aucun x n’est membre de S

qui est est dénoté par ∅ : ∀ x : x 6∈ ∅ .

Définition 5.3 (Axiome d’extension). Deux ensembles A, B sont égaux s’ils


ont les mêmes éléments :  L’implication réciproque de (5.2)

( A = B) → ∀ x : ( x ∈ A) ↔ ( x ∈ B)
∀ A ∀ B : (∀ x : x ∈ A ↔ x ∈ B) → A = B. (5.2)
x est dans A ssi il est dans B découle de la règle de substitution (= E)
A = B, x ∈ A ` x ∈ B, et généralisation
On peut définir un ensemble fini en extension («les éléments de l’en- universelle.
semble sont les suivants :. . . ») par une liste. À la lumière de l’axiome d’exten-
sion, l’ordre des éléments n’est pas important, ni les éléments dupliqués :

A = { a}  un singleton
S = {1, 2, 3, 4, 5, 6}  éléments séparés par virgules, entre accolades
= {6, 5, 4, 3, 2, 1}  l’ordre des éléments est sans importance
= {2, 1, 2, 3, 4, 5, 6}  répétition est sans importance
42

Si la continuation de la liste est évidente, on se sert des points de suspension


pour économiser : S = {1, 2, . . . , 6}. Et cela permet de dénoter informelle-
ment 6 même des ensembles infinis : {2, 4, 6, . . . } dénote les entiers positifs 6. Cependant, les points de suspension ne
pairs, et {0, ±2, ±4, . . . } ou {. . . , −4, −2, 0, 2, 4, . . . } signifie l’ensemble de servent pas dans des preuves formelles car il y
a toujours plus qu’une continuation possible.
tous les entiers pairs. {3, 5, 7, . . .} peut dénoter les entiers impairs
ou les nombres premiers plus grands que 2.

Notation par compréhension


Un ensemble particulier, même infini, peut être défini en compré-

hension, par le prédicat qui exprime cette particularité : x P( x ) est
l’ensemble des objets pour lesquels le prédicat P( x ) est vrai, ou simplement
«les Ps». L’ensemble des êtres humains est défini comme H = { x | H ( x )} par
le prédicat H ( x ) ≡ «x est humain.e».

Définition 5.4 (Axiomes de compréhension). Soit P un prédicat avec do-


maine U. L’ensemble caractéristique de P est l’ensemble C défini par l’axiome 7 7. Définition 5.4 est un schéma d’axiomes,
parce que l’Équation (5.3) nous donne un
axiome différent pour tout prédicat. Le
∃ C : ∀ x ∈ U : x ∈ C ↔ P ( x ). (5.3) prédicat du schéma peut être toute
x est membre ssi P( x ) est vrai formule P( x ) ≡ φ avec syntaxe correcte et
variable libre x.
On écrit alors, en compréhension 8 : 8. Notation de «constructeur d’ensemble»
 (set builder) en anglais.
C = x ∈ U P( x ) .

On remarque que ∃ x : P( x ) est vrai si et seulement si l’ensemble caracté- TABLE 5.1: Ensembles importants
ristique de P n’est pas vide, et ∀ x : P( x ) ssi son ensemble caractéristique est le
∅ = {} ensemble vide
domaine entier :
N = {0, 1, 2, 3, . . . } nombres naturels
N+ = {1, 2, 3, . . . } entiers positifs
∃ x : P( x ) ≡ { x | P( x )} 6= ∅ ∀ x ∈ U : P( x ) ≡ { x | P( x )} = U.
Z = {0, ±1, ±2, . . . } nombres entiers

Q = p/q| p ∈ Z, q ∈ N+ nombres rationnels
R nombres réels
Schéma non-restreint. Dans nos discussions on omet souvent le domaine à la 
C = p + q · i p, q ∈ R nombres complexes*
gauche de la barre, suivant un schéma non-restreint : on écrit { x | φ} où φ
est une formule logique quelconque avec variable libre x. Ainsi, √
∗ i= −1

R = x ∈ Z pair( x ) = { x |pair( x )} ∀ x : x ∈ R ↔ pair( x ),
les nombres pairs non-restreint x est membre ssi il est pair

et R = {0, ±2, ±4, . . . } est l’ensemble caractéristique de pair.

Notation en image
Supposons qu’on s’intéresse aux valeurs possibles d’une fonction f ( x )
quand x prend valeurs dans un ensemble A. L’appartenance d’une valeur y à
cet ensemble dépend de l’existence d’un x avec f ( x ) = y, donc on définit en
compréhension : F = {y|∃ x : f ( x ) = y}. Il arrange alors mieux d’employer

la notation en image : f ( x ) x ∈ A .
43

Définition 5.5 (Axiomes de remplacement). Soit f une fonction avec do-


maine A. Alors l’ensemble de ses valeurs est défini par l’axiome 9 9. Définition 5.5 est un schéma : Éq. (5.4)
donne un axiome pour toute fonction f .
∃S : ∀y : (y ∈ S) ↔ (∃ x : x ∈ A ∧ f ( x ) = y). (5.4)
y est dans S s’il y a f ( x ) = y dans A

On écrit alors S = { f ( x )| x ∈ A}.

On peut écrire les nombres pairs en image : R = {2x | x ∈ Z}. Les nombres
quadratiques :
 
x2 x ∈ Z = y ∈ Z Q(y) avec Q(y) = ∃ x ∈ Z : x2 = y.

Notons que la même valeur y = f ( x ) peut être atteinte avec des arguments x
différents, mais la répétition ne cause pas de problème à cause de l’axiome
d’extension. Ici, x2 = (− x )2 , donc on énumère tout deux fois (sauf 0).
En parcourant les entiers signés avec x = 0, −1, 1, −2, 2, −3, 3, ..., on a
{ x2 } = {0, 1, 1, 4, 4, 9, 9, 16, 16, . . . }.

Cardinalité d’un ensemble


La cardinalité d’un ensemble est le nombre de ses éléments distincts.

Définition 5.6. Soit S un ensemble. Si le nombre des éléments distincts 10 est un 10. L’ensemble vide contient n = 0 éléments
nombre naturel n, on dit que S est un ensemble fini, et sa cardinalité est |S| = n . distincts. Il y a n ∈ N+ éléments distincts,
s’il existe une fonction f qui énumère les
(|∅| = 0.) Autrement, S est un ensemble infini avec cardinalité infinie 11 : éléments de S avec domaine
|S| = ∞ . [n] = {1, 2, . . . , n} :
∀i ∈ [ n ] : f (i ) ∈ S
∀ s ∈ S : ∃i ∈ [ n ] : f (i ) = s
∀i ∈ [n] : ∀ j ∈ [n] : ( f (i ) = f ( j)) → (i = j)
Les conditions assurent qu’on compte
proprement :
(i) f (i ) est le i-ème élément ;
(ii) chaque élément est compté une fois ; et
(iii) on compte les éléments distincts une fois
(condition d’unicité).
11. On examinera les cardinalités infinies plus
attentivement.
44

5.2 Opérations ensemblistes


Les axiomes de compréhension et d’extension établissent les relations
fondamentales ∈ et =. Ils servent 12 à définir la structure par le formalisme 12. Par exemple, déjà l’Axiome de l’ensemble
de la logique des prédicats. Cette sémantique nous permet de fournir les vide (Définition 5.2) découle de Défini-
tion 5.4. Avec une contradiction dans la
définitions des opérations ensemblistes avec connecteurs logiques et prédicats formule φ (p.e. x 6= x),
sur l’appartenance 13 . Une table d’appartenance expose la sémantique d’une ∅ = { x ∈ U | 0}
formule ensembliste de même façon que la table de vérité l’expose pour la
est bien défini par compréhension.
formule logique correspondante : voir Tables 5.2 et 5.3. (En particulier, on 13. En particulier, tout ensemble A est
utilise une variable propositionnelle pour chaque relation d’appartenance aux l’ensemble caractéristique du prédicat
A( x ) ≡ x ∈ A.
ensembles dans l’expression.)
TABLE 5.2: Table d’appartenance pour
union et intersection et les opérations
Union. L’union de deux ensembles A, B, dénotée par A ∪ B , contient les
logiques correspondantes.
objets qui sont dans A ou dans B :
 x∈A x∈B x ∈ A∪B x ∈ A∩B
A∪B = x x ∈ A∨x ∈ B
 a b a∨b a∧b
∀ x : x ∈ A ∪ B ↔ ( x ∈ A) ∨ ( x ∈ B) 0 0 0 0
0 1 1 0
1 0 1 0
1 1 1 1
Intersection. L’intersection de deux ensembles A, B, dénotée par A ∩ B ,
contient les objets qui sont dans A et dans B :

A∪B = x x ∈ A∧x ∈ B

∀ x : x ∈ A ∪ B ↔ ( x ∈ A) ∧ ( x ∈ B) A∪B A∩B

Deux ensembles A, B sont disjoints si A ∩ B = ∅.

Différence. La différence de deux ensembles A, B, dénotée 14 par B − A , 14. Ou, dans quelques ouvrages, avec le sym-
contient les objets qui sont dans B mais non pas dans A : bole spécifique à la différence d’ensembles :
B \ A.

B − A = x x ∈ B ∧ ( x 6∈ A)

∀ x : x ∈ B − A ↔ ( x ∈ B) ∧ ¬( x ∈ A)

On note que différence n’est pas commutative : A − B 6= B − A en général. TABLE 5.3: Table d’appartenance pour
La différence symétrique de deux ensembles A, B, dénotée par A4 B est différences d’ensembles.
l’ensemble des éléments qui sont exclusivement soit dans A soit dans B :
x∈A x∈B x ∈ B−A x ∈ A4 B
A4 B = ( A − B) ∪ ( B − A) a b b ∧ ¬a a⊕b
 0 0 0 0
∀ x : x ∈ A 4 B ↔ ( x ∈ A ) ⊕ ( x ∈ B ). 0 1 1 1
1 0 0 1
1 1 0 0
Complément. Le complément d’un ensemble A, dénoté par A est l’en-
semble des éléments qui ne sont pas dans A,

A = x x 6∈ A ∀ x : x ∈ A ↔ x 6∈ A. (5.5)
B−A A4 B
La notion du complément est par rapport à l’univers U :

A = U − A = x ∈ U ¬( x ∈ A) .
45

Théorie des opérations


On définit la structure des ensembles par la traduction des opérations en
formules logiques avec prédicats. Cette structure satisfait la théorie des opéra-
tions ensemblistes, qui comprend les égalités remarquables sur leurs proprié-
tés : voir Table 5.4. Il n’est pas difficile de les vérifier car chacune correspond
à une équivalence de logique propositionnelle (Table 1.6) avec sa table de vé-
rité pour une tautologie. Par exemple, une loi de De Morgan dans la théorie
des ensembles affirme que le complément de l’union est égal à l’intersection
des compléments. On a les lois correspondantes pour propositions et quantifi-
cateurs :

A∪B = A∩B  De Morgan pour ensembles


¬( p ∨ q) ≡ (¬ p) ∧ (¬q)  De Morgan pour propositions
¬(∃ x : P( x )) ≡ ∀ x : ¬ P( x )  De Morgan pour quantificateurs

TABLE 5.4: Égalités de la théorie des


opérations ensemblistes
A∩U = A
(identité)
A∪∅ = A

A∩∅ = ∅
(domination)
A∪U = U

A∩A = A
(idempotence)
A∪A = A

A∩A = ∅
(complément)
A∪A = U

A=A (double complément)

A∩B = B∩A
(commutativité)
A∪B = B∪A

A ∩ ( B ∩ C ) = ( A ∩ B) ∩ C
(associativité)
A ∪ ( B ∪ C ) = ( A ∪ B) ∪ C

A ∩ ( B ∪ C ) = ( A ∩ B) ∪ ( A ∩ C )
(distributivité)
A ∪ ( B ∩ C ) = ( A ∪ B) ∩ ( A ∪ C )

A ∪ ( A ∩ B) = A
(absorption)
A ∩ ( A ∪ B) = A

A∩B = A∪B
(De Morgan)
A∪B = A∩B
46

5.3 Sous-ensembles
On ajoute la relation d’inclusion au domaine 15 . On dit que A est le sous- 15. :inclusion
(fr)

ensemble de B, dénoté par A ⊆ B («B inclut A»), si tout élément de A est


aussi un élément de B :

A⊆B ≡ A = A∩B .
relation entre A, B prédicat avec A, B

(Et A ⊆ B ≡ A ∪ B = B.) Selon la logique d’appartenance, inclusion


correspond à une implication

A ⊆ B ≡ (∀ x : x ∈ A → x ∈ B). (5.6)

On note que l’ensemble vide est toujours 16 un sous-ensemble : ∅ ⊆ A pour 16. ∀ A : ∅ ⊆ A parce que ∀ x ∈ D : x ∈ A
tout ensemble A. quand D = ∅. Avec l’implication matérielle
sur appartenance : x ∈ ∅ ≡ 0 donc
(∅ ⊆ A) ≡ (0 → ( x ∈ A)).
Super-ensemble. Le symbole miroir dénote la relation de sur-ensemble
(super-ensemble) :

B ⊇ A ≡ A ⊆ B.  B inclut A

Sous-ensemble au sense strict. Un ensemble est le sous-ensemble de soi-même,


mais on définit une version stricte ⊂ , ainsi que le miroir ⊃ pour sous- et
sur-ensembles propres :

A ⊂ B ≡ ( A ⊆ B) ∧ ( A 6= B) et B ⊃ B ≡ ( B ⊇ A) ∧ ( B 6= A)

En conséquence, ∅ ⊂ A pour tout ensemble A 6= ∅, mais ∅ 6⊂ ∅. Inclusion parmi les ensembles de Table 5.1 :
∅ ⊂ N+ ⊂ N ⊂ Z ⊂ Q ⊂ R ⊂ C
Propriétés de la relation d’inclusion
Théorème 5.1. Soit A, B et C des ensembles. Alors

A⊆A  ⊆ est réflexive (5.7a)


( A ⊆ B) ∧ ( B ⊆ A) → ( A = B)  ⊆ est anti-symétrique (5.7b)
( A ⊆ B ) ∧ ( B ⊆ C ) → ( A ⊆ C ).  ⊆ est transitive (5.7c)

Démonstration. Par la définition de ⊆ dans Eq. (5.6), on a


A ⊆ A ≡ ∀x : x ∈ A → x ∈ A ∴ (5.7a),

et c’est vrai 17 pour tout A (une tautologie). Par (5.6), pour tout A, B, on a 17. La démonstration formelle du séquent
  ` ∀ x : x ∈ A → x ∈ A est simple :
( A ⊆ B) ∧ ( B ⊆ A) ≡ ∀ x : x ∈ A → x ∈ B ∧ ∀ x : x ∈ B → x ∈ A
A⊆ B B⊆ A 1 x nouvelle variable
 2 x∈A supposition
≡ ∀ x : ( x ∈ A → x ∈ B) ∧ ( x ∈ B → x ∈ A)
≡ ∀x : x ∈ A ↔ x ∈ B 3 x∈A copier, 2
4 x∈A→x∈A → I, 2––3
≡A=B ∴ (5.7b)
5 ∀x : x ∈ A → x ∈ A ∀I, 1––4
 La démonstration de la transitivité est un exercice. 
47

Techniques de preuve avec ensembles


Inclusion est souvent exploitée dans les démonstrations sur des ensembles :
? pour démontrer A ⊆ B, on montre que si x ∈ A pour x quelconque, alors x ∈ B ;
? pour démontrer A 6⊆ B, il suffit de trouver un contre-exemple x ∈ A ∧ x 6∈ B ;
? pour démontrer A = B, on montre A ⊆ B et B ⊆ A ;
? pour démontrer A 6= B, on montre A 6⊆ B ou B 6⊆ A (par contre-exemple, p.e.)
Les opérations ensemblistes correspondent à des opérations logiques sur l’ap-
partenance. L’union, en particulier, s’évalue à un OU logique, donc on peut
considérer une preuve par cas. La démonstration du Théorème 5.2 (comment
scinder un ensemble en deux) montre l’usage de ces techniques.

Théorème 5.2. Soit A, B deux ensembles. Alors

( A ∩ B) ∪ ( A − B) = A et (5.8a)
( A ∩ B) ∩ ( A − B) = ∅. (5.8b)

Preuve ensembliste. Soit V = ( A ∩ B) ∪ ( A − B) dans Éq. (5.8a). On démontre que


A ⊆ V et que V ⊆ A.
(A ⊆ V) Supposons que x ∈ A. (cas 1) Si x ∈ B, alors x ∈ A ∩ B par la définition
de ∩, et donc x ∈ V. (cas 2) Si x 6∈ B, alors x ∈ A − B par la définition de diffé-
rence, et donc x ∈ V. Donc x ∈ V lorsque x ∈ A.
(V ⊆ A) Supposons que x ∈ V. (cas 1) Si x ∈ A ∩ B, alors x ∈ A (et x ∈ B) par la
définition de ∩. (cas 2) Si x ∈ A − B, alors x ∈ A (et x 6∈ B) par la définition de la
différence. Donc, x ∈ A lorsque x ∈ V.
Soit W = ( A ∩ B) ∩ ( A − B) dans Éq. (5.8b), et supposons que x ∈ W. Par la défi-
nition de ∩, x ∈ A ∩ B et x ∈ A − B. Donc x ∈ A et x ∈ B, ainsi que x ∈ A et
x 6∈ B. Clairement, x ∈ B et x 6∈ B est une contradiction, donc ¬∃ x : x ∈ W. En
conclusion W = ∅. 

5.4 Collections d’ensembles


Rien n’empêche de construire une collection (ou famille) d’ensembles :
un ensemble dont tous les membres sont des ensembles. Par exemple, la
collection

X = ∅, {10}, {10, 65}
est un ensemble de trois ensembles. On note que l’appartenance ∈ ne consi-
dère pas les éléments des éléments :

∅∈X {10} ∈ X et {10, 65} ∈ X, mais 10 6∈ X et 65 6∈ X.

Union de multiples ensembles. L’union se généralise à plus que deux ensembles.


À cause d’associativité, on peut omettre les parenthèses dans une union finie :
 
A ∪ B ∪ C = ( A ∪ B) ∪ C = A ∪ ( B ∪ C ) .

On a le droit de définir l’union des ensembles dans une collection, même si


cette dernière est infinie.
48

Définition 5.7 (Axiome de la réunion). Soit F un ensemble d’ensembles.


L’union des membres de F est l’ensemble S défini par

∃S : ∀ x : (∃ A : x ∈ A ∧ A ∈ F ) ↔ ( x ∈ S ). (5.9)
x est un élément d’un membre de F

On écrit alors
[
S = ∪F ou S= A.
A ∈F

Intersection de multiples ensembles. De même, on peut omettre les parèntheses


 
dans une intersection finie A ∩ B ∩ C = ( A ∩ B) ∩ C = A ∩ ( B ∩ C ) ,
et on définit 18 la notation pour l’intersection de multiples ensembles : 18. On n’a pas besoin d’un axiome particulier
pour l’intersection parce qu’on la définit
\  en compréhension restreinte par rapport à
∩F = A = x ∈ ∪F ∀ A ∈ F : x ∈ A
l’union (Éq. (5.3) avec U = ∪F), qui existe
A ∈F chaque A contient x
selon l’Axiome de la réunion.

Ensemble puissance
Une famille naturelle qu’on considère est la collection des sous-ensembles
d’un ensemble.

Définition 5.8 (Axiome de l’ensemble des parties). Soit A un ensemble.


L’ensemble des parties de A (aussi appelé l’ensemble puissance), est la
famille de tous les sous-ensembles de A :

∀ A ∃B : ∀C : C ∈ B ↔ C ⊆ A. (5.10)

On écrit alors B = P( A) ou B = 2 A :

P( A ) = 2 A = S S ⊆ A .

En particulier,

2∅ = { ∅ }  un ensemble singleton
2∅
2 = {{∅}, ∅}  2 éléments
{ a,b}

2 = {}, { a}, {b}, { a, b} .  4 éléments

Théorème 5.3. Un ensemble fini S de cardinalité |S| = n a 2n sous-ensembles


distincts :
2S = 2| S | .
 La preuve viendra plus tard.
49

5.5 Paradoxe du barbier qui rase ceux qui ne se rasent pas


Dans la théorie naïve, toute collection d’objets peut être un ensemble avec
des membres quelconques. En particulier, un membre peut être (i) un autre
ensemble, ou (ii) n’importe quel objet sans membres qu’on peut nommer (un
ur-élément). La manque de restriction sur la définition par compréhension
mène à des contradictions. Une telle contradiction est illustrée dans une fa-
meuse métaphore du barbier par Bertrand Russell (en 1903) :
Le barbier est celui qui rase tout ceux et seulement ceux qui ne se rasent pas
eux-mêmes. Est-ce que le barbier se rase-t-il ou non ?
La question nous donne le paradoxe du barbier : (cas 1) S’il se rase alors il
ne peut pas être barbier. (cas 2) S’il ne se rase pas alors le barbier doit le raser,
donc il se rase. En arrivant à l’impossibilité de répondre à cette question, on
doit conclure que la supposition initiale était fausse : le barbier n’existe pas.
On arrive au même paradoxe dans la théorie naïve des ensembles : c’est le
paradoxe de Russell.

Théorème 5.4 (Paradoxe de Russell). On définit l’ensemble («le barbier») F IGURE 5.1: Bertrand R USSELL (1872–
1970), mathématicien, philosophe, moraliste
 et activiste pacifiste, à l’age de 21 ans
B = x x 6∈ x , (5.11) (collation de grades à Trinity College).

en compréhension. L’ensemble B n’existe pas.

Démonstration. L’ensemble B contient exactement les ensembles qui ne sont pas


membres d’eux-mêmes :
∀ x : x ∈ B ↔ x 6∈ x. (5.12)
Maintenant, par instanciation avec x = B :

B ∈ B ↔ B 6∈ B. (*)

En supposant ( B ∈ B) ∨ ( B 6∈ B) par le principe du tiers exclu, les deux cas donnent


B ∈ B et B 6∈ B par l’équivalence de (*), une contradiction. Comme ni B ∈ B ni B 6∈
B n’est possible, on conclut que B n’existe pas dans l’univers. 

La contradiction de Théorème 5.4 montre que la théorie naïve n’est pas


consistante : { x | x 6∈ x } est un ensemble qui est supposé d’exister car il est
bien défini par compréhension non-restreinte. Par contre, avec compré-
hension restreinte selon l’Axiome de compréhension, la non-existence dans
Théorème 5.4 est l’assertion que l’univers n’existe pas — en tant qu’un en-
semble qui contient tout :

B= x ∈U x ∈U−x (5.13)

ne peut pas être B ∈ U. Donc U n’est pas un ensemble !


6 Relations et fonctions

L E S F O N C T I O N S (y = x2 ) et les relations («x est l’enfant de y») sont


des structures construites à l’aide du produit cartésien 1 . Notamment, on 1. :produit cartésien
(fr)

introduit la notion d’un couple qui est une paire de valeurs ordonnées ( x, y).
Le produit cartésien X × Y construit l’ensemble de couples quand x ∈ X
et y ∈ Y. Maintenant, une fonction ou une relation est définie comme un
sous-ensemble de X × Y qu’on obtient par compréhension restreinte :

f = ( x, y) ∈ R × R y = x2  la fonction de carré est un ensemble

A = ( x, y) ∈ H × H x est l’enfant/e de y  la relation d’enfant-parent est un ensemble

6.1 Produit cartésien


Définition 6.1 (Notation de couples). Un couple 2 (ou une paire ordonnée) 2. :couple
(fr)

formé par les membres a, b est dénoté par ( a, b) .

Définition 6.2. Le produit cartésien de deux ensembles A, B, noté A × B ,


est l’ensemble de tous les couples formés par un élément de A et un élément de B :

A × B = ( a, b) ( a ∈ A) ∧ (b ∈ B) .

Les membres de A × B sont des paires ordonnées : si C = A × B, l’égalité entre F IGURE 6.1: Portrait de René D ESCARTES
couples est définie par (1596–1650), nommé Cartesius en Latin, par
Frans Hals [Louvre]. Descartes a inventé le
  produit qui porte son nom pour définir R2
∀( a, b) ∈ C : ∀(c, d) ∈ C : ( a, b) = (c, d) → ( a = c) ∧ (b = d) .
et R3 en géométrie 2D et 3D.

Quand A = B, on écrit
A2 = A × A.
Exemple 6.1 (Jeu de cartes). Le produit cartésien entre les quatre enseignes S =
{♠, ♥, ♦, ♣} et les treize valeurs V = {As, 2, 3, 4, 5, 6, 7, 8, 9, 10, Valet, Dame, Roi}
donne le jeu de 52 cartes :

S × V = (♠, As), (♠, 2), . . . , (♣, Roi) .
| {z }
cardinalité 4 · 13 = 52

Théorème 6.1. Si A et B sont des ensembles finis, alors la cardinalité de leur


produit est le produit 3 de leurs cardinalités : 3. La preuve viendra plus tard.

A × B = | A| · | B|

Définition de couples
L’importance théorique du produit cartésien est qu’il permet de construire
de nouveaux domaines : si on a R avec la fonction de carré f ( x ) = x2 ,
52

TABLE 6.1: Produit cartésien : quelques


exemples simples
∅×∅ = ∅ aucun couple par ∅
∅ × {1} = ∅ aucun couple par ∅
{1, 2, 3} × ∅ = ∅ aucun couple par ∅

{ g} × {d} = ( g, d) 1 couple
 
{d} × { g} = (d, g) 6= ( g, d)

{1, 2} × { a, b} = (1, a), (1, b),
(2, a), (2, b)

alors on peut avoir la fonction g( x, y) = ( x2 + y2 ) dans le domaine des


couples ( x, y) ∈ R2 . Mais d’où viennent les couples ? Dans la théorie axio-
matique des ensembles, on considère les couples et le produit cartésien comme
une théorie qu’on doit modéliser par une structure. Ainsi, il faut définir un en-
codage par un ensemble qui assure l’ordre des éléments. Il y a beaucoup de
possibilités avec un ensemble de 1 ou 2 éléments : l’astuce est d’exploiter TABLE 6.2: Définitions de couple. En
général, c’est la définition de Kuratowski
l’imbrication des ensembles : qu’on travaille dans la théorie. Dans la
 définition de Haussdorff, 0 et 1 sont des
( x, y) = { x }, { x, y} (Kuratowski). (6.1) constantes spéciales qui sont différentes de
tout autre élément dans l’univers.
Table 6.2 donne deux autres possibliités.

( x, y) = { x }, { x, y} (Kuratowski)
Théorème 6.2 (Axiome d’égalité entre couples). Si ( a, b) = (c, d) alors 4 n  o
( x, y) = { x }, ∅ , { y } (Wiener)
a = c et b = d

( x, y) = { 0 , x }, { 1 , y}
∀ a∀b∀c∀d : ( a, b) = (c, d) → ( a = c) ∧ (b = d) (6.2) (Haussdorff)
4. La réciproque découle de la règle de
On peut prouver le théorème dans les trois structures de Table 6.2 en substitution : si a = c et b = d, alors on a
analysant les égalités entre les ensembles correspondants. Avec (6.1), par ( a, b) = (c, d) par 2 substitutions dans
l’axiome ( a, b) = ( a, b).
exemple, on procède avec une preuve par cas selon a = b (quand l’en-
codage {{ a}, { a, b}} est en fait un singleton), ou a 6= b, et on conclut à
travers de contradictions découlant de transitivité que a = b = c = d ou
( a = c) ∧ (b = d) dans les deux cas. Nous considérons l’égalité de (6.2)
comme un axiome qui ne nécessite pas de preuve (Définition 6.2), sans assu-
mer une représentation particulière.
53

6.2 Relations binaires


La relation R : «x est en relation avec y par R» est en fait un prédicat avec
2 variables libres (x et y), ce qui est équivalent à un prédicat avec une seule
variable libre, la paire ( x, y).

Définition 6.3 (Relation binaire). Une relation binaire R d’un ensemble X


vers un ensemble Y est un sous-ensemble du produit cartésien X × Y. Si X = Y alors
nous dirons que R ⊆ X 2 est une relation binaire dans X.

Si ( x, y) ∈ R, alors on écrit

xRy  notation infixée pour relation binaire R

Souvent, on introduit un symbole spécial pour les relations intéressants dans


un domaine infini : p.e., f ∼ g ou A ⊆ B.

Inverse et complément
Définition 6.4. À partir d’une relation R ⊆ X × Y, on construit

(1) la relation inverse (réciproque) de Y à X : R−1 = (y, x ) ∈ Y × X ( x, y) ∈ R ,
et

(2) le complément de R : R = ( x, y) ∈ X × Y ( x, y) 6∈ R .
TABLE 6.3: Inverses et compléments.
La notation R dénote le complément en tant que l’ensemble. Mais si on a
un symbole spécial (p.e., @ ou m) pour la relation, c’est le symbole biffé (6@ et Relation Inverse Complément
= = 6=
6m) qu’on préfère pour dénoter le complément. ≤ ≥ >
⊆ ⊇ 6⊆
parent enfant non-parent
diviseur multiple «ne divise pas»
54

Équivalence et ordre
Quand on veut caractériser ou définir une relation fondamentale dans un domaine, on cherche des propriétés géné-
riques, comme réflexivité ou transitivité. Il y a deux types fondamentaux dans la discussion de structures :
I. relation d’équivalence : réflexive, symétrique, et transitive (p.e., égalité)
 dans beaucoup de langages de programmation, il y a une égalité pour «identité selon emplacement en mémoire» et
une autre pour «équivalence selon sémantique» : p.e., == et une méthode equals( x ) d’un objet
 en Java, on doit redéfinir la méthode equals dans le code d’une nouvelle classe d’objets(=domaine) : selon la
spécification, il faut satisfaire les trois propriétés d’équivalence
II. relation d’ordre (préordre) : réflexive, anti-symétrique, et transitive et la version stricte qui enlève refléxivité : elle est
antiréflexive, asymétrique, et transitive (p.e., ⊆ et ⊂ entre ensembles )
 l’ordre est totale si tous les éléments sont comparables : si tout couple ( x, y) satisfait la trichotomie que soit x < y,
soit x = y, soit x > y
 on peut ordonner (ou trier) les éléments d’un ensemble (dans l’ordre croissant) seulement si on a un ordre
Table 6.4 montre des exemples de relations binaires avec la définition des propriétés.

Domaine Relation Notation Propriétés


ensembles égalité A=B (EQ) réflexive(1) , symétrique(2) , transitive(3)
a c
Q égalité b = d (EQ) réflexive(1) , symétrique(2) , transitive(3)
N ordre n≤m (O) réflexive(1) , antisymétrique(5) , transitive(3) , total(8)
ensembles sous-ensemble A⊆B (O) réflexive(1) , antisymétrique(5) , transitive(3) , partiel(9)
N supérieur n>m antiréflexive(4) , asymétrique(6) , transitive(3)
N diviseur d|n (O) réflexive(1) , antisymétrique(5) , transitive(3) , partiel(9)
N congruence modn a ≡ b (mod n) (EQ) réflexive(1) , symétrique(2) , transitive(3)
(c)

droites (∈ R2 ) parallèle ek f (EQ) réflexive(1) , symétrique(2) , transitive(3)


humaines maternité antiréflexive(4) , asymétrique(6) , antitransitive(7)
(EQ) relation d’équivalence (O) relation d’ordre
(c) congruence : a mod n = b mod n (où x mod n dénote le reste dans la division entière de x par n)
(1) réflexivité : ∀ x : x x (2) symétrie : ∀ x ∀ y : x y → y x (3) transitivité : ∀ x ∀ y ∀ z : ( x y ) ∧ ( y z ) → ( x z )
R R R R R R
(4) antiréflexivité : ∀ x : ¬( x R x )
(5) antisymétrie : ∀ x ∀y : ( x R y) ∧ (y R x ) → ( x = y) (6) asymétrie : ∀ x ∀y : ( x R y) → ¬(y R x )
(7) antitransitivité ∀ x ∀y∀z : ( x R y) ∧ (y R z) → ¬( x R z)
(8) totalité : ∀ x ∀y : ( x R y) ∨ (y R x ) (9) (non-totale) ∃ x ∃y : ¬( x R y) ∧ ¬(y R x )
TABLE 6.4: Quelques relations fondamen-
tales et leurs propriétés
55

6.3 Fonctions a
1
b
Une fonction associe à chaque valeur d’un ensemble de départ X une 2
c
seule valeur d’un ensemble d’arrivée Y. Une telle association correspond à 3
d
un ensemble de couples ( x, y) ∈ X × Y, avec un couple pour chaque dis- 4
e
tinct x ∈ X.
domaine codomaine
Définition 6.5 (Fonction). La relation binaire f ⊆ X × Y est une fonction (ou
application) si elle satisfait les conditions d’existence et d’unicité ∀ x ∃!y : x f y F IGURE 6.2: La fonction f : {1, 2, 3, 4} →
{ a, b, c, d, e} est définie par les couples
∀ x ∃y : x f y totale à gauche 
(1, a), (2, b), (3, c), (4, c)
∀ x ∀y∀z : ( x f y) ∧ ( x f z) → (y = z) déterministe
donc on écrit f (1) = a, f (2) = b et
X est appelé le domaine et Y le co-domaine de f , ce qu’on spécifie par la nota- f (3) = f (4) = c.

tion f : X → Y .
a a
La seule valeur y ∈ Y telle que ( x, y) ∈ f est notée 1 1
b b
f (x) = y  notation préfixée pour fonction f 2
c
2
c
3 3
d d
On dit alors que y = f ( x ) est l’image de x sous f . L’ensemble image est 4 4
e e
l’ensemble des images (qui existe par l’axiome de remplacement), un sous-
ensemble du co-domaine : ceci n'est pas ceci n'est pas
une fonction une fonction
  (totalité) (déterminisme)
Im( f ) = f ( X ) = f ( x ) x ∈ X = y ∈ Y ∃ x ∈ X : ( x, y) ∈ f
| {z } | {z }
définition en image définition en compréhension
Le produit cartésien de 8 colonnes (C) et 8
rangées (R)
Définir une fonction. Dans un domaine fini X, il suffit de donner l’ensemble  
a, b, . . . , h × 1, 2, . . . , 8
des associations pour chaque x ∈ X. Dans un domaine infini comme R | {z } | {z }
=C =R
ou N, on définit les fonctions par formules logiques sur les couples ( x, y) dans
donne les 8 · 8 = 64 cases de l’échiquier
la relation : (Fig. 6.3). Le coloriage des cases est une
 fonction à 2 arguments avec domaine R × C
f ( x ) = x2 défini par f = ( x, y) ∈ R2 y = x2 } (les cases) et co-domaine {blanc, noir}
 selon laquelle les voisins dans la même
Exemple : g = ( x, y) ∈ R2 : x2 + y2 = 1 ∧ x ≥ 0 ∧ y ≥ 0 définit une rangée ou la même colonne onte des
fonction g : [0, 1] → [0, 1] dans l’intervalle fermée [0, 1] = { x ∈ R | 0 ≤ couleurs opposées, et couleur(a, 1) = noir.
x ∧ x ≤ 1}. 8
7
6
Fonction anonyme. On écrit une fonction anonyme avec le symbole 7→ 5
(flèche avec taquet) : x 7→ x2 dénote la même chose que f ( x ) = x2 , mais 4
sans nommer la fonction par f = x 7→ x2 . 3
2
1
λ-calcul. En logique et informatique théorique, le système formel de lambda- a b c d e f g h
calcul utilise le symbole λ pour construire une fonction à partir d’un terme
F IGURE 6.3: La structure et la sémantique
avec variables libres. Le λ préfixe une variable libre (l’argument de la fonction) de l’échiquier. Le coloriage des cases est une
dans un terme qui calcule la valeur de la fonction, et ainsi λ établit la liaison : fonction.

(λx x2 ) pour sa variable. L’application de la fonction, tout comme l’instancia-


tion de quantificateurs, correspond à une substitution de la variable libre dans
le terme.
56

Opérateurs binaires
TABLE 6.5: Exemples d’opérateurs.
Dans le domaine des nombres naturels, l’addition est une fonction avec ? opérateurs binaires en arithmétique :
multiplication, addition, . . .
domaine N × N et co-domaine N. On utilise l’opérateur + en une notation
? opérateurs binaires en logique boo-
infixée pour dénoter cette relation : x + y = z (au lieu, par exemple, d’une léenne : ∧, ∨, →
notation préfixée +( x, y) = z). ? opérateurs binaires en théorie des
ensembles : ∪, ∩
Définition 6.6. (i) Une fonction f : X → X est appelée opérateur unaire sur ? opérateur unaires : ¬ (négation logique),
X. (ii) Une fonction f : X × X → X est appelée opérateur binaire sur X. On opposé − (comme multiplication
par (−1)), ++ (incrémentation en
utilise l’opérateur dans la notation infixée z = x f y pour dénoter z = f ( x, y). C/Java/C++/Javascript/Python/Perl/. . . )

Notations équivalentes :
L’univers des fonctions
(( x, y), z) ⊆ add ↔ z = add( x, y) ↔ z = x + y
| {z } | {z } | {z }
L’ensemble de toutes les fonctions X → Y s’écrit comme YX : relation fonction opérateur


( f : X → Y) ↔ f ∈ YX

La notation est consistante avec la définition de A2 par dans A × A car


2 = {0, 1} est un ensemble dans la théorie :

A2 = A × A = {( a, b) | a ∈ A ∧ b ∈ A} produit cartésien

A2 = fonctions 2 → A f (0) = a, f (1) = b

Également, notre notation pour l’ensemble des parties de A par 2 A , est cohé-
rente :
TABLE 6.6: Exponentiation ensembliste avec
A
 l’ensemble vide.
2 = B B⊆A axiome de l’ensemble des parties

2 A = fonctions A → 2 f ( x ) = 0 ↔ x 6∈ B, f ( x ) = 1 ↔ x ∈ B 
∅∅ = fonctions ∅ → ∅ = {∅}

A∅ = fonctions ∅ → A = {∅}

∅ A = fonctions A → ∅ = ∅
La fonction vide
Comparer avec les identités pour les naturels
La fonction vide est simplement ∅ avec domaine ∅ (car il ne contient au- 00 = 1, n0 = 1, 0n = 0 pour tout 0 < n.
cun couple). La fonction vide est intéressant quand on considère des formules
ensemblistes : ∅∅ et A∅ sont des singletons avec la fonction vide, et il n’existe
aucune fonction avec domaine A 6= ∅ et co-domaine ∅ (Table 6.6).

Composition de fonctions
La composition est l’opération fondamentale dans l’univers des fonctions.

Théorème 6.3 (Composition). Soit f : Y → Z et g : X → Y, et soit la


composition de g par f dénotée par

f ◦ g = ( x, z) ∈ X × Z ∃y ∈ Y : ( x, y) ∈ g ∧ (y, z) ∈ f .


Alors f ◦ g (« f après g») est une fonction f ◦ g : X → Z et ( f ◦ g)( x ) = f g( x ) .
X Y Z
a
α 1 57
b
β 2
c
γ 3
d
δ 4
Preuve de Théorème 6.3. Pour tout x, il existe un unique y = g( x ) avec y ∈ Y et
pour cet y, il existe un unique z ∈ Z avec z = f (y).  g f
F IGURE 6.4: Composition de fonctions.
composée f ◦ g comprend les
La fonction 
La fonction d’identité existe dans tout domaine A 6= ∅. Elle est déno- associations (α, c), ( β, b), (γ, d), (δ, b) .
tée 5 par ι A ( x ) = x . Parmi les fonctions A → A, la composition est une 5. Il n’y a pas une notation standardisée pour
la fonction d’identité.
opération binaire associative 6 et ι A est son élément d’identité : 6. Associativité : f ◦ ( g ◦ h) = ( f ◦ g) ◦ h.
On peut omettre les parenthèses avec
( f ◦ ι A )( x ) = f (ι A ( x )) = f ( x ) composition multiple :

(ι A ◦ f )( x ) = ι A ( f ( x )) = f ( x ). ln ◦ sin ◦ exp = x 7→ ln(sin(exp( x ))).

Par contre, la composition n’est pas commutative : f ◦ g 6= g ◦ f en général


(p.e., 2x3 6= (2x )3 ).
En informatique, la composition de fonctions est exploitée dans la construc-
tion et évaluation des expressions : on considère les fonctions comme des
blocs de calcul (code) avec entrée et sortie, qu’on peut combiner avec l’opéra-
tion de composition. Exemple : la fonction f = x 7→ 1 − e− x est la composi-
tion des fonctions (1) a = x 7→ 1 − x, (2) b = x 7→ e x , et (3) c = x 7→ − x,
dans cet ordre : f = a ◦ b ◦ c. Lors de l’analyse syntaxique 7 , et lors de l’éva-
− x
luation de y = a(b(c( x )), on procède dans l’ordre inverse : u = c( x ) = − x, 7. f ( x ) = 1 − e
v = b(u) = eu , y = a(v) = 1 − v. Par associativité, on peut considérer
les démarches avec f = (( a ◦ b) ◦ c) ou également avec f = ( a ◦ (b ◦ c)).
Quand x est proche à 0, une implémentation directe de a ◦ b = x 7→ 1 − e x
donne une meilleure précision numérique (voir fonction expm1).
58

6.4 Bijections
Définition 6.7. Une fonction f : X → Y est dite 8 8. Termes anglais : identiques en écriture ou à
l’ancienne
(i) surjective si son ensemble image coïncide avec son co-domaine : ? injective ou one-to-one function
? surjective ou onto function
∀y ∈ Y : ∃ x ∈ X : f ( x ) = y
? bijective ou one-to-one correspondence

(ii) injective si les images des éléments distincts sont différents :


a
1 1
b b
∀u ∈ X : ∀v ∈ X : f (u) = f (v) → u = v ,
2 2
c c
3 3
d d
(iii) bijective si elle est surjective et injective : ∀y ∈ Y : ∃!x ∈ X : y = f ( x ) . 4 4
e

surjective injective
R E M A R Q U E . Les notions de surjection, injection et bijection dépendent du domaine et du
co-domaine de la fonction. Par exemple, la fonction f ( x ) = x2 n’est pas injective en tant que F IGURE 6.5: Surjection et injection.
f : Z → Z ou f : R → R parce que l’image de x et de (− x ) est le même, et x 6= − x quand f est surjective si pour tout y dans le
x 6= 0. Avec un tel choix de domaine et co-domaine, f n’est surjective non plus, parce que les co-domaine, il y a (au moins) un x avec
nombres négatifs dans le co-domaine ne sont jamais engendrés par f . Dans le domaine des y = f ( x ). La fonction est injective si les
nombres complexes, la fonction f : C → C est une surjection car il y a toujours (1 ou 2) solution images des éléments distincts sont distincts.
à y = x2 . La fonction f : N → N est injective (mais non pas surjective), parce qu’il y a (au plus)
une solution x non-négative à y = x2 . On peut même choisir le co-domaine des nombres carrés
Q = {y | ∃ x ∈ N : y = x2 }, et alors f : Z → Q est une surjection, et f : N → Q est une
bijection.

a
Techniques de preuve 1
b
2
Supposons qu’on a une fonction f : A → B. Les preuves des propriétés c
3
de f remontent à des démonstrations ensemblistes selon les définitions. d
4
? pour démontrer que f est injective, il faut une preuve d’unicité pour
x ∈ A : on montre que f ( x ) = f (u) → ( x = u) pour tout x, u ∈ A ; bijective
F IGURE 6.6: Bijection. La fonction f est
? pour démontrer que f n’est pas injective, il faut un contre-example : on bijective si elle est injective et surjective :
montre f ( x ) = f (u) et x 6= u avec un couple ( x, u) ∈ A2 ; pour tout y dans le co-domaine, il y a
exactement un x dans le domaine avec
? pour démontrer que f est surjective B ⊆ Im( f ), il faut une preuve d’exis- y = f ( x ).
tence pour x ∈ A : pour y ∈ B arbitraire, il existe x ∈ A avec f ( x ) = y
(preuve constructive si possible) ;
? pour démontrer que f n’est pas surjective B 6⊆ Im( f ), il faut un contre- a a
1 1
b b
exemple : un y ∈ B tel que f ( x ) 6= y pour tout x ∈ A.
2 2
c c
3 3
d d
Inverse d’une fonction 4 4

Toute fonction f possède une relation inverse f −1


par la définition de -1
− 1
f f
l’inverse, mais f n’est pas nécessairement une fonction. Pour cela, il faut que
y = f ( x ) soit satisfait par un unique x pour tout y dans le co-domaine : f F IGURE 6.7: Une fonction f et son inverse.
doit être une bijection. f −1 ( a) = 4, f −1 (b) = 1, f −1 (c) = 2,
f −1 (d) = 3.
 Si la fonction n’est pas une bijection, elle n’est pas inversible.

Théorème 6.4. Soit f : X → Y une fonction. Sa relation inverse f −1 ⊆ Y × X


est une fonction si et seulement si f est bijective, et alors f −1 est bijective aussi.
59


Démonstration. Selon sa définition, f −1 = ( f ( x ), x ) | x ∈ X , et c’est (i) totale à
la gauche ssi f est surjective ( f prend toutes les valeurs y), et (ii) déterministe ssi f est
injective (il y a une seule x avec f ( x ) = y). 

Théorème 6.5 (Bijection par fonction affine). Pour tout a ∈ R et b ∈ R,


on définit la fonction réelle 9 f ( x ) = a · x + b . La fonction f est une bijection si et 9. Une fonction réelle est R → R.
seulement si a 6= 0.
Corollaire 6.6 découle de Théorème 6.5 par
Corollaire 6.6. Si b et a 6= 0 sont des nombres réels, alors g(y) = (y − b)/a Théorème 6.4 car g est l’inverse de f .
est une bijection.

Preuve de Théorème 6.5. (1) Si a = 0, f ( x ) = b pour tout x, et alors f n’est ni


surjective ni injective. (2) Soit a 6= 0 et b deux nombres réels. (3) f est surjective car
avec x = (y − b)/a, f ( x ) = y pour tout y ∈ R. (4) f est injective parce que si
f ( x ) = f (u), alors ( ax + b) = ( au + b), et après la soustraction de b et la division
par a (on a a 6= 0), on obtient x = u. (5) Ainsi, f est bijective parce qu’elle est
injective et surjective.  Preuve de Théorème 6.7. Par Théo-
rème 6.3, f ◦ g = {( x, y) |
∃ a : f ( x ) = a ∧ y = g( a)} est
Composition et les bijections une fonction, et, par Définition 6.4,
Si l’inverse f −1 existe pour une fonction f : A → A, elle est l’élé- l’inverse est

ment d’inverse de f pour la composition : f ◦ f −1 = f −1 ◦ f = ι A car 


( f ◦ g)−1 = (y, x ) ∈ Y × X
f −1 ( f ( x )) = x. L’inverse de l’inverse est la fonction originale : ( f −1 )−1 = f .
∃ a : f ( x ) = a ∧ y = g( a) . (*)
Théorème 6.7 (Composition de bijections). Soit f : A → Y et g : X → A Or, pour tout y ∈ Y, il existe un
deux bijections. Alors ( f ◦ g) : X → Y est une bijection et unique a = g−1 (y) parce que g est
bijective, et pour cet a il existe un
( f ◦ g ) −1 = g −1 ◦ f −1 unique x = f −1 ( a) car f est bijective.
Ainsi, ( f ◦ g)−1 est une fonction, et par
La réciproque du théorème n’est pas vraie : Théorème 6.4, aussi une bijection. La
preuve montre aussi l’égalité avec
Théorème 6.8. Si f ◦ g est une bijection, alors f est une surjection et g est une in-

jection, mais f n’est pas nécessairement injective et g n’est pas nécessairement surjective. g−1 ◦ f −1 = (y, x ) ∈ Y × X

Démonstration. Omise mais un bon exercice à la maison.  ∃ a : g −1 ( y ) = a ∧ f −1 ( a ) = x


Cardinalité par bijection

n S’il existe une bijection


o f : A → B, alors c’est un ensemble de couples F =

x, f ( x ) x ∈ S , avec la propriété qu’il y exactement un x pour tout y
et vice versa :

∀ x ∈ A : ∃!y ∈ B : ( x, y) ∈ F et ∀y ∈ B : ∃!x ∈ A : ( x, y) ∈ F
| {z } | {z }
c’est une fonction l’inverse est aussi une fonction

Dans d’autres mots, F établit un appariement, ou couplage, entre les éléments


de A et ceux de B. On peut alors conclure que les deux ensembles ont la
même cardinalité sans compter les éléments un à un dans les deux ensembles.
La réciproque est aussi vrai : deux ensembles ont la même cardinalité s’il existe
une bijection entre eux.
60

Définition 6.8 (Égalité de cardinaux). Deux ensembles (finis ou infinis) ont la


même cardinalité si et seulement s’il existe une bijection entre eux. En particulier, pour
un ensemble fini A, sa taille | A| = n avec n ∈ N si et seulement s’il existe une
bijection entre A et l’ensemble [n] = {1, . . . , n} (avec [0] = ∅)

On note que la définition implique la transitivité d’égalité de cardinaux : si f et g sont des bijections, alors f ◦ g est
une bijection. (La définition satisfait aussi les critères de symétrie et réflexivité, donc l’égalité par cardinalité est une
équivalence entre ensembles.) Ainsi la cardinalité | A| = n peut être établie par une bijection à {0, 1, . . . , n − 1} ou
à n’importe quel autre ensemble image avec cette cardinalité. La définition aide à établir même une cardinalité infinie
de | A| = |N| : un tel ensemble est dénombrable. Voir Table 6.4 pour exemples.
Pour un ensemble de taille finie | A| = n, la bijection f : A → [n] définit
aussi l’énumération 10 des éléments f −1 : [n] → A. Ainsi, on peut établir 10. Il y a n ∈ N+ éléments distincts, s’il existe
l’égalité de cardinaux finis par un argument d’énumération. une fonction a : [n] → A bijective qui
énumère les éléments de A :

Théorème 6.9. Soit A, B deux ensembles finis. Alors | A| = A − B + A ∩ B ∀i ∈ [ n ] : a (i ) ∈ A


∀ x ∈ A : ∃i ∈ [ n ] : a (i ) = x
Preuve par dénombrement. Puisque selon Théorème 5.2, ( A − B) ∩ ( A ∩ B) = ∅ ∀i ∈ [n] : ∀ j ∈ [n] : ( a(i ) = a( j)) → (i = j)
et ( A − B) ∪ ( A ∩ B) = A, on peut dénombrer les éléments de A en énumérant les La bijection assure qu’on compte
membres de ( A − B) avant tous les membres de ( A ∩ B).  proprement :
(i) a(i ) est le i-ème élément énuméré ;
Théorème 6.10. Soit A, B deux ensembles finis. Alors
(ii) chaque élément est compté une fois ; et
(iii) on compte les éléments distincts une fois
A ∪ B = | A − B| + | B| = | A| + | B| − A ∩ B
(condition d’unicité).

Preuve ensembliste.
TABLE 6.7: Preuves de cardinalité par
A ∪ B = ( A ∪ B) − B + ( A ∪ B) ∩ B par Théorème 6.9 bijection.
? Preuve qu’il y a 7 jours de la semaine :
= | A − B| + | B|
 
= | A| − | A ∩ B| + | B| par Théorème 6.9 (1, lundi), (2, mardi), (3, mercredi), (4, jeudi),
(5, vendredi), (6, samedi), (7, dimanche) .

? Preuve qu’il y a autant d’entiers pairs que
des nombres naturels avec une bijection
Selon la définition on démontre que deux ensembles ne sont pas de même {2x | x ∈ Z} → N :
cardinalité en prouvant qu’il n’existe pas de bijection entre eux. (
p {0 ≤ p }
h( p) =
Théorème 6.11 (Diagonalisation de Cantor). Soit S un ensemble et 2S son −( p + 1) { p < 0}
ensemble puissance. Il n’existe pas de surjection f : S → 2S . ? Preuve qu’il y a autant de nombres naturels
pairs P = {2n | n ∈ N} que des
Preuve par contradiction. Supposons qu’il existe une surjection f : S → 2S , et nombres naturels : la fonction n 7→ 2n
est une bijection N → P. Alors que P
alors pour tout A ⊆ S, il existe un tel x ∈ S que f ( x ) = A. On définit alors est un propre sous-ensemble P ⊂ N, ils
l’ensemble ont la même «taille» | P| = |N|, et c’est
 tout à fait possible avec les cardinalités
D = x ∈ S| x 6∈ f ( x )
infinies.
par compréhension. Comme D ∈ 2S et f est une surjection, il existe un tel d
que f (d) = D. Mais d ∈ D ↔ d 6∈ f (d) par la définition de D et c’est une
contradiction. 
L’importance de ce théorème est que |S| < 2S pour toute cardinalité,
même infinie. Ainsi, l’ensemble de tous les sous-ensembles de N a une cardi-
nalité infinie 11 plus grande que |N| ! 11. Plus tard on montrera que |2N | = |R| par
une bijection.
7 Séquences et induction
U N E S É Q U E N C E est une énumération d’éléments, donc elle est une fonc-
tion avec un domaine ordonné. On choisit typiquement l’énumération par
des nombres naturels. Une telle fonction a : I → A avec le domaine (les
indices) I = {0, 1, . . . , n − 1} ou I = {1, 2, . . . , n} est une séquence de
longueur n = | I |. Au lieu d’écrire a(i ) avec i ∈ I, on utilise la notation
indexée ai = a(i ) pour les membres.
En généralisant le produit cartésien qui engendre des couples, une sé-
quence finie peut être également considéré comme un tuple de n éléments
quelconques (un n-uple), créé par le produit cartésien de n ensembles. Ce
concept formel est très flexible, et on l’utilise en informatique pour définir
rigoureusement nos structures. Par exemple, une chaîne de n caractères est un
n-uple dans le produit de n copies d’un alphabet. Les tuples sont également au
cœur des bases de données relationnelles : une table avec n colonnes est une
collection de n-uples qui forment ses rangées.
Une séquence infinie correspond à une fonction N → A avec l’indice parcourant tous les nombres naturels. On ren-
contre les séquences numériques N → N et N → R ou les suites infinies dans beaucoup de problèmes informatiques.
Par exemple, le temps tn de résoudre l’instance d’un problème de taille n ∈ N est une séquence d’intérêt fondamentale
en algorithmique. Afin de travailler avec l’infini, on a besoin de le définir, et de donner une technique de preuve asso-
ciée. La fonction fondamentale de successeur s(n) induit l’ensemble infini N comme une suite {0, s(0), s(s(0)), . . .}
et on peut établir l’appartenance n ∈ N par n applications de s à partir de 0. La définition de N comme un ensemble
inductif nous permet d’établir qu’un prédicat P(n) vaut pour tout n ∈ N par un argument inductif. Si on a P(0), et on
a P(n) → P(n + 1) pour tout n, alors on a le droit de déduire la généralisation universelle ∀n : P(n).

7.1 Séquences
Définition 7.1. Une séquence (ou suite) est une fonction f : I → A dont le
domaine (l’ensemble des indices) est un sous-ensemble 1 des nombres naturels 2 I ⊆ 1. Typiquement, les indices sont des entiers
N. On dénote alors les éléments (ou membres) de la séquence dans la notation consécutifs 0, 1, . . . ou 1, 2, . . . .
2. Parfois on travaille avec des indices négatifs
indexée f i = f (i ) avec les indices i ∈ I. Si I est fini, la séquence est finie. aussi, donc plus généralement, I ⊆ Z, mais
Autrement, elle est infinie. La longueur de la séquence est | I |. on n’en aura pas besoin dans ce cours.

Pour une séquence a : I → A, on écrit :

{ an }n∈ I ou, si infinie, { an }  la variable d’indice est arbitraire : { ai } = { an }

On peut écrire la séquence avec les limites en indice et exposant (subscript et superscript) :

{ an }9n=1 = { a1 , a2 , . . . , a9 } ou { ai }i∞=0 = { a0 , a1 , . . . }
une séquence de neuf éléments une suite infinie

Exemple 7.1 (Suite des nombres carrés). La suite des nombres carrés {cn }∞
n=0 se
définit par cn = n2 . On peut définir la même suite sans la nommer :
 2  ∞ 
n 7 → n2 = n = n2 n=0 = n2 n∈N = {0, 1, 4, 9, 16, . . . }.
62

Définition 7.2. La suite s : X → Y avec domaine 3 X ⊆ N et codomaine 3. Plus génériquement, on a la même dé-
Y ⊆ R (ou autre ensemble totalement ordonné) est dite finition si on permet des indices négatifs
X ⊆ Z.
? croissante au sens large, ou non-décroissante si

∀i, j ∈ X : i < j → si ≤ s j ,

? strictement croissante si ∀i, j ∈ X : i < j → si < s j ,


? décroissante au sens large, ou non-croissante si

∀i, j ∈ X : i < j → si ≥ s j ,

? strictement décroissante si ∀i, j ∈ X : i < j → si > s j ,

Le produit cartésien généralisé

Définition 7.3. Le produit cartésien de n ensembles A1 , A2 , . . . , An avec n ∈ N est l’ensemble des n-uples (ou tuples) :

∏in=1 Ai = A1 × A2 × · · · A n = ( a1 , a2 , . . . , a n ) a1 ∈ A1 ∧ a2 ∈ A2 ∧ · · · ∧ a n ∈ A n .

L’égalité de deux n-uples entraîne l’égalité des membres ordonnés :

( a1 , a2 , . . . , an ) = (b1 , b2 , . . . , bn ) → ( a1 = b1 ) ∧ ( a2 = b2 ) ∧ · · · ∧ ( an = bn ) .
| {z }
∀ i : a i = bi

Exponentiation ensembliste. L’ensemble des tuples avec éléments du même


domaine A s’écrit par exponentiation comme
n
∏ A = AI ou ∏A= An .
i∈ I i =1

On note qu’un n-uple est isomorphe à une fonction {1, 2, . . . , n} → A, ou à


une séquence finie de longueur n :
 
A I = fonctions I → A = séquences { ai }in=1 , ∀i : ai ∈ A

Le produit cartésien vide (n = 0) est un singleton : ∏i∈∅ A = A∅ = A0 = {∅} :


il contient exactement un membre qui est la séquence vide.
63

7.2 Chaînes de caractères


Définition 7.4. Une chaîne finie (anglais string) α sur A, où A est un ensemble
fini nommé l’alphabet, est une séquence finie d’éléments de A. La longueur de la
chaîne α = α1 · · · αn , dénotée par |α| , est le nombre n ∈ N de ses éléments :

|λ| = 0  chaîne vide λ sans éléments


| α1 α2 · · · α n | = n { n ≥ 1}

La concaténation 4 des chaînes α = α1 · · · αn et β = β 1 · · · β m dénote la chaîne 4. La concaténation est l’opération fonda-


mentale dans l’univers des chaînes. Ainsi,
αβ = α1 · · · αn β 1 · · · β m . comme avec multiplication, on n’utilise
| {z } même pas de symbole explicite pour l’opé-
longueur (n + m) ration binaire de «concaténation de β après
α». Mais si on veut, on peut introduire un
Pour un alphabet A, on définit les ensembles de chaînes selon longueur symbole dédié : α · β ou α ◦ β. En Java et en
Python, l’opérateur + dénote concaténation
A0 = { λ }  seulement la chaîne vide entre chaînes de caractères. La chaîne vide
 est l’élément neutre : λα = αλ = α. La
A ` = α1 α2 · · · α ` ∀ i : α i ∈ A  chaînes de longueur ` concaténation est associative :
[n o
A + = A1 ∪ A2 ∪ A3 ∪ · · · = Ai 0 < i  chaînes de longueur positive ∀α∀ β : (αβ)γ = α( βγ);

[n o mais non pas commutative :


A ∗ = A0 ∪ A + = Ai i ∈ N  toutes les chaînes finies
∃α∃ β : αβ 6= βα.

Exemple 7.2 (Isomorphisme entre les chaînes de bits et les sous-ensembles.).


On veut représenter les sous-ensembles d’un ensemble fini I = {1, . . . , n} par une
chaîne de bits de longueur n :

b( B) = { IB (i )}i∈ I pour tout B ⊆ I,

avec les fonctions d’indicateur


(
1 si i ∈ B
IB ( i ) =
0 si i 6∈ B

La fonction b : 2{1,...n} → {0, 1}n est bijective. On définit les opérations bit à bit TABLE 7.1: Opérations élémentaires sur bits
dans {0, 1}n :
 n  n OR 0 1 AND 0 1
a ∨ b = OR( ai , bi ) i=1 a ∧ b = AND( ai , bi ) i=1 0 0 1 0 0 0
 n  n 1 1 1 1 0 1
a ⊕ b = XOR( ai , bi ) i=1 ¬ a = NOT( ai ) i=1
XOR 0 1 NOT
0 0 1 0 1
par les opérations élémentaires OR, AND, XOR et NOT sur les bits (Table 7.1). Ainsi,
1 1 0 1 0
b( A ∪ B) = b( A) ∨ b( B) b( A ∩ B) = b( A) ∧ b( B) TABLE 7.2: Opérations sur les bits en Java.
b( A4 B) = b( A) ⊕ b( B) b ( A ) = b ( I − A ) = ¬ b ( A ). int a; // 32 bits
int b; // 32 bits
L’ordinateur stock un entier 0 ≤ a < 232 comme la suite a0 , . . . , a31 de 32 bits (ou 4 ...
octets) dans la représentation binaire : int union = a | b; // OR
a = a0 + a1 · 2 + a2 · 22 + a3 · 23 + · · · + a31 · 231 . L’«entier» (de 32 ou 64 bits) est int intersect = a & b; // AND
un type fondamental dans beaucoup de langages de programmation, et vient avec des int diffsym = a ^ b; // XOR
opérations sur les bits. Ainsi, un entier peut encoder un sous-ensemble d’un ensemble int non_a = ~ a; // NOT
de 32 éléments et on peut facilement implanter les opérations ensemblistes. Table 7.2
montre l’exemple en Java.
64

7.3 Induction mathématique


L’ensemble des nombres naturels est engendré par l’application successive
de la fonction s(n) = n + 1 :
n   o
N = 0, s(0), s(s(0)), s s(s(0)) , s s s(s(0)) , . . . .
=1 =2 =3 =4

On admet la notion d’infini, au moins dans le cas des nombres naturels, comme
l’idée d’une manque de borne : il y a un successeur à tout nombre naturel n. La
fonction de successeur s : N → N doit satisfaire les propriétés :

∀n : ∀m : s(n) = s(m) → n = m  s est injective=successeurs distincts



∀ n : (0 6 = n ) ↔ ∃ m : n = s ( m )  Im(s) = N − {0}

Définition 7.5 (Axiome de l’infini). Il existe un ensemble qui contient 0 et tous


ses successeurs :

∃ I : (0 ∈ I ) ∧ ∀ n : n ∈ I → s ( n ) ∈ I . (7.1)

L’Axiome de l’infini affirme que le successeur engendre un ensemble induc-


tif I. Il n’énonce pas que N = I ni que I soit unique. L’ensemble des nombres
naturels N est quand même bien défini comme le plus petit ensemble infini,
ou l’intersection de tous les I satisfaisant (7.1). Dans des preuves, on se sert
alors de l’implication que N est un sous-ensemble de tout ensemble inductif
 
∀ I : (0 ∈ I ) ∧ ∀ n : n ∈ I → s(n) ∈ I → N ⊆ I. (7.2)
0 est membre si n est membre, alors (s(n) est membre

Preuve par induction


L’axiome de l’infini nous donne la technique de preuve par induction,
une forme d’argument 5 valide pour établir qu’un prédicat P(n) vaut pour 5. L’induction mathématique est une tech-
tout n naturel : ∀n ∈ N : P(n). nique de raisonnement déductif qui est
valide : Le raisonnement inductif utilisé en
apprentissage automatique est différent : là,
Théorème 7.1 (Principe de l’induction). Soit P(n) un prédicat tel que on ne vise pas la validité logique mais plutôt
(base) P(0) est vrai, et la minimisation de l’erreur dans un énoncé
universel compact. «L’ours polaire est un
(pas d’induction) pour tout n ∈ N, l’implication P(n) → P(s(n)) est vraie. ours blanc» n’est pas vrai tout le temps (en
tant que «si et seulement si»), mais probable-
Alors, P(n) est vrai pour tout n ∈ N. ment la meilleure caractérisation courte des
 ours polaires.
Démonstration. On définit l’ensemble P = n P(n) par compréhension. Par la
base, 0 ∈ P. Par le pas inductif, n ∈ P → s(n) ∈ P. En conséquence, N ⊆ P
selon (7.2) : on a ∀n ∈ N : P(n). 

Corollaire 7.2. Preuve par induction est une forme d’argument valide avec successeur
s(n) = n + 1.

φ (0) ∀ n ∈ N : φ ( n ) → φ ( n + 1)
(IND)
∀n ∈ N : φ(n)
65

Le théorème suivant montre la structure d’une preuve par induction.

Théorème 7.3. La somme des n premiers nombres positifs impairs égale n2 :

1 = 12 1 + 3 = 22 1 + 3 + 5 = 32 1 + 3 + 5 + 7 = 42 ···

Preuve par induction. Soit pn la somme des n premiers nombres positifs im-
pairs. On démontre(5) que pn = n2 pour tout nombre naturel n ∈ N par (5) On commence la preuve avec un
avertissement au lecteur ou à la lectrice : il y
induction.
aura un cas de base et un étape inductif.
(base) On a p0 = 02 . C’est une question de style si on veut
structurer le texte en indiquant «cas de base»
(induction) Supposons que pn = n2 pour un n quelconque(8) . Ainsi, et «pas inductif» (base step et induction step)
explicitement. En général, il n’est pas
pn+1 = pn + (2n + 1) membre additionnel dans la somme nécessaire, après avoir annoncé qu’une
2 preuve par induction suivra.
= n + (2n + 1) par l’hypothèse d’induction (8) Dans l’étape d’induction, on veut

= ( n + 1)2 démontrer l’énoncé conditionnel


( pn = n2 ) → ( pn+1 = (n + 1)2 ). Pour
ceci, on donne une preuve conditionnelle
Puisque p0 = 02 et pn = n2 entraîne pn+1 = (n + 1)2 pour tout(G) n, avec l’hypothèse d’induction : supposons que
pn = n2 pour tout n ∈ N.  pn = n2 est vrai. On montre que cela
entraîne pn+1 = (n + 1)2 : la preuve
conditionnelle montre l’implication par le
Théorème de déduction naturelle (incorporé
La preuve par induction est une technique puissante dans la théorie des dans la règle d’introduction (→ I) en
ensembles. Dans la preuve suivante, on construit une induction en cardinalité. inférence formelle).
(G) La preuve conclut en invoquant le
Théorème 7.4 (Cardinalité de l’ensemble puissance). Un ensemble fini S de principe de l’induction. Dans une preuve par
cardinalité |S| = n inclut 2n sous-ensembles distincts : induction, il est important qu’il y a un n qui
est traité par le cas de base parmi les
antécédents considérés dans l’étape de
2S = 2| S | . (7.3)
l’induction. Ici, n = 0 est le cas de base, et le
n ∈ N de l’hypothèse d’induction inclut le
Preuve par induction. Soit P(n) l’énoncé que l’Équation (7.3) vaut pour tout en- cas n = 0.
semble de cardinalité n. (base) L’ensemble vide ∅ a exactement un sous-ensemble,
lui-même : |2∅ | = 20 = 1.
(1) (hypothèse d’induction) Supposons que P(n) est vrai : |2S | = 2n pour tout ensemble de cardinalité |S| = n.
(2) Soit T un ensemble fini de (n + 1) éléments distincts. Comme T n’est pas vide, il contient au moins un élément. Soit a ∈ T un
élément arbitraire, et S = T − { a}.
(3) On définit une partition des sous-ensembles de T par l’appartenance de a :

T0 = 2T ∩ 2S = A ⊆ T a 6∈ A  sous-ensembles sans a
 (7.4)
T S
T1 = 2 − 2 = A ⊆ T a ∈ A  sous-ensembles avec a

(4) Maintenant, |T0 | = |T1 | car la fonction A 7→ A ∪ { a} est une bijection T0 → T1 .


(5) On a également que 2S = T0 . T0 ⊆ 2S par définition de T0 , et 2S ⊆ T0 parce que tout sous-ensemble de S est aussi un
sous-ensemble de T qui ne contient pas a. Ainsi,

2T = 2T ∩ 2S + 2T − 2S = T0 + T1 = 2S + 2S = 2 · 2n = 2n +1 .
H.I.
scinder par 2 S par (7.4) S
par 2 = T0 et (4)

Puisque (base) P(0) est vrai, et que (induction) P(n + 1) est vrai lorsque P(n) est vrai,
Équation (7.3) est vrai pour toute cardinalité finie |S| ∈ N. 
66

Corollaire 7.5.
(i) La table de vérité pour une formule logique avec n variables propositionelles
contient 2n rangées.
(ii) La table d’appartenance pour une formule ensemblistes avec n ensembles comprend
2n rangées
(iii) Il y a 2n chaînes de bits de longueur n.
(iv) Il y a 2n fonctions A → B pour un domaine de taille n = | A| et codomaine de
taille | B| = 2.

Choisir le cas de base


Il arrive qu’on veut démontrer un théorème ∀n : Q(n) pour tout entier
positif n ≥ 1, ou plus généralement, n ≥ n0 avec un seuil n0 donné.
Preuve par induction marche dans ce cas 6 aussi, car avec le prédicat P(n) ≡ 6. Induction avec cas de base n0 arbitraire :
Q(n + n0 ), Théorème 7.1 s’applique : le cas de base est Q(n0 ), et l’étape Q ( n0 ) ∀ n ≥ n0 : Q ( n ) → Q ( n + 1)
d’induction montre Q(n) → Q(n + 1) pour tout n ≥ n0 . La preuve du ∀ n ≥ n0 : Q ( n )
théorème ci-dessous dépend du bon choix de cas de base.
2n
Théorème 7.6 (limn→∞ n = +∞). Pour tout n assez grand 7 , n2 ≤ 2n . 7. «assez grand» veut dire que
∃ n 0 : ∀ n ≥ n 0 : n 2 ≤ 2n .
On peut vérifier pour les plus petites valeurs :

02 ≤ 20 12 ≤ 21 22 ≤ 22 32 > 23 42 ≤ 24 52 ≤ 25 · · ·

Preuve par induction. On démontre que n2 ≤ 2n pour tout n ≥ 4. (base) On


a 42 = 24 . (induction) Supposons que n2 ≤ 2n pour un n ≥ 4. Alors

( n + 1)2
( n + 1)2 = n2 ·
n2
25  1 2
≤ n2 · x 7→ 1 + est une fonction décroissante
16 x
< n · 2 ≤ 2n · 2 = 2n +1
2
par l’hypothèse d’induction

Puisque l’inégalité est vraie à (n + 1) lorsqu’elle est vraie à n avec n ≥ 4, et n2 ≤ 2n


pour n = 4, le théorème est vrai pour tout n ≥ 4. 

Induction d’ordre 2
Lors d’une preuve par induction, l’étape de base couvre P(0), et l’étape
d’induction montre P(n) → P(n + 1) avec une preuve conditionnelle qui
commence par l’hypothèse d’induction P(n). La même structure peut être
adaptée à des prédicats dépendants de plus d’un seul antécédent. Dans une
induction d’ordre 2, le cas inductif établit Q(n) ∧ Q(n + 1) → Q(n + 2), Induction dans N avec deux cas de base :
et l’étape de base montre Q(0) ∧ Q(1). La preuve conditionnelle dans l’étape Q (0) ∧ Q (1) ∀ n : Q ( n ) ∧ Q ( n + 1) → Q ( n + 2)
d’induction assume l’hypothèse d’induction Q(n) ∧ Q(n + 1), avec un n ∀n : Q(n)
quelconque, et conclut Q(n + 2).
 En posant P(n) ≡ Q(n) ∧ Q(n + 1), Théorème 7.1 s’applique parce qu’on
établit Q(n) ∧ Q(n + 1) → Q(n + 2) ≡ Q(n) ∧ Q(n + 1) → Q(n + 1) ∧ Q(n + 2)
dans l’étape d’induction.
67

Induction généralisée
Dans une preuve par induction «forte» 8 , l’étape d’induction établit 8. Induction généralisée :
∀n : (∀k < n : Q(k)) → Q(n)
Q (0) ∧ Q (1) ∧ · · · Q ( n − 1) → Q ( n ).
∀n : Q(n)

Théorème 7.7 (Induction généralisée). Si ∀n : ∀k < n : Q(k) → Q(n),
alors ∀n : Q(n).

Noter qu’avec instanciation à n = 0, on a {k|k < 0} = ∅, donc



∀ k ∈ ∅ : Q ( k ) → Q (0) ≡ 1 → Q (0) ≡ Q (0)

est le cas de base sans antécédent. La preuve conditionnelle dans l’étape d’in-
duction pour un 0 < n quelconque montre que Q(n) découle de l’hypothèse
que Q(k) est vrai pour tout k < n.
 Théorème 7.1 s’applique avec P(n) ≡ ∀k ≤ n : Q(k). Dans le cas inductif,

P ( n ) → P ( n + 1) ≡ ∀ k ≤ n : Q ( k ) → Q ( n + 1).

Théorème 7.8 (Division euclidienne). Pour tout a et m > 0 des entiers naturels,
il n’y a qu’un seul couple d’entiers naturels (q, r ) avec r < m tel que

a = q · m + r. (7.5)

On dénote alors r = a mod m .

Preuve par induction. Soit m > 0 un entier positif quelconque. On montre d’abord
qu’il existe un couple satisfaisant (7.5) par induction en a. (base) Si a < m,
alors q = 0, r = a est une solution car a = 0 · m + a. (induction) Soit b ≥ m, et
supposons que (7.5) est vrai pour tout a < b. (1) Soit a = b − m. Comme m > 0, et
b ≥ m, 0 ≤ a < b. (2) Par l’hypothèse d’induction, il existe (q0 , r 0 ) tel que
a = q0 · m + r 0 . (3) Ainsi, b = a + m = (q0 + 1) · m + r 0 . En conséquence, il existe
un couple (q, r ) avec 0 ≤ r < m pour tout a ∈ N satisfaisant (7.5).
Maintenant, on montre que la solution est unique. Supposons que a = (q · m) + r et
a = ( p · m) + s, avec r, s < m. D’abord, on montre que nécessairement q = p, par
contradiction. Supposons, sans perte de généralité, que q < p. On a alors une
contradiction :
 
0 = a − a = p · m + s − q · m + r = ( p − q) ·m + (s − r )
| {z } | {z }
1≤ 0− m <

> 1 · m + (0 − m ) = 0

Puisque p = q, on a q · m + s = q · m + r, donc s = r. 
68

7.4 Minimum, maximum et bon ordre


Définition 7.6 (Minimum). Le plus petit élément (ou minimum) d’un ensemble
non-vide A selon l’ordre ≤ est l’élément m ∈ A tel que ∀ x : x ∈ A → m ≤ x. On
écrit alors m = min A .

On note que min est une fonction bien définie car le minimum est unique
par anti-symétrie : si m et m0 sont deux plus petits éléments, alors m ≤ m0 (car
m est minimum) et m0 ≤ m (car m0 est minimum). Puisque ≤ est un ordre,
m0 ≤ m et m ≤ m0 impliquent m = m0 . On définit le maximum (ou le plus
grand élément) unique dans A 6= ∅ avec la même logique :

m = min A ↔ m ∈ A ∧ ∀n ∈ A : m ≤ n
m = max A ↔ m ∈ A ∧ ∀k ∈ A : k ≤ m

Il est possible que le maximum ou le minimum n’existe pas : la fonction


de successeur induit les entiers naturels à partir de 0 comme un ensemble
sans maximum. Le successeur établit 9 l’ordre ≤ avec la propriété que tout 9. On définit l’ordre dans N par addition, où
ensemble E ⊆ N contient un minimum sauf E = ∅ : c’est un bon ordre. l’addition est bien définie avec le successeur :
( a ≤ b) ↔ (∃c : a + c = b).
Définition 7.7 (Bon ordre). L’ensemble E est bien ordonné par un ordre
total ≤, s’il y a un minimum dans tout sous-ensemble non-vide de E :

∀ A : ( A ⊆ E) ∧ ( A 6= ∅) → ∃m ∈ A : (∀ x ∈ A : m ≤ x ).
A est une partie non-vide m est le plus petit

Théorème 7.9 (Bon ordre parmi les nombres naturels). Si E ⊆ N n’est pas
vide, alors E contient un minimum min E.
Preuve esquissée. On peut démontrer le théorème par induction : si E possède un
élément inférieur ou égal à n, alors E contient un minimum. On définit le prédicat
correspondant :

P(n) ≡ (∃k ∈ E : k ≤ n) → (∃m ∈ E : ∀k : k ∈ E → m ≤ k)


| {z } | {z }
si membre ≤ n alors il existe minimum m = min E

P(0) est immédiate car ∀n : 0 ≤ n. L’induction P(n) → P(n + 1) est par cas : si E
contient un k ≤ n, on se sert de l’hypothèse d’induction, ou si E ne contient pas un
tel k, alors (n + 1) est le minimum. 

Le bon ordre sert comme un bouton d’avance rapide dans la preuve sui-
vante pour Théorème 7.8.
Preuve pour Théorème 7.8 avec bon ordre. Soit m > 0 un entier positif quelconque.
On montre que pour tout a et m > 0 des entiers naturels, il n’y a qu’un seul couple
d’entiers naturels (q, r ) avec r < m tel que a = q · m + r. (1) Soit

R = a − q · m q ∈ N ∧ qm ≤ a = { a, a − m, a − 2m, . . . } (2) L’ensemble R
n’est pas vide parce que a − 0 · m = a ∈ R. Soit r = min R et q la valeur avec laquelle
a − qm = r. (3) Maintenant r < m, car si r ≥ m, alors r − m ∈ R est un élément plus
petit. (4) On a alors un couple d’entiers naturels (q, r ) avec lequel a = qm + r et
0 ≤ r < m. L’unicité de la solution est démontrée comme précédemment :
(qm + r ) − (q0 m0 + r 0 ) = 0 n’est pas possible si (q, r ) 6= (q0 , r 0 ) avec 0 ≤ r 0 < m. 
69

7.5 Fonction de plancher

Définition 7.8. Pour x un réel, la partie entière ou plancher (floor) de x, noté


b x c , est le plus grand entier inférieur ou égal à x. La partie entière par excès, ou
plafond (ceiling) de x ou, noté d x e , est le plus petit entier supérieur ou égal à x.

b x c = max{n ∈ Z | n ≤ x } d x e = min{n ∈ Z | x ≤ n}

La partie fractionnaire est dénotée 10 par { x } = x − b x c 10. Attention : c’est la même notation que
pour ensemble singleton de x.

Exemple 7.3.
    
1065 = 1065 1065 = 0 1065 = 1065
    
10.65 = 10 10.65 = 0.65 10.65 = 11
    
−10.65 = −11 −10.65 = 0.35 −10.65 = −10 plancher

Calcul avec le plancher


La fonction de plancher (ni le plafond) ne se prête pas facilement à la ma-
nipulation : pour x, y ∈ R
j en général,
k j bkxyc 6= b xjc · bycket b xj +kyc j6= k plafond
1 1 1 2 1 2
b x c + byc. Par exemple, · 2 6=
2 · b2c, et
2 + 6= 3 + 3 3 3 .
On remarque aussi que le plancher n’est pas une fonction impaire :

x 7→ b− x c 6= x 7→ −b x c mais b− x c = −d x e
fractionnaire
F IGURE 7.1: Fonctions de plancher (R →
Les fonctions x 7→ b x c et x 7→ d x e sont surjectives mais non pas injectives. Z), plafond (R → Z) et partie fractionnaire
(R → { x ∈ R | 0 ≤ x < 1})
On détermine alors la valeur par les inégalités b x c ≤ x < b x c + 1 .
En informatique, on se sert du plancher (et du plafond) pour exprimer
n’importe quelle notion d’«arrondi» : pour tout entier naturel n ∈ N et
nombre réel u ≥ 1

2n ≤ u < 2n+1 → n = blg uc.

On a démontré l’unicité des quotients et restes dans division euclidienne


par induction dans Théorème 7.8. Avec les fonctions de plancher et partie
fractionnaire, on a des formules explicites.

Théorème 7.10 (Division euclidienne dans Z). Pour tout a et m 6= 0 des


entiers, il n’y a qu’un seul couple d’entiers (q, r ) avec 0 ≤ r < m tel que

a = q · m + r. (*)
j k n o
a a
Spécifiquement, q = m et r = a mod m = m · m (partie fractionnaire).
70

Démonstration. Soit a, m ∈ Z avec m 6= 0 et supposons qu’un couple (q, r ) satis-


fait (*). Alors
a r
= q+ ,
m m
j k
r a a
avec q ∈ Z, et 0 ≤ m < 1. Il ensuite que q ≤ m < q + 1, donc q = m . En
conséquence,
   !  
a a a a
r = a − qm = m · −q = m· − = m· .
m m m m

Système de numération
Exemple d’un entier en décimal (m = 10) :
On encode les entiers positifs par des chaînes non-vides avec un alphabet
1065 = 1 · 103 + 0 · 102 + 6 · 101 + 5 · 100
A = {0, 1, . . . , m − 1} : c’est le système de numération à la base m > 1.
La suite unique {d0 , d1 , . . . , dt } avec dt 6= 0 représente n = d0 + d1 m + n en binaire dlg(n + 1)e blg(n)c
d2 m2 + · · · dt mt . Dans la représentation binaire (m = 2), les bits { 0 , 1 } 0 λ 0
encodent dk ∈ {0, 1}, et n = d0 + d1 · 2 + d2 · 22 + · · · dt · 2t avec dt = 1, 1 1 1 0
2 1 0 2 1
ou n = 0 avec la suite vide. La chaîne de bits correspondante dt dt−1 · · · d0
3 1 1 2 1
commence avec le bit de poids fort dt ( 1 si 0 < n) et finit avec le bit de 4 1 0 0 3 2
poids faible d0 ( 0 si pair, 1 si impair). La longueur de la représentation 5 1 0 1 3 2
binaire est le nombre de bits (t + 1). 6 1 1 0 3 2
7 1 1 1 3 2
Théorème 7.11 (Longueur de l’encodage binaire des naturels). Le nombre 8 1 0 0 0 4 3
 
naturel n ∈ N s’écrit sur lg(n + 1) bits dans la représentation binaire. 9 1 0 0 1 4 3
10 1 0 1 0 4 3
...
Démonstration. Soit β : N → N le nombre de bits dans la représentation binaire. On
TABLE 7.3: Représentation binaire des
a β(0) = 0, et pour tout t ≥ 0, β(n) = t + 1 si et seulement si 2t ≤ n < 2t+1 . On a nombres naturels. λ dénote la chaîne vide.
alors 2t < n + 1 ≤ 2t+1 (car n est entier), et donc t < lg(n + 1) ≤ t + 1 ou
   
lg(n + 1) = (t + 1). En conclusion, β(n) = lg(n + 1) quand n = 0 et quand
1 ≤ n. 
On remarque qu’on peut écrire également que β(n) = 1 + blg nc pour
tout n > 0, mais la formule du théorème marche aussi avec n = 0.
8 Sommation et définitions récursives
L A S O M M E ∑in=1 ai sur n ∈ N éléments consécutifs dans une suite est
l’extension de l’addition dans un couple (n = 2) à l’addition dans un tuple.
On définit la somme comme une séquence indexée (n) dans l’ensemble in-
ductif N. L’induction correspond à une définition récursive de la somme : si
n = 0, alors la somme est 0, sinon c’est l’addition d’un élément à la somme
de (n − 1) éléments.
En général, une relation de récurrence définit chaque terme d’une suite à partir
des membres précédents :

( a 0 , a 1 . . . , a n −1 ) 7 → a n .

On utilise induction mathématique dans N pour démontrer les propriétés de


F IGURE 8.1: Les nombres Fibonacci
sommations et d’autres «grands opérateurs» 1 , et pour prouver les solutions de {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377}
suites récurrentes. dans Liber abaci (1202) de Leonardo Fibo-
nacci.
S SW V
1. ∑, ∏, , ,
8.1 Sommations
On définit 2 la notation de sommation 3 pour une séquence { ai } qui 2. C’est notre définition sémantique pour ∑.
dénote la somme des termes avec des indices choisis (entre des limites quel- 3. (fr):somme

conques m et n) :
n n n
∑ a i = a m + a m +1 + · · · + a n  indice de sommation i arbitraire : ∑ aj = ∑ ai
i =m j=m i =m

En particulier :
n m m +1
∑ ai = 0 si m > n; ∑ ai = am ; ∑ ai = a m + a m +1 .
i=m i =m i =m
vide si n < m 1 membre 2 membres

F IGURE 8.2: Leonhard E ULER (1707–


1783), le plus prolifique mathématicien de
tous les temps, inventeur de la notation ∑
pour somme. Portrait par Jakob Emanuel
Handmann [Kunstmuseum Basel]
72

À part de spécifier l’ensemble indice pour la sommation par une intervalle


{n, n + 1, n + 2, . . . , m}, il y a d’autres notations utiles :
notation exemple
3
∑im=n ai ∑ i2 = 12 + 22 + 32 = 14 intervalle
i =1

∑i ∈ I ai ∑ i2 = 1 + 4 + 9 = 14 ensemble d’indices
i ∈{1,2,3}

∑ P (i ) ai ∑ i2 = 1 + 4 + 9 = 14 prédicat
1≤ i <4

Portée de ∑. La sommation comprend un seul terme après la ∑ :


!
n n n n
 C’est mieux de réordonner les termes
∑ i2 + 1 = ∑ i2 + 1 = 1 + ∑ i2 6= ∑ ( i 2 + 1) additifs ou d’utiliser des parenthèses pour
i =1 i =1 i =1 i =1 éviter l’ambiguïté.
notation déroutante parenthèses pour clarté notation claire terme en parenthèses

Quand il y a d’autres variables, l’indice dans la somme imbriquée est la va-


riable non-liée :
2 j=1,i =1  j=2,i=1 j=2,i =2 
∑ ∑ ( i + j ) = (1 + 1) + (1 + 2) + (2 + 2)
| {z }
j =1 1≤ i ≤ j | {z }
∑ 1≤ i ≤1 ( i +1 )
∑ 1≤ i ≤2 ( i +2 )
indice i à l’intérieur

Arithmétique. La sommation est une addition de termes, donc les identités


arithmétiques appliquent sans surprises :
? changement de variable (faire attention aux limites !)
n n +1
(n + 1)(n + 2) n ( n + 3)
∑ ( i + 1) = ∑j =
2
−1 =
2
i =1 j =2 | {z }
j = i+1 =∑nj=1 j

? multiplication par c qui est constante par rapport aux termes :


n  n 
∑ ( c · ai ) = c · ∑ ai
i =m i =m

? addition de sommes (même ensemble d’indices !)

∑ a i + ∑ b k = ∑ ( a i + bi ) = ∑ c i  Exemple avec une suite constante :


i∈X k∈ X i∈X i∈X
10  10   10 
avec la séquence ci = ai + bi . ∑ (i + 100) = ∑ i + ∑ 100 = 1055.
i =1 i =1 i =1
? séparation d’indices : pour tout ensemble d’indices A, B ⊆ N, | {z } | {z }
=1+2+···+10 =10·100
! !
∑ ai = ∑ ai + ∑ ai
i∈ A i∈ A− B i∈ A∩ B  Exemple : (A = {0, 1, 2, 3}, B = {0})
3 3
∑ i2 = 02 + ∑ i2 .
i =0 i =1
73

8.2 Séries
La suite des sommes partielles {sn } = {∑in=0 ai } définit la notion de la
série 4 comme le couple des suites { an } et {sn } avec la sommation infinie 4. :série
(fr)


∑ ai = nlim
→∞
sn .
i =0

Théorème 8.1 (Récurrence de somme partielle). Soit { an } une suite numé-


rique, et soit {sn } la suite des sommes partielles
n
sn = ∑ ai . (8.1a)
i =0

Alors TABLE 8.1: La série ∑i∞=0 (−1)i diverge.


s0 = a0 et, pour tout n > 0, s n = s n −1 + a n . (8.1b) n
(
1 si n pair
∑ (−1)i = 0 si n impair
Une série peut être convergente (lim 6= ∞ existe) ou divergente (lim = ∞ i =0

ou lim = −∞ ou ni l’un ni l’autre — v. Table 8.1). Par Théorème 8.1, la Donc, limn→∞ ∑i∞=0 (−1)i n’existe pas.

notation de somme infinie suffit à définir la série : p.e. dans le cas de la série
 ∞
∑i∞=1 n12 (qui est convergente), la suite des termes est n12 n=1 , et la suite des
 n 1 ∞
sommes partielles est ∑k=1 k2 n=1 .
Il est nécessaire mais non pas suffisante pour la convergence de la série que
les termes convergent vers 0. TABLE 8.2: Preuve de Théoreme 8.2

Théorème 8.2. La série ∑∞


k =1 2
−k est convergente : Démonstration. Soit sn = ∑nk=1 21k (incluant
s0 = 0). On prouve par induction que

1 1 1 1 1 1 1
+ + + +
2 4 8 16 32
+··· = ∑ k
=1 sn = 1 −
2n
. (5)
k =1 2 1
(base) À n = 0, on a s0 = 0 = 1 − 20
. (in-
duction) Supposons que sn = 1 − 21n
pour un n quelconque. Par (8.1b),
Nombres harmoniques sn+1 = sn + 2n1+1 , et par l’hypothèse d’in-
1 1 1
duction sn+1 = 1 − 2n + 2n +1
= 1− 2n +1
.
Définition 8.1 (Nombre harmonique). La suite des nombres harmoniques Donc, Équation (5) est vraie pour
{ Hn } est définie comme la suite des sommes des inverses des entiers positifs : tout n. En
 conséquence,
 limn→∞ sn =
1
limn→∞ 1 − 2n = 1. 
n
1
Hn = ∑ .
i =1
i
74

F IGURE 8.3: La croissance des nombres


8 harmoniques Hn = ∑in=1 i−1 (marqué H_n
H_n ln(n+1) 1+ln(n) H_n-ln(n)
sur l’image). Les graphes illustrent que
ln(n + 1) ≤ Hn ≤ 1 + ln n
6
et que limn→∞ ( Hn − ln n) = γ avec
la constante d’Euler-Mescheroni γ =
0.5772 · · · .
4

n
0

0 100 200 300


TABLE 8.3: Les nombres harmoniques.
On remarque la différence de ln(10) =
2.302 · · · manifestée entre H10n et Hn .

n Hn
0 0
1 1
2 3/2 = 1.5
Théorème 8.3. La série harmonique diverge : ∑i∞=1 1/i = ∞.
3 11/6 =≈ 1.8
4 25/12 ≈ 2.1
Démonstration. La suite { Hn } est strictement croissante : Hn < Hn+1 pour tout n
1 5 137/60 ≈ 2.3
(par (8.1b), Hn+1 = Hn + n+ 1 > Hn car ( n + 1) > 0). On démontre d’abord que 10 2.9
pour tout k ∈ N, H2k ≥ 1 + k/2 par induction. 100 5.2
(base) Soit k = 0. On a H20 = H1 = 1 ≥ 1 + 0/2. 1 000 7.5
10 000 9.8
(induction) Supposons que H2k ≥ 1 + k/2 pour un k quelconque. Soit n = 2k , et 100 000 12.1
alors 2k+1 = 2n. On décompose la somme : 1 000 000 14.4

2n n 2n 2n
1 1 1 1 n
H2n = ∑ i
=∑ + ∑
i i
≥ Hn + ∑
2n
= Hn +
2n
car 1/i ≥ 1/(2n) pour tout i ≤ 2n
i =1 i =1 i = n +1 i = n +1 |{z}
| {z } | {z } | {z } =1/2
2n termes = Hn n termes
 
k 1 k+1 k
≥ 1+ + = 1+ . par l’hypothèse d’induction Hn ≥ 1 +
2 2 2 2

En conclusion, pour tout k ≥ 0,

k
H2k ≥ 1 + . (*)
2
La borne (*) implique que la suite n’admet pas de borne finie L :

∀ L : ∃m : ∀n : n > m → Hn > L. (**)

Spécifiquement, pour un L > 0 quelconque, si k = 2( L − 1), alors H2k ≥ 1 + 2k ≥ L


par (*). Or, la suite est strictement croissante, donc avec m = 2k , on a pour tout
n > m, que Hn > Hm ≥ L. Par (**), la série harmonique est divérgente et
limn→∞ Hn = ∞. 
75

8.3 Définitions récursives de ∑ et d’autres grands opérateurs


La définition formelle de ∑i avec des limites réelles correspond à l’addition
dans une boucle 5 i = a, a + 1, . . . ,. 5. Boucle for :
s=0
Définition 8.2 (Définition de la somme). Pour une fonction f et des limites for (i=a; i<=b; i=i+1)
s=s+f(i)
a, b ∈ R quelconques, on définit la notation de somme
 ou boucle tandis-que :

0 si b < a s=0; i=a
b  
∑i = a f (i ) = b
(8.2) while (i <= b)

 f ( a ) + ∑ i = a +1 f ( i ) si a ≤ b s=s+f(i)
i=i+1
et, si la limite existe, // fin-de-boucle maintenant s = ∑ib=a f (i )

∞ b b b Dans les deux cas, l’intérieur de la


∑ f (i) = blim
→∞
∑ f (i ) ∑ f (i ) = lim
a→∞
∑ f ( i ). boucle n’est exécuté que si a ≤ b.
i=a i=a i =−∞ i =− a

Produit des nombres { xi } :



n 1 si k > n
∏ x i = x k x k +1 · · · x n ∏in=k xi =  
i =k
 xk · ∏in=k+1 xi si k ≤ n

Union et intersection d’une famille indexée { Ai } (ensembles Ai ⊆ U dans un univers U) :



n
[ Sn ∅ si k > n
A i = A k ∪ A k +1 ∪ · · · ∪ A n Ai = S 
i=k  Ak ∪ n
i =k i = k +1 Ai si k ≤ n

n
\ Tn U si k > n
A i = A k ∩ A k +1 ∩ · · · ∩ A n Ai = T 
i=k  Ak ∩ n
i =k i = k +1 Ai si k ≤ n

Disjonction et conjonction (avec un prédicat P) :



n
_ Wn 0 si k > n
P ( x i ) ≡ P ( x k ) ∨ P ( x k +1 ) ∨ · · · ∨ P ( x n ) P ( xi ) ≡ W 
i =k  P( xk ) ∨ n
i=k i = k +1 P ( xi ) si k ≤ n
≡ ∃i : ( k ≤ i ) ∧ (i ≤ n ) ∧ P ( xi )

n
^ Vn 1 si k > n
P ( x i ) ≡ P ( x k ) ∨ P ( x k +1 ) ∨ · · · ∨ P ( x n ) P ( xi ) ≡ V 
i =k  P( xk ) ∧ n
i =k  i = k +1 P ( xi ) si k ≤ n
≡ ∀i : ( k ≤ i ) ∧ (i ≤ n ) → P ( xi )

TABLE 8.4: Définitions des grands opérateurs


La démarche de Définition 8.2 est suivie pour définir une «grande» version binaires. Le cas de base (aucun membre)
utilise l’élément neutre, et le cas récursif
d’autres opérateurs binaires : Table 8.4 montre des exemples. Équation (8.2) utilise l’opérateur binaire.
76

peut accommoder des limites non-entières (même si on fait ça rarement) :


TABLE 8.5: Preuve de Théorème 8.1

10 π2 6
Démonstration. Soit n ∈ N arbitraire. (Cas
∑ i = 1+2+3 ∑ x= ∑ ( π + i ) = π + ( π + 1) + · · · + ( π + 6). n = 0) Par (8.2), ∑0i=0 ai = a0 + ∑0i=1 ai =
i =1 x =π i =0
a0 . (Cas n > 0) On définit la fonction
f (k) = an+1−k pour 1 ≤ k ≤ n + 1 : ainsi
Théorème 8.1 considère les sommes sur suites (donc fonctions sur les
f (1) = an , et
naturels), où on peut facilement
 séparer
  soit le premier
 soit le dernier terme
n n +1
pour l’induction : a1 + ∑in=2 ai = ∑in=−11 ai + an pour tout 1 ≤ n. ∑ ai = ∑ f (k)
i =0 k =1
Equations (8.2) et (8.1b) sont des relations de récurrence entre les sommations n +1
de taille croissante. Selon (8.1b), on peut écrire sn = gn (sn−1 ) à tout n ≥ = f (1) + ∑ f (k)
k =2
1, avec la séquence de fonctions gn ( x ) = x + an . La récurrence, avec la par (8.2)

condition initiale s0 = a0 en fait définit la suite {sn }. Une définition récursive n −1


= an + ∑ ai .
comme (8.1b) est une bonne définition 6 : il n’y a qu’une suite unique {sn } i =0

qui satisfait les conditions initiales et les relations de récurrence. 


6. «Bien défini» (well-defined en anglais)
Théorème 8.4 (Bonne définition par récurrence). Soit gn : A → A une car il n’y a pas d’ambiguïté : la relation de
récurrence admet une solution unique.
fonction (la relation de récurrence) pour tout n. Si ∀n : an+1 = gn ( an ),
alors f : N → A, f (n) = an est une fonction unique satisfaisant f (0) = a0 et
∀n : f (n + 1) = gn ( f (n)).
Démonstration. La séquence { an } est une fonction a : N → A, donc f = a est une
solution avec f (0) = a0 et ∀n : f (n + 1) = gn ( f (n)). On montre que c’est une
solution unique. Supposons que h : N → A est une fonction avec h(0) = a0 , et
h(n + 1) = gn (h(n)) pour tout n. On montre par induction que h(n) = f (n) pour
tout n. (base) f (0) = a0 et a0 = h(0), donc f (0) = h(0). (induction) Supposons que
h(n) = f (n) pour un n quelconque. Alors h(n + 1) = gn (h(n)) = gn ( f (n)) = f (n + 1).
par H.I.
(conclusion) On a f (n) = h(n) pour tout n ∈ N. 

Récurrences pour ∑ et preuves par induction


Définition 8.2 sépare le premier terme pour la récurrence (somme est
l’addition du premier élément et la somme de la reste ). On peut également
faire la récurrence par le dernier terme (Théorème 8.1) :

n  a0 { n = 0}
∑ i   n −1 a  + a { n > 0 }
a = (8.3)
i =0 ∑ i =0 i n

La définition récursive invite des preuves par induction. Les preuves suivantes
utilisent la récurrence (8.2) avec le premier terme et (8.3) avec le dernier
terme.
n
Théorème 8.5 (Somme unaire). un = ∑1=n pour tout n ∈ N.
i =1

Preuve par induction en n. (base) u0 = 0 par définition de ∑. (induction) Supposons


que um = m pour un m ≥ 0. Par la définition de somme, um+1 = 1 + ∑im=+21 1.
Avec un changement de variable j = i − 1, on a um+1 = 1 + ∑m j=1 1 = 1 + um = 1 + m.
(conclusion) un = n vaut pour tout n ∈ N. 
La définition récursive invite des preuves par induction. Les preuves sui-
vantes utilisent la récurrence de (8.3) dans l’induction.
n
Théorème 8.5 (Somme unaire). un = Â1=n pour tout n 2 N. 77
i =1

Preuve par induction en n. (base) u0 = 0 par définition de Â. (induction) Supposons que um = m pour un m 0. Par la définition
de somme, um+1 = 1 + Âim=+21 1. Avec un changement de variable j = i 1, on a um+1 = 1 + Âm
j=1 1 = 1 + um = 1 + m.
Théorème 8.6
(conclusion) un(Nombres
= n vaut pour tout n 2 N. Pour tout n ∈ N,
triangulaires). ⌅

Théorème 8.6 (Nombres triangulaires).


n
Pour tout n 2 N, TABLE 3: Les8.6:
TABLE nombres triangulaires.
Les nombres triangu-
n ( n + 1)
tn = ∑n i = (8.4) laires tn = ∑nk=1 k.
n(n 2+ 1)
Â0 i =
tn = i=
2
(8.4) n
0
tn
0
i =0
1 1
Preuve par induction en n. 2 1+2 = 3
0(0+1) 3 1+2+3 = 6
Preuve part0induction 0+1n.
(base) = 0 = 0(en ) Preuve 1 Supposons
. (induction)
2 que tm t=0 m
par (8.2) (base) 0 = un m
= pour 2 2 .N.
(induction) 4 1 + 2 + 3 + 4 = 10
m ( m +1) ! ! 5 1 + 2 + 3 + 4 + 5 = 15
Supposons que tm = 2m+1 pour unmm+1 ∈ N.m m m
...
t m +1 = Â k = 0 + Â k = Â ( j + 1) = Â j! + Â 1
j =0
!
m +1 k =0
m +1 k =1
m m mj=0 j =0
t m +1 = ∑ k = 0+ ∑mk(m=+∑1)( j++(m1)+=1) ∑ j
=
+ ∑1 changement de variable j = k − 1
par H.I. et Théorème 8.5
k =0 k =1 2 j =0 j =0 k =0
 
m(m + 1) = (m +m1)(m + 2m ) ( m + 1)
= + 1 + ∑ 21 = . + (1 + m ) par H.I. et Théorème 8.5
2 k =1
2
(conclusion) Ainsi, tn = n(n + 1)/2 pour tout n. ⌅
(m + 1)(m + 2)
=union .
2
strings, length concatenation
(conclusion)
logicalAinsi, tn =bine
formulae + 1)/2 pour tout n.
n(nformée
m ( m +1)
Preuveplancher
2 par (8.3). (induction) Supposons que tm =
plafond 2 pour un m ∈ N.
encodage binaire !
m +1 m
t m +1 = ∑ k= ∑k + ( m + 1) récurrence avec dernier terme
k =0 k =0
m ( m + 1) (m + 2)(m + 1)
= + ( m + 1) = . par H.I.
2 2

8.4 Suites récurrentes


Une relation de récurrence définit chaque terme d’une suite { an } à partir des membres précédents. Dans un cas

générique, la relation de récurrence est la suite des fonctions gn = ( a0 , a1 . . . , an−1 ) 7→ an qui engendrent les
membres
a n = g n ( a 0 , . . . , a n −1 ).

Si la relation est une suite de fonctions d-aires gn : Ad → A, la récurrence est d’ordre d. Les conditions initiales
définissent les éléments initiaux sans dépendance. La récurrence avec les conditions initiales engendrent une fonction bien
définie (Théorème 8.4). La solution de la récurrence est une formule explicite pour la même fonction. Par exemple, la
suite des nombres triangulaires, définie par t0 = 0 et tn = tn−1 + n admet la solution explicite tn = n(n + 1)/2. Afin
de démontrer qu’une formule particulière est la solution de la récurrence (Théorème 8.4), on montre que la formule
satisfait les conditions initiales, ainsi que la relation de récurrence.
Les définitions récursives de la somme et du produit donnent immédiatement la solution à des relations de récur-
rence d’ordre 1 quand an dépend de an−1 :
n
a n = a n −1 + f ( n ) ↔ a n = a0 + ∑ f ( i ) (8.5a)
i =1
n
g n = g n −1 · h ( n ) ↔ g n = g0 · ∏ h ( i ) (8.5b)
i =1
78

Dans le cas des suites arithmétiques et géométriques, les sommes et produits


dans (8.5) peuvent être simplifiés 7 à des expressions fermées (qui contiennent 7. Avec la suite arithmétique de (8.6), on a
un nombre constant d’opérations pour le calculer), voir (8.6) et (8.7). On n
an = a0 + ∑ d = b + nd;
trouve une expression fermée pour la récurrence d’ordre 2 des nombres i =1

Fibonacci, mais la solution pour factorielles (récurrence d’ordre 1) garde le avec la suite géométrique de (8.7), on a
produit ∏. n
g n = g0 · ∏ q = a · q n .
i =1

Suite arithmétique
Définition 8.3. Une suite { an } est une progression arithmétique si la
différence ( an+1 − an ) entre les membres consécutifs est constante.

Une suite arithmétique est engendrée par la récurrence an = an−1 + d


avec une différence constante d, à partir de l’élément initial.
TABLE 8.7: Les nombres pairs positifs
 forment une progression arithmétique avec
b si n = 0 a0 = 2 et an = an−1 + 2.
an = ↔ a = b + nd . (8.6)
 a n −1 + d si n > 0 | n {z } n an
solution 0 2
| {z }
récurrence 1 4
2 6
3 8
4 10
5 12
Suite géométrique 10 22
15 32
Définition 8.4. Une suite { gn } est une progression géométrique, si le 20 42
rapport entre les membres consécutifs est constant : pour tout n ≥ 0, gn+1 = q · gn 25 52
...
avec un facteur (la raison) q.

TABLE 8.8: Suite géométrique avec facteur


Une suite géométrique est engendrée par une relation de récurrence gn = q = 3.
q · gn−1 avec une constante q, à partir de l’élément initial.
q n +1 −1
 n qn ∑in=0 qi q −1
a si n = 0 0 1 1 (3 − 1)/2
gn = ↔ gn = a · q n . (8.7) 1 3 4 (9 − 1)/2
 gn −1 · q si n > 0 2 9 13 (27 − 1)/2
3 27 40 (81 − 1)/2
4 81 121 (243 − 1)/2
5 243 364 (729 − 1)/2
Théorème 8.7 (Série géométrique). Soit {qk }∞ k =0 une suite géométrique avec un 10 59049 88573 ·
facteur q 6= 0, 1. Alors la somme des termes est 15 14348907 21523360 ·
20 3486784401 5230176601 ·
25 847288609443 1270932914164 ·
n
q n +1 − 1 1 − q n +1 ...
∑ qk = q−1
=
1−q
pour tout n ∈ N
k =0

TABLE 8.9: Suite géométrique


La limite existe n → ∞ ssi |q| < 1 :
q = (−1/2) : la série converge vers 2/3.

∞ n qn ∑in=0 qi
1
∑ qk =  la série géométrique converge ssi |q| < 1 0 1 1
k =0
1−q 1 −1/2 0.5
2 1/4 0.75
3 −1/8 0.625
4 1/16 0.6875
5 −1/32 0.65625
10 10−3 0.66602
15 −3 · 10−5 0.66665
20 10−6 0.66666
...
79

Démonstration. Soit Gn = ∑nk=0 qk . On multiplie par q :


n   n +1  n   
q · Gn = ∑ q · qk = ∑ q j = ∑ q j + qn+1 − q0 = Gn + qn+1 − 1
k =0 j =1 j =0
j = k+1

(q − 1) Gn = qn+1 − 1,

d’où Gn = (qn+1 − 1)/(q − 1) car q 6= 1. Quand |q| < 1, limn→∞ qn+1 = 0, et la


série converge vers 1/(1 − q). 

F IGURE 8.4: Portrait de Leonardo


Nombres Fibonacci
F IBONACCI (1175–1250), inventeur des
nombres Fibonacci. [Illustration dans Por-
La suite des nombres Fibonacci est définie par la récurrence
traits et histoire des Hommes utiles : Hommes et
 femmes de tous pays et de toutes conditions qui
0 si n = 0

 ont acquis des droits à la reconnaissance publique
par des traits de dévouements, de charité, par des
Fn = 1 si n = 1 fondations philanthropiques, par des travaux, des


 tentatives, des perfectionnements, des découvertes
Fn−1 + Fn−2 si n > 1
utiles à l’Humanité. Montyon & Franklin,
1833–1838]
avec solution√proche à une progression géométrique avec raison du nombre
d’or φ = 1+2 5 = 1.618 · · · : TABLE 8.10: Nombres Fibonacci.

 √ n  √ n n Fn
1+ 5
2 − 1−2 5 0 0
Fn = √  formule de Binet (8.8) 1 1
5 2 1
3 2
Preuve de la formule de Binet. La relation de récurrence est satisfaite par toute fonc- 4 3
tion f (n) = α(q1 )n + β(q2 )n avec α, β ∈ R si q1 , q2 sont les racines de q2 = q + 1 : 5 5
6 8
 
α(q1 )n + β(q2 )n = α (q1 )n−1 + q1n−2 + β (q2 )n−1 + (q1 )n−2 7 13
8 21

9 34
avec q1,2 = 1±2 5 . Les conditions initiales f (0) = 0 et f (1) = 1 sont satisfaites quand
10 45
α = − β = √1 . En conclusion, Fn = f (n) pour tout 0 ≤ n.  15 610
5
20 6765
25 75025
Factorielles ...

La factorielle n! est le produit des n premiers entiers positifs. TABLE 8.11: Factorielles.

1 si n = 0 n n!
n! = 0 1
n · (n − 1)! si n > 0 1 1
2 2
Ainsi, 3 6
n 4 24
n! = ∏ k = 1| · 2 · 3 · 4 · ·{z· · (n − 1) · n} 5 120
k =1 6 720
n facteurs 7 5040
On note que pour la somme des logarithmes, 8 40320
9 362880
n  n  10 3628800
∑ lg n = lg ∏ k = lg(n!). 15 1307674368000
i =1 k =1 20 2432902008176640000
25 15511210043330985984000000
...
9 Structures récursives

L E S S T R U C T U R E S fondamentales en informatique, incluant les chaînes, les


listes et les arbres, sont définies par une récurrence structurale. Une liste non-
vide comprend une tête suivi par une liste plus courte, et un arbre non-vide
combine des arbres plus petits avec une racine commune. On démontre les
propriétés des structures récursives par induction mathématique. On définit les
nombres naturels aussi par récurrence, à l’aide du successeur.

9.1 Structures récursives

La notion de définition récursive s’étend aux séquences dans un domaine


arbitraire, et plus généralement, aux ensembles dont les membres sont définis
par récurrences. Selon la définition récursive, l’ensemble contient exactement
les éléments spécifiés par le (ou un) cas de base, et les éléments qu’on obtient
par une séquence finie d’applications des récurrences à partir des éléments de
base.

Successeur dans la théorie axiomatique et les ordinaux finis

Dans la théorie axiomatique, on représente les entiers naturels par en-


sembles, construits à partir de la seule constante ∅ (qui existe selon l’Axiome
de l’ensemble vide).

Définition 9.1 (John von Neumann). On définit le successeur 1 d’un en- 1. Ernst Zermelo, en proposant l’axiome de
semble A par l’infini, a défini la fonction de successeur
comme s( A) = { A}. La définition de von
Neumann a beaucoup d’avantages : entre
s ( A ) = A ∪ { A }. (9.1) autres, le fait que l’entier n est representé par
un ensemble de n éléments.

La fonction de successeur de (9.1) est une injection et elle est définie pour
tout ensemble. On définit l’ensemble des ordinaux finis N avec la propriété

∅∈N et, pour tout x, x ∈ N → s( x ) ∈ N,

Définition 9.2 (Les ordinaux finis). Un ordinal fini est (i) soit l’ensemble vide
∅ ; (ii) soit x ∪ { x } où x est un ordinal.

L’ensemble récursif des ordinaux finis existe par l’Axiome d’infini et il sert
comme un modèle pour les nombres naturels. En particulier, on construit une
82

structure pour les nombres naturels :

0=∅
1 = s (0) = {0} = { ∅ },

2 = s(1) = {0, 1} = ∅, {∅} ,
n  o
3 = s(2) = {0, 1, 2} = ∅, {∅}, ∅, {∅}
 n o
 
4 = s(3) = {0, 1, 2, 3} = ∅, {∅}, ∅, {∅} , ∅, {∅}, ∅, {∅}

etc.

Dans cette structure, le nombre naturel n correspond à un ensemble des n


ordinaux précédents : n = {0, 1, . . . , n − 1}. Ainsi, l’ordre ≤ dans N est
défini immédiatement par des relations d’inclusion et d’appartenance :

n≤m↔n⊆m
n < m ↔ n ∈ m.

La relation ≤ est un bon ordre parmi les ordinaux : le minimum dans un A ⊆


T
N est défini par intersection min A = n∈ A n quand A 6= ∅.

Chaînes et concaténation
On définit l’ensemble des chaînes finies A∗ = ∪∞ `
`=0 A par récurrence avec
l’opération fondamentale du domaine, la concaténation · (souvent omise dans
les expressions).

Définition 9.3 (Chaîne de caractères). Soit A un ensemble fini. On définit les


chaînes finies de l’alphabet A à l’aide de l’opération de concaténation : w est
une chaîne si (i) soit w = λ, la chaîne vide (ii) soit w = a · u = au avec une
chaîne u et le caractère a ∈ A. La concaténation est définie par

v si w = λ
w · v = wv = (9.2)
 a(uv) si w = au avec a ∈ A et u ∈ A∗

L’ensemble des chaînes finies est dénoté par A∗ :

w ∈ A∗ ↔ (w = λ) ∨ (∃ a ∈ A : ∃u ∈ A∗ : w = au) .
| {z } | {z }
cas de base cas récursif
83

Listes et arbres
Les principes fondamentaux d’organisation de données, notamment les
arrangements séquentiel et hiérarchique, correspondent à des structures qu’on
peut définir récursivement. Les listes (Déf. 9.4) et les arbres (Déf. 9.5) sont des
structures auto-similaires. Une liste non-vide est la combinaison de sa tête et la
sous-liste après. Un arbre non-vide est une collection de sous-arbres joints à
une racine commune. liste vide liste non-vide
c’est une liste
Définition 9.4. Une liste est (i) soit la liste vide ; (ii) soit un couple ( x, L) avec tête
une liste L.

F IGURE 9.1: Une liste est soit une liste null


Définition 9.5. Un arbre enraciné (ou arborescence) est (i) soit l’arbre vide (un (un seul nœud externe), soit un couple formé
nœud externe) ; (ii) soit un tuple ( x, T1 , . . . , Td ) composé d’un nœud interne x par un nœud interne (la tête) et d’une autre
liste (la queue).
(la racine) et d > 0 arbres Ti (les enfants).

? le degré d peut varier chez les nœuds ; d > 1 est en général assumé
? degré constant : arbre d-aire (arbre binaire : d = 2 ; liste : d = 1) arbre vide
? en informatique, on travaille typiquement avec des arbres ordonnés : il y a racine

un ordre parmi les enfants (p.e., enfant gauche et droit), mais certaines ap-
plications demandent des enfants non-ordonnés (p.e. phylogénie d’espèces)

Syntaxe c'est un arbre c'est un arbre

On définit le syntaxe pour des expressions bien formées comme un sous- c'est un arbre

ensemble des chaînes d’un alphabet A. arbre non-vide


F IGURE 9.2: Un arbre enraciné est soit un
Définition 9.6 (Syntaxe de logique propositionnelle). L’ensemble F ⊆ A∗ de arbre null (nœud externe), ou il est composé
formules bien formées : d’un nœud interne (la racine) et un ensemble
d’arbres enracinés (les enfants).
? alphabet A = S ∪ V ∪ C avec symboles S = {(, ), ∧, ∨, ¬, →}, variables
propositionnelles V = { p, q, . . . }, constantes C = {0, 1}.
? formule atomique V ∪ C ⊆ F : variables p ∈ V et constantes 0, 1 sont membres
? formule composée : (¬φ) ∈ F, (φ) ∈ F avec φ ∈ F ; et

(φ → ψ) ∈ F (φ ∧ ψ) ∈ F (φ ∨ ψ) ∈ F

avec φ, ψ ∈ F.
84

9.2 Induction structurale


Typiquement, on démontre les théorèmes sur les structures récursives par
induction 2 2. On peut imaginer qu’on examine le n-ème
application de règles récursives pour
(base) on montre le théorème pour les cas de base de la structure ; engendrer un élément : n = 0 est un cas de
base, 0 < n est une application avec des
(induction) on montre que le théorème est valide pour des instances en-
éléments engendrés par k < n applications
gendrées par les règles récursives. des règles. Donc une preuve par induction
généralisée dans n est une preuve par
Cette même démarche est suivie pour démontrer les propriétés des fonctions, induction structurale.
opérateurs et relations définies par récurrence en concomitance avec la struc-
ture. On peut concevoir des preuves analogues par induction dans N, avec
une mesure de «taille» de la structure. Les preuves des Théorèmes 9.1–9.3 sont
des exemples de ces techniques.

Théorie de chaînes avec concaténation


On établit les propriétés de la fonction de longueur et de l’opération de
concaténation par induction, à partir de la Définition 9.3.

Définition 9.7. On définit la longueur de chaîne w ∈ A∗ , dénotée par |W | :



0 si w = λ
|w| = (9.3)
1 + | u | si w = au avec a ∈ A et u ∈ A∗

Théorème 9.1 établit que la longueur des chaînes est additive par concaté-
nation.

Théorème 9.1. Pour toutes chaînes u, v ∈ A∗ ,

|uv| = |u| + |v|. (9.4)

Preuve par induction structurale. On démontre que |uv| = |u| + |v| par induc-
tion u. (base) Si u = λ, alors |u| = 0, et, par la définition de la concaténa-
tion, uv = λv = v. Donc |λv| = |v| = 0 + |v| = |u| + |v|. (induction)
Soit u = aw avec a ∈ A et w ∈ A∗ , et supposons que pour tout v ∈ A∗ , on
a |wv| = |w| + |v|.

|uv| = |( aw)v| = | a(wv)| cas récursif de concaténation (9.2)


= 1 + |wv| cas récursif de longueur (9.3)
= 1 + |w| + |v| hypothèse d’induction
= | u | + | v |.

(conclusion) |uv| = |u| + |v| pour tout |u| ∈ N (ou u ∈ A∗ ). 

Preuve de Théorème 9.1 par induction sur |u|. On démontre que |uv| = |u| +
|v| par induction sur |u| ∈ N. (base) Si |u| = 0, alors u = λ, et, par
définition de la concaténation : λv = v. Donc |λv| = 0 + |v| = |v|.
85

(induction) Supposons que l’égalité (9.4) du théorème est valide pour tous
mots de longueur ` pour un ` ∈ N, et soit |u| = ` + 1. Alors u = aw avec
a ∈ A et w ∈ A∗ .

|uv| = |( aw)v| = | a(wv)| cas récursif de concaténation (9.2)


= 1 + |wv| cas récursif de longueur (9.3)
= 1 + |w| + |v| hypothèse d’induction
= | u | + | v |.

(conclusion) |uv| = |u| + |v| pour tout |u| ∈ N (ou u ∈ A∗ ). 

L’opération de concaténation de Définition 9.3 est fondamentale dans le


domaine des chaînes. Elle n’est pas commutative

∃α∃ β : αβ 6= βα,

mais elle est associative

∀α∀ β : (αβ)γ = α( βγ).

On démontre les propriétés d’une opération par induction. Théorème 9.2 éta-
blit que λ est l’élément neutre (comme le 1 pour multiplication des entiers).

Théorème 9.2. La chaîne vide est l’élément neutre de concaténation : pour tout α ∈
A∗ ,
λα = αλ = α. (9.5)

Démonstration. Dans (9.5), λα = α par (9.2). On démontre αλ = α par induction.


(base) Si α = λ, alors λλ = λ par (9.2). (induction) Supposons que βλ = λ pour tout
β ∈ A` avec une longueur ` ∈ N. Soit α = aβ de longueur |α| = ` + 1. Par (9.3),
| β| = `. Maintenant,

αλ = ( aβ)λ
= a( βλ) cas récursif de concaténation
= aβ = α par hypothèse d’induction

(conclusion) αλ = α pour toute chaîne α. 


86

Induction avec arbres


1 arbre avec n = 0, m = 1
Théorème 9.3 établit la relation entre les nombre de nœuds externes et et
de nœuds internes dans un arbre binaire.

Théorème 9.3. Un arbre binaire avec n nœuds internes contient m = n + 1 nœuds 1 arbre avec n = 1, m = 2

externes.
Preuve par induction structurale. (base) Un arbre vide comprend m = 1 nœud
externe et n = 0 nœud interne. (induction) Soit T = ( x, T1 , T2 ) un arbre 2 arbres avec n = 2, m = 3
binaire non-vide. avec m nœuds externes et n nœuds internes. Soit m1 , n1 et
m2 , n2 le nombre des nœuds externes et internes dans les sous-arbres T1 , T2 , et
supposons que m1 = n1 + 1 et m2 = n2 + 1. L’arbre T contient 1 nœud
interne (sa racine), et les nœuds des sous-arbres, donc n = 1 + n1 + n2 et

m = m1 + m2 = (n1 + 1) + (n2 + 1) = (n1 + n2 + 1) + 1.

Donc m = n + 1. (conclusion) Dans tout arbre binaire, m = n + 1. 

Preuve de Théorème 9.3 par induction sur n. Un arbre vide comprend m = 1


nœud externe et n = 0 nœud interne. Soit T = ( x, T1 , T2 ) un arbre binaire 5 arbres avec n = 3, m = 4

arbitraire avec 0 < n nœuds internes, et supposons que le théorème est F IGURE 9.3: Arbres binaires avec n ≤ 3
correct pour tout arbre binaire avec (n − 1) nœuds internes au plus. Soit nœuds internes et m ≤ 4 nœuds externes
m1 , n1 et m2 , n2 le nombre des nœuds externes et internes dans les sous-arbres
T1 , T2 . On a et donc n1 < n, n2 < n. Par l’hypothèse d’induction avec
les sous-arbres : m1 = n1 + 1 et m2 = n2 + 1. Ainsi m = m1 + m2 et
m = n + 1. 
was forgotten. A promise of Zariski in 1924, to reestablish Peano’s priority
was apparently not kept (see [5, p. 321] for details).

4. Arithmetic
Peano proposed six axioms to define natural numbers. 87We list them as
follows: the primitive notions N0 , 0 and an operation fulfill the following
axioms:
P0. N0 is a set,
P1. 0 2 N0 ,
9.3 Construction des entiers P2. (n) 2 N0 for every n 2 N0 ,
P3. if S is a set, 0 2 S and (S) ⇢ S, then N0 ⇢ S,
P4. is injective,
C’était au début de la XXe siècle que Giuseppe P EANO a établi une axio-P5. (n) 6= 0 for every n 2 N0 .
matisation rigoureuse des entiers naturels par induction. Notamment, cinq
[. . .]
axiomes fondamentaux sur le successeur et l’induction mathématique suffisent
pour définir l’arithmétique avec cinq axiomes additionnels. L’arithmétique
s’étend aux entiers négatifs qu’on obtient en ajoutant les inverses additifs. L’en-
semble des ordinaux finis (Déf. 9.2) avec le successeur s( x ) = x ∪ { x } est une
structure qui satisfait les axiomes, et ainsi elle est un modèle pour les nombres
naturels.

F IGURE 9.4: Les axiomes de base dans


Axiomes de Peano Figure 4. Here are Peano’s six axioms of arithmetic as
Formulario mathematico, 1908. Écrit[37,
en latino
they appear in Formulario mathematico (1908), p. 27]
sinecomments
(Peano’s flexione,are
uneinlangue inventée
latino sine par
flexione).
Définition 9.8 (Axiomes de Peano). Le premier axiome établit l’existence de 0. Peano. Axiome 0 déclare
It follows from the axioms of Peano thatque (dénoté
N0 isNinfinite in the sense of Peirce
(No 1) 0 est un nombre naturel : 0 ∈ N . and Dedekindpar N0 the
(since ici) map
est un ensemble.
: N0 ! N0 Le symbol ⊃
is injective but not surjective)
and that N0 is signifie implication
a minimal infinite matérielle
set (because→.of the induction principle
Propriétés du successeur s ⊂ N × N : P3). In the introduction to Arithmetices principia, nova methodo exposita
[32, (1889)] Peano writes (13)
(No 2) s est une fonction ∀n ∈ N : s(n) ∈ N ,
12
In Zermelo’s Axiom of Choice [27, (1982) pp. 2, 80] Moore writes: “. . . in 1904 Ernst
(No 3) il induit N : Zermelo first formulated the Axiom of Choice” and “Peano [1890] was the first to reject
the use of [the principle of] infinitely many arbitrary choices.” Moore seems not to see a
∀I : (0 ∈ I) ∧ (∀n : n ∈ I → s(n) ∈ I) → (N ⊆ I) temporal contradiction in a rejection of something that was formulated 14 years later.
13 Translation from Latin is taken from Kennedy [23, (1973)].
base induction

(No 4) s est une injection :



∀k ∈ N : ∀n ∈ N : s(k) = s(n) → (k = n)
,
(No 5) le 0 n’a pas de prédecesseur : ∀n ∈ N : s(n) 6= 0 .
Définition 9.8 établit la structure des nombres naturels par une définition
récursive : tout n ∈ N est soit 0, soit le successeur d’un autre nombre naturel
n ∈ N ↔ n = 0 ∨ ∃ m ∈ N : n = s ( m ).
Ainsi N est le plus petit ensemble inductif dans Axiome No 3. Les autres
axiomes définissent les opérations avec récurrences par le successeur et cas
de base avec 0. Toute structure qui satisfait les axiomes No 1–5, comme les
ordinaux de Définition 9.2, permet ainsi la définition de l’arithmétique des
entiers naturels.
Définition 9.9 (Arithmétique de Peano). L’opération d’addition satisfait la
récurrence :
(No 6) ∀ a : a + 0 = a ,
(No 7) ∀ a : ∀b : a + s(b) = s( a + b)
L’opération de multiplication satisfait la récurrence :
(No 8) ∀ a : a · 0 = 0 ,
(No 9) ∀ a : ∀b : a · s(b) = ( a · b) + a
(No 10) Les entiers naturels sont ordonnés par ≤, satisfaisant l’axiome
∀ a ∈ N : ∀b ∈ N : ( a ≤ b) ↔ (∃c ∈ N : a + c = b)
88

Propriétés des opérations arithmétiques


Les propriétés fondamentales de l’arithmétique (voir Table 9.2) découlent
des définitions récursives. L’égalité s(n) = n + 1 découle des Axiomes No 3
et 4 par n + 1 = n + s(0) = s(n + 0) = s(n). On démontre seulement la
commutativité de l’addition.

Théorème 9.4 (Commutativité de l’addition). Pour tout a, b ∈ N,

a + b = b + a. (9.6)

La preuve du Théorème 9.4 demande deux lemmes qui serviront dans


l’étape de base et l’étape inductive.

Lemme 9.5.
∀a : a + 0 = 0 + a (9.7)

Preuve par induction en a. (base) 0 + 0 = 0 + 0 par la réfléxivité d’égalité (et 0 + 0 = 0


par Axiome No 6). (induction) Supposons que a + 0 = 0 + a pour un a ∈ N. Alors
s( a) + 0 = s( a) par Axiome No 6, et 0 + s( a) = s(0 + a) par Axiome No 7. Or,
s(0 + a) = s( a + 0) = s( a) par substitution selon l’hypothèse d’induction, suivi par
substitution a + 0 = a selon Axiome No 6. Ainsi, s( a) + 0 = 0 + s( a). (conclusion)
Par l’Axiome No 3, N ⊆ { a| a + 0 = 0 + a}, donc pour tout a ∈ N, on
a a + 0 = 0 + a. 

Lemme 9.6.

∀ a ∈ N : ∀ b ∈ N : s ( a ) + b = a + s ( b ). (9.8)

Preuve par induction en b. Soit a ∈ N arbitraire. (base) Soit b = 0. Alors


s( a) + 0 = s( a) par Axiome No 6, et a + s(0) = s( a + 0) par Axiome No 7. Or,
( a + 0) = a par Axiome No 6, donc s( a + 0) = s( a), et on a s( a) + 0 = a + s(0).
(induction) Supposons que s( a) + b = a + s(b) avec a, b ∈ N quelconques.

s( a) + s(b) = s s( a) + b No 7
= s( a + s(b)) H.I.
= a + s(s(b)) No 7

(conclusion) Pour tout b ∈ N, on a s( a) + b = a + s(b). 

Preuve du Théorème 9.4. Soit a ∈ N arbitraire. On démontre que a + b = b + a


pour tout b par induction. (base) Par Lemme 9.5, a + 0 = 0 + a. (induction) Suppo-
sons que a + b = b + a pour un b ∈ N. On a

a + s(b) = s( a + b)= s(b + a)= b + s( a)= s(b) + a


Axiome No 7 H.I. Axiome No 7 Lemme 9.6

(conclusion) Éq. (9.6) est vraie pour tout b. 


89

Les entiers négatifs


L’ensemble des entiers naturels est clos pour l’opération d’addition. En plus, l’addition est régulière : à partir de a + x =
b + x, on peut déduire que a = b. Par contre l’opération n’est pas inversible en général parce que a + x = 0 n’a pas de
solution pour x quand a 6= 0. On obtient les entiers (signés) en ajoutant les inverses additifs aux entiers naturels

Z = N ∪ {− a| a ∈ N}
| {z }
0 et les entiers négatifs

où − a est la notation usuelle de l’inverse additif (l’opposé) de a ∈ Z avec les TABLE 9.1: Preuve de a = −(− a) à partir
propriétés : des axiomes.
a + (− a) = (− a) + a = 0
(− a) + a = 0 inverse gauche de a
Ainsi, on définit la soustraction par a − b = a + (−b) , pour laquelle (− a) + −(− a)) = 0 inverse droit de − a
l’ensemble Z est fermé. On peut démontrer d’autres propriétés de l’inverse et
a = −(− a) régularité
de la soustraction à partir des axiomes : v. Table 9.1 pour un exemple.

Ordre : pour tout a, b, c,

( a ≤ a) réflexivité
( a ≤ b ∧ b ≤ a) → ( a = b) anti-symétrie
( a ≤ b ∧ b ≤ c) → ( a ≤ c) transitivité
( a ≤ b) ∨ (b ≤ a) totalité

Opérations arithmétiques : pour tout a, b, c,

a + (b + c) = ( a + b) + c associativité a(bc) = ( ab)c


a+b = b+a commutativité ab = ba
distributivité a(b + c) = ( ab) + ( ac)
a+0 = a identité a·1 = a
absorption a·0 = 0
( a + b = a + c) → (b = c) régularité ( a 6= 0 ∧ ab = ac) → (b = c)

Opérations et ordre : pour tout a, b, c, d,

( a ≤ b) → ( a + c ≤ b + c) stabilité (0 ≤ c ) ∧ ( a ≤ b ) → ( a · c ≤ b · c )
( a + c ≤ b + c) → ( a ≤ b) (0 < c ) ∧ ( a · c ≤ b · c ) → ( a ≤ b )
( a ≤ b) ∧ (c ≤ d) → ( a + c ≤ b + d)

TABLE 9.2: Propriétés des opérations


arithmétiques et l’ordre parmi les entiers (N
ou Z). L’élément neutre de la multiplication
est dénoté par 1 = s(0).
10 Examen intra : liste de sujets et références Les références sont aux livres de Rosen,
10.1 Logique propositionnelle versions française [2002] et anglaise [2012,
7e édition]. La référence CS2013 donne la
correspondance au Corpus de savoir du B.Sc.
? logique propositionnelle : propositions, variables propositionelles, formules en informatique, défini dans le Computer
bien formées (v. définition formelle sous Récursion) Science Curricula de ACM/IEEE Joint Task
Force (2013).
? connecteurs logiques : ¬, ∧, ∨, →, ↔, ⊕ (ou exclusif)
TABLE 10.1: Références — logique proposi-
? table de vérité tionnelle
? équivalence logique, tautologie, contradiction . RosenFR §1.1, §1.2
?? forme normale disjonctive et forme normale conjonctive . RosenEN §1.1–§1.3
. notes de cours 1, diapos 1.1–1.3
.. :forme normale disjonctive,
(fr)
10.2 Calcul des prédicats :forme normale conjonctive (lecture
(fr)
recommandée sur les formes normales)
? logique des prédicats : prédicats, domaines CS2013 (DS/Basic Logic) propositional logic,
logical connectives, truth tables, normal forms
? quantificateurs : ∀, ∃, ∃! (existence + unicité)
? quantificateurs imbriqués TABLE 10.2: Références — logique des
prédicats
10.3 Inférence logique . RosenFR §1.3
. RosenEN §1.4, §1.5
? inférence logique : arguments, prémisses, conclusion, axiomes, règles . notes de cours 2, diapos 2.1–2.3
d’infèrence, démonstration CS2013 (DS/Basic Logic) predicate logic,
universal and existential quantification
? règles d’inférence dans logique des propositions : modus ponens, modus
tollens TABLE 10.3: Références — inférence
?? addition, simplification, conjonction, syllogismes hypothétique et disjonc- logique

tive, résolution . RosenFR §3.1


. RosenEN §1.6
? règles d’inférence dans logique des prédicats : égalité, substitution, générali-
.. Philipp Keller. Introduction à la logique :
sation et instanciation des quantificateurs La logique classique des propositions et des
prédicats. Département de Philosophie,
?? déduction naturelle : ` (séquents), supposition et preuves conditionnelle, Université de Genève. 2007. Chapitre 6
règles d’élimination et d’introduction « La déduction naturelle ». http://philipp.
philosophie.ch/teaching/logique.pdf.
(lecture recommandée sur la déduction
10.4 Preuves naturelle)
. notes de cours 3, diapos 3.1–3.4
? notions basiques : implication, inverse, réciproque, contraposée, négation CS2013 (DS/Basic Logic) propositional
et contradiction inference rules

? preuve mathématique, théorème, lemme, corollaire, conjecture


TABLE 10.4: Références — preuves
? preuve directe, preuve par contraposition (preuve indirecte), preuve par . RosenFR §3.1
contradiction (réduction à l’absurde) . RosenEN §1.7, §1.8
?? preuve par élimination . notes de cours 4, diapos 4.1–4.2
CS2013 (DS/Proof Techniques) notions
? preuve d’équivalence : si et seulement si
of implication, equivalence, converse, inverse,
? preuve d’existence, preuve d’unicité, preuve par contre-exemple contrapositive, negation, and contradiction ;
structure of mathematical proofs, direct proofs,
proof by contradiction
92

TABLE 10.5: Références — ensembles


10.5 Ensembles
. RosenFR §1,4, §1.5
? ensembles : définition par extension, compréhension ou image ; apparte- . RosenEN §2.1, §2.2
nance, égalité . notes de cours 5, diapos 5.1–5.3
CS2013 (DS/Sets) Sets : union, intersection,
? opérations ensemblistes : intersection, union, complément, différence, complement ; power sets, cardinality of finite sets
différence symétrique
? sous-ensembles, ensemble de puissance, ensembles d’ensembles
? cardinalité d’ensembles finis
? ? ? théorie axiomatique d’ensembles TABLE 10.6: Références — relations et
? ? ? paradoxe de Russell fonctions
. RosenFR §1,6, §6.1
. RosenEN §2.3, §9.1
10.6 Relations et fonctions
. notes de cours 6, diapos 6.1–6.2
? produit cartésien, couples CS2013 (DS/Sets) Sets : Cartesian product.
Relations : reflexivity, symmetry, transitivity ;
? relation binaire, propriétés : réfléxivité et anti-réfléxivité, symétrie et anti- equivalence relations, partial orders. Functions :
symétrie et asymétrie, transitivité surjections, injections, bijections ; inverses,
composition
? relation d’équivalence, ordre partiel, ordre strict et ordre total
? fonction, domaine, co-domaine
? injection, surjection, bijection
? inverse (réciproque) des relations et des fonctions
? composition de fonctions
? ? ? cardinalité d’ensembles, diagonalisation de Cantor TABLE 10.7: Références — séquences
. RosenFR §1,7, §3.2
10.7 Séquences . RosenEN §2.4, §5.1, §5.2
. notes de cours 7, diapos 7.1–7.3
? séquences (ou suites), chaînes de caractères CS2013 (DS/Proof Techniques) induction over
natural numbers, weak and strong induction, well
? produit cartésien généralisé, tuples
orderings
? induction dans N
? preuve par induction, induction généralisée
TABLE 10.8: Références — récursion
? ? ? bon ordre
. RosenFR §1,7, §3.3, §5.1
. RosenEN §2.4, §5.3, §8.1
10.8 Récursion . notes de cours 8, diapos 8
. notes de cours 9, diapos 9
? somme ∑ et produit ∏, séries CS2013 (DS/Proof Techniques) structural
? définition récursive, bonne définition induction, recursive mathematical definitions ;
CS2013 (DS/Basics of Counting) solving
? suites récurrentes, progressions arithmétique et géométrique recurrence relations

? nombres Fibonacci, nombres harmoniques, factorielles


? fonction de partie entière : plancher, plafond, partie fractionnaire
?? structures récursives, induction structurale, formules bien formées
?? solution de récurrence d’ordre 1 par ∑ ou ∏
11 Divisibilité et congruence
L A M U LT I P L I C AT I O N d’entiers engendre la relation captivante de divisi-
bilité, étudiée depuis de l’Antiquité. La division entière définit divisibilité qui
est une relation d’ordre parmi les naturels, ainsi que congruence (avoir le même
reste) qui est une relation d’équivalence. Les éléments atomiques de multipli-
cation entière sont les nombres premiers. Les résultats importants, incluant le
théorème fondamental de l’arithmétique sur la décomposition en facteurs premiers,
se trouvent déjà dans livres VII–IX du fameux Éléments 1 d’E UCLIDE (300 1. :Éléments d’Euclide
(fr)

AEC).

11.1 Divisibilité

Définition 11.1. On définit la relation «divise sans reste» par l’opérateur | (barre
verticale) entre entiers (k, n) ∈ Z2 , dénotée

k | n ↔ (∃q ∈ Z : n = k · q)

Pour tout entier positif 2 0 < k, 2. Divisibilité est définie pour des entiers
signés, mais le signe ne change rien : k divise
(k | n) ↔ (n mod k = 0) n si et seulement si |k | divise |n|.
k | n ↔ k | (−n) et
par division euclidienne. k | n ↔ (−k ) | n

Exemple 11.1.

3 | 12 (−3) | 12 3 | (−12) (−3) | (−12) 12 - 3 0 - 1065 1065 | 0 0 | 0.

L’ensemble des multiples d’un k ∈ N est l’ensemble des entiers auxquels il est
diviseur :
  
m ∈ N (3|m) = n ∈ N n mod 3 = 0 = 3k k ∈ N = {0, 3, 6, . . . }
| {z } | {z } | {z } | {z }
par divisibilité par division euclidienne par image multiples de 3

Théorème 11.1 (Combinaisons linéaires). Soit n, x, y ∈ Z des entiers arbi-


traires. Si n | x et n | y, alors n | ( ax + by) pour toute paire d’entiers ( a, b) ∈ Z2 .

Démonstration. Si n | x et n | y, alors x = np et y = nq avec des entiers


p, q ∈ Z quelconques. On a donc ax + by = n( ap + bq), avec
( ap + bq) ∈ Z. 
94

Théorème 11.2. Divisibilité est une relation avec des propriétés suivantes :
(i) Pour tout a ∈ Z,

a|a  réflexivité (11.1a)

(ii) Pour tout a, b ∈ N,

a | b∧b | a → a = b  anti-symétrie dans N (11.1b)

(iii) Pour tout a, b, c ∈ Z,

a | b ∧ a | c → a | (b + c) (11.1c)
a | b ∧ a | c → a | (b − c) (11.1d)
a | b → a | (bc) (11.1e)
a | b∧b | c → a | c  transitivité (11.1f)

Démonstration. (a) a = a · 1, donc a | a. (b) S’il existe p, q ∈ N avec a = b · p


et b = a · q, alors a = ( a · q) · p = a · (qp), d’où qp = 1 par régularité. La F IGURE 11.1: Ordre parmi les diviseurs
solution ( p, q) = (1, 1) est unique dans N. (c) a | b ∧ a | c → a | (b + c) positifs de 60, illustré par un diagramme de
Hasse. Dans un tel diagramme, le placement
découle de Théorème 11.1. (d) a | b ∧ a | c → a | (b − c) découle de vertical des éléments donne le sens de la
Théorème 11.1. (e) Si b = a · q avec entier q, alors bc = ( aq)c = a(qc) pour relation entre des membres reliés, et on
tout c ∈ Z par associativité. Or, qc ∈ Z, donc a | (bc). (f) S’il existe ne montre pas les relations impliquées par
réflexivité et transitivité.
p, q ∈ Z t.q. b = a · p et c = b · q, alors c = a( pq) avec ( pq) ∈ Z. Donc
a | c. 

Corollaire 11.3. La relation de divisibilité | est un ordre partiel parmi les entiers
naturels : ( P, |) est un poset pour tout ensemble P ⊆ N.

Démonstration. Par Théorème 11.2, | est une relation binaire qui est réflexive,
transitive et antisymétrique 3 dans N. Donc c’est un préordre dans N et dans 3. Par contre, on n’a pas anti-symétrie dans Z
tout sous-ensemble de N. (En particulier, les diviseurs positifs d’un n > 0 ont car (− x ) | x. P.e., 2 | (−2) et (−2) | 2
mais 2 6= −2.
un ordre imposé par divisibilité, voir l’exemple de n = 60 dans Figure 11.1.)

95

11.2 Congruences
Définition 11.2. On définit la relation de congruence dans Z, dénotée par
≡ (mod n) ( «congrus modulo n») pour un n ∈ N arbitraire :

a≡b (mod n) ↔ n | ( a − b)

La classe de congruence (ou classe de résidu) de a ∈ Z, dénotée par [ a] , est


donnée par

[ a] = b ∈ Z | a ≡ b (mod n) .  tous congrus à a

Théorème 11.4. Pour tout n ∈ N, la relation de congruence modulo n est une


relation d’équivalence.
Démonstration. (réflexivité) a ≡ a (mod n) pour tout a car n | ( a − a). (symé-
trie) Si n | ( a − b), alors n | (b − a), donc si a ≡ b (mod n) alors b ≡ a (mod n).
(transitivité) Si n | ( a − b) et n | (b − c), alors ( a − c) = ( a − b) + (b − c) et
n | ( a − c) par Théorème 11.1. 

Corollaire 11.5. Pour tout n > 0, les classes de congruence [ x ] x ∈ Z
constituent une partition des entiers :
[
[ x ] 6= [y] → [ x ] ∩ [y] = ∅ et [ x ] = Z.
x ∈Z

Démonstration. Soit n > 1 arbitraire, et ≡ dénote congruence modulaire


(mod n). On démontre d’abord que si x ≡ y alors leurs classes sont égales :

[ x ] = [y]. Par la transitivité de ≡, x ≡ y → ∀u : u ≡ x → u ≡ y , donc
[ x ] ⊆ [y]. Par symétrie, x ≡ y implique y ≡ x, et donc [y] ⊆ [ x ]. En
conséquence, si x ≡ y alors [ x ] = [y].
S
On a x∈Z [ x ] = Z car x ∈ [ x ] par réflexivité. Il reste à montrer que si
[ x ] 6= [y], alors [ x ] ∩ [y] = ∅. Par contraposition : supposons que
z ∈ [ x ] ∩ [y]. Alors z ≡ x et z ≡ y, et donc [z] = [ x ] et [z] = [y], ce qui
donne [ x ] = [y]. 
? Quand n = 0, la relation de congruence (mod 0) est simplement
égalité : 0 | ( a − b) implique que a = b, et chaque entier est dans une
classe en soi.
? Quand n = 1, la congruence (mod 1) est triviale car 1 | ( a − b) pour
tout a, b, et tout entier est dans la même classe de résidu [0].
? Quand n > 1, on considère la division euclidienne a = nk + r et
b = nk0 + r 0 , avec des k, k0 ∈ Z et r, r 0 < n. Puisque a ≡ b si et

seulement si n | n(k − k0 ) + (r − r 0 ) , on doit avoir n | (r − r 0 ), donc
r = r 0 et

a≡b (mod n) ssi a mod n = b mod n.


En fait, on a [ a] = [b] si et seulement si a ≡ b (mod n), et si et seulement
si a mod n = b mod n. Les trois interprétations par partition, relation ou
fonction est une propriété importante des équivalences en général.
96

Théorème 11.6 (Trois interprétations d’équivalence). Soit ≡ une relation


binaire quelconque dans le domaine X. Les trois caractérisations suivantes sont équiva-
lentes :
(relation) ≡ est une relation d’équivalence :

∀ x : ( x ≡ x ), ∀ x ∀y : ( x ≡ y) → (y ≡ x ), et ∀ x ∀y∀ x : ( x ≡ y) ∧ (y ≡ z) → ( x ≡ z).
réflexive symétrique transitive

(partition) Il existe une partition quelconque X ⊆ 2X t.q. ∪ A∈X = X et


A 6= B → A ∩ B = ∅ pour tout A, B ∈ X, et

∀ x ∀y : ( x ≡ y) ↔ ∃C ∈ X : ( x ∈ C ) ∧ (y ∈ C ) .
| {z }
appartiennent au même ensemble dans X

(fonction) Pour une fonction quelconque f : X → F,

∀ x ∀ y : ( x ≡ y ) ↔ f ( x ) = f ( y ).

Démonstration. L’implication relation → partition est démontrée identiquement


au Corollaire 11.5 : les classes d’équivalence [ x ] = {y | x ≡ y} forment une
partition.
partition → fonction. Utiliser appartenance f : X → X t.q. f ( x ) = C
quand x ∈ C.
fonction → équivalence. Réflexive car f ( x ) = f ( x ), symétrique car
f ( x ) = f (y) ↔ f (y) = f ( x ), et transitive car f ( x ) = f (z) lorsque
f ( x ) = f (y) et f (y) = f (z). 

Arithmétique modulaire
Pour calculer le reste d’une somme ou d’un produit, il suffit de manipuler
les restes des membres :
Théorème 11.7. Soit n > 0 un entier positif. Pour tout a, b ∈ Z,  Si on calcule modn, on a le droit de
 remplacer toute valeur x par ( x mod n)
( a + b) mod n = ( a mod n) + (b mod n) mod n à n’importe quelle étape de manipulation
 d’une formule.
( a · b) mod n = ( a mod n) · (b mod n) mod n TABLE 11.1: Preuve de Théorème 11.7

On remarque que ak 6= ( a mod n)k mod n en général. Pour exponentia- Démonstration. Par division euclidienne,
a = pn + r et b = qn + s avec p = b a/nc,
tion, on utilise plutôt la définition par récurrence : pour tout a ∈ Z, k ∈ N,
q = bb/nc, r = a mod n et q = b mod n.

1 (i) On a ( a + b) = (( p + q)n + (r + s)),
si k = 0 donc n | (( a + b) − (r + s)). On a
ak = donc ( a + b) ≡ (r + s) (mod n), ou
 a · ( ak−1 ) si k > 0
( a + b) mod n = (r + s) mod n. (ii) On
a ab = ( pqn + ps + qr )n + rs, d’où
donc, pour tout n > 0, n | ( ab − rs), donc ab ≡ rs (mod n) et
 ( ab) mod n = (rs) mod n . 
1 si k = 0
ak mod n = 
 ( a mod n) · ( ak−1 mod n) mod n si k > 0

Par Théorème 11.7, on peut définir la structure d’arithmétique entière


modulo n (avec un n > 0).
97

TABLE 11.2: Arithmétique modulo 6. Les


cases encadrées déterminent les inverses
additifs (−r ) et multiplicatifs (r −1 ).
⊕6 0 1 2 3 4 5 −r 6 0 1 2 3 4 5 r −1
0 0 1 2 3 4 5 0 0 0 0 0 0 0 0
1 1 2 3 4 5 0 5 1 0 1 2 3 4 5 1
2 2 3 4 5 0 1 4 2 0 2 4 0 2 4
3 3 4 5 0 1 2 3 3 0 3 0 3 0 3
4 4 5 0 1 2 3 2 4 0 4 2 0 4 2
5 5 0 1 2 3 4 1 5 0 5 4 3 2 1 5

Définition 11.3. Soit n > 0 arbitraire. L’ensemble 4 Zn est défini par 4. La notation standard est Z/nZ, mais Zn
suffit pour nos buts.
 
Zn = [ k ] k ∈ Z = [0 ], [1 ], . . . , [ n − 1 ] ,
| {z }
partition en n ensembles

avec les classes d’équivalence [r ] = {kn + r | k ∈ Z}. On définit l’arithmétique


modulaire par les opérations arithmétiques modulo n :  La fonction f ( x ) = [ x mod n] est un
morphisme entre les structures (Z, +, ·) et
[ a] ⊕n [b] = [ a + b] et [ a] [b] = [ a − b] et [ a] [b] = [ ab] (Zn , ⊕ n , n ) :
n n
f ( x + y) = f ( x ) ⊕n f (y)
f ( x · y) = f ( x ) n f (y)

9 0 1 2 3 4 5 6 7 8 r −1 00 = 1 01 = 0 10 ≡ 1 11 ≡ 1
0 0 0 0 0 0 0 0 0 0
20 ≡ 1 21 ≡ 2 22 ≡ 4 23 ≡ 8 24 ≡ 7 25 ≡ 5 26 ≡ 1
1 0 1 2 3 4 5 6 7 8 1
2 0 2 4 6 8 1 3 5 7 5 30 ≡ 1 31 ≡ 3 32 ≡ 0
3 0 3 6 0 3 6 0 3 6 40 ≡ 1 41 ≡ 4 42 ≡ 7 43 ≡ 1
4 0 4 8 3 7 2 6 1 5 7 50 ≡ 1 51 ≡ 5 52 ≡ 7 53 ≡ 8 54 ≡ 4 55 ≡ 2 56 ≡ 1
5 0 5 1 6 2 7 3 8 4 1
60 ≡ 1 61 ≡ 6 62 ≡ 0
6 0 6 3 0 6 3 0 6 3
7 0 7 5 3 1 8 6 4 2 4 70 ≡ 1 71 ≡ 7 72 ≡ 4 73 ≡ 1
8 0 8 7 6 5 4 3 2 1 8 80 ≡ 1 81 ≡ 8 82 ≡ 1
TABLE 11.3: Multiplication et exponentia-
tion modulo 9.
Théorème 11.8. Addition modulaire ⊕n est commutative et associative, avec
élément neutre 0. Multiplication modulaire n est commutative et associative, avec
élément neutre 1 (si n > 1). ⊕n est distributive sur n .

En pratique, on utilise un système de représentatifs R = {r0 , . . . , rn−1 } ⊆ Z


qui est un ensemble de résidus t.q. ∪in=−01 [ri ] = Zn , souvent avec le choix
évident ri = i. Lors de calcul modulo n, on omet la notation par classes (avec
les crochets), et on manipule les représentatifs ri directement.
98

Exemple 11.2 (Arithmétique binaire). Avec n = 2, on obtient l’arithmétique binaire (mod 2), avec résidus Z2 = {0, 1}. Les
tableaux d’opérations :

⊕2 0 1 2 0 1 2 0 1
0 0 1 0 0 1 0 0 0  pair + impair = impair, pair + pair = impair + impair = pair
1 1 0 1 1 0 1 0 1  impair · impair = impair, pair · pair = pair · impair = pair

On remarque que la structure est isomorphe à des opérations logiques a ⊕2 b correspondant à a0 ⊕ b0 (ou exclusif) et a 2 b corres-
pondant à a0 ∧ b0 (conjonction) avec 00 ≡ 0 (faux) et 10 ≡ 1 (vrai).

Types entiers en programmation


Dans les langages de programmation, les entiers sont représentés par dé-
faut sur un nombre fixe de bits, en binaire. Ainsi, on travaille avec des en-
tiers de 8 bits (octets), de 16 bits (short en Java), de 32 bits (int) et de 64
bits (long). L’arithmétique des entiers de d bits est arithmétique modulaire
(mod 2d ), parce qu’on ne garde que les d bits faibles du résultat. Dans
le cas des entiers non-signés (unsigned integer), on utilise les représenta-
tifs {0, 1, . . . , 2d − 1}. Les cellules du mémoire sont des octets non-signés
0, . . . , 255, organisé en mots de 4 ou 8 octets. Dans le cas des entiers si-
gnés (signed integer), on utilise une représentation par complément à deux,

avec les représentatifs − 2d−1 , −2d−1 + 1, . . . , 0, . . . , 2d−1 − 1 . Les
constantes négatives x sont stockées en mémoire comme des valeurs non-
TABLE 11.4: Types entiers signés en Java.
signées congruentes ( x + 2d ), donc le bit de poids fort (MSB, most significative
bit) est 1 si la valeur signée est négative. Table 11.4 montre les rangées des
type bits min max
entiers dans Java. byte 8 −128 27 − 1
Exemple 11.3 (Calcul avec octets signés). On considère le calcul Z256 , avec short 16 −32768 215 − 1
int 32 −2147483648 231 − 1
les représentatifs { −128 , −127 , . . . , 0 , 1 , . . . , 127 }. long 64 −9223372036854775808 263 − 1

3 − 5 = −2 3 256 5 = −2
127 + 127 = 254 ≡ −2 (mod 256) 127 ⊕256 127 = −2
−(−128) = 128 ≡ −128 (mod 256) −1 256 −128 = −128

Au niveau de manipulation des bits, le calcul se fait exactement de même


façon avec les octets signés et non-signés : −2 est stocké comme 254 dans
une cellule de mémoire.
99

11.3 Les nombres premiers et le plus grand commun diviseur


Tout entier plus grand que 1 est divisible par au moins deux entiers posi-
tifs : 1 et lui-même. 5. Donc, le nombre 1 n’est ni premier ni
composé parce qu’il possède exactement 1
Définition 11.4. Un entier positif est un nombre premier s’il possède exacte- diviseur, lui-même.
ment deux 5 diviseurs positifs distincts. Un entier positif avec plus que deux diviseurs est
TABLE 11.5: Début de la suite de nombres
un nombre composé. premiers {πn }∞
n=1 jusqu’à n = 25

Le fait qu’il n’y a pas de plus grand nombre premier a été démontré par n πn
1 2
Euclide en une preuve fameuse. 2 3
3 5
Théorème 11.9 (Euclide, Éléments XI, Proposition 20). L’ensemble des 4 7
nombres premiers est infini. 5 11
6 13
Lemme 11.10 (Euclide, Éléments VII, Proposition 31). Tout n > 1 possède un 7 17
8 19
diviseur qui est un nombre premier. 9 23
10 29
Preuve par induction généralisée. (base) À n = 2, le lemme est vrai car 2 | 2 avec le 11 31
nombre premier 2. (induction) Soit 2 ≤ t un entier arbitraire, et supposons que le 12 37
lemme est vrai pour tout 1 < n ≤ t. On montre que (t + 1) doit avoir p | (t + 1) 13 41
14 43
avec un nombre premier p. Si (t + 1) est un nombre premier, le lemme vaut pour 15 47
n = t + 1 avec p = t + 1. Si (t + 1) est un nombre composé, alors il a un diviseur 16 53
1 < d ≤ t. Si d est un nombre premier, il p = d est témoin pour le lemme. Si d n’est 17 59
pas un nombre premier, alors il a un diviseur p qui est un nombre premier, par 18 61
l’hypothèse d’induction. Or, divisibilité est transitive : si p | d et d | (t + 1), alors 19 67
20 71
p | (t + 1). (conclusion) Tout entier 2 ≤ n possède un diviseur premier.  21 73
Preuve de Théorème 11.9. On démontre que pour tout ensemble fini 22 79
23 83
P = { p1 , p2 , . . . , pm } de nombres premiers, il existe un nombre premier p 6∈ P.
24 89
Considérons le successeur du produit s = ∏im=1 pi + 1. (Avec s = 2 quand m = 0). 25 97
On a ...
s = 1 + pk · ∏ pi donc s mod pk = 1 (11.2)
1≤ i ≤ m
i 6=k
pour tout k. Par Lemme 11.10, soit s est un nombre premier, soit s est un nombre
composé avec un diviseur p qui est un nombre premier. Si s est un nombre premier,
alors s 6∈ P car s > pk pour tout k. Si p | s, alors p 6= pk pour tout k car pk - s
par (11.2), donc p 6∈ P. 
100

Plus grand commun diviseur : l’algorithme d’Euclide


Définition 11.5. Le plus grand commun diviseur (gcd, greatest common
divisor) entre deux entiers a, b ∈ Z est le plus grand entier qui les divise simultané-
ment gcd( a, b)
n o n o
gcd( a, b) = max k (k | a) ∧ (k | b) = max k ∈ N+ a mod k = 0 ∧ b mod k = 0

(gcd(0, 0) = ∞ n’est pas défini.) Deux entiers sont premiers entre eux (ou
étranges) si leur PGCD est 1.

Entre deux entiers, il y a toujours au moins un diviseur en commun, c’est


le 1 et donc 1 ≤ gcd( a, b). On note que k divise a si et seulement s’il divise
(− a), donc gcd( a, b) = gcd(| a|, |b|).
Théorème 11.11 (Algoritme d’Euclide). Pour tout a, b ∈ N avec a 6= 0, on a

a si b = 0
gcd( a, b) =
gcd(b, a mod b) si b 6= 0 TABLE 11.6: Algorithme d’Euclide pour
gcd(110, 42)
Démonstration. Si b = 0, alors gcd( a, 0) = a car a est le plus grand diviseur
a k bk uk vk xk yk a k = q k · bk + r k
de tout a positif, et tout a positif divise 0. Autrement, on définit
110 42 1 0 0 1 110 = 2 · 42 + 26
l’ensemble D0 ⊆ Z de diviseurs communs entre a et b, et pour tout k ∈ Z, 42 26 0 1 1 −2 42 = 1 · 26 + 16
l’ensemble Dk ⊆ Z de diviseurs communs entre b et ( a − kb). On démontre 26 16 1 −2 −1 3 26 = 1 · 16 + 10
16 10 −1 3 2 −5 16 = 1 · 10 + 6
que D0 ⊆ Dk et que Dk ⊆ D0 . (i) Supposons que d | a et d | b pour un 10 6 2 −5 −3 8 10 = 1 · 6 + 4
d ∈ Z. Par Théorème 11.1, la combinaison linéaire est divisible aussi : 6 4 −3 8 5 −13 6 = 1·4+2
4 2 5 −13 −8 21 4 = 2·2+0
d | (1 · a + (−k ) · b), donc d | ( a − kb). (ii) Supposons que d | b et
2 0 −8 21 21 −55 fin !
d | ( a − kb). Par Théorème 11.1, la combinaison linéaire est divisible :  gcd(110, 42) = 110 · (−8) + 42 · 21 = 2

d | k · b + 1 · ( a − kb) donc d | a. Puisque D0 ⊆ Dk et Dk ⊆ D1 , on a
TABLE 11.7: Algorithme d’Euclide pour
D0 = Dk et max D0 = max Dk . En particulier, avec l’entier k = b a/bc, on gcd(2023, 1065)
a a mod b = a − b a/bc · b, donc gcd( a, b) = gcd(b, a mod b). 
ak bk (uk , vk ) ( xk , yk ) b ak /bk c
Algorithme d’Eculide. Théorème 11.11 nous donne une recette efficace de 2023 1065 (1, 0) (0, 1) 1
1065 958 (0, 1) (1, −1) 1
calculer gcd( a, b). Selon la définition, gcd( a, b) = gcd(b, a) et gcd( a, b) = 958 107 (1, −1) (−1, 2) 8
gcd(| a|, |b|), donc il suffit de considérer le cas 0 ≤ b ≤ a, car le cas a ≤ b 107 102 (−1, 2) (9, −17) 1
 n 102 5 (9, −17) (−10, 19) 20
est symétrique. On calcule la suite récurrente ( ak , bk ) k=0 qui finit avec 5 2 (−10, 19) (209, −397) 2
( an , bn ) = (gcd( a, b), 0). 2 1 (209, −397) (−428, 813) 2
1 0 (−428, 813) (1065, −2023) fin !
( a0 , b0 ) = ( a, b) initialisation  gcd(2023, 1065) = 2023 · (−428) + 1065 · 813 = 1

( ak+1 , bk+1 ) = (bk , ak mod bk ) si bk 6= 0

Algorithme d’Euclide étendu. On remarque que la récurrence est linéaire :


avec qk = b ak /bk c, on a bk+1 = ak mod bk = ak − qk · bk . En écrivant
ak = uk a + vk b et bk = xk a + yk b, on peut tracer les suites récurrentes
{(uk , vk )} et {( xk , yk )} en concomitance avec {( ak , bk )} :

u0 = 1 v0 = 0 x0 = 0 y0 = 1 initialisation
u k +1 = x k v k +1 = y k xk+1 = uk − xk · b ak /bk c yk+1 = vk − yk · b ak /bk c si bk 6= 0
101

Preuves avec l’algorithme d’Euclide. L’algorithme d’Euclide étendu construit


une représentation du gcd par une combinaison linéaire, ce qu’on peut ex-
ploiter dans des preuves. Un usage pratique est pour calculer l’inverse multi-
plicatif en arithmétique modulaire.

Théorème 11.12 (Inverses multiplicatifs). Soit 0 < b < m deux entiers positifs
qui sont premiers entre eux. Alors il existe un entier positif v < m t.q.

v·b ≡ 1 (mod m) ou, en arithmétique modulaire, v m b = 1.

Démonstration. Rouler l’algorithme d’Euclide étendu pour finir avec


1 = gcd(m, b) = un m + vn b. Or,

(un m + vn b) mod m = (vn b) mod m = (vn mod m) · b mod m = 1,

donc avec b−1 = (vn mod m), on a b−1 m b = 1.



Théorème 11.13 (Théorème de Bézout). Soit a, b deux entiers. Alors il existe
u, v ∈ Z t.q. gcd( a, b) = au + bv , et
 
au + bv u, v ∈ Z = k · gcd( a, b) k ∈ Z
| {z } | {z }
combinaisons linéaires de a, b multiples de gcd( a, b)

Démonstration. Soit d = gcd( a, b). On définit les ensembles


 
L = au + bv (u, v) ∈ Z2 et M = kd k ∈ Z pour montrer que
M ⊆ L et que L ⊆ M.
L’algorithme d’Euclide finit avec an = d, et an = un a + vn b, donc
d = ua + vb avec u = un et v = vn . Maintenant si x = kd ∈ M avec un
k ∈ Z, alors on peut écrire x comme une combinaison linéaire
x = (ka)u + (kv)b ∈ L. Ainsi M ⊆ L.
Le converse est aussi vrai. Soit y = ( au + bv) ∈ L dans une combinaison
linéaire avec u, v ∈ Z. Par Théorème 11.1, d | y car d | a et d | b. Donc
y ∈ M et ainsi L ⊆ M. 
102

Décomposition en produit de facteurs premiers


Lemme 11.14 (Gauss, Disquisitiones Arithmeticae). Soit a, b des entiers quel-
conques. Si n divise ( ab) et gcd( a, n) = 1, alors n divise b.
Lemme 11.15 (Euclide, Éléments VII, Proposition 30). Soit a, b des entiers
quelconques. Si le nombre premier p divise ( ab), alors p divise a ou p divise b.
Preuve de Lemme 11.14. Supposons que gcd( a, n) = 1. Par Théorème 11.12, il
existe u ∈ Zn t.q. ua ≡ 1 (mod n).

ab ≡ 0 (mod n) n divise ab
u( ab) ≡ u · 0 (mod n) multiplication par u
b≡0 (mod n) u · 0 ≡ 0; u( ab) ≡ (ua)b ≡ 1 · b
F IGURE 11.2: Portrait de Carl Friedrich
 G AUSS (1777–1855), l’un des plus grands
mathématiciens de tous les temps, à l’age
Preuve de Lemme 11.15. Puisque p possède 2 diviseurs positifs, pour tout de 63, par Christian Albrecht Jensen. Gauss
entier a, gcd( a, p) = 1 ou gcd( a, p) = p. Si gcd( a, p) = 1, p divise b par a inventé l’arithmétique modulaire par
congruences, et a été le premier à démontrer
Lemme 11.14. Si gcd( a, p) = p, alors p divise a.  proprement le théorème fondamental de
l’arithmétique sur l’unicité de la décomposi-
Théorème 11.16 (Théorème fondamental de l’arithmétique). Tout entier tion en facteurs premiers.
positif n peut être écrit comme un produit de nombres premiers :
k
n= ∏( pi )ei = |p1 ·{z· · p}1 · |p2 ·{z· · p}2 · · · |pk ·{z· · p}k
i =1
e1 fois e2 fois ek fois TABLE 11.8: Décomposition en facteurs
premiers. (Les points de suspension . . .
avec un k ∈ N quelconque, des nombres premiers p1 < p2 < · · · < pk , et leurs dénotent une suite infinie de 0s.)
exposants ei > 0. La décomposition en produit de facteurs premiers est
unique. n factorisation suite {ek }
1 1 {0, . . . }
En une représentation équivalente, pour chaque entier positif n > 0 il 2 21 {1, 0, . . . }
existe une suite infinie unique {e j }∞ N+ t.q. 3 31 {0, 1, 0, . . . }
j =1 ∈ N 4 22 {2, 0, . . . }
∞ 5 51 {0, 0, 1, 0, . . . }
n= ∏(π j )ej = 2e1 · 3e2 · 5e3 · 7e4 · 11e5 · · · 6
7
21 · 31
71
{1, 1, 0, . . . }
{0, 0, 0, 1, 0 . . . }
j =1
8 23 {3, 0, . . . }
avec la suite des entiers premiers {π j } = {2, 3, 5, 7, 11, . . . }, et leurs expo- 9 32 {0, 2, 0, . . . }
10 21 · 51 {1, 0, 1, 0, . . . }
sants e j ≥ 0. Table 11.8 montre des exemples. Seulement un nombre fini 11 111 {0, 0, 0, 0, 1, 0, . . . }
des e j sont positifs : ∑∞
j=1 e j < ∞. 12 22 · 31 {2, 1, 0, . . . }
13 131 {0, 0, 0, 0, 0, 1, 0, . . . }
Définition 11.6. Le plus petit commun multiple (lcm, least common 14 21 · 71 {1, 0, 0, 1, 0, . . . }
multiple) entre a, b ∈ Z − {0} est le plus petit entier positif qu’ils divisent simulta- 15 31 · 51 {0, 1, 1, 0, . . . }
16 24 {4, 0, 0, . . . }
nément (lcm( a, b) n’est pas défini quand a = 0 ou b = 0) 17 171 {0, 0, 0, 0, 0, 0, 1, 0, . . . }
n o 18 21 · 32 {1, 2, 0, . . . }
lcm( a, b) = min k ∈ N+ ( a | k) ∧ (b | k) 19 191 {0, 0, 0, 0, 0, 0, 0, 1, 0, . . . }
n o 20 22 · 51 {2, 0, 1, 0, . . . }
= min k ∈ N+ k mod | a| = 0 ∧ k mod |b| = 0 . 21 31 · 71 {0, 1, 0, 1, 0, . . . }
22 21 · 111 {1, 0, 0, 1, 0, . . . }
Il est facile de déterminer divisibilité à partir de la décomposition en fac- 23 231 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, . . . }
24 23 · 31 {3, 1, 0, . . . }
teurs premiers : a divise b si et seulement tout facteur premier de a est un fac- 25 52 {0, 0, 2, 0, . . . }
teur de b, avec une multiplicité dans a inférieure ou égale à celle dans b (voir 26 21 · 131 {1, 0, 0, 0, 0, 1, 0, . . . }
27 33 {0, 3, 0, . . . }
...
103

Table 11.9). De même, on peut trouver le plus grand diviseur commun ou le


plus petit commun multiple facilement à partir des facteurs premiers : Si a =
TABLE 11.9: Énumération des diviseurs
∏∞ ek ∞ fk ∞
k =1 ( πk ) et b = ∏k =1 ( πk ) , alors gcd( a, b ) = ∏k =1 ( πk )
min{ek , f k } ,
positifs de 60 par décomposition en facteurs

lcm( a, b) = ∏k=1 (πk )max{ek , f k } , et en conséquence, premiers

22 · 31 · 51 = 60
gcd( a, b) · lcm( a, b) = ab
21 · 31 · 51 = 30 20 · 31 · 51 = 15
pour tout a, b > 0. Table 11.10 montre des exemples. 22 · 30 · 51 = 20 22 · 31 · 50 = 12
1 0 1
2 · 3 · 5 = 10 21 · 31 · 50 = 6
Preuve de Théorème 11.16. Existence. On démontre par induction que tout n
peut être factorisé. (base) L’entier n = 1 est factorisé par le produit vide avec k = 0 : 20 · 30 · 51 = 5 20 · 31 · 50 = 3
∏0i=1 ( pi )ei = 1. (induction) Supposons que tout m ≤ n peut être factorisé pour un n 2 0 0
2 ·3 ·5 = 4 21 · 30 · 50 = 2
positif. Si (n + 1) est un nombre premier, il peut être factorisé avec k = 1, 20 · 30 · 50 = 1
( p1 , e1 ) = (n + 1, 1). Autrement, (n + 1) est un nombre composé, et par
Lemme 11.10 il existe un nombre premier p qui divise (n + 1). Soit m = (n + 1)/p.
Puisque p > 1, m < (n + 1), et par l’hypothèse d’induction, il existe une factorisation TABLE 11.10: Plus grand commun divi-
seur et plus petit commun multiple par
m = ∏ik=1 ( pi )ei . Alors (n + 1) = pm = p ∏ik=1 ( pi )ei est une décomposition décomposition en facteurs premiers
de (n + 1) en facteurs premiers. (conclusion) Il existe une décomposition pour tout
n > 0. 90 = 21 · 32 · 51
Unicité. Supposons que n = ∏ik=1 ( pi )ei = ∏`j=1 (q j ) f j sont deux décompositions 60 = 22 · 31 · 51
en facteurs premiers pi et q j , avec exposants positifs ei et f j . Considérons les facteurs
gcd(90, 60) = 21 · 31 · 51 = 30
différents :
lcm(90, 60) = 22 · 32 · 51 = 180
 f  f
D1 = i 0 < i ≤ k ∧ ¬∃ j : piei = q j j D2 = j 0 < j ≤ ` ∧ ¬∃i : q j j = piei 2022 = 21 · 31 · 3371
1065 = 31 · 51 · 711
On démontre que D1 = D2 = ∅ et donc les deux factorisations sont identiques.
gcd(2022, 1065) = 20 · 31 · 50 · 710 · 3370 = 3
Supposons par l’absurde que D1 6= ∅. Soit m ∈ D1 un élément quelconque (p.e.,
m = min D1 ), et p = pm le facteur premier correspondant avec son exposant e = em lcm(2022, 1065) = 21 · 31 · 51 · 711 · 3371 = 717810
selon la première décomposition. Soit f = f j s’il existe p = q j , ou f = 0 si q j 6= p 2023 = 71 · 172
pour tout j. Par notre supposition, e 6= f . On a alors 1065 = 31 · 51 · 711

  gcd(2023, 1065) = 30 · 50 · 70 · 170 · 710 = 1


∏ik=1 ( pi )ei ∏`j=1 (q j ) f j
n = pe = pf ou pe a = p f b, lcm(2023, 1065) = 31 · 51 · 71 · 172 · 711 = 2154495
pe pf

avec a, b entiers positifs avec leurs factorisations. (i) Si e < f , alors pe a = pe p f −e b ,
et donc a = p f −e b (par régularité de +) avec f − e > 0. En conséquence, p | a, et
par Lemme 11.15, p | ( pi )ei pour un i 6= m dans le produit a = ∏i6=m ( pi )ei . C’est
une contradiction parce que p = pm est un nombre premier différent de tous les autres
facteurs premiers pi avec i 6= m. (ii) Si f < e, on a pe− f a = b, donc p | b. Or, b est
un produit de facteurs premiers différents de p, et on a de nouveau une contradiction
par Lemme 11.15.
Si D2 6= ∅, on arrive à une contradiction de manière analogue. 
12 Algorithmes
U N A L G O R I T H M E formalise une procédure pour résoudre un problème
bien défini. L’approche algorithmique a trois caractéristiques importants.
(i) L’algorithme fournit la solution au problème,
(ii) il se termine en un temps fini, et
(iii) il se décrit précisément, comme une suite d’opérations basiques 1 . 1. Une opération est suffisamment basique si
une personne peut l’effectuer sur papier avec
Les entrées sont les données fournies à l’algorithme avant qu’il commence, un crayon [Donald Knuth]
prises d’un univers spécifié. Les sorties sont des quantités en une relation
spéciale avec les entrées que l’algorithme peut déterminer. (Afin d’afficher ou
d’écrire dans un fichier, par exemple.) L’algorithme doit avoir une définition
précise : chaque étape d’un algorithme doit être définie précisément, les
actions doivent être spécifiées rigoureusement et sans ambiguïté pour chaque
cas. Une propriété fondamentale est la finitude : l’algorithme doit se terminer
en un nombre fini d’étapes pour toutes entrées.

12.1 Modèles de calcul


La description de l’algorithme assume un modèle de calcul avec les ins-
tructions élémentaires qui forment le vocabulaire à utiliser.

Machine de Turing. La machine de Turing 2 comprend seulement un ru- F IGURE 12.1: Alan T URING (1912–1954),
inventeur des fondations scientifiques de
ban infini de cellules contenant un symbole chacune, et une tête de lecture- l’informatique. [Autour de 1930.]
écriture qui se positionne sur une cellule à la fois. L’algorithme sur la ma- 2. (fr):machine de Turing
chine de Turing comprend un ensemble Q (fini) d’états incluant un ensemble
F ⊆ Q d’états terminaux, un alphabet A de symboles, et l’ensemble T de
règles d’action pour la tête et les transitions d’états :

T : (Q − F) × A → Q × A × {+1. − 1}
état lire prochain écrire déplacer

Quand la machine lit x dans l’état q 6∈ F, alors T (q, x ) = (q0 , y, d)


donne l’action : écrire y, passer à l’état q0 , et déplacer la tête par une case
d ∈ {+1, −1} (avant ou arrière). La machine s’arrête dans un état final q ∈ F.

Machine RAM. La gestion de mémoire est difficile avec une machine de F IGURE 12.2: Machine RAM : l’architec-
Turing car la tête glisse par une case à la fois, donc on a un accès séquentiel aux ture von Neumann. L’aspect innovateur
était de stocker les données et le code dans
cellules du mémoire. Dans une machine RAM 3 on peut adresser le mémoire
le même mémoire vive. L’unité de contrôle
directement, et y stocker les données. L’ensemble d’instructions imite les exécute les instructions, en maintenant l’état
langages des CPUs contemporaines. La machine RAM permet l’abstraction du programme avec l’adresse de l’instruction
courante. L’unité arithmétique performe
d’un emplacement en mémoire par une variable. Une variable comprend le calcul avec les valeurs en mémoire et la
(i) le nom, (ii) l’adresse en mémoire (lvalue), (iii) la valeur (rvalue), (iv) le type variable spéciale accumulateur.
(déterminant la représentation de la valeur dans les cellules du mémoire), et 3. (fr):machine RAM. RAM = Random
Access Memory (mémoire vive avec adressage)
(v) la portée (visibilité de la variable).
106

Pseudocode et implémentation. Typiquement, On définit les algorithmes en


pseudocode. Le syntaxe est laxiste et dépend de l’auteur.e, mais les instruc-
tions doivent être faciles à implanter en un langage de programmation de haut
niveau. Dans ce cours, je vais illustrer les implémentations largement en Java,
et décrire les algorithmes en un mélange de notation mathématique, avec un
vocabulaire d’instructions proche de Java/C/Python. Lignes directrices pour
une bonne présentation en pseudocode : (i) débuter avec titre, entrées, sor-
ties, description ; (ii) utiliser remarques et mots-clés (en français si préféré) ;
(iii) épargner les détails de l’implémentation (p.e. typisation stricte des va-
riables) ; (iv) étiqueter/numéroter les lignes d’instruction comme nécessaire ; et
(v) utiliser des variables. Voir Fig. 12.3 pour un exemple simple.

Algorithme M A X 3 : retourne le maximum de trois nombres F IGURE 12.3: Pseudocode d’un algorithme
Entrée : trois nombres x, y, z ∈ R avec mots-clés français.
Sortie : maximum de x, y, z
M1 max = x
M2 si y > max alors max = y // maintenant max = max{ x, y}
M3 si z > max alors max = z
retourner max

En général, on doit chercher un compromis entre l’algorithme conceptuel


et les contraintes pratiques de l’implantation. Voir l’exemple de Fig. 12.4 où
la version Java introduit le typage des éléments et une représentation spéciale
pour ∞ dans le cas des entiers. En résultat, le code est moins générique que
l’algorithme en pseudocode.

Algorithme M A X N
double maxN(double[] x)
// retourne le maximum de 0 ≤ n < ∞ éléments {
double m = Double.NEGATIVE_INFINITY;
Entrée : taille n, valeurs ( x0 , x2 , . . . , xn−1 ) avec n ∈ N for (int i=0; i<x.length; i++)
if (x[i]>m) m=x[i];

Sortie : −∞ si n = 0, ou la plus grande valeur parmi { x0 , . . . , xn−1 } }


return m;

int maxN(int[] x)
X1 max = −∞ // initialisation pour séquence vide {
int m = Integer.MIN_VALUE; // "-infini"
X2 for i = 0, 1, . . . , n − 1 do for (int i=0; i<x.length; i++)
if (x[i]>m) m=x[i];

X3 if xi > max then max = xi // max devient le max de { x0 , . . . , xi } }


return m;

X4 return max
F IGURE 12.4: Pseudocode et implémen-
tations Java pour un algorithme simple qui
trouve le maximum dans un tableau. Nos
idiosyncrasies de notation : mots-clés en gras
(if..then, for..do, return), tabulation pour
imbriquer les blocs d’instruction.
107

12.2 Correction et efficacité


Lors de l’analyse d’un algorithme, on veut
(i) démontrer qu’il est correct, donc il fournit la solution exacte pour toute
entrée en un temps fini, et
(ii) caractériser son efficacité, et, en particulier, démontrer sa complexité.

Exactitude
La correction ou exactitude d’un algorithme peut être démontrée comme
tout autre énoncé logique. Typiquement, on donne une preuve par induc-
tion sur l’entrée. Une technique essentielle est l’introduction de conditions
logiques invariantes pour les itérations d’une boucle. La preuve de Théo-
rème 12.1 est un exemple d’une telle démarche. TABLE 12.1: Algorithme pour maximum
de n éléments. Noter que cette version on
Théorème 12.1. L’algorithme M A X (Table 12.1) détermine le maximum de n commence les membres avec l’indice 1.
éléments correctement. (Le maximum de la séquence vide est −∞.)
Algorithme M A X ( x1 , . . . , xn )
X1 max = −∞
Preuve d’exactitude. Soit mi = max après l’exécution de Ligne X3 à i = 1, 2, . . . n, et X2 for i = 1, 2, . . . , n do
m0 = −∞. On montre par induction que X3 if xi > max then max = xi
 X4 return max
mi = max x1 , . . . , xi  invariant de la boucle

pour tout i. (base) m0 = −∞. (induction) Supposons que l’invariant vaut pour
un i < n. Au début de la (i + 1)-ème itération, max = mi , et selon l’H.I., après
l’exécution de X3, max = mi+1 = max{mi , xi+1 } = max{ x1 , . . . , xi+1 }.
(conclusion) max = mn = max{ x1 , . . . , xn } est correctement retournée en
Ligne X4. 

Complexité
La complexité d’un algorithme mesure sa performance en fonction de la
taille du problème il est destiné à résoudre. En particulier, on caractérise les
ressources (temps, mémoire) nécessaires pour l’exécution.
? usage de mémoire ou «complexité d’espace» (space complexity) : c’est le
mémoire de travail nécessaire à part de stocker l’entrée même. Le mé-
moire de travail est le mémoire utilisé à part de l’entrée et de la sor-
tie. Afin de caractériser un algorithme, on veut estimer en particulier
l’empreinte (footprint), ou l’usage de mémoire maximal pendant l’exécu-
tion en fonction de l’entrée.
? temps de calcul ou «complexité de temps» (time complexity) : c’est le temps
d’exécution dans un modèle formel de calcul.
La théorie de la complexité 4 est une des branches importantes de l’informa- 4. :Théorie de la complexité
(fr)

tique : elle étudie les mathématiques de la difficulté intrinsèque de problèmes.


108

12.3 Analyse de temps de calcul


Dans ce cours, on favorise les caractérisations pragmatiques de temps ou de
mémoire. Par exemple, on veut prédire/expliquer ce qui se passe si on fait
rouler l’algorithme sur n = 106 éléments. Afin de développer une caractérisa-
tion d’utilité pratique, on procède comme suit.
(1) Développer un modèle de l’entrée et définir la notion de la «taille» de l’entrée. Le modèle doit permettre la généra-
tion de données à l’entrée pour mesurer la performance d’une implantation sur l’ordinateur.
(2) Identifier la partie criticale du code qui domine la croissance du temps de calcul. Pour un algorithme itératif, cette
partie est à l’intérieur de la boucle le plus profondement imbriquée.
(3) Définir un modèle de coût pour le temps de calcul. En particulier, on veut écrire le temps de calcul avec le coût
d’opérations typiques dans le contexte du problème. Exemples d’opération typique : comparaison de deux élé-
ments lors du tri d’un fichier, accès à une cellule dans un tableau, ou une opération arithmétique dans des algorithmes
numériques.
(4) Déterminer la fréquence des opérations typiques en fonction de la taille de l’entrée.
Une bonne caractérisation du temps de calcul nous permet de le considérer
comme un hypothèse scientifique testable sur le comportement de l’algorithme.
Après qu’on a implanté l’algorithme, on peut expériencer avec des entrées
différentes, en mesurant le temps actuel d’exécution, et en comptant les opé-
rations typiques.

Meilleur, pire, ou moyen


Typiquement, il y a beaucoup d’entrées possibles avec la même taille n, et
le temps de calcul peut dépendre de l’entrée actuelle et non pas seulement de
sa taille. Dans une telle situation, la caractérisation (étape (4) de la recette) peut
TABLE 12.2: Algorithme pour minimum
montrer le temps maximal (pire cas), le temps minimal (meilleur cas) ou
de n éléments. Noter que cette version on
le moyen cas. Ce dernier assume forcément une distribution sur les entrées, commence les membres avec l’indice 1.
et alors le temps moyen est bien défini comme l’espérance sur les entrées de
Algorithme M I N ( x1 , . . . , xn )
taille n. // minimum parmi 1 ≤ n éléments
Exemple 12.1 (Complexité de la recherche du minimum). On analyse le N1 min = x1
temps de calcul pour l’algorithme M I N (Table 12.2). N2 for j = 2, . . . , n do
(1) modèle de l’entrée : taille n est le nombre d’éléments N3 if x j < min then min = x j
N4 return min
(2) partie criticale du code : Ligne N3
(3) opération typique : comparaison entre valeurs d’éléments (xi < m),
ou affectation min = xi (incluant Ligne N1)
(4) fréquence d’opérations :
? (n − 1) comparaisons au pire et au meilleur cas
? 1 affectation au meilleur cas, n affectations au pire
109

12.4 Tri par sélection et tri par insertion


Une tâche algorithmique typique est le tri : réarranger les éléments d’une
séquence dans l’ordre croissant (=non-décroissant). Deux approches élémen-
taires sont le tri par sélection 5 et le tri par insertion. 5. Sélection est la tâche algorithmique de
choisir le minimum, maximum, ou, plus
généralement, la médiane ou le k-ème plus
Tri par sélection. Le tri par sélection 6 établit l’ordre dans les préfixes de grand élément dans une séquence.
longueur croissante en une boucle, en recherchant le plus petit élément restant 6. (fr):tri par sélection
dans le suffixe non-ordonné à chaque itération. Ce tri correspond à l’établisse-
ment de successeurs avec un bon ordre ≤ :

s( x ) = min{y|¬(y ≤ x )} = min{y| x < y}.

Le premier élément est le minimum, et on trouve les éléments ensuite en


choisissant toujours le minimum parmi ceux qui restent. Table 12.3 montre
le pseudocode. Analyse du temps de calcul : (1) modèle de l’entrée : taille n
est le nombre d’éléments ; (2) partie criticale : boucle for imbriquée dans
Lignes S3-S4 ; (3) opérations typiques : comparaison entre éléments, ou
n ( n − 1)
échange d’éléments. (4) Il faut toujours faire C (n) = (n − 1) + (n − 2) + · · · + 1 =
2
comparaisons au total. Le nombre d’échanges est (n − 1) au pire et 0 au
meilleur (si déjà trié).

Algo T R I - S E L E C T I O N ( x0 , x1 , . . . , xn−1 ) // tri croissant TABLE 12.3: Tri par sélection.


S1 for i = 0, 1, . . . , n − 2 do // aucune itération si n < 2
TABLE 12.4: Trace d’exécution du tri
S2 m=i // on cherche le min xm parmi { xi , xi+1 , . . . , xn−1 }
par sélection sur {1, 0, 6, 5} avec n = 4.
S3 for j = i + 1, . . . , n − 1 do L’élément encadré est celui choisi par m.
S4 if x j < xm then m = j
// maintenant xm = min{ xi , xi+1 , . . . , xn } i j m ( x0 , x1 , x2 , x3 )
S5 if i 6= m then échanger xi ↔ xm 0 0 ( 1 , 0, 6, 5) S2
0 1 1 (1, 0 , 6, 5) S4

 Ce tri est utile seulement quand le coût des comparaisons est négli- 0 2 1 (1, 0 , 6, 5)
0 3 1 (1, 0 , 6, 5)
geable par rapport aux échanges, mais alors il atteint le minimum possible.
0 1 (0, 1, 6, 5) S5
1 1 (0, 1 , 6, 5) S2
1 2 1 (0, 1 , 6, 5) S4
1 3 1 (0, 1 , 6, 5)
1 1 (0, 1, 6, 5) S5
2 2 (0, 1, 6 , 5) S2
2 3 3 (0, 1, 6, 5 ) S4
2 3 (0, 1, 5, 6) S5
3 (0, 1, 5, 6) S1
110

Tri par insertion. Le tri par insertion 7 maintient l’ordre dans les préfixes 7. :tri par insertion
(fr)

de longueur croissante en une boucle, en insérant le i-ème élément dans le


préfixe 0..(i − 1) à chaque itération. Table 12.5 montre le pseudocode.

Algo T R I - I N S E RT I O N ( x0 , x1 , . . . xn−1 ) // tri croissant TABLE 12.5: Tri par insertion.


I1 for i = 1, 2 . . . , n − 1 do
I2 j = i−1 // on veut insérer xi dans la séquence x0 , . . . , xi−1
I3 while j ≥ 0 ∧ x j > x j+1 do
I4 échanger x j ↔ x j+1
I5 j = j−1
I6 // invariant : x1 , . . . , xi est un réarrangement trié du même préfixe
Analyse du temps de calcul : (1) modèle de l’entrée : taille n est le nombre
d’éléments ; (2) partie criticale : boucle while de Lignes I3-I4-I5 ; (3) opé- TABLE 12.6: Trace d’exécution du tri par
insertion sur {1, 0, 9, 7, 2} avec n = 5.
rations typiques : comparaison entre éléments, ou échange d’éléments. L’élément encadré est x j+1 qui est inséré
(4) Le temps de calcul dépend de l’ordre des éléments à l’entrée. Pire cas dans sa place par la boucle while sur j.
n ( n − 1)
(trié en ordre décroissant) : (n − 1) + (n − 2) + · · · + 1 = i j ( x0 , x1 , x2 , x3 , x4 )
2
1 0 (1, 0, 9, 7, 2) I2
comparaisons et échanges ; meilleur cas (déjà trié) : (n − 1) comparaisons et
1 0 (1, 0 , 9, 7, 2) I3
aucun échange. On est proche du meilleur cas quand la boucle imbriquée 1 0 ( 0 , 1, 9, 7, 2) I4
s’exécute en quelques itérations pour tout i. Part exemple, si tout élément est 1 −1 (0, 1, 9, 7, 2) I3
déplacé par au plus ±d positions par rapport à l’ordre propre, l’algorithme 2 1 (0, 1, 9 , 7, 2) I2
2 1 (0, 1, 9, 7, 2) I3
fait ≤ n(d + 1) comparaisons.
3 2 (0, 1, 9, 7 , 2) I2
 Il existe de méthodes de tri plus efficaces au pire cas, mais c’est le
3 2 (0, 1, 9, 7 , 2) I3
meilleur tri en pratique pour un petit n ou pour une entrée presque triée. 3 2 (0, 1, 7 , 9, 2) I4
3 1 (0, 1, 7, 9, 2) I3
4 3 (0, 1, 7, 9, 2 ) I2
4 3 (0, 1, 7, 9, 2 ) I3
4 3 (0, 1, 7, 2 , 9) I4
4 2 (0, 1, 7, 2 , 9) I3
4 2 (0, 1, 2 , 7, 9) I4
4 1 (0, 1, 2, 7, 9) I3
5 (0, 1, 2, 7, 9) I1
111

12.5 Algorithmes récursifs

Définition 12.1. Un 8 algorithme est dit récursif s’il permet de résoudre un 8. Parfois, pour un problème compliqué,
problème avec une entrée de plus petite taille. l’algorithme récursif est défini à l’aide d’un
ou de multiples algorithmes auxiliaires, avec
des récursions entre eux.

La correction d’un algorithme récursif est assurée par sa construction :

(i) il y a (au moins) un cas terminal (cas de base), et

(ii) chaque appel récursif nous rend «plus proche» à un cas terminal.

(iii) La récursion exploit un ordre parmi les instances (entrées), avec les élé-
ments minimaux correspondant aux cas de base, impliquant la finitude des
récurrences (ce qu’on peut démontrer par induction).

Algorithme et définition récursive

La définition récursive d’une fonction correspond immédiatement à un


algorithme récursif pour le calculer. Table 12.7 montre l’exemple de la fac-
torielle. Le converse est aussi vrai : un algorithme récursif pour calculer une
fonction est aussi une définition récursive de la même fonction.

Algorithme F A C T (n) // calcul de n! TABLE 12.7: Définition et calcul de la


Définition factorielle
F1 if n = 0 then return 1 // cas terminal
0! = 1, et, si n > 0,
F2 f = F A C T (n − 1) // appel récursif 
n! = n · (n − 1)!
F3 return n · f

Penser en récurrences

Parfois, la récursion nous fournit des solutions très simples à des problèmes
complexes. La clé est d’identifier des sous-problèmes dont la solution mène
à la solution du problème original. On construit un tel algorithme en identi-
fiant la relation de récurrence, sans devoir réfléchir sur l’ordre final des actions
exécutées à travers de toutes les instances de sous-problèmes calculés. L’algo-
rithme résultant n’est pas nécessairement le plus efficace possible, mais souvent
plus facile à concevoir qu’une solution par des itérations compliquées. Et assez
souvent, comme dans le cas du problème de l’Exemple 12.2 ou des problèmes
typiques sur des arbres, l’algorithme récursif est le plus simple et le plus effi-
cace.

F IGURE 12.5: Jeu de Tours de Hanoî


112

Exemple 12.2 (Tours de Hanoï). Dans le jeu de Tours de Hanoï, il faut déplacer
des disques à diamètres différents (1, 2, . . . , n) d’une tour de départ à une tour d’arrivée
en passant par une tour intermédiaire, tout en respectant Règles 1 et 2 ci-dessous.
L’opération M O V E (i → j) déplace le disque en haut de tour i à tour j. Les disques
sont en ordre décroissant au début, et il y a trois tours.
Règle 1. On ne peut déplacer plus d’un disque à la fois. Un déplacement consiste de
mettre le disque supérieur sur une tour au-dessus des autres disques (s’il y en a).
Règle 2. On ne peut placer un disque que sur un autre disque plus grand ou sur un
emplacement vide.
On peut trouver une solution par un algorithme récursif : après qu’on place le n-ème
disque sur la tour finale, on doit ranger les (n − 1) disques restants au-dessus, et ils se
trouvent forcément en ordre décroissant sur la même tour (car le n-ème se déplace
entre les deux autres tours). Or, c’est le même problème pour déplacer (n − 1) disques
d’une tour à l’autre ! On définit alors par récurrence l’algorithme H A N O I (i, k, j, n)
qui déplace les n disques supérieurs sur tour i vers tour j en utilisant la tour intermé-
diare k :

H A N O I (i, j, k, n)
H1 if n 6= 0 then // cas terminal : n = 0, rien à déplacer
H2 H A N O I (i, j, k, n − 1) // sous-problème : déplacer (n − 1) disques
H3 M O V E (i → j )
H4 H A N O I (k, i, j, n − 1) // sous-problème : déplacer (n − 1) disques

Diviser pour régner


Diviser-pour-régner est un paradigme algorithmique de calculer la so-
lution à un problème de structure récursive. La démarche est de (1) couper le
problème dans des sous-problèmes similaires, (2) chercher la solution optimale
aux sous-problèmes par récursion, et (3) combiner les résultats.
Exemple 12.3 (Tournoi à élimination). On construit un algorithme récursif pour
la sélection du maximum dans une séquence, style diviser-pour-régner. (1) sous-pro-
blèmes : sous-séquence des deux moitiés ; (2) récursion : chercher le maximum dans
+ n −1
une sous-séquence { xi }is= s (indice de début s, longueur n) ; (3) combinaison des
résultats : prendre le maximum des maximums dans les deux sous-séquences.

Algorithme M A X R E C // diviser-pour-règner : tournoi à élimination


1
Entrée : séquence x = { xi }i`− =0 , indice de début s, taille n

Sortie : max xs , xs+1 , . . . , xs+n−1
// appel initial pour la séquence entière : M A X R E C ( x, 0, `)
D1 if n = 0 then return −∞ // cas terminal
D2 if n = 1 then return xs // cas terminal
D3 p = bn/2c // couper en deux
D4 g = M A X R E C ( x, s, p) // vainqueur du sous-problème gauche
D5 d = M A X R E C ( x, s + p, n − p) // vainqueur du sous-problème droit
D6 if d > g then return d else return g // combiner
113

Programmation dynamique
Quand on dessine un algorithme récursif avec des sous-problèmes chevau-
chants, l’ordre d’évaluation est important. Démarches possibles :
? en calcul descendant (top-down) : avec appels récursifs ; ou
? en calcul ascendant (bottom-up) : programmation dynamique
L’approche par programmation dynamique est basée sur l’identification des
sous-problèmes distincts qu’on calcule en induction, des plus petits vers les plus
grands.
Exemple 12.4 (Nombres Fibonacci par programmation dynamique). On peut
calculer les nombres Fibonacci f 0 = 0, f 1 = 1, f n = f n−1 + f n−2 par une
implémentation directe de la définition récursive, mais c’est très inefficace car les
récurrences nécessitent le calcul du même nombre Fibonacci plus qu’une fois. Au lieu
TABLE 12.8: Nombres Fibonacci par
des appels récursifs, c’est mieux de calculer les f n dans l’ordre ascendant de n. programmation dynamique et deux variables
F I B O R E C (n) // algorithme inefficace pour calculer f n auxiliaires.
R1 if n ∈ {0, 1} then return n F I B O D P 2 (n) // n > 0
// p = f i−1 et f = f i
R2 else return F I B O R E C (n − 1) + F I B O R E C (n − 2) // appels récursifs
D1 p = 0; f = 1 // i = 0
F I B O D P (n) // algorithme plus efficace pour calculer f n D2 while (0 < n) do
E1 f 0 = 0, f 1 = 1 D3 ( p, f ) = ( f , p + f )
D4 n = n−1 // i = i + 1
E2 for i = 2, 3, . . . , n do f i = f i−1 + f i−2 // programmation dynamique
D5 return f
E3 return f n
Algorithme F I B O DP utilise un mémoire de travail avec (n + 1) variables (les f i ),
mais, en fait, il suffit de garder juste les deux nombres précédents à la fois :
v. Table 12.8.
13 Analyse d’algorithmes
L’ E F F I C A C I T É d’un algorithme est jugée par surtout par son temps de calcul.
Le temps de calcul, comme les autres quantifications de performance, est
une fonction de la taille de l’entrée. En général, la performance n’est pas
entièrement déterminé par la taille, et on considère le pire (ou meilleur ou
moyen) cas.
Les fonctions qu’on rencontre en informatique sont parfois compliquées et difficile à exprimer simplement en une forme
fermée. Le but de l’analyse algorithmique est d’établir le comportement asymptotique de ces fonctions : quel genre de
terme domine le temps de calcul ? Typiquement, on arrive à caractériser le temps de calcul comme essentiellement une
fonction logarithmique, linéaire, quadratique, etc. Les techniques d’analyse asymptotique nécessitent leur notation ma-
thématique (équivalence asymptotique ∼ et «grand-O») qui formalisent les notions comme «essentiellement linéaire».
Entre autres, on a besoin des résultats sur les solutions asymptotiques pour les récurrences qui émergent quand l’algo-
rithme analysé est récursif.

13.1 Notation asymptotique et l’ordre de croissance


Afin de caractériser la croissance d’une fonction de la taille de l’entrée, on
examine le comportement asymptotique du terme dominant 1 . 1. La notation tilde sert précisement à définir
le terme dominant dans une formule :
Définition 13.1 (Notations tilde et petit-o). Pour deux fonctions f , g : N → 2n2 + 3n + 1 ∼ 2n2 1 + blg nc ∼ lg n etc.
R, on écrit

f (n)
f (n) ∼ g(n) si et seulement si lim =1  « f est asymptotiquement équivalent à g»
n→∞ g(n)
 f (n)
f (n) = o g(n) si et seulement si lim =0  « f est négligeable par rapport à g»
n→∞ g (n )

Théorème 13.1. Dans le domaine des fonctions, ∼ est une relation d’équivalence
et o est un ordre strict.

Démonstration. Omise : preuve directe des trois propriétés pour chacune. 

L’équivalence asymptotique est une relation d’équivalence, donc on peut TABLE 13.1: L’échelle standard : ordres de
définir les classes d’équivalence par des membres représentatifs. Par exemple croissance typiques dans l’analyse d’algo-
rithmes.
n ∼ (n + 1), et on peut choisir f (n) = n ou g(n) = n + 1 comme
h(n) ordre f (n)
représentatifs de toute fonction équivalente h : N → R avec limn→∞ n =
h(n) constante 1
n +1 = 1. En algorithmique, on préfère les caractérisations asymptotiqes logarithmique log n
en termes de fonctions élementaires, choisies sur une échelle standard qui linéaire n
linéarithmique n log n
comprend les fonctions représentatives quadratique n2
cubique n3
? pouvoirs de n : g(n) = n a incluant a = 0 pour constantes, exponentiel(*) An avec un 1 < A
? logarithmes et logarithmes itérés : g(n) = log n, log log n, log log log n, . . . ,
? exponentielles : g(n) = an avec une constante 1 < a, (*) Noter qu’on parle de croissance exponen-
tielle avec n’importe quel base : g(n) = 2n
et leurs produits comme n log log n. On cherche des approximations asymp- ou g(n) = 3n , mais an = o (bn )] si
a < b. Chaque choix de A correspond à une
totiques de forme T (n) ∼ c · g(n) où T (n) est la quantité (temps de calcul)
différente classe d’équivalence.
116

caractérisée, c est une constante et g(n) est une fonction sur l’échelle standard,
appellée l’ordre de croissance de T. La base du logarithme est sans impor-
tance dans l’ordre de croissance car la constante peut absorber le changement
de base : loga x = logb x/ logb a.
On rencontre les temps quadratiques et cubiques le plus souvent avec des
algorithmes itératifs : deux ou trois boucles imbriquées sur les éléments d’une
séquence. La croissance logarithmique et linéarithmique caractérisent le temps
de calcul des algorithmes populaires employant le principe de diviser-pour-
régner.

13.2 Diviser pour régner et récurrences pour temps de calcul

Le temps de calcul d’un algorithme récursif s’écrit typiquement par


une récurrence, suivant le paradigme de diviser pour régner : (1) cou-
per le problème dans des sous-problèmes similaires, (2) chercher la solu-
tion optimale aux sous-problèmes par récursion, et (3) combiner les ré-
sultats. Quand un problème de taille n est coupé en m sous-problèmes de
taille ni : i = 1, . . . , m, le temps de calcul est déterminé par la récurrence
T (n) = τpartition (n) + ∑i=1,...,m T (ni ) + τcombiner (n), où τcouper (n)
et τcombiner (n) sont les temps pour couper et combiner. La solution d’une
telle récurrence dépend des ordres relatifs des τ, mais il y a des cas typiques
qui appliquent souvent à des solutions algorithmiques.
? solution linéaire : combiner en temps constant ; p.e. T (n) = T (bn/2c) + T (en/2e) + 1 (tournoi à élimination)

? solution logarithmique : diviser pour éliminer ; p.e., T (n) = T (bn/2c) + 1 (recherche dichotomique)

? solution linéarithmique : combiner en temps linéaire ; p.e., T (n) = T (bn/2c) + T (dn/2e) + n − 1 (tri fusion).

Temps logarithmique : recherche dichotomique et ses amies

Recherche dichotomique. La recherche dichotomique sert à trouver l’indice


1
d’un élément x dans une séquence 2 triée { ai }i`−
=0 avec a0 ≤ a1 ≤ · · · a`−1 . 2. Séquence : c’est notre abstraction qui
L’algorithme retourner l’indice j avec a j = x, ou j < 0 si x n’est pas un correspond p.e., à un tableau dans le code.

membre. Le sous-problème traité par la solution récursive est la recherche de


l’élément dans une intervalle d’indices i..i + n − 1. La récurrence (quand 1 <
n) compare x à l’élément au milieu de l’intervalle à l’indice m = i + n/2. Si
x < am , alors la recherche continue avec les indices i..m − 1, ou si am < x,
alors la recherche continue avec m + 1..i + n − 1 :

 
x ∈ { ak }ik+=ni −1 = x ∈ { ak }m −1
k =i ∨ ( x = am ) ∨ x ∈ { ak }ik+=nm−+11
| {z } | {z } | {z }
≡ 0 si am < x succès ≡ 0 si x < am
117

Algo B S E A R C H ( x, { ak }, i, n) // binary search



// cherche élément x dans l’intervalle ai , ai+1 , . . . , ai+n−1
Entrée : valeur recherchée x, séquence { ak }, indice de départ i ≥ 0, longueur n ≥ 0
Sortie : indice j avec i ≤ j < i + n t.q. x = a j , ou valeur négative s’il n’existe pas
B1 if n = 0 then return −(i + 1) // cas terminal : échec, valeur retournée < 0
B2 m = i + b(n − 1)/2c // partitionner : indice de l’élément au milieu

B3 if x < am then return B S E A R C H x, a, i, b(n − 1)/2c // sous-problème

B4 else if xam < x then return B S E A R C H x, a, m + 1, d(n − 1)/2e // sous-problème
B5 else return m // cas terminal x = am : succès

On caractérise le temps de calcul par Bn , le nombre d’appels récursifs.


Le nombre total des comparaisons arithmétiques (x < am et am < x) en
Lignes B3–B4 est 2Bn au pire, et le temps actuel d’exécution au complet
devrait être proportionnel à Bn . Théorème 13.2 montre que la recherche
dichotomique se termine dans un temps logarithmique au pire.

Théorème 13.2. Soit Bn le nombre d’appels récursifs de B S E A R C H lors de l’échec


de la recherche parmi n éléments. Alors B0 = 0 et
TABLE 13.2: Le temps de calcul Bn de
recherche dichotomique dépend de la
longueur de n en binaire.
Bn = 1 + blg nc ∼ lg n (13.1)
n blg nc Bn n en binaire
au pire. Le nombre des appels récursifs lors de succès est ( Bn − 1) au pire. 1 0 1 1
2 1 2 10
3 1 2 11
4 2 3 100
5 2 3 101
6 2 3 110
Démonstration. Le pire case est quand l’appel récursif de la Ligne B4 continue avec 7 2 3 111
d(n − 1)/2e = bn/2c éléments, jusqu’à échec à n = 0. On a la récurrence 8 3 4 1000
9 3 4 1001
...
(
0 si n = 0
Bn =
Bbn/2c + 1 si 0 < n

D’où Bn = t + 1 quand 2t ≤ n < 2t+1 , ou bien t = blg nc. Maintenant,


lg n − 1 < blg nc ≤ lg n, donc

1 + blg nc lg n 1 + blg nc 1 + lg n
lim ≥ lim = 1; lim ≤ lim = 1,
n→∞ lg n n→∞ lg n n→∞ lg n n→∞ lg n

d’où 1 + blg nc ∼ lg n. Une recherche avec succès se termine au pire juste avant la
récursion pour déclarer échec, donc après Bn − 1 appels. 

 Bn égale le nombre de bits dans la représentation binaire de n.


On retrouve le même comportement dans d’autres contextes algorith-
miques, ou on peut diviser pour éliminer une fraction (50%) du problème.
118

Exemple 13.1 (Calculer x n ). Calculer x n n’est pas efficace par l’implémentation


directe de la récurrence xn = x· x n −1 .
Mais on peut en trouver une meilleure :


1
 si n = 0
TABLE 13.3: Calcul de la puissance.
xn = x n/2 · x n/2 si 0 < n est pair

 Algo P O W E R ( x, n)
 x · x bn/2c · x bn/2c si n est impair P1 if n = 0 then return 1
P2 else 
On construit un algorithme récursif correspondant : Nombre d’appels récursifs b(n) : j k
n
P3 y ← P O W E R x,
b(0) = 0 et pour 0 < n, b(n) = b(bn/2c) + 1 2

 c’est donc la longueur de la représentation binaire de n P4 if n mod 2 = 0


    P5 then return y · y
b(n) = lg(n + 1) = 1 + lg n . P6 else return x · y · y
| {z }
si 0 < n

Nombre de multiplications = b(n) + nombre de bits ’1’ (=longueur + poids de n en


binaire)

Temps linéarithmique : tri fusion


On peut facilement fusionner deux séquences triées par un algorithme
i
itératif qui utilise deux indices parcourant les deux séquences en coordination.
 4 6 8 9 A
F U S I O N ( A0 , . . . , An−1 ), ( B0 , . . . , Bm−1 ) // A, B : triés ; C : résultat
F1 i = 0; j = 0; k = 0 // i est l’indice dans A ; j est l’indice dans B min
F2 while i < n && j < m do
F3 if Ai ≤ Bj then Ck = A; i = i + 1; k = k + 1 1 2 5 7 B
F4 else Ck = Bj ; j = j + 1; k = k + 1 j
F5 while i < n do Ck = Ai ; i = i + 1; k = k + 1 // la reste si B est épuisé
1 2 4 5 6 C
F6 while j < m do Ck ← Bj ; j = j + 1; k = k + 1 // la reste si A est épuisé
k
F7 return (C0 , . . . , Cn+m−1 )
Fusion de séquences triées.
Lemme 13.3. L’algorithme F U S I O N calcule la fusion de deux séquences triées de
longueurs 0 < n, m en faisant (n + m − 1) comparaisons d’éléments au pire.

Démonstration. À chaque itération de la boucle de Ligne F2, il y a une comparaison (Ligne F3), et la somme (i + j) croît par 1.
On sort de la boucle quand i = n ou j = m, et au pire cela arrive avec i = n, j = m − 1 ou i = n − 1, j = m,
après i + j = n + m − 1 comparaisons. 

Le tri fusion 3 (mergesort) est un exemple classique d’usage du principe de 3. :tri fusion
(fr)

diviser pour régner dans une procédure récursive. Un sous-problème est le tri 9 6 3 0 2 1 8 7 5 4
des éléments aux indices g, g + 1, . . . , d − 1 avec 0 ≤ g ≤ d < n (une «sous-
séquence»). Démarche de l’algorithme : couper en deux sous-séquences, les division 50-50% sans réarrangement
trier dans deux appels récursifs, et ensuite combiner les résultats par F U S I O N .
Algo M E R G E S O RT ({ Ti }in=−01 , g, d) // premier appel avec g = 0, d = n 9 6 3 0 2 1 8 7 5 4
// récursion pour trier la sous-séquence aux indices g..d − 1 n/2 éléments n/2 éléments
M1 if d − g < 2 then return { Ti }dg−1 // cas de base : séquence vide ou un seul élément
 
M2 m ← (d + g)/2 // partitionner : m est au milieu récursion récursion
M3 M E R G E S O RT ( T, g, m) // sous-problème : trier partie gauche
M4 M E R G E S O RT ( T, m, d) // sous-problème : trier partie droite
M5 C = F U S I O N ({ Ti }im=−g1 , { Ti }id=−m1 ) // combiner : fusion des résultats 0 2 3 6 9 1 4 5 7 8

M6 { Ti }id=−g1 =C .// copier fusionner en O(n)

0 1 2 3 4 5 6 7 8 9

F IGURE 13.1: Démarche du tri fusion. La


séquence est divisée en deux sous-séquences
qui sont triées dans des appels récursifs, et
ensuite on combine les résultats par fusion en
un temps linéaire.
tab
procéder avec des
≤p ≥p
sous-tableaux pro
gau
récursion 9 récursion
6 3 0 récursion
2 1 8 7 5 4 récursion
récursion récursion récursionrécursion
pivot sou
récursion p n’est pas né
n/2 éléments n/2 éléments récursion récursion piv
les sous-tableaux
les
peuvent avoir des
0 2 3 6 9 1 4 5 70 82 3 6 9 1 4 5 7 8
≤ p ≥ ppe
0 2 3 6 récursion
9 1 4 5 7 récursion
8 119
fusionner en O(n) fusionner en O(n) récursion récursion
fusionner en O(n)
0 1 2 3 4 5 60 72 83 96 09 1 2 13 44 55 76 87 8 9
0 1 2 3 4 5 6 7 8 9 aucune combinaison nécessaireaucune combinais
aucune combinaison nécessaire
Analyse du tri fusion. Par Lemme 13.3, la fusion de Ligne M5 se fait par ( − ) n 1 fusionner en O(n)
Combinatorial correspondence
comparaisons au pire. On infère alors la récurrence suivante pour C (n), le 0 1 2 3 4 5 6 7 8 9 SN = number of bits Combinatoria
in the binary r

aucune combinaison nécess SN = number

nombre de comparaisons au total : C (0) = C (1) = 0, et Analyse du tri par fusion. Par Lemme
Analyse du
7.4,trilapar fusion.
fusion de Ligne
Par Lemme
M5 se fait
7.4, la fusion de Ligne M5 se fa
1
10
11

Analyse du tri par fusion. Par Lemme 7.4, la fusion de Ligne M5 se fait 100

  par (n 1) comparaisons au pire. par (nOn a1alors


) comparaisons
la récurrence
au pire. C (na),alors
pour On
1 le la récurrence pour C (n
1 1 1
101
110

C (n) = C bn/2c + C dn/2e + (n − 1) si 1 < n par (n 1) comparaisons au pire. On a alors la récurrence pour C (n), le
(13.2)de comparaisons
111
1 0 1 0 = 1 0 1 0
nombre au total
nombre
: de comparaisons au total :
1 1 1 1 1 1 1 1
1000
1001
nombre
8 de comparaisons au total8 1 0
:0 1 0 0 1 0 0 1 0 0
1010
1011

<0 Analyse8du tri par fusion. < Par Lemme 7.4, la fusion de Ligne M5 se fait 1100
1 0 1
0 {n = 0, 1} 1 0
1 0 1 1 0 1 1 0
{n = 0, 1}
1
S(n) des codages en binaire (v. C(n) =
1101

La même récurrence vaut pour la somme par (n <01) comparaisons


1 1 0 C (n) = au pire.1 On
1 1 0 1 0 a alors la 1récurrence
0, 1} pour C (n), le
{1 n1 =1 (7.5)
1110

n −1
 :CC (bnn/2
nombre
1 c1 + C d n/2
)1 = 1 e1 +1 : b1n/2
nCtotal
(au )1: 1c{n1+>C1}dn/2 e + (n 1) {(7.5) n > 1}
0 de comparaisons
Fig. 13.2) ! On a alors C (n) = S(n) = ∑k=1 1 + blg kc , et c’est une 1 0 0 :
81 0 0 1
C bn/2c + C dn/2e + (n 1) {n > 1} Same recurrence as mergesort (ex
8
1 0 0
1 0 0 1
0 1 0
8 1 0 0 1
0 0 1 0
1 0 0 1
0 0

Same recurre

somme qu’on peut calculer. S(n) =


<01 0 1 0 8 =
C (n<)0=
<1 0 1 0
0
S(n) =
+< 1 0 1 0 + 1 0 1 0
0 {n = 0, 1} {n = 0, 1} {n = 0, 1}
(7.5)
{ n = 0, 1}
:SS(bnn/2) =c + S :dn/2 C ben/2 +c: (n+S Cb1n/2
)dn/2{c ne+>+S1}(dnn/21e) +{(nn > 1}) {n > 1}
:S bn/2c + S dn/2e + (n 1) {n > 1}
Lemme 13.4. Pour tout 0 < n,
FLemme
Lemme 7.5. La solution
IGURE 13.2:
de la7.5.
Lemme La Récurrence
récurrence de (7.5)
7.5.
solution Ladeest
solutionpour
de la de
la récurrence récurrence
(7.5) estde (7.5) est
Lemme 7.5. La solution de la récurrence de (7.5) est
n −1  la somme des codages en binaire :
C (n) = n lg n n C (nn)u)= n+
21(nu) = (n1Clg n lg n(1n21 uun)+(+
211 n un lg 1,
1 1 u)n lg
+ n1 nn+
lg1,
n n+1
S(n) = ∑ 1 + blg kc = n(1 + t) − 2t+1 + 1 SC((nn)) =
= nSlgbnn/2 n c21 +u S (d1n/2 u)e ++ 1 (nn− lg1n) n + 1,
k =1 àavec
tout
avec la partie fractionnaire 0{<
ula=partie
avecnn.
lg fractionnaire
}la = lg nfractionnaire
partie u b=lg{nlgc.nu}= lgnn} =
={lg blglgnnc. blg nc.
avec la partie fractionnaire u = {lg n} = lg n blg nc.
Démonstration. La même Démonstration.
récurrence vaut pour larécurrence
La
somme
mêmedesrécurrence
codages
pour en
vautbinaire
pour des
(v.
la somme
Fig. ??),des
alors C (n) en
encodages S
(v.=bin
avec t = blg nc. Également, avec la partie fractionnaire u = lg n − blg nc, Démonstration.
Lemme 7.2. Démonstration. La même
Lemme 7.2. Lemme
La même
récurrence
7.2.
vaut la somme codages binaire
vaut pour la somme des codages en binaire (v. Fig. ??), alor
Fig

Lemme 7.2.

S(n) = n lg n − n 21−u − (1 − u) + 1. (13.3)
Tri hybride. En pratique,
Tri hybride. Tripar
le tri hybride.
Enfusion performe
En le
pratique, pratique,
le mieux
tri par le tri par
fusion dansfusion
une ap-
performe
Tri hybride. En pratique, le tri par fusion performe le mieux dans une ap-
performe le mieux
le mieux dans dans un
une ap-
proche hybride : laprocherécursion est trop:hybride
proche
hybride couteuse
la : pour
récursionla récursion
est les
troppetits
estsous-tableaux,
trop pour
couteuse couteuse pour sous-tableaux,
les petits les petits sous-t
partest 1rapide.
0 plus
proche hybride : la récursion est trop couteuse pour les petits sous-tableaux,
et le tri par insertionetestleplus rapide.
et insertion
tri par le triPour insertion
cette
plusraison,
est il vaut
rapide.
Pour implanter
cettePour cette
le tri
raison, raison,
il vaut il vaut implant
implanter le tri
Démonstration. On obsèrve que 1 + blg nc est exactement le nombre de bits dans la avec
et le tri par insertion est0plus 0rapide.
0 Pour0 cette raison, il vaut implanter le tri
par fusion un seuil ` > 1par
par fusion surfusion
avec les
unpetits
seuil >0seuil
avecsous-tableaux.
`un 1 sur`les 1 surpasse
On
> petits les petits
les sous-
sous-tableaux.
sous-tableaux. On passe On passe l
les sous-
représentation binaire de n. Figure 13.3 montre comment sommer les longueurs en par fusion avec un seuil 1` > 01 sur 0 les0 petits
1 sous-tableaux. On passe les sous-
tableaux de taille d tableaux
g < ` en tableaux
de Ligne
taille dM1 < `d en gLigne
de taille
gdirectement <à `unM1
entriLigne
par insertion.
M1 directement
directement à un
à un tri par tri par in
insertion.
tableaux de taille d g 2< ` 0 en Ligne
0 1 M1 0 directement à un tri par insertion.
bits : on peut placer tout dans une rectangle n × (1 + t), et il manque 20 , 21 , . . . , 2t
Gestion d’espace 3auxiliaire.
0 0 Typiquement,
1 1 on utilise un seul tableau auxiliaire
zéros en haut dans les colonnes 0, 1, . . . , t jusqu’à t = blg nc. Donc 4 pour faire la fusion. Avec
0 1 un0arrangement
0 bitonique, on peut simplifier les
t conditions dans5la boucle
0 1 de0la fusion.
1
S ( n ) = n (1 + t ) − ∑ 2i = n(1 + t) − (21+t − 1). 6 0 1 1 0
7
n
i =0 0 1 1 1
8 1 0 0 0
Avec la partie fractionnaire u = lg n − t, on a également, par la substitution 9 1 0 0 1
t = (lg n) − u 10 1 0 1 0
11 1 0 1 1
S(n) = n 1 + lg n − u) − (21+lg n−u − 1) = n lg n + n(1 − u) − 21−u · 2lg n + 1, 1+t
et on arrive à Éq. (13.3) en notant 2lg n = n.  F IGURE 13.3: Somme des longueurs de
codage en binaire.

Ainsi on a les bornes serrées pour le nombre de comparaisons

n lg n − n + 1 ≤ C (n) < n lg n − 0.9139 · · · n + 1


=(lg e−lg lg e) 1 A(x)

qui montrent la croissance linéarithmique C (n) = Θ(n log n).


0.95
Théorème 13.5. Le tri fusion fait C (n) ∼ n lg n comparaisons au pire.
lg(e/lg (e)) = 0.9139
lg lg e=0.5287 x
Démonstration. Par Lemme 13.4, la solution de la récurrence de (13.2) est 0 0.5 1

C (n) = n lg n − n 21−u − (1 − u) + 1 = n lg n − nA(1 − u) + 1, F IGURE 13.4: La fonction A( x ) = 2x − x
dans l’intervalle 0 ≤ x ≤ 1.
avec la partie fractionnaire u = {lg n} = lg n − blg nc, et la fonction
A( x ) = 2x − x. Or, A( x ) ≤ 1 pour tout 0 ≤ x ≤ 1 (Figure 13.4), et il
atteint son minimum à x = lg lg e avec valeur A(lg lg e) = lg(e/ lg lg e).
Donc
n lg n − n + 1 ≤ C (n) < n lg n,
C (n)
et limn→∞ n lg n = 1. 
120

13.3 Notation grand-O


Quoi faire si f n’est asymptotiquement équivalente à aucune 4 fonction sur f (n)
4. Exemple : la limite limn→∞ n
notre échelle ? On peut toujours essayer de borner la croissance de f par une n’existe pas pour f (n) = n(3 + (−1)n )
(car f (n) = 4n si n est pair et f (n) = 2n
autre fonction qui converge. On définit les notation O , Ω et Θ, style ∃ − ∀ si f est impair) mais c’est toujours une
(Définition 13.2), en y ajoutant la convergence impliquée par petit-o. Cette croissance linéaire.
définition classique est équivalente à la notion de borner par des fonctions
convergentes (Théorème 13.6).
Définition 13.2 (Notations de Landau). Soit f , g : N → R deux fonctions, et
R+ = { x ∈ R | 0 < x } les nombres positifs. On définit les notations «grand-O»,
«Omega», «Thêta» et «petit-o») :

f (n) = O g(n) ↔ ∃c ∈ R+ : ∃ N : ∀n : n ≥ N → | f (n)| ≤ c · | g(n)|

f (n) = Ω g(n) ↔ ∃c ∈ R+ : ∃ N : ∀n : n ≥ N → c · | g(n)| ≤ | f (n)|

f (n) = Θ g(n) ↔ f (n) = O( g(n)) ∧ f (n) = Ω( g(n))

f (n) = o g(n) ↔ ∀c ∈ R+ : ∃ N : ∀n : n ≥ N → | f (n)| < c · | g(n)|

Fonctions décroissantes. La même définition sert à caractériser la décroissance


d’une fonction :
1 1
− = Θ(1/n2 ).
n n+1
Théorème 13.6 (Convergence asymptotique et les notations de Landau). Soit
f , g : N → R deux fonctions. Alors,
 
f = O( g) ↔ ∃ f + ∈ RN : ∃b ∈ R+ : f + (n) ∼ b · | g(n)| ∧ ∀n ∈ N : | f (n)| ≤ f + (n)
fonction f + : N → R
 
f = Ω( g) ↔ ∃ f − ∈ RN : ∃ a ∈ R+ : f − (n) ∼ a · | g(n)| ∧ ∀n ∈ N : f − (n) ≤ | f (n)|
fonction f − : N → R

Démonstration.((si) Supposons que f = O( g). Par Définition 13.2, il existe 0 < c, 0 ≤ N t.q. | f (n)| ≤ c| g(n)| pour tout n ≥ N.
| f (n)| si n < N f + (n)
Soit f + (n) = Alors, | f (n)| ≤ f + (n), et on a limn→∞ | g(n)| = c, donc f + (n) ∼ c| g(n)|. La preuve pour
c · | g(n)| si N ≤ n
Ω procède de même façon (mutatis mutandis).
(seulement si) Supposons qu’il existe une fonction f − : N → R et une constante 0 < a t.q. f − (n) ∼ a · | g(n)| et f − (n) ≤ | f (n)|
f (n)
pour tout n. Soit 0 < ε < 1 arbitraire (p.e., ε = 1/2). Par la définition de la limite limn→∞ a|−g(n)| = 1, il existe N ∈ N
f ( n)
t.q. pour tout n ≥ N, 1 − ε < a| g(n)|
, donc (1 − ε) a| g(n)| < | f (n)|. Avec c = (1 − ε) a, une constante positive, on a
c| g(n)| < f − (n) ≤ | f (n)| pour tout n ≥ N. La preuve pour O procède de même manière (avec 1 < ε). 

Ordres de croissance comme relations et ensembles


Même si on vise à utiliser l’échelle standard dans les termes asymptotiques, la définition est applicable à toutes paires
de fonctions. Ainsi, les notations grand-O, grand-Ω et grand-Θ engendrent des relations binaires dans le domaine de
fonctions RN . En particulier, on établit un ordre et une équivalence parmi les fonctions par ordre de croissance.
? f = Θ( g) définit une relation d’équivalence : réflexive ( f = Θ( f )), symétrique (si f = Θ( g) alors g = Θ( f ))
et transitive (si f = Θ( g) et g = Θ(h) alors f = Θ(h)) : f et g ont le même ordre de croissance ;
121

? f = O( g) est un ordre partiel : réflexive ( f = O( f )), antisymétrique (si f = O( g) et g = O( f ) alors f =


Θ( g)), et transitive : f croît au plus aussi rapidement que g ;

? f = Ω( g) est l’inverse de O : f = Ω( g) ssi g = O( f ) : f croît au moins aussi rapidement que g .

 On remarque qu’il est bien possible pour deux fonctions f , g de ne pas être en aucune relation par ordre de crois-
sance : ni f = O( g), ni f = Θ( g), ni f = Ω( g).

Définition 13.3 (Ordre de croissance). On dit que l’ordre de croissance


de la fonction f est g ssi f = Θ( g). (Remarque : g est une fonction sur l’échelle
standard en général.)

Notation ensembliste. Lors de la caractérisation de la croissance d’une fonc-


tion f , on cherche une fonction g sur l’échelle standard avec laquelle on peut
établir une relation O, Ω, ou idéalement, Θ. Ainsi, on peut définir aussi l’en-
semble des fonctions qui sont en une relation particulière avec une g fixe :

L = f ∈ RN f = Θ(n) est l’ensemble des fonctions de crois-

sance linéaire, ou avec O(n2 ) = f ∈ RN f (n) = O(n2 ) on peut
écrire (n + 3)2 ∈ O(n2 ) en abusant 5 la notation un peu. Il y a des au- 5. La notation 
teur.es/ouvrages qui insistent qu’il faut écrire f ∈ O( g) ou f ∈ Θ( g) parce n 7→ (n + 3)2 ∈ O(n 7→ n2 ) serait trop
dogmatique.
qu’il s’agit des ensembles de fonctions. Ignorez ces opinions. Il n’y a aucune
raison d’interdire f (n) = O(n), tandis que f ∈ O( g) est parfaitement valide
aussi, car cela parle de la même chose.

Expressions avec termes asymptotiques


La notation asymptotique est utile pour donner des approximations plus
précises que juste l’ordre de croissance. Supposons qu’on a une fonction f (n)
avec une expansion sur l’échelle standard :

f ( n ) = c 0 g0 ( n ) + c 1 g1 ( n ) + c 2 g2 ( n ) + · · ·

où gk+1 = o ( gk ) pour tout k. On peut alors décrire f en une précision


croissante selon le but de la caractérisation :

f = O ( g0 ) f = c 0 g0 + O ( g1 )
f = c 0 g0 + c 1 g1 + O ( g2 ) ···

Ici, le dernier terme dans les formules est le terme d’erreur. Plus généra-
lement, une formule avec des termes en notation de Landau (o, O, Θ, Ω)
est interprétée comme des termes cachés : chacun peut être remplacé par une
fonction bien définie, avec l’ordre de croissance du terme borné en notation
Landau. Par exemple :
 n
nn = 2lg n = 2n lg n = 2Θ(n log n) et f (n) = 2Θ(n log n) ↔ lg f (n) = Θ(n log n)
122

Fonctions notables
Nombres harmoniques. Expansions asymptotiques :
n
1 1 1 1
Hn = ∑ i
= 1 + + + · · · = ln n + γ + O(1/n) = ln n + O(1) = Θ(log n)
2 3 n
 croissance logarithmique
i =1

avec γ = limn→∞ ( Hn − ln n) = 0.5772 · · · (la constante d’Euler).

Nombres Fibonacci. Les nombres Fibonacci ont une croissance exponentielle



Fn ∼ cϕn avec ϕ = (1 + 5)/2 = 1.618 · · · et c = 5−1/2 : On a la solution exacte

ϕn ϕn − (− ϕ)−n
Fn = √
Fn = √ ∓ O( ϕ−n ) = Θ( ϕn )  croissance exponentielle 5
5 | {z }
(1.618··· )n −(−0.618··· )n

Formule de Stirling. La factorielle a une croissance superexponentielle 6 : 6. "superexponentielle" : pour toute


√  n n constante a, an = o (n!) :

n! ∼ 2πn = Θ nn+1/2 e−n an 1
 n
ae
| {z e } lim = lim √
n→∞ n! n→∞ 2πn n
formule de Stirling  n
1 1
≤ lim √ = 0.
mais log(n!) est linéarithmique : ∑nk=1 ln k = ln(n!) = n ln n − n + n→∞ 2πn 2
O(log n) = Θ(n log n). car ae/n ≤ 1/2 quand n ≥ d2aee.
TABLE 13.4: Preuves avec définition de
grand-O.
Calcul avec bornes asymptotiques
? n = O(n3 ). Preuve : on veut une
Parfois on doit retourner à la définition de O pour montrer l’ordre de
constante c t.q. n ≤ cn3 presque partout.
croissance. Dans une telle preuve, on remplace les notations O, Ω, Θ par Avec c = 1 et n ≥ 1, ceci est vrai
des expressions logiques (∃c∃ N t.q. . . . ) de la définition, et on procède avec car n2 ≥ 1 quand n ≥ 1, et donc
n = n · 1 ≤ n · n2 = 1 · n3 . . 
déduction par instanciation et généralisation de quantificateurs : v. Table 13.4.
? n3 6= O(n). Preuve : s’il existe 0 < c
et N ≥ 0 t.q. n3 ≤ cn pour tout n ≥ N,
Arithmétique avec bornes asymptotiques. En analysant le temps de calcul d’un
on a n2 ≤ c pour tout n ≥ N,√ ce qui est
algorithme, on travaille avec des bornes asymptotiques dans les formules. Dans impossible pour n ≥ max{ N, c}. 
le but d’arriver à des croissances reliées à l’échelle standard, suivez les règles ? Si f = O( g) avec g ≥ 0 presque
partout, alors f + g = O( g). Preuve : si
suivantes (valides quand f , g sont des fonctions non-négatives) :
f (n) ≤ c · g(n) pour tout n ≥ N, alors
 Omettre les facteurs constantes : O(c · f (n)) = O( f (n)) si c est une f (n) + g(n) ≤ (c + 1) g(n) pour tout
n ≥ N. 
constante positive. Ne jamais laisser les constantes à l’intérieur de O, Ω, Θ,
o. TABLE 13.5: Règles d’arithmétique
pour grand-Ω et grand-Θ.
 Omettre les termes non-dominants : O( f ) + O( g) = O( g) si f = O( g) .
Une expression de O( f (n) + g(n)) ou O( f (n)) + O( g(n)) peut être Pour toutes fonctions non-négatives
toujours simplifiée à O(max{ f , g}). On garde juste un terme à l’intérieur f , g : N → {y | y ≥ 0} et constante
de O, Ω, Θ. 0<c:

 Faire attention aux constantes dans des croissances super-polynomiales : Ω(c · f ) = Ω( f )



garder-les dans les exposants et les bases des exponentielles. Exemple : Ω( f + g) = Ω max{ f , g}
O(5n 2lg n ) = O(5n n) mais 6= O(4n n) et 6= O(5n 2ln n ) = O(5n nln 2 ). Ω( f · g) = Ω( f ) · Ω( g)
 Multiplier les ordres O( f ) · O( g) = O( f · g) : une boucle qui s’exécute Θ(c · f ) = Θ( f )
O( g(n)) fois, prenant O( f (n)) par chaque itération mène à un terme Θ( f + g) = Θ max{ f , g}


O ( f g ). Θ( f · g) = Θ( f ) · Θ( g)
Les mêmes règles appliquent à Ω et Θ (v. Table 13.5).
123

13.4 Algorithmes numériques avec entiers


Lors de l’analyse d’un algorithme numérique sur les entiers de grandeur
arbitraire, notre modèle de l’entrée est celui de la représentation d-aire, le
plus souvent avec d = 2. La taille de l’entrée est donc mesurée par la longueur
des arguments. La longueur de la représentation est logarithmique 7 dans la 7. Si d n’est pas fixé, la longueur est
valeur de l’entier x représenté (en binaire, 1 + blg x c bits pour 0 < x). La ∼ logd x = Θ(log x/ log d).

représentation d-aire R( x ) = xn−1 · · · x0 est inversible car x = ∑in=−01 xi di .


Maintenant
!
n −1
x=d ∑ x i d i −1 + x0 = d b x/dc + ( x mod d)
| {z } | {z }
i =1
quotient reste

donc x0 = x mod d et xn−1 · · · x1 = R b x/dc . Ainsi, on peut définir Algo A D D ( xn−1 · · · x0 , yn−1 · · · y0 )
R( x ) par récurrence pour tout x ∈ N : R(0) = λ la chaîne vide, et si 0 < x, A1 p = 0 // retenue précédente
A2 for i = 0,j1, . . . , n −
k 1 do
x +y + p
A3 q = i 2i
R( x ) = R(b x/dc) · ( x mod d) (13.4) A4 zi = ( xi + yi + p) − 2q
| {z } | {z }
= xn−1 ··· x1 = x0 A5 p=q
A6 zn = p
(où · dénote concaténation). A7 return zn · · · z0
À l’école élémentaire, on apprend des algorithmes efficaces pour calculer F IGURE 13.5: Algorithme d’addition
binaire. Étant donné les représentations
les opérations arithmétiques de base. Les algorithmes à base decimale se géné- binaires de x = ∑in=−01 xi 2i et y = ∑ik=−01 yi 2i
ralisent sans problème à base quelconque 1 < d. On apprend par exemple, on calcule le résultat z = ( x + y) =
les règles de calculer la représentation decimale de z = ( x + y) à partir de la ∑in=0 zi 2i bit par bit dans l’ordre i =
0, 1, . . . , n à l’aide d’un bit de retenue (carry
représentation decimale des arguments x, y, ce qu’on peut effectuer sur papier, bit).
en alignant les chiffres dans une même colonne par position. En particulier,
supposons qu’on a x = xn−1 · · · x0 et y = yn−1 · · · y0 en représentation à
base d, en remplissant avec chiffres 0 aux positions fortes pour avoir la même
longueur 8 . On résout z = ∑in=0 zi di par (13.4) : 8. Étoffer avec yi = 0 aux chiffres de poids
fort si y < dn−1 et serait «plus court» que x à
R(z) = R( x + y) = R(b( x + y)/dc) ·(( xy ) mod d) base d, par exemple avec x = 120 et y = 7,
| {z } on a y0 = 7, y1 = 0, y2 = 0 à base 10 avec
=zn ···z1 remplissage
 n −1 
i −1
  
=R ∑ ( xi + yi ) d + ( x0 + y0 )/d · ( x0 + y0 ) mod d
| {z } | {z }
i =1
= q1 = z0

Cela mène aux récurrences à l’aide des retenues (carry) {q1 , . . . , qn } :

z0 = ( x0 + y0 ) mod d q1 = b( x0 + y0 )/dc
Algo M U L ( xn−1 · · · x0 , yn−1 · · · y0 )
zi = ( xi + yi + qi ) mod d qi+1 = b( xi + yi + qi )/dc pour 1 ≤ i < n M1 z = 0 · · · 0
M2 for i = 0, 1, . . . , n − 1 do
zn = qn . M3 if xi = 1 then z = A D D (z, y)
M4 y = y << 1 // décalage à gauche
Figure 13.5 montre le pseudocode de l’addition en binaire avec un carry bit. M5 return z
F IGURE 13.6: Multiplication en binaire. En
Multiplication à base d-aire se calcule par des additions « décalées » :
Ligne M4, on met à jour y2i : la multipli-
 n −1  cation par 2i est un décalage gauche de bits
xy = ∑ xi d · y = ∑ y · di
i
 décalage de xi y = y par i vers gauche par i positions (dénoté par << i en Java, C,
i =0
et d’autres langages de programmation).
{ i | x i 6 =0}
124

En binaire, xi = 0 ou xi = 1, donc les termes à sommer sont des multiples


y · 2i sur les positions i avec xi 6= 0. Figure 13.6 montre le pseudocode.
L’addition se fait un temps logarithmique dans la valeur des arguments x, y,
mais le calcul est de temps linéaire en n, la longueur de la représentation. On
utilise les mêmes algorithmes pour le calcul modulo 2n avec n-bit entiers
(n = 8, 16, 32, 64, . . . ), en ignorant le (n + 1)-ème bit (zn ) qui est le plus
lourd. Ainsi, l’addition de n-bit entiers (entre 0 et 2n−1 ) est de Θ(n) temps,
et la multiplication est de Θ(n2 ). Soustraction se fait aussi en temps linéaire.
Division euclidienne avec la méthode de division longue (qu’on a pratiquée à
l’école) pour calculer b x/yc et ( x mod y) avec temps quadratique Θ(n2 ).

F IGURE 13.7: Implémentation itérative


Algorithme d’Euclide de l’algorithme d’Euclide. On assume
que 0 ≤ b ≤ a.
G C D ( a, b )
L’algorithme d’Euclide calcule le plus grand commun diviseur gcd( a, b) I1 while b 6= 0 do
selon la récurrence gcd( a, b) = gcd(b, a mod b), avec division eucli- I2 r = a mod b; a = b; b = r
I3 return a
dienne modb. La division se fait en Θ(log a + log b) temps à chaque itéra-
tion, donc on doit déterminer le nombre de calculs a mod b jusqu’à ce qu’on
arrive au cas terminal b = 0 (Figure 13.7). L’analyse de l’algorithme d’Euclide
révèle une connexion surprenant aux nombres Fibonacci.

Théorème 13.7 (Algorithme d’Euclide et les nombres Fibonacci). Pour tout


( a, b) ∈ N2 , avec b ≤ a, soit


0 si b = 0
N ( a, b) = 
max n Fn ≤ b ∧ Fn+1 ≤ a si 0 < b

TABLE 13.6: Temps de calcul pour l’algo-


rithme d’Euclide. La colonne n = N ( a, b)
où Fn est le n-ème nombre Fibonacci (F0 = 0, F1 = 1, Fn+2 = Fn + Fn+1 ). Si est le nombre d’itérations de l’algorithme
au pire, qui est déterminé par le nombre
0 < b, alors N (b, a mod b) < N ( a, b)
Fibonacci qui borne l’argument plus petit
entre a et b.

a b N ( a, b)
0 0
1 1 1
2, 3, . . . 1 2
2 2 2
3, 4, . . . 2 3
3, 4 3, 4 3
5, 6, . . . 3, 4 4
5, 6, 7 5, 6, 7 4
8, 9, . . . 5, 6, 7 5
...
125

Preuve de Théorème 13.7. Soit N ( x ) = max{n : Fn ≤ x < Fn+1 }. Par définition,



N ( a, b) = min N ( a) − 1, N (b) pour tout 0 ≤ b < a. On considère N ( a, b) = n.
Cas (i) : n < N (b) ≤ N ( a) et n = N ( a) − 1. Donc N ( a) = N (b) = n + 1. Alors
a < Fn+2 et Fn+1 ≤ b :

a mod b = ( a − b) mod b ≤ a − b < Fn+2 − Fn+1 = Fn .

On a donc N ( a mod b) < n et, en conséquence,



N (b, a mod b) = min N (b) − 1, N ( a mod b) < n.

Fn Fn+1 Fn+2
Cas (i)

b < Fn a
Fn Fn+1
Cas (ii)

b a

Cas (ii) : n = N (b) et n ≤ N ( a) − 1. Immédiatement



N (b, a mod b) = min N (b) − 1, N ( a mod b) ≤ n − 1 < n.

Théorème 13.8. Si a < Fn+2 ou b < Fn+1 , alors l’algorithme d’Euclide fait n
divisions au plus.

Démonstration. On a N ( a, b) ≤ n, et N ( a, b) décroît par au moins 1 par itération.


L’algorithme arrive à un cas terminal avec b = 0 quand N ( a, 0) = 0. 

Or, on a croissance exponentielle


√ 
Fn ∼ 5−1/2 ϕn , d’où N (b) ∼ log ϕ b 5 ∼ c lg b,

avec c = 1/ lg ϕ = 1.4404 · · · . En conséquence, le nombre des divisions


est au plus linéaire dans la longueur des arguments. Puisque les divisions se
font en un temps quadratique, l’algorithme s’exécute en temps cubique au pire

dans la longueur de ses arguments : Θ(log b) · Θ (log a)(log b) = Θ(n3 )
| {z } | {z }
itérations division
si on travaille avec n-bit entiers. L’analyse montre que le pire cas est avec des
nombres Fibonacci consécutifs (qui sont alors toujours premiers entre eux) :

gcd( Fn+1 , Fn ) = gcd( Fn , Fn−1 ) = · · · = gcd(1, 0) = 1.


| {z }
Fn−1 = Fn+1 − Fn
| {z }
n fois
126

13.5 Protocoles cryptographiques basés sur l’arithmétique des entiers


Les algorithmes basiques des entiers sont implantés dans les circuits 9 du 9. :unité arithmétique et logique
(fr)

CPU pour 32 bits ou 64 bits. Il est rarement nécessaire de dépasser cette ran-
gée arithmétique dans les applications informatiques, excepté dans le domaine
de cryptographie. En une application cryptographique, on transforme un
message clair m en un message chiffré s (le cryptogramme), à l’aide d’une
clé k secrete. La fonction de chiffrement (m, k ) 7→ s est calculée rapidement,
tandis que déduire le message m à partir de s doit être difficile sans connaître
la clé. Un tel problème algorithmique difficile est celui du logarithme discret : 10. Algorithme inventé en 1977 par Ro-
étant donné les entiers n, x et y = x k mod n, inférer l’exposant k. Le pro- nald R IVEST, Adi S HAMIR, et Leonard
tocole du chiffrement RSA 10 est basé sur le théorème d’Euler. Sa sécurité A DLEMAN.

provient de la difficulté de la décomposition des entiers en facteurs premiers.


Exemple 13.2 (Échange de clés DH). Le protocole cryptographique d’échange de clés Diffie-Hellman sert à établir un
secret partagé x entre deux agents Alice (p.e., serveur) et Bob (p.e., client) sur un canal de communication surveillé par l’agent
adversaire Ève.
0. Préalablement, ou au début du protocole, Alice et Bob choisissent un nombre premier p et une base 0 < g < b. Ève peut
connaître p et g, ou non : cela ne fait aucune différence.
1. Alice choisit a au hasard et envoie A = g a mod p à Bob.
2. Bob choisit b au hasard et envoie B = gb mod p à Alice.
3. Le secret est x = g ab mod p : Alice et Bob peuvent le calculer x = Ab mod p = B a mod p.
L’adversaire Ève peut écouter et connaître p, g, A, B, mais elle ne pourra pas calculer a, b et surtout le secret x : le problème du
logarithme discret (a ≡ logg A (mod p)) est considéré difficile. Par contre, avec exponentation rapide (Exemple 13.1), on
obtient x y mod p en Θ(log3 p) temps, donc les calculs d’Alice et Bob s’effectuent rapidement. Le secret x peut servir comme clé
de session et encoder la conversation d’Alice et Bob après. Présentement (Transport Layer Security v1.3), clés de 2048 bits (donc
lg p ≈ 2048) sont considérées sécuritaire.

Théorème 13.9 (Théorème d’Euler). Soit ϕ : N+ → N+ la fonction d’in- TABLE 13.7: La fonction d’indicatrice
d’Euler, dénotée par ϕ. La colonne P(n) est
dicatrice qui est le nombre d’entiers positifs inférieurs à n qui sont premiers avec n. l’ensemble des entiers positifs entre 1 et n
Pour deux entiers 0 < a, n, si gcd(n, a) = 1, alors a ϕ(n) ≡ 1 (mod n) qui sont premiers avec n.

n ϕ(n) P(n)
Démonstration. Soit P(n) l’ensemble des entiers premiers avec n comptés par ϕ 1 1 {1}
 2 1 {1}
P(n) = k 1 ≤ k ≤ n ∧ gcd(n, k) = 1 3 2 {1, 2}
4 2 {1, 3}
Considérons la fonction x 7→ ax mod n pour un a fixe et tout x ∈ P(n). Elle est une 5 4 {1, 2, 3, 4}
injection par Lemme 11.14, si ax ≡ ay (mod n) et x, y ∈ P(n), alors x = y car 6 2 {1, 5}
a( x − y) ≡ 0 (mod n) implique que n | ( x − y). À cause de l’existence de l’inverse 7 6 {1, 2, 3, 4, 5, 6}
multiplicatif de a modulo n (Théorème 11.12), la fonction est aussi surjective 8 4 {1, 3, 5, 7}
9 6 {1, 2, 4, 5, 7, 8}
dans P(n) car pour tout y ∈ P(n), on a ax mod n = y avec x = a−1 y mod n.
10 4 {1, 3, 7, 9}
Considérons le produit de tous les entiers premiers avec n, entre 1 et n. Puisque 11 10 {1, . . . , 10}
x 7→ ax mod n est une bijection entre eux, 12 4 {1, 5, 7, 11}
...
∏ k≡ ∏ ( ak) (mod n) 1 · 3 · 5 · 7 ≡ (1 · 3) (3 · 3) (5 · 3) (7 · 3) (mod 8)
k∈ P(n) k∈ P(n) ≡3 ≡1 ≡7 ≡5

≡ a| P(n)| · ∏ k (mod n)
k∈ P(n)

Or, ∏k∈ P(n) k 6≡ 0 (mod n), donc a ϕ(n) ≡ 1 (mod n). 


127

Le théorème d’Euler est le cas général d’un fameux théorème de Fermat.

Théorème 13.10 (Le petit théorème de Fermat). Si p est un nombre premier, et


il ne divise pas l’entier positif a, alors

a p−1 mod p = 1 .

Démonstration. Découle de Théorème 13.9 car tout nombre 1 et ( p − 1) sont


premiers à p quand ce dernier est un nombre premier, donc ϕ( p) = p − 1. 

Corollaire 13.11. Si gcd( M, n) = 1, et c ≡ 1 (mod ϕ(n)), alors

Mc ≡ M (mod n)

Démonstration. Soit c = 1 + kϕ(n). Par Théorème 13.9,


 k
M1+kϕ(n) ≡ M1 M ϕ(n) ≡ M · 1k ≡ M (mod n)

Le chiffrement RSA 11 utilise Corollaire 13.11 pour l’encodage-décodage 11. :chiffrement RSA
(fr)

de messages M à l’aide d’une paire de clés publiques et privées.


Exemple 13.3 (Chiffrement RSA). Le protocole débite avec la génération d’une
paire de clés :
1. Choisir deux nombres premiers distincts p et q.
2. Calculer n = pq et ϕ(n) = ( p − 1)(q − 1).
3. Choisir e ∈ {1, 2, . . . , n − 1}, avec gcd( ϕ(n), e) = 1.
4. Calculer d comme l’inverse multiplicatif de ≡ 1 (mod ϕ(n)).
La clé publique est la paire (e, n), et la clé privée est d. (Les nombres p, q et ϕ(n)
sont secrets, mais on n’en a plus besoin après la génération des clés.) La paire de clés
sert dans deux genres de protocoles :
Envoyer un message secret : Alice veut envoyer le message clair M (avec
gcd( M, n) = 1) ; elle l’encode par la clé publique (e, n) de Bob qui donne le
message chiffré S = Me mod n ; Bob déchiffre avec sa propre clé privée d :

Sd mod n = Med mod n = M mod n car ed ≡ 1 (mod ϕ(n)).

Authentification par signature numérique : Alice utilise sa clé privée pour


encoder a = Ad mod n ; elle envoie a avec le message A ; Bob peut vérifier A
avec la clé publique (e, n) d’Alice :

ae mod n = Ade mod n = A mod n car de ≡ 1 (mod ϕ(n)).

Dans des applications contemporaines (utilisant Transport Layer Security v1.3), e est
souvent choisi fixe (le nombre premier e = 65537 = 216 + 1 est populaire), et n est
choisi pour atteindre une longueur exigée (p.e., 1024/2048/4096 bits ou 128/256/512
bytes).
L’adversaire Ève connait les clés publiques d’Alice et Bob. Si elle veut briser le message
chiffré S, elle doit deviner la clé privée d de Bob qui est l’inverse multiplicatif
modulo ϕ(n), et pour cela, elle doit calculer ϕ(n) = ( p − 1)(q − 1) qui requiert la
factorisation de n = pq. Elle ne peut pas prétendre être Alice non plus, parce que pour
cela elle doit deviner la clé privée d d’Alice, et cela demande ϕ(n) pour le calcul de
l’inverse.
14 Dénombrement

D É N O M B R E M E N T , ou comptage est la plus ancienne branche des mathé-


matiques. Dénombrer veut dire qu’on détermine le nombre des éléments d’un
ensemble S. En un sens générique, le but de dénombrement est d’établir
l’existence d’une bijection f : S → N vers un ensemble N de taille connue.
L’ensemble S est fini si et seulement s’il existe une bijection à un cardinal 1 1. Le cardinal est ce qu’on choisit pour
fini N = [n] = {0, 1, . . . , n − 1} avec un entier naturel n ∈ N (ou bijection représenter tout ensemble dans sa classe
d’équivalence. Simplement dit, c’est un
à {1, . . . , n} dans la vie quotidienne, voir Figure 14.1). ensemble quelconque N de taille | N | = n
La combinatoire énumérative est la branche des mathématiques centrée qu’on fixe comme «étalon de taille n» pour
justifier que |S| = n avec une bijection
autour 2 du dénombrement de structures discrètes, ou plus généralement, des f : S → N.
ensembles définis par d’autres ensembles. Dénombrement et énumération
sont deux faces d’une même pièce car une bijection est inversible. Si un
ensemble S est de taille finie, alors on peut énumérer les éléments de S par la
réciproque de la bijection f : S → [n]
n o
S= f −1 (0 ), f −1 (1 ), f −1 (2 ), . . . , ,

et ainsi f établit un bon ordre  dans S par x  y ↔ f ( x ) ≤ f (y). Ou F IGURE 14.1: Compétences de dénom-
bien, avec un bon ordre quelconque à la main on peut énumérer les membres brement à l’école maternelle : établir la
de S : cardinalité |S| = n avec 1 ≤ n ≤ 10.
On utilise une composition de la bijection
  g : S → R (compter S) et la bijection
s0 = min S, s1 = min S − {s0 } , s2 = min S − {s0 , s1 } , ... f : R → [n], avec R = {doigts},
R = {dés}, et R = {numéraux}. On
note aussi les représentations isomorphes de
car tous les minimums existent. Et parfois, c’est plus facile de commencer avec la fonction de successeur n 7→ n + 1.
l’énumération. Si la suite {si }in=−01 énumère les éléments d’un ensemble S sans 2. À part du dénombrement exact et asymp-
oublier ni répéter les membres, alors la taille de l’ensemble est |S| = n, car la totique, la combinatoire comme domaine
de mathématiques inclut des études de
fonction f (s) = min{i : si = s} est une bijection S → [n] bien définie. construction, existence ou optimisation
de structures discrètes, ou, en général,
l’emploi de techniques de dénombrement
14.1 Égalité et ordre pour adresser des problèmes mathématiques
diverses.

On définit l’égalité de cardinalités et l’ordre entre eux à l’aide des bijections


et des injections :
? | A| = | B| si et seulement s’il existe une bijection f : A → B
? | A| ≤ | B| si et seulement s’il existe une injection f : A → B.
On peut démontrer l’existence d’une bijection directement, ou par des équi-
valences applicables :
(i) | A| = | B| ssi | A| ≤ | B| et | B| ≤ | A| il existe deux injections f : A → B
et g : B → A ;
(ii) | A| = | B| ssi | A| ≤ | B| et | A| ≥ | B| il existe une injection f : A → B
et une surjection h : A → B.
130

14.2 Principe de multiplication


Le principe de multiplication est la règle de dénombrer des couples,
tuples, séquences ou suites, et chaînes. Théorème 14.1 formalise le principe
généralisé au produit de t ensembles.
Supposons une procédure comprend deux tâches consécutives. S’il y a
n1 façons d’effectuer la première tache, et pour chacune de ces façons, F IGURE 14.2: Combien de plaques
il y a n2 façons d’effectuer la deuxième tache, alors il y a n1 n2 façons d’immatriculation de forme CCCLLL
d’effectuer la procédure. avec C pour chiffres (10 possibilités)
et L pour lettres (26 possibilités) ? Par
le principe de multiplication, c’est n =
Théorème 14.1 (Principe de multiplication). Soit { A1 , . . . , At } une séquence
10 × 10 × 10 × 26 × 26 × 26 = 17 576 000.
d’ensembles finis avec tailles | A j | = n j . Alors,

t t

|
A1 × A2 × · · · × A t
{z }
= ∏ Aj = ∏ nj
j =1 j =1
produit cartésien : nombre de tuples

Preuve par induction en t. (base) Si t < 2, le théorème est trivial. Soit t = 2. Si on a


les bijections f : A → [ p] et g : B → [n], alors h( a, b) = n · f ( a) + g(b) est une
bijection A × B → {0, 1, . . . , pn − 1}. En particulier, elle est inversible par division

euclidienne : a = f −1 by/nc et b = g−1 (y mod n) si y = h( a, b).
(induction) Maintenant supposons que le théorème vaut pour un t quelconque, et soit
{ A1 , . . . , At+1 } une séquence d’ensembles finis. Par l’hypothèse d’induction,
∏it=1 Ai = ∏it=1 ni = p. Avec A = ∏it=1 Ai et B = At+1 on a (cas de t = 2)
+1 t +1
∏it=1 Ai = | A × B| = | A| · | B|, donc ∏it= 1 A i = p · n t +1 = ∏ i =1 n i . 

Principe d’exponentiation
Le principe d’exponentiation est celui du produit quand on choisit du
même nombre de possibilités à chaque tâche.
Si une procédure comprend t tâches, et pour chacune tâche, il y a n
façons de l’effectuer, alors il y a nt façons d’effectuer la procédure.
On formalise le principe d’exponentiation comme le dénombrement des
fonctions avec domaine et co-domaine fixés. Puisqu’on peut énumérer les
membres d’un ensemble A = { a1 , . . . , at }, toute fonction f avec domaine A
est uniquement déterminée par la séquence des images correspondants, ou le
t-tuple

f ( a1 ), f ( a2 ), . . . , f ( a t ) .

Théorème 14.2 (Dénombrement des fonctions). Soit A, B deux ensembles finis


de tailles | A| = k, | B| = n. Le nombre de fonctions distinctes A → B est

B A = | B || A| = nk

Démonstration. Considérer la bijection entre les fonctions


f : {0, 1, . . . , k − 1} → {0, 1, . . . , n − 1} et les séquences d’images
{ f i }ik=−01 = { f (i )}ik=−01 . Selon le Principe de multiplication (Théorème 14.1), le
nombre des séquences d’images est ∏ik=−01 n = nk . 
131

Exemple 14.1 (Dénombrement des opérations logiques). Combien d’opéra-


tions logiques binaires possibles ? Une opération binaire est isomorphe 3 à une fonc- 3. Strictement dit, les valeurs de vérité 0
tion f : {0, 1}2 → {0, 1}. La sémantique de l’opération est définie par la table et 1 sont à l’extérieur du domaine, donc on
de vérité avec 22 rangées, où il y a deux possibilités (0 ou 1) dans chaque cellule travaille plutôt avec des fonctions booléennes :
faux booléenne représente la valeur loqique
pour f ( p, q). Donc, il y a 24 = 16 opérations binaires (0, p, q, p ∧ q, p ∨ q, p → q, «faux» qu’on a dénoté par 0.
d
q → p, ↔ q, et leurs négations), En général, il y a 22 opérations d-aires parce que la
table de vérité contient 2d rangées : 28 , 216 , 232 , . . . pour d = 3, 4, 5, . . .

Exemple 14.2 (Dénombrement des chaînes). Combien de chaînes sur un


alphabet A de taille n = | A| ? Une chaîne est une séquence de membres de A, donc
il y a n` chaînes de longueur ` ∈ N. Par exemple, il y a 2` chaînes binaires de
longueur `, et 4` séquences d’ADN de longueur ` (alphabet A = {A, C, G, T}).

Permutations
Le principe de multiplication s’applique aussi si les choix ne sont pas in-
dépendants mais le nombre de choix possibles ne change pas dans la même
position : l’ensemble des tuples A1 × A2 × · · · × At a toujours la même
cardinalité ∏tk=1 | Ai | si tout ensemble Ai dépend de ( Ai−1 , . . . , A1 ) mais la
taille | Ai | dépend seulement de i. On utilise le principe de multiplication dans TABLE 14.1: k-arrangements des éléments
{1, 2, 3} avec répétitions.
le dénombrement des injections.
k=1 k=2 k=3 k=4
Théorème 14.3 (Dénombrement des injections). Soit A, B deux ensembles 1 11 111 1111
finis de tailles t = | A| ≤ | B| = n. Le nombre des fonctions injectives A → B est 2 12 112 1112
égal à 3 13 113 1113
21 121 1121
t −1 22 122 1122
n! 23 123 1123
P(n, t) = n(n − 1)(n − 2) · · · (n − t + 1) =
| {z } ∏ (n − i ) = (n − t)!
.
31 131 1131
i =0
factorielle décroissante 32 132 1132
33 133 1133
Démonstration. Mettre les éléments de A = { a1 , a2 , . . . , at } dans n’importe quel 211 1211
t 212 1212
ordre. La suite des images f ( ai ) i=1 détermine la fonction f : A → B. On compte
213 1213
le nombre de possibilités : (1) il y a n choix pour b1 = f ( a1 ) ; (2) il y a (n − 1) choix 221 1221
pour b2 = f ( a2 ) 6= b1 ; (3) il y a (n − 2) choix pour b3 = f ( a3 ) ∈ B − {b1 , b2 }, 222 1222
etc., jusqu’à (n − t + 1) choix pour bt = f ( at ) ∈ B − {b1 , . . . , bt−1 }. En 223 1223
conséquence, le nombre de t-tuples des injections est ∏kt− 1 n!
 231 1231
=0 ( n − k ) = ( n − t ) ! . 232 1232
233 1233
Il existe plusieurs notations pour la factorielle décroissante, avec souli- 311 1311
gnement ou parenthèses dans l’exposant. En une définition récursive : 312 1312
313 1313

1 321 1321
si t = 0 322 1322
nt = n(t) =
n · (n − 1)(t−1) si t > 0 323 1323
331 1331
332 1332
et donc 333 1333
n!
P(n, t) = n(t) = . . . (81 choix au total)
(n − t)!
lorsque 0 ≤ t ≤ n sont des entiers.
La définition récursive est valide pour tout 0 ≤ t : mais si n < t, on a
P(n, t) = n(t) = n(n − 1) · · · 0 · · · (n − t + 1) = 0. En effet, si | A| > | B|,
132

il n’existe pas d’injection A → B. Si | A| = | B|, alors une injection A → B


est nécessairement aussi une bijection. Considérant le cas t = n, on obtient le
corollaire sur le comptage de bijections.

Corollaire 14.4 (Dénombrement des bijections). Soit A, B deux ensembles finis TABLE 14.2: k-arrangements des élé-
ments {1, 2, 3, 4} sans répétitions (ou
de même taille n = | A| = | B|. Le nombre de fonctions bijectives A → B est égal
k-permutations). La colonne k = 4 donne les
à (n!). permutations.

Un arrangement de 0 ≤ k objets parmi n est un choix de k objets, cha- k=1 k=2 k=3 k=4
cun étant choisi parmi les n. Dans un arrangement avec répétitions (ou 1 12 123 1234
avec remise), les object choisis ne sont pas nécessairement distincts. Dans un 2 13 124 1243
3 14 132 1324
arrangement sans répétitions, les objets sont distincts. Une permutation 4 21 134 1342
est un n-arrangement de n éléments sans répétition, c’est à dire, un ordon- 23 142 1423
24 143 1432
nancement de tous les éléments. Une k-permutation est un k-arrangement 31 213 2134
sans répétitions. Un k-arrangement est la même chose qu’une séquence de 32 214 2143
longueur k ou un k-uple, mais considéré comme un objet combinatoire. 34 231 2314
41 234 2341
Un k-arrangement a1 · · · ak choisi parmi les éléments d’un ensemble A 42 241 2413
de taille n correspond à une fonction g : [k] → A, et un arrangement sans 43 243 2431
312 3124
répétitions est injective. En particulier, une permutation est une bijection 314 3142
[k] → A. Par nos théorèmes sur le dénombrement des fonctions, on a le 321 3214
comptage des arrangements : 324 3241
341 3412
? le nombre de k-arrangements avec répétitions est nk (Théorème 14.2), 342 3421
n! 412 4123
? le nombre de k-arrangements sans répétitions est (n−k)!
(Théorème 14.3), 413 4132
421 4213
? le nombre de permutations est (n!) (Corollaire 14.4).
423 4231
431 4312
432 4321
14.3 Principe d’addition
Le principe d’addition est la règle que la cardinalité d’ensembles disjoints
est additive.
Si on peut accomplir une tâche de n1 façons et une deuxième en n2
façons, et si on ne peut effectuer ces tâches simultanément, alors il y a
(n1 + n2 ) façons d’effectuer l’une ou l’autre de ces tâches.

Théorème 14.5 (Principe d’addition). Soit { A1 , . . . , At } une séquence d’en-


sembles finis disjoints deux à deux (Ai ∩ A j pour tout i 6= j). Alors,

t
[ t

|
A1 ∪ A2 ∪ · · · ∪ A t =
{z }
Aj = ∑ | A j |.
j =1 j =1
union d’ensembles disjoints

Démonstration. Soit n j = | A j | la taille du j-ème ensemble, et soit f j : A j → [n j ] des


bijections. On définit une fonction f : ∪ j A j → [n] avec n = ∑ j n j : si a ∈ A j , alors
f ( a) = f j ( a) + ∑i< j ni . Ansi, les images des A j sont distincts : f ( Ai ) ∩ f ( A j ) = ∅ si
i 6= j. La fonction f est surjective car ∪ j f ( A j ) = [n] par construction. Puisque
f ( a) = f (b) implique f j ( a) = f j (b) pour un j et toute f j est injective, f est une
injection. Donc, la fonction f est une bijection qui établit que
St
j =1 A j = n = ∑tj=1 n j . 
133

Principe de soustraction
Le principe de soustraction découle de l’addition. Le cas particulier de
Théorème 14.5 de t = 2 est le résultat que

| A ∪ B| = | A| + | B| si A ∩ B = ∅. (14.1)

On peut alors dénombrer ( A − B) en employant l’addition à la partition


{ A ∩ B, A − B} de A.

Théorème 14.6 (Principe de soustraction). Soit A, B deux ensembles finis.


Alors
A − B = | A| − A ∩ B . (14.2)

Démonstration. Puisque ( A − B) et ( A ∩ B) sont disjoints, et


( A − B) ∪ ( A ∩ B) = A (Théorème 5.2), on a | A| = A − B + A ∩ B par le
principe d’addition de (14.1). 
134

14.4 Principe de division


Le principe de division découle du produit. Le cas le plus simple for-
malise double comptage : en comptant deux fois les éléments d’un ensemble
fini A, on obtient 2| A|. En comptant t fois, on obtient t| A|.
Si on peut performer une procédure de m façons pour accomplir la
même tâche, et si cette tâche est de sorte que pour toute façon de
l’effectuer il y a exactement t façons uniques de la procédure, alors il y
a n = m/t façons distinctes d’effectuer la tâche.
Il y a plusieurs situation quand on peut exploiter le principe de division
(par Théorème 11.6 sur les équivalences et les partitions)
? si on a une surjection f : A → B telle que les ensembles pré-images
f −1 (b) = { a | f (b) = a} sont de même taille t, alors | B| = | A|/t ;
? si on a une partition d’un ensemble A en sous-ensembles disjoints deux à
deux de même taille t, alors il y a | A|/t membres dans la partition ;
? si l’ensemble fini A de taille m est équipé d’une relation d’équivalence
pour laquelle les classes d’équivalence sont de même taille t, alors il y a
n = m/t classes d’équivalence.

Combinaisons
Une k-combinaison de k objets parmi n objets distincts est un choix
TABLE 14.3: k-combinaisons des éléments
non-ordonné de k éléments distincts de l’ensemble. Une k-combinaison {1, 2, 3, 4} sans répétitions. (Comparer avec
correspond à un sous-ensemble de taille k : on a autant de k-combinaisons les k-arrangements sans répétitions : il suffit
de trier les membres de l’arrangement pour
que des sous-ensembles de cardinalité k. On compte les k-combinaisons (non- obtenir la combinaison correspondante.)
ordonnées) par une application du principe de division avec le nombre de
k-permutations (ordonnés). k=1 k=2 k=3 k=4
1 12 123 1234
Théorème 14.7 (Dénombrement de combinaisons). Le nombre de combinaisons 2 13 124
3 14 134
quand 0 ≤ k ≤ n est égal à 4 23 234
  24
n(n − 1)(n − 2) · · · (n − k + 1) n! n 34
C (n, k) = = =
k (k − 1)(k − 2) · · · 1 (n − k)! · k! k

(Il n’y a pas de k-combinaisons avec k < 0 ou k > n.)

Démonstration. Considérer les k-arrangements de n éléments avec la fonction


f : Ak → ( Ak) définie par f ( a1 , . . . , ak ) = { a1 , . . . , ak }, où Ak ⊆ Ak est l’ensemble
des k-arrangements sans répétitions et ( Ak) dénote les sous-ensemble de taille k. Chaque
classe d’équivalence définie par f comprend exactement k! éléments (nombre des
ordres possibles pour k éléments du sous-ensemble) : C (n, k) = k!1 · (n− n!
k)!


Une combinaison avec répétitions est un choix de k éléments, sans


tenir compte de l’ordre de choix (donc une combinaison) et sans exiger que
les éléments soient distincts (donc les éléments peuvent être répétés). Ainsi, la
combinaison avec répétitions correspond à la notion de multi-ensemble, ou un
ensemble équipé avec une fonction de multiplicité sur les membres.
135

Théorème 14.8 (Dénombrement de combinaisons avec répétitions). Le TABLE 14.4: k-combinaisons des élé-
  ments {1, 2, 3, 4} avec répétitions. La
n+k−1 dernière colonne montre la bijection aux
nombre de combinaisons avec répétitions est égal à .
k 4-combinaisons sans répétitions parmi
{1, 2, . . . , 7} qu’on obtient par +1 dans la
2e, +2 dans la 3e et +3 dans la 4e colonne.
Démonstration. Sans perte de généralité, on compte les combinaisons de l’ensemble
A = {1, 2, . . . , n}. Une k-combinaison sans répétitions est alors une chaîne
k=1 k=2 k=3 k=4 C (7, 4)
a0 a1 · · · ak−1 avec 1 ≤ a0 < a1 < · · · < ak−1 ≤ n. Une k-combinaison avec 1 11 111 1111 1234
répétitions est une chaîne b0 b1 · · · bk−1 avec 1 ≤ b0 ≤ b1 ≤ · · · ≤ bk−1 ≤ n. On 2 12 112 1112 1235
définit la fonction suivante sur les combinaisons avec répétitions : 3 13 113 1113 1236
4 14 114 1114 1237
f (b0 · · · bk−1 ) = a0 · · · ak−1 avec ai = bi + i. 22 122 1122 1245
23 123 1123 1246
Par construction, l’image a0 · · · ak−1 alors admet 24 124 1124 1247
1 ≤ a0 < a1 < · · · < ak−1 ≤ n + (k − 1), donc f établit une fonction de 33 133 1133 1256
34 134 1134 1257
k-combinaisons avec répétitions parmi n éléments aux k-combinaisons sans répétitions
44 144 1144 1267
parmi n + (k − 1) éléments. La fonction est inversible, étant donné que pour tout 222 1222 1345
1 ≤ a0 < a1 < · · · < ak−1 ≤ n + (k − 1), on a 1 ≤ b0 ≤ b1 ≤ · · · ≤ bk−1 ≤ n si 223 1223 1346
bi = ai − i. Puisque f est une bijection (voir l’exemple dans Table 14.4), le nombre 224 1224 1347
de k combinaisons avec répétitions parmi n éléments est égal à C (n + k − 1, k).  233 1233 1356
234 1234 1357
244 1244 1367
333 1333 1456
334 1334 1457
344 1344 1467
444 1444 1567
2222 2345
2223 2346
2224 2347
2233 2356
2234 2357
2244 2367
2333 2456
2334 2457
2344 2467
2444 2567
3333 3456
3334 3457
3344 3467
3444 3567
4444 4567
136

14.5 Inclusion-exclusion TABLE 14.5: Preuve de Théorème 14.9


(On revisite Théorème 6.10.)
Le principe d’addition ne marche que si les ensembles sont disjoints.
Démonstration. (Preuve 1) On
Quand A et B ne sont pas disjoints, | A ∪ B| < | A| + | B|, car la somme montre (14.3a) par les principes d’addi-
compte les membres de A ∩ B deux fois. On a plutôt | A ∪ B| = | A| + | B − A|. tion et de soustraction. Par (14.1) avec
( A ∪ B ) = A ∪ ( B − A ),
Théorème 14.9. Soit A et B deux ensembles finis quelconques (non pas nécessaire- A ∪ B = | A| + | B − A|
ment disjoints). Alors = | A| + | B| − | A ∩ B| par (14.2)

A ∪ B = | A| + | B| − A ∩ B (14.3a) (Preuve 2, esquissée) On construit une


bijection pour montrer (14.3b). On définit
| A| + | B| = A ∪ B + A ∩ B (14.3b) deux ensembles
G = ({1} × A) ∪ ({2} × B)
On peut employer (14.3a) pour inférer la formule d’inclusion-exclusion  
D = {U} × ( A ∪ B ) ∪ {I} × A ∩ B .
dans le cas d’union de trois ensembles. La formule générale (Théorème 14.11)
est inférée par induction de manière analogue. Puisqu’ils sont définis par des unions
disjointes, on a | G | = | A| + | B| et
Théorème 14.10. Soit A, B, C trois ensembles finis. Alors | D | = | A ∪ B| + | A ∩ B|. Soit la fonction
f : G → D définie par
 
| A ∪ B ∪ C | = | A| + | B| + |C | − | A ∩ B| + | B ∩ C | + | A ∩ C | + | A ∩ B ∩ C | f (1, a) = (U, a)
(
(U, b) si b 6∈ A
Démonstration. On emploie (14.3a) avec A ∪ B et C, et après avec ( A ∩ C ) f (2, b) =
(I, b) si b ∈ A
et ( B ∩ C ) :
pour tout a ∈ A et b ∈ B. La fonction f est
( A ∪ B) ∪ C = | A ∪ B| + |C | − ( A ∪ B) ∩ C une bijection, donc | G | = | D |. 

= | A ∪ B| + |C | − ( A ∩ C ) ∪ ( B ∩ C ) par distributivité
 
= | A ∪ B| + |C | − | A ∩ C | + | B ∩ C | − ( A ∩ C ) ∪ ( B ∩ C )
= | A| + | B| − | A ∩ B| + |C | − | A ∩ C | − | B ∩ C | + | A ∩ B ∩ C |

On obtient la taille de l’union de plus de 3 ensembles comme la somme


alternées des tailles des 2-intersection, des 3-intersection, des 4-intersections,
etc.

Théorème 14.11. Soit { A1 , . . . , An } une séquence d’ensembles (non pas nécessairement disjoints). Alors
 
A 1 ∪ A 2 ∪ · · · ∪ A n = | A 1 | + · · · + | A n | − | A 1 ∩ A 2 | + · · · + | A n −1 ∩ A n | ± · · ·
n \ \
= ∑ (−1)t+1 ∑ Ai = ∑ (−1)| I |+1 Ai
t =1 | I |=t i ∈ I ∅6= I ⊆{1,...,n} i∈ I
| {z } | {z }
t-intersections tout ensemble d’indices I 6= ∅

Démonstration. (Omise.) 

Le principe d’inclusion-exclusion (balancer sur-comptage/sous-comptage


par signes ± alternants) est utile quand on peut formuler le dénombrement
d’un ensemble A par une union A = ∪k Ak avec la famille d’ensembles
{ A1 , A2 , . . . } qui ne sont pas disjoints, mais pour lesquels on sait dénom-
T
brer des intersections arbitraires i∈ I Ai . Dans le théorème suivant sur le
137

comptage des surjections, on utilise le principe d’inclusion-exclusion dans


la preuve et on doit dénombrer les t-intersections étant donné une famille
d’ensembles { A1 , A2 , . . . , Ak }. Il y a exactement (kt) choix possibles pour t
indices distincts I = {i1 , . . . it }, donc dans la formule d’inclusion-exclusion
(Théorème 14.11), on doit compter autant de termes dans les sommes de
t-intersections ∑| I |=t ∩i∈ I Ai .

Théorème 14.12 (Dénombrement de surjections). Soit A un n-ensemble 4 4. Un n-ensemble est un ensemble de n


et B un k-ensemble. Pour 0 ≤ k ≤ n, le nombre de surjections est éléments distincts.

k  k  
k n t k−t k
∑ (−1) t (k − t) = ∑ (−1) tn
t =0 t =0
t

Il n’existe pas de surjection A → B si | A| < | B|.


Démonstration. Sans perte de généralité, supposons que A = [n] = {0, 1 . . . , n − 1} et que B = [k] = {0, 1, . . . , k − 1} avec
0 ≤ k ≤ n. (Il n’y a pas de surjection [n] → [k] si n < k). Soit Fb l’ensemble de fonctions f : A → B avec b 6∈ { f ( a) | a ∈ A} qui
évitent un b ∈ B (donc Fb = ( B − {b}) A ). L’union ∪b∈ B Fb est l’ensemble de toutes les fonctions A → B qui ne sont pas surjectives.
On a | Fb | = (k − 1)n . L’intersection des Fb peut être dénombré par le principe de multiplication : pout tout ensemble d’indices
∅ 6= I ⊆ [k], la taille de l’intersection ∩i∈ I Fi = (k − | I |)n car on peut choisir les n images à partir de l’ensemble B − I. On
dénombre les surjections S = B A − ∪b∈ B Fb par inclusion-exclusion :

|S| = kn = | B A |, toutes les fonctions A → B


− ∑ | Fi | membres de Fi sur-comptés
0≤ i < k

+ ∑ Fi ∩ Fj 2-intersections sous-comptés
0≤ i < j < k

− ∑ Fi1 ∩ Fi2 ∩ Fi3 3-intersections sur-comptés


0≤ i1 < i2 < i3 < k

± · · · + (−1)k F1 ∩ · · · ∩ Fk il y a une seule k-intersection

Ainsi,

k k
|S| = kn + ∑ (−1)t ∑ ∩i∈ I Fi = kn + ∑ (−1)t ∑ (k − t)n sommer par t-intersections
t =1 | I |=t t =1 | I |=t
     
k k k
= k n − k · ( k − 1) n + ( k − 2) n − ( k − 3) n ± · · · choix si | I | = t
2 3 t
k  
k
= ∑ (−1)t t
(k − t)n .
t =0

La somme étend jusqu’à t = k avec le terme (−1)k (kk)0n = 0n : la formule vaut pour n = 0 (il y aura une surjection car 00 = 1) et
pour 0 < n (terme sans effet car 0n = 0). 
138

14.6 Coefficients binomiaux


Le coefficient binomial 5 est la quantité 5. :coefficient binomial
(fr)


n ( k ) 0 si k < 0
(nk) = = ∏ k −1 ( n − i ) (14.4)
k!  i =0 si 0 ≤ k
k!

La définition de (14.4) est valide aussi pour n < 0 (avec la factorielle décrois-
sante n(k) = 0), mais normalement on assume que 0 ≤ n. Si n ∈ N, alors
 TABLE 14.6: Formule du binôme avec
   n ≤ 5.
n 0 si k < 0 ou si n < k
= (14.5)
k  n!
si 0 ≤ k ≤ n ( x + y)2 = x2 + 2xy + y2
k!(n−k )!
( x + y)3 = x3 + 3x2 y + 3xy2 + y3
Les coefficients binomiaux ont reçu leur nom de la formule du bi-
( x + y)4 = x4 + 4x3 y + 6x2 y2 + 4xy3 + y4
nôme 6 :
n   ( x + y)5 = x5 + 5x4 y + 10x3 y2 + 10x2 y3 + 5xy5 + y5
n n k n−k
( x + y) = ∑ x y (14.6)
k =0
k
6. La formule est valide aussi avec un
exposant négatif, mais alors on a une série
La formule est valide dans tout domaine équipé avec des opérations d’ad- −n k
infinie : (1 + x )−n = ∑∞k =0 ( k ) x
dition, multiplication et exponentiation, donc non pas seulement pour x, y conjointement avec la définition générale des
réels, mais aussi pour nombres complexes, congruences modm, ou même coefficients binomiaux de (14.4).
(fr):formule du binôme.
polynômes, ou matrices carrées.
La formule de (14.6) vient du dénombrement des termes dans le dévelop-
pement 7 du produit de la puissance : 7. Exemple : ( x + y)3 = xxx + xxy +
x3 x2 y
n xyx + xyy + yxx + yxy + yyx + yyy
( x + y)n = ( x + y)( x + y) · · · ( x + y) = ∑ ck · x k yn−k , x2 y xy2 x2 y xy2 xy2 y3
| {z } k =0
n facteurs n
n-k
parce que les exposants dans les termes possibles x a yb
sont tous avec a + 1 1 1 1 1 1 1 1 1

b = n. La constante ck est le nombre de fois qu’on obtient le terme x k yn−k 1 2 3 4 5 6 7 8

après avoir enlevé les parenthèses dans le produit : c’est le nombre de k- 1 3 6 10 15 21 28


1 4 10 20 35 56 Pascal
combinaisons de facteurs ( x + y) où on choisit x (dans les (n − k) facteurs
k 1 5 15 35 70
restantes on choisit simultanément y). Il s’ensuit que ck = C (n, k) = (nk)
1 6 21 56 crosse de hockey
(Théorème 14.7).
1 7 28
1 8
Identités remarquables
8

1
n=

   
n n n−1 F IGURE 14.3: Représentation des co-
Une récurrence évidente dans (14.4) est = · pour
k k k−1 efficients binomiaux dans le triangle de
0 < n, k. La récurrence fondamentale des coefficients binomiaux est la Pascal. Après avoir initialisé les cellules
(n0 ) = (nn) = 1, on peut remplit les
relation de récurrence de Pascal (Figure 14.3). autres cellules par la récurrence de Pas-
1
      cal de (14.7) : (n+ n n
k ) = ( k ) + (k −1), la
n+1 n n somme des deux voisins précédents dans la
= + (14.7) même rangée (même k), ou colonne (même
k k k−1
n − k = (n − 1) − (k − 1)). On obsèrve
aussi les identités de crosse de hockey :
avec les cas de base (n0 ) = (nn) = 1. On peut justifier la récurrence de (14.7)        
k k+1 n n+1
par un argument sur le dénombrement de combinaisons. Une k-combinaison + +···+ =
k k k k+1
.
139

des éléments [n + 1] = {0, 1, . . . , n} est soit un k-combinaison de [n] si le


dernier élément n’est pas choisi, soit un (k − 1)-combinaison de [n] avec le
choix du dernier élément n, donc C (n + 1, k) = C (n, k ) + C (n, k − 1).
Pour une démarche alternative, la formule du binôme peut être exploitée
en une preuve algébrique, par l’argument que l’égalité de deux polynômes
A( x ) = ∑k ak x k = ∑k bk x k = B( x ) implique l’égalité des coefficients
ak = bk pour tout k. Ici, ( x + 1)n = ∑nk=0 (nk) x k , et alors ( x + 1)n+1 = ( x +
 
+1 n +1 k
1) ∑nk=0 (nk) x k . On obtient 8 que ∑nk= 0 ( k ) x = ∑ n +1 n
k =0 ( k ) + ( n
k −1 x ,
) k 8. En détail :
n   n   n  
donc dans chaque terme, (n+k 1)
= (nk) + (k−n 1). (1 + x ) ∑
n k
x = ∑
n k
x +∑
n k +1
x
k =0
k k =0
k k =0
k
Les coefficients binomiaux sont une source inépuisable d’identités remar-
n    
n k n +1 n
quables. On a (nk) = (n−n
k ) parce que choisir k éléments est la même chose = ∑ x +∑ xj
k =0
k j =1
j−1
que d’exclure (n − k) éléments. Par correspondance avec le dénombrement
n+1   
de sous-ensembles, ∑nk=0 (nk) = 2n . La même égalité découle de la formule du = ∑
n
+
n
xk
k k−1
binôme pour (1 + 1)n . Avec ( x, y) = (−1, 1), la formule donne k =0

n
0 = (−1 + 1)n = ∑ (nk)(−1)k 1n−k = ∑ (2in ) − ∑ (2in+1)
k =0 0≤2i ≤n 0≤2i +1≤n

ou que la somme des coefficients binomiaux pairs est égal à la somme des
coefficients impairs. L’identité de Vandermonde est la formule que pour
tout 0 ≤ t ≤ n et 0 ≤ k ≤ n,
  9. Argument pour pair-impair : créer
t    
n t n−t appariement X ∪ {z}, X − {z} entre les
=∑ . (14.8) sous-ensembles X de taille paire ou impaire à
k i =0
i k−i
l’aide d’un membre z fixe («bit de parité»).
Argument pour Vandermonde : choisir k
Les preuves peuvent suivre un argument combinatoire 9 , induction avec la éléments parmi n éléments partitionnés en
récurrence de Pascal, ou la route algébrique avec la formule du binôme : gauche et droit est la même chose que
choisir i éléments parmi les t éléments à la
l’identité de Vandermonde (14.8) découle par la manipulation des sommes gauche et (k − i ) éléments parmi les (n − t)
dans ( x + 1)n = ( x + 1)t ( x + 1)n−t . éléments à la droite ; avec tout i = 0, . . . , t.

Coefficients multinomiaux
La formule du binôme se généralise à la formule du multinôme 10 10. :formule du multinôme
(fr)

 
n n
( x1 + x2 + . . . + x k ) = ∑ ( x 1 ) n1 ( x 2 ) n2 · · · ( x k ) n k
n1 +n2 +···+nk =n n1 , n2 , . . . , n k
 k n  k 
avec les coefficients multinomiaux pour ∑i ni = n ( xi ) ni
∑ xi = n! ∑ ∏ ni !
  i =1 ∑ik=1 ni =n i =1
n n!
= k .
n1 , n2 , . . . , n k ∏ i =1 ( n i ! )
TABLE 14.7: Dénombrement d’anagrammes
Dans le cas des coefficients binomiaux, on a k = 2 et n1 = k, n2 = n − k. par coefficients multinomiaux. Les ana-
On retrouve les coefficients multinomiaux (i) dans le dénombrement des grammes de banana sont des permutations
des lettres aaannb : on a (63) choix pour
anagrammes, des chaînes avec une composition donnée ni fois symbole ai pour la position des as, suivi par (32) choix pour
tout 1 ≤ i ≤ k ; ou (ii) dans le comptage de fonctions [n] → [k] si on fixe la placer les ns : (63)(32)(11) = (3 62 1).
taille des ensembles préimages par { x | f ( x ) = i } = f −1 (i ) = ni ; ou mot composition permutations
6!
(iii) dans le dénombrement de permutations d’un multi-ensemble. lollol 4l,2o 4!2! = 15
6!
banana 3a,2n,1b 3!2!1! = 60
6!
omgomg 2o,2m,2g 2!2!2! = 90
8!
piripiri 4i,2p,2r 4!2!2! = 420
12!
patatipatata 5a,4t,2p,1i 5!4!2!1! = 83 160
140

14.7 Principe des tiroirs

Supposons qu’on a un n-ensemble A et la partition A = ∪it=1 Ai avec


Ai ∩ A j = ∅ si i 6= j. Le principe d’addition implique que n = | A| =
∑it=1 | Ai |. Les cardinalités extrêmes parmi les Ai déterminent les bornes
 
n ≤ t · max | Ai | et t · min | Ai | ≤ n. Puisque la cardinalité est entière,
 
on a min | Ai | ≤ bn/tc et dn/te ≤ max | Ai | avec égalité simultanée
si et seulement si les ensembles Ai sont tous de tailles bn/tc et dn/te, ainsi
constituant une partition aussi équilibrée que possible (une équipartition). On
sait aussi que dans toute partition, il y a des ensembles Ai avec cardinalité
inférieure ou égale à bn/tc, ainsi qu’avec cardinalité supérieure ou égale
à dn/te :
   
n n
∃i : | Ai | ≤ et ∃i : ≤ | Ai | (14.9)
t t

Le principe des tiroirs est l’implication particulière de (14.9) que si t < n,


alors il y a un ensemble avec 1 < | Ai |.

Si (t + 1) objets ou plus sont rangés dans t tiroirs, alors il y a un tiroir


avec deux objets ou plus.

Le théorème suivant est un usage ancien 11 du principe des tiroirs. 11. Jean Leurechon. Selectæ Propositiones
in Tota Sparsim Mathematica Pulcher-
rimæ. Pont-á-Mousson, 1622.
Théorème 14.13. Il y a deux personnes dans le monde 12 qui ont le même nombre https:
//www.e-rara.ch/zut/content/zoom/3157025
(positif) de cheveux.
12. En fait, même dans l’arrondissement
Côte-des-Neiges–Notre-Dame-de-Grâce !
Démonstration. I Exercice. 

Théorème 14.14 (Principe des tiroirs). Il n’existe pas d’injection A → B


si | B| < | A|.

Le principe des tiroirs est connu aussi sous le nom principe du pigeon-
nier (provenant de l’anglais pigeonhole principle), en un métaphore colombophile
(Figure 14.4).
Le principe des tiroirs est un outil non-constructif : on sait qu’il y a un
tiroir avec deux objets mais on ne sait pas lequel. Les deux théorèmes suivants
sont des applications fameuses du principe, menant à des preuves ultra-courtes.
Le premier théorème est un résultat important dans la théorie de nombres F IGURE 14.4: Deux pigeonniers sur une
qui montre l’existence d’approximations rationnelles de précision arbitraire ferme en Hongrie. Exercice : I dénombrer
les boulins. [Magyar Néprajzi Lexikon, 1982]
aux nombres irrationnelles. La preuve, basée sur le principe des tiroirs, a
manifesté 13 l’utilité de techniques combinatoires dans mathématiques diverses
qui, de prime abord, semblent rien à voir avec le le combinatoire. 13. À cause de prouver ainsi des variantes
de ce théorème, le principe des tiroirs est
Théorème 14.15 (Théorème de Dirichlet). Soit x ∈ R un nombre réel souvent éponyme avec Dirichlet («donc, par
le Schubladenprinzip de Dirichlet, . . . »).
quelconque. Pour tout entier positif n, il existe un nombre rationnel p/q ∈ Q t.q.
p 1 1
1 ≤ q ≤ n et x − q < nq ≤ q2
.
141

Démonstration. On démontre l’existence d’un p/q ∈ Q avec |qx − p| < 1/n et


1.0

Partie fractionnaire de k π, arrondi à la baisse au 0.01


0.9
+1
1 ≤ q ≤ n. Construire la suite { xk }kn= 1 définie par xk = {k · x } = (kx ) − bkx c, les 0.8
0.7

parties fractionnaires des multiples de x. Soit r (k) = bn · xk c. Puisque 0 ≤ xk < 1, on 0.6

a r (k) ∈ {0, . . . , n − 1}, pour la fonction r avec domaine k ∈ {1, . . . , n + 1}. En


0.5
0.4

conséquence, il existe deux valeurs 1 ≤ i < j ≤ n + 1 t.q. r (i ) = r ( j), et donc 0.3

 0.2

| x j − xi | < 1/n. Or, x j − xi = ( j − i ) x − b jx c − bix c , donc avec les entiers 0.1


0.0
q = j − i ≤ n, et p = b jx c − bix c, on a x j − xi = qx − p admettant 20 40 60 80 100

|qx − p| < 1/n.  F IGURE 14.5: Chercher une approximation


rationnelle à π. On veut une approximation
Soit A = ( a1 , a2 , . . . , an ) une suite de nombres distincts. Une sous- avec précision 1/n = 0.01, donc on
suite B = ( ai1 , . . . , aik ) est une séquence de k termes à des indices choisis calcule les parties fractionnaires {kπ } pour
k = 1, . . . , 101. On a par exemple 50π =
en respectant l’ordre dans A : 1 ≤ i1 < i2 < · · · < ik . On s’intéresse 157.0796 · · · et 57π = 179.0707 · · · , avec
aux sous-suites monotones : croissantes ou décroissantes. Si A n’est pas trié, il (57 − 50)π − (179 − 157) = 7π − 22 =
−0.0088 · · · . Cela mène à l’approximation
y a des sous-suites dans les deux catégories, ainsi que des sous-suites qui ne
π ≈ 22 7 , avec une erreur remarquablement
sont pas monotones. Il est possible d’avoir une sous-suite longue dans une petite 22 1
7 − π = 0.00126 · · · ≈ 791 < 7·100
1

catégorie quand les sous-suites dans l’autre catégorie sont courtes (p.e., un dicté par la preuve.
suite presque triée) Mais est-il possible que toutes les sous-suites monotones
soient courtes ? Le théorème suivant l√affirmemque non : il y a toujours une
sous-suite monotone de longueur n − 1 . La preuve 14 est rapide avec le 14. A. Seidenberg. A simple proof of a theo-
principe des tiroirs. rem of Erdős and Szekeres. Journal of the Lon-
don Mathematical Society, 34:352, 1959. D O I :
10.1112/jlms/s1-34.3.352
Théorème 14.16 (Théorème d’Erdős-Szekeres). Soit A = ( a1 , a2 , . . . , an )
une suite de nombres réels distincts, et c, d des entiers positifs quelconques. Si cd < n, 17

alors A possède une sous-suite croissante de longueur (c + 1) ou (inclusivement) une 16


d 11 12 15
sous-suite décroissante de longueur (d + 1).
4 5 8 9 10 13
Démonstration. Pour tout k, soit ck la longueur de la plus longue sous-suite croissante 3 7 14
qui finit par ak , et dk la longueur de la plus longue sous-suite décroissante qui finit 1 2 6
par ak . On a 1 ≤ ck , dk ≤ n car tout ak en soi est une suite monotone, et la plus c
longue sous-suite contient tous les éléments. Les couples (ck , dk ) sont distincts : pour
F IGURE 14.6: Principe du pigeonnier
tout choix d’indices distincts i < j, si ai < a j , alors c j > ci (car on peut ajouter a j aux dans la preuve du théorème d’Erdős-
sous-suites croissantes jusqu’à ai ), et si ai > a j , alors d j > di . En conséquence, la Szekeres. On ne peut pas placer tous
fonction f (k) = (ck , dk ) est une injection avec au moins une image f (i ) à l’extérieur les couples (ck , dk ) dans c × d cases.
de la rectangle {1, . . . , c} × {1, . . . d} quand n > cd. Pour un tel i, on a ci > c ou Ici, n = 17 et c = d = 4 avec la suite
di > d.  6, 12, 7, 2, 4, 17, 15, 8, 10, 11, 5, 9, 14, 16, 13, 3, 1.
Par exemple, jusqu’au 7e élément, la lon-
gueur maximum des sous-suites croissantes
est 3 (p.e., 6, 7, 15) et la longueur
maximum des sous-suites décroissantes
est 2 (sous-suite 17, 15) — la case (3, 2)
contient 7.
15 Graphes
L E S G R A P H E S sont des structures discrètes pour représenter des connnexions
(arêtes ou arcs) entre des paires d’objets (sommets ou nœuds). La théorie des
graphes est un domaine de recherche très actif, avec nombreuses applica-
tions. Les graphes servent comme abstraction pour relations, réseaux, circuits,
etc., et aident à identifier les problèmes algorithmiques communs entre des
applications différentes.

15.1 Terminologie
(fr) :lexique sur la théorie de graphes
Dans un graphe simple, il n’y a pas de multiples arêtes entre les sommets,
ni boucles qui sont des arcs allant d’un sommet à lui-même. Les arêtes d’un
graphe simple sont des paires de sommets : si le graphe est orienté, les paires
sont ordonnées, ou si le graphe est non-orienté, les paires ne sont pas ordonnées
(donc c’est un ensemble de deux éléments plutôt qu’un couple). Un graphe
doté d’une ou plusieurs arêtes multiples ou de boucles est appelé multigraphe 1 . 1. Le terme pseudographe est utilisé parfois —
L’ordre du graphe G = (V, E) est le nombre de sommets |V |, et la taille c’est un graphe avec boucles mais non pas
des arêtes multiples.
de G est le nombre des arêtes | E|.
Définition 15.1 (Graphe orienté). Un graphe orienté (simple) est un
couple (V, E) constitué de l’ensemble de sommets ou nœuds 2 V, et l’ensemble 2. Je préfère utiliser nœud+arc pour graphe
d’arcs E. Les arcs sont des paires ordonnées E ⊆ V × V. orienté, et sommet+arête pour graphe non-
orienté, mais il n’y a pas de règle stricte sur la
Un multigraphe orienté est un triple (V, E, f ) de nœuds V, arcs E, et la terminologie.
fonction d’incidence f : E → V × V associant à chaque arc une paire de nœuds.
Les arcs e1 , e2 ∈ E sont des arcs multiples si f (e1 ) = f (e2 ).
Dans un graphe orienté G = (V, E), on dénote l’arc (u, v) ∈ E plus
simplement comme uv ∈ E. La source ou l’origine de l’arc uv est u, et son
cible ou l’extrémité est v. Noter que uv et vu sont des arcs différents. [Wikimédia]

F IGURE 15.1: Graphe orienté G = (V, E)


Définition 15.2 (Graphe non-orienté). Un graphe non-orienté (simple) est avec nœuds V = {1, 2, 3, 4}
un couple (V, E) constitué de l’ensemble de sommets V, et l’ensemble d’arêtes E. (illustrés par circles) et arcs E =
 {(1, 2), (1, 3), (3, 2), (3, 4), (4, 3)} (illustrés
Les arêtes sont des paires non-ordonnées de sommets distincts E ⊆ {u, v} u ∈ par flèches).
V ∧ v ∈ V ∧ u 6= v .
Un multigraphe non-orienté est un triple (V, E, f ) de sommets V, arêtes E,

et la fonction d’incidence f : E → {u, v} u, v ∈ V associant à chaque
arête une paire de sommets non-ordonnées, ou un seul sommet (quand u = v) dans le
cas d’une boucle.
[Wikimédia]
Dans un graphe simple non-orienté G = (V, E), on dénote l’arête entre F IGURE 15.2: Graphe non-orienté
les sommets u et v (les points terminaux) par uv ∈ E. Noter que maintenant G = (V, E) avec sommets

uv = vu est la même arête. En général, «G est un graphe» veut dire que  = {1, 2, 3, 4, 5, 6} et arêtes E =
V
{1, 2}, {1, 5}, {2, 5}, {2, 3}, {3, 4}, {4, 5}, {4, 6} .
G = (V, E) est un graphe simple non-orienté.
Il y a des notations standard pour des familles notables de graphes d’ordres
différents mais de structure similaire : v. Table 15.1.
144

Famille Notation Description

complet n sommets, n(n − 1)/2 arêtes


Kn
(complete) (entre chaque paire de sommets)

n sommets V = {v1 , . . . , vn } avec


cycle Cn degré 2 chacun, n arêtes
E = { v 1 v 2 , v 2 v 3 , . . . , v n −1 v n , v n v 1 }
deux ensembles disjoints de sommets :
biparti complet V = V1 ∪ V2 , V1 ∩ V2 = ∅ avec
Km,n
(complete bipartite) |V1 | = n1 et |V2 | = n2 ; toutes les n1 n2 [Wikimédia]

arêtes entre V1 et V2 : E = V1 × V2
(n + 1) sommets V = {v0 , . . . , vn }, n
chemin (path) Pn
arêtes : E = {v0 v1 , v1 v2 , . . . , vn−1 vn }

TABLE 15.1: Familles de graphes.

Adjacence, incidence et degré


Adjacence est la relation binaire entre sommets définie par les arêtes du
graphe. Incidence est la relation entre l’arête et les sommets à ses extrémités.

Graphe non-orienté.
L’arête {u, v} ∈ E est dénotée par uv, sans importance à l’ordre : uv = vu. Si uv ∈ E, alors v est adjacent à u.
L’arête uv ∈ E est incidente au sommet u et aussi au sommet v. Deux arêtes sont adjacentes si elles sont incidentes à un
même sommet. Le degré de u ∈ V est le nombre d’arêtes qui y sont incidentes, dénoté par deg(u) ou d(u). La liste
de degrés est la suite croissante des degrés des nœuds :

δ( G ) = min{d(u) | u ∈ V } = d(u1 ) ≤ d(u2 ) ≤ · · · ≤ d(um ) = ∆( G ) = max{d(u) | u ∈ V }. (15.1)

Graphe orienté.
L’arc (u, v) ∈ E est dénotée par uv, et l’ordre est important : l’arc part de u et arrive à v. Si uv ∈ E ou vu ∈ E,
alors v est adjacent à u. Le degré sortant de u ∈ V est le nombre d’arcs qui y partent ; le degré rentrant est le
nombre d’arcs qui y arrivent.
145

15.2 Opérations et preuves avec graphes


On définit des opérations d’addition et de suppression sur graphes en
termes des opérations sur leurs sommets et arêtes. Addition et suppression
établissent les relations de sous-graphe :

Définition 15.3 (Sous-graphe). Le graphe G 0 = (V 0 , E0 ) est un sous-graphe


de G = (V, E) ssi V 0 ⊆ V et E0 ⊆ E. Étant donné un sous-ensemble de sommets
V 0 ⊆ V, le sous-graphe de G engendré par V 0 est le graphe G 0 = (V 0 , E0 ) avec

E0 = uv ∈ E u, v ∈ V 0 .

Soit G = (V, E) un graphe. On définit les opérations binaires (et unaire)


suivantes :
? supression de sommets W ⊆ V et les arêtes incidentes :

G − W = V − W, E − { xy | x ∈ W ∨ y ∈ W }
| {z }
arêtes incidentes à W

? retrait de sommet u ∈ V et les arêtes incidentes :

G − u = G − {u} = V − {u}, E − {uv | uv ∈ E})}



? supression des arêtes F ⊆ E : G − F = V, E − F

? retrait d’arête uv ∈ E : G − uv = G − {uv} = V, E − {uv}
? addition d’arête uv 6∈ E entre sommets distincts u 6= v :

G + uv = V, E ∪ {uv}

? l’union de deux graphes G1 = (V1 , E1 ) et G2 = (V2 , E2 ) :



G1 ∪ G2 = V1 ∪ V2 , E1 ∪ E2

? le complément d’un graphe G = (V, E) avec les arêtes qui ne sont pas 1 2 2
dans G :
  5 5
G = V, E = V, {uv 6∈ E}
3 4 3 4
G G’
Poignées de main F IGURE 15.3: G 0 est le sous-graphe de G
engendré par les sommets {2, 3, 4, 5}.
Dans les preuves avec graphes, on peut
(i) argumenter par des principes de dénombrement (Chapitre 14) ; ou
(ii) employer induction structurale par décomposition en sous-graphes ou par
opérations sur graphes (p.e. enlever/ajouter des sommets ou des arêtes) ; ou
(iii) chercher des propriétés reliées dans le graphe.
Le Lemme des poignées de main est un exemple classique de relier de deux
propriétés de graphes : ici, la somme des degrés et le nombre d’arêtes.
146

Lemme 15.1 (Lemme des poignées de main | Handshaking Lemma). Soit


G = (V, E) un graphe non-orienté. Soit m = | E| la taille du graphe. Alors

∑ d(u) = 2m (15.2)  somme des degrés = double des arêtes


u ∈V

Démonstration. Preuve 1 par compter. Chaque arête xy ∈ E est compté deux fois
dans les degrés : une fois dans d(u), et une fois dans d(v).
   
∑ d( x ) = ∑ ∑ 1 = ∑ ∑ ∑ 1 + ∑ ∑ 1 = ∑ 2 = 2m. 
x ∈V x ∈V y| xy∈ E uv∈ E x =u y=v x =v y=u uv∈ E

Preuve 2 par induction en m. (base) Équation (15.2) est valide quand m = 0 :


E = ∅ et d(u) = 0 pour tout sommet u.
(induction) Supposons que (15.2) est valide pour un m ∈ N et tout graphe avec
| E| = m. Soit G = (V, E) un graphe arbitraire avec | E| = m + 1 et uv ∈ E une arête
quelconque. Considérons le sous-graphe qu’on obtient après la retraite de uv : soit
G 0 = G − uv. Les degrés des sommets dans G 0 sont les mêmes qu’en G, sauf pour u  Noter l’induction dans la structure : on
doit trouver une instance de l’hypothèse
et v, qui ont degrés d(u) − 1 et d(v) − 1 dans G 0 . En appliquant l’hypothèse
d’induction pour un graphe arbitraire de
d’induction à G 0 : taille (m + 1).

∑ d( x ) + (d(u) − 1) + (d(v) − 1) = 2m,


x 6=u,v

donc ∑ x∈V d( x ) = 2m + 2 dans le graphe G de taille (m + 1). (conclusion) En


conclusion, ∑ x∈V d( x ) = 2| E| pour tout graphe (V, E) simple non-orienté. 

Selon le Lemme, la somme des degrés est nécessairement paire, donc on


obtient le corollaire suivant par un argument de parité.

Corollaire 15.2. Le nombre de sommets avec degré impair est pair.

Un autre résultat sur des degrés extrêmes dans (15.1) découle par le prin-
cipe des tiroirs (Eq. 14.9) : dans un graphe G = (V, E) avec n = |V |
sommets et m = | E| arêtes,
j 2m k l 2m m
δ( G ) ≤ et ∆( G ) ≥ .
n n
degré min. degré max.

Lemme 15.1 reste valide s’il y a des arêtes multiples dans le graphe, et
même s’il y a des boucles 3 , donc pour des multigraphes en général. On peut 3. À noter qu’une boucle uu contribue +2 au
aussi adapter les preuves aux graphes orientés sans aucune difficulté, en consi- degré d(u).

dérant la sommation des degrés 4 rentrants ou des degrés sortants : tous les 4. Une boucle uu ajoute +1 au degré sortant
deux sont égaux au nombre d’arêtes, v. Équation (15.3). et au degré rentrant de u.

Lemme 15.3 (Lemme des poignées de main pour graphe orienté). Soit
G = (V, E) un graphe orienté. Alors

∑ d+ (u) = ∑ d − ( u ) = | E |, (15.3)
u ∈V u ∈V

où d+ (u) et d− (u) dénotent les degrés sortant et rentrant d’un sommet u ∈ V.


147

15.3 Chemins
Les chemins sont des suites d’arêtes adjacentes d’un sommet à un autre (ou
soi-même, avec un chemin de longueur 0). Deux sommets sont connexes s’il
y un chemin entre eux, et le graphe est connexe si toutes paires de sommets
sont connexes.

Définition 15.4 (Chemins). Soit G = (V, E) un graphe non-orienté. Un


chemin ou chaîne 5 au sens général ( path ou walk en anglais) de longueur ` ≥ 0 5. Dans des ouvrages français (incluant [Ro-
est une séquence de sommets x0 , . . . , x` ) ∈ V `+1 avec les arêtes xi xi+1 ∈ E pour senFR]) on utilise souvent «chaîne» pour
chemins dans un graphe non-orienté, et
tout 0 ≤ i < `. Le chemin P = x0 x1 · · · x` visite ou traverse ou parcourt «chemin» dans un graphe orienté. Dans ces
les sommets xi et les arêtes xi xi+1 , avec sommet initial x0 (la source) et sommet notes de cours, j’utilise «chemin» pour les
deux.
terminal x` (le but).

 Un chemin est dénoté comme une chaîne de sommets concaténés, mais le


chemin comprend la séquence des sommets et la séquence entrelacée des
arêtes.

Définition 15.5 (Connexité). On dit que deux sommets s, t communiquent


ou sont reliés ou sont connexes, s’il existe un chemin entre eux. Un tel chemin
est un s − t chemin.

Définition 15.6. Un chemin simple ( trail en anglais) est un chemin avec arêtes
distinctes. Un chemin élémentaire (simple path) est un chemin avec sommets 6 6. Un chemin élémentaire est forcément
distincts. simple car si on ne répète aucun sommet, on
ne répète aucune arête non plus.
Il n’y a pas de différence entre chemins au sens général et chemins élémen-
taires pour connexité : si on a un s − t chemin avec sommets répétés, alors
ils forment des cycles redondants au long du chemin qu’on peut éliminer, et
obtenir un s − t chemin élémentaire. La preuve du lemme suivant formalise
cet argument à l’aide du bon ordre 7 par longueur. 7. Une démarche alternative est par induction
généralisée dans la longueur du chemin :
Lemme 15.4. Soit G = (V, E) un graphe non-orienté. Si les sommets s, t ∈ V dans l’étape inductive, on enlève un cycle
redondant, et il y a un chemin simple pour
sont connexes, alors il existe un chemin élémentaire 8 entre eux. ce qui reste par l’hypothèse d’induction.
8. [RosenFR] donne ce théorème (7.4,
Démonstration. Puisque s et t communiquent, il existe un s − t
Théorème 1) pour l’existence d’un chemin
chemin P = x0 . . . x` de x0 = s à x` = t. On montre que si P ne contient simple mais avec cette même preuve pour
pas (` + 1) sommets distincts, alors il n’est pas de longueur minimale. Supposons chemin élémentaire. Erreur de traduction, sans
que P visite le même sommet deux fois : xi = x j avec i < j. Alors, le chemin doute («there exists a simple path») !
P0 = x0 · · · xi x j+1 · · · x` est de longueur ` − ( j − i ) < `.
En conséquence, le chemin de longueur minimale de s à t est élémentaire. 
148

15.4 Couplage dans les graphes bipartis

Définition 15.7 (Graphe biparti). Un graphe biparti est un graphe non-orienté


(V, E) dans lequel V peut être partionnée en deux ensembles V1 et V2 (V1 ∪ V2 =
V; V1 ∩ V2 = ∅) tels que toutes les arêtes passent entre V1 et V2 : si uv ∈ E, alors
u ∈ V1 et v ∈ V2 ou u ∈ V2 et v ∈ V1 .

F IGURE 15.4: Un graphe biparti. Chaque


arête est incidente à un sommet dans V1 et à
Les graphes bipartis sont exactement les graphes 2-coloriables :
un sommet dans V2 , avec V1 ∩ V2 = ∅.

Théorème 15.5. Le graphe G = (V, E) est biparti ssi on peut colorier les
sommets par une fonction c : V → {1, 2} de sorte que si uv ∈ E, alors c(u) 6=
c ( v ).

Démonstration. Une partition des sommets V1 ∪ V2 = V; V1 ∩ V2 = ∅


correspond à une fonction c : V → {1, 2} avec u ∈ Vi ↔ c(u) = i
(Théorème 11.6). 

Définition 15.8. Soit G = (U ∪ V, E) un graphe biparti (avec U ∩ V = ∅).


Un couplage (matching) est un ensemble d’arêtes M ⊆ E t.q. chaque sommet est * * * *
incident à une arête au plus dans M. Un sommet x ∈ U ∪ V est couvert par M U
s’il existe une arête xy ∈ M, sinon x est exposé. Un couplage parfait couvre
tous les sommets.

V
* * * *
F IGURE 15.5: Un couplage avec 5 arêtes
(coloriées), et une couverture par 10 som-
Définition 15.9. Une couverture par sommets (vertex cover) est un en- mets (coloriés). Les nœuds marqués * sont
semble de sommets C ∈ U ∪ V t.q. pour chaque arête xy ∈ E, x ∈ C ou y ∈ C. exposés. (On peut faire mieux, avec un
couplage de taille 9.)

Théorème de Kőnig

Toute couverture C doit inclure un sommet incident à toute arête de M,


et les arêtes de couplage n’ont pas d’extrémités en commun, donc |C | ≥ | M|.
Est-ce que |C | = | M| est possible ? La réponse est affirmative, établie par le
théorème de Kőnig. La preuve est constructive, et utilise l’astuce des chemins
alternants entre arêtes dans et outre le couplage.

Théorème 15.6 (Dénes Kőnig 1931). Dans tout graphe biparti, la taille maxi-
male d’un couplage est égale à la taille minimale d’une couverture par sommets.
149

Démonstration. Soit G = (U ∪ V, E) un graphe biparti, et M ⊆ E un couplage


maximale. La preuve utilise la notion de chemin alternant P = u0 v0 u1 v1 · · ·, par
rapport à M : un tel chemin alterne entre arêtes dans M et non pas dans M : soit
ui vi ∈ E − M et vi ui+1 ∈ M pour tout i ≥ 0, soit ui vi ∈ M et vi ui+1 ∈ E − M.
Définir les partitions U = U1 ∪ U2 ∪ U3 et V = V1 ∪ V2 ∪ V3 : exposés en U chemin alt. de U1 pas de chemin
(1) U1 ⊆ U et V1 ⊆ V sont les sommets exposés ; U1 U2 U3 alt. de U1
mais dans le
(2) U2 ⊆ U et V2 ⊆ V sont les sommets couverts pour lesquels il existe un chemin couplage
alternant à partir d’un sommet u ∈ U1 exposé ;
(3) U3 ⊆ U et V3 ⊆ V sont les sommets couverts pour lesquels il n’existe pas de
chemin alternant à partir d’un u ∈ U1 .
Maintenant :
(i) Il n’existe pas d’arête uv ∈ E avec u ∈ U1 ∪ U2 et v ∈ V1 , car autrement on V2 V3 V1
chemin alt. de U1 exposés en V
peut augmenter le couplage. Échanger le rôle des arêtes sur le chemin alternant
qui mène d’un u0 ∈ U1 à v par l’arête uv (le chemin P = u0 · · · uv est de F IGURE 15.6: Partition des sommets dans la
preuve du Théorème de Kőnig. Les sommets
longueur impaire) : M0 = ( M − P) ∪ ( P − M ) est un couplage et
de V2 et U3 forment une couverture.
| M0 | = | M| + 1.
(ii) Il n’existe pas d’arête uv ∈ E avec u ∈ U1 ∪ U2 et v ∈ V3 par construction (car
aucun chemin alternant à V3 ).
(iii) C = V2 ∪ U3 est une couverture : aucune arête de U1 ∪ U2 à V1 ∪ V3 .
La couverture C = V2 ∪ U3 est de même taille que M, donc min |C | = max | M|. 

On remarque que la preuve constructive correspond à un algorithme


de fabriquer un couplage maximal ou couverture minimale : partitionner les
sommets par chemins alternants, et augmenter le couplage par l’inversion
du coloriage du chemin alternant jusqu’à ce qu’on n’arrive à la situation
extrême de la preuve. Le théorème, et la méthode des chemins alternants est
formidable. Il y a de nombreux résultats sur des structures discrètes isomorphes
à des graphes bipartis, qu’on peut montrer par Théorème 15.6.

Ensembles défectueux
On définit le voisinage d’un ensemble de sommets X ⊆ U :

Γ( X ) = {v ∈ V | u ∈ X ∧ uv ∈ E}.  voisins des sommets dans X

L’ensemble X est défectueux si |Γ( X )| < | X |.

Théorème 15.7. Soit G = (U ∪ V, E) un graphe biparti (avec U ∩ V = ∅).


Il existe un couplage qui couvre U si et seulement si |Γ( X )| ≥ | X | pour tout sous-
ensemble X ⊆ U.
Démonstration. S’il existe un couplage M qui couvre U, alors |Γ( X )| ≥ | X | pour
tout X ⊆ U car chaque u ∈ X est apparié avec un v ∈ V. L’inverse est aussi vrai.
Considérons un couplage maximale M. Supposons que | M| < |U |. Selon la partition
dans la preuve du Théorème de Kőnig, l’ensemble X = U1 ∪ U2 est défectueux :
| X | = |U1 | + |U2 | = |U1 | + |V2 | > |V2 | = |Γ( X )|. 
150

Hypergraphes et familles d’ensembles


Les hypergraphes généralisent la notion de graphe non-orienté. Dans le
hypergraphe, les arêtes relient un nombre positif quelconque de sommets, et
non pas nécessairement deux. Un hypergraphe est un couple H = (V, E)
avec E = {e1 , . . . , em }, une famille de parties non-vides de V : ei ⊆ V.
Représentation par graphe biparti : sommets U = V ∪ E et arêtes E0 =
{ xe| x ∈ e}.
Les arêtes d’un hypergraphe forment une famille d’ensembles. Un sys-
tème de représentatifs pour une famille d’ensembles {S1 , . . . , Sm } est une
séquence { x1 , . . . , xm } t.q. xi ∈ Si pour tout i. (Cela correspond à une
couverture des arêtes par sommets dans le hypergraphe.) On se demande
sous quelle condition il existe un système de m représentatifs distincts pour m
ensembles.

Théorème 15.8 (Théorème de Hall). Il existe un système de représentatifs


distincts pour les ensembles {S1 , . . . , Sn } si et seulement si

∪i∈ I Si ≥ | I | pour tout I ⊆ {1, 2, . . . , m} (15.4)  aucun ensemble d’indices I défectueux

Démonstration. On définit le graphe biparti G = (U ∪ S, E) avec sommets


U = {S1 , . . . , Sm } et S = ∪im=1 Si , et arêtes E = {(Si , x ) : x ∈ Si }. Un
système de représentatifs distincts correspond à un couplage dans G qui couvre U.
Par Théorème 15.7, un tel couplage existe si et seulement si |Γ(V )| ≥ |V | pour

tout V = ∪i∈ I Si avec I ⊆ {1, . . . , m}. Or, Γ(V ) = x x ∈ ∪i∈ I Si et |V | = | I |,
impliquant (15.4). 

Matrices 0-1
Définition 15.10. Une matrice ne comportant que des éléments de valeur 0 eou 1
dans les cellules est une matrice 0-1 (ou matrice booléenne).

Théorème 15.9. Soit A une matrice m × n 0-1. Le minimum nombre de rangées


et colonnes pour couvrir tous les 1s est égale au maximum nombre de 1s indépendants
(non pas dans la même rangée ou même colonne).
Démonstration. Représentation par graphe biparti : sommets à la gauche {1, . . . , m},
sommets à la droite {1, . . . , n}, et mettre arête (i, j) quand Mij = 1. Couplage dans le
graphe correspond à un ensemble de 1s indépendants, et une couverture correspond à
un ensemble de rangées et de colonnes. Le résultat découle de Théorème 15.6. 
151

Théorème de Cantor-Schröder-Bernstein
On compare la cardinalité de deux ensembles U, V par des couplages définis
par fonctions f : U → V.

Définition 15.11 (Ordre et égalité de cardinalités). Soit U, V deux ensembles


(finis ou infinis).
(i) |U | = |V | si et seulement s’il existe une bijection f : U → V.

(ii) |U | ≤ |V | si et seulement s’il existe une injection f : U → V.


En particulier, |V | = n avec n ∈ N si et seulement s’il existe une bijection entre V et
l’ensemble U = {0, 1, . . . , n − 1} (avec U = ∅ si n = 0).

Maintenant, = est une relation d’équivalence 9 entre cardinalités. La rela- 9. Réflexive car la fonction d’identité est une
tion ≤ est clairement réflexive et transitive, mais son anti-symétrie ne découle bijection ; symétrique car l’inverse d’une
bijection est une bijection (Théorème 6.4),
pas immédiatement quand les ensembles U, V sont infinis. Heureusement, la et transitive car la composition de bijections
méthode de chemins alternants peut être utilisée pour couplage même dans un est une bijection (Théorème 6.7).
graphe infini, notamment pour construire une bijection entre deux ensembles
à partir de deux injections entre eux.

Théorème 15.10 (Cantor-Schröder-Bernstein). S’il existe une injection f : U →


V et une injection g : V → U, alors il existe aussi une bijection entre les deux.
Démonstration. Si U ∩ V 6= ∅, on définit les copies «gauches» et «droites» : U 0 =
{0} × U et V 0 = {1} × V avec U 0 ∩ V 0 = ∅, et on continue avec les injections
f 0 ((0, u)) = (1, f (v)) et g0 ((1, v)) = (0, g(v)). Supposons alors sans perte de
généralité que U ∩ V = ∅ . On définit le graphe biparti G = (U ∪ V, E) avec arêtes
 
E = (u, f (u)) u ∈ U ∪ ( g(v), v) v ∈ V

Le degré de chaque sommet est soit 1 soit 2 : pour u ∈ U ou v ∈ V,


( (
2 si ∃v : u = g(v) 2 si ∃u : v = f (u)
d(u) = d(v) =
1 sinon 1 sinon

Tout u ∈ U appartient à exactement un chemin alternant : . . . , u, f (u), g( f (u)), f ( g( f (u))), . . . .


Une tel chemin peut former un cycle de longueur paire (longueur 2k si ( f ◦ g)k (u) =
u pour un k > 0). Sinon, le chemin commence par u ∈ U − g(V ) avec d(u) = 1
(suivi par f (u), g( f (u)), . . . ), ou par v ∈ V − f (U ) avec d(v) = 1 (suivi par
g(v), f ( g(v)), . . . ). Un tel chemin est infini car chaque image est distincte. Les  f (U )est l’ensemble image de f :
chemins alternants définissent un couplage parfait (coloriage arbitraire si cycle, ou f (U ) = v ∈ V ∃ u ∈ U : v = f ( u ) .
commencer avec la première arête si chemin infini). Le couplage parfait définit une
bijection. 
16 Propriétés des graphes
L A T H É O R I E D E G R A P H E S étudie les propriétés des graphes, et les rela-
tions entre elles. Afin de focuser sur la structure et non pas l’instance actuelle
du graphe, il faut définir la notion d’égalité entre graphes par une relation
d’équivalence. L’égalité par structure s’appelle isomorphisme parmi les graphes.
Une propriété de la structure reste invariante sous isomorphisme, donc c’est les
propriétés invariantes qu’on adresse par des preuves sur la structure du graphe.
Étant donné la flexibilité de la représentation, la liste des propriétés invariantes
est vaste, et l’étude des graphes a produit un grand arsenal de méthodes ma-
thématiques pour adresser des aspects différents de la structure.

16.1 Isomorphisme
Une application entre graphes établit une association entre les sommets de
deux graphes. Une telle fonction est un morphisme si elle préserve adjacence :
les sommets adjacents ont des images adjacents. Si sa réciproque est aussi un
morphisme, la fonction est un isomorphisme 1 . S’il existe un isomorphisme
F IGURE 16.1: Morphisme du snark fleur J5
entre deux graphes, les deux graphes sont isomorphes, ou simplement, ils sont le au cycle C5 . Ici, on morphe le fleur dans le
même. cycle, en projettant les sommets du premier
dans ceux du deuxième, sans briser les liens.
Définition 16.1 (Morphisme et isomorphisme de graphes). Soit G = 1. Un isomorphisme est nécessairement une
bijection, mais pas toutes les bijections sont
(VG , EG ) et H = (VH , EH ) deux graphes. des isomorphismes. Une bijection entre
(i) Une fonction f : VG → VH est un morphisme (homomorphism en englais) si les sommets montre que les deux graphes
ont le même nombre de sommets, mais les
pour toute paire de sommets (u, v) ∈ VG2 , images ne préservent pas automatiquement
l’adjacence.
uv ∈ EG → f (u) f (v) ∈ EH
α β

C3 G
(ii) Une fonction f : VG → VH est un isomorphisme s’il est un morphisme et
sa réciproque f −1 est aussi un morphisme : pour toute paire de sommets (u, v) ∈ c γ δ
VG2 , 2

uv ∈ EG ↔ f (u) f (v) ∈ EH
H 1
3
Deux graphes sont isomorphes s’il existe une isomorphisme entre eux.
F IGURE 16.2: (Homo)morphisme et
Un morphisme n’est pas nécessairement une injection : il est possible qu’on isomorphisme. Le graphe H avec sommets
{1, 2, 3} et arêtes {1, 2}, {2, 3}, {3, 1}
a une arête uv t.q. f ( x ) = f (y) = u et f (z) = v quand y est un sommet de
est isomorphe à C3 = K3 . On peut trouver
degré 2 avec arêtes xy et yz (v. un exemple dans Fig. 16.2). un morphisme du graphe G avec sommets
Isomorphisme est une relation d’équivalence : il est réflexive (car identité {α, β, γ, δ} à C3 . G est isomorphe au graphe
cycle C4 .
est un isomorphisme sur soi-même), symétrique (car il est défini par un mor-
phisme dont le réciproque est aussi un morphisme), et transitive (car la com-
position de isomorphisme est un isomorphisme). Il est un problème difficile
de déterminer si deux graphes sont isomorphes. En comparant leurs matrices
d’adjacence, on doit trouver une bijection entre les ordres de rangées (et co-
lonnes), donc un réarrangement d’une matrice qui donne l’autre matrice. Une
154

propriété de graphes qui est préservée sous tout isomorphisme est appelé une
propriété invariante. Il y a beaucoup de propriétés invariantes : nombre de
sommets et des arêtes (ordre et taille) ; séquence de degrés ; présence, absence
ou nombre de sous-graphes isomorphes à un graphe donné : p.e., graphe sans
triangles ou graphe acyclique ; et beaucoup d’autres.
Un automorphisme est un isomorphisme du graphe avec soi-même.
À part d’identité (qui est un automorphisme pour tout graphe) le graphe
doit avoir des symétries pour d’autres automorphismes. Il y en a 384 pour
l’hypercube Q4 , par exemple (Figure 16.3).

16.2 Matrice d’adjacence


Définition 16.2 (Matrice d’adjacence). Pour un graphe G = (V, E), sa matrice F IGURE 16.3: Graphes isomorphes à Q4
(hypercube ou tessellation). Les sommets
d’adjacence est la matrice |V | × |V | sont des chaînes de 4 bits V = {0, 1}4 ,
 et les arêtes lient les tuples avec 1 bit de
1 si uv ∈ E différence. On obtient un automorphisme
Auv = f : {0, 1}4 → {0, 1}4 pour tout choix de
0 si uv 6∈ E
x = {0, 1}4 par XOR bit à bit f (u) =
u ⊕ x. On obtient un automorphisme aussi
par n’importe quel réarrangement de bits :
Matrice d’une relation binaire et composition de relations f (u1 u2 u3 u4 ) = uπ (1) uπ (2) uπ (3) uπ (4) avec
une bijection π : {1, 2, 3, 4} → {1, 2, 3, 4},
Une relation binaire dans un domaine quelconque V correspond à un dont il y a 24.
a b
graphe orienté dont les arcs ((possiblement boucles) sont les paires en relation,
et vice versa. Pour un graphe orienté, la matrice d’adjacence est la matrice de  
0 1 1 1
la relation binaire représentée par adjacence. c d  1 0 1 0 
 
1 1 0 0
Définition 16.3 (Matrice d’une relation binaire). Pour une relation R ⊆ 1 0 0 0
X × Y, la matrice relationnelle est de taille | X | × |Y |, où chaque rangée correspond F IGURE 16.4: Un graphe non-orienté et sa
à un élément de X et chaque colonne correspond à un élément de Y. Les cases de matrice d’adjacence. Noter que la matrice
est symétrique, et les valeurs sont 0 sur la
la matrice spécifient si xRy ou non pour chaque paire ( x, y) ∈ X × Y. En une diagonale (car aucune boucle dans un graphe
représentation 0-1 : simple).
 R = (1, b), (1, d), (2, c), (3, c), (3, b), (4, a)
1 si xRy  
Mxy = 0 1 0 1
0 sinon, 0 0 1 0
MR =  0 1 1 0

ou dans une représentation par valeurs logiques : 1 0 0 0

Bxy ≡ xRy ∈ {0, 1} 1 a

On considère deux relations R ⊆ Y × Z et S ⊆ X × Y et leur composition 2 b


R ◦ S ⊆ X × Z. La définition de R ◦ S («R après S») est identique à celle de 3 c
composition de fonctions (Théorème 6.3) : 4 d
F IGURE 16.5: Une relation R ⊆
( x, z) ∈ R ◦ S ↔ ∃y : ( x, y) ∈ S ∧ (y, z) ∈ R. {1, 2, 3, 4} × { a, b, c, d}, représentée
comme ensemble de couples, ou matrice
Soit R, S et T les matrices relationnelles pour R, S, et R ◦ S. Par De Morgan, relationnelle, ou graphe orienté.
on a ∑y∈Y S xy Ryz = 0 si et seulement si Ryz = 0 ∨ S xy = 0 pour tout y :

n o 0 si ∑y∈Y S xy Ryz = 0
T xz = min 1, ∑ S xy Ryz =
y ∈Y
1 si ∑y∈Y S xy Ryz > 0
155

On obtient T donc par multiplication 2 matricielle : 2. Ou, si S, R, T sont des matrices de valeurs
 logiques,
0 _ 
 si T0xz = 0 T xz ≡ S xy ∧ Ryz ,
T0 = S · R}
| {z et ∀ x : ∀z : T xz = min 1, T0xz = y ∈Y
1 si T0xz > 0
produit de 2 matrices et on peut même écrire T ≡ S ∧ R après
avoir défini la conjonction matricielle
comme l’analogue de multiplication
16.3 Connexité matricielle par ∧ (au lieu de multiplication)
et ∨ (au lieu d’addition).
Définition 16.4 (Sommets connexes). On dit que deux sommets s, t commu- Notre notation R ◦ S («R après S») reste
niquent ou sont reliés ou sont connexes, s’il existe un chemin entre eux. Un tel avec Rosen et d’autres manuels en
informatique, sans différence entre
chemin est un s − t chemin. composition de fonctions et celle de
relations :
Composantes connexes ( x, z) ∈ R ◦ S ↔ ∃y : ( x, y) ∈ S ∧ (y, z) ∈ R.

Un graphe G = (U, V ) est connexe s’il existe un chemin entre toute D’autres manuels, surtout en mathématiques
paire de sommets (Définition 13.5). Si G n’est pas connexe, alors il peut être peuvent utiliser l’ordre SR ou S; R pour
dénoter la composition de relations, en tant
décomposé dans des sous-graphes connexes. que «multiplication de relations», étant
donné la correspondance à la multiplication
Définition 16.5. Une composante connexe d’un graphe G est un sous-graphe matricielle. En même temps, l’ordre
connexe maximal de G. ( g ◦ f )( x ) = g( f ( x )) est une notation
universelle pour composition de fonctions.
Soit G = (V, E) un graphe. La connexité entre les sommets de G est une relation binaire. On peut même introduire un
opérateur pour notation infixée : x y si x et y communiquent, ou dans d’autres mots, s’il existe un x − y chemin
dans le graphe. Avec une définition récursive :

∀x ∈ V : x x  cas de base (16.1a)


∀ x 6= y : x y ↔ ∃z ∈ V : ( x z) ∧ (zy ∈ E)  cas inductif (16.1b)
x − y chemin il y a un x − z chemin et une arête zy

En Equation (16.1b), on se sert de la structure récursive des chemins : s’il existe un x − z chemin P = x0 · · · x` avec
x0 = x et z = x` , et une arête zy, alors P0 = x0 · · · x` y est un x − y chemin. La connexité est une relation
d’équivalence dans un graphe non-orienté : il est réflexive (x x), symétrique (x y → y x), et transitive (x y ∧
y z → x z). Les classes d’équivalence (Théorème 11.6) selon sont les composantes connexes de G.

Coupures point
d’articulation
Dans beaucoup d’applications, il est intéressant de caractériser la robustesse pont


d’un réseau : la faille de quels liens ou nœuds brise la connexité. Soit G =
(V, E) un graphe non-orienté. avec Γ(u) = {uv|v ∈ V ∧ uv ∈ E}, les
voisins de u.
Un pont (ou isthmus) est une arête uv dont le retrait «brise» le graphe :
ceci n’est pas un pont
G − uv a plus de composantes connexes que G. Un point d’articulation
F IGURE 16.6: Il y a un pont et trois points
est un sommet u dont le retrait produit le graphe G − u avec plus de compo- d’articulation dans ce graphe comportant
santes connexes que G. Notons que les extrémités d’un pont sont des points trois composantes biconnexes.
d’articulation mais un point d’articulation n’est pas nécessairement incident
à un pont (Figure 16.6). Un sous-graphe G 0 de G qui ne contient aucun
point d’articulation (dans G 0 ) est dit biconnexe. Les sous-graphes biconnexes
maximaux de G sont ses composantes biconnexes.
156

Soit G = (V, E) un graphe simple non-orienté, et s, t ∈ V deux sommets


distincts. Une s − t-coupure est un ensemble d’arêtes C ⊆ E t.q. tout f t
s − t chemin P contient une arête de la coupure : ∀ P : E( P) ∩ C 6= ∅
a
(avec la notation E( X ) pour les arêtes de X). Une coupure dans un graphe e ✂
connexe définit une partition de sommets par composantes connexes, et toute b d
bipartition non-triviale de sommets V = S ∪ T avec S ∩ T = ∅ définit la
c
coupure C = E ∩ (S × T ) par des arêtes qui traversent la partition.
s
La notion complémentaire est celle de chemin indépendants : un ensemble
F IGURE 16.7: Coupures et chemins indé-
de s − t chemins P = { P1 , . . . , Pm } sont arête-disjoints si les chemins pendants. Les arêtes C = { a f , ae, be, dt}
distincts ont des arêtes distinctes : forment une s − t coupure, défi-
nissant
 la bipartition des sommets
Pi 6= Pj → E( Pi ) ∩ E( Pj ) = ∅  aucune arête en commun {s, a, b, c, d}, {e, f , t} . Les chemins
P = {scbdt, sbe f t} sont arête-disjoints.
Théorème 16.1 (Théorème de Menger). Le taille minimale de s − t coupures
est égale au nombre maximum de chemins arête-disjoints reliant s et t.
Démonstration. (Omise.) 

On peut caractériser la connexité d’un graphe G par λ( G ), la taille minimale


de s − t coupures parmi toute paires s 6= t : afin de déconnecter le graphe,
il faut supprimer au moins λ( G ) arêtes. (λ( G ) = 0 si le graphe n’est pas
connexe.) Par le théorème de Menger, λ( G ) est égal au nombre maximum de
chemins arête-disjoints entre une paire quelconque de sommets.

Clôture d’un graphe


Définition 16.6. La clôture (fermeture) d’un graphe G = (V, E) est le
graphe G ∗ avec boucles sur le même ensemble de sommets dont les arêtes sont les paires
de sommets connexes en G (dénoté par G ) :
  
G ∗ = V, uv u G v

On peut calculer les arêtes de G ∗ par l’induction de l’Équation 16.1. On définit les prédicats C` pour ` = 0, 1, 2, . . . :
C` ( x, y) ≡ il existe un x − y chemin de longueur ` ce qui est une relation binaire entre sommets. Alors :

C0 ( x, y) ≡ ( x = y)  x − x chemin de longueur 0 (16.2a)


C`+1 ( x, y) ≡ ∃z : C` ( x, z) ∧ zy ∈ E pour tout ` ∈ N  x − z chemin de longueur ` + arête zy (16.2b)

Par Lemme 15.4, si x y, alors il existe un chemin élémentaire entre eux


avec sommets distincts, donc un chemin de longueur ` < n si n = |V |
est le nombre de sommets. En conséquence, les arêtes E∗ de la clôture sont
précisement les paires xy avec C` ( x, y) vrai pour un 0 ≤ ` < n. :
 −1
n_ 
E∗ = ( x, y) ∈ V × V C` ( x, y) (16.3)
`=0
disjonction des C`

 La clôture d’un graphe connexe d’ordre n est isomorphe à Kn , le graphe


complet sur n sommets.
157

Clôtures d’une relation binaire

Une relation binaire R ⊆ U 2 est représentée par un graphe orienté



G = U, { xy | x R y} avec adjacence qui correspond à R (possiblement
avec boucles pour réflexivité). La clôture (ou fermeture) de la relation R
pour une propriété quelconque est la (sur-)relation minimale R∗ ⊆ U 2 qui
possède cette propriété et R ⊆ R∗ . La clôture réflexive ajoute les relations

réflexives : Rréfl. = R ∪ {( x, x )| x ∈ U }, et la clôture symétrique ajoute

les relations symétriques : Rsym. = R ∪ {(y, x )| x R y}. La clôture transitive
inclut toutes les relations impliées par transitivité : c’est la même chose que la
clôture du graphe orienté de la relation, sauf les arcs réflexifs ajoutés — mais la
clôture réflexive transitive les inclut aussi. La clôture réflexive-symétrique-et-
transitive est la relation d’équivalence minimale qui inclut R.

Dénombrement de chemins

Soit G = (V, E) un graphe quelconque avec n = |V | sommets. La


démarche inductive de (16.2) pour déterminer s’il y a au moins un chemin
entre x et y peut être adapté à compter tous les chemins entre x et y. Ici, on
inclut les chemins qui ne sont pas nécessairement simples (arêtes répétées
OK) ni élémentaires (sommets répétés OK). On définit les matrices M(`)
(`)
de taille n × n, pour tout ` ∈ N comme la matrice dans laquelle M xy  On utilise ici une notation avec paren-
est le nombre de x − y chemins distincts de longueur `. Avec la matrice thèses dans l’exposante pour une séquence
de matrices car on veut mettre les indices des
d’adjacence A du graphe G : cellules en bas. Les parenthèses sont là parce
que l’exposante ne dénote pas exponentation.

1 si x = y
(0) (`+1) (`)
M xy =
0
M xy = ∑ Mxz · Azy . (16.4)
si x 6= y z ∈V

En notant que A0 = I, la matrice d’identité 3 , et que l’exponentiation matri- 3. La matrice d’identité I est la natrice avec 1
cielle est définie par la même récurrence 4 , on a sur la diagonale et 0 ailleurs : I xy = 1 si
x = y, et I xy = 0 si x 6= y.
4. Exponentiation matricielle est définie par
` multiplication matricielle :
M(`) = ∏ A = A` `
k =1 A`+1 = ∏ A = A` · A si ` ≥ 0
k =1

avec la règle de multipler des matrices :


pour tout ` ≥ 0. On remarque qu’on peut calculer les récurrences en juste
(B · A) xy = ∑ B xz Azy .
une rangée x ou colonne y, si on veut compter les chemins à partir d’un z

sommet source fixe ou cible fixe. Si my (`) dénote le nombre de x − y chemins


de longueur `, pour un x fixe,

my (` + 1) = ∑ mz (`) avec le voisinage Γ(y) = {z | zy ∈ E}


z∈Γ(y)
158

ou, en forme matricielle, m(` + 1) = m(`) · A avec le n-élément vec-


1 2 6 8
teur m(`). Avec l’exemple de Figure 16.8, 1 0 0 0
 
3 4 5 7
`=0 m (0) = 1 0 0 0 0 0 0 0 0 0 0 0
 
`=1 m (1) = 0 1 1 1 0 0 0 0 0 1 0 0
 
`=2 m (2) = 3 1 2 2 2 0 0 0
1 1 0 0
 
`=3 m (3) = 4 7 5 7 3 2 2 0
3 1 0 0
 
`=4 m(4) = 19 14 11 19 18 5 5 2
1 2 2 0
On peut développer des récurrences pour le nombre des chemins de lon-
4 7 2 0
gueur au plus k avec un peu d’algèbre linéaire. Soit S(`) = ∑`k=0 M(k) =
∑`k=0 Ak . On a S(0) = I, et pour tout ` ∈ N,
5 7 3 2
`+1 `+1  ` 
S(`+1) = 19 14 5 2
∑ Ai = I + ∑ Ai = I + ∑ A k · A = I + S(`) · A.
i =0 i =1 k =0
11 19 18 5
Selon (16.3), les arêtes de la clôture G ∗ = (V, E∗ ) du graphe G = (V, E)
F IGURE 16.8: Dénombrement de chemins à
sont précisément les couples ( x, y) pour lesquelles il existe un chemin de partir d’une source fixe. En chaque itérarion,
longueur (n − 1) au plus, on remplace le compte par la somme des
n En conséquence,
o la matrice d’adjacence pour la
comptes aux sommets adjacents.
( n −1)
clôture est A∗xy = min 1, S xy .
17 Arbres
L’ A R B R E enraciné est une structure récursive d’importance fondamentale
dans quasiment tous les domaines d’informatique :
? les structures arborescentes s’adaptent à l’abstraction de nombreux problèmes réels sur hiérarchies et réseaux ;
? les meilleures structures de données sont souvent les réalisations concrètes d’arbres ;
? on utilise des arbres pour décrire les propriétés des algorithmes récursifs dans l’analyse théorique ;
? on compile le code source à l’aide des arbres de syntaxe ;
? beaucoup de protocoles d’internet (TCP/IP) s’organisent sur une hiérarchie arborescente de serveurs ;
? etc. . .

17.1 Forêts et arbres

F IGURE 17.1: Arbres avec n = 1, 2, . . . , 6


sommets. Un arbre est connexe et ne
contient pas de cycles.

[Weisstein EW/Wolfram MathWorld]

Dans la théorie des graphes, les arbres 1 sont les structures les plus simples : 1. Plus spécifiquement, il s’agit d’un arbre
ils ont le moindre nombre d’arêtes pour rester connexe. Connexité est établie libre, pour ne pas confondre avec l’usage de
l’arbre enraciné en informatique, qui dénote
par des sous-graphes chemins (Fig. 17.2) qui sont des instances d’arbres eux- une structure récursive, ou un graphe orienté
mêmes. Figure 17.1 montre tous les arbres avec 6 sommets au plus. (nommé arborescence en théorie des graphes).

Définition 17.1 (Graphe chemin et graphe cycle). Un chemin (élémentaire 2 )


de longueur ` est un graphe P = (V, E) de forme F IGURE 17.2: Le graphe chemin P5 contient
6 sommets.
 
V = x0 , . . . , x ` E = x0 x1 , x1 x2 , . . . , x`−1 x` ,
2. élémentaire = sans sommets répétés. Si
qu’on dénote par P = x0 x1 · · · x` . Si x0 = x` , alors le chemin forme un cycle. x0 = x` , on a un cycle élémentaire.
Le sommet initial de P est x0 et son chemin terminal est x` . Un chemin (ou un
cycle) dans un graphe G est un sous-graphe de G qui est un chemin (ou un cycle).

Définition 17.2 (Forêt et arbre). (i) Un graphe sans cycle est dit acyclique.
(ii) Une forêt est un graphe acyclique.
(iii) Un arbre (libre) est une forêt connexe.
160

La définition n’est pas si contre-intuitive : les composantes connexes de


la forêt sont des arbres, donc la forêt est une union d’arbres. Il y a d’autres
caractérisations possibles pour les arbres. Par exemple, ils ont exactement un
chemin entre deux sommets. Il y a au moins un chemin entre toute paire de
sommets dans l’arbre car il est un graphe connexe. On montre que dans un
graphe acyclique, il y a au plus un chemin entre toute paire de sommets.

Théorème 17.1. Le graphe G = (V, E) est une forêt si et seulement si il y a tout


au plus un chemin (élémentaire) entre chaque paire {u, v} de sommets u, v ∈ V.

Preuve par contraposition. Soit G = (V, E) un graphe, avec deux sommets u, v ∈ V


et deux chemins distincts

P = x0 · · · x k et P 0 = y0 · · · y ` , x0 = y0 = u, xk = y` = v

On montre que G contient un cycle par construction. Soit


i = max{t|∀s ≤ t : xs = ys }, la longueur du préfixe commun des deux chemins.
Puisque x0 = y0 et les deux chemins sont distincts, on a 0 ≤ i < min{k, `}. Soit
j = min{m|m > i ∧ ∃ j0 : xm = y j0 } : la première fois que les deux chemins se
croisent après avec x j = y j0 . Puisque xk = y` , on a i < j ≤ k. Maintenant,
xi xi+1 · · · x j y j0 −1 · · · yi est un cycle.  F IGURE 17.3: Preuve de Théorème 17.1.
Le cycle est formé par xi . . . x j en aval
Corollaire 17.2. Le graphe G = (V, E) est un arbre si et seulement s’il y a et y j0 · · · yi en amont, avec xi = yi et
x j = y j0 .
exactement un chemin entre chaque paire {u, v} de sommets u, v ∈ V.

Un arbre contient assez d’arêtes pour être connexe, mais non pas trop pour
inclure un cycle : il est un graphe extrême pour les deux propriétés.

Théorème 17.3. Un arbre est un graphe acyclique maximal, et un graphe connexe


minimal.
Preuve indirecte. Soit G = (V, E) une forêt. Si G n’est pas connexe alors il n’est pas
maximal : s’il n’existe pas de u − v chemin entre deux sommets, alors G + uv est
acyclique aussi.
Si G contient un cycle, alors il n’est pas minimal : s’il y a un cycle x0 · · · x` , alors
G − x0 x1 est connexe aussi car tout chemin passant par l’arête x0 x1 peut remplacer le
passage par x` x`−1 · · · x1 . 

Ainsi, on obtient une autre caractérisation importante par le nombre


d’arêtes et de sommets.

Théorème 17.4. Soit G = (V, E) un graphe non-vide. N’importe quelles deux


propriétés parmi les suivantes impliquent la troisième et que G est un arbre.
(a) G est acyclique ;
(b) |V | = | E| + 1 ;
(c) G est connexe.

Afin de prouver le théorème, on a besoin de deux lemmes auxiliaires : 17.6


et 17.7. La technique de clé pour l’induction est d’identifier un sommet isolé,
ou un sommet avec une seule arête incidente dont la retraite ne change pas la
connexité, ni les cycles.
161

Lemme 17.5. Soit G = (V, E) un graphe non-vide qui contient un som-


met u ∈ V de degré d(u) < 2. Soit G 0 = G − u qu’on obtient si on supprime u
avec son arête : le sous-graphe de G engendré par V 0 = V − {u}, les sommets
TABLE 17.1: Preuve de Lemme 17.5,
sans u. (i) G est connexe si et seulement si G 0 est connexe. (ii) G est acyclique si et esquissé
seulement si G 0 est acyclique.
Démonstration. Le sommet u ne peut pas
être dans un cycle, et, si elle existe, l’arête
Lemme 17.6. Si | E| < |V | − 1, alors le graphe n’est pas connexe. unique xu ∈ E ne peut être utilisée que
pour prolonger un chemin de x jusqu’à u. 
Preuve par induction en |V |. (base) |V | = 1, | E| = 0, le lemme est vrai (antécédent
faux). (HI) Hypothèse : vrai pour un n = |V |. (induction) Supposons que G = (V, E)
est un graphe quelconque avec |V | = n + 1 et | E| < n. Par Lemme 15.1, on a au
moins un sommet u ∈ V avec d(u) < 2. (Cas 1) Si d(u) = 0, alors G contient un
sommet isolé. (Cas 2) Si d(u) = 1, alors considérons le sous-graphe G 0 = (V 0 , E0 )
qu’on obtient en enlevant u et la seule arête incidente. Puisque |V 0 | = |V | − 1 = n
et | E0 | = | E| − 1 < n − 1, G 0 n’est pas connexe par l’hypothèse d’induction. En
conséquence, G n’est pas connexe non plus (Lemme 17.5 : ajouter u avec une seule
arête ne crée pas de chemins entre deux autres sommets). 
TABLE 17.2: Trois propriétés fondamentales
du graphe G = (V, E) s’il est un arbre.
Lemme 17.7. Si | E| ≥ |V | > 0, alors le graphe n’est pas acyclique.
(a) G est acyclique ;
(b) |V | = | E| + 1 ;
Preuve par induction en |V |. (base) |V | = 1, | E| = 0, le lemme est vrai (antécédent
(c) G est connexe.
faux). (HI) Hypothèse : vrai pour un n = |V |. (induction) Supposons que G = (V, E)
est un graphe quelconque avec |V | = n + 1 et | E| > n. (Cas 1) Si G contient un
sommet u avec d(u) < 2 alors on considère le sous-graphe G 0 = (V 0 , E0 ) engendré
par V 0 = V − {u}. On a |V 0 | = n et | E0 | ≥ | E| − 1 ≥ n. Par l’hypothèse
d’induction, G 0 contient un cycle, donc G le contient aussi. (Cas 2) Si d(u) ≥ 2
pour tout sommet u ∈ V, alors on peut construire un cycle. Choisir x0 arbitraire,
et continuer sur n’importe quelle arête x0 x1 ∈ E. Choisir des arêtes pour sortir
arbitrairement jusqu’à ce qu’on retrouve avec un sommet xk déjà sélectionné une fois :
xk = xi avec i < k. Or, xi xi+1 · · · xk xi est un cycle. (conclusion) Le Lemme vaut
pour tout graphe G (V, E) de tout ordre n ∈ N. 

Preuve de Théorème 17.4. (V. Table 17.2.) a ∧ c → b : par Lemmes 17.6 et 17.7.
b ∧ c → a : par Lemme 17.7 et Théorème 17.3. b ∧ a → c : par Lemme 17.6 et
Théorème 17.3. 

Dans un graphe connexe, un arbre couvrant est un sous-arbre maximal


qui couvre tous 3 les sommets. 3. Tandis que l’arbre T ne couvre pas tous
les sommets, on peut y ajouter une arête qui
mène d’un sommet dans l’arbre à un sommet
non pas dans l’arbre. Il suffit de choisir un
chemin de longueur minimale entre un
sommet x ∈ T et y 6∈ T : un tel chemin
existe à cause de connexité, et il contient
forcément une seule arête car il est minimal.
162

17.2 Arbre enraciné


En orientant les arêtes d’un arbre libre à partir d’une racine, on obtient un
arbre enraciné. On considère les arbres enracinés (où l’ordre des enfants n’est
pas important) et les arbres ordonnés (comme l’arbre binaire, où les enfants sont
ordonnés gauche-droit). On identifie un arbre par sa racine.

F IGURE 17.4: Arbre enraciné. On obtient


un arbre enraciné (orienté) d’un arbre libre
w parent
(non-orienté) en tournant les arcs au long
des chemins sortant d’une seule source
enfant
racine (la racine). Les arcs représentent alors les
relations d’«enfant de». Son inverse, la
relation de parent correspond à l’orientation
sous-arbre de des chemins vers la racine.
racine w

Définition 17.3. Un arbre enraciné (ou arborescence) T est une structure


définie sur un ensemble 4 de nœuds qui 4. Noter qu’il n’y a pas d’ordre imposé sur les
enfants.
1. est un nœud externe, ou
2. est composé d’un nœud interne appellé la racine r, et un ensemble d’arbres
enracinés (les enfants)

Définition 17.4. Un arbre ordonné T est un arbre enraciné dans lequel les en-
fants sont ordonnés ou numérotés 5 . Un arbre ordonné est donc soit un nœud externe, 5. La numérotation définit un système d’adres-
soit un nœud interne r avec enfants T1 , . . . , Td , où la racine de Ti est appelée le i-ème sage universel pour ses nœuds : l’adresse du
nœud u est la chaîne des indices des enfants
enfant de r. visités sur le chemin de la racine à u.

Définition 17.5. Le degré (ou arité) d’un nœud est le nombre de ses enfants : les
nœuds externes sont de degré 0. Le degré de l’arbre est le degré maximal de ses nœuds.
Un arbre d-aire est un arbre ordonné où chaque nœud interne possède exactement d
enfants. En particulier, un arbre binaire 6 est un arbre numeroté où chaque nœud 6. :arbre binaire
(fr)

interne possède exactement 2 enfants : les sous-arbres gauche et droit.


163

17.3 Hauteur et profondeur

niveau 0 F IGURE 17.5: Hauteur et niveau.


niveau 1
niveau 2 hauteur=3
niveau 3 hauteur=4
niveau 4

? Niveau ou profondeur (level/depth) d’un nœud u : longueur du chemin


qui mène à u à partir de la racine

0 si x est la racine ;
d( x ) = (17.1)
1 + d(parent de x ) sinon

? Hauteur (height) d’un nœud u : longueur maximale de chemin de u jus-


qu’à un nœud externe dans son sous-arbre

0 si x est externe ;
h( x ) = (17.2)
1 + maxy∈ x.children h(y) si x est interne

? Hauteur de l’arbre : hauteur de la racine (= niveau maximal de nœuds)


Théorème 17.8. Soit T un arbre, et soit nd le nombre de noeuds avec degré d ∈ N.
 Spécifiquement, dans un arbre binaire,
En particulier, n0 est le nombre de nœuds externes. Alors n0 = 1 + ∑d>1 (d − 1)nd . n = n2 = n0 − 1 est le nombre de nœuds
internes. Dans un arbre r-aire, on a

Démonstration. On considère le graphe non-orienté T 0 qu’on obtient par la n0 = (r − 1)nr + 1,


symétrisation des relations parent-enfant. Un nœud avec d enfants dans l’arbre T est de avec nr = n le nombre de nœuds internes.
degré (d + 1) dans T 0 , sauf pour la racine qui n’a pas de parent. En plus, T 0 est un
arbre (libre), avec n = ∑d≥0 nd sommets et (n − 1) arêtes. Par le théorème des
poignées des mains,
!
∑ n d ( d + 1) − 1 =2 ∑ nd − 1 .
d ≥0 d ≥0
| {z } | {z }
somme des degrés dans T 0 nombre d’arêtes dans T 0

Après soustraction du côté droit, on a 1 + ∑d≥0 (d − 1)nd = 0, d’où


1 − n0 + 0 · n1 + ∑n>1 (d − 1)nd = 0, et en réarrangeant les termes on obtient le
théorème. 
Théorème 17.9. La hauteur h d’un arbre binaire à n nœuds internes est bornée
 
comme lg(n + 1) ≤ h ≤ n.
En général, dans un arbre d-aire, on a
Démonstration. Un arbre de hauteur h = 0 ne contient qu’un seul nœud h −1
dh − 1
externe (n = 0), et les bornes sont correctes. Pour h > 0, on définit nk comme le h≤n≤ ∑ dk = d−1
k =0
nombre de nœuds internes au niveau k = 0, 1, 2, . . . , h − 1 (il n’y a pas de nœud
−1
interne au niveau h). On a n = ∑kh= 0 nk . Comme nk ≥ 1 pour tout k = 0, . . . , h − 1,
d’où
h −1 
on a que n ≥ ∑k=0 1 = h. Pour une borne supérieure, on utilise que n0 = 1, et que logd n(d − 1) + 1 ≤ h ≤ n.
−1 k | {z }
nk ≤ 2nk−1 pour tout k > 0. En conséquence, n ≤ ∑kh= h
0 2 = 2 − 1, d’où lg n
∼ lg d
h ≥ lg(n + 1). La preuve montre aussi les arbres extrêmes : une chaîne de nœuds pour
h = n, et un arbre binaire complet. 
164

Définition 17.6. Dans un arbre binaire complet de hauteur h ≥ 0, tous les


nœuds externes sont aux niveaux (h − 1) ou h.

Dans un arbre binaire, les feuilles sont les nœuds internes avec deux en-
fants externes. Les feuilles d’un arbre binaire complet de hauteur h sont au
niveau (h − 1) ou (h − 2).

niveau 0 F IGURE 17.6: Un arbre binaire complet


niveau 1 de hauteur 6 : il y a 2i nœuds à chaque
niveau 2 niveau i = 0, . . . , 5. Typiquement, on
niveau 3
«remplit» les niveaux de gauche à droit.

 RosenFR utilise une traduction erronée (arbre «équilibré» pour arbre complet) et une terminologie confuse.
terme correct signification RosenFR RosenEN
arbre m-aire m enfants à tout nœud interne arbre m-aire complet full m-ary tree
(arbre dégéneré) ≤ m enfants à tout nœud arbre m-aire
arbre binaire (parfait/full) arité = 2 arbre binaire complet full binary tree
arbre binaire complet (complete) externes aux plus bas ≤ 2 niveaux arbre binaire équilibré balanced binary tree
arbre binaire équilibré (balanced) hauteur logarithmique
(nœud) interne > 0 enfants (sommet) interne internal (vertex)
nœud externe 0 enfants feuille leaf
feuille (leaf) 2 enfants externes

TABLE 17.3: Collision de terminologie de


structures de données avec Rosen.

Implémentations informatiques
Dans une structure de données, on veut retrouver facilement soit le parent,
soit les enfants, soit les deux à tout nœud, selon les demandes de l’application.
Dans une telle structure, les nœuds externes ne portent pas de données, et on
les représente simplement par des liens null 7 . Ainsi, un nœud interne x dans 7. Si on ignore les nœuds externes, on ob-
un arbre binaire contient deux variables (p.e, x.left et x.right) pour ses enfants tient un arbre d’arité variable sur les nœuds
internes de l’arbre original, dans lequel un
gauche et droit, et/ou une variable x.parent pour son parent. Dans les arbres nœud peut avoir un enfant gauche, un enfant
de recherche employés pour indexer les bases de données, les enfants externes droit, deux enfants, ou aucun enfant. C’est la
notion de l’«arbre binaire» (et non pas «arbre
aux feuilles sont les entrées dans le fichier sur stockage externe, tandis que les binaire parfait») assumé par Rosen, et dans
nœuds internes sont dans le mémoire vive pour rapide recherche. quelques autres ouvrages.
165

17.4 Parcours
Un parcours visite tous les nœuds de l’arbre. Lors d’un parcours préfixe
(ou parcours preordre, preorder traversal), chaque nœud est visité avant que ses
enfants soient visités. On calcule ainsi des propriétés avec récurrence vers le
parent comme la profondeur (17.1). Dans un parcours postfixe (ou parcours
postordre, postorder traversal), chaque nœud est visité après que ses enfants sont
visités. On calcule ainsi des propriétés avec récurrence vers les enfants comme
la hauteur (17.2) Voir Figures 17.7 et 17.8 pour le pseudocode.

P A R C O U R S - P R É F I X E (x) // parcours préordre P A R C O U R S - P O S T F I X E (x) // parcours postordre


1 «visiter» x // avant les enfants 1 if x 6= null then
2 if x 6= null then 2 for tout enfant c de x do
3 for tout enfant c de x do 3 P A R C O U R S - P O S T F I X E (c)
4 P A R C O U R S - P R É F I X E (c) 4 «visiter» x // après les enfants
F IGURE 17.7: Pseudocode des parcours
préfixe et postfixe. Nœud externe est
x = null.

D E P T H ( x, d) // calculer toutes les profondeurs Dx H E I G H T (x) // retourne hauteur de x


// parent de x est à niveau d − 1 H1 max = −1 // hauteur maximale des enfants
// appel initial avec x = root et d = 0 H2 if x 6= null then
D1 if x 6= null then H3 for y ∈ x.children do
D2 Dx = d // visite préfixe H4 h = H E I G H T (y) ;
D3 for y ∈ x.children do H5 if h > max then max = h
D4 D E P T H (y, d + 1) H6 return 1 + max // visite postfixe
F IGURE 17.8: Calcul de profondeurs en
parcours préfixe ; calcul de hauteur en
À l’addition des parcours préfixe et postfixe, la racine d’un arbre binaire parcours postfixe. Chaque nœud interne x
peut être visité en ordre, après son enfant gauche mais avant son enfant droit possède la variable x.children qui est
dans un parcours infixe (inorder traversal). Voir Figure 17.9. l’ensemble de ses enfants. La racine est root
avec profondeur 0.

P A R C O U R S (x) F IGURE 17.9: Parcours des nœuds de l’arbre


1 // action en visite préfixe binaire. «Visiter» est l’action à la racine x.
Tout nœud interne x 6= null possède les
2 if x 6= null then
2 variables x.left et x.right pour stocker
3 P A R C O U R S ( x.left) enfants gauche et droit.
4 // action en visite infixe
5 P A R C O U R S ( x.right)
6 // action en visite postfixe
166

17.5 Arbre syntaxique


L’arbre syntaxique représente la structure syntaxique d’une formule bien 8. Ensemble inductif F de formules en
logique des propositions (Exemple 9.6) :
formée. Un nœud externe comporte un symbole terminal, et un nœud in- (i) formule atomique : p, c ∈ V avec
terne d’arité m correspond à un opérateur d’arité m. L’ensemble des formules variable propositionnelle p ∈ V ou constante
bien formées est définie par induction, à partir des symboles terminaux, en c ∈ {0, 1} ; (ii) formule composée : si
φ ∈ F, alors (¬φ) ∈ F ; si φ, ψ ∈ F, alors
employant des règles de réécriture. Par exemple, le syntaxe de la logique (φ → ψ) ∈ F, (φ ∧ ψ) ∈ F, et
propositionnelle 8 est défini en forme de Backus-Naur 9 avec les règles (φ ∨ ψ) ∈ F.
9. :forme de Backus-Naur
(fr)

F : : = a | ¬F | F ∧ F | F ∨ F | F → F (17.3)

où a dénote n’importe quelle proposition atomique : une variable proposition-


nelle, ou une constante. La forme Backus-Naur (BNF) est un méta-langage
pour définir un ensemble de chaînes bien-formées, c’est à dire le syntaxe
d’un langage formel. On l’utilise pour spécifier le syntaxe des langages de pro-

grammation. Une règle en BNF utilise le méta-symbole de réécriture : : =
(« est défini par »), avec un symbole non-terminal à la gauche, et les rempla- ¬ ∧
cements possibles à la droite : une ou plusieurs chaînes de symboles avec le p q r
méta-symbole de séparateur | . ¬p ∨q ∧ r
Dans l’arbre syntaxique d’une formule logique, un nœud interne d’arité 1
est décoré avec ¬. Les autres nœuds internes ont deux enfants, correspondant ∧ ∧
aux opérateurs binaires ∧, ∨, →, et les nœuds externes sont décorés avec des ∨ r ¬ r
atomes. La formule correspondante est retrouvé dans le parcours récursif de
¬ q ∨
l’arbre : si la racine est unaire (négation ¬), en préfixe (opérateur avant le
parcours du sous-arbre), et si la racine est binaire (opérateurs binaires), en p p q
infixe. (¬p ∨q ) ∧ r ¬(p ∨q ) ∧ r
¬ ¬
∨ ∧
p ∧ ∨ r
q r p q
¬( p ∨ q ∧ r ) ¬((p ∨ q )∧ r )
F IGURE 17.10: Arbres syntaxiques pour
formules logiques. On peut écrire les mêmes
formules sans parenthèses en notation
polonaise inverse : p¬qr ∧ ∨, p¬q ∨ r ∧,
pq ∨ ¬r ∧, pqr ∧ ∨¬, et pq ∨ r ∧ ¬.
167

Ambiguïté et les parenthèses *


10 +
La grammaire de (17.3) ne spécifie pas les parenthèses, et on doit les ajou-
ter pour respecter la priorité entre les opérations logiques (¬, ∧, ∨, →). En 6 5
conséquence, la grammaire est ambiguë : voir Figure 17.10 pour cinq arbres F IGURE 17.11: Arbre syntaxique pour
une expression arithmétique. L’arbre
avec le même parcours infixe. On peut éviter l’ambiguïté en insistant sur les montre l’application de règles dans
parenthèses F : : = a | (¬ F ) | ( F ∧ F ) | ( F ∨ F ) | ( F → F ). Mais il faut alors une grammaire formelle d’expressions :
accompagner la grammaire avec les règles pour omettre les parenthèses selon E → E + E| E ∗ E|nombre. En notation in-
fixe : 10 ∗ (6 + 5) ; préfixe : ∗ 10 + 6 5 ;
la priorité et associativité des opérations. Il est possible d’encoder l’ordre des
opérations et l’associativité dans les règles de réécriture, avec symboles non- postfixe : 10 6 5 + ∗ .

terminaux additionnels représentant littéraux, disjonctions, et conjonctions :

F::=D | D → F  p → q → r ≡ p → (q → r )
D::=C | D ∨C  p ∨ q ∨ r ≡ ( p ∨ q) ∨ r
C::= L | C ∧ L  p ∧ q ∧ r ≡ ( p ∧ q) ∧ r
L : : = a | ¬ L | ( F)  parenthèses pour changer priorité

Une opération x op y est écrite en notation polonaise inverse 10 (reverse 10. :notations postfixe, infixe et préfixe
(fr)

Polish notation, RPN) ou notation postfixe par x y op . L’avantage de la


notation est qu’elle élimine la nécessité des parenthèses, et l’ordre des sym-
boles dans la chaîne reflète le flux de l’information. On obtient la formule en 1 ∨
notation polonaise inverse dans un parcours postfixe de l’arbre de syntaxe.
1 ¬ ∧ 0
Évaluation de formules
0 p q 1 r 0
La valeur d’une expression bien formée est définie par la sémantique du F IGURE 17.12: Valeur logique d’une
langage, appariée avec les règles syntaxiques. Après l’affectation des variables formule propositionnelle est déterminée
aux noœuds terminaux, l’évaluation correspond à un parcours postfixe de en ascendant dans l’arbre vers la racine. Ici,
¬ p ∨ q ∧ r ≡ 1 quand p ≡ 0, q ≡ 1 et
l’arbre syntaxique. Aux nœuds internes, on calcule la valeur à l’aide d’une r ≡ 0.
fonction qui définit la sémantique de l’opérateur placé au nœud.

Algorithme E VA L ( x ) // évaluation de l’arbre syntaxique avec racine x


E1 if x n’a pas d’enfants then return sa valeur // variable ou constante
E2 else // x est une opération op d’arité k
E3 for c1 , . . . , ck ∈ x.children do yk = E VA L (ck )
E4 return le résultat de l’opération op avec les opérands y1 , . . . , yk .
168

Liaison de variables →

Le syntaxe de la logique de prédicats est défini dans un domaine de dis- ∀x ∨


cours U accompagné par ses termes bien-formés T, et les prédicats P :
∧ ¬ S
φ : : = P(t1 , . . . , tm ) | (¬φ) | (∀ x φ) | (∃ x φ) | (φ ∧ φ) | (φ ∨ φ) | (φ → φ)

avec un prédicat quelconque P ∈ P d’arité m, les termes t1 , . . . , tm ∈ F, P Q P y


et variable quelconque x prenant valeurs dans U. La liaison des variables libre
est définie sur l’arbre syntaxique. Notamment, l’arbre pour une formule x x y x
quantifiée F ≡ ∀ x φ ou F ≡ ∃ x φ contient un sous-arbre de la racine F lié lié libre libre
avec la formule φ, et la variable x est liée dans les nœuds terminaux du sous- F IGURE 17.13: Liaison de va-
riables dans logique des prédicats :
arbre enraciné à F. (Tandis que x est libre dans la formule φ en soi.) Lors
arbre syntaxique pour la formule
des substitutions, on a le droit de remplacer toute occurrence d’une même ∀ x P( x ) ∧ Q( x, y) → ¬ P( x ) ∨ S(y).
variable libre y par un terme t quelconque, pourvu qu’il est libre pour toutes
∀x ∀x
les variables de t (voir Figure 17.14).
La portée des variables locales en un langage de programmation est définie ∧ ∧
de même manière : la variable x, déclarée à un nœud interne B de l’arbre
P Q P Q
syntaxique du code source est visible dans le sous-arbre de B (ici B correspond
à un bloc de code, p.e., enfermé par accolades {· · · } dans C ou Java). x x h x x +

y z x y

libre pour y et z n’est pas libre pour x


(substitution OK) (substitution illégale)
F IGURE 17.14: Règle de substitution
dans logique des prédicats.Dans la for-
mule ∀ x P( x ) ∧ Q( x, y) , on peut substi-
tuer le terme h(y, z) (avec une fonction h
quelconque bien définie) pour la variable
libre y car y et z sont libres. Par contre,
remplacement par x + y n’est pas permis
car x est lié.
18 Examen final : liste de sujets et références Les références sont aux livres de Rosen,
18.1 Les entiers versions française [2002] et anglaise [2012,
7e édition]. La référence CS2013 donne la
correspondance au Corpus de savoir du B.Sc.
? définition des opérations arithmétiques, en informatique, défini dans le Computer
? ? ? axiomes de Peano Science Curricula de ACM/IEEE Joint Task
Force (2013).
? divisibilité, congruence sur les entiers, arithmétique modulaire
TABLE 18.1: Références — entiers
? nombres premiers, théorème fondamental de l’arithmétique . RosenFR §2.3-2.5 (on n’a pas discuté le
? plus grand commun diviseur, algorithme d’Euclide théorème de Sun-Tsu)
. RosenEN §4.1, §4.3, §4.4 sur les
?? algorithme d’Euclide étendu, inverses multiplicatives inverses, §4.6 sur cryptographie à clé
publique
?? théorème d’Euler, petit théorème de Fermat
. notes de cours §9.3, 11, §13.4 ; diapos
?? cryptographie à clé publique : algorithme RSA, échange de clés Diffie- 9.2 (Peano), 11.1–11.2, 13.1 (arithmé-
Hellman tique), 13.3 (Euclide), 13.4 (RSA)
.. (fr):congruence, (fr):algorithme

d’Euclide étendu, (fr):chiffrement RSA


18.2 Algorithmes (lectures recommandées)
CS2013 (DS/Basics of Counting) basic
? notion d’algorithme, pseudocode modular arithmetic CS2013 (AL/Fundamental
Data Structures and Algorithms) simple
? correction, complexité algorithmique, temps de calcul au pire/meilleur/moyen numerical algorithms :finding the greatest common
? tris élémentaires : tri par sélection, tri par insertion divisor CS2013 (IAS/Cryptography) public key
encryption :RSA
? algorithmes récursifs, stratégies : diviser-pour-régner, programmation
dynamique TABLE 18.2: Références — algorithmes
. RosenFR §2.1, §2.4, §3.4
18.3 Analyse d’algorithmes . RosenEN §3.1, §4.2, §5.4
. notes de cours 12, diapos 12
? notations tilde et petit-o . (fr) :tri par insertion, :tri par sélec-
(fr)

tion
? récurrences et diviser-pour-régner .. (fr):machine de Turing, (fr):machine

? analyse asymptotique de bornes de complexité au pire cas RAM (lectures recommandées)


CS2013 (SDF/Algorithms and Design)
? analyse d’algorithmes itératifs (simples) concept and properties of algorithms, problem-
? notations grand-O, grand-Theta, grand-Omega : définitions formelles solving strategies CS2013 (SDF/Fundamental
Programming Concepts) concept of recur-
∀−∃ sion CS2013 (AL/Algorithmic Strategies)
? approximations notables : nombres harmoniques Hn ∼ ln n = Θ(log n), divide-and-conquer, dynamic programming
√  n CS2013 (AL/Fundamental Data Structures
formule de Stirling n! ∼ 2πn ne = Θ(nn+1/2 e−n ) et lg n! ∼ and Algorithms) simple numerical algorithms,
worst case quadratic sorting algorithms
n lg n = Θ(n log n)
? échelle standard, classes de complexité : constante, logarithmique, linéaire, TABLE 18.3: Références — analyse d’algo-
linéarithmique, quadratique, exponentielle rithmes
. RosenFR §2.2
? recherche dichotomique = fouille binaire = binary search
. RosenEN §3.2, §3.3
? tri fusion = mergesort . notes de cours 13, diapos 13.1–13.4
.. (fr):comparaison asymptotique (lecture
recommandée)
CS2013 (AL/Basic Analysis) analysis of
iterative and recursive algorithms, asymptotic
analysis of upper complexity bounds ; Big O
notation ; little o, big omega and big theta
notation ; Complexity classes, such as constant,
logarithmic, linear, quadratic, and exponential
CS2013 (AL/Fundamental Data Structures
and Algorithms) binary search ; worst case O(N
log N) sorting algorithm : mergesort
170

TABLE 18.4: Références — dénombrement


18.4 Dénombrement
. RosenFR §4.1–4.3, §4.6–4.7, §5.4–5.5
? cardinalité, dénombrement et énumeration . RosenEN §2.5, chapitre 6, §8.5–8.6
. notes de cours 14, diapos 14.1–14.4
? principes de base : multiplication et addition
.. (fr):coefficient binomial (fr):triangle de

? principe de soustraction, principe d’inclusion-exclusion (2 ou 3) Pascal, (lectures recommandées)


CS2013 (DS/Basics of Counting) counting
?? principe d’inclusion-exclusion général
arguments : set cardinality and counting, sum
? principe des tiroirs = principe du pigeonnier = pigeonhole principle and product rule, inclusion-exclusion principle ;
the pigeonhole principle ; permutations and
? combinaisons, arrangements et permutations ; sans ou avec répétitions combinations : basic definition, Pascal’s identity,
the binomial theorem
? coefficients binomiaux, récurrence du produit 1 , identité de Pascal 2 , théo-
+1
rème du binôme 1. produit : (nk+ 1) =
n +1 n
k +1 ( k )
1
? ? ? identités remarquables : crosse de hockey, Vandermonde 2. Pascal : (n+
k ) = ( k ) + (k−n 1)
n

? preuves par induction pour identités avec coefficients binomiaux


TABLE 18.5: Références — graphes
?? preuves combinatoires pour identités avec coefficients binomiaux
. RosenFR §6.3–6.4, §7.1–7.4
? ? ? preuves algébriques pour identités avec coefficients binomiaux . RosenEN §9.3–9.4, §10.1–10.4
?? coefficients multinomiaux, théorème du multinôme . notes de cours 15, diapos 15
. notes de cours 16, diapos 16
.. (fr):lexique de la théorie des graphes
18.5 Graphes (lecture recommandée)
CS2013 (DS/Graphs and Trees)
? terminologie : graphes orientés et non-orientés, multigraphes, sous-
undirected graphs, directed graphs
graphes, adjacence et incidence CS2013 (AL/Fundamental Data Struc-
tures and Algorithms) representations of graphs
? théorème des poignées de main CS2013 (AL/Advanced Data Structures
? graphes bipartis et couplage Algorithms and Analysis) maximum bipartite
matching CS2013 (DS/Graphs and Trees)
?? théorème de Kőnig / couplage maximal graph isomorphism

? matrice d’une relation


? isomorphisme, opérations sur graphes
? chemins, cycles, connexité, coupures TABLE 18.6: Références — arbres
? clôtures de graphes et de relations . RosenFR §8.1, §8.3, §10.1
. RosenEN §11.1, §11.3, §13.1
. notes de cours 17, diapos 17
18.6 Arbres
.. (fr):arbre binaire, (fr):forme de Backus-
Naur (lectures recommandées)
? arbres libres
CS2013 (DS/Graphs and Trees)
? arbres (enracinés) : terminologie trees : properties, traversal strategies
CS2013 (PL/Programming Languages)
? arbre binaire et d-aire ; arbre d-aire complet abstract syntax trees
? propriétés : hauteur et profondeur
? parcours postfixe, préfixe et infixe
? arbre syntaxique ; notations préfixe, infixe et postfixe
42 L’infini et les limites du savoir
L’ I N F I N I fascine l’humanité depuis toujours, ou au moins dès qu’on a acquis
l’abstraction d’un «prochain» répétable, évident dans les procès cycliques de
l’univers : on peut l’appliquer jusqu’à l’infini — c’est l’idée d’induction. Un
infini moins précisément défini (∞) est simplement l’inverse de finitude, et
cela inclut des infinis qu’on ne peut pas apprivoiser par induction. Ils ne sont
pas énumérables, même pas en principe, parce qu’il n’admettent pas d’injection
vers les entiers. Un tel infini est le continu qui est la cardinalité des nombres
réels, ou celle de toutes les prédicats possibles sur les entiers naturels. Un
résultat profond sur les limites de notre discipline découle du fait que tandis
que les calculs possibles sont dénombrables (code source comme une chaîne F IGURE 42.1: Ouroboros, ou le serpent qui
finie de caractères établit une injection vers N), les problèmes (prédicats se mord la queue, est un ancien symbol
mystique d’éternité, ou l’infini par induction.
possibles) ne sont pas : presque tout problème est impossible à résoudre par [Illustration dans un manuscrit enluminé par
l’ordinateur, même si on avait des ressources illimités (jeu d’instructions, le copiste Théodore Pélécanos de Crète,
mémoire et temps = N). 1478]

42.1 Les infinis


La définition de l’ordre et égalité par cardinalité 1 est la même pour en- 1. Notes de cours §14.1.
sembles infinis et ensembles finis : elle demande des fonctions injectives et
bijectives 2 . 2. Définition §6.7
On a | A| ≤ | B| si et seulement s’il existe une injection f : A → B. On a égalité | A| = | B| ssi | A| ≤ | B| et | B| ≤ | A|,
ou bien il existe une bijection entre eux. Par définition, le principe du pigeonnier applique aux ensembles infinis en ce
sens qu’avec (| A| > | B|) ≡ ¬(| A| ≤ | B|), il n’y a pas d’injection A → B, donc il est impossible de dénombrer
les membres de A par ceux de B sans répétition. Par contre, on peut avoir une injection f : A → B même vers un
sous-ensemble propre B ⊂ A quand A est infini (et seulement si A est infini).
Exemple 42.1 (Le Grand Hôtel de Hilbert). Un hôtel fini avec aucune vacance
de chambres ne peut pas accommoder un nouveau client. Imaginons maintenant que
l’hôtel a une infinité de chambres numérotés par les entiers naturels. La gérante peut
mettre une chambre à la disposition d’une nouvelle cliente même s’il n’y a pas de
vacances. Il suffit de déplacer tout le monde n 7→ (n + 1), et la première chambre est
libérée. En répétant la démarche, l’hôtel peut accommoder n’importe quel nombre de
nouveaux arrivants. Même une infinité de de chambres peuvent être libérées si on
demande les habitants dans toute chambre de se déplacer n 7→ 2n simultanément.

Les cardinaux sont des nombres qui représentent la cardinalité des en-
sembles. Les cardinaux finis sont les nombres naturels (=taille d’un ensemble).
Les cardinaux infinis sont des nombres transfinis, avec des règles d’arithmétique
particulières 3 . 3. « Il est la source de beaucoup de troubles quand
on prend des principes déduits à partir des
expériences avec le fini, et on essaye de les forcer
L’infini dénombrable : ℵ0 sur l’infini. L’infini se secoue et s’en échappe. »
[Rózsa Péter]
La plus petite cardinalité infinie est celle de tous les entiers naturels, dé-  Aleph ℵ est la première lettre de l’alpha-
notée par ℵ0 = |N| («aleph-zéro»). Un ensemble infini dénombrable bet hébreu (et d’autres alphabets sémitiques).
172

(ou énumérable) A est de cardinalité | A| = ℵ0 . En général, on dit qu’un


ensemble A est dénombrable, s’il existe une injection A → N. Ainsi, les
ensembles finis sont dénombrables, et tout sous-ensemble 4 d’un ensemble 4. Si A ⊆ B et f : B → N est une injection,
dénombrable est dénombrable. alors elle est aussi une injection f : A → N.

(i) Dans le premier exemple du Grand Hôtel de Hilbert, soit N1 = s(N) =


N ∪ {N}, le successeur de N. Il est clair que N ⊂ N1 est un sous-
ensemble propre. Mais |N| = | N1 | = ℵ0 , car il existe la bijection h : N1 →
N de la gérante h(N) = 0 et h(n) = n + 1 pour n ∈ N. En répétant
la procédure, on obtient une bijection Nc → N pour tout successeur
Nc = Nc−1 ∪ { Nc−1 }, montrant |N| = | Nc | = ℵ0 pour une union
disjointe Nc = N ∪ C avec |C | = c.
(ii) Dans le deuxième exemple du Grand Hôtel, si M = {0, 1} × N dénote 0 2 4 6 8
...

l’ensemble des clients, anciens (0) et nouveaux (1), alors | M | = |N| = ℵ0 1 3 5 7

F IGURE 42.2: Fusion de deux énumérations.


car h(i, n) = 2n + i est une bijection h : M → N.
Les ordinaux sont des nombres qui représentent des bon ordres distincts. En considérant la construction des entiers
naturels par le successeur, inclusion stricte ⊂ établit le bon ordre : 0 ⊂ 1 ⊂ 2 ⊂ · · · ⊂ N. Deux ensembles A, B ont le
même type d’ordre, s’il existe une bijection entre eux qui est un isomorphisme (Notes de cours §16.1) préservant un bon
ordre. Avec le successeur N1 = N ∪ {N}, on a la même taille | N1 | = |N| mais non pas la même longueur car il n’existe
aucune bijection f : N1 → N avec une image pour N qui satisfait ∀n : f (n) < f (N).
L’union de deux ensembles énumérables est énumérable, et donc, par
induction, toute union finie de k > 2 ensembles énumérables est énumé-
rable aussi. En fait, même pour une famille infinie d’ensembles { Ai }i∞=0 , leur
S
union A = i∞=1 Ai est dénombrable si tous les Ai sont (finis ou infinis)
dénombrables. Si on énumère les membres Ai = { ai,0 , ai,1 , . . . }, alors

[ 
A= Ai = ai,j (i, j) ∈ N × N, 0 ≤ j < | Ai |
i =0
| {z }
indices des éléments à travers des Ai

et donc A est dénombrable si l’ensemble N × N = N2 est dénombrable.


Théorème 42.1 (Dénombrement de couples d’entiers). Les couples des nombres
naturels sont énumérables :
N × N = ℵ0 .  ∞2 = ∞

...
Preuve avec couplage de Cantor. On démontre que le théorème avec une bi-
9 ...
jection C : N2 → N, le couplage de Cantor. On arrive à la fonction par
y 5 8 ...
l’énumération des couples ( x, y) ∈ N × N par antidiagonales :
2 4 7 ...
(0, 0), (1, 0), (0, 1), (2, 0), (1, 1), (0, 2), (3, 0), (2, 1), (1, 2), (0, 3), . . .
| {z } | {z } | {z } 0 1 3 6 ...
x + y =1 x + y =2 x + y =3
x
Cela donne, avec les nombres triangulaires (Théorème 8.6) F IGURE 42.3: Couplage de Cantor. L’énu-
mération des couples ( x, y) par antidiago-
( x +y)−1
( x + y + 1)( x + y) ( x +y)2 + x +3y nales définit une bijection, ou couplage,
C ( x, y) = ∑ ( d + 1) + y =
2
+y = 2 . entre N2 et N.
d =0


173

Pour l’inversion du couplage de Cantor, supposons que c ∈ N, et on veut trouver tels ( x, y) que C ( x, y) = c. On écrit
d = x + y, et alors on cherche d entier (l’antidiagonale) tel que
√ 
d ( d + 1) (d + 1)(d + 2) 8c + 1 − 1
≤c< alors d= ,
2 2 2
et on a y = C − d(d + 1)/2 et x = d − y. Exemples pour couplage Cantor :
Par Théorème 42.1, les nombres rationnels sont énumérables, par l’in- C (2, 1) = (32 + 2 + 3)/2 = 7
jection facile p/q 7→ ( p, q). On peut répéter les astuces de dénombrer les √
C −1 (9) = d = b( 73 − 1)/2c = 3
couples (=2-tuples) pour dénombrer tous les tuples d’entiers, ou toutes les
y = 9−6 = 3
chaînes finies sur un alphabet dénombrable. 
x = 3−3 = 0
Théorème 42.2. L’ensemble de toutes les suites finies d’entiers naturels est énumé-
rable : N∗ = ℵ0 . avec N∗ = ∪∞
`=0 N .
`

Preuve par l’encodage de Gödel. Par le Théorème fondamental de l’arithmétique


(Théorème 11.16) on peut encoder par la séquence de nombres premiers { pi }i∞=1 : on
met
n
f ( a1 , a2 , a3 , . . . , a n ) = ∏ pia +1
i

i =1
et c’est une bijection f : N∗ → N+ . (Elle est difficile d’inverser.)
(Preuve 2 avec couplage de Cantor) On définit une bijection N∗ → N par
récurrence.

g(λ) = 0  séquence vide



g ( a1 , a2 , . . . , a n ) = 1 + C a1 , g ( a2 , . . . , a n )  n-tuple avec n ≥ 1

Inversion : g−1 (0) = λ et pour k > 0, on calcule ( x, y) = C −1 (k − 1) et alors



g−1 (k) = x, g−1 (y) est inféré sans ambiguïté.
Donc g : N∗ → N est une bijection. 
L’encodage universel ω du Devoir No 3
donne une autre preuve à Théorème 42.2
car il établit une injection. Notamment,
Les infinis non-dénombrables (
λ si a = 0
ω (n) =
La technique de diagonalisation montre que l’ensemble puissance 2S est ω (| β( a)| − 1) β( a) si a > 0
toujours d’une cardinalité strictement supérieure à |S| (Théorème 6.11) Étant avec l’encodage binaire β(n) définit une
donné une fonction arbitraire f : S → 2S , l’astuce de diagonalisation est de injection à partir des ensembles d’entiers
construire l’ensemble diagonal D = { x ∈ S | x 6∈ f ( x )} qui est bien naturels aux chaînes binaires par concaténa-
tion :
défini par l’Axiome de compréhension lorsque S est un ensemble bien défini.
f ( a1 , . . . , an ) = 1ω ( a1 )0ω ( a2 )0 · · · ω ( an )0
Maintenant D ⊆ S, et il n’existe pas de x ∈ S avec f ( x ) = D, donc f n’est
pas une surjection. est inversible, et la chaîne binaire du coté
droit correspond à un entier naturel. (Noter
Une conséquence particulière du théorème de Cantor est que l’ensemble qu’on a préfixé par 1 pour éviter l’ambiguïté
puissance des entiers naturels est si grand qu’il n’est pas dénombrable. de 01 et 1 qui dénotent le même entier en
 encodage binaire).
Théorème 42.3. L’ensemble 2N = S S ⊆ N n’est pas dénombrable.
TABLE 42.1: Preuve de Théorème 42.3
N
2 > |N| = ℵ0 . (42.1) Démonstration. Par le théorème de Cantor, il
n’existe pas d’injection 2N → N, donc
Les structures isomorphes (Table 42.2) aux ensembles des entiers ne sont    
2N 6≤ |N| ≡ 2N > |N|
pas dénombrables non plus. En particulier, on a l’analogue du Corollaire 7.5
qui est pour le cas fini. 
TABLE 42.2: Structures infinies isomorphes
sur les entiers naturels n ∈ N.
ensemble n∈S n 6∈ S
prédicat P(n) ¬ P(n)
chaîne binaire bn = 1 bn = 0
fonction binaire f (n) = 1 f (n) = 0
174

Corollaire 42.4. (i) Les prédicats sur les entiers naturels ne sont pas énumé-
rables. (ii) Les chaînes binaires infinies ne sont pas énumérables. (iii) Les fonc-
tions N → {0, 1} ne sont pas énumérables.

La nouvelle cardinalité infinie des ensembles d’entiers et des prédicats sur


les entiers qu’on découvre dans l’Équation (42.1) est le continu
5. On a la récurrence b( x ) = 0 si x = 0 et
c = 2ℵ0 = {0, 1}N .  lettre c en police gothique autrement
b( x ) = b0 b1 · · · = b0 · b( x − b0 /2) par
Le continu est la cardinalité des nombres réels |R| = c. Notamment, on concaténation après le premier bit b0 = 0 si
0 ≤ x < 1/2 ou b0 = 1 si 1/2 ≤ x < 1.
peut construire 5 la représentation de x en virgule point fixe à base binaire : Par exemple, puisque t = 13 = 14 + 4t , il est
bk − 1
x = 0.b0 b1 b2 . . . = ∑∞ k =1 2k quand 0 ≤ x < 1, pour établir | I | = 2
N la valeur de la série géométrique
point fixe ∑∞ 1
k=1 4 = t, x = 0.01010101 · · · .
par une bijection 6 entre l’intervalle fermée I = { x | 0 ≤ x ≤ 1} et les 6. La bijection entre les chaînes binaires
chaînes binaires infinies {0, 1}N . L’intervalle I est de même cardinalité du infinies et les réels est presque immédiate
mais 0.011 · · · = 0.100 · · · en binaire. On
continu, ce qu’on peut établir 7 , p.e, par l’injection de la fonction sigmoïde peut séparer les ensembles S0 , S1 de chaînes
x
S( x ) = 1+1e−x = exe+1 . avec une queue infinie de 0s ou 1s (ils sont
énumérables, car il y a deux suffixes pour
Le paradoxe de Russell (Théorème 5.4) applique aux cardinaux. Ils ne chaque chaîne finie). Il existe alors une
forment pas un ensemble car on peut toujours créer un plus grand cardinal bijection h : S0 ∪ S1 → D ∩ I avec les
par l’ensemble puissance, et exclure des élements par diagonalisation pour nombres dyadiques de forme
D = { p/2q | p, q ∈ N}, car ce dernier est
créer la contradiction. La conséquence de la définition par injections est que aussi un ensemble énumérable (par les paites
les cardinaux sont bien ordonnés. Les premiers cardinaux infinis distincts sont ( p, q)). Une autre bijection entre les chaînes
«vraiment» infinies {0, 1}N − (S0 ∪ S1 ) et
dénotés ℵ0 , ℵ1 , ℵ2 , . . . : les réels non-dyadiques ( I − D ) montre que

0| < 1 <{z2 < · · }· < ℵ0 < ℵ1 < ℵ2 < · · · | I | = | I ∩ D | + | I − D | = ℵ0 + c = c.


| {z }
cardinaux finis un infini (non-dénombrable) d’infinis ! 7. La fonction sigmoïde
x
S( x ) = 1+1e−x = exe+1 est une bijection
L’hypothèse du continu 8 affirme qu’il n’y a aucune autre cardinalité entre entre x ∈ R et l’intervalle ouverte
I 0 = { x | 0 < x < 1}. L’intervalle
|N| = ℵ0 et 2ℵ0 = c = |R|, et plus généralement, ℵi+1 = 2ℵi :
ouverte I 0 et l’intervalle fermée I ont la
même cardinalité par le Théorème de
ℵ 1 = 2ℵ0 ℵ = 2ℵ1 ℵ 3 = 2ℵ2 ...
| {z } | 2 {z } | {z } Cantor-Schröder-Bernstein
continu=c ensembles de réels ensembles d’ensembles de réels (Théorème 15.10) car la fonction
x 7→ 31 + x/3 est une injection I → I 0 et
L’arithmétique avec des cardinalités infinies est simple : x + y = max{ x, y} I 0 → I en même temps étant donné que
1 2
et x · y = max{ x, y} parce qu’ils correspondent aux opérations ensemblistes 3 ≤ f ( x ) ≤ 3 pour tout 0 ≤ x ≤ 1. Donc
il existe une bijection f : I 0 → I avec
d’union et produit. laquelle la composition h( x ) = f ( B−1 ( x ))
est une bijection R → I.
8. (fr):hypothèse du continu
42.2 Indécidablité et incalculabilité
On décrit les algorithmes dans un modèle formel de calcul 9 comme la 9. Notes de cours §12.1
machine RAM. En conséquence, tout programme exécutable est encodé
par une chaîne de symboles bien formée selon le syntaxe 10 du modèle. Par 10. On définit le syntaxe d’un langage de
Théorème 42.2, l’ensemble de toutes les chaînes finies est dénombrable, donc programmation par des règles de réécriture
(Notes de cours §17.5), associée avec les
les algorithmes sont énumérables. Même avec un nombre illimité (énumérable) nœuds internes de l’arbre syntaxique, et par
de variables et d’instructions, l’algorithme se décrit en une longueur finie et les symboles terminaux aux nœuds externes.
Le jeu des règles et les symboles possibles
peut être encodé comme une chaîne finie d’entiers. En conséquence, il existe sont énumérables.
des problèmes sans solutions possibles par calcul car il y a autant 11 de prédicats 11. Notons que les prédicats qu’on peut expri-
que des points dans l’intervalle réelle entre 0 et 1. mer par des formules logiques bien formées
est dénombrable.
175

Théorème 42.5. Il existe un prédicat sur les nombres naturels qui n’est calculé par
aucun programme.

En fait, presque tous 12 les prédicats sont incalculables. Soit P l’ensemble 12. La notion de «presque tout» applique à un
de tous les prédicats. Si A dénote les prédicats qu’on pourrait calculer par un ensemble infini A. Si un
sous-ensemble B ⊆ A est de cardinalité
algorithmes, alors | A| = ℵ0 , mais l’ensemble des prédicats qui sont impossibles strictement inférieure | B| < | A|, alos
à calculer est de même taille que l’atout : | P − A| = | P| = c. presque tout x ∈ A est x 6∈ B.
L’ordinateur exécute un programme décrit dans le code source. La ma-
chine RAM est basée sur la même notion : on peut stocker le programme
dans le mémoire, encodé en bits et octets. Pour tout modèle formel de cal-
cul, on a une bijection entre les nombres naturels et les algorithmes possibles,
donc un prédicat sur les entiers naturels est en même temps un prédicat sur les
programmes possibles. Le programme se décrit en une chaîne finie, mais son
exécution ne s’arrête pas nécessairement — on peut écrire le code pour une
boucle infinie, par exemple. Les prédicats qu’on ne peut pas calculer incluent
tout aspect de l’exécution du code, comme le problème d’arrêt : est-ce que
l’exécution se termine en un temps fini ? La diagonalisation pour un prédi-
cat P sur les programmes correspond à la construction de l’algorithme D ( x )
qui calcule P( x ) et fait le contraire. Alors D ( D ) donne une contradiction 13 13. Par exemple, D se termine si P( D ), ou
car on doit calculer P( D ) à partir du code source. il se met dans une boucle infinie si ¬ P( D )
est une contradiction quand P( D ) est «D se
Un énoncé est indécidable 14 s’il est impossible de démontrer qu’il soit vrai termine»
ou qu’il soit faux. Un tel problème est adressé par l’hypothèse du continu : 14. Indécidable : aucune preuve pour montrer
si l’énoncé logique est vrai ou faux. On peut
l’existence de cardinaux infinis entre le dénombrable ℵ0 et le continu c = 2ℵ0 décider si un énoncé (fini) est tautologie ou
ne peut pas être décidée. Si on veut, on peut l’assumer sans contradiction contradiction dans logique propositionnelle
avec la reste de la théorie des ensembles, ou si on préfère, on peut assumer (Définition 1.2), ou calculer sa valeur pour
une affectation particulière sans problème
l’hypothèse 2ℵ0 = ℵ1 . (en principe, au moins, sans regard au temps
On trouve l’analogue d’incalculabilité dans toute approche formelle, requis). Par contre, la vérité de formules
logiques quantifiées dans le domaine des en-
énoncé par le théorème d’incomplétude de Gödel : si un système formel tiers ne peut pas être déterminée par aucun
d’inférence est assez puissant pour exprimer l’arithmétique des entiers, alors algorithme, sauf la validité du syntaxe. Un
soit il y a des énoncés logiques qui sont indécidables soit le système est incon- algorithme (absurde) qui calcule la vérité de
la formule correspond à une preuve directe
sistant, et tout peut être «démontré». La diagonalisation se fait en encodant les (v. Notes de cours §4.1). Mais même si on
énoncés et les démonstrations formelles par entiers naturels. P.e., dans déduc- permet des preuves indirectes (admettant la
loi du milieu exclu), presque tout énoncé est
tion naturelle on peut énumérer les règles d’inférence (Notes de cours §3.3), impossible à prouver. En conséquence, il est
et numéroter les propositions, avec un syntaxe pour imbrication des preuves également impossible à décider si une théorie
conditionnelles et la liaison des variables. Par exemple, avec la théorie axio- est satisfaisable (Notes de cours §2.7).

matique d’ensembles avec les axiomes de Peano (§9.3), on peut décrire un


prédicat sur des entiers de sorte que P(n) est vrai si n = G ( p) est l’encodage
(G) d’un énoncé p et il existe une preuve pour n (encodé aussi par un entier
quelconque k). Alors on peut fabriquer un énoncé sur des énoncés (bijection
aux entiers naturels) dont la preuve serait une contradiction p ↔ ¬ P( G ( p)).

Théorème 42.6 (Gödel, 1931). Un système formel qui est consistant, et assez
puissant d’exprimer l’arithmétique entière ne peut pas être complet.

Simplement dit, il restera toujours des questions sans réponses.


Table des figures
1.1 Une proposition. [«Trahision des images», René Magritte, 1929] 11

2.1 Un prédicat P scinde l’univers en deux : les P et les non-P. Il est impossible
d’avoir un élément x avec P( x ) faux et vrai en même temps (principe de non-
contradiction), et il est également impossible d’avoir un élément x pour le-
quel P( x ) n’est ni vrai ni faux (principe du tiers exclu). 17
2.2 Imbrication et liaison de variables. La formule exprime qu’il y a exactement
un élément x qui satisfait le prédicat P. 19
2.3 f ( x ) tend à L quand x tend à c. 20

5.1 Bertrand R USSELL (1872–1970), mathématicien, philosophe, moraliste et


activiste pacifiste, à l’age de 21 ans (collation de grades à Trinity College). 49

6.1 Portrait de René D ESCARTES (1596–1650), nommé Cartesius en Latin, par


Frans Hals [Louvre]. Descartes a inventé le produit qui porte son nom pour
définir R2 et R3 en géométrie 2D et 3D. 51
6.2 La fonction f : {1, 2, 3, 4} → { a, b, c, d, e} est définie par les couples

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

donc on écrit f (1) = a, f (2) = b et f (3) = f (4) = c. 55


6.3 La structure et la sémantique de l’échiquier. Le coloriage des cases est une fonc-
tion. 55
6.4 Composition de fonctions. La fonction composée f ◦ g comprend les asso-

ciations (α, c), ( β, b), (γ, d), (δ, b) . 57
6.5 Surjection et injection. f est surjective si pour tout y dans le co-domaine,
il y a (au moins) un x avec y = f ( x ). La fonction est injective si les images
des éléments distincts sont distincts. 58
6.6 Bijection. La fonction f est bijective si elle est injective et surjective : pour
tout y dans le co-domaine, il y a exactement un x dans le domaine avec y =
f ( x ). 58
6.7 Une fonction f et son inverse. f −1 ( a) = 4, f −1 (b) = 1, f −1 (c) = 2,
f −1 (d) = 3. 58

7.1 Fonctions de plancher (R → Z), plafond (R → Z) et partie fractionnaire


(R → { x ∈ R | 0 ≤ x < 1}) 69

8.1 Les nombres Fibonacci dans Liber abaci 71


8.2 Leonhard E ULER 71
8.3 Croissance des nombres harmoniques 74
8.4 Leonardo F IBONACCI 79

9.1 Une liste est soit une liste null (un seul nœud externe), soit un couple formé
par un nœud interne (la tête) et d’une autre liste (la queue). 83
178

9.2 Un arbre enraciné est soit un arbre null (nœud externe), ou il est composé
d’un nœud interne (la racine) et un ensemble d’arbres enracinés (les enfants). 83
9.3 Arbres binaires avec n ≤ 3 nœuds internes et m ≤ 4 nœuds externes 86
9.4 Les axiomes de base dans Formulario mathematico, 1908. Écrit en latino sine
flexione, une langue inventée par Peano. Axiome 0 déclare que N (dénoté
par N0 ici) est un ensemble. Le symbol ⊃ signifie implication matérielle →. 87

11.1 Ordre parmi les diviseurs positifs de 60, illustré par un diagramme de Hasse.
Dans un tel diagramme, le placement vertical des éléments donne le sens de
la relation entre des membres reliés, et on ne montre pas les relations impli-
quées par réflexivité et transitivité. 94
11.2 Portrait de Carl Friedrich G AUSS (1777–1855), l’un des plus grands mathé-
maticiens de tous les temps, à l’age de 63, par Christian Albrecht Jensen. Gauss
a inventé l’arithmétique modulaire par congruences, et a été le premier à dé-
montrer proprement le théorème fondamental de l’arithmétique sur l’uni-
cité de la décomposition en facteurs premiers. 102

12.1 Alan T URING (1912–1954), inventeur des fondations scientifiques de l’in-


formatique. [Autour de 1930.] 105
12.2 Machine RAM : l’architecture von Neumann. L’aspect innovateur était de
stocker les données et le code dans le même mémoire vive. L’unité de contrôle
exécute les instructions, en maintenant l’état du programme avec l’adresse de
l’instruction courante. L’unité arithmétique performe le calcul avec les va-
leurs en mémoire et la variable spéciale accumulateur. 105
12.3 Pseudocode d’un algorithme avec mots-clés français. 106
12.4 Pseudocode et implémentations Java pour un algorithme simple qui trouve
le maximum dans un tableau. Nos idiosyncrasies de notation : mots-clés en
gras (if..then, for..do, return), tabulation pour imbriquer les blocs d’instruc-
tion. 106
12.5 Jeu de Tours de Hanoî 111

13.1 Démarche du tri fusion. 118



13.2 Récurrence pour la somme des codages en binaire : S(n) = S bn/2c +

S dn/2e + (n − 1) à tout 0 < n. 119
13.3 Somme des longueurs de codage en binaire. 119
13.4 La fonction A( x ) = 2x − x dans l’intervalle 0 ≤ x ≤ 1. 119
13.5 Algorithme d’addition binaire 123
13.6 Algorithme de multiplication en binaire 123
13.7 Implémentation itérative de l’algorithme d’Euclide 124

14.1 Compétences de dénombrement à l’école maternelle 129


14.2 Combien de plaques d’immatriculation de forme CCCLLL ? 130
14.3 Triangle de Pascal 138
14.4 Deux pigeonniers sur une ferme en Hongrie 140
14.5 Théorème de Dirichlet : approximation rationnelle à π. 141
179

14.6 Principe du pigeonnier dans la preuve du théorème d’Erdős-Szekeres 141

15.1 Graphe orienté G = (V, E) avec nœuds V = {1, 2, 3, 4} 143


15.2 Graphe non-orienté G = (V, E) avec sommets V = {1, 2, 3, 4, 5, 6} 143
15.3 G 0 est le sous-graphe de G 145
15.4 Graphe biparti 148
15.5 Couplage et couverture 148
15.6 Partition des sommets dans la preuve du Théorème de Kőnig 149

16.1 Morphisme du snark fleur J5 au cycle C5 153


16.2 (Homo)morphisme et isomorphisme 153
16.3 Graphes isomorphes à Q4 (hypercube ou tessellation) 154
16.4 Un graphe non-orienté et sa matrice d’adjacence 154
16.5 Une relation R ⊆ {1, 2, 3, 4} × { a, b, c, d}, représentée comme ensemble
de couples, ou matrice relationnelle, ou graphe orienté. 154
16.6 Il y a un pont et trois points d’articulation dans ce graphe comportant trois
composantes biconnexes. 155
16.7 Coupures et chemins indépendants 156
16.8 Dénombrement de chemins à partir d’une source fixe 158

17.1 Arbres avec n = 1, 2, . . . , 6 sommets 159


17.2 Le graphe chemin P5 contient 6 sommets. 159
17.3 Preuve de Théorème 17.1 160
17.4 Arbre enraciné 162
17.5 Hauteur et niveau. 163
17.6 Un arbre binaire complet de hauteur 6 164
17.7 Pseudocode des parcours préfixe et postfixe 165
17.8 Calcul de profondeurs en parcours préfixe ; calcul de hauteur en parcours post-
fixe 165
17.9 Parcours des nœuds de l’arbre binaire 165
17.10Arbres syntaxiques pour formules logiques 166
17.11Arbre syntaxique pour une expression arithmétique 167
17.12Valeur logique d’une formule est déterminée en ascendant dans l’arbre 167
17.13Liaison de variables dans logique des prédicats 168
17.14Règle de substitution dans logique des prédicats 168

42.1 Ouroboros, ou le serpent qui se mord la queue, est un ancien symbol mystique
d’éternité, ou l’infini par induction. [Illustration dans un manuscrit enluminé
par le copiste Théodore Pélécanos de Crète, 1478] 171
42.2 Fusion de deux énumérations. 172
42.3 Couplage de Cantor. L’énumération des couples ( x, y) par antidiagonales dé-
finit une bijection, ou couplage, entre N2 et N. 172
Liste des tableaux
1.1 Constantes logiques et variantes de notation 11
1.2 Table de vérité pour les opérateurs logiques de base. 11
1.3 Implication logique. Le conditionnel p → q est vrai quand p est faux ou q
est vrai. 12
1.4 Table de vérité pour OU exclusif et des formules équivalentes avec négation,
conjonction et disjonction. 12
1.5 Ordre et notation des opérations logiques de base. La dernière colonne montre
des variations communes de notation. 13
1.6 Équivalences logiques. 13
1.7 Équivalences logiques avec propositions conditionnelles 13
1.8 Théorie pour un modèle simple de météo 15
1.9 Terminologie pour formes normales 16
1.10 Table de vérité pour incrémenter un compteur sur trois bits abc + 1 =
de f . 16

2.1 Quelques domaines importants 17


2.2 Conditions de victoire ∀/∃ pour un prédicat à 2 arguments P( x, y) (dans
un domaine non-vide). 21

3.1 Table de vérité pour l’exemple de Jeanne et Jean, avec les deux rangées où
deux prémisses, p et ¬r, sont vraies. 23
3.2 Quelques lettres grècques. 24
3.3 Règles d’inférence dans calcul des propositions 25
3.4 Règles de base dans déduction naturelle. 27
3.5 Preuve de ¬ p ∨ q ` p → q et de p → q ` ¬ p ∨ q. 27
3.6 Règles d’introduction et d’élimination pour ↔. 28
3.7 Règles dérivées dans déduction naturelle. 28
3.8 Règles d’introduction et élimination de quantificateurs. Dans toute les for-
mules, t est un terme et y est une nouvelle variable ajoutée à Γ. 29
3.9 Preuve altérnative pour «il n’y a pas de plus grand nombre naturel» 30
3.10 Régles de proposition logique dérivées dans déduction naturelle. 31
3.11 Systèmes formels en informatique 32

4.1 Démonstration formelle de Théorème 4.1. 33


4.2 Méthodes de preuve 40

5.1 Ensembles importants 42


5.2 Table d’appartenance pour union et intersection et les opérations logiques
correspondantes. 44
5.3 Table d’appartenance pour différences d’ensembles. 44
5.4 Égalités de la théorie des opérations ensemblistes 45
182

6.1 Produit cartésien : quelques exemples simples 52


6.2 Définitions de couple. En général, c’est la définition de Kuratowski qu’on
travaille dans la théorie. Dans la définition de Haussdorff, 0 et 1 sont des
constantes spéciales qui sont différentes de tout autre élément dans l’univers. 52
6.3 Inverses et compléments. 53
6.4 Quelques relations fondamentales et leurs propriétés 54
6.5 Exemples d’opérateurs. 56
6.6 Exponentiation ensembliste avec l’ensemble vide. 56
6.7 Preuves de cardinalité par bijection. 60

7.1 Opérations élémentaires sur bits 63


7.2 Opérations sur les bits en Java. 63
7.3 Représentation binaire des nombres naturels. λ dénote la chaîne vide. 70

8.1 La série ∑i∞=0 (−1)i diverge. 73


8.2 Preuve de Théoreme 8.2 73
8.3 Les nombres harmoniques 74
8.4 Définitions des grands opérateurs binaires 75
8.5 Preuve de Théorème 8.1 76
8.6 Les nombres triangulaires tn = ∑nk=1 k. 77
8.7 Les nombres pairs positifs forment une progression arithmétique avec a0 =
2 et an = an−1 + 2. 78
8.8 Suite géométrique avec facteur q = 3. 78
8.9 Suite géométrique q = (−1/2) : la série converge vers 2/3. 78
8.10 Nombres Fibonacci. 79
8.11 Factorielles. 79

9.1 Preuve de a = −(− a) à partir des axiomes. 89


9.2 Propriétés d’addition, de multiplication et de l’ordre 89

10.1 Références — logique propositionnelle 91


10.2 Références — logique des prédicats 91
10.3 Références — inférence logique 91
10.4 Références — preuves 91
10.5 Références — ensembles 92
10.6 Références — relations et fonctions 92
10.7 Références — séquences 92
10.8 Références — récursion 92

11.1 Preuve de Théorème 11.7 96


11.2 Arithmétique modulo 6. Les cases encadrées déterminent les inverses addi-
tifs (−r ) et multiplicatifs (r −1 ). 97
11.3 Multiplication et exponentiation modulo 9. 97
11.4 Types entiers signés en Java. 98
11.5 Début de la suite de nombres premiers {πn }∞n=1 jusqu’à n = 25 99
183

11.6 Algorithme d’Euclide pour gcd(110, 42) 100


11.7 Algorithme d’Euclide pour gcd(2023, 1065) 100
11.8 Décomposition en facteurs premiers 102
11.9 Énumération des diviseurs positifs de 60 par décomposition en facteurs pre-
miers 103
11.10Plus grand commun diviseur et plus petit commun multiple par décompo-
sition en facteurs premiers 103

12.1 Algorithme pour maximum de n éléments. Noter que cette version on com-
mence les membres avec l’indice 1. 107
12.2 Algorithme pour minimum de n éléments. Noter que cette version on com-
mence les membres avec l’indice 1. 108
12.3 Tri par sélection. 109
12.4 Trace d’exécution du tri par sélection sur {1, 0, 6, 5} avec n = 4. L’élément
encadré est celui choisi par m. 109
12.5 Tri par insertion. 110
12.6 Trace d’exécution du tri par insertion sur {1, 0, 9, 7, 2} avec n = 5. L’élé-
ment encadré est x j+1 qui est inséré dans sa place par la boucle while sur j. 110
12.7 Définition et calcul de la factorielle 111
12.8 Nombres Fibonacci par programmation dynamique et deux variables auxi-
liaires. 113

13.1 L’échelle standard : ordres de croissance typiques dans l’analyse d’algorithmes.


115
13.2 Le temps de calcul Bn de recherche dichotomique dépend de la longueur de
n en binaire. 117
13.3 Calcul de la puissance. 118
13.4 Preuves avec définition de grand-O. 122
13.5 Règles d’arithmétique pour grand-Ω et grand-Θ. 122
13.6 Temps de calcul pour l’algorithme d’Euclide 124
13.7 La fonction d’indicatrice d’Euler, dénotée par ϕ 126

14.1 k-arrangements des éléments {1, 2, 3} avec répétitions. 131


14.2 k-permutations des éléments {1, 2, 3, 4} 132
14.3 k-combinaisons des éléments {1, 2, 3, 4} sans répétitions 134
14.4 k-combinaisons des éléments {1, 2, 3, 4} avec répétitions 135
14.5 Preuve de Théorème 14.9 136
14.6 Formule du binôme avec n ≤ 5. 138
14.7 Dénombrement d’anagrammes par coefficients multinomiaux 139

15.1 Familles de graphes. 144

17.1 Preuve de Lemme 17.5, esquissé 161


17.2 Trois propriétés fondamentales du graphe G = (V, E) s’il est un arbre. 161
17.3 Collision de terminologie de structures de données avec Rosen. 164
184

18.1 Références — entiers 169


18.2 Références — algorithmes 169
18.3 Références — analyse d’algorithmes 169
18.4 Références — dénombrement 170
18.5 Références — graphes 170
18.6 Références — arbres 170

42.1 Preuve de Théorème 42.3 173


42.2 Structures infinies isomorphes sur les entiers naturels n ∈ N. 173
Bibliographie
F. N. Cole. On the factoring of large numbers. Bulletin of the American Ma-
thematical Society, 10(3) :134–137, 1903. https://projecteuclid.org/download/
pdf_1/euclid.bams/1183417760.
Euclide. Éléments. Alexandrie, Égypte, 300AEC. http://digi.vatlib.it/view/
MSS_Vat.gr.190.pt.1.
Leonardo Pisano (Fibonacci). Liber abaci. Pisa, 1202. http://bibdig.
museogalileo.it/Teca/Viewer?an=1072400&pag=Carta:1r.
Carl Friedrich Gauss. Disquisitiones Arithmeticae. Gerh. Fleischer, jun., Leip-
zig, Saxe, 1804. http://resolver.sub.uni-goettingen.de/purl?PPN235993352.
Michael Huth and Mark Ryan. Logic in Computer Science : Modelling and
Reasoning about Systems. Cambridge University Press, 2nd edition, 2004.
Jean Leurechon. Selectæ Propositiones in Tota Sparsim Mathematica Pulcherrimæ.
Pont-á-Mousson, 1622. https://www.e-rara.ch/zut/content/zoom/3157025.
A. Seidenberg. A simple proof of a theorem of Erdős and Szekeres. Journal
of the London Mathematical Society, 34 :352, 1959. D O I : 10.1112/jlms/s1-
34.3.352.
Daniel Solow. How to Read and Do Proofs. John Wiley & Sons, 6th edition,
2014.

Vous aimerez peut-être aussi