Las leyes idempotentes muestran que repetir una misma proposición con AND u OR no cambia su valor lógico.
En lógica, repetir una misma condición no la vuelve más verdadera ni más falsa. Si una proposición ya aparece en una expresión con el mismo operador, repetirla es redundante.
Esta idea se expresa mediante las leyes idempotentes.
Las leyes idempotentes son:
La primera dice que p y p equivale a p. La segunda dice que p o p también equivale a p.
La expresión p ∧ p no agrega información nueva. Si p es verdadera, ambas copias son verdaderas. Si p es falsa, ambas copias son falsas.
| p | p ∧ p |
|---|---|
| V | V |
| F | F |
La columna final coincide con la columna de p.
La expresión p ∨ p también equivale a p. Repetir la misma alternativa no cambia el resultado.
| p | p ∨ p |
|---|---|
| V | V |
| F | F |
La columna final vuelve a coincidir con p.
En JavaScript podemos comprobar las leyes con expresiones booleanas.
const tienePermiso = true;
console.log((tienePermiso && tienePermiso) === tienePermiso);
console.log((tienePermiso || tienePermiso) === tienePermiso);
Ambas comparaciones devuelven true.
Una repetición idempotente en código suele indicar una condición redundante.
const usuarioActivo = true;
if (usuarioActivo && usuarioActivo) {
console.log("Usuario activo");
}
La condición puede simplificarse a:
if (usuarioActivo) {
console.log("Usuario activo");
}
Repetir una alternativa con OR tampoco cambia la expresión.
const esAdmin = false;
const puedeAcceder = esAdmin || esAdmin;
console.log(puedeAcceder);
La expresión esAdmin || esAdmin equivale simplemente a esAdmin.
Simplifiquemos:
Aplicando la ley idempotente:
La repetición de p desaparece porque no aporta información adicional.
Las repeticiones pueden aparecer dentro de expresiones más grandes.
Como p aparece dos veces con OR, una de sus apariciones puede eliminarse.
Lo mismo ocurre con AND.
Cuando pensamos una expresión como un conjunto de condiciones, repetir la misma condición no cambia el conjunto.
| Expresión original | Expresión simplificada |
|---|---|
| activo && verificado && activo | activo && verificado |
| esAdmin || esEditor || esAdmin | esAdmin || esEditor |
| hayStock && pagoAprobado && hayStock | hayStock && pagoAprobado |
La idempotencia lógica se refiere al valor de verdad de expresiones, no necesariamente al efecto de ejecutar acciones.
Por eso estas leyes deben aplicarse con cuidado cuando las condiciones llaman funciones que modifican datos.
En lógica pura, repetir una proposición es redundante. En JavaScript, repetir una función puede ejecutar código dos veces.
if (validarUsuario() && validarUsuario()) {
console.log("Usuario válido");
}
Si validarUsuario tiene efectos secundarios, esta expresión no es equivalente en comportamiento práctico a llamar la función una sola vez.
Si una validación se usa más de una vez, conviene guardar su resultado en una variable booleana.
const usuarioValido = validarUsuario();
if (usuarioValido) {
console.log("Usuario válido");
}
Así se evita repetir una evaluación y se mejora la claridad de la condición.
Las leyes idempotentes muestran que repetir una proposición no modifica su valor lógico. Son útiles para simplificar expresiones y detectar redundancias en condiciones de programación.
En el próximo tema estudiaremos las leyes conmutativas.