Invariante de programa

Definición

Aserción (I) que un fragmento (C) preserva:

Intuición

Las variables pueden cambiar, pero la relación descrita por (I) sigue siendo verdadera. Un invariante caracteriza una estructura estable, no necesariamente valores constantes.

Ejemplo mínimo

El bloque:

i := i + 1
r := 2 * r

preserva (r=2^i). Si (r_0=2^{i_0}), entonces:

Contraejemplo o límites

Comprobar algunos valores no demuestra invariancia para todos los estados. Hace falta una prueba simbólica. Además, una propiedad preservada por el cuerpo de un ciclo no basta como invariante de ciclo si no se demuestra que vale antes de la primera iteración.

Cuando aparece dentro de un ciclo

La preservación es solo una pieza. En un while B do C se usa la hipótesis más precisa , se prueba inicialización y se combina con al salir. Para terminación se añade una función variante.

Desarrollo completo: Ciclos: invariante, salida y variante.

Relaciones

Procedencia