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:
- Cota inferior: .
- 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 + 1Puede usarse:
- Bajo , .
- Después de
i := i+1, la variante vale . - Disminuye exactamente en uno.
No confundir con el invariante
| Objeto | Pregunta que responde |
|---|---|
| [[Invariante de ciclo | Invariante]] |
| 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
- Completa la prueba de: corrección total.
- Acompaña a: invariante de ciclo.
- Produce VCs adicionales en: condiciones de verificación.
Procedencia
- Fuente:
/Users/diegovillalba/Downloads/AllLectures.pdf, páginas PDF 79–91. - Ejemplo completo: Ciclos: invariante, salida y variante.