Vous êtes sur la page 1sur 7

Département d’Informatique

LICENCE 2ème année


Travaux Dirigés de Logique

TD1 - Calculs sur les fonctions boolèennes

Dans toute la suite, B = {0, 1} et pour tout n ∈ N, Fn dénotera l’ensemble des fonctions boolèennes à n

− →

variables et Sf = { b ∈ Bn | f ( b ) = 1} est le support de la fonction f ∈ Fn .

1 Supports des fonctions boolèennes


1. Donnez les supports des fonctions boolèennes suivantes :

— f (x1 , x2 ) = NAND2 (x1 ⇐⇒ x2 , x1 + x2 ).


Réponse :

• f (0, 0) = NAND2 (0 ⇐⇒ 0, 0 + 0) = NAND2 (0, 1) = NAND2 (1, 1) = 0.

• f (0, 1) = NAND2 (0 ⇐⇒ 1, 0 + 1 = NAND2 (1, 0) = NAND2 (0, 0) = 1.

• f (1, 0) = NAND2 (1 ⇐⇒ 0, 1 + 0 = NAND2 (1, 1) = NAND2 (0, 1) = 1.

• f (1, 1) = NAND2 (1 ⇐⇒ 1, 1 + 1 = NAND2 (0, 1) = NAND2 (1, 1) = 0.

Donc
Sf = {(0, 1), (1, 0)}.

Par conséquent, f = XOR.

— g(x1 , x2 , x3 ) = (x1 + x3 ) ⇒ x2 x3 .
Réponse :

Cherchons x1 , x2 , x3 ∈ B tels que g(x1 , x2 , x3 ) = 0 ce qui est équivalent à

x1 + x3 = 1 et x2 x3 = 0
x2 x3 = 0 est équivalent à (x2 , x3 ) = (0, 0) ou (1, 0) ou (1, 1).

• Pour x3 = 0, x1 + x3 = 1 est équivalent à x1 = 0 et donc (x1 , x2 , x3 ) = (0, 0, 0) ou (0, 1, 0).

• Pour x3 = 1, x1 + x3 = 1 est équivalent à x1 = 0 ou 1 et donc (x1 , x2 , x3 ) = (0, 1, 1) ou


(1, 1, 1).

Donc
Sg = {(0, 0, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0)}.
— h(x1 , x2 , x3 , x4 ) = NAND2 (x2 , NOR2 (x1 , x3 )) + x2 x4
Réponse :

Cherchons x1 , x2 , x3 , x4 ∈ B tels que h(x1 , x2 , x3 , x4 ) = 0 ce qui est équivalent à

NAND2 (x2 , NOR2 (x1 , x3 )) = 0 et x2 x4 = 0

NAND2 (x2 , NOR2 (x1 , x3 )) = 0 est équivalent à x2 = 1 et NOR2 (x1 , x3 ) = 1

ce qui est équivalent à


x2 = 1 et x1 = 0 et x3 = 0.

x2 x4 = 0 = x4 car x2 = 1 et donc, x4 = 1.
Donc, h(x1 , x2 , x3 , x4 ) = 0 si et seulement si (x1 , x2 , x3 , x4 ) = (0, 1, 0, 1). Donc,

Sh = B4 \ {(0, 1, 0, 1)}.

— k(x1 , x2 , x3 , x4 ) = x1 x2 + x2 x3 + x3 x4 + x4 x1 .
Réponse :

Cherchons x1 , x2 , x3 , x4 ∈ B tels que k(x1 , x2 , x3 , x4 ) = 0 ce qui est équivalent à

x1 x2 = 0 et x2 x3 = 0 et x3 x4 = 0 et x4 x1 = 0
En considérant la contrainte x1 x2 = 0, alors trois cas sont possibles :

• (x1 , x2 ) = (0, 0) et x3 x4 = 0 ce qui est équivalent à

(x1 , x2 , x3 , x4 ) = (0, 0, 0, 0) ou (0, 0, 0, 1) ou (0, 0, 1, 0).


• (x1 , x2 ) = (0, 1) et x3 = 0 et x3 x4 = 0 ce qui est équivalent à

(x1 , x2 , x3 , x4 ) = (0, 1, 0, 0) ou (0, 1, 0, 1).


• (x1 , x2 ) = (1, 0) et x4 = 0 et x3 x4 = 0 ce qui est équivalent à

(x1 , x2 , x3 , x4 ) = (1, 0, 0, 0) ou (1, 0, 1, 0).

Sk = B4 \ {(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 0), (0, 1, 0, 1), (1, 0, 0, 0), (1, 0, 1, 0).}.

2. Exprimez tous les éléments de F2 en utilisant seulement par composition l’opérateur NAND2 et
les fonctions projections . Idem en utilisant l’opérateur NOR2 .
Réponse :

Remarque : L’existence de forme la normale conjoctive/disjonctive pour toute fonction booléenne


implique que toute fonction boolénne peut être obtenue par composition en utilsant :

l’opérateur unaire de négation et les deux opérateurs binaires . et +

Donc il suffit d’engendrer la négation et les opérateurs . et + pour garantir la génération de toutes
les fonctions booléennes !
Soient x1 , x2 ∈ B.

• NAND2 (x1 , x1 ) = x1

2
• NAND2 (NAND2 (x1 , x2 ), NAND2 (x1 , x2 )) = NAND2 (x1 , x2 ) = x1 x2 .

• NAND2 (NAND2 (x1 , x2 ), NAND2 (x2 , x2 )) = x1 + x2 = x1 + x2 .

Donc toute fonction booléenne peut être obtenue, par composition en utilisant seulement les
projections et la fonction NAND2 .
Soient x1 , x2 ∈ B

• NOR2 (x1 , x1 ) = x1

• NOR2 (NOR2 (x1 , x2 ), NOR2 (x1 , x2 )) = NOR2 (x1 , x2 ) = x1 + x2 .

• NOR2 (NOR2 (x1 , x2 ), NOR2 (x2 , x2 )) = x1 .x2 = x1 .x2 .

Donc toute fonction booléenne peut être obtenue, par composition en utilisant seulement les pro-
jections et la fonction NOR2 .

3. Existe-t-il un élément de F2 , autre que NAND2 et NOR2 , qui permet, seul par composition,
d’exprimer tous les éléments de F2 ?
Réponse :

• Soient f ∈ F2 telle que f (0, 0) = 0 et g ∈ Fn obtenue par composition, en utilisant les fonctions
de projéctions et la fonction f . Alors, on a nécessairement g(0, ..., 0) = 0.
Par conséquent, comme NOR2 (0, 0) = 1, alors NOR2 ne peux pas être obtenue par composition
en utilisant seulement l’opérateur NAND2 et les fonctions projections.

• Soient f ∈ F2 telle que f (1, 1) = 1 et g ∈ Fn obtenue par composition, en utilisant les fonctions
de projéctions et la fonction f . Alors, on a nécessairement g(1, ..., 1) = 1.
Par conséquent, comme NOR2 (1, 1) = 0, alors NOR2 ne peux pas être obtenue par composition
en utilisant seulement l’opérateur NAND2 et les fonctions projections.

• Une fonction f ∈ F2 qui ne déponds explicitement que d’une seule variable


(f (x1 , x2 ) = x1 , f (x1 , x2 ) = x1 , f (x1 , x2 ) = x2 ou f (x1 , x2 ) = x2 ) ne peut pas
engendrer seule, par composition, et en utilisant les fonctions projections les fonctions
boolénnes qui dépondent explicitement de tous leurs arguments comme par exemple NOR2 .

Les fonctions f ∈ F2 telles que f (0, 0) = 0 ou f (1, 1) = 1 ou qui ne dépondent explicitement


que d’une seule variable sont en rouge dans la liste ci-dessous et d’après ce qui précède de
telles fonctions ne permettent pas d’engendrer seule par composition et en utilisant les fonctions
projections toutes les fonctions booléennes.

0 0 0 0 0 0 0 1 1 0
0: :: .: ;: NOR2 :
0 0 1 0 0 1 0 0 0 0

0 0 0 1 1 0 0 1 1 0 1 1
x2 : XOR : x1 : x1 : ⇔: x2 :
1 1 1 0 1 0 0 1 0 1 0 0

0 1 1 0 1 1 1 1 1 1
+: ⇐: NAND2 : ⇒: 1:
1 1 1 1 1 0 0 1 1 1

3
Donc aucun autre élément de F2 , autre que NAND2 et NOR2 , ne permet, seul par composition,
et en utilisant les fonctions de projections d’exprimer tous les éléments de F2 .

4. Soient f1 , f2 ∈ Fn . Exprimer en fonction de f1 et f2 , les fonction boolèennes dont les supports sont
Bn \ Sf1 , Sf1 ∩ Sf2 , Sf1 ∪ Sf2 , Sf1 \ Sf2 , Sf1 ∆Sf2 et Pn−1 (Sf1 ) où \, ∩, ∪, ∆ respectivement Pn−1
est la soustraction, l’intersection, l’union, la différence symétrique ensemblistes respectivement la
projection sur les n − 1 premières composantes (Les définitions de ses opérations seront rappelées
au tableau).
Réponse :

Rappels :
Soient A et B deux ensembles.

• A ∪ B = {e|e ∈ A ou e ∈ B} (Union).

• A ∩ B = {e|e ∈ A et e ∈ B} (Interssection).

• A \ B = {e|e ∈ A et e ∈
/ B} (Différence).

• P(A) = {E|E ⊆ A} (Ensemble des parties).

• A ∆ B = (A \ B) ∪ (B \ A) (Différence symétrique).

• Soient n > 1 et E ⊆ An . Alors,

Pn−1 (E) = {(e1 , ..., en−1 ) | ∃en ∈ B, (e1 , ..., en−1 , en ) ∈ E}.

Pn−1 (E) est la projection sur les n − 1 premières composantes

Soient f1 , f2 ∈ Fn . Alors,

• Bn \ Sf1 = {(ε1 , ..., εn ) ∈ Bn | (ε1 , ..., εn ) ∈ / Sf1 } = {(ε1 , ..., εn ) ∈ Bn | f1 (ε1 , ..., εn ) = 0} =
n
{(ε1 , ..., εn ) ∈ B | f 1 (ε1 , ..., εn ) = 1} = Sf 1 .

• Sf1 ∩ Sf2 = {(ε1 , ..., εn ) ∈ Bn | (ε1 , ..., εn ) ∈ Sf1 et (ε1 , ..., εn ) ∈ Sf2 } = {(ε1 , ..., εn ) ∈
Bn | f1 (ε1 , ..., εn ).f2 (ε1 , ..., εn ) = 1} = Sf1 .f2 .

• Sf1 ∩ Sf2 = {(ε1 , ..., εn ) ∈ Bn | (ε1 , ..., εn ) ∈ Sf1 ou (ε1 , ..., εn ) ∈ Sf2 } = {(ε1 , ..., εn ) ∈
Bn | f1 (ε1 , ..., εn ) + f2 (ε1 , ..., εn ) = 1} = Sf1 +f2 .

• Sf1 \ Sf2 = Sf1 ∩ (Bn \ Sf1 ) = Sf1 .f 2 .

• Sf1 ∆ Sf2 = (Sf1 \ Sf2 ) ∩ (Sf1 \ Sf2 ) = Sf1 .f + f 1 .f2 = SXOR(f1 ,f2 ) .
2

• Pn−1 (Sf1 ) = {(e1 , ..., en−1 ) | ∃en ∈ B, f1 (e1 , ..., en−1 , en ) = 1} = {(e1 , ..., en−1 ) | ∃en ∈
B, f1 (e1 , ..., en−1 , 0)+ f1 (e1 , ..., en−1 , 1) = 1} = Sg0 +g1 où g0 et g1 sont les fonctions booléennes
telles que g0 , g1 ∈ Fn−1 et pour tout (ε1 , ..., εn−1 ) ∈ Bn−1 ,

g0 (ε1 , ..., εn−1 ) = f1 (ε1 , ..., εn−1 , 0) et g1 (ε1 , ..., εn−1 ) = f1 (ε1 , ..., εn−1 , 1).

2 Fonctions génératrices
Soit C(x1 , x2 , x3 ) = x1 x2 + x1 x3 .
1. Montrez que pour tout entier n > 0 et pour toute fonction f ∈ Fn ,

f (x1 , ..., xn−1 , xn ) = C(xn , f (x1 , ..., xn−1 , 1), f (x1 , ..., xn−1 , 0)).

4
Réponse :
Remarque : La fonction C représente la conditionnelle :

C(x1 , x2 , x3 ) = si x1 alors x2 sinon x3 .


Posons g(x1 , ..., xn−1 , xn ) = C(xn , f (x1 , ..., xn−1 , 1), f (x1 , ..., xn−1 , 0)).
Alors, Sf = Sg .
En effet,

f (ε1 , ..., εn−1 , 1) si εn = 1
∀(ε1 , ..., εn−1 , εn ) ∈ Bn , g(ε1 , ..., εn−1 , εn ) =
f (ε1 , ..., εn−1 , 0) si εn = 0

Par conséquent,

∀(ε1 , ..., εn−1 , εn ) ∈ Bn , g(ε1 , ..., εn−1 , εn ) = f (ε1 , ..., εn−1 , εn ).

2. En utilisant la question précèdente, exprimer la fonction f (x1 , x2 ) = NAND2 (x1 ⇐⇒ x2 , x1 + x2 )


de F2 en utilisant seulement la fonction C et les constantes 0 et 1.
Réponse :
D’après ce qui précède, on a :

f (x1 , x2 ) = C(x2 , f (x1 , 1), f (x1 , 0)) = C(x2 , C(x1 , f (1, 1), f (0, 1)), C(x1 , f (1, 0), f (0, 0))) = C(x2 , C(x1 , 0, 1), C(x1 , 1, 0)).

3. Déduire de la question 1., que toute fonction boolèenne peut s’exprimer en utilisant seulement la
fonction C et les constantes 0 et 1.
Réponse :
Pour tout f ∈ F1 , on a f (x1 ) = C(x1 , f (1), f (0)) et comme f (0), f (1) ∈ B alors la
propriété est vraie pour toutes les fonctions de F1 .
Soit n ∈ N et supposons que la propriété est vraie pour toutes les fonctions de Fn et soit
f ∈ Fn+1 . Alors,

f (x1 , ..., xn , xn+1 ) = C(xn+1 , f (x1 , ..., xn , 1), f (x1 , ..., xn , 0)).
Posons g1 (x1 , ..., xn ) = f (x1 , ..., xn , 1) et g2 (x1 , ..., xn ) = f (x1 , ..., xn , 0).
Comme g1 , g2 ∈ Fn , alors

g1 (x1 , ..., xn ) = expr1 (x1 , ..., xn ) et g2 (x1 , ..., xn ) = expr2 (x1 , ..., xn )

où expr1 et expr2 sont deux expressions utilisant seulement la fonction C et les constantes 0 et
1.
Donc,

f (x1 , ..., xn , xn+1 ) = C(xn+1 , expr1 (x1 , ..., xn ), expr2 (x1 , ..., xn )) = expr(x1 , ..., xn , xn+1 ).

et expr est une expression utilisant seulement la fonction C et les constantes 0 et 1.

4. Donnez en fonction de n un majorant du nombre d’occurrences de C nécéssaire pour écrire une


fonction f ∈ Fn en utilisant seulement la fonction C et les constantes 0 et 1.
Réponse :
Pour tout n ∈ N, posons :

un = majorant du nombre d’occurrences de C nécéssaire pour écrire une fonction f ∈ Fn en


utilisant seulement la fonction C et les constantes 0 et 1.

5
Alors,
u1 = 1 et un = 2 ∗ un−1 + 1 pour n > 1.
Par conséquent,
n−1
X
∀n ∈ N, un = 2i = 2n − 1.
i=1

3 Codage des fonctions boolèennes


1. Soit bn : Bn 7→ J0, 2n − 1K l’application définie par :

bn (ε1 , ..., εn ) = ε1 + ε2 2 + ... + εn 2n−1

Montrez que bn est une bijection.


Réponse :
Pour tout (ε1 , ..., εn ) ∈ Bn ,

0 = bn (0, ..., 0) ≤ bn (ε1 , ..., εn ) ≤ bn (1, ..., 1) = 2n − 1.

Montrons que bn est surjective.

• 0 = bn (0, ..., 0) et donc 0 est dans l’image de bn .

• Soit k ∈ N, tel que 0 ≤ k < 2n − 1 et ∃(ε1 , ..., εn ) ∈ Bn , k = bn (ε1 , ..., εn ) et donc k


appartient à l’image de bn .
Soit m = max({j ∈ J1, nK | ε1 = ε2 = ... = εj = 1}). Alors, m < n. En effet, si m = n, alors
(ε1 , ..., εn ) = (1, ..., 1) et donc k = bn (1, ..., 1) = 2n − 1 ce qui est absurde.
Par définition de m on a εm+1 = 0.
Donc, (ε1 , ..., εn ) = (1, ..., 1, 0, εm+2 , ..., εn ).
Soit (ε′1 , ..., ε′n ) = (0, ..., 0, 1, εm+2 , ..., εn ). Alors, on a

bn (ε1 , ..., εn ) = 1+1∗2+...+1∗2m−1+0∗2m+εm+2 ∗2m+1 +...+εn ∗2n−1 = 2m −1+εm+2∗2m +...+εn ∗2n−1 = k


bn (ε′1 , ..., ε′n ) = 0+0∗2+...+0∗2m−1+1∗2m+εm+2 ∗2m+1 +...+εn ∗2n−1 = 2m +εm+2 ∗2m +...+εn ∗2n−1 = k+1.

Comme bn est surjective et card(Bn ) = card(J0, 2n − 1K) = 2n , alors bn elle est nécessairement
injective et donc bn est une bijection.

n
2. Soit codn : Fn 7→ J0, 22 − 1K l’application définie par
X →

codn (f ) = 2bn ( ε )


ε ∈Sf

(a) Montrez que codn est une bijection.


Réponse :

n
∀n ∈ N, ∀f ∈ Fn , 0 ≤ codn (f ) ≤ 22 − 1
Montrons que codn est surjective.

• codn (0(x1 , ..., xn )) = 0

6
n
• Soit k ∈ N, tel que 0 ≤ k < 22 − 1 et ∃f ∈ Fn , k = codn (f ) et donc k appartient
à l’image de codn .
Soit m = max({j ∈ J0, 2n − 1K | J0, jK ⊆ {bn (ε1 , ..., εn ) | (ε1 , ..., εn ) ∈ Sf }}). Alors,
n
m < 2n − 1. En effet, si m = 2n , alors k = codn (f ) = 22 − 1!.
′ ′ n ′ ′
soit (ε1 , ..., εn ) ∈ B tel que bn (ε1 , ..., εn ) = m + 1 Soit g ∈ Fn tel que
Sg = (Sf \ {(ε1 , ..., εn ) ∈ Bn | bn (ε1 , ..., εn ) ≤ m}) ∪ {(ε′1 , ..., ε′n )}.
Alors,
codn (g) = m + 1 = codn (f ) + 1.
n n
Donc, codn et surjective et comme card(Fn ) = card(J0, 22 − 1K) = 22 , alors codn est aussi
injective donc elle est bijective.
(b) Explicitez complétement cod1 , cod2 .
Réponse :

cod1 (0(x1 )) = 0 ; cod1 (x1 )) = 1 ; cod1 (x1 ) = 2 ; cod1 (1(x1 )) = 3.


cod2 (0(x1 , x2 )) = 0 ; cod2 (x1 x2 ) = 8 ; ... cod1 (x1 + x2 ) = 254 ; cod1 (1(x1 , x2 )) = 255.

(c) Cherchez une relation entre codn (f ) et codn (f ).


Réponse :
X →
− n
codn (f ) + codn (f ) = 2bn ( ε ) = 22 − 1.


ε ∈Bn

3. Expliquez comment modéliser l’addition des entiers représentés en base 2 sur n bits en utilisant
certaines fonctions booléennes.
Réponse :
Soient a, b et c trois entiers positifs tels que c = a + b dont les repréntations en base deux sont
a = ak ak−1 ...a2 a1 , b = bk bk−1 ...b2 b1 et c = a + b = ck ck−1 ...c2 c1 .

rk ... ri ... r2 r1
ak ... ai ... a2 a1
+
bk ... bi ... b2 b1
ck ... ci ... c2 c1

r1 = 0,
c1 = res_ad_a_r(a1 , b1 , r1 ),
ci = res_ad_a_r(ai , bi , ri ) pour i ∈ J2, kK où ri = ret_ad_a_r(ai−1 , bi−1 , ri−1 ).
res_ad_a_r est le résultat de l’addition de deux bits avec retenue (en prenant en compte la
retenue de l’étape précédente).
ret_ad_a_r est la retenue de l’addition de deux bits avec retenue (en prenant en compte la
retenue de l’étape précédente).

Sres_ad_a_r = {(0, 1, 0), (1, 0, 0), (1, 1, 1)}.


res_ad_a_r(ai , bi , ri ) = ai bi r i + ai bi r i + ai bi ri .

Sret_ad_a_r = {(0, 1, 1), (1, 0, 1), (1, 1, 0), (1, 1, 1)}.

ret_ad_a_r(ai , bi , ri ) = ai bi ri + ai bi ri + ai bi r i + ai bi ri .

Vous aimerez peut-être aussi