• Aucun résultat trouvé

Preuve de programmes

N/A
N/A
Protected

Academic year: 2022

Partager "Preuve de programmes"

Copied!
5
0
0

Texte intégral

(1)

Preuve de programmes

Introduction

On prouve lacorrectiond'un programme par rapport à sa spécication.

On manipuledeux langages: le langage de programmation et le langage logique de spécication.

Langage de programmation : assignations, opérateurs arithmétiques, composition, while, if-then-else, tableaux.

Langage de spécication : logique du premier ordre avec égalité et arithmétique.

On fait unevérication statiqueen raisonnant sur le programme et sur des assertions logiques à propos de ce programme.

1

Exemple introductif S:= 0;

N:=1;

while 101 > N do S:= S+N;

N:=N+1;

done

But :démontrer que la valeur nale de S est 5050.

S:= 0;

N:=1;

{S = 0∧N = 1}

while 101 > N do {101> N}

{101≥N} S:= S+N;

N:=N+1;

done {101≤N}

(2)

Déroulement de l'algorithme

S N

0 1

0 + 1 2

0 + 1 + 2 3

0 + 1 + 2 + 3 4 ...

0 + 1 +. . .+k−1 k

S = 1 + 2 +. . .+ (N −1) = N∗(N−1) 2

4

S:= 0;

N:=1;

{S = 0∧N = 1}

while 101 > N do

invariant : {S= N(N21),101≥N} S:= S+N;

N:=N+1;

done {101≤N}

{101≤N∧101≥N ∧S = N(N21)}⇒S = 101∗1002 = 5050

5

Logique de Hoare

Syntaxe : on manipule de formules de la forme {P} P rog{Q}

oùP et Qsont deux formules du calcul des prédicats.

Intuition: siP est une formule vraie avant l'exécution de P rog et siP rog est exécuté ettermine, alors la formule Qest vraie après l'exécution deP rog.P rog est ainsi un transformateur de prédicats.

On se donne desaxiomes et desrègles d'inférence pour établir des théorèmesde la forme{P}P rog {Q}.

Cas spéciaux

{true} x:= 0 {x= 0}

{f alse} x:= 0 {x= 1}

{f alse} P rog {Q}

(3)

Règles de la logique de Hoare Axiome de substitution :

{Q{v/exp}}v :=exp{Q} Example :

{x= 5} x:=x+ 1 {x= 6}

{x+y = 10} z:=x+y {z= 10}

{x≥y} x:=x−y {x≥0}

{z > y+ 50} x:=z−43 {x > y+ 7}

8

Règle de composition séquentielle :

{P}P rog1{R} {R} P rog2 {Q} {P} P rog1;P rog2 {Q}

Example :

{x =b∧y =a} z:=x;x:=y;y:=z {x=a∧y=b}

{x+y= 22} x:=x+ 1;z:=x+ 2;y:=y+z {y= 25}

9

Règle du conditionnelle :

{P∧C}P rog1{Q} {P∧ ¬C} P rog2 {Q} {P} if C thenP rog1elseP rog2{Q}

{P ∧C} P rog {Q} (P ∧ ¬C)→Q {P} if CthenP rog {Q}

Nous écrivons C pour spécier la condition logique C dans la syntaxe du langage de programmation en question.

Example :

{true}if a >0thenb:=aelseb:=−a{b≥0}

Règle de conséquence :

P →P {P} S {Q} Q→Q {P} S {Q}

(4)

Règle du while :

{Inv∧C}S {Inv}

{Inv}whileCdoSdone {Inv∧ ¬C}

Conseils/remarques :

L'invariant décrit un état intermédiaire entre l'état initial des variables et l'état nal que l'on veut obtenir.

Écrire les instructions de boucles pour maintenir cet invariant.

Initialiser les variables pour que l'invariant soit vrai au premier passage.

Écrire la condition de sortie de boucle en se servant de l'invariant.

12

Correction et terminaison

Dans ce système on peut prouver un théorème{P} P rog {Q} même siP rog ne termine pas ou si il n'est pas exécuté ⇒notion de correction partielle.

Example :

{x≤10} whilex̸= 10dox:=x+ 1done {x= 10}

{true} whilex̸= 10dox:=x+ 1done {x= 10}

{x >10} whilex̸= 10dox:=x+ 1done {f aux}

13

Toutes les règles

{Q{v/exp}}v:=exp{Q}

{P}P rog1{R} {R}P rog2{Q} {P}P rog1;P rog2{Q} {P∧C}P rog1{Q} {P∧ ¬C}P rog2{Q}

{P}if CthenP rog1elseP rog2{Q} {P∧C}P rog {Q} (P ∧ ¬C)→Q

{P}if CthenP rog {Q} {Inv∧C}S {Inv}

{Inv}whileC doSdone{Inv∧ ¬C}

P→P {P}S {Q} Q→Q {P}S {Q}

Exercice

Donner des règles pour les opérateurs suivants :

do P until C done

let x = P in R

(5)

La pré-condition la plus faible

Si{P}P rog{Q}est un théorème, on dit que P est la pré-condition la plus faible ssi pour tout autre théorème {P}P rog {Q} on a P →P.

On note dans ce cas la propriétéP commewp(P rog, Q). On a donc

{wp(P rog, Q)}P rog {Q}

16

Exercice

Compléter tous les détails de la preuve suivante : {true}

S:= 0;

N:=1;

while 101 > N do S:= S+N;

N:=N+1;

done {S=5050}

17

Exercice

L'algorithme suivant calcule les entiers q et r t.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}

Références

Documents relatifs

— Nous donnons une courte démonstration de ce que les classes des varié- tés singulières définies par Marie-Hélène Schwartz au moyen des « champs radiaux » coïncident avec

– Sous cette même précondition, la valeur de len(t) − i à la fin du corps de la boucle est strictement plus petite qu’au début. Donc le

– Sous cette même précondition, la valeur de len(t)− i à la fin du corps de la boucle est strictement plus petite qu’au début. Donc le

Pour montrer la terminaison : on introduit un variant de boucle... Si t[i] = x, elle est vérifiée également... 4) : quantité entière positive ou nulle qui décroît strictement à

Exercice L’algorithme suivant calcule les entiers q et

Ce type d'élément de preuve est essentiel dans les processus judiciaires tant il est vrai que l'origine des éléments (contradictoires ou pas) est crucial ainsi que la

L'exécution de Why3 sur ce programme traduit le code annoté en un ensemble de conditions à prouver, exprimées sous la forme de triplets de Hoare.. Les règles d'inférence du calcul

Les premières discussions ont eu lieu avec le Dr. Stuart Lynn, Vice Président des technologies de l’information. Cornell a une longue tradition d’innovation dans le domaine