Una contradicción es una expresión lógica que siempre resulta falsa, sin importar los valores de verdad de sus proposiciones simples.
En el tema anterior vimos que una tautología siempre es verdadera. Una contradicción es el caso opuesto: una expresión que siempre es falsa.
Las contradicciones son importantes porque permiten detectar reglas imposibles, condiciones mal formuladas y combinaciones que nunca pueden cumplirse.
Una contradicción es una proposición compuesta que resulta falsa para todas las combinaciones posibles de valores de sus proposiciones simples.
La expresión p ∧ ¬p afirma que p es verdadera y que p no es verdadera al mismo tiempo. En lógica clásica, esto nunca puede cumplirse.
| p | ¬p | p ∧ ¬p |
|---|---|---|
| V | F | F |
| F | V | F |
Como la columna final siempre es falsa, p ∧ ¬p es una contradicción.
La contradicción p ∧ ¬p se relaciona con el principio de no contradicción: una proposición no puede ser verdadera y falsa al mismo tiempo, en el mismo sentido.
En programación, una contradicción puede aparecer como una condición imposible.
const edad = 20;
if (edad >= 18 && edad < 18) {
console.log("Esta línea nunca se ejecuta");
}
Una edad no puede ser mayor o igual que 18 y menor que 18 al mismo tiempo.
Una condición imposible es una forma práctica de contradicción dentro de un programa.
| Condición | Motivo por el que es imposible |
|---|---|
| activo && !activo | Una misma variable booleana no puede ser verdadera y falsa a la vez |
| edad < 0 && edad > 100 | Un número no puede ser menor que 0 y mayor que 100 al mismo tiempo |
| rol === "admin" && rol !== "admin" | El rol no puede ser igual y distinto a "admin" simultáneamente |
| stock === 0 && stock > 0 | El stock no puede ser 0 y mayor que 0 al mismo tiempo |
También podemos construir contradicciones con expresiones más complejas. Por ejemplo:
Esta expresión afirma que p implica q, que p ocurre, pero que q no ocurre. Eso contradice la implicación.
| p | q | p → q | ¬q | (p → q) ∧ p ∧ ¬q |
|---|---|---|---|---|
| V | V | V | F | F |
| V | F | F | V | F |
| F | V | V | F | F |
| F | F | V | V | F |
Para reconocer una contradicción mediante tablas de verdad:
Podemos comprobar una contradicción evaluando todas las combinaciones posibles.
const valores = [true, false];
for (const p of valores) {
const expresion = p && !p;
console.log({ p, expresion });
}
La expresión p && !p devuelve false para ambos valores posibles de p.
Si una condición es contradictoria, el bloque asociado nunca se ejecutará.
const usuarioActivo = true;
if (usuarioActivo && !usuarioActivo) {
console.log("Nunca se ejecuta");
}
Este tipo de condición puede aparecer por errores al combinar reglas, refactorizaciones incompletas o nombres booleanos poco claros.
Una expresión puede ser falsa en cierto caso sin ser contradicción. Para que sea contradicción debe ser falsa en todos los casos posibles.
| Expresión | Clasificación | Motivo |
|---|---|---|
| p ∧ ¬p | Contradicción | Siempre es falsa |
| p ∧ q | No es contradicción | Puede ser verdadera si p y q son verdaderas |
| edad >= 18 con edad 15 | Falsa en ese caso | Podría ser verdadera para otra edad |
La negación de una tautología es una contradicción, y la negación de una contradicción es una tautología.
| Expresión | Clasificación | Negación |
|---|---|---|
| p ∨ ¬p | Tautología | ¬(p ∨ ¬p) es contradicción |
| p ∧ ¬p | Contradicción | ¬(p ∧ ¬p) es tautología |
Las contradicciones ayudan a encontrar reglas incompatibles en sistemas reales.
Cuando dos requisitos no pueden cumplirse simultáneamente, la regla debe revisarse.
Las contradicciones representan expresiones imposibles: nunca resultan verdaderas. Son útiles para detectar errores lógicos, condiciones inalcanzables y reglas incompatibles.
En el próximo tema estudiaremos las contingencias.