Invariante de ciclo

Definición

Propiedad que es verdadera antes de iniciar un ciclo y que se conserva después de cada iteración.

Intuición

Resume aquello que el algoritmo ya ha conseguido y que las iteraciones futuras no deben destruir. Sirve como puente entre los pasos locales del ciclo y la afirmación global de corrección.

Formulación

Para un estado al inicio de la iteración , una propiedad es invariante si se justifican:

  1. Inicialización: .
  2. Mantenimiento: .
  3. Terminación: junto con la condición de salida implica la poscondición buscada.

En el algoritmo de los hot cakes puede usarse:

Además, cada iteración garantiza el progreso .

Ejemplo mínimo

En una búsqueda lineal, antes de examinar la posición , el valor buscado no aparece en las posiciones ya revisadas.

Contraejemplo o límites

Una propiedad observada en varios ejemplos no es un invariante hasta demostrar su inicialización y mantenimiento. La desigualdad expresa progreso; por sí sola no sustituye la propiedad estructural que se conserva.

Plantilla de Hoare

Para while B do C, un candidato debe satisfacer:

Una heurística útil es escribir el invariante como una relación entre lo hecho hasta ahora, lo que falta y el resultado final. En el factorial descendente, es el producto acumulado, es lo que falta y permanece constante.

Para demostrar terminación se necesita además una función variante; no forma parte del invariante.

Relaciones

Procedencia

Pregunta de repaso

  • ¿Qué expresión entera no negativa disminuye en cada vuelta del ciclo estudiado?