La règle, en une phrase
Pour inverser une condition faite de deux morceaux, on inverse chaque morceau et on échange and et or. Les deux lois disent exactement ça :
Augustus De Morgan, mathématicien britannique du 19e siècle, a formalisé ces deux règles. Les logiciens du Moyen Âge les connaissaient déjà, mais son nom est resté.
Exemple : quand le cours a-t-il lieu ?
On a vu en classe que le cours est annulé s'il y a une tempête or si la prof est malade. Question inverse : quand le cours a-t-il lieu ? Pas quand il est annulé, donc :
La seconde loi permet de dire la même chose sans parenthèses, en lisant chaque morceau à l'envers : pas de tempête and la prof pas malade. Il faut les deux pour que le cours ait lieu.
Remarque le or devenu and : c'est le cœur de la loi. Si tu gardes le or, tu obtiens « pas de tempête or la prof pas malade », et le cours aurait lieu en pleine tempête tant que la prof est en santé. Faux.
Exemple : qui ne peut pas voter ?
Le droit de vote demande deux conditions à la fois : avoir 18 ans ou plus and habiter au Québec. Qui ne peut pas voter ? Ceux à qui il manque au moins une des deux : les mineurs, or ceux qui n'habitent pas au Québec. C'est la première loi.
Ici le and est devenu or : un seul défaut suffit pour être exclu du vote.
Le piège classique, montré par la table
L'erreur la plus fréquente : nier les morceaux sans échanger l'opérateur. On écrit not a and not b en croyant traduire not (a and b). La table de vérité montre que ça se trompe sur deux lignes sur quatre :
| a | b | not (a and b) | not a or not b (De Morgan) | not a and not b (le piège) |
|---|---|---|---|---|
| False | False | True | True | True |
| False | True | True | True | False |
| True | False | True | True | False |
| True | True | False | False | False |
Les deux cases rouges sont les cas où un seul des deux morceaux est vrai : le piège dit « non » alors que la vraie négation dit « oui ».
Démo : deux interrupteurs, quatre expressions
Clique sur les interrupteurs pour changer tempete et profMalade. À chaque état, les deux côtés de chaque loi affichent la même valeur, et la ligne active de la table s'allume.
Interrupteurs
| tempete | profMalade | not (t or p) | not t and not p | not (t and p) | not t or not p |
|---|
À quoi ça sert, concrètement
1. Rendre un if lisible. Une condition niée en bloc se lit mal ; De Morgan la déplie. Attention en passant : le contraire de < est >=, pas >.
2. Écrire la condition d'une boucle. « Continuer tant que ce n'est pas fini et qu'il n'y a pas d'erreur » se dit de deux façons équivalentes :
while not (fini or erreur): ... while not fini and not erreur: # De Morgan : même boucle ...3. Vérifier son else. Le else d'un if a and b s'exécute quand not (a and b), donc quand not a or not b : dès qu'un seul morceau manque. Se le dire à voix haute évite bien des surprises.
Pour voir les tables de and, or et not une à une : les tables de vérité. Complément jumeau de la semaine : comparer des nombres à virgule.