Département d'Informatique |
Maîtrise d'Informatique 2001/2002 |
Spécifications formelles, preuves |
& construction de programmes |
Travaux dirigés |
Mercredi 21 novembre |
Logique de Hoare
Où l'on utilise
le triplet de Hoare {p}P{q} et les règles de déduction associées,
pour faire la preuve de correction de programmes impératifs.
1 Quelques extraits de programmes
Démontrer les théorèmes suivants (indiquer les règles à utiliser) :
-
{x>=0}y:=x+1{y>0}
- {vrai}a:=x;b:=x{a=b}
- {a>0}if a>b then b:=a{b>0}
2 Itération et invariant
On désire démontrer le théorème suivant :
{x=0 /\ y=a} |
while y<>0 do { |
x:=x+b; |
y:=y-1 |
} |
|
{x=a × b} |
-
Montrer que x + (y × b) = a × b est
un invariant de l'itération ci-dessus.
- En déduire la preuve de ce théorème.
3 Recherche d'invariant
Trouver un invariant (en décomposant la post-condition),
puis démontrer les théorèmes suivants :
-
Somme de deux entiers n et m :
{vrai}
a:=n;b:=m;
while b<>0 do {
a:=a+1;
b:=b-1
}
{a=n+m}
- Carré d'un entier n :
{vrai}
c:=0;i:=0;
while i<>n do {
c:=c+2*i+1;
i:=i+1
}
{c=n2}
4 Correction totale
Le programme suivant calcule la somme des diviseurs d'un entier n . Démontrer la correction
partielle (écrire la post-condition et trouver un invariant),
puis montrer la terminaison.
d:=1;s:=0;
while d<>n do {
if n mod d = 0 then s:=s+d;
d:=d+1
}
Mêmes questions pour le programme suivant
qui calcule le n-ième terme de la suite de
Fibonacci.
f:=1;i:=1;u:=0;
while i<>n do {
z:=f;f:=f+u;u:=z;
i:=i+1
}
This document was translated from LATEX by
HEVEA.