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.