Adloun

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 s

Corrigé

  • 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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre