Introduccion
Mientras estudiamos condicionales en pyret, vimos que las
comparaciones producen valores true
o false
. Aprendimos que
estos valores perteneen al tipo de datos Booleano, en honor a George
Boole.
Álgebra Booleana
Vimos que en pyret podemos combinar ciertos y falsos con operadores
como and
, or
, y not
. Estos tres operadores son universales, y se
pueden usar para definir cualquier funcion sobre los Booleanos.
Circuitos digitales
En particular, usamos and
, or
, y not
para definir dos funciones que
produzcan las salidas de la siguiente tabla de veracidad donde A y B son
entradas, y C y S son las salidas.
A | B | C | S | |
---|---|---|---|---|
F | F | F | F | |
F | T | F | T | |
T | F | F | T | |
T | T | T | F |
fun ha-s(A, B):
doc: "Produce la columna S de la tabla anterior"
(not(A) and B) or (A and not(B))
end
fun ha-c(A, B):
doc: "Produce la columna C de la tabla anterior"
A and B
end
Luego vimos que podemos interpretar true
como 1 y false
como 0, y la tabla
de veracidad se convierte en una funcion para calcular la suma de dos bits.
Podemos usar los valores de C y S para determinar la suma: \(C\cdot 2^1 + S\cdot
2^0\)
A | B | C | S | Valor | |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | \(0\cdot 2^1 + 0\cdot 2^0 = 0\) | |
0 | 1 | 0 | 1 | \(0\cdot 2^1 + 1\cdot 2^0 = 1\) | |
1 | 0 | 0 | 1 | \(0\cdot 2^1 + 1\cdot 2^0 = 1\) | |
1 | 1 | 1 | 0 | \(1\cdot 2^1 + 0\cdot 2^0 = 2\) |
Transistores y circuitos lógicos
Entonces nos desviamos, y vimos que podemos utilizar transistores para implementar funciones Booleanas. De hecho, algunas computadoras como la Digital Equipment Corporation PDP-10 tuvieron CPU construidos con transistores.