Solveur d'expressions booléennes

table de vérité avec colonnes de sous-expressions étape par étape

Chargement de la simulation interactive...

Choisissez la variable qui explique le plus 🖖

Astuce matérielle utile : choisissez une entrée qui sépare le mieux le comportement VRAI/FAUX, puis implémentez chaque branche et multiplexez par cette entrée.

une ligne pour chaque possibilité 🖖

Une table de vérité est simplement une liste exhaustive : elle écrit chaque combinaison possible d'entrées VRAI/FAUX et montre ce que fait l'expression dans chaque cas. Avec n variables, il y a 2ⁿ lignes, donc chaque nouvelle entrée double la table — 3 variables donnent 8 lignes, 5 en donnent 32. Les colonnes intermédiaires comptent aussi : elles construisent chaque sous-expression étape par étape, pour suivre la logique opérateur par opérateur au lieu de faire confiance au seul résultat final.

32 lignes, quatre milliards de fonctions 🖖

Voici la surprise : la table à 5 variables n'a que 32 lignes, mais le nombre d'expressions différentes qu'on peut définir sur elles est 2³² = 4,294,967,296. Chaque façon distincte de remplir la colonne de sortie avec des 0 et des 1 est une fonction booléenne à part entière, et il en existe 2^(2ⁿ) au total. Cet outil modeste parcourt donc en silence un espace de plus de quatre milliards de circuits logiques possibles — un pour chaque motif que peut prendre la colonne finale.

EXPRESSIONS BOOLÉENNES — QUELLE LOI SIMPLIFIE CELLE-CI ?

Dans quel cas de simplification êtes-vous ?

Deux expressions sont la même expression exactement quand leurs tables de vérité coïncident, et c’est le seul test qui tranche. Les lois de l’algèbre de Boole ne sont que les coïncidences qu’il vaut la peine de reconnaître d’un coup d’œil : rentrer un NOT, développer une parenthèse, supprimer un terme qui ne change rien, et repérer le terme que les autres couvraient déjà. Dressez la table et la réponse cesse d’être discutable.

Un NOT posé sur une parenthèse — De Morgan échange le connecteur ¬(A ∧ B) = ¬A ∨ ¬B
Une parenthèse à développer — la distributivité A ∧ (B ∨ C) = (A∧B) ∨ (A∧C)
Un terme qui n’apporte rien — l’absorption A ∨ (A ∧ B) = A
Un terme que les autres couvrent déjà — le théorème du consensus (A∧B) ∨ (¬A∧C) ∨ (B∧C) = (A∧B) ∨ (¬A∧C)
L’expression cesse complètement de dépendre de ses entrées A ∨ ¬A = 1

01

Un NOT posé sur une parenthèse — De Morgan échange le connecteur

Ce que vous savez: Une négation portant sur toute une expression. La rentrer transforme le AND en OR, ou le OR en AND, et nie chaque partie au passage.

Loi: ¬(A ∧ B) = ¬A ∨ ¬B

Exemple résolu: !(A & B) est la même expression que !A | !B — les deux colonnes de sortie coïncident sur les quatre lignes

Ouvrir ce cas: De Morgan !(A & B)
Un NOT posé sur une parenthèse — De Morgan échange le connecteur. Rentrez le NOT et le AND devient un OR ; les deux colonnes de sortie sont identiques. Une négation portant sur toute une expression. La rentrer transforme le AND en OR, ou le OR en AND, et nie chaque partie au passage.
Rentrez le NOT et le AND devient un OR ; les deux colonnes de sortie sont identiques.

02

Une parenthèse à développer — la distributivité

Ce que vous savez: Le AND se distribue sur le OR exactement comme la multiplication sur l’addition. Le développement donne une somme de produits, la forme standard pour passer de l’expression au circuit.

Loi: A ∧ (B ∨ C) = (A∧B) ∨ (A∧C)

Exemple résolu: A & (B | C) est la même chose que (A & B) | (A & C), sur les huit lignes de trois variables

Ouvrir ce cas: A & (B | C)
Une parenthèse à développer — la distributivité. Développer la parenthèse donne deux termes produits dont le OR reproduit l’original. Le AND se distribue sur le OR exactement comme la multiplication sur l’addition. Le développement donne une somme de produits, la forme standard pour passer de l’expression au circuit.
Développer la parenthèse donne deux termes produits dont le OR reproduit l’original.

03

Un terme qui n’apporte rien — l’absorption

Ce que vous savez: Quand un terme en implique déjà un autre, le plus faible peut disparaître. A | (A & B) vaut simplement A, quoi que fasse B.

Loi: A ∨ (A ∧ B) = A

Exemple résolu: A | (A & B) = A : là où A vaut 1 la sortie vaut 1 de toute façon, et là où A vaut 0 le second terme vaut 0 aussi

Ouvrir ce cas: loi d'absorption
Un terme qui n’apporte rien — l’absorption. Le second terme ne se déclenche que là où le premier le faisait déjà : il n’affecte jamais la sortie. Quand un terme en implique déjà un autre, le plus faible peut disparaître. A | (A & B) vaut simplement A, quoi que fasse B.
Le second terme ne se déclenche que là où le premier le faisait déjà : il n’affecte jamais la sortie.

04

Un terme que les autres couvrent déjà — le théorème du consensus

Ce que vous savez: Trois termes dont le troisième est le consensus des deux premiers : il ne couvre que des cas déjà couverts par eux. Le retirer ne change aucune ligne de la table.

Loi: (A∧B) ∨ (¬A∧C) ∨ (B∧C) = (A∧B) ∨ (¬A∧C)

Exemple résolu: (A & B) | (!A & C) | (B & C) vaut (A & B) | (!A & C) — le troisième terme est redondant sur les huit lignes

Ouvrir ce cas: théorème du consensus
Un terme que les autres couvrent déjà — le théorème du consensus. Supprimer le troisième terme laisse la colonne de sortie inchangée sur chaque ligne. Trois termes dont le troisième est le consensus des deux premiers : il ne couvre que des cas déjà couverts par eux. Le retirer ne change aucune ligne de la table.
Supprimer le troisième terme laisse la colonne de sortie inchangée sur chaque ligne.

05

L’expression cesse complètement de dépendre de ses entrées

Ce que vous savez: Une colonne de uniquement des 1 est une tautologie ; une colonne de uniquement des 0 est une contradiction. Dans les deux cas les variables ont cessé de compter.

Loi: A ∨ ¬A = 1

Exemple résolu: A | !A vaut 1 sur les deux lignes, et son image en miroir A & !A vaut 0 sur les deux

Ouvrir ce cas: tautologie A | !A
L’expression cesse complètement de dépendre de ses entrées. Les deux lignes donnent la même sortie : l’entrée n’a strictement aucune influence. Une colonne de uniquement des 1 est une tautologie ; une colonne de uniquement des 0 est une contradiction. Dans les deux cas les variables ont cessé de compter.
Les deux lignes donnent la même sortie : l’entrée n’a strictement aucune influence.
Références (2)

Problèmes entièrement résolus

  1. Somme des mintermes pour l'expression !(A & B) 5 étapes

    L'expression est !(A & B), sur les deux variables A et B. Comptez les lignes où elle vaut 1, écrivez la fonction sous la forme d'une somme de mintermes, puis déterminez ce qu'il est possible de construire à partir de cette seule porte et de rien d'autre.

    1. Deux variables, chacune libre de valoir 0 ou 1, la table comporte donc une ligne par paire. L'analyseur syntaxique indique ce décompte avant d'évaluer quoi que ce soit, car la taille du problème est fixée par les variables et non par l'expression construite sur elles.

    2. Remplissez d'abord la colonne interne. A & B vaut 1 uniquement lorsque les deux entrées valent 1, ainsi trois lignes contiennent 0 et la dernière contient 1. La table affiche cette sous-expression dans sa propre colonne à côté du résultat, ce qui permet de vérifier l'analyse syntaxique au lieu du seul résultat.

    3. Le NON inverse chaque entrée et ne fait rien d'autre. Les trois zéros deviennent des uns et l'unique un devient un zéro, de sorte que la colonne de résultat est le négatif exact de la colonne située au-dessus.

    4. Cela laisse 3 des 4 lignes à 1. Sous forme de fraction, cela donne 0,75, que le panneau exprime sous la forme d'un pourcentage des combinaisons d'entrée.

    5. Nommez chaque ligne vraie par la conjonction qui vaut 1 sur cette ligne et sur aucune autre — son minterme — et reliez les trois par un OU. C'est la forme normale disjonctive canonique, et c'est la liste que l'outil affiche sous la table.

    Réponse

    Le NAND vaut 1 sur 3 des 4 lignes, soit 75,0 %, et sa forme normale se compose de ces 3 mintermes. Voici maintenant le résultat. Injectez A dans les deux entrées et A NAND A vaut !(A & A), ce qui donne !A — vous obtenez le NON. Injectez la sortie d'un NAND dans les deux entrées d'un autre et les deux négations s'annulent, ainsi (A NAND B) NAND (A NAND B) donne ET. Pour le OU, inversez d'abord les deux entrées : (A NAND A) NAND (B NAND B) vaut !(!A & !B), et !A & !B vaut 1 sur la seule ligne 0,0, donc sa négation vaut 1 sur les 3 autres — ce qui correspond à A OU B. NON, ET et OU sont exactement ce que l'étape 5 a utilisé pour écrire une fonction sous forme normale, de sorte que cette seule colonne de 4 lignes peut exprimer n'importe quelle fonction booléenne de n'importe quel nombre de variables.

  2. Construction de la colonne de zéro pour !A | !B 6 étapes

    Prenez maintenant !A | !B, qui ne partage aucun opérateur avec !(A & B) — pas de parenthèse négative, pas de ET nulle part. Construisez sa colonne à partir de zéro et voyez où elle aboutit.

    1. Deux colonnes NON, toutes deux affichées à côté du résultat. !A vaut 1 sur les 2 lignes où A vaut 0 ; !B vaut 1 sur les 2 lignes où B vaut 0. Elles concordent sur une ligne et échouent toutes deux sur une ligne.

    2. Le OU vaut 0 uniquement lorsque ses deux entrées valent 0, et cela se produit sur exactement une ligne : A=1, B=1, la ligne où aucune négation ne subsiste. Chaque autre ligne a au moins un 1 à fournir.

    3. Ainsi 3 des 4 lignes valent 1 — le même 0,75, exprimé sous le même pourcentage.

    4. Les mintermes correspondent également, terme à terme et dans le même ordre que dans le premier problème.

    5. Comparez maintenant les deux expressions sans recourir à une table. A & B vaut 1 sur exactement une ligne, donc !(A & B) vaut 0 sur exactement cette ligne, et c'est la même ligne qui vient de faire échouer !A | !B. Deux colonnes qui valent 0 au même endroit et 1 partout ailleurs ne forment qu'une seule et même colonne.

    6. Dans quelle mesure cela doit-il vous impressionner ? Une table de 4 lignes comporte 4 cellules de résultat, chacune valant 0 ou 1, de sorte que deux variables n'admettent au total que 16 fonctions distinctes. La concordance est facile dans un ensemble aussi restreint — c'est pourquoi l'étape 5 est la partie essentielle : elle a fixé une ligne sans jamais compter le reste.

    Réponse

    Les deux expressions aboutissent à 75,0 % avec les 3 mêmes mintermes, car il s'agit d'une seule et même fonction sous deux noms différents. La forme canonique est une empreinte digitale : deux expressions sont équivalentes exactement lorsque leurs ensembles de mintermes concordent, de sorte que la question de savoir si deux circuits se comportent de la même manière se réduit à savoir si deux listes sont identiques. Ce qui ne se réduit pas, c'est le coût de construction de ces listes. 2 variables nécessitent 4 lignes et vous avez fait le calcul de tête ; 20 variables en nécessitent 1 048 576 ; 100 variables en nécessitent environ 1,27×10³⁰ lignes, et l'empreinte reste la bonne idée alors même que la table cesse d'être une méthode. L'argument ligne par ligne de l'étape 5 est celui qui subsiste lors du passage à l'échelle, car il n'a jamais mentionné le nombre de lignes présentes.

Exemples de problèmes

  • AND simple - ET : la sortie vaut 1 seulement quand A et B valent tous deux 1
  • (A OR B) AND NOT C - 3 variables, 8 lignes - montre comment NON inverse toute une branche
  • majorité 3 entrées - Vote majoritaire : 1 quand au moins 2 des variables A, B, C valent 1
  • multiplexeur 2:1 - Multiplexeur : S=0 donne A en sortie, S=1 donne B en sortie
  • tautologie A | !A - A | !A est vrai à chaque ligne, la colonne de sortie ne contient donc que des 1 et l'entrée n'a plus d'importance. Avec son opposé A & !A, ce sont les deux fonctions qu'une table de vérité peut exprimer sans jamais lire la variable.
  • contradiction A & !A - L'expression A & !A est fausse à chaque ligne. Toutes les autres fonctions de cette page se situent entre elle et son opposé. Ces deux extrêmes définissent les limites du système au lieu d'être de simples curiosités.
  • De Morgan !(A & B) - Chargez ceci, puis chargez son partenaire !A | !B. Les deux colonnes de sortie sont identiques. C'est exactement ce qu'affirme la loi de De Morgan : prendre la négation d'un ET donne le OU des négations. Deux expressions, une seule fonction.
  • De Morgan !A | !B - L'autre moitié de la paire de De Morgan. Placez-la à côté de !(A & B) et vous verrez que les sorties correspondent ligne par ligne. Ces deux expressions ne sont pas simplement équivalentes dans certains cas. Il s'agit de la même fonction écrite deux fois.
  • A & (B | C) - L'expression A & (B | C) représente le membre gauche de la loi de distributivité. Son partenaire la développe en (A & B) | (A & C). Les tables concordent absolument partout, ce qui rend ce développement valide et non juste plausible.
  • (A & B) | (A & C) - Voici la forme développée. Elle exige deux ET et un OU, alors que la version compacte n'en coûte qu'un de chaque. Une loi qui laisse la table de vérité inchangée n'est donc pas gratuite sur le plan matériel. C'est pourquoi il est utile de faire de l'algèbre avant de construire des circuits.
  • XOR forme développée - La fonction XOR déduite des deux seuls cas où les entrées sont différentes. L'absence de l'opérateur XOR ici est intentionnelle. L'aborder comme une somme de mintermes montre comment n'importe quelle fonction peut être construite à partir des trois que vous connaissez déjà.
  • A AND A AND A AND A - Appliquer l'opérateur ET à une variable avec elle-même quatre fois renvoie la variable. Remarquez le prix de cette opération. Vous utilisez trois portes qui ne changent rien, ce qu'un optimiseur supprimera immédiatement.
  • loi d'absorption - L'expression A | (A & B) se réduit à A, et la colonne B justifie sa présence précisément parce qu'elle est visiblement ignorée. Si A est vrai, l'ensemble est vrai d'office. Si A est faux, le second terme l'est aussi.
  • théorème du consensus - Le terme central est redondant, la table le prouve. Supprimez B & C et la colonne de sortie restera intacte. Il est difficile de s'en rendre compte au premier coup d'œil. C'est d'ailleurs pourquoi ce théorème porte un nom.
  • implication A -> B - « A implique B » n'est pas une primitive. Elle s'écrit !A | B, ce que prouve la table. La ligne qui surprend le plus est celle où A est faux et B est vrai, l'implication restant alors parfaitement valable.
  • parité 3 entrées - Vrai lorsqu'un nombre impair d'entrées vaut 1, ce qui correspond à un XOR appliqué en chaîne sur trois variables. C'est le bit de contrôle classique d'un mot mémoire. Il détecte toute erreur sur un seul bit précisément parce que l'inversion d'une entrée inverse systématiquement la sortie.