01 · Punto de partida
Ya lo usaste en el Tema 9
El OR con 3 NAND era De Morgan sin nombre: A+B = ~(~A·~B). Los teoremas dicen cómo romper una barra larga: negar cada variable y cambiar AND↔OR. Con eso, cualquier función se adapta a las puertas que tengas.
- ¿Cómo se enuncian los dos?
- ¿Qué vale cada lado en las 4 filas?
- ¿Para qué transformar una función?
- ¿Qué otros teoremas ahorran puertas?
02 · Enunciados
Barra larga, dos caminos
| A | B | ~(A·B) | ~A+~B | ~(A+B) | ~A·~B |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 |
Columnas 3–4 idénticas, 5–6 idénticas: teorema probado en 4 filas. Generaliza a N variables rompiendo de a pares.
03 · Símbolos alternativos
La misma puerta, dos dibujos
Una NAND equivale a OR de negados: el símbolo puede dibujarse como AND+bolita o como OR con bolitas en las entradas. Los esquemas profesionales mezclan formas para que el flujo se lea sin negaciones mentales.
Forma AND-negado
NAND clásica
Piensa “todos y después no”: útil si la condición es conjuntiva.
Forma OR-de-negados
Misma NAND
Piensa “alguno apagado”: útil si buscas el caso que falla.
04 · Más teoremas útiles
Absorción extendida y consenso
- A+~A·B = A+B
- El NOT interno se absorbe: con A=1 da 1, con A=0 queda B. Ahorra un inversor y una puerta.
- A·(~A+B) = A·B
- Su dual: el factor común limpia. Misma idea, otro operador.
- Consenso (idea)
- AB+~AC+BC = AB+~AC: el término BC sobra (está “cubierto”). Aparece solo en diseños grandes.
- Cada NOT cuesta
- Todo inversor suma retardo tp: simplificar también acelera. Menos puertas = más rápido.
05 · Teoremas en código
Probar los famosos
De Morgan doble más absorción extendida y consenso, todo por fuerza bruta.
Python en tu navegador. Desafiá a De Morgan con 3 variables.
def vale(f, n=2):
return all(f(*[(i >> (n-1-k)) & 1 for k in range(n)]) for i in range(2**n))
print("DM1:", vale(lambda a, b: (not (a and b)) == ((not a) or (not b))))
print("DM2:", vale(lambda a, b: (not (a or b)) == ((not a) and (not b))))
print("DM3:", vale(lambda a, b, c: (not (a and b and c)) == ((not a) or (not b) or (not c)), n=3)
Los tres True (el tercero generaliza a N). ¿Y ~(A+B+C) con OR de negados?
Absorción extendida y consenso
print("abs-ext:", vale(lambda a, b: (a or ((not a) and b)) == (a or b)))
print("consenso:", vale(lambda a, b, c: ((a and b) or ((not a) and c) or (b and c)) == ((a and b) or ((not a) and c))), n=3)
06 · Analogía programador
Refactor de condiciones
- 1De Morgan = tu día a día.
!(a && b) === !a || !b: lo aplicás sin pensar; en silicio ahorra chips. - 2Absorción = linter.
a || (!a && b)→a || b: el linter lo sugiere, acá se cablea. - 3Símbolos = nombres.
Elegir la forma que se lee mejor: como nombrar bien una función booleana.
07 · Exploración
Laboratorio: romper barras
Elegí identidad y mové A/B: el laboratorio evalúa ambos lados en vivo.
Rompe-barras
~(A·B) = ~A+~B · A=1 B=0
~(1·0)=1, ~1+~0=1: iguales.
Preguntas para explorar
- Recorré las 4 filas en ~(A·B). ¿Alguna difiere? ¿Qué prueba?
- En A+~A·B con A=0, B=1: ¿lados? ¿Para qué sirve esta identidad?
- ¿Por qué el laboratorio muestra la fila? ¿Qué fila distingue ~(A·B) de ~(A+B)?
Ver respuestas sugeridas
- Ninguna: 1-1-1-0 ambos. Prueba el teorema en silicio virtual.
- 1 = 1 (0+1·1 = 0+1): elimina un NOT interno adaptando a NAND.
- Las filas 01 y 10: ~(A·B) da 1 y ~(A+B) da 0 ahí. Recorrer filas = testear.
08 · Comprensión
Confusiones frecuentes
«La barra se reparte»
~(A·B) NO es ~A·~B (eso es ~(A+B)): repartir sin cambiar el operador es el error n.º 1. Romper = cambiar.
«Doble negación siempre gratis»
Lógica sí (~~A=A); física no: cada NOT suma retardo y consume. Doble inversor = demora deliberada a veces.
«De Morgan solo con 2»
Generaliza a N rompiendo de a pares: ~(A·B·C) = ~A+~B+~C. Verificado en código con n=3.
«Símbolos alternativos confunden»
Al contrario: muestran la intención (buscar el 0 vs buscar el 1). Acostumbrarse paga en esquemas grandes.
09 · Práctica guiada
Ejercicios de transformación
Ejercicio 1: NOR solo con NAND
Convertí Y = ~(A+B) a solo NAND usando De Morgan dos veces. ¿Cuántas puertas? Verificá con código.
Ver solución razonada
~A·~B con 3 NAND (dos NOT + NAND): ~(A+B) = ~A·~B. Dual del OR-con-NAND del Tema 9.
Ejercicio 2: simplificar con absorción extendida
Reducí F = A+~A·B+~A·~B·C. Aplicá dos veces y contá puertas antes/después.
Ver solución
F = A+~A·(B+~B·C) = A+~A·(B+C) = A+B+C. De 5 puertas a 1 OR-3. Absorción en cadena.
Ejercicio 3: leer esquema mixto
Puerta dibujada como OR con bolitas en entradas y salida sin bolita. ¿Función? ¿Chip?
Ver solución
~A+~B con… bolitas en entradas + OR = NAND (De Morgan visual): un 74HC00 dibujado “al revés”. Misma puerta, otra lectura.
10 · Síntesis
Ideas para recordar
- ~(A·B) = ~A+~B; ~(A+B) = ~A·~B (vale para N).
- Romper barra = negar todo + cambiar operador.
- A+~A·B = A+B: absorción que ahorra NOT.
- Símbolo alternativo = intención legible.
- Menos puertas = más rápido también.
Transformaciones dominadas. Ahora a usarlas: en el próximo tema, simplificación.