44. Negación de cuantificadores

Negar un cuantificador cambia “para todo” por “existe” y “existe” por “para todo”, además de negar el predicado.

44.1 Introducción

La negación de cuantificadores es una de las partes más importantes de la lógica de predicados. Permite transformar frases como "no todos" o "no existe" en expresiones equivalentes más claras.

Estas reglas son una extensión de la idea de De Morgan aplicada a cuantificadores.

44.2 Las dos equivalencias principales

Las reglas fundamentales son:

¬∀x P(x) ≡ ∃x ¬P(x)
¬∃x P(x) ≡ ∀x ¬P(x)

En palabras: negar "todos cumplen" equivale a "existe al menos uno que no cumple". Negar "existe alguno que cumple" equivale a "todos no cumplen".

44.3 Negar el cuantificador universal

La negación de una afirmación universal es existencial.

¬∀x P(x) ≡ ∃x ¬P(x)

Ejemplo:

No todos los usuarios están activos.
Equivale a: existe al menos un usuario que no está activo.

44.4 Ejemplo con usuarios

La afirmación:

¬∀x Activo(x)

se transforma en:

∃x ¬Activo(x)

Es decir: existe al menos un elemento del dominio que no está activo.

44.5 Negar el cuantificador existencial

La negación de una afirmación existencial es universal.

¬∃x P(x) ≡ ∀x ¬P(x)

Ejemplo:

No existe un producto sin stock.
Equivale a: todos los productos no están sin stock.

En lenguaje más natural: todos los productos tienen stock.

44.6 Ejemplo con productos

La afirmación:

¬∃x SinStock(x)

se transforma en:

∀x ¬SinStock(x)

Si el dominio son productos, significa que ningún producto está sin stock.

44.7 Tabla de traducciones

Frase Forma equivalente
No todos cumplen P Existe alguien que no cumple P
No existe alguien que cumpla P Todos no cumplen P
No todos los usuarios están activos Existe un usuario inactivo
No hay productos sin stock Todos los productos tienen stock

44.8 Relación con JavaScript: every y some

Las reglas de negación de cuantificadores aparecen al combinar every, some y negaciones.

const usuarios = [
  { nombre: "Ana", activo: true },
  { nombre: "Luis", activo: false }
];

const noTodosActivos = !usuarios.every(usuario => usuario.activo);
const existeInactivo = usuarios.some(usuario => !usuario.activo);

console.log(noTodosActivos === existeInactivo);

La comparación devuelve true.

44.9 Negar some

Negar una afirmación existencial equivale a una afirmación universal negada.

const productos = [
  { nombre: "Teclado", stock: 5 },
  { nombre: "Mouse", stock: 3 }
];

const noExisteSinStock = !productos.some(producto => producto.stock === 0);
const todosConStock = productos.every(producto => producto.stock !== 0);

console.log(noExisteSinStock === todosConStock);

44.10 Cuidado con el lenguaje natural

La frase "no todos" no significa "ninguno". Significa que al menos uno no cumple.

Frase Significado correcto
No todos los usuarios están activos Existe al menos un usuario inactivo
Ningún usuario está activo Todos los usuarios están inactivos

44.11 Negar afirmaciones universales condicionales

Muchas afirmaciones universales tienen forma condicional:

∀x (Activo(x) → PuedeIngresar(x))

Su negación es:

∃x ¬(Activo(x) → PuedeIngresar(x))

Como ¬(p → q) ≡ p ∧ ¬q, queda:

∃x (Activo(x) ∧ ¬PuedeIngresar(x))

Se lee: existe alguien activo que no puede ingresar.

44.12 Ejemplo práctico

Afirmación:

Todos los pedidos pagados tienen factura.

Negación:

Existe un pedido pagado que no tiene factura.

Forma lógica:

¬∀x (Pagado(x) → TieneFactura(x))
≡ ∃x (Pagado(x) ∧ ¬TieneFactura(x))

44.13 Aplicación en pruebas

Para probar que una regla universal falla, buscamos un caso concreto que la viole.

const pedidos = [
  { pagado: true, tieneFactura: true },
  { pagado: true, tieneFactura: false }
];

const existePedidoPagadoSinFactura = pedidos.some(
  pedido => pedido.pagado && !pedido.tieneFactura
);

console.log(existePedidoPagadoSinFactura);

Ese caso refuta la afirmación "todos los pedidos pagados tienen factura".

44.14 Errores comunes

  • Interpretar "no todos" como "ninguno".
  • Negar el predicado sin cambiar el cuantificador.
  • Cambiar el cuantificador sin negar el predicado.
  • Negar mal una implicación dentro de un cuantificador.
  • No respetar el dominio de discurso al buscar contraejemplos.

44.15 Qué debes recordar de este tema

  • ¬∀x P(x) ≡ ∃x ¬P(x).
  • ¬∃x P(x) ≡ ∀x ¬P(x).
  • "No todos" significa "existe al menos uno que no".
  • "No existe uno que" significa "todos no".
  • En JavaScript, estas ideas se reflejan en relaciones entre every, some y !.

44.16 Conclusión

La negación de cuantificadores permite transformar correctamente afirmaciones con "todos" y "existe". Es esencial para buscar contraejemplos, escribir pruebas y traducir reglas de negocio con precisión.

En el próximo tema estudiaremos la traducción de lenguaje natural a expresiones lógicas.