Booleanos y circuitos lógicos

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.