22 - Booléens et logique

Exercice 1 : QCM – vérification des prérequis

Pour chaque question, une seule réponse est correcte.

1. Quelle est la valeur de True and False ?

  • A. True
  • B. False
  • C. None
  • D. Erreur
Correction

Réponse : B. L’opérateur and (ET) ne renvoie True que si les deux opérandes sont vrais. Ici, l’un est faux, donc le résultat est False.

  • A est faux : il faudrait que les deux soient True.
  • C est faux : and renvoie toujours un booléen quand les opérandes sont des booléens.
  • D est faux : l’expression est parfaitement valide.

2. Quelle est la table de vérité de l’opérateur OU ?

  • A. OU ne vaut True que si les deux entrées sont True
  • B. OU ne vaut True que si une seule des deux entrées est True
  • C. OU vaut True dès qu’au moins une des deux entrées est True
  • D. OU vaut True uniquement si les deux entrées sont différentes
Correction

Réponse : C. Le OU logique (inclusif) vaut True si au moins un des opérandes est vrai, y compris si les deux le sont.

  • A est faux : c’est la définition du ET, pas du OU.
  • B est faux : c’est la définition du OU exclusif (XOR), pas du OU inclusif.
  • D est faux : c’est aussi la définition du XOR.

3. Que vaut not(True or False) ?

  • A. True
  • B. False
  • C. not True
  • D. Erreur
Correction

Réponse : B. D’abord, True or False vaut True (OU : au moins un vrai). Puis not True vaut False.

  • A est faux : erreur d’application du NON (inversion du résultat).
  • C est faux : not True est évalué et donne False, pas une expression non évaluée.
  • D est faux : l’expression est valide.

4. En Python, le ET logique est noté :

  • A. &&
  • B. AND
  • C. and
  • D. &
Correction

Réponse : C. En Python, les opérateurs logiques s’écrivent en minuscules : and, or, not.

  • A est faux : && est la syntaxe du C, Java et JavaScript, pas de Python.
  • B est faux : Python est sensible à la casse ; AND n’est pas reconnu.
  • D est faux : & est l’opérateur ET bit à bit, pas l’opérateur logique.

Exercice 2 : exemple travaillé – dresser une table de vérité

Objectif : construire la table de vérité de l’expression $\overline{x} \text{ ou } y$ (en Python : not x or y).

Méthode : on crée une colonne pour chaque sous-expression, en évaluant de gauche à droite selon la priorité (NON avant ET avant OU).

Étape 1. Lister toutes les combinaisons possibles de $x$ et $y$ (avec deux variables, il y a $2^2 = 4$ lignes).

Étape 2. Calculer $\overline{x}$ (NON $x$) pour chaque ligne.

Étape 3. Calculer $\overline{x} \text{ ou } y$ en appliquant le OU entre la colonne $\overline{x}$ et la colonne $y$.

$x$$y$$\overline{x}$$\overline{x} \text{ ou } y$
0011
0111
1000
1101

Vérification avec Python :

for x in [False, True]:
    for y in [False, True]:
        print(f"x={int(x)}, y={int(y)}{int(not x or y)}")

Observation : cette expression est fausse uniquement quand $x = 1$ et $y = 0$. Elle correspond à l’implication logique ($x \Rightarrow y$).


Exercice 3 : tables de vérité guidées

3.1 Tables de base

Compléter les tables de vérité des opérateurs NON ET (NAND) et OU exclusif (XOR).

NAND : $\overline{x \text{ et } y}$

$x$$y$$x \text{ et } y$NAND
00
01
10
11

XOR : vrai si exactement un des deux est vrai

$x$$y$XOR
00
01
10
11
Correction

NAND :

$x$$y$$x \text{ et } y$NAND
0001
0101
1001
1110

Le NAND est l’inverse du ET : il vaut 0 uniquement quand les deux entrées valent 1.

XOR :

$x$$y$XOR
000
011
101
110

Le XOR vaut 1 quand les entrées sont différentes.

3.2 Expression composée

Construire la table de vérité de $(x \text{ et } \overline{y}) \text{ ou } (\overline{x} \text{ et } y)$ en suivant la méthode de l’exemple travaillé (une colonne par sous-expression).

$x$$y$$\overline{x}$$\overline{y}$$x \text{ et } \overline{y}$$\overline{x} \text{ et } y$Résultat
00
01
10
11

Comparer la dernière colonne avec la table du XOR (exercice 3.1). Que constate-t-on ?

Correction
$x$$y$$\overline{x}$$\overline{y}$$x \text{ et } \overline{y}$$\overline{x} \text{ et } y$Résultat
0011000
0110011
1001101
1100000

La dernière colonne est identique à celle du XOR. On a donc montré que :

$$\text{XOR}(x, y) = (x \text{ et } \overline{y}) \text{ ou } (\overline{x} \text{ et } y)$$

Interprétation : le XOR vaut 1 quand exactement l’une des deux entrées vaut 1. C’est bien le cas : soit $x = 1$ et $y = 0$, soit $x = 0$ et $y = 1$.


Exercice 4 : lois de De Morgan

Les lois de De Morgan sont deux identités fondamentales :

$$\overline{x \text{ ou } y} = \overline{x} \text{ et } \overline{y}$$ $$\overline{x \text{ et } y} = \overline{x} \text{ ou } \overline{y}$$

  1. Démontrer la seconde loi à l’aide d’une table de vérité.
  2. Vérifier les deux lois en Python pour toutes les combinaisons de x et y.
Correction

1. Table de vérité de $\overline{x \text{ et } y}$ et $\overline{x} \text{ ou } \overline{y}$ :

$x$$y$$x \text{ et } y$$\overline{x \text{ et } y}$$\overline{x}$$\overline{y}$$\overline{x} \text{ ou } \overline{y}$
0001111
0101101
1001011
1110000

Les colonnes 4 et 7 sont identiques : la loi est vérifiée.

2. Programme Python :

for x in [False, True]:
    for y in [False, True]:
        # Première loi
        assert not(x or y) == (not x and not y)
        # Seconde loi
        assert not(x and y) == (not x or not y)
print("Les deux lois de De Morgan sont vérifiées.")

Exercice 5 : logique et vie courante

5.1 Système d’alarme (sécurité)

Un système de sécurité déclenche l’alarme si la porte et la fenêtre sont ouvertes, ou si le détecteur de mouvement est activé. On note $P$ (porte ouverte), $F$ (fenêtre ouverte), $M$ (mouvement détecté) et $A$ (alarme).

  1. Écrire l’expression booléenne de $A$ en fonction de $P$, $F$ et $M$.
  2. Dresser la table de vérité (huit lignes).
  3. Dans quels cas l’alarme ne se déclenche-t-elle pas ?
Correction
  1. $A = (P \text{ et } F) \text{ ou } M$

  2. Table de vérité :

$P$$F$$M$$P \text{ et } F$$A$
00000
00101
01000
01101
10000
10101
11011
11111
  1. L’alarme ne se déclenche pas dans trois cas : quand il n’y a aucun mouvement et que la porte ou la fenêtre (ou les deux) sont fermées.

5.2 Conditions d’accès à un manège (loisirs)

Un manège autorise l’accès si l’enfant a au moins 10 ans ou mesure au moins 140 cm. De plus, un accompagnateur adulte est requis si l’enfant a moins de 12 ans. On note $G$ (âge ≥ 10), $T$ (taille ≥ 140), $J$ (âge < 12).

  1. Écrire l’expression booléenne de l’accès autorisé : $A = G \text{ ou } T$.
  2. Écrire l’expression de l’accompagnateur requis : $C = A \text{ et } J$.
  3. Un enfant de 11 ans mesurant 135 cm peut-il monter ? Un accompagnateur est-il nécessaire ?
Correction
  1. $A = G \text{ ou } T$.
  2. $C = A \text{ et } J$ (accompagnateur nécessaire si accès autorisé mais moins de 12 ans).
  3. L’enfant a 11 ans : $G = \text{Vrai}$ (11 ≥ 10). Il mesure 135 cm : $T = \text{Faux}$ (135 < 140). Accès : $A = \text{Vrai ou Faux} = \text{Vrai}$. Il a 11 ans < 12 : $J = \text{Vrai}$. Accompagnateur : $C = \text{Vrai et Vrai} = \text{Vrai}$. L’enfant peut monter, mais avec un accompagnateur.

5.3 Simplification de conditions en Python (programmation)

Les lois de la logique permettent de simplifier des conditions complexes dans un programme. Pour chacune des conditions suivantes, écrire une condition équivalente simplifiée, puis vérifier en Python que les deux formes donnent le même résultat pour toutes les combinaisons de valeurs.

  1. not(age >= 18 and solde >= 0)
  2. not(note < 10 or absent)
  3. not(not inscrit or not majeur)
Correction

1. Par De Morgan : not(A and B) = not A or not B.

# Version originale
not(age >= 18 and solde >= 0)
# Version simplifiée
age < 18 or solde < 0

2. Par De Morgan : not(A or B) = not A and not B.

# Version originale
not(note < 10 or absent)
# Version simplifiée
note >= 10 and not absent

3. Par double négation et De Morgan : not(not A or not B) = A and B.

# Version originale
not(not inscrit or not majeur)
# Version simplifiée
inscrit and majeur

Vérification automatique :

for inscrit in [False, True]:
    for majeur in [False, True]:
        v1 = not(not inscrit or not majeur)
        v2 = inscrit and majeur
        assert v1 == v2
print("Toutes les simplifications sont vérifiées.")

Conseil : en NSI, on préfère toujours la forme la plus simple et la plus lisible. Les lois de De Morgan et la double négation sont les outils les plus utiles pour simplifier les conditions.


Exercice 6 : multiplexeur et porte logique

6.1 Multiplexeur

On définit $\text{mux}(x,y,z) = (\overline{x} \text{ et } y) \text{ ou } (x \text{ et } z)$.

Compléter la table de vérité :

$x$$y$$z$$\overline{x}$$\overline{x} \text{ et } y$$x \text{ et } z$$\text{mux}(x,y,z)$
000
001
010
011
100
101
110
111

Que fait cette fonction ? (Quel rôle joue $x$ ?)

Correction
$x$$y$$z$$\overline{x}$$\overline{x} \text{ et } y$$x \text{ et } z$$\text{mux}(x,y,z)$
0001000
0011000
0101101
0111101
1000000
1010011
1100000
1110011

$x$ joue le rôle de sélecteur : quand $x = 0$, la sortie vaut $y$ ; quand $x = 1$, la sortie vaut $z$. C’est un multiplexeur à deux entrées de données et un bit de sélection.


Exercice 7 : synthèse – simplification et énigme logique

7.1 Simplification avec l’algèbre de Boole

Simplifier les expressions suivantes en utilisant les propriétés de l’algèbre de Boole (absorption, De Morgan, distributivité).

  1. $A = a + a \cdot b$
  2. $C = a + \overline{a} \cdot b$
Correction
  1. Absorption : $A = a + a \cdot b = a \cdot (1 + b) = a \cdot 1 = a$. Propriété utilisée : $x + x \cdot y = x$ (un terme « absorbe » le terme qui le contient).

  2. On utilise la distributivité de l’addition sur le produit : $C = a + \overline{a} \cdot b = (a + \overline{a}) \cdot (a + b) = 1 \cdot (a + b) = a + b$.

    Vérification par table de vérité : $a + \overline{a} \cdot b$ et $a + b$ ont la même table.

7.2 Énigme logique (raisonnement)

Sur la planète CSI vivent les Profs (qui disent toujours la vérité) et les Élèves (qui mentent toujours). Vous croisez deux personnes A et B. A affirme : « Au moins l’un de nous deux est un élève. »

Déterminer ce que sont A et B.

Correction

Raisonnement par cas :

Cas 1 : A est un élève (menteur). Alors l’affirmation « au moins l’un de nous est un élève » est fausse (puisque A ment). Cela signifierait qu’aucun des deux n’est un élève, donc A serait un prof. Contradiction : A ne peut pas être à la fois élève et prof.

Cas 2 : A est un prof (dit la vérité). L’affirmation est donc vraie : au moins l’un des deux est un élève. Comme A est un prof, c’est nécessairement B qui est l’élève.

Conclusion : A est un prof et B est un élève.

Exercice 8 : table de vérité du XNOR

La fonction XNOR (NON OU exclusif) est définie par $a \odot b = \overline{a \oplus b}$.

  1. Construire la table de vérité de $a \odot b$ (colonnes $a$, $b$, $a \oplus b$, $a \odot b$).
  2. À quelle condition a-t-on $a \odot b = 1$ ?
  3. Montrer que $a \odot b = a \cdot b + \overline{a} \cdot \overline{b}$.
Correction
  1. Table de vérité :
$a$$b$$a \oplus b$$a \odot b$
0001
0110
1010
1101
  1. $a \odot b = 1$ si et seulement si $a$ et $b$ ont la même valeur : le XNOR est un test d’égalité.
  2. On évalue $a \cdot b + \overline{a} \cdot \overline{b}$ sur les quatre lignes : $0 + 1 = 1$, $0 + 0 = 0$, $0 + 0 = 0$, $1 + 0 = 1$. On retrouve la table du XNOR : « les deux sont vrais ou les deux sont faux ».

Exercice 9 : le théorème du consensus

Le théorème du consensus affirme que $a \cdot b + \overline{a} \cdot c + b \cdot c = a \cdot b + \overline{a} \cdot c$.

  1. Vérifier cette égalité à l’aide d’une table de vérité à huit lignes (colonnes $a$, $b$, $c$, $a \cdot b$, $\overline{a} \cdot c$, $b \cdot c$, membre de gauche, membre de droite).
  2. Expliquer sans table pourquoi le terme $b \cdot c$ est redondant.
Correction
  1. Table de vérité :
$a$$b$$c$$a \cdot b$$\overline{a} \cdot c$$b \cdot c$gauchedroite
00000000
00101011
01000000
01101111
10000000
10100000
11010011
11110111

Les deux dernières colonnes sont identiques.

  1. Le terme $b \cdot c$ ne vaut 1 que si $b = 1$ et $c = 1$. Dans ce cas, soit $a = 1$ et alors $a \cdot b = 1$, soit $a = 0$ et alors $\overline{a} \cdot c = 1$ : l’un des deux autres termes est déjà vrai. Le terme $b \cdot c$ n’apporte donc rien et peut être supprimé.

Exercice 10 : profs et élèves

Sur la planète CSI vivent des Profs, qui disent toujours la vérité, et des Élèves, qui mentent toujours. Vous croisez deux habitants A et B. A affirme : « Au moins l’un de nous deux est un élève. »

  1. On note $a$ le booléen qui vaut 1 si A est un Prof et 0 si A est un Élève, et de même $b$ pour B. Écrire l’expression logique de l’affirmation de A.
  2. Si A est un Prof, son affirmation est vraie : qu’en déduire sur B ?
  3. Si A est un Élève, son affirmation est fausse : que se passe-t-il ?
  4. Conclure : que sont A et B ?
Correction
  1. « Au moins l’un de nous deux est un élève » s’écrit $\overline{a} + \overline{b}$ (être élève, c’est $\overline{a} = 1$ ; « au moins l’un » est un OU).
  2. Si $a = 1$, l’affirmation vaut $0 + \overline{b} = \overline{b}$ ; elle est vraie si et seulement si $b = 0$. Donc si A est un Prof, B est un Élève.
  3. Si $a = 0$, l’affirmation vaut $1 + \overline{b} = 1$ : elle est toujours vraie. Or un Élève ment : son affirmation devrait être fausse. Contradiction : A ne peut pas être un Élève.
  4. A est un Prof et B est un Élève.

Exercice 11 : conditions d’accès

Un système de sécurité autorise l’accès si l’utilisateur a un badge valide et entre un code correct, ou s’il est administrateur (quels que soient le badge et le code). On note $B$ « badge valide », $C$ « code correct » et $A$ « administrateur ».

  1. Écrire l’expression logique de la condition d’accès.
  2. Construire sa table de vérité (huit lignes).
  3. Peut-on simplifier l’expression ? Que signifie la propriété d’absorption $A + A \cdot X = A$ pour ce système ?
Correction
  1. $\text{Accès} = B \cdot C + A$.
  2. Table de vérité :
$A$$B$$C$Accès
0000
0010
0100
0111
1001
1011
1101
1111
  1. L’expression est déjà minimale. L’absorption dit qu’ajouter une condition « administrateur avec badge » ($A \cdot B$) ne changerait rien : dès que $A = 1$, l’accès est accordé, le reste est absorbé.

Exercice 12 : comparateur 1 bit

On souhaite concevoir un circuit qui compare deux bits $a$ et $b$ et produit trois sorties : $S$ vaut 1 si $a > b$, $E$ vaut 1 si $a = b$, $I$ vaut 1 si $a < b$.

  1. Compléter la table de vérité (colonnes $a$, $b$, $S$, $E$, $I$).
  2. Donner l’expression booléenne de chacune des sorties.
  3. Quelle relation lie $S$, $E$ et $I$ ?
Correction
  1. Table de vérité :
$a$$b$$S$$E$$I$
00010
01001
10100
11010
  1. $S = a \cdot \overline{b}$ ; $E = a \cdot b + \overline{a} \cdot \overline{b} = \overline{a \oplus b}$ (XNOR) ; $I = \overline{a} \cdot b$.
  2. À tout instant, exactement une des trois sorties vaut 1 : $S + E + I = 1$ et $S \cdot E = E \cdot I = S \cdot I = 0$. On a aussi $S + I = a \oplus b$.