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

Correction de Programmes H. Wertz1 Correction de Programmes Soit lorganigramme suivant : M 0, M,N Ent. Nat. J = I N invariante de boucle I = M condition.

Présentations similaires


Présentation au sujet: "Correction de Programmes H. Wertz1 Correction de Programmes Soit lorganigramme suivant : M 0, M,N Ent. Nat. J = I N invariante de boucle I = M condition."— Transcription de la présentation:

1 Correction de Programmes H. Wertz1 Correction de Programmes Soit lorganigramme suivant : M 0, M,N Ent. Nat. J = I N invariante de boucle I = M condition de terminaison J = M N assertion de corretion Exécution réelle : p.ex.: M=3 et N=5 Exécution symbolique : M=m et N=n

2 Correction de Programmes H. Wertz2 Comment trouver une Invariante Nombre de fois lexécution traverse 2 Valeur de IValeur de J 100 21N 32 2 N ……… ……… M+1M M N J = I N Boucle 2-3-4 M-fois exécutée

3 Correction de Programmes H. Wertz3 La preuve de correction (partielle) Démontrons par induction sur le nombre dexécution du point 2 que J = I N 1.Si ==1 alors I=0 et J=0 donc: J=I N=0 N 2.Supposons J n =I n N pas : I n+1 =I n +1 et J n+1 =J n +N alors : J n+1 =I n N + N (par hypothèse) =(I n +1) N =I n+1 N

4 Correction de Programmes H. Wertz4 La preuve de terminaison Il faut démontrer que si M 0 alors I=M après un nombre fini de pas Induction vers le haut sur I=m : faut démontrer que si M 0 avec 0 m M alors exécution arrive à 2 avec I=M 1) base : si m=0 alors I=0 et M=0 implique I=M 2) pas : I=m, 0 m M au point 2 montrons que lexécution arrive à 2 avec I=m+1 : si I=m, 0 m M non(I=M) une exécution de la boucle I=m+1 Fin de la preuve de J=I N et de la terminaison du programme

5 Correction de Programmes H. Wertz5 Calcul du Quotient et Reste 0<=J1, 1<=J2 (assertion dentrée) J1=IQ J2 + IR et 0<=IR<J2 (terminaison) J1=IQ*J2 + IR (invariante)

6 Correction de Programmes H. Wertz6 linvariante du programme 2 donc: IR = J1-IQ J2 donc : J1 = IQ J2 + IR nombre de fois lexécution traverse 2 Valeur de IQValeur de IR 10J1 21J1 – J2 32 J1 – 2 J2 43 J1 – 3 J2 ……… M+1M J1 – M J2

7 Correction de Programmes H. Wertz7 Preuve de correction du programme 2 Pour démontrer que J1=IQ J2+IR (au point 2) 1)base: IQ=0, IR=J1 2)Après 1 exécution de la boucle 2-3-4 : IQ n+1 J2+IR n+1 =(IQ n +1) J2+IR n -J2 = J1 Puisquil ny a pas de modification sur le chmein 2 – 6 la correction est démontrée

8 Correction de Programmes H. Wertz8 Preuve de terminaison Condition de Terminaison : 0<=IR<J2 1)Démontrer 0<=IR a)IR=J1 et 0<=J1 b)0 = J2 alors IR n+1 =IR n -J2 0<=IR n – J2 = IR n+1 2) Démontrer IR<J2 puisque 1<=J2 et IR n+1 :=IR n -J2 alors IR n+1 <IR n

9 Correction de Programmes H. Wertz9 Sur la Terminaison (1) F(I) I + 1 soit I 0 >M et prog termine à n=1 Sinon, supposons quaprès n 0 exéc. le prog. termine, on a alors: 1)I>M et I I 0 +n 0 -1 (puisque F(I)- 1 I) Donc : M M-I 0 +1 2)Et: n 0 M-I 0 +2 ( puisque dernière exec ) 1)&2) I I 0 +(M-I 0 +2)-1= M+1 Par induction : M< I 0 +n 0 -1 et I I 0 +n 0 -1 Après une exécution on a : I I 0 +n 0 -1 + 1 = I+n 0 > I 0 +n 0 -1

10 Correction de Programmes H. Wertz10 Sur la Terminaison (2) I-1 G(I) Soit I 0 < M alors à n=1 le prog. Termine Sinon, supposons quaprès n 0 exéc. le prog. termine, on a alors: Puisque G(I) I -1 I I 0 – (n 0 – 1) = I 0 – n 0 + 1 I<M I 0 – n 0 + 1 < M n 0 > I 0 –M+1 pour n 0 = I 0 –M+2 on a : I I 0 I 0 + M 2 + 1 = M 1

11 Correction de Programmes H. Wertz11 3 ième programme exemple N, M 0 J = M N J=(M I)N nIJ 0M0 1M-1N 2M-2N+N=2N 3M-32N+N=3N 4M-43N+N=4N ……… mM-mmNmN J = (M – I) N

12 Correction de Programmes H. Wertz12 Preuve de la correction du 3 ième programme Preuve par induction sur le nombre de passages en point 2 Base : n=1 I=M (M-M) N = 0 = J = 0 M Pas : I n+1 = I n – 1 J n+1 = J n + N = (M – I n ) N + N( fertilisation ) = (M – I n + 1) N = (M – (I n – 1)) N = (M I n+1 ) N

13 Correction de Programmes H. Wertz13 Preuve de la terminaison du 3 ième programme Procédons par induction décroissante : M = 0 I = 0 arrêt du programme Soit I = m, 0 < m M Faut démontrer quaprès 1 exécution I = m – 1 Si I n = m non(I n = 0), donc une exécution de la boucle I n+1 := I n – 1 = m – 1 (puisque m > 0 m – 1 0)

14 Correction de Programmes H. Wertz14 3 ième programme exemple (avec erreur 1) Base : n=1 I=M (M-M) N = 0 = J = 0 M Pas : marche aussi prévu : I n = 1 J n = (M – I n ) N (en 5) J n = M N mais : (en 5) J n = (M – I n ) N = (M – 1) N M N

15 Correction de Programmes H. Wertz15 3 ième programme exemple (avec erreur 2) nIJ 0M1 1M-1N+1 2M-22N+1 3M-33N+1 4M-44N+1 ……… mM-mmN+1 Autre invariante : J=(M-I)N+1 et : J n = (M – I n ) N+1 = MN+1 MN

16 Correction de Programmes H. Wertz16 3 ième programme exemple (avec erreur 3) invariante : J=(M I+1)N Base : n=1 I=M (M-M+1)*N = N = J Pas : marche aussi I n = 1 J n = (M – I n +1) N J n = M N = (M – 1 + 1) N = MN = J Maintenant : M = 0 I 0 = 0 J 0 = N I 0 1 donc I 1 = 1, I 2 = 2, etc boucle infinie marche pour tout M > 0 et boucle pour M=0

17 Correction de Programmes H. Wertz17 un dernier exemple linvariante : nIJ 1I0I0 J0J0 2 I 0 1 J0+2J0+2 3 I 0 2 J0+4J0+4 4 I 0 3 J0+6J0+6 J = J 0 +2 ( I 0 I) u lassertion de sortie : J = J 0 + 2 I 0

18 Correction de Programmes H. Wertz18 preuve de la correction base : n = 1: I = I 0, J = J 0 = J 0 + 2 (I 0 I 0 ) hypothèse : J n = J 0 +2 (I 0 I n ) pas : J n+1 = J n + 2 I n+1 = I n 1 = J 0 + 2 (I 0 I n ) + 2 = J 0 + 2 I 0 I n + 2 = J 0 + 2 (I 0 I n + 1) = J 0 + 2 (I 0 I n 1)) = J 0 + 2 (I 0 I n+1 ) I n = 0 J n = J 0 + 2 (I 0 I n ) = J 0 + 2I 0

19 Correction de Programmes H. Wertz19 Exercices trouvez linvariante, démontrez la correction et la terminaison Sortie: J = M N Entrée: M,N 1 Entrée: M 1 Sortie: J=M!

20 Correction de Programmes H. Wertz20 et maintenant ? 2 1

21 Correction de Programmes H. Wertz21 Exemple de boucles imbriquées Entrée: X[1:M,1:N] Sortie: P = max(X) 1 I M P=X[1,1]si I=1 sinon max(X[1:I 1,1:N]) 1 I M 1 J N si I=1et J=1 alors P=X[1,1] sinon P=max(X[1:I 1,1:N] X[I,1:J 1])

22 Correction de Programmes H. Wertz22 Exemple de boucles imbriquées (suite) Pour démontrer la correction partielle du programme il faut démontrer chacun des chemins ci-dessous : 1.1 – 24. 3 – 4 – 6 – 3 2.2 – 35. 3 – 7 – 2 3.3 – 4 – 5 36. 2 – 8


Télécharger ppt "Correction de Programmes H. Wertz1 Correction de Programmes Soit lorganigramme suivant : M 0, M,N Ent. Nat. J = I N invariante de boucle I = M condition."

Présentations similaires


Annonces Google