27. Leyes distributivas

Las leyes distributivas permiten transformar expresiones que combinan AND y OR, distribuyendo un operador sobre otro sin cambiar el valor lógico.

27.1 Introducción

Las leyes distributivas son equivalencias que permiten reescribir expresiones donde una proposición se combina con un grupo de proposiciones.

Son muy importantes para simplificar expresiones lógicas, transformar reglas de negocio y trabajar con álgebra booleana.

27.2 Las dos leyes distributivas

Las leyes distributivas son:

p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)
p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r)

La primera distribuye AND sobre OR. La segunda distribuye OR sobre AND.

27.3 Distribuir AND sobre OR

La expresión p ∧ (q ∨ r) significa que p debe cumplirse, y además debe cumplirse q o r.

p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)

En palabras: p junto con una alternativa equivale a dos casos posibles: p con q, o p con r.

27.4 Ejemplo en lenguaje natural

Supongamos esta regla:

El usuario puede acceder si su cuenta está activa y es administrador o editor.

Si definimos:

  • p: La cuenta está activa.
  • q: Es administrador.
  • r: Es editor.

La expresión es:

p ∧ (q ∨ r)

La forma distribuida es:

(p ∧ q) ∨ (p ∧ r)

27.5 Tabla de AND sobre OR

Comparemos las columnas finales de ambas formas.

p q r p ∧ (q ∨ r) (p ∧ q) ∨ (p ∧ r)
V V V V V
V V F V V
V F V V V
V F F F F
F V V F F
F V F F F
F F V F F
F F F F F

Las columnas finales coinciden, por eso las expresiones son equivalentes.

27.6 Distribuir OR sobre AND

La segunda ley dice:

p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r)

Esta ley suele resultar menos intuitiva al principio, pero es igual de válida en lógica proposicional.

27.7 Tabla de OR sobre AND

Comparemos las columnas finales:

p q r p ∨ (q ∧ r) (p ∨ q) ∧ (p ∨ r)
V V V V V
V V F V V
V F V V V
V F F V V
F V V V V
F V F F F
F F V F F
F F F F F

27.8 Distributividad en JavaScript

Podemos comprobar las equivalencias con booleanos.

const p = true;
const q = false;
const r = true;

const forma1 = p && (q || r);
const forma2 = (p && q) || (p && r);

console.log(forma1 === forma2);

La comparación devuelve true.

27.9 Factorización lógica

Las leyes distributivas también pueden usarse en sentido inverso. A esto se lo puede pensar como factorización.

(p ∧ q) ∨ (p ∧ r) ≡ p ∧ (q ∨ r)

La proposición p aparece repetida en ambos términos, por eso puede factorizarse.

27.10 Ejemplo de factorización en código

Esta condición repite cuentaActiva:

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

Aplicando distributividad en sentido inverso:

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

La segunda forma suele ser más clara porque expresa primero el requisito común.

27.11 Cuándo distribuir

Distribuir puede ser útil para separar casos.

p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)

La forma distribuida muestra dos escenarios: uno donde se cumple p ∧ q y otro donde se cumple p ∧ r.

27.12 Cuándo factorizar

Factorizar puede ser útil para eliminar repetición.

(p ∧ q) ∨ (p ∧ r) ≡ p ∧ (q ∨ r)

La forma factorizada muestra que p es un requisito común para ambos casos.

27.13 Relación con simplificación

Las leyes distributivas suelen combinarse con otras leyes para simplificar expresiones.

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

En este ejemplo usamos distributividad, tautología e identidad.

27.14 Errores comunes

  • Distribuir AND sobre OR sin repetir correctamente la proposición común.
  • Olvidar que también existe la distribución de OR sobre AND.
  • Confundir distributividad con asociatividad.
  • Factorizar una proposición que no aparece en todos los términos.
  • Reescribir condiciones de código sin verificar que la nueva forma sea equivalente.

27.15 Qué debes recordar de este tema

  • p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r).
  • p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r).
  • Las leyes distributivas permiten expandir o factorizar expresiones.
  • Son útiles para separar casos o eliminar condiciones repetidas.
  • Conviene verificar las transformaciones con tablas de verdad o razonamiento paso a paso.

27.16 Conclusión

Las leyes distributivas permiten transformar expresiones que mezclan conjunción y disyunción. Son una herramienta poderosa para simplificar reglas lógicas y hacer más claras las condiciones de un programa.

En el próximo tema estudiaremos la simplificación de expresiones lógicas.