Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 1 · Exercice de TD

Invariant du maximum

La discipline de programmation · niveau 2

Énoncé

Prouver par invariant la correction de la fonction suivante calculant le maximum d'une liste non vide :

def maximum(t: list) -> float:
    m = t[0]
    for i in range(1, len(t)):
        if t[i] > m:
            m = t[i]
    return m

Corrigé

Démonstration : Définissons la propriété : "au début de l'itération d'indice , la variable est égale au maximum de la sous-liste ".

  • Initialisation () : Avant le premier passage dans la boucle, , qui est bien l'unique valeur et donc le maximum de la liste réduite . La propriété est vraie.
  • Conservation : Supposons que est vraie au début de l'étape . Durant cette étape, on examine :
  • Si , la variable prend la valeur . devient supérieur à tous les éléments de et est égal à . C'est donc bien le maximum de .
  • Si , la valeur de reste inchangée. Comme majorait déjà , et qu'il majore également , il reste le maximum de . Dans tous les cas, la propriété est vraie à la fin de l'itération.
  • Conclusion : À la sortie de la boucle, . Par récurrence, est vraie : la variable est égale au maximum de , c'est-à-dire de la liste complète t. La postcondition est démontrée.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre