Función variante

Definición

Una función variante es una expresión entera que, mientras la guarda de un ciclo sea verdadera, permanece no negativa y disminuye estrictamente en cada iteración. Se usa para demostrar terminación.

Obligaciones

Si es el invariante, la guarda, el cuerpo y la variante:

  1. Cota inferior: .
  2. Descenso: si antes de una vuelta , después se cumple .

Una sucesión estrictamente decreciente de enteros no negativos no puede ser infinita; por eso el ciclo termina.

Ejemplo mínimo

i := 0
while i < n do i := i + 1

Puede usarse:

  • Bajo , .
  • Después de i := i+1, la variante vale .
  • Disminuye exactamente en uno.

No confundir con el invariante

ObjetoPregunta que responde
[[Invariante de cicloInvariante]]
Variante¿Por qué no puede haber infinitas vueltas?

Una propiedad puede conservarse eternamente en un ciclo infinito. Por eso el invariante prueba corrección parcial, pero no terminación por sí solo.

Contraejemplo

Que una cantidad disminuya no basta si puede bajar sin límite. Sobre los enteros, i := i-1 hace disminuir , pero no demuestra que while true termine. Hace falta una cota inferior bien fundada.

Relaciones

Procedencia