Section courante

A propos

Section administrative du site

Principe de complémentarité

Le principe de complémentarité est une notion fondamentale de l'algèbre de Boole. Il exprime la relation existant entre une variable booléenne et sa négation, appelée son complément. Puisqu'une variable booléenne ne peut prendre que les valeurs vrai ou faux, son complément possède toujours la valeur opposée.

Si une variable :

A

vaut vrai, son complément :

NON A

vaut faux. Inversement, si `A` vaut faux, `NON A` vaut vrai. Une variable et son complément ne peuvent donc jamais être vrais simultanément dans la logique booléenne classique. Ils ne peuvent pas non plus être faux simultanément.

Cette opposition conduit aux deux lois essentielles de complémentarité :

A ET NON A = FAUX

et :

A OU NON A = VRAI

La première formule représente une contradiction, car une proposition ne peut pas être vraie et fausse en même temps. La seconde représente une tautologie, car une proposition est nécessairement vraie ou fausse.

Le principe de complémentarité intervient dans la simplification des expressions, les démonstrations logiques, les conditions de programmation, les circuits numériques, les opérations sur les bits, la théorie des ensembles, les bases de données et la vérification formelle des logiciels.

Définition du complément

Le complément d'une valeur booléenne est la valeur opposée obtenue en appliquant l'opérateur de négation.

Pour une variable :

A

son complément peut être noté :

NON A
¬A

ou, dans plusieurs langages de programmation :

!A

La notation employée dépend du contexte mathématique ou du langage utilisé.

Table de vérité du complément

A NON A
0 1
1 0

Cette table montre que le complément inverse toujours la valeur de son opérande.

Ainsi :

NON 0 = 1

et :

NON 1 = 0

Valeur vraie et valeur fausse

Dans l'algèbre de Boole classique :

0 = FAUX

et :

1 = VRAI

La complémentation échange donc ces deux constantes :

NON FAUX = VRAI
NON VRAI = FAUX

Les deux valeurs sont complémentaires l'une de l'autre.

Complément d'une variable

Si :

A = 1

alors :

NON A = 0

Si :

A = 0

alors :

NON A = 1

Une variable et son complément possèdent toujours des valeurs différentes.

On peut écrire :

A ≠ NON A

dans la logique booléenne classique à deux valeurs.

Première loi de complémentarité

La première loi est :

A ET NON A = 0

ou :

A ET NON A = FAUX

Elle affirme qu'une variable et son complément ne peuvent jamais être vrais simultanément.

Cette expression représente une contradiction.

Vérification par table de vérité

A NON A A ET NON A
0 1 0
1 0 0

Quelle que soit la valeur de `A`, la colonne finale vaut toujours :

0

L'expression est donc toujours fausse.

Interprétation logique

Considérons la proposition :

Le fichier existe.

Son complément est :

Le fichier n'existe pas.

Les deux propositions ne peuvent pas être vraies simultanément dans un même contexte parfaitement déterminé.

L'expression :

FichierExiste
ET
NON FichierExiste

est donc nécessairement fausse.

Principe de non-contradiction

La formule :

A ET NON A = FAUX

correspond au principe de non-contradiction.

Ce principe affirme qu'une proposition ne peut pas être simultanément vraie et fausse dans le même contexte et au même moment.

Il joue un rôle fondamental dans :

Deuxième loi de complémentarité

La seconde loi est :

A OU NON A = 1

ou :

A OU NON A = VRAI

Elle affirme qu'une variable ou son complément est nécessairement vrai.

Cette expression représente une tautologie.

Vérification par table de vérité

A NON A A OU NON A
0 1 1
1 0 1

Quelle que soit la valeur de `A`, la colonne finale vaut toujours :

1

L'expression est donc toujours vraie.

Principe du tiers exclu

La formule :

A OU NON A = VRAI

correspond au principe du tiers exclu.

Ce principe affirme qu'une proposition est vraie ou que sa négation est vraie. Dans la logique booléenne classique, aucune troisième possibilité n'existe entre vrai et faux.

Ainsi, une variable booléenne satisfait nécessairement l'une des deux conditions :

A

ou :

NON A

Tableau des lois fondamentales

Loi Formule Résultat
Non-contradiction A ET NON A FAUX
Tiers exclu A OU NON A VRAI
Complément de faux NON FAUX VRAI
Complément de vrai NON VRAI FAUX
Double complément NON NON A A

Ces identités constituent les principales formes du principe de complémentarité.

Double complément

Appliquer deux fois la négation restitue la valeur initiale.

NON NON A = A

Cette identité est également appelée :

Vérification de la double négation

A NON A NON NON A
0 1 0
1 0 1

La dernière colonne est identique à la première.

Ainsi :

NON(NON A) = A

Exemple de double négation

Considérons :

NON NON CompteActif

Cette expression signifie :

Il n'est pas vrai que le compte n'est pas actif.

Elle se simplifie en :

CompteActif

La forme simplifiée est généralement beaucoup plus lisible.

Complément d'une constante

Les constantes booléennes sont complémentaires :

NON 0 = 1
NON 1 = 0

On peut également écrire :

0̅ = 1

et :

1̅ = 0

Cette relation joue un rôle important dans les transformations duales et les circuits logiques.

Unicité du complément

Dans une algèbre de Boole, chaque élément possède un complément unique.

Si B est le complément de A, il doit satisfaire :

A ET B = 0

et :

A OU B = 1

Ces deux conditions permettent de caractériser le complément.

Démonstration conceptuelle de l'unicité

Supposons que `B` et `C` soient deux compléments de `A`.

Ils satisfont :

A OU B = 1
A ET B = 0

et :

A OU C = 1
A ET C = 0

On peut alors montrer, à l'aide des lois distributives et des identités booléennes, que :

B = C

Le complément de `A` est donc unique.

Démonstration algébrique de l'unicité

Partons de :

B = B ET 1

Comme :

A OU C = 1

on obtient :

B = B ET (A OU C)

Par distributivité :

B = (B ET A) OU (B ET C)

Puisque :

B ET A = 0

il reste :

B = B ET C

De manière symétrique :

C = B ET C

Donc :

B = C

Complément d'une expression

La complémentation ne s'applique pas uniquement à une variable.

Elle peut s'appliquer à une expression complète :

NON(A ET B)
NON(A OU B)
NON(
   CompteActif
   ET PossèdePermission
)

Le complément représente alors la négation du résultat de toute l'expression.

Parenthèses et complément

Les parenthèses déterminent la portée de la négation.

NON A ET B

signifie généralement :

(NON A) ET B

En revanche :

NON(A ET B)

nie le résultat de la conjonction complète.

Ces deux expressions ne sont pas équivalentes.

Exemple de différence

Considérons :

A = 1
B = 0

Alors :

(NON A) ET B
=
0 ET 0
=
0

Tandis que :

NON(A ET B)
=
NON(1 ET 0)
=
NON 0
=
1

La portée du complément modifie donc le résultat.

Lois de De Morgan

Le complément d'une conjonction ou d'une disjonction peut être distribué à l'aide des lois de De Morgan.

NON(A ET B)
=
NON A OU NON B

et :

NON(A OU B)
=
NON A ET NON B

Lorsque la négation traverse les parenthèses, l'opérateur ET devient OU et l'opérateur OU devient ET.

Complément d'une conjonction

L'expression :

NON(A ET B)

est vraie lorsque la conjonction `A ET B` est fausse.

Cela se produit lorsque :

On obtient donc :

NON A OU NON B

Table de vérité de De Morgan

A B NON(A ET B) NON A OU NON B
0 0 1 1
0 1 1 1
1 0 1 1
1 1 0 0

Les deux dernières colonnes sont identiques.

Complément d'une disjonction

L'expression :

NON(A OU B)

est vraie uniquement lorsque :

A = FAUX

et :

B = FAUX

Elle est donc équivalente à :

NON A ET NON B

Table de vérité correspondante

A B NON(A OU B) NON A ET NON B
0 0 1 1
0 1 0 0
1 0 0 0
1 1 0 0

Les résultats sont identiques pour toutes les affectations.

Complément et dualité

Le principe de complémentarité est lié à la dualité, mais les deux notions sont différentes.

La dualité échange :

ET ↔ OU

et :

0 ↔ 1

La complémentation inverse la valeur d'une expression :

A ↔ NON A

Les deux lois fondamentales de complémentarité sont toutefois duales :

A ET NON A = 0

et :

A OU NON A = 1

Expression et expression complémentaire

Pour une expression :

F

son complément est :

NON F

Les deux expressions vérifient :

F ET NON F = 0

et :

F OU NON F = 1

Ces propriétés sont vraies même lorsque `F` est une expression complexe.

Exemple avec une expression complexe

Soit :

F =
CompteActif
ET
PossèdePermission

Son complément est :

NON F

c'est-à-dire :

NON(
   CompteActif
   ET
   PossèdePermission
)

Par De Morgan :

NON CompteActif
OU
NON PossèdePermission

Vérification de complémentarité

Les expressions :

F

et :

NON F

satisfont :

F ET NON F = FAUX

et :

F OU NON F = VRAI

Cela reste vrai indépendamment de la structure interne de `F`.

Contradiction

Une contradiction est une expression toujours fausse.

La forme classique est :

A ET NON A

Toute expression contenant une conjonction obligatoire entre une condition et son complément peut souvent être simplifiée en :

FAUX

Exemple de contradiction dans un programme

SI
   CompteActif
   ET NON CompteActif
ALORS

   AutoriserAccès

FIN SI

Le bloc ne pourra jamais être exécuté dans une logique booléenne classique.

La condition est contradictoire.

Code inaccessible

Lorsqu'une condition se simplifie en faux :

SI FAUX ALORS
   Instruction
FIN SI

le bloc correspondant est inaccessible.

Un compilateur ou un outil d'analyse statique peut signaler ou supprimer ce code.

Tautologie

Une tautologie est une expression toujours vraie.

La forme classique est :

A OU NON A

Toute expression contenant une disjonction complète entre une condition et son complément peut souvent être simplifiée en :

VRAI

Exemple de tautologie dans un programme

SI
   CompteActif
   OU NON CompteActif
ALORS

   ExécuterInstruction

FIN SI

Le bloc est toujours exécuté.

La condition est donc inutile dans la logique classique.

Simplification d'une expression

Le principe de complémentarité permet de réduire des expressions complexes.

Considérons :

(A ET NON A)
OU B

Comme :

A ET NON A = 0

l'expression devient :

0 OU B

Puis :

B

Autre exemple de simplification

Considérons :

(A OU NON A)
ET B

Comme :

A OU NON A = 1

l'expression devient :

1 ET B

Puis :

B

Exemple avec plusieurs variables

(
   A ET NON A
)
OU
(
   B ET C
)

La première partie est toujours fausse :

A ET NON A = 0

On obtient :

0 OU (B ET C)

Puis :

B ET C

Exemple avec une tautologie

(
   A OU NON A
)
ET
(
   B OU C
)

La première partie est toujours vraie :

A OU NON A = 1

On obtient :

1 ET (B OU C)

Puis :

B OU C

Complément et absorption

Le principe de complémentarité intervient souvent avec la distributivité et l'absorption.

Considérons :

A OU
(
   NON A ET B
)

Par distributivité :

(
   A OU NON A
)
ET
(
   A OU B
)

Puis :

1 ET (A OU B)

On obtient :

A OU B

Identité utile

On peut donc établir :

A OU (NON A ET B)
=
A OU B

Sa forme duale est :

A ET (NON A OU B)
=
A ET B

Ces identités utilisent directement le principe de complémentarité.

Démonstration de la première identité

Partons de :

A OU (NON A ET B)

Par distributivité :

(A OU NON A)
ET
(A OU B)

Par complémentarité :

1 ET (A OU B)

Par identité du ET :

A OU B

Démonstration de la forme duale

Partons de :

A ET (NON A OU B)

Par distributivité :

(A ET NON A)
OU
(A ET B)

Par complémentarité :

0 OU (A ET B)

Par identité du OU :

A ET B

Complément et implication

L'implication :

A → B

peut être exprimée par :

NON A OU B

Sa négation est :

NON(NON A OU B)

Par De Morgan :

A ET NON B

Ainsi, une implication est fausse uniquement lorsque `A` est vrai et `B` est faux.

Complément d'une implication

NON(A → B)
=
A ET NON B

Cette identité est utile pour :

Complément de l'équivalence

L'équivalence logique :

A ↔ B

est vraie lorsque `A` et `B` possèdent la même valeur.

Son complément est le OU exclusif :

NON(A ↔ B)
=
A XOR B

Inversement :

NON(A XOR B)
=
A ↔ B

Le XOR et le XNOR sont donc complémentaires.

Complément du XOR

Le XOR peut être écrit :

A XOR B
=
(A ET NON B)
OU
(NON A ET B)

Son complément est vrai lorsque les deux variables sont égales :

(A ET B)
OU
(NON A ET NON B)

Cette opération correspond à l'équivalence ou au XNOR.

Complément et opérateurs NAND et NOR

Le NAND est le complément du ET :

A NAND B
=
NON(A ET B)

Le NOR est le complément du OU :

A NOR B
=
NON(A OU B)

Ces opérations sont directement construites par complémentation.

Table du NAND

A B A ET B A NAND B
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0

La colonne NAND est le complément exact de la colonne ET.

Table du NOR

A B A OU B A NOR B
0 0 0 1
0 1 1 0
1 0 1 0
1 1 1 0

La colonne NOR est le complément exact de la colonne OU.

Complément dans les circuits logiques

Dans un circuit numérique, le complément est produit par une porte NON, aussi appelée :

Cette porte possède une seule entrée et une seule sortie.

La sortie prend toujours l'état logique opposé à l'entrée.

Exemple d'inverseur

Entrée A ──[NON]── Sortie S

La relation est :

S = NON A

Si l'entrée vaut 1, la sortie vaut 0.

Si l'entrée vaut `0`, la sortie vaut `1`.

Bulle d'inversion

Dans les schémas logiques, une petite bulle placée sur une entrée ou une sortie indique généralement une inversion.

Une porte ET suivie d'une bulle de sortie représente une porte NAND.

Une porte OU suivie d'une bulle de sortie représente une porte NOR.

Signaux actifs à l'état bas

Dans certains circuits, un signal est considéré comme actif lorsqu'il vaut :

0

On parle alors de signal actif à l'état bas.

Son nom peut être représenté par :

RESET_N
/RESET

ou par une barre au-dessus du nom.

La complémentarité aide à comprendre la relation entre signal actif haut et actif bas.

Exemple de signal actif bas

Si :

RESET_N = 0

la remise à zéro est active.

La condition positive :

ResetActif

peut être calculée par :

ResetActif = NON RESET_N

Ainsi :

RESET_N = 0

produit :

ResetActif = 1

Complément dans les opérations sur les bits

Dans les opérations bit à bit, le complément inverse chaque bit d'une valeur.

Par exemple :

A = 10110010

Son complément bit à bit est :

NON A = 01001101

Chaque `0` devient `1` et chaque `1` devient `0`.

Largeur de représentation

Le résultat du complément bit à bit dépend du nombre de bits utilisés.

Par exemple, sur 8 bits :

00000101

devient :

11111010

Sur 16 bits, la même valeur numérique serait représentée par :

0000000000000101

et son complément serait :

1111111111111010

Complément logique et complément bit à bit

Le complément logique traite une valeur comme une condition globale :

NON VRAI = FAUX

Le complément bit à bit inverse chaque bit individuellement.

Ces deux opérations doivent être distinguées.

Type Exemple
Complément logique NON true = false
Complément bit à bit NON 1010 = 0101

Complément à un

L'inversion de tous les bits d'un nombre est parfois appelée complément à un.

Pour une valeur binaire :

00101100

le complément à un est :

11010011

Cette opération ne doit pas être confondue avec le complément à deux utilisé pour représenter les entiers négatifs.

Complément à deux

Le complément à deux est obtenu en :

  1. Inversant tous les bits
  2. Ajoutant 1

Par exemple, sur 8 bits :

5 = 00000101

Complément à un :

11111010

Ajout de 1 :

11111011

Cette dernière valeur représente `-5` en complément à deux.

Différence avec la complémentarité booléenne

La complémentarité booléenne porte sur les valeurs logiques et les expressions.

Le complément à un et le complément à deux portent sur la représentation binaire des nombres.

Ces notions utilisent l'inversion des bits, mais poursuivent des objectifs différents.

Complément en théorie des ensembles

Le complément d'un ensemble `A`, relativement à un ensemble universel `U`, contient tous les éléments de `U` qui n'appartiennent pas à `A`.

Il peut être noté :

Ac

La correspondance avec l'algèbre de Boole est :

NON A ↔ Ac

Lois ensemblistes de complémentarité

Les lois booléennes deviennent :

A ∩ Ac = ∅

et :

A ∪ Ac = U

Elles correspondent respectivement à :

A ET NON A = 0

et :

A OU NON A = 1

Interprétation ensembliste

L'ensemble `A` et son complément ne possèdent aucun élément commun :

A ∩ Ac = ∅

En revanche, leur union reconstitue tout l'ensemble universel :

A ∪ Ac = U

Cette représentation illustre concrètement le principe de complémentarité.

Complément du complément d'un ensemble

(Ac)c = A

Cette identité correspond à la double négation :

NON NON A = A

Prendre deux fois le complément restitue l'ensemble initial.

Complément de l'ensemble vide

c = U

Cette identité correspond à :

NON 0 = 1

Le complément de l'ensemble vide est l'ensemble universel.

Complément de l'ensemble universel

Uc = ∅

Cette identité correspond à :

NON 1 = 0

Aucun élément extérieur à l'ensemble universel n'est considéré dans le domaine défini.

De Morgan dans les ensembles

Les lois de De Morgan en théorie des ensembles sont :

(A ∩ B)c = Ac ∪ Bc

et :

(A ∪ B)c = Ac ∩ Bc

Elles reproduisent exactement les lois booléennes de complémentation.

Complément dans les conditions de programmation

En programmation, le complément d'une condition est souvent exprimé à l'aide de :

NOT
not
!

ou :

NON

Par exemple :

SI NON FichierExiste ALORS
   CréerFichier
FIN SI

La condition est satisfaite lorsque `FichierExiste` vaut faux.

Exemple de validation

SI NON DonnéeValide ALORS
   AfficherErreur
FIN SI

Cette condition représente le complément du prédicat :

DonnéeValide

Elle pourrait aussi être nommée :

DonnéeInvalide

si ce prédicat est clairement défini.

Formulation positive et complément

Une condition positive est souvent plus facile à lire que sa négation.

Préférer :

SI CompteActif ALORS

à :

SI NON CompteInactif ALORS

Les doubles formulations négatives augmentent le risque d'erreur.

Double négation en programmation

Une expression comme :

NON NON Valeur

peut parfois être utilisée pour convertir une valeur en booléen dans certains langages.

Mathématiquement :

NON NON A = A

Cependant, dans un langage dynamique, la double négation peut transformer une valeur non booléenne en un booléen strict selon les règles de conversion du langage.

Exemple conceptuel de conversion

Dans certains langages :

NON NON Valeur

produit :

VRAI

si la valeur est considérée comme vraie, et :

FAUX

si elle est considérée comme fausse.

Ce comportement dépend du langage et dépasse l'algèbre de Boole stricte.

Complément et court-circuit

Considérons :

NON A ET B

Le complément de `A` est évalué avant le ET en raison de la priorité habituelle de la négation.

Si :

NON A = FAUX

et que le ET utilise le court-circuit, `B` peut ne pas être évalué.

La complémentation peut donc influencer le chemin d'exécution.

Négation d'une condition composée

Considérons :

NON(
   UtilisateurAuthentifié
   ET CompteActif
)

Par De Morgan :

NON UtilisateurAuthentifié
OU
NON CompteActif

L'échec survient donc lorsqu'au moins une des conditions requises est fausse.

Validation de toutes les conditions

Une validation positive peut être :

ToutesValides ←
   ConditionA
   ET ConditionB
   ET ConditionC

Son complément est :

NON ToutesValides

Par généralisation de De Morgan :

NON ConditionA
OU
NON ConditionB
OU
NON ConditionC

Au moins une condition a échoué.

Validation d'au moins une condition

Une condition positive peut être :

AuMoinsUneValide ←
   ConditionA
   OU ConditionB
   OU ConditionC

Son complément est :

NON ConditionA
ET
NON ConditionB
ET
NON ConditionC

Aucune des conditions n'est alors satisfaite.

Généralisation de De Morgan

Pour plusieurs variables :

NON(
   A1 ET A2 ET ... ET An
)
=
NON A1
OU NON A2
OU ...
OU NON An

et :

NON(
   A1 OU A2 OU ... OU An
)
=
NON A1
ET NON A2
ET ...
ET NON An

Ces formules sont très utiles dans les validations et les filtres.

Complément d'un quantificateur universel

L'expression :

Tous les éléments satisfont P.

a pour complément :

Il existe au moins un élément
qui ne satisfait pas P.

Symboliquement :

NON(POUR TOUT x, P(x))
=
IL EXISTE x TEL QUE NON P(x)

Complément d'un quantificateur existentiel

L'expression :

Il existe un élément satisfaisant P.

a pour complément :

Aucun élément ne satisfait P.

Symboliquement :

NON(IL EXISTE x, P(x))
=
POUR TOUT x, NON P(x)

Ces relations sont des extensions des lois de De Morgan.

Exemple avec un tableau

La condition :

TousPositifs

peut être définie par :

POUR TOUT Élément,
Élément > 0

Son complément est :

IL EXISTE un Élément
tel que Élément <= 0

Il suffit donc de trouver un contre-exemple pour invalider la propriété universelle.

Algorithme de recherche d'un complément

MODULE ContientValeurNonPositive(Tableau)

   POUR CHAQUE Valeur DANS Tableau
      SI NON(Valeur > 0) ALORS
         RETOURNER VRAI
      FIN SI
   FIN POUR

   RETOURNER FAUX

La négation de :

Valeur > 0

peut être simplifiée en :

Valeur <= 0

Complément des comparaisons

Les opérateurs de comparaison possèdent des compléments naturels.

Comparaison Complément
A = B A ≠ B
A ≠ B A = B
A < B A ≥ B
A < B A > B
A > B A ≤ B
A ≥ B A < B

Ces transformations supposent un domaine ordonné classique sans valeur indéterminée particulière.

Exemple de comparaison

NON(Âge >= 18)

est équivalent à :

Âge < 18

De même :

NON(Position < Taille)

est équivalent à :

Position >= Taille

La forme simplifiée est souvent plus lisible.

Cas des nombres spéciaux

Dans certains langages et domaines numériques, la complémentation directe d'une comparaison peut être plus subtile.

Par exemple, une valeur flottante spéciale comme :

NaN

peut rendre certaines comparaisons fausses de manière inhabituelle.

Il ne faut donc pas toujours remplacer mécaniquement :

NON(x < y)

par :

x >= y

sans connaître les règles du type utilisé.

Cas des valeurs nulles

Dans une logique à trois valeurs, une expression peut prendre :

VRAI
FAUX
INCONNU

Le complément de `INCONNU` demeure généralement :

INCONNU

Le principe classique :

A OU NON A = VRAI

peut alors ne plus produire vrai lorsque `A` est inconnu.

Exemple SQL avec NULL

En SQL :

Âge > 18

peut produire :

UNKNOWN

si Âge vaut NULL.

La négation :

NOT(Âge > 18)

produit également généralement :

UNKNOWN

La logique SQL ne correspond donc pas entièrement à l'algèbre booléenne classique à deux valeurs.

Limite du tiers exclu

Dans une logique à trois valeurs :

A OU NON A

peut produire :

INCONNU

lorsque :

A = INCONNU

Le principe du tiers exclu dépend donc du système logique considéré.

Dans l'algèbre de Boole classique, il reste toujours valide.

Complément dans la logique floue

En logique floue, une valeur de vérité peut être comprise entre :

0

et :

1

Un complément courant est défini par :

NON x = 1 - x

Par exemple :

NON 0,7 = 0,3

Cependant, cette logique n'est pas l'algèbre de Boole classique.

Complément et états inconnus

Lorsqu'un programme modélise une information pouvant être inconnue, il faut distinguer :

EstActif = FAUX

de :

ÉtatActif = INCONNU

Le complément de « actif » est « inactif », mais une absence d'information ne signifie pas nécessairement que l'objet est inactif.

Modélisation avec une énumération

Au lieu d'un booléen nullable, on peut employer :

ÉtatVérification
   Inconnu
   Valide
   Invalide

Cette représentation évite d'interpréter automatiquement l'absence de valeur comme le complément d'une affirmation.

Complément et sécurité

Dans une règle de sécurité, le complément doit être formulé avec précision.

Considérons :

AccèsAutorisé

Son complément logique est :

NON AccèsAutorisé

Mais cela ne précise pas pourquoi l'accès est refusé.

Plusieurs causes peuvent être possibles :

Refus par défaut

Une approche sécuritaire consiste à initialiser :

AccèsAutorisé ← FAUX

Puis à le rendre vrai uniquement lorsque toutes les conditions requises sont satisfaites.

SI
   UtilisateurAuthentifié
   ET CompteActif
   ET PossèdePermission
ALORS

   AccèsAutorisé ← VRAI

FIN SI

Toute situation non validée conserve le complément de l'autorisation.

Complément d'une autorisation composée

Si :

AccèsAutorisé =
UtilisateurAuthentifié
ET CompteActif
ET PossèdePermission

alors :

NON AccèsAutorisé

équivaut à :

NON UtilisateurAuthentifié
OU
NON CompteActif
OU
NON PossèdePermission

Le refus survient dès qu'au moins une exigence manque.

Tests unitaires de complémentarité

Une fonction booléenne peut être testée en vérifiant les propriétés :

F ET NON F = FAUX

et :

F OU NON F = VRAI

Pour une fonction booléenne stricte, ces identités doivent être vraies pour toutes les entrées.

Exemple de test conceptuel

MODULE TesterComplément(F)

   POUR CHAQUE Entrée possible

   Valeur ← F(Entrée)

      ASSERTION(
         Valeur ET NON Valeur
         =
         FAUX
      )

      ASSERTION(
         Valeur OU NON Valeur
         =
         VRAI
      )

   FIN POUR

Test du double complément

Une autre propriété fondamentale est :

NON NON F = F

Elle peut être utilisée dans les tests fondés sur les propriétés.

ASSERTION(
   NON NON F(Entrée)
   =
   F(Entrée)
)

Complément et analyse statique

Les analyseurs statiques peuvent détecter :

Ces diagnostics utilisent souvent les lois de complémentarité.

Exemple de condition redondante

SI
   EstActif
   OU NON EstActif
ALORS

   ExécuterTraitement

FIN SI

L'analyseur peut remplacer la condition par :

VRAI

et signaler que le test est inutile.

Exemple de branche impossible

SI
   EstActif
   ET NON EstActif
ALORS

   TraitementImpossible

FIN SI

L'analyseur peut déterminer que la branche ne sera jamais exécutée.

Complément et solveurs SAT

Les solveurs de satisfaisabilité booléenne manipulent continuellement des littéraux positifs et négatifs.

Pour une variable :

A

les deux littéraux sont :

A

et :

NON A

Une clause contenant les deux :

A OU NON A

est toujours satisfaite.

Clause tautologique

Une clause comme :

A OU B OU NON A

contient une variable et son complément.

Elle est donc toujours vraie, quelle que soit la valeur de `B`.

Un solveur peut supprimer cette clause sans modifier la satisfaisabilité globale de la formule.

Conjonction contradictoire

Un ensemble de contraintes exigeant simultanément :

A

et :

NON A

est incohérent.

Sous forme conjonctive :

A ET NON A

la formule est insatisfaisable.

Complément dans les diagrammes de décision

Dans un diagramme de décision binaire, les branches d'un noeud représentent souvent :

Variable = 0

et :

Variable = 1

Ces deux branches sont complémentaires et couvrent toutes les valeurs possibles de la variable.

Complément dans une machine à états

Une variable booléenne peut représenter deux états complémentaires :

PorteOuverte

et :

NON PorteOuverte

Cependant, il est préférable de ne pas mémoriser séparément :

PorteOuverte

et :

PorteFermée

si l'un peut être calculé comme le complément exact de l'autre.

Risque d'incohérence

Si deux variables sont entreposées séparément :

PorteOuverte
PorteFermée

le programme pourrait accidentellement produire :

PorteOuverte = VRAI
PorteFermée = VRAI

ou :

PorteOuverte = FAUX
PorteFermée = FAUX

Ces états violent la complémentarité si la porte ne possède que deux états.

Valeur dérivée

Une meilleure modélisation consiste à stocker une seule valeur :

PorteOuverte

et à calculer :

PorteFermée =
NON PorteOuverte

La cohérence est alors garantie automatiquement.

Limite de la modélisation binaire

Une porte réelle peut toutefois posséder un état intermédiaire :

Ouverte
Fermée
En mouvement
Bloquée
Inconnue

Dans ce cas, `PorteFermée` n'est plus toujours le complément exact de `PorteOuverte`.

Une énumération est alors plus appropriée qu'un booléen.

Complément et invariants

Un invariant peut imposer :

EstOuvert XOR EstFermé

Cela signifie qu'exactement une des deux variables doit être vraie.

Cette condition peut également être exprimée par :

EstFermé = NON EstOuvert

si le système comporte exactement deux états.

Complément dans les bases de données

Une requête peut chercher le complément d'un ensemble de lignes.

Par exemple :

  1. SELECT *
  2. FROM Utilisateurs
  3. WHERE NOT CompteActif;

Cette requête cherche les lignes où la condition `CompteActif` est fausse, sous réserve des règles concernant les valeurs nulles.

Complément d'un filtre

Si un filtre sélectionne :

Âge >= 18
ET CompteActif

son complément logique est :

Âge < 18
OU
NON CompteActif

Cette transformation provient des lois de De Morgan et du complément des comparaisons.

Exemple SQL explicite

Condition positive :

  1. WHERE Age >= 18
  2.   AND CompteActif = 1

Condition complémentaire, sans tenir compte des valeurs NULL :

  1. WHERE Age < 18
  2.    OR CompteActif <> 1

Avec des valeurs nulles, des tests supplémentaires peuvent être nécessaires.

Complément dans les moteurs de recherche

Une recherche booléenne peut exclure un critère à l'aide de NON.

Pascal ET NON Delphi

Cette expression sélectionne les documents appartenant à l'ensemble Pascal, mais pas à l'ensemble Delphi.

Elle correspond à :

Pascal ∩ Delphic

Complément relatif

Dans une recherche ou un ensemble, le complément dépend toujours d'un univers de référence.

Le complément de :

Documents contenant Delphi

désigne tous les documents de l'univers de recherche qui ne contiennent pas Delphi.

Il ne désigne pas tous les objets possibles de manière absolue.

Algorithme de négation d'une expression

MODULE Nier(Expression)

   SI Expression est VRAI ALORS
      RETOURNER FAUX
   FIN SI

   SI Expression est FAUX ALORS
      RETOURNER VRAI
   FIN SI

   SI Expression est NON X ALORS
      RETOURNER X
   FIN SI

   SI Expression est X ET Y ALORS
      RETOURNER
         Nier(X)
         OU
         Nier(Y)
   FIN SI

   SI Expression est X OU Y ALORS
      RETOURNER
         Nier(X)
         ET
         Nier(Y)
   FIN SI

   RETOURNER NON Expression

Cet algorithme pousse les négations vers les variables.

Forme normale négative

Une expression est en forme normale négative lorsque les opérateurs NON s'appliquent uniquement aux variables ou aux constantes.

Par exemple :

NON(A ET (B OU C))

peut être transformée en :

NON A
OU
(
   NON B
   ET
   NON C
)

Les lois de De Morgan et la double négation permettent cette transformation.

Étapes de transformation

Partons de :

NON(A ET (B OU C))

Première application de De Morgan :

NON A
OU
NON(B OU C)

Deuxième application :

NON A
OU
(

NON B

ET NON C
)

La négation ne porte désormais que sur les variables.

Utilité de la forme normale négative

Cette forme est utilisée dans :

Elle facilite l'analyse structurée des compléments.

Exemple en Pascal

  1. Program Complementarite;
  2.  
  3. var
  4.   CompteActif: Boolean;
  5.   CompteInactif: Boolean;
  6.  
  7. BEGIN
  8.   CompteActif := True;
  9.  
  10.   CompteInactif :=
  11.     not CompteActif;
  12.  
  13.   WriteLn(
  14.     'Compte actif : ',
  15.     CompteActif
  16.   );
  17.  
  18.   WriteLn(
  19.     'Compte inactif : ',
  20.     CompteInactif
  21.   );
  22.  
  23.   WriteLn(
  24.     'Contradiction : ',
  25.     CompteActif and CompteInactif
  26.   );
  27.  
  28.   WriteLn(
  29.     'Tautologie : ',
  30.     CompteActif or CompteInactif
  31.   );
  32. END.

Résultat conceptuel en Pascal

Comme :

CompteActif = VRAI

on obtient :

CompteInactif = FAUX

Puis :

CompteActif ET CompteInactif
=
FAUX

et :

CompteActif OU CompteInactif
=
VRAI

Exemple en Java

  1. public final class Complementarite {
  2.  
  3.     private Complementarite() {
  4.     }
  5.  
  6.     public static void main(String[] args) {
  7.         boolean compteActif = true;
  8.         boolean compteInactif =
  9.             !compteActif;
  10.  
  11.         boolean contradiction =
  12.             compteActif
  13.             && compteInactif;
  14.  
  15.         boolean tautologie =
  16.             compteActif
  17.             || compteInactif;
  18.  
  19.         System.out.println(
  20.             "Compte actif : "
  21.             + compteActif
  22.         );
  23.  
  24.         System.out.println(
  25.             "Compte inactif : "
  26.             + compteInactif
  27.         );
  28.  
  29.         System.out.println(
  30.             "Contradiction : "
  31.             + contradiction
  32.         );
  33.  
  34.         System.out.println(
  35.             "Tautologie : "
  36.             + tautologie
  37.         );
  38.     }
  39. }

Résultat du programme Java

Le programme affiche :

Compte actif : true
Compte inactif : false
Contradiction : false
Tautologie : true

Ces résultats illustrent directement les deux lois de complémentarité.

Exemple en C

  1. #include <stdbool.h>
  2. #include <stdio.h>
  3.  
  4. int main(void)
  5. {
  6.     bool compte_actif = true;
  7.     bool compte_inactif =
  8.         !compte_actif;
  9.  
  10.     bool contradiction =
  11.         compte_actif
  12.         && compte_inactif;
  13.  
  14.     bool tautologie =
  15.         compte_actif
  16.         || compte_inactif;
  17.  
  18.     printf(
  19.         "Contradiction : %d&#92;n",
  20.         contradiction
  21.     );
  22.  
  23.     printf(
  24.         "Tautologie : %d&#92;n",
  25.         tautologie
  26.     );
  27.  
  28.     return 0;
  29. }

Exemple en C#

  1. bool compteActif = true;
  2. bool compteInactif =
  3.     !compteActif;
  4.  
  5. bool contradiction =
  6.     compteActif
  7.     && compteInactif;
  8.  
  9. bool tautologie =
  10.     compteActif
  11.     || compteInactif;
  12.  
  13. Console.WriteLine(
  14.     $"Contradiction : {contradiction}"
  15. );
  16.  
  17. Console.WriteLine(
  18.     $"Tautologie : {tautologie}"
  19. );

Exemple en Visual Basic

  1. Dim CompteActif As Boolean = True
  2.  
  3. Dim CompteInactif As Boolean =
  4.     Not CompteActif
  5.  
  6. Dim Contradiction As Boolean =
  7.     CompteActif AndAlso CompteInactif
  8.  
  9. Dim Tautologie As Boolean =
  10.     CompteActif OrElse CompteInactif
  11.  
  12. Console.WriteLine(
  13.     "Contradiction : " &
  14.     Contradiction
  15. )
  16.  
  17. Console.WriteLine(
  18.     "Tautologie : " &
  19.     Tautologie
  20. )

Exemple en Python

  1. compte_actif = True
  2. compte_inactif = not compte_actif
  3.  
  4. contradiction = (
  5.     compte_actif
  6.     and compte_inactif
  7. )
  8.  
  9. tautologie = (
  10.     compte_actif
  11.     or compte_inactif
  12. )
  13.  
  14. print(
  15.     "Contradiction :",
  16.     contradiction,
  17. )
  18.  
  19. print(
  20.     "Tautologie :",
  21.     tautologie,
  22. )

Exemple en JavaScript

  1. const compteActif = true;
  2. const compteInactif = !compteActif;
  3.  
  4. const contradiction =
  5.     compteActif
  6.     && compteInactif;
  7.  
  8. const tautologie =
  9.     compteActif
  10.     || compteInactif;
  11.  
  12. console.log(
  13.     "Contradiction :",
  14.     contradiction
  15. );
  16.  
  17. console.log(
  18.     "Tautologie :",
  19.     tautologie
  20. );

Fonction de complément

MODULE Complément(Valeur)

   SI Valeur = VRAI ALORS
      RETOURNER FAUX
   SINON
      RETOURNER VRAI
   FIN SI

Cette fonction peut être simplifiée en :

MODULE Complément(Valeur)

   RETOURNER NON Valeur

Vérification des lois

MODULE VérifierComplémentarité(A)

   Complément ← NON A

   Contradiction ←
      A ET Complément

   Tautologie ←
      A OU Complément

   DoubleComplément ←
      NON Complément

   ASSERTION(
      Contradiction = FAUX
   )

   ASSERTION(
      Tautologie = VRAI
   )

   ASSERTION(
      DoubleComplément = A
   )

Complexité de la complémentation

Le complément d'une valeur booléenne simple demande :

O(1)

temps et :

O(1)

mémoire.

Pour une expression représentée par un arbre contenant `n` noeuds, la propagation complète du complément à l'aide des lois de De Morgan peut demander :

O(n)

temps.

Complément d'une grande expression

Si l'expression est déjà stockée sous forme d'arbre, chaque noeud doit être examiné :

Le coût est proportionnel à la taille de l'expression.

Bonnes pratiques

Pour utiliser correctement le principe de complémentarité, il est recommandé de :

Erreurs fréquentes

Les erreurs courantes comprennent :

Tableau récapitulatif

Notion Description
Complément Valeur logique opposée
Négation Opération produisant le complément
Non-contradiction A ET NON A = FAUX
Tiers exclu A OU NON A = VRAI
Double négation NON NON A = A
Complément de faux NON FAUX = VRAI
Complément de vrai NON VRAI = FAUX
Contradiction Expression toujours fausse
Tautologie Expression toujours vraie
De Morgan Transformation du complément d'une expression composée
Complément bit à bit Inversion individuelle de chaque bit
Complément ensembliste Éléments extérieurs à un sous-ensemble
Forme normale négative Négations appliquées uniquement aux littéraux
Unicité du complément Chaque élément booléen possède un seul complément

Formules essentielles

NON 0 = 1
NON 1 = 0
A ET NON A = 0
A OU NON A = 1
NON NON A = A
NON(A ET B) = NON A OU NON B
NON(A OU B) = NON A ET NON B
F ET NON F = 0
F OU NON F = 1

Applications

Le principe de complémentarité est utilisé dans :

Avantages

Le principe de complémentarité présente plusieurs avantages :

Limites et précautions

Le principe de complémentarité possède certaines limites :

Remarque

Le principe de complémentarité exprime l'opposition fondamentale entre une proposition et sa négation. Dans l'algèbre de Boole classique, une variable et son complément couvrent ensemble toutes les possibilités, mais ne peuvent jamais être vrais simultanément. Cette relation produit les deux identités centrales :

A ET NON A = FAUX

et :

A OU NON A = VRAI

Ces lois correspondent respectivement au principe de non-contradiction et au principe du tiers exclu. Elles permettent de simplifier les expressions, de détecter les branches impossibles, de reconnaître les conditions toujours vraies et de transformer correctement les négations complexes.

En programmation, la complémentarité intervient chaque fois qu'une condition est inversée, qu'une règle d'échec est déduite d'une règle de réussite ou qu'un signal actif est converti en son état opposé. Son utilisation doit toutefois tenir compte des valeurs nulles, des états inconnus et des systèmes comportant plus de deux états.

La maîtrise du principe de complémentarité prépare directement à l'étude des lois de De Morgan, de l'équivalence logique, des tautologies, des contradictions, des formes normales et des méthodes avancées de simplification des fonctions booléennes.



Dernière mise à jour : Jeudi, le 16 juillet 2026