Está en la página 1de 11

10.

Funciones booleanas
Ejercicios resueltos
Ejercicio 1.
Determinar expresiones booleanas que representen las funciones booleanas
elementales de dos variables y usarlas para definir aquellas que no estn
definidas en el guin de la prctica.
Solucin:
Comenzamos insertando todas las funciones booleanas de dos variables que
ya han sido definidas:
In[1]:= Compl@x_D := Mod@x + 1, 2D
f0@x_, y_D := 0
f3@x_, y_D := Compl@xD
f5@x_, y_D := Compl@yD
f8@x_, y_D := x y
f7@x_, y_D := Compl@f8@x, yDD
f10@x_, y_D := y
f12@x_, y_D := x
f14@x_, y_D := Compl@f8@Compl@xD, Compl@yDDD
f15@x_, y_D := 1
Podemos definir f1[] como el complemento de f14[] ya que su tabla de
verdad es justamente la contraria a la de f14[]:
In[11]:= f1@x_, y_D := Compl@f14@x, yDD
Definimos f2[] utilizando la orden Which[] y f13[] como el complemento
de f2[]:
In[12]:= f2@x_, y_D := Which@x 0 && y 1, 1, True, 0D
f13@x_, y_D := Compl@f2@x, yDD
Veamos como realmente f2[] est bien definida:
Ejercicios 10.nb 1
In[14]:= f2@0, 0D
f2@0, 1D
f2@1, 0D
f2@1, 1D
Out[14]= 0
Out[15]= 1
Out[16]= 0
Out[17]= 0
Siguiendo la misma tcnica podemos definir f4[] y f11[]:
In[18]:= f4@x_, y_D := Which@x 1 && y 0, 1, True, 0D
f11@x_, y_D := Compl@f4@x, yDD
Por ltimo podemos definir f6[] usando la orden Mod[] ya que su tabla
coindide con el resto de dividir x+y entre 2:
In[20]:= f6@x_, y_D := Mod@x + y, 2D
En efecto,
In[21]:= f6@0, 0D
f6@0, 1D
f6@1, 0D
f6@1, 1D
Out[21]= 0
Out[22]= 1
Out[23]= 1
Out[24]= 0
Teminamos definiendo f9[] como el complemento de la anterior:
In[25]:= f9@x_, y_D := Compl@f6@x, yDD
Ejercicios 10.nb 2
Ejercicio 2.
Dadas las siguientes funciones booleanas:
a) f(x, y, z) = (x (y z

)) z.
b) g(x, y, z) = (x ( y

z)) (((x y) z

) x).
c) h(x, y, z, t) = (x + t) ((z y) x).
Calcular las tablas de verdad, las formas cannicas en mintrminos y
maxtrminos de las funciones booleanas f, g y h.
Solucin:
a) Comenzamos calculando la tabla de verdad introducciendo primero
todas las funciones booleanas que intervienen en la definicin de f:
In[26]:= Compl@a_D := Mod@a + 1, 2D;
f8@a_, b_D := a b;
f7@x_, y_D := Compl@f8@x, yDD;
n = 3;
x = Table@0, 8t, n<D;
funcion := f8@f7@x@@1DD, f8@x@@2DD, Compl@x@@3DDDDD, x@@3DDD;
tabla = Table@0, 8r, H2^n + 1L<, 8s, n + 1<D;
For@k = 1, k < n + 1, k++, tabla@@1, kDD = \!\H"x" \_ k\LD;
tabla@@1, n + 1DD = "Exp"; For@i = 0, i < 2^n, i++,
j = i;
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 0;
tabla@@i + 2, fDD = 0, x@@fDD = 1; tabla@@i + 2, fDD = 1D;D;
tabla@@i + 2, n + 1DD = funcion;D; TableForm@tablaD
Out[34]//TableForm=
x
1
x
2
x
3
Exp
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1
Calculamos ahora su expresin en maxterminos y en minterminos:
Ejercicios 10.nb 3
In[35]:= Compl@a_D := Mod@a + 1, 2D;
f8@a_, b_D := a b;
f7@x_, y_D := Compl@f8@x, yDD;
n = 3;
cadena = "";
cadena2 = "";
cad = "";
cad2 = "";
cero = True;
uno = True;
x = Table@0, 8t, n<D;
funcion := f8@f7@x@@1DD, f8@x@@2DD, Compl@x@@3DDDDD, x@@3DDD;
For@i = 0, i < 2^n, i++,
j = i;
cad = "";
cad2 = "";
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 1; If@f n,
cad = StringJoin@"x", ToString@fD, cadD,
cad = StringJoin@"x", ToString@fD, " . ", cadDD;
If@f n, cad2 = StringJoin@"Hx", ToString@fD, "L", cad2D,
cad2 = StringJoin@"Hx", ToString@fD, "L", " + ", cad2DD;, x@@fDD = 0;
If@f n,
cad = StringJoin@"Hx", ToString@fD, "L", cadD,
cad = StringJoin@"Hx", ToString@fD, "L", " . ", cadDD; If@f n,
cad2 = StringJoin@"x", ToString@fD, cad2D,
cad2 = StringJoin@"x", ToString@fD, " + ", cad2DD;
D;
D;
If@Mod@funcion, 2D 1,
If@cadena == "", cadena = StringJoin@cadena, "H", cad, "L"D,
cadena = StringJoin@cadena, " + H", cad, "L"DD;
cero = False;,
If@cadena2 "", cadena2 = StringJoin@cadena2, "H", cad2, "L"D,
cadena2 = StringJoin@cadena2, " . H", cad2, "L"DD; uno = False;D;D;
If@cero, Print@"Es una funcin constante 0."D,
Print@"No es la funcin constante 0 y la
forma cannica en mintrminos es: ", cadenaDD;
If@uno, Print@"Es una tautologa."D, Print@"No es la funcin
constante 1 y la forma cannica en maxtrminos es: ", cadena2DD;
No es la funcin constante 0 y la forma cannica en mintrminos es:
Hx1 . x2 . x3L + Hx1 . Hx2L . x3L +
HHx1L . x2 . x3L + HHx1L . Hx2L . x3L
Ejercicios 10.nb 4
No es la funcin constante 1 y la forma cannica en maxtrminos es:
HHx1L + Hx2L + x3L . HHx1L + x2 +
x3L . Hx1 + Hx2L + x3L . Hx1 + x2 + x3L
b)
In[48]:= Compl@a_D := Mod@a + 1, 2D;
f8@a_, b_D := a b;
f14@x_, y_D := Compl@f8@Compl@xD, Compl@yDDD;
f1@x_, y_D := Compl@f14@x, yDD;
f4@x_, y_D := Which@x 1 && y 0, 1, True, 0D;
f11@x_, y_D := Compl@f4@x, yDD;
n = 3;
x = Table@0, 8t, n<D;
funcion := f1@f8@x@@1DD, f14@Compl@x@@2DDD, x@@3DDDD,
f11@f14@f8@x@@1DD, x@@2DDD, Compl@x@@3DDDD, x@@1DDDD ;
tabla = Table@0, 8r, H2^n + 1L<, 8s, n + 1<D;
For@k = 1, k < n + 1, k++, tabla@@1, kDD = \!\H"x" \_ k\LD;
tabla@@1, n + 1DD = "Exp"; For@i = 0, i < 2^n, i++,
j = i;
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 0;
tabla@@i + 2, fDD = 0, x@@fDD = 1; tabla@@i + 2, fDD = 1D;D;
tabla@@i + 2, n + 1DD = funcion;D; TableForm@tablaD
Out[59]//TableForm=
x
1
x
2
x
3
Exp
0 0 0 1
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0
Calculamos ahora su expresin en maxterminos y en minterminos:
Ejercicios 10.nb 5
In[60]:= Compl@a_D := Mod@a + 1, 2D;
f8@a_, b_D := a b;
f14@x_, y_D := Compl@f8@Compl@xD, Compl@yDDD;
f1@x_, y_D := Compl@f14@x, yDD;
f4@x_, y_D := Which@x 1 && y 0, 1, True, 0D;
f11@x_, y_D := Compl@f4@x, yDD;
n = 3;
cadena = "";
cadena2 = "";
cad = "";
cad2 = "";
cero = True;
uno = True;
x = Table@0, 8t, n<D;
funcion := f1@f8@x@@1DD, f14@Compl@x@@2DDD, x@@3DDDD,
f11@f14@f8@x@@1DD, x@@2DDD, Compl@x@@3DDDD, x@@1DDDD ;
For@i = 0, i < 2^n, i++,
j = i;
cad = "";
cad2 = "";
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 1; If@f n,
cad = StringJoin@"x", ToString@fD, cadD,
cad = StringJoin@"x", ToString@fD, " . ", cadDD;
If@f n, cad2 = StringJoin@"Hx", ToString@fD, "L", cad2D,
cad2 = StringJoin@"Hx", ToString@fD, "L", " + ", cad2DD;, x@@fDD = 0;
If@f n,
cad = StringJoin@"Hx", ToString@fD, "L", cadD,
cad = StringJoin@"Hx", ToString@fD, "L", " . ", cadDD; If@f n,
cad2 = StringJoin@"x", ToString@fD, cad2D,
cad2 = StringJoin@"x", ToString@fD, " + ", cad2DD;
D;
D;
If@Mod@funcion, 2D 1,
If@cadena == "", cadena = StringJoin@cadena, "H", cad, "L"D,
cadena = StringJoin@cadena, " + H", cad, "L"DD;
cero = False;,
If@cadena2 "", cadena2 = StringJoin@cadena2, "H", cad2, "L"D,
cadena2 = StringJoin@cadena2, " . H", cad2, "L"DD; uno = False;D;D;
If@cero, Print@"Es una funcin constante 0."D,
Print@"No es la funcin constante 0 y la
forma cannica en mintrminos es: ", cadenaDD;
If@uno, Print@"Es una tautologa."D, Print@"No es la funcin
constante 1 y la forma cannica en maxtrminos es: ", cadena2DD;
No es la funcin constante 0 y la forma cannica en mintrminos es:
HHx1L . x2 . Hx3LL + HHx1L . Hx2L . Hx3LL
Ejercicios 10.nb 6
No es la funcin constante 1 y la forma cannica en maxtrminos es:
HHx1L + Hx2L + Hx3LL . HHx1L + Hx2L +
x3L . HHx1L + x2 + Hx3LL . HHx1L + x2 +
x3L . Hx1 + Hx2L + Hx3LL . Hx1 + x2 + Hx3LL
c) Veamos ahora cual es la tabla de verdad para h: h(x, y, z, t) = (x + t)
((z y) x).
In[76]:= Compl@a_D := Mod@a + 1, 2D;
f8@a_, b_D := a b;
f14@x_, y_D := Compl@f8@Compl@xD, Compl@yDDD;
f6@x_, y_D := Mod@x + y, 2D;
f9@x_, y_D := Compl@f6@x, yDD;
n = 4;
x = Table@0, 8t, n<D;
funcion := f6@f14@x@@1DD, x@@4DDD, f9@f8@x@@3DD, x@@2DDD, x@@1DDDD ;
tabla = Table@0, 8r, H2^n + 1L<, 8s, n + 1<D;
For@k = 1, k < n + 1, k++, tabla@@1, kDD = \!\H"x" \_ k\LD;
tabla@@1, n + 1DD = "Exp"; For@i = 0, i < 2^n, i++,
j = i;
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 0;
tabla@@i + 2, fDD = 0, x@@fDD = 1; tabla@@i + 2, fDD = 1D;D;
tabla@@i + 2, n + 1DD = funcion;D; TableForm@tablaD
Out[86]//TableForm=
x
1
x
2
x
3
x
4
Exp
0 0 0 0 1
0 0 0 1 0
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 1
1 1 1 0 0
1 1 1 1 0
Calculamos ahora su expresin en maxterminos y en minterminos:
Ejercicios 10.nb 7
In[87]:= Compl@a_D := Mod@a + 1, 2D;
f8@a_, b_D := a b;
f14@x_, y_D := Compl@f8@Compl@xD, Compl@yDDD;
f6@x_, y_D := Mod@x + y, 2D;
f9@x_, y_D := Compl@f6@x, yDD;
n = 4;
cadena = "";
cadena2 = "";
cad = "";
cad2 = "";
cero = True;
uno = True;
x = Table@0, 8t, n<D;
funcion := f6@f14@x@@1DD, x@@4DDD, f9@f8@x@@3DD, x@@2DDD, x@@1DDDD ;
For@i = 0, i < 2^n, i++,
j = i;
cad = "";
cad2 = "";
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 1; If@f n,
cad = StringJoin@"x", ToString@fD, cadD,
cad = StringJoin@"x", ToString@fD, " . ", cadDD;
If@f n, cad2 = StringJoin@"Hx", ToString@fD, "L", cad2D,
cad2 = StringJoin@"Hx", ToString@fD, "L", " + ", cad2DD;, x@@fDD = 0;
If@f n,
cad = StringJoin@"Hx", ToString@fD, "L", cadD,
cad = StringJoin@"Hx", ToString@fD, "L", " . ", cadDD; If@f n,
cad2 = StringJoin@"x", ToString@fD, cad2D,
cad2 = StringJoin@"x", ToString@fD, " + ", cad2DD;
D;
D;
If@Mod@funcion, 2D 1,
If@cadena == "", cadena = StringJoin@cadena, "H", cad, "L"D,
cadena = StringJoin@cadena, " + H", cad, "L"DD;
cero = False;,
If@cadena2 "", cadena2 = StringJoin@cadena2, "H", cad2, "L"D,
cadena2 = StringJoin@cadena2, " . H", cad2, "L"DD; uno = False;D;D;
If@cero, Print@"Es una funcin constante 0."D,
Print@"No es la funcin constante 0 y la
forma cannica en mintrminos es: ", cadenaDD;
If@uno, Print@"Es una tautologa."D, Print@"No es la funcin
constante 1 y la forma cannica en maxtrminos es: ", cadena2DD;
Ejercicios 10.nb 8
No es la funcin constante 0 y la forma cannica en mintrminos es:
Hx1 . x2 . Hx3L . x4L + Hx1 . x2 . Hx3L . Hx4LL + Hx1 .
Hx2L . x3 . x4L + Hx1 . Hx2L . x3 . Hx4LL + Hx1 . H
x2L . Hx3L . x4L + Hx1 . Hx2L . Hx3L . Hx4LL + HH
x1L . x2 . x3 . x4L + HHx1L . x2 . Hx3L . Hx4LL + HH
x1L . Hx2L . x3 . Hx4LL + HHx1L . Hx2L . Hx3L . Hx4LL
No es la funcin constante 1 y la forma cannica en maxtrminos es:
HHx1L + Hx2L + Hx3L + Hx4LL . HHx1L + Hx2L + Hx3L + x4L .
Hx1 + Hx2L + Hx3L + x4L . Hx1 + Hx2L + x3 + Hx4LL .
Hx1 + x2 + Hx3L + Hx4LL . Hx1 + x2 + x3 + Hx4LL
Ejercicio 3.
Comprobar que la funcin booleana elemental de
dos entradas XOR H

u " o exclusivo "L es asociativa.


Solucin:
Slo tenemos que probar que ((x y) z) = (x (y z)). Para ello
calculamos sus tablas de verdad. La tabla de verdad de ((x y) z)
vendr dada por:
Ejercicios 10.nb 9
In[102]:= f6@x_, y_D := Mod@x + y, 2D;
n = 3;
x = Table@0, 8t, n<D;
funcion := f6@f6@x@@1DD, x@@2DDD, x@@3DDD ;
tabla = Table@0, 8r, H2^n + 1L<, 8s, n + 1<D;
For@k = 1, k < n + 1, k++, tabla@@1, kDD = \!\H"x" \_ k\LD;
tabla@@1, n + 1DD = "Exp"; For@i = 0, i < 2^n, i++,
j = i;
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 0;
tabla@@i + 2, fDD = 0, x@@fDD = 1; tabla@@i + 2, fDD = 1D;D;
tabla@@i + 2, n + 1DD = funcion;D; TableForm@tablaD
Out[108]//TableForm=
x
1
x
2
x
3
Exp
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1
Y la tabla de verdad de (x(yz)) vendr dada por:
Ejercicios 10.nb 10
In[109]:= f6@x_, y_D := Mod@x + y, 2D;
n = 3;
x = Table@0, 8t, n<D;
funcion := f6@x@@1DD, f6@x@@2DD, x@@3DDDD ;
tabla = Table@0, 8r, H2^n + 1L<, 8s, n + 1<D;
For@k = 1, k < n + 1, k++, tabla@@1, kDD = \!\H"x" \_ k\LD;
tabla@@1, n + 1DD = "Exp"; For@i = 0, i < 2^n, i++,
j = i;
For@f = n, f > 0, f,
resto = Mod@j, 2D;
j = Floor@j 2D;
If@resto 0, x@@fDD = 0;
tabla@@i + 2, fDD = 0, x@@fDD = 1; tabla@@i + 2, fDD = 1D;D;
tabla@@i + 2, n + 1DD = funcion;D; TableForm@tablaD
Out[115]//TableForm=
x
1
x
2
x
3
Exp
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1
Como vemos ambas coinciden y por tanto la funcin es asociativa.
Ejercicios 10.nb 11