10. Principio del buen orden

Todo subconjunto no vacío de los números naturales tiene un elemento mínimo. Esta propiedad, aparentemente simple, permite demostrar resultados mediante el contraejemplo más pequeño y fundamenta la inducción matemática.

10.1 Introducción

Los números naturales tienen una propiedad especial: cualquier colección no vacía de naturales posee un menor elemento. Esta afirmación se denomina principio del buen orden y es una de las bases lógicas de la matemática discreta.

El principio permite atacar una afirmación universal de forma indirecta. Si pensamos que hay casos para los que la propiedad falla, podemos tomar el menor de esos casos. Luego mostramos que su existencia contradice las propiedades de los casos anteriores.

10.2 Enunciado formal

Principio del buen orden:

Todo subconjunto no vacío S de los números naturales tiene un elemento mínimo m.

Es decir, m pertenece a S y para todo s que pertenece a S, se cumple m ≤ s.

El elemento mínimo debe pertenecer al conjunto. Esto lo diferencia de una cota inferior: por ejemplo, 0 es una cota inferior de {1, 2, 3, ...}, pero el mínimo de ese conjunto es 1 porque 1 pertenece a él.

10.3 Ejemplos de conjuntos bien ordenados

Conjunto de naturales¿No vacío?Mínimo
{4, 9, 15, 20}4
{n ∈ N | n ≥ 100}100
{n ∈ N | n es múltiplo de 7 y n > 0}7
NoNo tiene mínimo

La condición «no vacío» es indispensable. No puede existir un elemento que pertenezca al conjunto vacío, por lo que ese conjunto no tiene mínimo.

10.4 Por qué funciona solo con un orden adecuado

Los naturales están ordenados de manera que no podemos descender indefinidamente. En cambio, los enteros no satisfacen el buen orden usual: el conjunto de todos los enteros no tiene mínimo porque, para cualquier entero z, existe z - 1, que es menor.

Naturales: 0, 1, 2, 3, ...
Todo subconjunto no vacío tiene un primer elemento.

Enteros: ..., -3, -2, -1, 0, 1, 2, ...
El conjunto completo no tiene un menor elemento.

También los números reales con su orden usual fallan esta propiedad. El intervalo abierto (0, 1) no tiene mínimo: si elegimos un real positivo x, entonces x/2 también pertenece al intervalo y es menor.

10.5 Mínimo, mínimo local y valor más pequeño

En programación se usa la palabra «mínimo» en varios sentidos. En una lista finita, el mínimo es el menor valor almacenado. En un grafo o una función pueden aparecer mínimos locales. El principio del buen orden se refiere específicamente al mínimo global de un subconjunto no vacío de naturales.

function minimo(numeros) {
  if (numeros.length === 0) {
    throw new Error("El arreglo no puede estar vacío");
  }

  return numeros.reduce((menor, numero) => Math.min(menor, numero));
}

console.log(minimo([12, 4, 19, 7])); // 4

El código encuentra un mínimo en un conjunto finito representado por un arreglo. El principio del buen orden afirma algo más general: incluso un conjunto infinito de naturales, si no está vacío, tiene mínimo.

10.6 Método del contraejemplo mínimo

Para demostrar que una propiedad P(n) vale para todo natural n a partir de cierto punto, suponemos lo contrario: existe al menos un contraejemplo. Entonces el conjunto C de todos los contraejemplos no es vacío y, por el buen orden, tiene un menor elemento m.

C = {n ∈ N | P(n) es falsa}.

Suponer C no vacío.
Sea m el menor elemento de C.
Usar que todos los valores menores que m no están en C.
Derivar que P(m) también debe ser verdadera.
Contradicción: m pertenece y no pertenece a C.

Esta técnica suele producir demostraciones muy naturales cuando la propiedad de un número depende de propiedades de números menores.

10.7 Ejemplo: todo entero mayor que 1 tiene un divisor primo

Demostraremos que todo entero n > 1 tiene al menos un divisor primo.

Supongamos que existen enteros mayores que 1 sin divisor primo. Sea m el menor de ellos. El número m no puede ser primo, porque entonces m sería divisor primo de sí mismo. Por lo tanto m es compuesto.

Como m es compuesto, m = ab con 1 < a < m y 1 < b < m.
En particular, a es mayor que 1 y menor que m.
Por minimalidad de m, a tiene un divisor primo p.
Como p divide a y a divide m, p divide m.

Esto contradice que m no tuviera divisor primo.
Por lo tanto, todo entero mayor que 1 tiene un divisor primo.

10.8 Buscar el menor divisor primo

El algoritmo recorre posibles divisores desde el menor hacia arriba. Si encuentra uno, necesariamente es el menor divisor mayor que 1; además, ese divisor debe ser primo.

function menorDivisorPrimo(n) {
  if (!Number.isInteger(n) || n <= 1) {
    throw new Error("n debe ser un entero mayor que 1");
  }

  for (let divisor = 2; divisor <= n; divisor++) {
    if (n % divisor === 0) return divisor;
  }
}

console.log(menorDivisorPrimo(91)); // 7
console.log(menorDivisorPrimo(97)); // 97

La idea de recorrer de menor a mayor es una aplicación concreta del orden sobre los naturales. En la práctica se puede optimizar el límite de búsqueda, pero la propiedad lógica se mantiene.

10.9 Ejemplo: factorización prima por buen orden

Podemos demostrar que todo entero n ≥ 2 es producto de primos usando el mismo razonamiento. Supongamos que hay enteros que no admiten factorización prima y sea m el menor.

m no puede ser primo, pues un primo es producto de un solo primo.
Entonces m = ab, con 1 < a < m y 1 < b < m.
Por minimalidad de m, a y b son productos de primos.
Por lo tanto, ab = m es producto de primos.

Contradicción. No existe tal m.

Esta prueba es equivalente en espíritu a la inducción fuerte del tema anterior. En lugar de suponer correctos todos los casos menores, toma el menor caso que supuestamente falla.

10.10 Buen orden e inducción

El principio del buen orden, la inducción simple y la inducción fuerte son equivalentes: cada uno puede demostrarse a partir de cualquiera de los otros. Son diferentes formas de expresar la estructura de los naturales.

HerramientaIdea central
Inducción simpleUn caso correcto implica el siguiente.
Inducción fuerteTodos los casos anteriores implican el siguiente.
Buen ordenSi hay contraejemplos, existe uno mínimo.

La elección es una cuestión de claridad. Si el problema habla naturalmente de «el menor que falla», el buen orden suele ser la mejor presentación.

10.11 Terminación de algoritmos

El buen orden permite razonar sobre terminación. Si en cada paso de un algoritmo una medida natural no negativa disminuye estrictamente, el algoritmo no puede continuar para siempre. De lo contrario existiría una sucesión infinita de naturales cada vez menores.

Medida de terminación: un número natural asociado al estado.
En cada iteración: la medida disminuye.
La medida nunca es negativa.

Conclusión: el proceso debe terminar.

Esta medida se llama a veces función variante. Es un complemento del invariante: el invariante ayuda a probar corrección; la variante ayuda a probar terminación.

10.12 Ejemplo: terminación del algoritmo de Euclides

En el algoritmo de Euclides, mientras el segundo valor b sea distinto de cero, se reemplaza por el resto de dividir a entre b. Ese resto satisface 0 ≤ resto < b. Por lo tanto, la medida b disminuye y permanece como natural no negativo.

function mcdConPasos(a, b) {
  a = Math.abs(a);
  b = Math.abs(b);

  while (b !== 0) {
    console.log(`a = ${a}, b = ${b}`);
    [a, b] = [b, a % b];
  }

  console.log(`MCD = ${a}`);
  return a;
}

mcdConPasos(252, 105); // MCD = 21

El algoritmo termina porque no puede existir una cadena infinita de restos naturales positivos estrictamente decrecientes.

10.13 Estados mínimos y depuración

El razonamiento por mínimo contraejemplo también es útil al depurar. Si una propiedad debería cumplirse para todas las entradas de tamaño n, podemos buscar la entrada más pequeña que produce un fallo. Su tamaño reducido suele revelar el caso límite omitido.

Por ejemplo, si una función que ordena arreglos falla, el menor arreglo que falla puede tener longitud 0, 1, 2 o 3. Examinar ese caso es más informativo que observar un conjunto de datos enorme.

Pregunta de depuración:
«¿Cuál es la entrada válida más pequeña para la que esta propiedad falla?»

Esta pregunta no demuestra por sí sola la corrección, pero aplica la misma intuición que el contraejemplo mínimo.

10.14 Un ejemplo de búsqueda de contraejemplo

El programa siguiente busca el primer valor para el que una conjetura incorrecta falla. La conjetura es «n² + n + 41 siempre es primo». Funciona para muchos valores iniciales, pero no para todos.

function esPrimo(n) {
  if (n < 2) return false;
  for (let d = 2; d * d <= n; d++) {
    if (n % d === 0) return false;
  }
  return true;
}

function primerContraejemplo(limite) {
  for (let n = 0; n <= limite; n++) {
    if (!esPrimo(n * n + n + 41)) return n;
  }
  return null;
}

console.log(primerContraejemplo(100)); // 40

Para n = 40 se obtiene 41² = 1681, que no es primo. Un solo contraejemplo refuta una afirmación universal; el menor de ellos ayuda a comprender dónde deja de funcionar una regla propuesta.

10.15 Buen orden en estructuras finitas

Una colección finita de enteros tiene mínimo siempre que no esté vacía. Esto puede verse como un caso particular del buen orden. En algoritmos aparecen operaciones como «extraer el menor», por ejemplo en colas de prioridad y en el algoritmo de Dijkstra.

Cola de prioridades: cada tarea tiene un costo natural.
Operación principal: seleccionar una tarea de costo mínimo.

La estructura de datos implementa eficientemente una idea de orden.

En un conjunto finito puede ser sencillo recorrer todos los elementos. En problemas grandes, las estructuras de datos permiten mantener el mínimo sin volver a buscarlo desde cero.

10.16 Límites del principio

El principio no dice que todo conjunto tenga mínimo. Requiere trabajar con un subconjunto no vacío de naturales, o con otra estructura que esté bien ordenada. Aplicarlo fuera de ese contexto puede producir conclusiones falsas.

Conjunto¿Tiene mínimo con el orden usual?Motivo
Números naturales positivosSí, 1Están bien ordenados.
Todos los enterosNoSe puede descender indefinidamente.
Reales en (0, 1)NoPara cada x existe x/2 menor.
Reales en [0, 1]Sí, 00 pertenece al conjunto.

10.17 Errores frecuentes

  • Olvidar que el conjunto debe ser no vacío.
  • Confundir una cota inferior con un mínimo que pertenece al conjunto.
  • Aplicar el buen orden a todos los enteros o a intervalos abiertos de reales.
  • Definir mal el conjunto de contraejemplos.
  • No usar la minimalidad del contraejemplo dentro de la demostración.
  • Concluir que una búsqueda finita de ejemplos demuestra una propiedad universal.

10.18 Qué debes recordar de este tema

  • Todo subconjunto no vacío de los naturales tiene un elemento mínimo.
  • La prueba por contraejemplo mínimo supone que existe un fallo y toma el menor posible.
  • El buen orden es equivalente a la inducción simple y a la inducción fuerte.
  • Ayuda a probar factorización, propiedades de divisibilidad y terminación de algoritmos.
  • Una medida natural que disminuye estrictamente en cada paso garantiza terminación.
  • El principio depende del dominio y del orden; no vale automáticamente para enteros o reales.

10.19 Conclusión

El principio del buen orden convierte la idea de «el primer caso que falla» en una herramienta rigurosa. Al no poder existir una sucesión infinita de naturales cada vez menores, podemos justificar demostraciones y algoritmos que progresan hacia un caso base.

En el próximo tema estudiaremos sucesiones discretas, listas ordenadas de términos que permiten describir cambios y patrones dependientes de un índice.