Dos expresiones son lógicamente equivalentes cuando siempre producen el mismo valor de verdad. Las equivalencias permiten transformar, simplificar y verificar expresiones lógicas.
En lógica matemática, muchas expresiones diferentes pueden tener el mismo comportamiento. Aunque estén escritas de forma distinta, pueden producir exactamente los mismos valores de verdad en todos los casos.
Cuando eso ocurre, decimos que las expresiones son lógicamente equivalentes.
Dos expresiones lógicas A y B son equivalentes si tienen el mismo valor de verdad para todas las combinaciones posibles de sus variables.
También puede decirse que A ↔ B es una tautología.
Para comprobar una equivalencia, construimos una tabla de verdad y comparamos las columnas finales de ambas expresiones.
Ejemplo:
| p | q | p → q | ¬p ∨ q |
|---|---|---|---|
| V | V | V | V |
| V | F | F | F |
| F | V | V | V |
| F | F | V | V |
Como las columnas finales coinciden en todas las filas, las expresiones son equivalentes.
Las equivalencias lógicas permiten transformar expresiones sin cambiar su significado.
La doble negación indica que negar dos veces una proposición devuelve la proposición original.
const activo = true;
console.log(!!activo === activo);
Las leyes de identidad muestran que combinar una proposición con valores neutros no cambia su valor.
| Equivalencia | Lectura |
|---|---|
| p ∧ V ≡ p | p y verdadero equivale a p |
| p ∨ F ≡ p | p o falso equivale a p |
Las leyes de dominación muestran que algunos valores determinan por completo el resultado.
| Equivalencia | Lectura |
|---|---|
| p ∧ F ≡ F | p y falso siempre es falso |
| p ∨ V ≡ V | p o verdadero siempre es verdadero |
Repetir una proposición con el mismo operador no cambia su valor.
const tienePermiso = true;
console.log((tienePermiso && tienePermiso) === tienePermiso);
console.log((tienePermiso || tienePermiso) === tienePermiso);
En conjunción y disyunción, el orden de las proposiciones no cambia el resultado.
En JavaScript, para expresiones booleanas puras, p && q y q && p tienen el mismo resultado lógico. En código real hay que considerar efectos secundarios, pero lógicamente son equivalentes.
La forma de agrupar conjunciones o disyunciones repetidas no cambia el valor final.
Esto permite reorganizar expresiones largas sin alterar su significado lógico.
La distributividad permite transformar expresiones que mezclan conjunción y disyunción.
Estas leyes se usan mucho en simplificación lógica y álgebra booleana.
Las leyes de De Morgan permiten distribuir una negación sobre conjunciones o disyunciones, cambiando el operador.
Estas leyes son tan importantes que las estudiaremos con detalle en el próximo tema.
Las equivalencias ayudan a reescribir condiciones para mejorar su claridad.
const edad = 16;
const forma1 = !(edad >= 18);
const forma2 = edad < 18;
console.log(forma1 === forma2);
Ambas formas expresan la misma condición: no es mayor de edad.
| Ley | Equivalencia |
|---|---|
| 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 |
| Conmutativa | p ∧ q ≡ q ∧ p, p ∨ q ≡ q ∨ p |
| Asociativa | (p ∧ q) ∧ r ≡ p ∧ (q ∧ r) |
| De Morgan | ¬(p ∧ q) ≡ ¬p ∨ ¬q |
Las equivalencias lógicas son herramientas para transformar expresiones manteniendo su comportamiento. Son esenciales para simplificar condiciones, demostrar leyes y comparar reglas.
En el próximo tema estudiaremos las leyes de De Morgan.