Aller au contenu

Le type booléen⚓︎

En 1847, George Boole invente une algèbre pour formaliser la logique. Il définit trois opérateurs de base (et, ou, non), qui vont permettre de traiter tous les problèmes de logique.

Crédit : Public domain, via Wikimedia Commons.

I. Exemples de propositions et opérateurs de bases⚓︎

Exemple

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée

Une proposition peut être vraie ou fausse

Vrai : True ou 1
Faux : False ou 0

Donner la valeur de vérité des propositions a et b

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée

Solution

a est une proposition fausse (False ou 0)
b est une proposition vraie (True ou 1)

Opérateur ou

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée
a ou b est une proposition ...

Notations

On peut noter a or b, ou a \(\vee\) b (correspond au symbole \(\cup\))

Solution

a ou b est une proposition vraie (True ou 1)

Opérateur et

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée
a et b est une proposition ...

Notations

On peut noter a and b, ou a \(\wedge\) b (correspond au symbole \(\cap\))

Solution

a et b est une proposition fausse (False ou 0)

Opérateur non

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée
non a : ...
non b : ...

Notations

On peut noter not a ou \(\neg\)a

Solution

non a : Il existe au moins un jour sans frites au self
non b : Il est permis de fumer au lycée
non a est une proposition vraie
non b est une proposition fausse

Le chat

Crédit : Philippe Geluck

II. Tables de vérités⚓︎

On jette deux dés

Des propositions peuvent être vraies ou fausses.
Par exemple : on jette deux dés.
x : le résultat du premier dé est pair
y : le résultat du deuxième dé est pair

Dessiner sur votre cahier l'arbre de toutes les possibilités.

Solution

arbre

Présentation des tables de vérités

La présentation usuelle reprend l'ordre trouvé avec l'arbre ci-dessus :

  • Pour une seule proposition x:
x ...
0 ...
1 ...
  • Pour deux propositions x et y
x y ...
0 0 ...
0 1 ...
1 0 ...
1 1 ...
Table de vérité de l'opérateur non

Compléter la table de vérité

\(x\) \(\overline{x}\)
0 ...
1 ...
Solution
\(x\) \(\overline{x}\)
0 1
1 0
Table de vérité de l'opérateur ou

Compléter la table de vérité

x y x \(\vee\) y
0 0 ...
0 1 ...
1 0 ...
1 1 ...
Solution
x y x \(\vee\) y
0 0 0
0 1 1
1 0 1
1 1 1

parallele

On peut faire l'analogie avec des interrupteurs en parallèle.

Table de vérité de l'opérateur et

Compléter la table de vérité

x y x \(\wedge\) y
0 0 ...
0 1 ...
1 0 ...
1 1 ...
Solution
x y x \(\wedge\) y
0 0 0
0 1 0
1 0 0
1 1 1

serie

On peut faire l'analogie avec des interrupteurs en série.

Remarque

On peut écrire toutes les tables de vérités en remplaçant les 0 par des F (pour Faux), et les 1 par des V (pour Vrai)

III. Exemples d’expressions booléennes :⚓︎

1. non (a et b)⚓︎

non (a et b)

Démontrer en utilisant des tables de vérité que les expressions booléennes suivantes sont équivalentes :

  • not (a and b)
  • not a or not b

Pour cela recopier et remplir les tables de vérités suivantes :

a b a et b non (a et b)
... ... ... ...
... ... ... ...
... ... ... ...
... ... ... ...
a b non a non b (non a) or (nonb)
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
Solution
a b a et b non (a et b)
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0
a b non a non b (non a) or (nonb)
0 0 1 1 1
0 1 1 0 1
1 0 0 1 1
1 1 0 0 0

Les dernières colonnes de ces deux tableaux sont identiques, ce qui prouve l'équivalence.

2. non (a ou b)⚓︎

non (a ou b)

Démontrer en utilisant des tables de vérité que les expressions booléennes suivantes sont équivalentes :

  • not (a or b)
  • not a and not b

Pour cela recopier et remplir les tables de vérités suivantes :

a b a ou b non (a ou b)
... ... ... ...
... ... ... ...
... ... ... ...
... ... ... ...
a b non a non b (non a) and (nonb)
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
Solution
a b a ou b non (a ou b)
0 0 0 1
0 1 1 0
1 0 1 0
1 1 1 0
a b non a non b (non a) et (nonb)
0 0 1 1 1
0 1 1 0 0
1 0 0 1 0
1 1 0 0 0

Les dernières colonnes de ces deux tableaux sont identiques, ce qui prouve l'équivalence.

Remarque : ces deux propriétés sont connues sous le nom de lois de De Morgan.

IV. Un opérateur supplémentaire : xor⚓︎

Fromage ou dessert ?

Lorsqu’au restaurant on vous demande « fromage ou dessert ? », quels sont les possibilités auxquelles vous avez le droit ?

Solution

On peut choisir soit le fromage, soit le dessert, mais pas les deux.

Il s’agit du « ou » exclusif, noté xor.

Exemple du jardinier

Un jardinier doit élaguer tous les arbres qui mesurent plus de 10 mètres ou qui ont plus de 10 ans. Peut-il tailler des arbres qui mesurent plus de 10 mètres et ont plus de 10 ans ?

Solution

Il peut évidemment tailler des arbres qui mesurent plus de 10 mètres et ont plus de 10 ans.

Il s’agit du « ou » inclusif, noté or.

Table de vérité de l'opérateur xor

Recopier et compléter la table de vérité

x y x xor y
... ... ...
... ... ...
... ... ...
... ... ...
Solution
x y x xor y
0 0 0
0 1 1
1 0 1
1 1 0

V. Variables booléennes et Python⚓︎

1. Les variables booléennes⚓︎

Tester en console

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

🐍 Console Python
>>> 3 == 5
>>> 3 == "3"
>>> 3 < 5
>>> 3 != 5

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Des variables booléennes

Souvent les variables booléennes sont le résultat de tests :

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

🐍 Console Python
>>> a = -3**2 == -9
>>> type(a)
>>> a
>>> a = (-3)**2 == -9
>>> a

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

2. Python et les opérateurs⚓︎

Les booléens en Python

En Python, les booléens peuvent prendre les valeurs True et False.

Les opérations booléennes de bases sont and, or et not.

Tester en console

Dans la console saisir :

🐍 Console Python
>>> True and False
>>> True or False
>>> not True

Vous pouvez ajouter vos propres essais 😊.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Les priorités

Comme pour les opérations mathématiques, il y a des priorités sur les opérations booléennes.

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

🐍 Console Python
>>> True or True and False
>>> (True or True) and False
>>> True or (True and False)

Vous pouvez ajouter vos propres essais 😊.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Les priorités

Le and est prioritaire sur le or. De même, not est prioritaire sur les autres opérations.

Tester les priorités

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

🐍 Console Python
>>> not False and False
>>> not (False and False)
>>> (not False) and False

Vous pouvez ajouter vos propres essais 😊.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Attention

Pour éviter toute confusion, il est vivement recommandé d’utiliser des parenthèses.

3. Exemples⚓︎

Question 1

Expliquer pourquoi l’expression 3 == 3 or x == y est vraie pour toute valeur de x et de y.

Solution

3 == 3 est évaluée à True. True or True et True or False sont évaluées à True.

Donc quelle que soit la valeur de vérité de x == y l'expression est évaluée à True

Question 2

Expliquer pourquoi l’expression 1 == 2 and x == y est fausse pour toute valeur de x et de y.

Solution

1 == 2 est évaluée à False. False and True et False and False sont évaluées à False.

Donc quelle que soit la valeur de vérité de x == y l'expression est évaluée à False.

VI. Caractère séquentiel de certains opérateurs booléens.⚓︎

Python paresseux

Lorsque Python évalue une expression booléenne, il le fait de façon paresseuse. C’est à dire que si la partie gauche d’un or est vraie, il n’évalue pas la partie droite. De même si la partie gauche d’un and est fausse, la partie droite n’est pas évaluée.

Tester les évaluations paresseuses

Dans la console saisir :

🐍 Console Python
>>> x = 0
>>> x == 0 or 0 < 1/x < 1
>>> x !=0 and 0 < 1/x < 1

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Diviser par 0 ?

Si la division 1/x était évaluée, il y aurait une erreur, puisque l’on ne peut pas diviser par 0.

Python paresseux

Dans les deux cas, l’évaluation n’est pas faite puisque le résultat de l’expression a déjà pu être déterminé grâce à la partie gauche.

VII. Exercices⚓︎

Exercice 1

Déterminer la table de vérité de : a ou (non b)

Solution
a b non b a ou (non b)
F F V V
F V F F
V F V V
V V F V
Exercice 2

Déterminer la table de vérité de : (non a) et b

Solution
a b non a (non a) et b
F F V F
F V V V
V F F F
V V F F
Exercice 3 à utiliser pour les exercices suivants

Faire un arbre de toutes les possibilités avec trois propositions a, b et c comme nous l’avons fait en cours pour deux propositions.

Solution

arbre

Exercice 4

Déterminer la table de vérité de : (a ou b) et c

Solution
a b c a ou b (a ou b) et c
F F F F F
F F V F F
F V F V F
F V V V V
V F F V F
V F V V V
V V F V F
V V V V V
Exercice 5

Déterminer la table de vérité de : (a et b) ou c

Solution
a b c a et b (a et b) ou c
F F F F F
F F V F V
F V F F F
F V V F V
V F F F F
V F V F V
V V F V V
V V V V V
Exercice 6

Démontrer que a xor b est équivalent à : (a ou b) et (non (a et b))

Solution
a b a xor b
F F F
F V V
V F V
V V F
a b a ou b a et b non (a et b) (a ou b) et (non(a et b))
F F F F V F
F V V F V V
V F V F V V
V V V V F F
Exercice 7

⌛ Ne faire cet exercice qu'après avoir terminé l'étude des fonctions en Python.

Ecrire la fonction et_logique qui prend en paramètres deux entiers a et b valant 0 ou 1. Cette fonction renvoie a et b.

Contrainte

Utiliser exclusivement le « matériel » Python suivant : def, if, elif, else, ==, return.

Exemple

🐍 Console Python
>>> et_logique(0, 1)
0
>>> et_logique(0, 0)
0
>>> et_logique(1, 1)
1

Compléter le script ci-dessous (observer les affichages de tests):

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Shift+Esc ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013cP-7 sSfbgn3T8k9vei(h4l,mdo0qp65_:2)=tay1/ur050A0s0M0N0t0x0g0f0b0x0N0g0g0L010M0t0E010406050g0R0z0z0N0S0O040h0B0x0R0-0B0l050Q0@0_0{0}0=0E04051d161g0Q1d0=0A0t0r0#0%0)0+0%0l0k0R0N0k0s0d0E0O0M0v140f0v0t0k0v0x1I0v0M0:050W0j0x0s1p0(0*011H1J1L1J0M1R1T1P0M0S1e1D0#100g0E0N0l0+0J011V1r010i0Y0s0l0N0z0s1P1;1?1{1X1~1T21230:0a0f0c0S0B0E0B0g0t130l0f0U1/0S0S0s0b2o16260l1e0Q1D2B1+1-1,1Q0A281s0t0l202l1P1m1o0$1W2L2N0l0B2R1P0E2u1e2z2B2(0?1=2p2T1|2X0S0`0x1P0N1G2u0i0+030H0H0b2Y0s1L2W0B0d0e0d0P0:0f0P160N2)2,0;2+272.1X2:2=2@2_0s2{012}2 31332O360d1_040f0J3d3f1?3h2z2K013m0N2?1e2^0v2`2|2~300U3w2X3y0m3a0m3E2y3g0=3I3k0+3L3N053P3R3s3T3v2M3x370w3a0w3$173(3i2-1q3l0B2;3M3o3Q3q3S3u3V3^3X370G3a0G3~2(3)2,3J3-483;3t3U324e35370F3a0F4k403*433,453n3O3p3r4s3@343y0e3a0e4B3G4m3j4E3K4G474I494K3?4d4N370o3a0o4S2A4U422U4X463.3:4a3=4c4u4)0d0q3a0q4.3H4n3+4?4H3/4J4b4t3W4w380C0:0P0C534:4o4Y4^5a4{5c4v3y0P39045u5k415m4@4q4`4L4(3_383A0P3D0Q3e3%3G1h2$162R2E0A1-2J564t2Q1n1e2#0s2%3g5N2A054t5(270t0A0+2~2z5t3o5:5=4|5d5^0f2c0s5{5r4~5v3$4D4=0p0:0U0i5*3B5z560l0i0:0V0H0x0B0k0t0D0R0s6d6f4W0/040u6t672/0:0N6z556v0:0y6d0f6u4=0l0:0j6E4V4=6w0K0I6d0=3 5O3I5`015?2,3y3A596#4%4}5G1_5 22616$5|5s376*5L3B0f6~6L6B042u2k0l0g6s6Y2A6K6A1X0B0:0L6J701X0z0t0:5j783h7n5z6,0H5@373Z4I7r635G3Z6;23624M7z1P6|6~6 7b0+69040t6c7n7a6F6M6C7g7K017d040L7f7Q7h0+7j5h6Q4;1|6w6V7n6X2*6!5;6@7t0d3{7w7@6-5}3`1`607D5F4f7`7G3e7I897R6R1|7M7O7V7S716P7$7W7Y7!8g8c7i7k5w7+3J7.6W8t7r7_4h7|836.854h7B6?7~6_0d8A3E8a8N8b7,3l0:7314768o8Q0+8m8W3J7)8s7:8x7}7s6(4x5_8*7y854y8G8C7 0d4y2B887I7%017M2u0M0R0S158k8h8R720s748V8(7p7?5{7_4P8B6@8:5e4P8?9k7E859i3E7;5)9f7^8,0d4+9j8I4~4+9o9C5G9A66970+0b5v030f0n0s0g0M0g8w9e4n8y9y509B6^4~509F9$5G9!9J8p7L6C0)0s0S0M8!6g6j0M6l6n6p6r8t566w6y9W9.018$7m7=9K016w6I96a5a7a06G040K9^4W8m7#2(8P8#8ra840a42p9Y1?5t5g9#9laz816=8@8J5i875.8X8 9:769?al7T046k6m6o6q77a9a5a2ah4=agav8u6HaQ1|8$3ca(a10:akaeaLana+8q7l9VaYaw8*7_5u8.aG64399)aC37b18{aK3J7M1W9=9@a?4o9`9|aV9 a/aia3a}ar7*bn6Sa*bh56a-a#7-a;a_8Y7eao3gaqbx8ra.4l8)9g9y5Jb29p845ebPb69qbT6{5M7Wbd9;aPbw4W6NaS9{aU9~aX9vaaa!bta,bJbz1XacbCa6asb_0+6Tb|a^b(a$b~9d2*0Q5-5P5%5R5!160M5Ucf2H2C0N1Scc0Q5S6X0U0W0Y0g04.
Exercice 8

⌛ Ne faire cet exercice qu'après avoir terminé l'étude des fonctions en Python.

écrire la fonction ou_logique qui prend en paramètres deux entiers a et b valant 0 ou 1. Cette fonction renvoie a ou b.

Contrainte

Utiliser exclusivement le « matériel » Python suivant : def, if, elif, else, ==, return.

a et b sont des variables pouvant prendre les valeurs 0 ou 1.

Exemple

🐍 Console Python
>>> ou_logique(0, 1)
1
>>> ou_logique(1, 1)
1
>>> ou_logique(0, 0)
0

Compléter le script ci-dessous (observer les affichages de tests):

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Shift+Esc ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013cP- sSfbgn3k9vei(h4l,mdoq0p65_:2)=tay1/ur050x0p0J0K0q0u0f0e0b0u0K0f0f0I010J0q0B010406050f0O0w0w0K0P0L040g0y0u0O0*0y0k050N0;0?0^0`0/0B04051a131d0N1a0/0x0q0o0Y0!0$0(0!0k0j0O0K0j0p0d0B0L0J0s110e0s0q0j0s0u1F0s0J0-050T0i0u0p1m0#0%011E1G1I1G0J1O1Q1M0J0P1b1A0Y0}0f0B0K0k0(0G011S1o010h0V0p0k0K0w0p1M1.1:1^1U1{1Q1~200-0a0e0c0P0y0B0y0f0q100k0e0R1,0P0P0p0b2l13230k1b0N1A2y1(1*1)1N0x251p0q0k1}2i1M1j1l0Z1T2I2K0k0y2O1M0B2r1b2w2y2#0:1/2m2Q1_2U0P0@0u1M0K1D2r0h0(030E0E0b2V0p1I2T0y0d0n0d0M0-0M130K2$2)0.2(242+1U2-2/2;2?0p2^012`2|2~302L330d1?040G393b1:3d2w2H013i0K2:1b2=0s2@2_2{2}0R3s2U3u0l0-0l3z2v3c0/3D3g0(3G3I053K3M3o3O3r2J3t340t0-0t3X143Z3e2*1n3h0y2.3H3k3L3m3N3q3Q3:3S340D0-0D3_2#3!2)3E3(433,3p3P2 4932340C0-0C4f3c1e2Z132O2B0x1*2G3$014o2N1k1b2Y0p2!4x3`3B054o4O240q0x0(2{2w3u363J0e4W4Y474p314#1@290p4*4o3R4r351M0N3a3|3E0m0-0R0h3Y3B0e4}4G0k0h0-0y0O0E0u0y0j0q0z0O0p532x563~0(0,040r5l4U3}2R3F0-0K5t5n5w5q0v5t553#5o5x040i5A5H5C0-0H0F5t0/4Q5m3D4)014Z2)3u3w3*4(4X5Y4+4@5#4/1 4;5*4?4q5-2y3a0e5`5G4i570-2r2h0k0f5k5U045|3f5I0y0-0I5F5B1_0w0q375S5M4i5X5Z1:3T3k6m5+5?343U0e4:4=3/4-6u4`5_5{6e1U4 040q5265675v2,5y6d5N1_6a040I6c6L6F0(6g0-0A6k685O045R655T2%5W5)6n0k3u3?4%6r5=6A0d3?6w5/6y486{6@3z5{756M4~0-6J6Q5}5I0k0-5L6X6R1U6T6V7b6(6f6h046$656Y015q6+4g6%2m6r4!4b6q6:6s6{4c6~20704,3;0d4c5^66767R7t7e046011637m6N7j6b7Z3E6!7q6j7s6/4*7B0d4t6^7E6`7M4t7I5:3.717^6C7Q5`7t6H2r0J0O0P127h7c5w7U7W62647x7s0N4T4y4N4A4K130J4D8o2E2z0K1P8l0N4B5T0R0T0V0f04.