28. Simplificación de expresiones lógicas

Simplificar una expresión lógica consiste en transformarla en una forma más breve o clara sin cambiar su valor de verdad.

28.1 Introducción

Las equivalencias lógicas permiten reemplazar una expresión por otra equivalente. Gracias a eso podemos simplificar expresiones complejas, eliminar redundancias y escribir condiciones más claras.

En programación, simplificar no significa escribir menos a cualquier costo. Significa expresar la misma regla de una forma más comprensible y menos propensa a errores.

28.2 Qué significa simplificar

Simplificar una expresión lógica significa transformarla en otra expresión equivalente que sea más conveniente.

Dos expresiones son equivalentes si siempre producen el mismo valor de verdad.

Una expresión simplificada puede tener menos operadores, menos repeticiones o una estructura más clara.

28.3 Leyes más usadas

Para simplificar expresiones, usaremos principalmente estas leyes:

Ley Ejemplo
Doble negación ¬¬p ≡ p
Identidad p ∧ V ≡ p, p ∨ F ≡ p
Dominación p ∧ F ≡ F, p ∨ V ≡ V
Idempotencia p ∧ p ≡ p, p ∨ p ≡ p
De Morgan ¬(p ∧ q) ≡ ¬p ∨ ¬q
Distributiva (p ∧ q) ∨ (p ∧ r) ≡ p ∧ (q ∨ r)

28.4 Método de simplificación

Un método práctico es:

  1. Identificar subexpresiones repetidas.
  2. Eliminar dobles negaciones.
  3. Aplicar leyes de identidad y dominación.
  4. Usar De Morgan para mover negaciones si conviene.
  5. Factorizar expresiones repetidas con distributividad.
  6. Verificar que la expresión final sea equivalente a la original.

28.5 Ejemplo con identidad

Simplifiquemos:

(p ∧ V) ∨ F

Paso a paso:

(p ∧ V) ∨ F ≡ p ∨ F ≡ p

Usamos identidad de AND y luego identidad de OR.

28.6 Ejemplo con dominación

Simplifiquemos:

(p ∨ q) ∧ F

Como cualquier expresión AND falso es falsa:

(p ∨ q) ∧ F ≡ F

No hace falta evaluar p ∨ q.

28.7 Ejemplo con idempotencia

Simplifiquemos:

p ∧ q ∧ p

Reordenamos y eliminamos la repetición:

p ∧ q ∧ p ≡ p ∧ p ∧ q ≡ p ∧ q

Usamos conmutatividad e idempotencia.

28.8 Ejemplo con De Morgan

Simplifiquemos:

¬(p ∧ ¬q)

Aplicamos De Morgan:

¬(p ∧ ¬q) ≡ ¬p ∨ ¬¬q ≡ ¬p ∨ q

Después de De Morgan, simplificamos la doble negación.

28.9 Ejemplo con distributividad

Simplifiquemos:

(p ∧ q) ∨ (p ∧ ¬q)

Factorizamos p:

(p ∧ q) ∨ (p ∧ ¬q) ≡ p ∧ (q ∨ ¬q)

Como q ∨ ¬q es una tautología:

p ∧ V ≡ p

La expresión completa se simplifica a p.

28.10 Simplificación en JavaScript

Veamos una condición redundante:

const puedeAcceder = (cuentaActiva && esAdmin) || (cuentaActiva && esEditor);

Factorizando cuentaActiva:

const puedeAcceder = cuentaActiva && (esAdmin || esEditor);

La segunda forma evita repetir la condición común.

28.11 Simplificar una negación compuesta

Una condición como esta puede ser difícil de leer:

const accesoDenegado = !(usuarioActivo && tienePermiso);

Aplicando De Morgan:

const accesoDenegado = !usuarioActivo || !tienePermiso;

La segunda forma muestra explícitamente las razones por las que se deniega el acceso.

28.12 Verificar la equivalencia

Después de simplificar una expresión importante, conviene verificar que la nueva forma sea equivalente.

const valores = [true, false];

for (const p of valores) {
  for (const q of valores) {
    const original = !(p && q);
    const simplificada = !p || !q;
    console.log(original === simplificada);
  }
}

Si todas las comparaciones devuelven true, las expresiones son equivalentes.

28.13 Simplificación no siempre significa menos texto

A veces una expresión más larga es más clara para quien lee el código.

const puedeComprar = hayStock && pagoAprobado && !cuentaBloqueada;

Esta condición puede ser más legible que una versión demasiado compacta o factorizada. La simplificación debe mejorar comprensión, no solo reducir caracteres.

28.14 Caso práctico completo

Supongamos esta expresión:

(p ∧ V) ∧ (q ∨ ¬q)

Simplificamos paso a paso:

  1. p ∧ V ≡ p.
  2. q ∨ ¬q ≡ V.
  3. La expresión queda p ∧ V.
  4. p ∧ V ≡ p.

Resultado final:

p

28.15 Errores comunes

  • Aplicar una ley sin verificar que su forma coincida con la expresión.
  • Eliminar paréntesis que cambian la agrupación.
  • Confundir una expresión parecida con una equivalente.
  • Reducir una condición hasta hacerla menos legible.
  • Ignorar efectos secundarios cuando la expresión contiene llamadas a funciones.

28.16 Qué debes recordar de este tema

  • Simplificar es transformar una expresión en otra equivalente más clara o breve.
  • Las leyes de equivalencia permiten justificar cada paso.
  • De Morgan, identidad, dominación, idempotencia y distributividad son herramientas frecuentes.
  • La expresión final debe conservar el mismo valor de verdad que la original.
  • En programación, la claridad de la condición es tan importante como su brevedad.

28.17 Conclusión

La simplificación de expresiones lógicas permite reducir redundancias, aclarar reglas y detectar errores. Es una habilidad clave para escribir condiciones correctas y mantener código más comprensible.

En el próximo tema estudiaremos implicaciones y equivalencias notables.