Invariant de boucle : démontrer la correction d'une boucle

Pour montrer qu'une boucle se termine, on peut montrer l'existence d'un variant de boucle

Pour montrer la correction d'une boucle, on peut montrer l’existence d’un invariant de boucle.

Un invariant de boucle est une propriété qui est vraie avant la boucle et qui reste vraie à chaque passage de la boucle. (lié au principe de récurrence)

Exemples

Calcul de $n!$

On note $n_k$ et $p_k$ les valeurs de $n$ et $p$ après $k$ itérations de la boucle.

Un invariant de boucle : $p_k\times n_k!=a!$

Un variant de boucle : $n$

Calcul de $2^n$

On note $r_k$ et $i_k$ les valeurs de $r$ et $i$ après $k$ itérations de la boucle.

invariant de boucle : $r_k=2^k$

variant de boucle : $i$

Exponentiation rapide : calcul de $a^n$

invariant de boucle : $a^n = {a_k}^{n_k}\times r_k$

variant de boucle : $n$

Version récursive :

On montre par récurrence forte sur $n$ que la fonction retourne $a^n$

calcule le pgcd de $a$ et $b$

invariant de boucle : pgcd$(a,b) = $pgcd$(a_k,b_k)$

variant de boucle : $b$