Preuve de programmes
Logique de Hoare
Exercice L’algorithme suivant calcule les entiers qet rt.q. q=x/y et
q∗y+r=x. Prouver :
{x≥0∧y > 0}
q:=0;
r:=x;
while r >= y do
r:=r-y;
q:=q+1;
done
{q∗y+r=x∧0≤r < y}
Correction:
On d´eroule l’algorithme avec x= 13 et y= 2:
q0 1 23456
r131197531
On pose Inv =q∗y+r=x∧r≥0. On prouve :
1. Avant le while:
{x≥0∧y > 0}
q:= 0;
r:= x;
{Inv}={q∗y+r=x∧r≥0}
{x≥0∧y > 0} ⇒
{x≥0} ≡
{x=x∧x≥0} ≡
{0∗y+x=x∧x≥0}
q:= 0;
{q∗y+x=x∧x≥0}
r:= x;
{q∗y+r=x∧r≥0}
1
2. Le while:
{Inv}={q∗y+r=x∧r≥0}
while r≥ydo
r:= r−y;
q:= q+ 1;
done
{Inv ∧r < y}={q∗y+r=x∧0≤r < y}
{q∗y+r=x∧r≥0∧r≥y} ⇒
{q∗y+r=x∧r≥y} ≡
{(q∗y+y+r−y=x∧r≥y} ≡
{(q+ 1) ∗y+r−y=x∧r−y≥0}
r:= r−y;
{(q+ 1) ∗y+r=x∧r≥0}
q:= q+ 1;
{q∗y+r=x∧r≥0}
3. On en conclut par la r`egle de cons´equence
{x≥0∧y > 0}
P rog
{q∗y+r=x∧0≤r < 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 l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!