Chapitre 315 minDébutant
Calcul des prédicats : quantificateurs ∀ et ∃
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- distinguer variable, constante et prédicat ;
- lire et écrire un énoncé avec ∀ et ∃, et trouver sa valeur de vérité ;
- nier un énoncé quantifié, même avec deux quantificateurs ;
- expliquer pourquoi l'ordre de ∀ et ∃ change le sens.
5 exercices corrigés1 schéma
Un prédicat est une phrase qui contient une ou plusieurs variables, comme « x est pair » : elle n'est ni vraie ni fausse tant que x n'est pas fixé. Les quantificateurs ∀ (« pour tout ») et ∃ (« il existe ») transforment un prédicat en proposition, en disant pour combien d'éléments il doit être vrai. Ce chapitre montre comment lire, écrire et nier un énoncé quantifié, et pourquoi l'ordre de deux quantificateurs change le sens.
Variable, constante et prédicat
Dans un énoncé mathématique, on distingue :
- une constante : un objet précis, qui ne change pas (le nombre 5, le serveur
srv-web01, le port 443) ; - une variable : une lettre qui représente un objet quelconque d'un ensemble donné, appelé domaine (x dans ℕ, l'ensemble des entiers naturels ; u dans l'ensemble des utilisateurs d'un annuaire).
Un prédicat est un énoncé qui dépend d'une ou plusieurs variables et qui devient une proposition quand on remplace chaque variable par une constante. On le note avec une lettre minuscule suivie de ses variables entre parenthèses : p(x), q(x, y).
| Prédicat | Domaine | Exemple de valeur |
|---|---|---|
| p(x) : « x est pair » | ℕ | p(4) est vraie, p(7) est fausse |
| a(u) : « le compte u est actif » | Les comptes de l'annuaire | a(jdupont) est vraie si ce compte est actif |
| q(x, y) : « x < y » | ℕ × ℕ | q(2, 5) est vraie, q(5, 2) est fausse |
| m(u, g) : « l'utilisateur u est membre du groupe g » | Utilisateurs × groupes | m(jdupont, compta) |
| r(x, y, z) : « x + y = z » | ℤ × ℤ × ℤ | r(2, 3, 5) est vraie |
Au BTS, les prédicats portent sur une, deux ou trois variables, comme le précise le programme.
Il y a deux façons de transformer un prédicat en proposition : remplacer chaque variable par une constante (p(4)), ou quantifier la variable, c'est-à-dire dire pour combien d'éléments du domaine le prédicat est vrai.
Le quantificateur universel ∀
Le symbole ∀ (un A renversé, pour All) se lit « pour tout » ou « quel que soit ».
∀x ∈ E, p(x) se lit « pour tout x de E, p(x) » et signifie : p(x) est vraie pour chaque élément x de E, sans exception.
- ∀x ∈ ℕ, x² ≥ 0 : vraie, le carré d'un entier n'est jamais négatif.
- ∀x ∈ ℕ, x est pair : fausse, puisque 3 est impair.
Pour montrer qu'un énoncé « pour tout » est faux, un seul contre-exemple suffit : un élément du domaine pour lequel le prédicat est faux. Pour montrer qu'il est vrai, il faut au contraire un raisonnement valable pour tous les éléments (ou, sur un domaine fini, vérifier chaque élément).
Le quantificateur existentiel ∃
Le symbole ∃ (un E retourné, pour Exists) se lit « il existe ».
∃x ∈ E, p(x) se lit « il existe x dans E tel que p(x) » et signifie : p(x) est vraie pour au moins un élément de E. Il peut y en avoir un seul, plusieurs, ou même tous.
- ∃x ∈ ℕ, x² = 49 : vraie, x = 7 convient.
- ∃x ∈ ℕ, x + 3 = 1 : fausse, aucun entier naturel ne convient.
Pour montrer qu'un énoncé « il existe » est vrai, il suffit d'exhiber un élément qui convient (un exemple). Pour montrer qu'il est faux, il faut prouver qu'aucun élément ne convient.
On rencontre aussi ∃!, « il existe un unique » : ∃!x ∈ ℕ, x + 3 = 5 est vraie (seul x = 2 convient).
Sur un ensemble fini : ∀ est un grand ET, ∃ un grand OU
Quand le domaine est fini, les quantificateurs se ramènent aux connecteurs du chapitre 1. Prenons E = {srv1, srv2, srv3}, les trois serveurs d'une PME, et s(x) : « le serveur x est sauvegardé cette nuit ».
- ∀x ∈ E, s(x) ≡ s(srv1) ∧ s(srv2) ∧ s(srv3) : tous les serveurs sont sauvegardés.
- ∃x ∈ E, s(x) ≡ s(srv1) ∨ s(srv2) ∨ s(srv3) : au moins un serveur est sauvegardé.
| Serveur | Sauvegardé cette nuit ? |
|---|---|
| srv1 | Oui |
| srv2 | Non |
| srv3 | Oui |
Avec ce journal, ∀x ∈ E, s(x) est fausse (srv2 est un contre-exemple) et ∃x ∈ E, s(x) est vraie (srv1 convient).
Cette correspondance est exactement ce que font les fonctions all() et any() de Python :
sauvegarde = {"srv1": True, "srv2": False, "srv3": True}
tous = all(sauvegarde.values()) # ∀x, s(x) : False
un_au_moins = any(sauvegarde.values()) # ∃x, s(x) : True
print(tous, un_au_moins) # False True
Nier un énoncé quantifié
Les règles se déduisent des lois de De Morgan, puisque ∀ est un grand « et » et ∃ un grand « ou ».
Exemples :
| Énoncé | Négation |
|---|---|
| Tous les postes sont à jour : ∀x ∈ P, j(x) | Au moins un poste n'est pas à jour : ∃x ∈ P, ¬j(x) |
| Il existe un compte sans mot de passe : ∃u ∈ U, ¬m(u) | Tous les comptes ont un mot de passe : ∀u ∈ U, m(u) |
| ∀x ∈ ℕ, x² ≥ x | ∃x ∈ ℕ, x² < x |
| ∃x ∈ ℝ, x² = −1 | ∀x ∈ ℝ, x² ≠ −1 |
Quand le prédicat est lui-même une formule, on lui applique les règles du chapitre 2. La forme la plus fréquente est « tous les éléments qui vérifient p vérifient aussi q » :
- énoncé : ∀x ∈ E, p(x) ⇒ q(x) ;
- négation : ∃x ∈ E, p(x) ∧ ¬q(x).
Exemple : « tout ordinateur portable de l'entreprise a un disque chiffré » se nie en « il existe un ordinateur portable de l'entreprise dont le disque n'est pas chiffré ». La négation n'est pas « aucun portable n'a de disque chiffré », ni « si un ordinateur n'est pas portable, son disque est chiffré ».
Prédicats à deux variables et ordre des quantificateurs
Avec un prédicat à deux variables, il faut deux quantificateurs pour obtenir une proposition, et leur ordre compte quand ils sont de types différents.
Prenons U l'ensemble des utilisateurs d'une entreprise, M l'ensemble des mots de passe possibles, et c(u, m) : « l'utilisateur u a pour mot de passe m ».
- ∀u ∈ U, ∃m ∈ M, c(u, m) : « chaque utilisateur a un mot de passe ». Le mot de passe peut être différent d'un utilisateur à l'autre : m dépend de u.
- ∃m ∈ M, ∀u ∈ U, c(u, m) : « il existe un mot de passe que tous les utilisateurs ont ». Un seul et même mot de passe pour tout le monde : une faille de sécurité.
Un exemple mathématique classique :
- ∀n ∈ ℕ, ∃m ∈ ℕ, m > n : « pour tout entier, il existe un entier plus grand ». Vraie : m = n + 1 convient.
- ∃m ∈ ℕ, ∀n ∈ ℕ, m > n : « il existe un entier plus grand que tous les entiers ». Fausse : m devrait être plus grand que lui-même.
Avec trois variables, la lecture est la même. Soit P l'ensemble des postes, A l'ensemble des adresses IP et V l'ensemble des VLAN, et r(p, a, v) : « le poste p a l'adresse a dans le VLAN v ». L'énoncé ∀p ∈ P, ∃a ∈ A, ∃v ∈ V, r(p, a, v) dit : « chaque poste a une adresse dans un VLAN ».
Nier un énoncé à plusieurs quantificateurs
On applique la règle de négation quantificateur par quantificateur, de gauche à droite : chaque ∀ devient ∃, chaque ∃ devient ∀, et le prédicat final est nié.
- ¬(∀x, ∃y, p(x, y)) ≡ ∃x, ¬(∃y, p(x, y)) ≡ ∃x, ∀y, ¬p(x, y)
- ¬(∃x, ∀y, p(x, y)) ≡ ∀x, ∃y, ¬p(x, y)
Exemple : « chaque utilisateur appartient à au moins un groupe » s'écrit ∀u ∈ U, ∃g ∈ G, m(u, g). Sa négation : ∃u ∈ U, ∀g ∈ G, ¬m(u, g), « il existe un utilisateur qui n'appartient à aucun groupe ».
Quantificateurs et requêtes
Les quantificateurs sont partout dans les requêtes et les programmes.
- ∃ en SQL :
EXISTS(sous-requête) teste s'il existe au moins une ligne. « Les employés qui ont ouvert au moins un ticket » est un ∃. - ∀ en SQL : il n'y a pas de mot-clé « pour tout ». On utilise la négation : « tous les tickets de l'employé sont clos » ≡ « il n'existe aucun ticket de l'employé qui ne soit pas clos », d'où
NOT EXISTS (… WHERE statut <> 'clos'). C'est exactement la règle ¬∃x, ¬p(x) ≡ ∀x, p(x). Le cours SQL détaille cette technique dans le chapitre sous-requêtes, IN et EXISTS. - En Python :
all(...)pour ∀ etany(...)pour ∃, ou une boucle qui s'arrête au premier contre-exemple (pour ∀) ou au premier exemple (pour ∃).
def tous_pairs(liste):
"""∀x ∈ liste, x est pair : faux dès le premier contre-exemple."""
for x in liste:
if x % 2 != 0:
return False # contre-exemple trouvé
return True
print(tous_pairs([2, 8, 14]), tous_pairs([2, 7, 14])) # True False
Exercices
Exercice 1 sur 5 Vrai ou faux ? Réussi À revoir
Dis si chaque proposition est vraie ou fausse, et justifie par un exemple ou un contre-exemple.
- ∀x ∈ ℕ, x + 1 > x
- ∃x ∈ ℕ, x² = 10
- ∀x ∈ ℕ, x est pair ou x est impair
- (∀x ∈ ℕ, x est pair) ou (∀x ∈ ℕ, x est impair)
- ∃x ∈ ℤ, x² − 5x + 6 = 0
- ∀x ∈ ℝ, x² > 0
Voir la réponseMasquer la réponse de l'exercice 1
- Vraie : ajouter 1 augmente toujours un entier.
- Fausse : 3² = 9 et 4² = 16, aucun entier n'a pour carré 10.
- Vraie : chaque entier est pair ou impair.
- Fausse : « tous les entiers sont pairs » est faux (contre-exemple 1) et « tous les entiers sont impairs » est faux (contre-exemple 2). Compare avec la 3 : le ∀ ne se distribue pas sur le « ou ».
- Vraie : x = 2 convient (4 − 10 + 6 = 0), et x = 3 aussi.
- Fausse : contre-exemple x = 0, car 0² = 0 n'est pas strictement positif.
Tu avais trouvé ?
Exercice 2 sur 5 Écrire la négation Réussi À revoir
Écris la négation de chaque énoncé, en symboles puis en français.
- ∀x ∈ ℕ, x ≤ 100
- ∃u ∈ U, a(u), où a(u) : « le compte u est administrateur »
- ∀p ∈ P, w(p) ⇒ j(p), où P est l'ensemble des postes, w(p) : « p est sous Windows », j(p) : « p est à jour »
- ∀x ∈ ℝ, ∃y ∈ ℝ, y > x
Voir la réponseMasquer la réponse de l'exercice 2
- ∃x ∈ ℕ, x > 100 : « il existe un entier strictement supérieur à 100 ». Attention, la négation de ≤ est >, pas ≥.
- ∀u ∈ U, ¬a(u) : « aucun compte n'est administrateur ».
- ∃p ∈ P, w(p) ∧ ¬j(p) : « il existe un poste sous Windows qui n'est pas à jour ».
- ∃x ∈ ℝ, ∀y ∈ ℝ, y ≤ x : « il existe un réel supérieur ou égal à tous les réels ». Cette négation est fausse, donc l'énoncé de départ est vrai.
Tu avais trouvé ?
Exercice 3 sur 5 L'ordre des quantificateurs Réussi À revoir
On note S l'ensemble des salariés d'une entreprise, B l'ensemble de ses badges et b(s, x) : « le salarié s possède le badge x ».
- Traduis en français : ∀s ∈ S, ∃x ∈ B, b(s, x).
- Traduis en français : ∃x ∈ B, ∀s ∈ S, b(s, x).
- Laquelle des deux affirmations correspond à une bonne pratique de sécurité ? Laquelle pose problème ?
Voir la réponseMasquer la réponse de l'exercice 3
- « Chaque salarié possède au moins un badge. » Le badge peut différer d'un salarié à l'autre.
- « Il existe un badge que tous les salariés possèdent. » Un même badge partagé par tout le monde.
- La première est la situation normale : chacun a son badge. La seconde pose problème : un badge partagé ne permet pas de savoir qui est entré (pas de traçabilité) et sa perte ou son vol compromet tout le monde. La seconde implique d'ailleurs la première (si un badge est partagé par tous, chacun en possède au moins un), mais l'inverse est faux.
Tu avais trouvé ?
Exercice 4 sur 5 Sur un ensemble fini Réussi À revoir
E = {1, 2, 3, 4, 5, 6}. Pour chaque énoncé, donne sa valeur de vérité.
- ∀x ∈ E, x < 7
- ∃x ∈ E, x est un multiple de 5
- ∀x ∈ E, ∃y ∈ E, y = x + 1
- ∃y ∈ E, ∀x ∈ E, x ≤ y
- ∀x ∈ E, ∀y ∈ E, x + y ≤ 12
Voir la réponseMasquer la réponse de l'exercice 4
- Vraie : tous les éléments de E sont inférieurs à 7.
- Vraie : 5 convient.
- Fausse : pour x = 6, il faudrait y = 7, qui n'est pas dans E.
- Vraie : y = 6 convient, c'est le plus grand élément de E.
- Vraie : la plus grande somme possible est 6 + 6 = 12.
Tu avais trouvé ?
Exercice 5 sur 5 Avec Python Réussi À revoir
On dispose de la liste des tailles de mots de passe des comptes d'un annuaire : tailles = [14, 12, 9, 16, 12]. La politique impose au moins 12 caractères.
- Écris en symboles l'énoncé « tous les mots de passe respectent la politique » et sa négation.
- Écris l'instruction Python qui calcule chacun des deux énoncés, et donne le résultat.
Voir la réponseMasquer la réponse de l'exercice 5
- En notant T l'ensemble des comptes et t(u) la taille du mot de passe de u : ∀u ∈ T, t(u) ≥ 12. Négation : ∃u ∈ T, t(u) < 12, « au moins un mot de passe fait moins de 12 caractères ».
- Avec
allpour le « pour tout » etanypour le « il existe » :
tailles = [14, 12, 9, 16, 12]
print(all(t >= 12 for t in tailles)) # False : 9 est un contre-exemple
print(any(t < 12 for t in tailles)) # True : la négation est vraie
Les deux résultats sont toujours contraires : any(not p) est la négation de all(p).
Tu avais trouvé ?