9. Inducción fuerte

La inducción fuerte permite suponer que una propiedad vale para todos los casos anteriores antes de demostrar el siguiente. Es ideal cuando una estructura o algoritmo se construye a partir de subproblemas de tamaños diversos.

9.1 Introducción

En la inducción matemática simple, para demostrar P(k + 1) suponemos solamente P(k). A veces esa información no alcanza: el caso siguiente puede depender de P(k - 1), P(k - 2) o de cualquier caso anterior.

La inducción fuerte, también llamada inducción completa, resuelve esta situación. En el paso inductivo podemos suponer que P(n0), P(n0 + 1), ..., P(k) son verdaderas y usar cualquiera de ellas para demostrar P(k + 1).

9.2 Forma formal de la inducción fuerte

Sea P(n) una proposición definida para todos los naturales n ≥ n0. Una demostración por inducción fuerte contiene estas partes:

1. Demostrar los casos base necesarios desde n0.

2. Hipótesis inductiva fuerte: para un k ≥ n0, suponer que P(n) es verdadera para todo n con n0 ≤ n ≤ k.

3. Usar uno o varios de esos casos para demostrar P(k + 1).

4. Concluir que P(n) vale para todo n ≥ n0.

9.3 Diferencia con la inducción simple

CaracterísticaInducción simpleInducción fuerte
Hipótesis inductivaSe supone P(k).Se suponen P(n0) hasta P(k).
Uso típicoEl siguiente caso depende del anterior.El siguiente caso depende de cualquier caso menor.
EjemploSuma de los primeros n enteros.Factorización prima de un entero.
Poder lógicoEquivalente.Equivalente.

La inducción fuerte no es «más poderosa» en sentido lógico: puede derivarse de la inducción simple y viceversa. Su ventaja es práctica: expresa de manera natural las dependencias de muchos problemas.

9.4 La hipótesis inductiva fuerte

La hipótesis debe incluir todos los casos anteriores dentro del rango. No basta con afirmar vagamente que «los anteriores son verdaderos». Es necesario indicar qué valores cubre y qué propiedad cumple cada uno.

Hipótesis inductiva fuerte para k ≥ 2:
Supongamos que todo entero m con 2 ≤ m ≤ k puede escribirse como producto de números primos.

Objetivo: demostrar que k + 1 también puede escribirse así.

Esta formulación permite usar la propiedad para cualquier factor propio de k + 1, no solo para k.

9.5 Ejemplo principal: factorización en números primos

Demostraremos que todo entero n ≥ 2 puede escribirse como producto de números primos.

Caso base: n = 2. Como 2 es primo, ya es un producto de un único primo.

Hipótesis inductiva fuerte: supongamos que cada entero m con 2 ≤ m ≤ k puede escribirse como producto de primos.

Paso inductivo: consideremos k + 1. Hay dos posibilidades:

• Si k + 1 es primo, ya cumple la propiedad.

• Si k + 1 es compuesto, existen enteros a y b tales que k + 1 = ab, con 2 ≤ a ≤ k y 2 ≤ b ≤ k.
Por hipótesis inductiva, a y b son productos de primos.
Entonces ab también es un producto de primos.

Por lo tanto, k + 1 cumple la propiedad.

El argumento necesita la hipótesis para a y b, que no tienen por qué ser iguales a k. Por eso la inducción fuerte es la forma natural de esta demostración.

9.6 Factorización prima en JavaScript

El siguiente algoritmo obtiene factores primos de un entero positivo. Muestra cómo un número compuesto se descompone en factores menores.

function factoresPrimos(n) {
  const factores = [];
  let divisor = 2;

  while (n > 1) {
    while (n % divisor === 0) {
      factores.push(divisor);
      n /= divisor;
    }
    divisor++;
  }

  return factores;
}

console.log(factoresPrimos(84)); // [2, 2, 3, 7]
console.log(factoresPrimos(97)); // [97]

La demostración anterior garantiza que existe una factorización. Este algoritmo produce una de ellas para cualquier entero válido mayor o igual que 2.

9.7 Ejemplo: valores formados con monedas

Supongamos que tenemos monedas de 4 y 5 unidades. Demostraremos que toda cantidad n ≥ 12 puede formarse con estas monedas.

Casos base: 12 = 4 + 4 + 4; 13 = 4 + 4 + 5; 14 = 4 + 5 + 5; 15 = 5 + 5 + 5.

Hipótesis inductiva fuerte: supongamos que todas las cantidades entre 12 y k pueden formarse, donde k ≥ 15.

Para formar k + 1, observamos que k - 3 ≥ 12.
Por hipótesis inductiva, k - 3 puede formarse con monedas de 4 y 5.
Agregamos una moneda de 4: (k - 3) + 4 = k + 1.

Por lo tanto, k + 1 también puede formarse.

La prueba usa un caso anterior que no es k, sino k - 3. Esa es otra señal de que la inducción fuerte es adecuada.

9.8 Construir cantidades con monedas

function sePuedeFormarCon4y5(cantidad) {
  for (let monedasDe4 = 0; monedasDe4 * 4 <= cantidad; monedasDe4++) {
    const resto = cantidad - monedasDe4 * 4;
    if (resto % 5 === 0) return true;
  }

  return false;
}

console.log(sePuedeFormarCon4y5(12)); // true
console.log(sePuedeFormarCon4y5(13)); // true
console.log(sePuedeFormarCon4y5(11)); // false

El algoritmo prueba una cantidad concreta mediante búsqueda. La inducción fuerte demuestra la garantía general a partir de 12.

9.9 Recurrencias con varios términos anteriores

Una recurrencia define un término a partir de valores anteriores. La sucesión de Fibonacci es el ejemplo más conocido:

F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n - 2), para n ≥ 2.

Para demostrar una propiedad de F(n), el paso inductivo suele necesitar las propiedades de F(k) y F(k - 1). Podemos usar inducción fuerte o inducción simple con dos hipótesis y dos casos base.

9.10 Ejemplo: Fibonacci está acotado por potencias de 2

Demostraremos que F(n) < 2n para todo n ≥ 1.

Casos base: F(1) = 1 < 2 y F(2) = 1 < 4.

Hipótesis inductiva fuerte: supongamos que F(j) < 2j para todo j entre 1 y k, con k ≥ 2.

F(k + 1) = F(k) + F(k - 1)
< 2k + 2k-1
< 2k + 2k
= 2k+1.

Por lo tanto, F(k + 1) < 2k+1.

9.11 Fibonacci con salida

function fibonacci(n) {
  if (n < 0 || !Number.isInteger(n)) {
    throw new Error("n debe ser un entero no negativo");
  }

  let anterior = 0;
  let actual = 1;

  for (let i = 0; i < n; i++) {
    [anterior, actual] = [actual, anterior + actual];
  }

  return anterior;
}

console.log(fibonacci(10)); // 55
console.log(fibonacci(10) < 2 ** 10); // true

9.12 Algoritmos recursivos y subproblemas

Un algoritmo recursivo suele resolver un problema reduciéndolo a uno o varios subproblemas más pequeños. Para demostrar que funciona con una entrada de tamaño n, necesitamos saber que funciona con todos los tamaños menores que n que pueda invocar.

Por ejemplo, merge sort divide un arreglo en dos partes cuyos tamaños pueden no ser exactamente n - 1. La corrección de sus llamadas recursivas se expresa naturalmente suponiendo correctos todos los casos de tamaño menor que n.

Problema de tamaño n
↓ se divide en
Subproblemas de tamaños p y q, con p < n y q < n.

La inducción fuerte permite asumir correctos ambos subproblemas.

9.13 Ejemplo: corrección de una búsqueda recursiva

Una búsqueda binaria recursiva recibe un segmento ordenado. Si el valor central no coincide, llama a sí misma sobre un segmento estrictamente menor. Para demostrar corrección para un segmento de longitud n, la hipótesis fuerte garantiza que las llamadas sobre cualquier longitud menor funcionan correctamente.

function busquedaBinariaRecursiva(numeros, buscado, inicio = 0, fin = numeros.length - 1) {
  if (inicio > fin) return -1;

  const centro = Math.floor((inicio + fin) / 2);
  if (numeros[centro] === buscado) return centro;

  if (buscado < numeros[centro]) {
    return busquedaBinariaRecursiva(numeros, buscado, inicio, centro - 1);
  }

  return busquedaBinariaRecursiva(numeros, buscado, centro + 1, fin);
}

console.log(busquedaBinariaRecursiva([2, 5, 9, 14, 20], 14)); // 3
console.log(busquedaBinariaRecursiva([2, 5, 9, 14, 20], 7)); // -1

9.14 Varios casos base

La cantidad de casos base debe ser suficiente para que el paso inductivo pueda comenzar y continuar. Para Fibonacci necesitamos al menos los casos iniciales que aparecen en la recurrencia. Para el problema de monedas usamos cuatro casos base porque el paso agrega 4 unidades y debe cubrir todos los residuos relevantes.

Regla práctica:
Si el paso para construir P(k + 1) necesita casos hasta k - r, los casos base deben asegurar que ese índice ya pertenece al rango demostrado.

Omitir un caso base crea una brecha lógica: puede haber valores que nunca queden conectados con la regla inductiva.

9.15 Inducción fuerte y el principio del buen orden

El principio del buen orden afirma que todo subconjunto no vacío de los números naturales tiene un elemento mínimo. Es equivalente a la inducción matemática y ofrece otra manera de demostrar propiedades universales.

Una prueba típica por buen orden supone que hay contraejemplos y toma el menor. Como los casos menores cumplen la propiedad, se obtiene una contradicción. En el próximo tema estudiaremos este principio en detalle.

9.16 Plantilla para inducción fuerte

Definir P(n) y el valor inicial n0.

Casos base: demostrar P(n0), ..., P(r) si son necesarios.

Hipótesis inductiva fuerte: sea k ≥ r. Supongamos P(j) para todo j con n0 ≤ j ≤ k.

Paso inductivo: usar uno o varios de esos P(j) para demostrar P(k + 1).

Concluir P(n) para todo n ≥ n0.

9.17 Errores frecuentes

  • Suponer que la inducción fuerte prueba más resultados que la inducción simple.
  • No indicar con precisión el rango de la hipótesis inductiva.
  • Usar un caso anterior que no está cubierto por los casos base.
  • Olvidar considerar el caso en que el objeto analizado ya es primo o elemental.
  • Usar varios casos base sin explicar por qué son necesarios.
  • Confundir una verificación en código con una demostración para todos los tamaños de entrada.

9.18 Qué debes recordar de este tema

  • La inducción fuerte permite suponer la propiedad para todos los casos anteriores.
  • Es lógicamente equivalente a la inducción simple, pero más cómoda para ciertas dependencias.
  • La factorización prima y las recurrencias con varios términos son ejemplos clásicos.
  • Los algoritmos recursivos que generan subproblemas de distintos tamaños se justifican naturalmente con este método.
  • Los casos base deben cubrir los valores que necesita el paso inductivo.
  • El principio del buen orden ofrece una formulación equivalente que estudiaremos a continuación.

9.19 Conclusión

La inducción fuerte permite propagar una propiedad a través de los números naturales incluso cuando el siguiente caso depende de varias instancias anteriores. Por eso aparece en teoría de números, recurrencias, algoritmos recursivos y análisis de estructuras.

En el próximo tema veremos el principio del buen orden, una herramienta equivalente que basa las demostraciones en la existencia de un contraejemplo mínimo.