M03 - Logique booléenne, De Morgan et tableaux de Karnaugh

Objectif

Écrire une table de vérité, simplifier une expression par le calcul (lois) ou par un tableau de Karnaugh, et nier une expression avec De Morgan.


1. Les opérateurs

(ET) (OU) (NON) (OU exclusif)
0000101
0101111
1001010
1111001

Priorité : NON puis ET puis OU → .

En informatique : ET = and/&&/&, OU = or/||/|, NON = not/!, XOR = ^. Le ET binaire sert à calculer une adresse réseau (IP ET masque) → R03 - Adressage IPv4 et classes ; le XOR sert à la parité RAID → ST01 - RAID.

2. Les lois à connaître

NomAvec ETAvec OU
Élément neutre
Élément absorbant
Idempotence
Complément
Double négation
Distributivité
Absorption
Absorption 2

De Morgan ⭐

Règle : on barre chaque terme et on échange + et ·.

Exemples :

  • Année bissextile : →

3. Tableaux de Karnaugh

Méthode

  1. Remplir le tableau à partir de la table de vérité (colonnes en code Gray : 00, 01, 11, 10 - un seul bit change à chaque fois).
  2. Entourer les 1 par rectangles de 1, 2, 4 ou 8 cases, les plus grands possible, chevauchements autorisés, le tableau est cyclique (les bords se touchent).
  3. Pour chaque groupe, garder les variables qui ne changent pas ; l’expression finale = somme (OU) des groupes.

Exemple 1 -

\ 00011110
00010
10011
  • Groupe vertical colonne : varie → reste .
  • Groupe horizontal ligne , colonnes 11 et 10 : varie → reste .
  • ✅ (vérifié par table_verite.py).

Exemple 2 (BTS) - bonus joueur :

Table : .

\ 00011110
00100
11111
  • Toute la ligne (4 cases) → .
  • Colonne (m1 et m5) → → .
  • (2 termes).

Simplification par le calcul (même résultat, plus long)

. Comme (absorption), on peut écrire . Or (absorption 2), donc . D’où . Karnaugh y arrive en 10 secondes !

Karnaugh à 4 variables

Lignes et colonnes toutes deux en code Gray (00, 01, 11, 10). Les 4 coins forment un groupe.

4. Exercice

Simplifier .

5. Script : scripts/maths/table_verite.py

python3 table_verite.py "a.b + !a.b.c"                      # table de vérité
python3 table_verite.py "a.b + !a.b.c" "b.c + a.b"          # équivalentes ? ✅
python3 table_verite.py --mintermes "a.b + !b.c + !c.a"     # F = Σm(1, 4, 5, 6, 7)
python3 table_verite.py "!(a + b)" "!a.!b"                  # vérifier De Morgan

Notation : . ou * = ET, + = OU, ! = NON.

Voir aussi