La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

H. Wertz -- Exécution Symbolique

Présentations similaires


Présentation au sujet: "H. Wertz -- Exécution Symbolique"— Transcription de la présentation:

1 H. Wertz -- Exécution Symbolique
D’abord un mini-langage : déclaration de procédure : nom: PROCEDURE (paramètre1, paramètre2, … paramètren) <suite-d’instructions> END; deux types de procédures : fonctions et subroutines (CALL) toute variable a des valeurs entiers : DECLARE var1, vae2, … varn INTEGER opérations de base : + * - … affectation : var := <expression> composition : DO <suite-d’instruction> END opérations booléenne : true, false, <, >, =, , , , & (et), | (ou),  (implique),  (not) conditionnelle : IF <booléen> THEN instruction1 ELSE instruction2 itérative : DO WHILE <booléen>; <suite-d’instructions> END; paramètres par référence, RETURN; (subroutine), RETURN(<expr>); (fonction) Chaque procédure possède 1 return, subroutine CALL nom(a1, a2, … a3); basé sur Hantler et King « an introduction to proving the correctness of programs », IBM Thomas J Watson Research Center, RC 5893, 24/02/2019 H. Wertz -- Exécution Symbolique

2 H. Wertz -- Exécution Symbolique
Assertions des contraintes sur les entrées et sorties peuvent être exprimées par des assertions : assertion d’entrée : ASSUME (<booléen>); exemple: ASSUME (P1 > 0); assertion de sortie : PROVE (<booléen>); exemple: PROVE ((X = Y) & (Y = X)); Un programme est (partiellement) correct si la vérification de l’assertion d’entrée implique la vérification de l’assertion de sortie Relation entre entrée et sortie : assertion 24/02/2019 H. Wertz -- Exécution Symbolique

3 Un programme exemple (simple)
1 ABSOLUTE: PROCEDURE(X); ASSUME(true); DECLARE X, Y INTEGER; IF X < 0 THEN Y := -X ELSE Y := X PROVE((Y = X | Y = -X) & Y  0 & X = X); RETURN(Y); 9 END; PROVE spécifie à la fois ce que le programme fais et ce qu’il ne fais pas 24/02/2019 H. Wertz -- Exécution Symbolique

4 Exécution symbolique de ABSOLUTE
Un appel typique : ABSOLUTE(); Cas  : <0 test-IF = true  THEN Y:=- Y=- X=X= (-= | -=-)& -0 & = démontrer: -0 ou <0 Cas  : 0 test-IF = false  ELSE Y:= Y= X=X= (= | =-)& 0 & = démontrer: 0 24/02/2019 H. Wertz -- Exécution Symbolique

5 équivalent exécution réelle = exécution algébrique
Affectation change exemple: X= Y= X:=Y+X  X:= + Y:=3*X-Y  Y:=3+2 CALL et RETURN ne changent pas IF change : soit true, soit false soit indéterminé si indéterminé, alors analyse de cas (pour la preuve et/ou pour trouver des cas impossibles) exemple : IF X<0 THEN Y:=88 IF X=3 THEN Y:=99 Indéterminé si expr. Booléenne sur les variables d’entrées 24/02/2019 H. Wertz -- Exécution Symbolique

6 Exemple de cas impossible
Y:= X=3 X=3 impossible … Y:=99 … non oui non oui Exécution symbolique fonctionne sur toutes les entrées possibles (satisfaisant les assertions d’entrée) 24/02/2019 H. Wertz -- Exécution Symbolique

7 Conditions de chemin (path-condition)
La path-condition (PC) donne à tout instant de l’exécution symbolique l’ensemble des valeurs symboliques en vigueur. Exemple : exécution symbolique de IF <bool> THEN <expression1> ELSE <expression2>  eval de <bool> donne B (symbolique)  si PC  B alors <expression1> est toujours exécuté si PC  B alors <expression2> est toujours exécuté si ni B ni B alors continuer en   assumer B et PC:=PCold&B exécuter <expression1>  assumer B et PC:=PCold& B exécuter <expression2> 24/02/2019 H. Wertz -- Exécution Symbolique

8 exécution symbolique des assertions
Exécution symbolique de ASSUME ASSUME(<bool>); 1 eval de <bool> donne B (symbolique) 2 PC:=PCold&B Exécution symbolique de PROVE PROVE(<bool>); 2 si PC  B alors le programme est vérifié sinon le programme est vérifié 24/02/2019 H. Wertz -- Exécution Symbolique

9 Arbre d’exécution symbolique
1 ABSOLUTE: PROCEDURE(X); ASSUME(true); DECLARE X, Y INTEGER; IF X < 0 THEN Y := -X ELSE Y := X PROVE((Y = X | Y = -X) & Y  0 & X = X); RETURN(Y); 9 END; Arbre fini 24/02/2019 H. Wertz -- Exécution Symbolique

10 Un 2ème programme exemple (moins simple)
1 GCD: PROCEDURE (M, N) ASSUME (M > 0 & N > 0); DECLARE M,N,A,B INTEGER; A:=M; B:=N; DO WHILE (A = B); IF A > B THEN A:=A-B; ELSE B:=B-A; END PROVE (A=(M,N)); RETURN(A); 14 END Exécution symbolique de DO WHILE similaire à IF (éventuellement arbre infini) (a,b) = pgcd de a et b Axiomes pour PGCD : (a,a) = a si a > 0 (a,b)=(b,a) (a,b)=(a-b,b) 24/02/2019 H. Wertz -- Exécution Symbolique

11 Arbre d’exécution pour GCD
1 GCD: PROCEDURE (M, N) ASSUME (M > 0 & N > 0); DECLARE M,N,A,B INTEGER; A:=M; B:=N; DO WHILE (A = B); IF A > B THEN A:=A-B; ELSE B:=B-A; END PROVE (A=(M,N)); RETURN(A); 14 END Arbre infini Branche non étiqueté : pc: m>0 & n>0 & m<n & m!=n-m 24/02/2019 H. Wertz -- Exécution Symbolique

12 Comment éviter les arbres infinis
chaque traversée d’une itération peut être marquée par une coupure au moins à un endroit de l’itération : commencer par une coupure et arrêter au RETURN ou à la coupure suivante Associé à chaque coupure un ASSUME et à sa fin un PROVE  on peut démontrer les coupures Preuve du programme devient somme des preuves des coupures 24/02/2019 H. Wertz -- Exécution Symbolique

13 H. Wertz -- Exécution Symbolique
ASSERT ASSERT (<bool>); au premier rencontre, ASSERT joue le rôle d’un PROVE c’est alors une assertion de sortie pour l’exécution symbolique arrivant à la coupure. C’est également une assertion d’entrée, un ASSUME, pour l’exécution symbolique commençant à la coupure. Sinon c’est la dernière instruction d’une coupure, c’est alors une assertion de sortie, un PROVE, qui devient une assertion d’entrée, un ASSUME, pour l’exécution symbolique suivant la coupure 24/02/2019 H. Wertz -- Exécution Symbolique

14 H. Wertz -- Exécution Symbolique
ASSERT (suite) ASSERT Assertion inductive ou prédicat inductive correspond à l’hypothèse dans les preuves par induction 24/02/2019 H. Wertz -- Exécution Symbolique

15 H. Wertz -- Exécution Symbolique
Retour vers GCD 1 GCD: PROCEDURE (M, N) ASSUME (M > 0 & N > 0); coupure2 DECLARE M,N,A,B INTEGER; A:=M; B:=N; DO WHILE (A = B); ASSERT ((A,B)=(M,N) & A  B); coupure7 IF A > B THEN A:=A-B; ELSE B:=B-A; END PROVE (A=(M,N)); RETURN(A); return 14 END 24/02/2019 H. Wertz -- Exécution Symbolique

16 et l’arbre arrivant à la coupure7
24/02/2019 H. Wertz -- Exécution Symbolique

17 Ensuite l’arbre à partir de la coupure7
24/02/2019 H. Wertz -- Exécution Symbolique

18 deuxième version de GCD
1 GCD2: PROCEDURE (M, N); ASSUME (M>0 & N>0); coupure2 DECLARE M, N, A, B, D INTEGER; A := M; B := N; DO WHILE (A  B); ASSERT ((A, B) = (M, N) & A  B); coupure7 D := ABSOLUTE(A-B); if A > B THEN A := D; ELSE B := D; END; PROVE (A = (M, N)); RETURN (A); return 15 END; 24/02/2019 H. Wertz -- Exécution Symbolique

19 H. Wertz -- Exécution Symbolique
première partie ( et retur ) ne change pas L’exécution de  et  return doit refaire l’exécution de ABSOLUTE chaque fois return return 24/02/2019 H. Wertz -- Exécution Symbolique

20 H. Wertz -- Exécution Symbolique
Arbre de GCD2 24/02/2019 H. Wertz -- Exécution Symbolique

21 H. Wertz -- Exécution Symbolique
Sous-procédures On invente des symboles pour chaque variable de la procédure appelante qui risque de changer de valeur par l’appel Au lieu d’exécuter symboliquement le corps de la sous-procédure, les valeurs des variables potentiellement changées sont remplacées par les nouvelles symboles Si la sous-procédure a été démontrée correcte, son assertion de sortie est valide pour ces nouvelles valeurs et donne les informations nécessaires sur ces valeurs pour démontrer le programme Assertions ne décrivent pas tout, mais seulement des aspects. Tout programme est correct par rapport à l’assertion de sortie T. L’information ne dit pas COMMENT mais QUOI : ((Y= | Y =-X) & Y>=0 & X=X ne dit rien sur le COMMENT 24/02/2019 H. Wertz -- Exécution Symbolique

22 Utiliser les preuves comme des lemmes
On crée des sous-procédures abrégées en : Changeant le ASSUME initial en PROVE (sans changer les arguments) Changeant le PROVE final en un ASSUME (sans changer les arguments) Remplaçant le corps de la sous-procédure par une séquence d’affectations (de nouveaux symboles), une pour chaque variable qui peut être altérée par la procédure 24/02/2019 H. Wertz -- Exécution Symbolique

23 H. Wertz -- Exécution Symbolique
ABSOLUTE abrégée 1 ABSOLUTE: PROCEDURE (X); PROVE (T) DECLARE X, Y INTEGER; X := newsymbol(); Y := newsymbol(); ASSUME ((Y=X | Y=-X) & Y0 & X=X); RETURN (Y) 8 END; 24/02/2019 H. Wertz -- Exécution Symbolique

24 H. Wertz -- Exécution Symbolique
Nouvel arbre de GCD2 24/02/2019 H. Wertz -- Exécution Symbolique


Télécharger ppt "H. Wertz -- Exécution Symbolique"

Présentations similaires


Annonces Google