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

CSI 3525, Sémantique axiomatique, page 1 Sémantique axiomatique Assignations Composition dinstructions Linstruction "if-else" Linstruction "while" Rétrécissement.

Présentations similaires


Présentation au sujet: "CSI 3525, Sémantique axiomatique, page 1 Sémantique axiomatique Assignations Composition dinstructions Linstruction "if-else" Linstruction "while" Rétrécissement."— Transcription de la présentation:

1 CSI 3525, Sémantique axiomatique, page 1 Sémantique axiomatique Assignations Composition dinstructions Linstruction "if-else" Linstruction "while" Rétrécissement et élargissement Arrêt Linstruction "if"

2 CSI 3525, Sémantique axiomatique, page 2 Vérification dun programme La vérification des programmes est faite en deux étapes: 1.Lassociation dune formule à chaque étape du programme. 2.La démonstration que le résultat finale est la conséquence logique des conditions initiales, après être passé par les étapes du programme.

3 CSI 3525, Sémantique axiomatique, page 3 Quest-ce que la sémantique axiomatique? La sémantique axiomatique des assignations, instructions composés, instructions conditionnelles et instructions itératives fut développée par le professeur C. A. R. Hoare. Les éléments de base sont les formules pour lassignation et la condition. Leffet des autres instructions est décrit par la règle dinférence qui combine les formules dassignations et de conditions (tout comme les instructions sont elle même des combinaisons dassignations et de conditions).

4 CSI 3525, Sémantique axiomatique, page 4 Lassignation Soit une formule contenant la variable v. v e est alors définie comme la formule obtenue à partir de quand toutes les occurrences de la variable v sont remplacées par lexpression e.

5 CSI 3525, Sémantique axiomatique, page 5 Remplacement, un exemple Avant le remplacement: h >= 0 & h 0 h 0 0 >= 0 & 0 0 Après le replacement

6 CSI 3525, Sémantique axiomatique, page 6 Autre exemple m == min(a i pour 1 <= i <= k–1) & k–1 <= N k k+1 m == min(a i pour 1 <= i <= (k+1) – 1) & (k+1)–1 <= N m == min(a i pour 1 <= i <= k) & k <= N

7 CSI 3525, Sémantique axiomatique, page 7 Laxiome pour lassignation { v e } v = e { } Exemple: { 0 >= 0 & 0 0 } x = 0; { x >= 0 & x 0 }

8 CSI 3525, Sémantique axiomatique, page 8 Deux exercices { ??? } z = z + 1; { z <= N } { a > b } a = a – b; { ??? }

9 CSI 3525, Sémantique axiomatique, page 9 Composition dinstructions Supposons que { ´ } S ´ { ´´ } et { ´´ } S ´´ { ´´´ } Alors, on conclu que { ´ } S ´ S ´´ { ´´´ } En autre mots: { ´ } S ´ { ´´ } S ´´ { ´´´ }

10 CSI 3525, Sémantique axiomatique, page 10 Un exemple x = 0; f = 1; while (x != n) { x = x + 1; f = f * x; } Nous voulons prouver: { f == x! } x = x + 1; f = f * x; { f == x! }

11 CSI 3525, Sémantique axiomatique, page 11 Appliquons la règle dinférence pour la composition. ´ estf == x! ´´´ estf == x! S ´ estx = x + 1; S ´´ estf = f * x; Le factoriel

12 CSI 3525, Sémantique axiomatique, page 12 Nous cherchons le ´´ pour lequel: { f == x! } x = x + 1; { ´´ } f = f * x; { f == x! } Observons que:f == x! f == ((x + 1) – 1)! Et donc:f == (x – 1)! x x + 1 f == x! { f == x! } x = x + 1; {f == (x – 1)! } ´ ´´ S ´S ´ Le factoriel (2)

13 CSI 3525, Sémantique axiomatique, page 13 Maintenant, observons que: f == (x – 1)! f * x == (x – 1)! * x == x! Donc, nous avons: f == x! f f * x f == (x – 1)! Et ainsi: {f == (x – 1)! } f = f * x; {f == x! } QED ´´ ´´´ S ´´ Le factoriel (3)

14 CSI 3525, Sémantique axiomatique, page 14 Linstruction "if-else" Supposons que { & } S´ { } et { & } S´´ { } Alors, on conclu que { } if ( ) S ´ else S ´´ { } Peu importe le cas choisi par linstruction if-else, le résultat est la même formule. Donc linstruction if-else en entier résulte en la formule.

15 CSI 3525, Sémantique axiomatique, page 15 Linstruction if ( a < 0 ) b = -a; else b = a; Rend la formule b == abs(a) vrai. Plus spécifiquement: {true} if ( a < 0 ) b = -a; else b = a; { b == abs(a) } esttrue estb == abs(a) esta < 0 S´ estb = -a; S´´ estb = a; "if-else", un exemple

16 CSI 3525, Sémantique axiomatique, page 16 Considerons chaque cas. Premièrement, si est vrai: true & a < 0 a < 0 – a == abs(a) Alors, daprès laxiome de lassignation: {– a == abs(a)} b = -a; {b == abs(a)} De la même façon, si est vrai: true & a < 0 a 0 a == abs(a) Alors: {a == abs(a)} b = a; {b == abs(a)} "if-else", un exemple (2)

17 CSI 3525, Sémantique axiomatique, page 17 Donc S´ et S´´ résultent en: b == abs(a) Nous avons donc prouvé: {true} if ( a < 0 ) b = -a; else b = a; { b == abs(a) } En autre mots, cette expression conditionnelle trouve abs(a). Elle fait avec aucune précondition: "true" signifie quil ny a aucune restriction sur les valeurs initiales de a et b. "if-else", un exemple (3)

18 CSI 3525, Sémantique axiomatique, page 18 Linstruction "while" Un invariant de boucle est une condition qui est satisfaite immédiatement avant le début dune boucle, demeure vrai lors de son exécution, et est toujours satisfaite à la sortie de la boucle. Supposons que { & } S { } [Cest à dire, S préserve (linvariant de boucle)] Alors, on conclu que { } while ( ) S { & } En autant que la boucle se termine (quelle nest pas infini).

19 CSI 3525, Sémantique axiomatique, page 19 Le factoriel (encore) x = 0; f = 1; while ( x != n ) { x = x + 1; f = f * x; } On sait que n 0. Après les instructions x = 0; f = 1; ce qui implique que f == x! (1 == 0!) Nous avons déjà démontré que: { f == x! } x = x + 1; f = f * x; { f == x! }

20 CSI 3525, Sémantique axiomatique, page 20 Maintenant, estf == x! estx != n estx == n En utilisant la règle dinférence pour les boucles "while": { f == x! } while ( x != n ) { x = x + 1; f = f * x; } { f == x! & x == n} Le factoriel (encore) (2)

21 CSI 3525, Sémantique axiomatique, page 21 Alors après la boucle, on a: f == x! & x == n f == n! Ainsi: { true }x = 0; f = 1; { f == x! } et: { f == x! }while ( x != n ) { x = x + 1; f = f * x; } { f == n!} Le factoriel (encore) (3)

22 CSI 3525, Sémantique axiomatique, page 22 Donc, nous avons montré que la boucle détermine f == n!, avec aucune précondition sur les valeurs initiales de f et n, tant que n 0. Ainsi, avec laxiome de la composition: { true }x = 0; f = 1; while ( x != n ) { x = x + 1; f = f * x; } { f == n!} Donc, le programme calcule le factoriel de n. Le factoriel (encore) (4)

23 CSI 3525, Sémantique axiomatique, page 23 Le résonnement est le suivant pour la boucle: une variable est ajustée rendant linvariant temporairement faux, mais un autre ajustement est fait qui rétablie linvariant. Donc linvariant est vérifié à la fin de la boucle. { f == x! } x = x + 1; {f == (x – 1)! } Linvariant est maintenant temporairement faux {f == (x – 1)! } f = f * x; {f == x! } Linvariant est maintenant rétablie Ce raisonnement nest pas valide pour les boucles infinie: la condition & nest pas atteinte, et la situation est indéterminée suivant la boucle. Le factoriel (encore) (5)

24 CSI 3525, Sémantique axiomatique, page 24 Rétrécissement et élargissement Supposons que ´ et { } S { } Alors, on conclu que { ´ } S { } Supposons que { } S { } et ´ Alors, on conclu que { } S { ´ } Ces règles peuvent permettre de rétrécir une précondition, ou délargir une postcondition.

25 CSI 3525, Sémantique axiomatique, page 25 Nous avons vu que n! est calculé pour tout n>=0, avec {true} comme précondition (le calcul réussit toujours); Donc, selon laxiome du rétrécissement, le calcul de n! réussira également pour n == 5. Rétrécissement et élargissement, un exemple

26 CSI 3525, Sémantique axiomatique, page 26 Autre exemple { N >= 1 } { N >= 1 & 1 == 1 & a 1 == a 1 } i = 1; s = a 1 ; { N >= 1 & i == 1 & s == a 1 } { N >= 1 & s == a 1 + … + a i } INVARIANT while ( i != N ) { { N >= 1 & s == a 1 + … + a i & i != N } i = i + 1; { N >= 1 & s == a 1 + … + a i–1 & i – 1 != N } s = s + a i ; { N >= 1 & s == a 1 + … + a i } } { N >= 1 & s == a 1 + … + a i & i == N } { N >= 1 & s == a 1 + … + a N }

27 CSI 3525, Sémantique axiomatique, page 27 Nous avons montré que ce programme calcul la somme de a 1,..., a N. La précondition N >= 1 est seulement nécessaire pour démontrer la terminaison. Autre exemple (2)

28 CSI 3525, Sémantique axiomatique, page 28 Arrêt Les preuves précédentes sont seulement partiellement correcte. Il reste a démontrer que les boucles se terminent. Une preuve correcte doit également montrer que toutes les boucles auront toujours un nombre fini ditérations. On peut montrer quune boucle se terminera en montrant que chaque itération nous rapproche de la condition darrêt.

29 CSI 3525, Sémantique axiomatique, page 29 Encore le factoriel Initialement, x == 0. Chaque itération incrémente x de 1, donc, on passe par les nombres: 0, 1, 2,... n >= 0 sera nécessairement un de ces nombres Ce raisonnement ne fonctionnerait pas pour n < 0, et la condition darrêt ne serait pas atteinte pour ces valeurs.

30 CSI 3525, Sémantique axiomatique, page 30 Une fonction décroissante Une boucle termine quand une fonction des variables du programme atteint 0 lors de lexécution de la boucle. Pour le factoriel, la fonction pourrait être n – x. La valeur de la fonction est initialement n et diminue de 1 à chaque itération. Pour la somme, on peut choisir N – i.

31 CSI 3525, Sémantique axiomatique, page 31 Multiplication par des additions successives { B >= 0 & B == B & 0 == 0} POUR LARRÊT b = B; p = 0; { b == B & p == 0 } { p == A * (B – b) } INVARIANT while ( b != 0 ) { p = p + A; { p == A * (B – (b – 1)) } b = b - 1; { p == A * (B – b) } } { p == A * (B – b) & b == 0} { p == A * B } La boucle termine, puisque la valeur de b atteint 0.

32 CSI 3525, Sémantique axiomatique, page 32 Exemple Montrons que: p = a; a = b; b = p; échange les valeurs de a et b : { a == A & b == B } p = a; a = b; b = p; { b == A & a == B } Les étapes de la preuve: { a == A & b == B }p = a; { p == A & b == B }a = b; { p == A & a == B }b = p; { b == A & a == B }

33 CSI 3525, Sémantique axiomatique, page 33 x = x + y; y = x - y; x = x - y; Exemple Quel est leffet de la suite dinstruction suivante sur les variables entières x, y:

34 CSI 3525, Sémantique axiomatique, page 34 {x == X & y == Y } {x + y == X + Y & y == Y }x = x + y; {x == X + Y & y == Y } {x == X + Y & x - y == X }y = x - y; {x == X + Y & y == X } { x - y == Y & y == X }x = x - y; { x == Y & y == X } Exemple (suite)

35 CSI 3525, Sémantique axiomatique, page 35 Le plus grand commun diviseur { X > 0 & Y > 0 } a = X; b = Y; { } que devrait-être linvariant? while ( a != b ) { & a != b } { if ( a > b ) { & a != b & a > b } a = a - b; else { & a != b & (a > b) } b = b - a; } { & (a != b) } { PGCD( X, Y ) == a }

36 CSI 3525, Sémantique axiomatique, page 36 On aura besoin de ces propriétés des pgcd: PGCD( n + m, m ) == PGCD( n, m ) PGCD( n, m + n ) == PGCD( n, m ) La première étape (de façon très formelle): { X > 0 & Y > 0 } { X > 0 & Y > 0 & X == X & Y == Y } a = X; b = Y; { a > 0 & b > 0 & a == X & b == Y } PGCD (2)

37 CSI 3525, Sémantique axiomatique, page 37 Quand la boucle termine, on a: a == b & PGCD( a, b ) == a On voudra probablement donc cette condition dans linvariant: a == b & PGCD( X, Y ) == PGCD( a, b ) Au début de la boucle: { a > 0 & b > 0 & a == X & b == Y } {a > 0 & b > 0 & PGCD( X, Y ) == PGCD( a, b ) } Donc linvariant sera: a > 0 & b > 0 & PGCD( X, Y ) == PGCD( a, b ) PGCD (3)

38 CSI 3525, Sémantique axiomatique, page 38 On veut prouver que {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b) & a != b} while {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b)} La condition finale sera donc: a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b) & a == b Ce qui implique: PGCD( X, Y ) == a PGCD (4)

39 CSI 3525, Sémantique axiomatique, page 39 La boucle consiste en une instruction conditionnelle. La preuve sera faite si on démontre: {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b) & a != b} if ( a > b ) a = a - b; else b = b - a; {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b)} PGCD (5)

40 CSI 3525, Sémantique axiomatique, page 40 Considérons le cas a > b: {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b) & a != b & a > b } {a – b > 0 & b > 0 & PGCD(X, Y) == PGCD(a – b, b)} a = a - b; {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b)} PGCD (6)

41 CSI 3525, Sémantique axiomatique, page 41 Maintenant, le cas a > b. {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b) & a != b & (a > b) } {a > 0 & b – a > 0 & PGCD(X, Y) == PGCD(a, b – a)} b = b - a; {a > 0 & b > 0 & PGCD(X, Y) == PGCD(a, b)} PGCD (7)

42 CSI 3525, Sémantique axiomatique, page 42 Les deux cas du if-else emmènent la même condition finale. Il reste seulement à montrer que la boucle termine. On montre que max( a, b ) diminue à chaque itération de la boucle. Soit a == A, b == B au début dune itération. Supposons dabord que a > b: max( a, b ) == A, donc a – b < A, b < A, donc max( a – b, b ) < A. PGCD (8)

43 CSI 3525, Sémantique axiomatique, page 43 Et si a < b: max( a, b ) == B, b – a < B, a < B, donc max( a, b – a ) < B. Puisque a > 0 et b > 0, max( a, b ) > 0. Donc la diminution de a et b ne peut pas se poursuivre indéfiniment. QED PGCD (9)

44 CSI 3525, Sémantique axiomatique, page 44 Linstruction "if" Supposons que { & } S { } et & Alors, on conclu que { } if ( ) S { }

45 CSI 3525, Sémantique axiomatique, page 45 Démontrons que: { N > 0 } k = 1; m = a 1 ; while ( k != N ) { k = k + 1; if ( a k < m ) m = a k ; } { m == min( 1 <= i & i <= N: a i ) } Un exemple de "if"

46 CSI 3525, Sémantique axiomatique, page 46 Le fait que la boucle se termine est évidant: N – k vers zéro. Linvariant de la boucle: à la k ième itération, après avoir inspecté a 1,..., a k, on sait que m == min( 1 <= i & i <= k : a i ). Initialement, on a: { N > 0 } k = 1; m = a 1 ; { k == 1 & m == a 1 } { k == 1 & m == min( 1 <= i & i <= k : a i ) } Minimum (1)

47 CSI 3525, Sémantique axiomatique, page 47 Nous devons donc démontrer: { m == min( 1 <= i & i <= k : a i ) & k != N } k = k + 1; if ( a k < m ) m = a k ; { m == min( 1 <= i & i <= k : a i ) } Minimum (2)

48 CSI 3525, Sémantique axiomatique, page 48 { m == min( 1 <= i & i <= k : a i ) & k != N } { m == min( 1 <= i & i <= (k + 1) – 1: a i ) & (k + 1) – 1 != N } k = k + 1; { m == min( 1 <= i & i <= k – 1: a i ) & k – 1 != N } Notons que k – 1 != N assure lexistence de a k. Minimum (3)

49 CSI 3525, Sémantique axiomatique, page 49 Il reste à démontrer: { m == min( 1 <= i & i <= k – 1: a i ) & k – 1 != N } if ( a k < m ) m = a k ; { m == min( 1 <= i & i <= k: a i ) } On utilisera le fait que: min( 1 <= i & i <= k: a i ) == min2( min( 1 <= i & i <= k – 1: a i ), a k ) Minimum (4)

50 CSI 3525, Sémantique axiomatique, page 50 Considérons les deux cas de lexpression conditionnelle. Premièrement, (a k < m). {m == min(1 <= i & i <= k – 1: a i ) & k – 1 != N & (a k < m)} {m == min2(min( 1 <= i & i <= k – 1: a i ), a k )} {m == min(1 <= i & i <= k: a i )} Minimum (5)

51 CSI 3525, Sémantique axiomatique, page 51 Deuxièmement, a k < m. {m == min(1 <= i & i <= k – 1: a i ) & k – 1 != N & a k < m} {a k == min2( min( 1 <= i & i <= k – 1: a i ), a k )} {a k == min(1 <= i & i <= k: a i )} m = a k ; {m == min(1 <= i & i <= k: a i )} Donc la boucle préserve la condition m == min( 1 <= i & i <= k: a i ) Minimum (6)

52 CSI 3525, Sémantique axiomatique, page 52 La boucle en entier fonctionne donc ainsi: { m == min( 1 <= i & i <= k: a i ) } while ( k != N ) } k = k + 1; if ( a k < m ) a k = m; } { m == min( 1 <= i & i <= k: a i ) & k == N } { m == min( 1 <= i & i <= N: a i ) } Nous avons montré que le programme trouve le minimum parmi N nombres, si N > 0. QED Minimum (7)

53 CSI 3525, Sémantique axiomatique, page 53 Encore une boucle "while" { B > 0 } POUR LA TERMINAISON b = 1; p = A; while ( b != B ) { b = b + 1; p = p * A; } { ??? } Exemples

54 CSI 3525, Sémantique axiomatique, page 54 { B > 0 & 1 == 1 & A == A} POUR LA TERMINAISON b = 1; p = A; { b == 1 & p == A } { p == A ** b } INVARIANT while ( b != B ) { b = b + 1; { p == A ** (b - 1) } p = p * A; { p == A ** b } } { p == A ** b & b == B} { p == A ** B } La boucle se termine: la valeur B - b devient 0. Exemples Encore une boucle "while (2)

55 CSI 3525, Sémantique axiomatique, page 55 { N > 0 } POUR LA TERMINAISON k = 1; while ( k != N ) { if ( A k > A k+1 ) { p = A k ; A k = A k+1 ; A k+1 = p; } k = k + 1; } { ??? } Un autre example avec "if" Exemples

56 CSI 3525, Sémantique axiomatique, page 56 { N > 0 } FOR TERMINATION k = 1; { A k == max( 1 <= i & i <= k: A i ) } INVARIANT while ( k != N ) { { A k == max( 1 <= i & i <= k: A i ) & k != N } if ( A k > A k+1 ) { p = A k ; A k = A k+1 ; A k+1 = p; } { A k+1 == max( 1 <= i & i <= k+1: A i ) } k = k + 1; { A k == max( 1 <= i & i <= k: A i ) } } {A k == max( 1 <= i & i <= k: A i ) & k = N } {A N == max( 1 <= i & i <= N: A i ) } Exemples Un autre example avec "if (2)

57 CSI 3525, Sémantique axiomatique, page 57 {A k == max( 1 <= i & i <= k: A i ) & k != N } Cas 1: A k > A k+1 { A k == max( 1 A k+1 } p = A k ; { p > A k+1 } A k = A k+1 ; { p > A k } A k+1 = p; { A k+1 > A k } { A k+1 == max( 1 <= i & i <= k+1: A i ) } Cas 2: A k <= A k+1 { A k == max( 1 <= i & i <= k: A i ) & k != N & A k <= A k+1 } { A k+1 == max( 1 <= i & i <= k+1: A i ) } Examples Un autre example avec "if (3)


Télécharger ppt "CSI 3525, Sémantique axiomatique, page 1 Sémantique axiomatique Assignations Composition dinstructions Linstruction "if-else" Linstruction "while" Rétrécissement."

Présentations similaires


Annonces Google