Preuve de programmes
Logique de Hoare
Exercice L’algorithme suivant calcule les entiers qet rt.q. q=x/y et
qy+r=x. Prouver :
{x0y > 0}
q:=0;
r:=x;
while r >= y do
r:=r-y;
q:=q+1;
done
{qy+r=x0r < y}
Correction:
On d´eroule l’algorithme avec x= 13 et y= 2:
q0 1 23456
r131197531
On pose Inv =qy+r=xr0. On prouve :
1. Avant le while:
{x0y > 0}
q:= 0;
r:= x;
{Inv}={qy+r=xr0}
{x0y > 0} ⇒
{x0} ≡
{x=xx0} ≡
{0y+x=xx0}
q:= 0;
{qy+x=xx0}
r:= x;
{qy+r=xr0}
1
2. Le while:
{Inv}={qy+r=xr0}
while rydo
r:= ry;
q:= q+ 1;
done
{Inv r < y}={qy+r=x0r < y}
{qy+r=xr0ry} ⇒
{qy+r=xry} ≡
{(qy+y+ry=xry} ≡
{(q+ 1) y+ry=xry0}
r:= ry;
{(q+ 1) y+r=xr0}
q:= q+ 1;
{qy+r=xr0}
3. On en conclut par la r`egle de cons´equence
{x0y > 0}
P rog
{qy+r=x0r < y}
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !