18. Contradicciones

Una contradicción es una expresión lógica que siempre resulta falsa, sin importar los valores de verdad de sus proposiciones simples.

18.1 Introducción

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.

18.2 Definición

Una contradicción es una proposición compuesta que resulta falsa para todas las combinaciones posibles de valores de sus proposiciones simples.

Si la última columna de la tabla de verdad contiene solo F, la expresión es una contradicción.

18.3 Ejemplo clásico: p ∧ ¬p

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.

18.4 Principio de no 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.

"El usuario está activo y el usuario no está activo" no puede ser verdadero al mismo tiempo si hablamos del mismo usuario y del mismo momento.

18.5 Contradicción con comparaciones

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.

18.6 Condiciones imposibles

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

18.7 Contradicción con implicación

También podemos construir contradicciones con expresiones más complejas. Por ejemplo:

(p → q) ∧ p ∧ ¬q

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

18.8 Cómo reconocer una contradicción

Para reconocer una contradicción mediante tablas de verdad:

  1. Construye la tabla con todas las combinaciones posibles.
  2. Evalúa la expresión completa usando columnas intermedias.
  3. Observa la columna final.
  4. Si todos los valores son falsos, la expresión es una contradicción.

18.9 Contradicciones en JavaScript

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.

18.10 Código inalcanzable

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.

18.11 Contradicción no es simplemente falso

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

18.12 Relación con tautologías

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

18.13 Detectar reglas incompatibles

Las contradicciones ayudan a encontrar reglas incompatibles en sistemas reales.

"El cupón se aplica solo a clientes nuevos" y "el cupón se aplica solo a clientes recurrentes" puede ser contradictorio si una persona no puede estar en ambas categorías al mismo tiempo.

Cuando dos requisitos no pueden cumplirse simultáneamente, la regla debe revisarse.

18.14 Errores comunes

  • Confundir una expresión falsa en un caso con una contradicción.
  • No revisar todas las filas de la tabla de verdad.
  • Combinar condiciones opuestas con && por accidente.
  • Crear reglas de negocio incompatibles entre sí.
  • No detectar bloques de código que nunca pueden ejecutarse.

18.15 Qué debes recordar de este tema

  • Una contradicción siempre es falsa.
  • Se reconoce porque la columna final de su tabla de verdad contiene solo valores falsos.
  • p ∧ ¬p es una contradicción clásica.
  • En programación, una contradicción suele aparecer como una condición imposible.
  • Detectar contradicciones ayuda a evitar código inalcanzable y reglas mal formuladas.

18.16 Conclusión

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.