Invariant du maximum
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 1 — La discipline de programmation
É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 mCorrigé
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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.