Invariant de boucle

Pourquoi parler d'invariant ?

Lorsqu'on utilise une boucle (for ou while), on modifie souvent des variables à chaque itération. Mais certaines propriétés restent vraies tout au long de la boucle : ce sont les invariants.

Un invariant de boucle est une condition logique qui est vraie :
  • avant la première itération de la boucle,
  • à la fin de chaque itération.
    Cela aide à comprendre et à prouver que l’algorithme fonctionne correctement.

Exemple : somme d’une liste

On souhaite calculer la somme des éléments d’une liste.

liste = [2, 5, 7, 3]
somme = 0
for valeur in liste:
    somme += valeur

Pendant l’exécution, à chaque tour de boucle :

  • somme contient la somme des éléments déjà parcourus de la liste.

Donc, invariant de boucle :

somme contient la somme des éléments de liste déjà vus.

Autre exemple : chercher le plus grand élément

liste = [6, 4, 9, 1]
maximum = liste[0]
for element in liste[1:]:
    if element > maximum:
        maximum = element

Ici, l’invariant est :

maximum contient la plus grande valeur parmi celles déjà parcourues.

Pourquoi c’est utile ?

  • Pour raisonner sur le fonctionnement d’un programme.
  • Pour vérifier qu’un algorithme est correct.
  • Pour démontrer un résultat en maths ou en informatique (preuve de correction).
Les invariants sont souvent utilisés dans les démonstrations formelles, mais même sans entrer dans les preuves, ils aident à mieux comprendre le comportement d’un algorithme.

En résumé

TermeSignification
Invariant de boucleUne propriété qui reste vraie à chaque tour de boucle
Avant la boucleL’invariant est déjà vrai avant la première itération
Après chaque itérationL’invariant reste vrai, même si les variables changent
UtilitéVérifier la logique, corriger un bug, ou prouver que l’algorithme fonctionne