informatique (tronc commun des prépas scientifiques) · Chapitre 10 · Application directe du cours
Annoter et prouver totalement
Prouver et analyser : la boîte à outils formalisée · niveau 1 (application)
Énoncé
Annoter et prouver totalement la fonction suivante :
def somme_impairs(n: int) -> int:
s, k = 0, 0
while k < n:
s = s + 2 * k + 1
k = k + 1
return sCorrigé
- Précondition : .
- Postcondition : Renvoie .
- Invariant : .
- Initialisation : Avant la boucle, et . On a bien , l'invariant est initialisé.
- Conservation : Supposons vrai et au début d'un tour. Après le tour, la nouvelle valeur vaut et la nouvelle valeur vaut . On a bien . L'invariant est conservé.
- Conclusion : En sortie de boucle, (par négation de la condition) et (puisque commence à 0 et progresse de 1 à chaque étape). Donc . L'invariant donne alors . La postcondition est démontrée.
- Variant : . C'est un entier. Tant que la boucle tourne, . À chaque tour, augmente de 1 donc diminue strictement de 1. La terminaison est prouvée. L'algorithme est totalement correct et calcule le carré de par somme d'impairs.