Electrónica Digital · Tema 14

Teoremas y De Morgan

Romper la barra y cambiar el signo: los dos teoremas que convierten NAND en OR y viceversa.

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

Verificación fila por fila.
AB~(A·B)~A+~B~(A+B)~A·~B
001111
011100
101100
110000

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

  1. 1
    De Morgan = tu día a día.

    !(a && b) === !a || !b: lo aplicás sin pensar; en silicio ahorra chips.

  2. 2
    Absorción = linter.

    a || (!a && b) → a || b: el linter lo sugiere, acá se cablea.

  3. 3
    Sí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.

LABORATORIO 14

Rompe-barras

~(A·B) = ~A+~B · A=1 B=0

Lado barra1
Lado roto1
Fila10
EstadoIguales ✓

~(1·0)=1, ~1+~0=1: iguales.

Preguntas para explorar

  1. Recorré las 4 filas en ~(A·B). ¿Alguna difiere? ¿Qué prueba?
  2. En A+~A·B con A=0, B=1: ¿lados? ¿Para qué sirve esta identidad?
  3. ¿Por qué el laboratorio muestra la fila? ¿Qué fila distingue ~(A·B) de ~(A+B)?
Ver respuestas sugeridas
  1. Ninguna: 1-1-1-0 ambos. Prueba el teorema en silicio virtual.
  2. 1 = 1 (0+1·1 = 0+1): elimina un NOT interno adaptando a NAND.
  3. 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.