next up previous contents
suivant: Règles monter: Programmer avec des invariants précédent: Sémantique opérationnelle   Table des matières

Correction partielle et logique de Hoare

Pour la correction partielle on ne s'intéresse pas à la terminaison.

On définit:

$\{P\} \mathtt{I} \{Q\}$

$\{P\} \mathtt{I} \{Q\}$ signifie que si l'état du système vérifie l'assertion P alors après exécution de $S$, si l'instruction termine l'état du système vérifiera Q.

Plus précisément, les assertions considérées sont des assertions sur l'état du système (ici l'état des variables). En notant $S\models P$ le fait que $P$ est vrai dans l'état $S$, on aura (on suppose que pour tout $P$, $\bot \models P$):

\begin{displaymath}(\{P \} \mathtt{Inst} \{ Q \}) \Longleftrightarrow (\forall S...
...dels P \Longrightarrow \mathcal{I}(\mathtt{Inst})(S)\models Q) \end{displaymath}

$\{P\} \mathtt{I} \{Q\}$ peut servir à spécifier et à documenter les programmes. Mais, $P$ et $Q$ ne sont pas définis de façon unique.



Exemple: On a:

\begin{displaymath}\{x\geq 0\} \mathtt{x:= x+1} \{x \geq 0\}\end{displaymath}

Mais aussi:

\begin{displaymath}\{x\geq 0\} \mathtt{x:= x+1} \{x > 0\} \end{displaymath}

Ou encore

\begin{displaymath}\{y > 0\} \mathtt{x:= x+1} \{y \geq 0\} \end{displaymath}

Vérifions par exemple la première assertion. Soit un état $S$ qui vérifie $x\geq 0$, après l'affectation $\mathtt{x := x+1}$ la valeur de la variable $\mathtt{x}$ est supérieure ou égale à $1$ et on a donc aussi $x\geq 0$: le nouvel état $S'$ vérifie donc $S'\models x \geq 0$.



Remarques:



Plus généralement on a peut vérifier les propriétés suivantes:

Prouvons par exemple (1): Soit $S$ tel que $S\models P$, et $S'=\mathcal{I}(\mathtt{Ins})(S)$, par hypothèse $S'\models Q$, or $Q \Rightarrow S$ et donc $S'\models Q$ (tout état vérifiant $Q$ vérifie a fortiori $S$.

Les autres propriétés se prouveraient de la façon similaire en se ramenant à la sémantique opérationnelle du langage de programmation.

On peut définir la substitution dans les assertions: si $x$ est une variable figurant dans l'assertion $P$, $P[x\leftarrow c]$ est $P$ dans lequel toutes les occurrences de $x$ ont été remplacées par $c$. (Attention, il s'agit d'une définition informelle une définition complète devra différencier entre une variable libre et une variable liée). On a alors:

Exemple: Vérifier que en utilisant (4) que:

\begin{displaymath}\{x\geq 0\} \mathtt{x:= x+1} \{x > 0\} \end{displaymath}



Sous-sections
next up previous contents
suivant: Règles monter: Programmer avec des invariants précédent: Sémantique opérationnelle   Table des matières
Hugues FAUCONNIER 2003-01-09