Cours : Logique de Hoare et vérification formelle
📌 1. Définitions & Cadre d’étude
Section titled “📌 1. Définitions & Cadre d’étude”La logique de Hoare est un formalisme axiomatique inventé par C.A.R. Hoare permettant de raisonner mathématiquement sur la correction des programmes impératifs.
Le Langage de Commande (Mini-langage impératif)
Section titled “Le Langage de Commande (Mini-langage impératif)”Soit un ensemble de variables et l’ensemble des expressions arithmétiques et booléennes. Les commandes (ou instructions) sont définies par la grammaire abstraite suivante :
Le Triple de Hoare
Section titled “Le Triple de Hoare”Un triple de Hoare est une expression de la forme : où :
- est la précondition : une assertion (prédicat logique sur les variables) vraie avant l’exécution de la commande .
- est une commande du langage impératif.
- est la postcondition : une assertion vraie après l’exécution de (si celle-ci se termine).
Correction Partielle vs Correction Totale
Section titled “Correction Partielle vs Correction Totale”- Correction partielle () : signifie que si l’exécution de démarrée dans un état satisfaisant se termine, alors l’état final satisfait .
- Correction totale () : (notation usuelle) signifie que l’exécution de démarrée dans un état satisfaisant se termine et l’état final satisfait .
📐 2. Théorèmes fondamentaux & Démonstrations clés
Section titled “📐 2. Théorèmes fondamentaux & Démonstrations clés”Le système de déduction de Hoare fournit des règles syntaxiques pour prouver la correction partielle.
Les Règles d’Inférence de Hoare
Section titled “Les Règles d’Inférence de Hoare”-
Règle de l’affectation : Note: désigne la substitution de toutes les occurrences libres de la variable par l’expression dans .*
-
Règle de la composition séquentielle :
-
Règle de l’alternative (if-then-else) :
-
Règle de la boucle while (Invariant) : I est appelé l’invariant de boucle.
-
Règle de conséquence (affaiblissement / renforcement) :
💡 3. Méthodes de calcul & Algorithmes
Section titled “💡 3. Méthodes de calcul & Algorithmes”Calcul de la plus fausse précondition (Weakest Precondition - WP)
Section titled “Calcul de la plus fausse précondition (Weakest Precondition - WP)”En pratique, pour automatiser la vérification (notamment en MPI), on raisonne par récurrence arrière en calculant la plus faible précondition qui garantit après l’exécution de .
-
Affectation :
-
Composition séquentielle :
-
Alternative :
-
Boucle While : Le calcul exact par WP n’est pas possible en général (indécidabilité de l’arrêt). On utilise un invariant fourni par l’utilisateur, et l’on vérifie trois conditions de verification (VC - Verification Conditions) :
- (L’invariant est établi avant d’entrer dans la boucle)
- (L’invariant est conservé par le corps de la boucle)
- (À la sortie de la boucle, l’invariant couplé à la négation de la garde implique la postcondition)
⚠️ 4. Pièges classiques aux Concours
Section titled “⚠️ 4. Pièges classiques aux Concours”-
Sens de la substitution dans l’affectation : L’erreur classique est d’écrire . C’est faux. Le calcul se fait toujours à l’envers : pour obtenir une propriété après l’affectation, il faut que la propriété substituée soit vraie avant. Exemple: * est correct car .
-
Oubli de la condition de terminaison pour la correction totale : Pour prouver la correction totale d’une boucle , trouver un invariant ne suffit pas. Il faut impérativement associer un variant de boucle (valeur entière strictement décroissante minorée par ) pour prouver la terminaison.
-
Affaiblissement / Renforcement inversés dans la règle de conséquence : On ne peut renforcer la précondition que par implication logique vers le bas ( permet d’élargir les cas valides), et affaiblir la postcondition de même (). Ne jamais inverser le sens des implications .