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

Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.

Présentations similaires


Présentation au sujet: "Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants."— Transcription de la présentation:

1 Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.

2 19 décembre 2006Cours d'algorithmique 10 / Intranet2 Trier et chercher, recherche textuelle Trier et chercher, recherche textuelle Listes et arbres Listes et arbres Le back-track Le back-track Arbres équilibrés Arbres équilibrés Récursivité et induction sur la structure Récursivité et induction sur la structure Divide and conquer, algorithmes gloutons Divide and conquer, algorithmes gloutons Minimax, alpha-beta Minimax, alpha-beta Dérécursion Dérécursion Divers problèmes particuliers Divers problèmes particuliers Logique de Hoare Logique de Hoare Programmation dynamique Programmation dynamique Complexité et calculabilité Complexité et calculabilité Les grandes lignes du cours

3 19 décembre 2006Cours d'algorithmique 10 / Intranet3 Logique de Hoare ----------------------------------------------------------------- Rappel : Rappel : { PRE } programme { POST } { PRE } programme { POST } Ceci signifie que Ceci signifie que – si les pré-conditions sont vérifiées par les arguments, – alors les post-conditions seront vérifiées par les résultats.

4 19 décembre 2006Cours d'algorithmique 10 / Intranet4 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » !

5 19 décembre 2006Cours d'algorithmique 10 / Intranet5 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Q

6 19 décembre 2006Cours d'algorithmique 10 / Intranet6 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Calculons la plus faible condition F telle que { F } { Q } ! Calculons la plus faible condition F telle que { F } { Q } ! Q

7 19 décembre 2006Cours d'algorithmique 10 / Intranet7 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Calculons la plus faible condition F telle que { F } { Q } ! Calculons la plus faible condition F telle que { F } { Q } ! F Q

8 19 décembre 2006Cours d'algorithmique 10 / Intranet8 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Calculons la plus faible condition F telle que { F } { Q } ! Calculons la plus faible condition F telle que { F } { Q } ! Nous comparons avec le cahier des charges ! ! ! Nous comparons avec le cahier des charges ! ! ! F Q

9 19 décembre 2006Cours d'algorithmique 10 / Intranet9 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Calculons la plus faible condition F telle que { F } { Q } ! Calculons la plus faible condition F telle que { F } { Q } ! Nous comparons avec le cahier des charges ! ! ! Nous comparons avec le cahier des charges ! ! ! Cahier des charges F PRE Q = POST

10 19 décembre 2006Cours d'algorithmique 10 / Intranet10 Logique de Hoare ----------------------------------------------------------------- La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Calculons la plus faible condition F telle que { F } { Q } ! Calculons la plus faible condition F telle que { F } { Q } ! Nous comparons avec le cahier des charges ! ! ! Nous comparons avec le cahier des charges ! ! ! Et nous vérifions que PRE => F !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Et nous vérifions que PRE => F !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Cahier des charges Q = POST F PRE

11 19 décembre 2006Cours d'algorithmique 10 / Intranet11 Logique de Hoare ----------------------------------------------------------------- Trois règles qui sont toujours vraies : Trois règles qui sont toujours vraies : PRE-STRENGTH : PRE-STRENGTH : POST-WEAK : POST-WEAK : CONJUNCTION : CONJUNCTION : P => Q { Q } { R } { P } { R } Q => R { P } { Q } { P } { R } { P } { Q } 1 1 { P } { Q } 2 2 { P, P } { Q, Q } 1 1 2 2

12 19 décembre 2006Cours d'algorithmique 10 / Intranet12 Logique de Hoare ----------------------------------------------------------------- Les programmes : Les programmes : – skip – x < - e – – – if C then else – if C then else – while C do – while C do 2 1 1 2

13 19 décembre 2006Cours d'algorithmique 10 / Intranet13 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme skip : Règle pour le programme skip : { P } skip { P }

14 19 décembre 2006Cours d'algorithmique 10 / Intranet14 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme ; : Règle pour le programme ; : { P } { Q } { Q } { R } 12 { P } ; { R } 12 1 2

15 19 décembre 2006Cours d'algorithmique 10 / Intranet15 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme x < - e : Règle pour le programme x < - e : { P[ x < - e ] } x < - e { P }

16 19 décembre 2006Cours d'algorithmique 10 / Intranet16 Logique de Hoare ----------------------------------------------------------------- Règles pour le programme if C then else : Règles pour le programme if C then else : { P, C } { Q } { P } if C then else { Q } 21 1 2 2 { P, C } { Q } 1

17 19 décembre 2006Cours d'algorithmique 10 / Intranet17 Logique de Hoare ----------------------------------------------------------------- Règles pour le programme if C then else : Règles pour le programme if C then else : { P, C } { Q } { P } if C then else { Q } 21 1 2 2 { P, C } { Q } 1 { F } { Q } 1 1 { F, C } ou { F, C } if C then else { Q } 1 2 { F } { Q } 2 2 21

18 19 décembre 2006Cours d'algorithmique 10 / Intranet18 Logique de Hoare ----------------------------------------------------------------- Toutes ces règles sont complètement automatisables ! Toutes ces règles sont complètement automatisables !

19 19 décembre 2006Cours d'algorithmique 10 / Intranet19 Logique de Hoare ----------------------------------------------------------------- W H I L E e t l e s I N V A R I A N T S D E B O U C L E

20 19 décembre 2006Cours d'algorithmique 10 / Intranet20 Logique de Hoare ----------------------------------------------------------------- Lexemple qui nous sert à illustrer la notion dinvariant : Lexemple qui nous sert à illustrer la notion dinvariant : – PRE : V, D N – POST: Q, R N telles V = Q * D + R et R < D. Cest la spécification de la division euclidienne ! Cest la spécification de la division euclidienne ! I I

21 19 décembre 2006Cours d'algorithmique 10 / Intranet21 Logique de Hoare ----------------------------------------------------------------- Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D

22 19 décembre 2006Cours d'algorithmique 10 / Intranet22 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D

23 19 décembre 2006Cours d'algorithmique 10 / Intranet23 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D

24 19 décembre 2006Cours d'algorithmique 10 / Intranet24 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17

25 19 décembre 2006Cours d'algorithmique 10 / Intranet25 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17

26 19 décembre 2006Cours d'algorithmique 10 / Intranet26 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17

27 19 décembre 2006Cours d'algorithmique 10 / Intranet27 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12

28 19 décembre 2006Cours d'algorithmique 10 / Intranet28 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12

29 19 décembre 2006Cours d'algorithmique 10 / Intranet29 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 V = 17, D = 5, Q = 2, R = 12

30 19 décembre 2006Cours d'algorithmique 10 / Intranet30 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

31 19 décembre 2006Cours d'algorithmique 10 / Intranet31 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

32 19 décembre 2006Cours d'algorithmique 10 / Intranet32 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

33 19 décembre 2006Cours d'algorithmique 10 / Intranet33 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

34 19 décembre 2006Cours d'algorithmique 10 / Intranet34 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

35 19 décembre 2006Cours d'algorithmique 10 / Intranet35 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

36 19 décembre 2006Cours d'algorithmique 10 / Intranet36 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

37 19 décembre 2006Cours d'algorithmique 10 / Intranet37 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

38 19 décembre 2006Cours d'algorithmique 10 / Intranet38 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7

39 19 décembre 2006Cours d'algorithmique 10 / Intranet39 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7

40 19 décembre 2006Cours d'algorithmique 10 / Intranet40 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

41 19 décembre 2006Cours d'algorithmique 10 / Intranet41 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

42 19 décembre 2006Cours d'algorithmique 10 / Intranet42 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

43 19 décembre 2006Cours d'algorithmique 10 / Intranet43 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

44 19 décembre 2006Cours d'algorithmique 10 / Intranet44 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 V = 17, D = 5, Q = 1, R = 12 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 12 V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

45 19 décembre 2006Cours d'algorithmique 10 / Intranet45 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

46 19 décembre 2006Cours d'algorithmique 10 / Intranet46 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2

47 19 décembre 2006Cours d'algorithmique 10 / Intranet47 Logique de Hoare ----------------------------------------------------------------- Exemple : V = 17, D = 5 V = 17, D = 5, Q = 0 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; Q <- Q + 1 ; R <- R - D R <- R - D V = 17, D = 5, Q = 0, R = 17 Y a-t-il quelque-chose de commun entre les différentes itérations ? OUI : V = Q * D + R V = 17, D = 5, Q = 2, R = 7 V = 17, D = 5, Q = 3, R = 7 V = 17, D = 5, Q = 3, R = 2 A la fin : V = Q * D + R et R < D

48 19 décembre 2006Cours d'algorithmique 10 / Intranet48 Logique de Hoare ----------------------------------------------------------------- Les valeurs de V, D, Q, R peuvent changer. Les valeurs de V, D, Q, R peuvent changer. Mais la relation V = Q * D + R reste toujours vérifiée. Mais la relation V = Q * D + R reste toujours vérifiée.

49 19 décembre 2006Cours d'algorithmique 10 / Intranet49 Logique de Hoare ----------------------------------------------------------------- Les valeurs de V, D, Q, R peuvent changer. Les valeurs de V, D, Q, R peuvent changer. Mais la relation V = Q * D + R reste toujours vérifiée. Mais la relation V = Q * D + R reste toujours vérifiée. Cest ce quon appelle un « invariant » ! Cest ce quon appelle un « invariant » !

50 19 décembre 2006Cours d'algorithmique 10 / Intranet50 Logique de Hoare ----------------------------------------------------------------- Les valeurs de V, D, Q, R peuvent changer. Les valeurs de V, D, Q, R peuvent changer. Mais la relation V = Q * D + R reste toujours vérifiée. Mais la relation V = Q * D + R reste toujours vérifiée. Cest ce quon appelle un « invariant » ! Cest ce quon appelle un « invariant » ! Un invariant est un prédicat qui : Un invariant est un prédicat qui :

51 19 décembre 2006Cours d'algorithmique 10 / Intranet51 Logique de Hoare ----------------------------------------------------------------- Les valeurs de V, D, Q, R peuvent changer. Les valeurs de V, D, Q, R peuvent changer. Mais la relation V = Q * D + R reste toujours vérifiée. Mais la relation V = Q * D + R reste toujours vérifiée. Cest ce quon appelle un « invariant » ! Cest ce quon appelle un « invariant » ! Un invariant est un prédicat qui : Un invariant est un prédicat qui : – est vrai à chaque début de boucle,

52 19 décembre 2006Cours d'algorithmique 10 / Intranet52 Logique de Hoare ----------------------------------------------------------------- Les valeurs de V, D, Q, R peuvent changer. Les valeurs de V, D, Q, R peuvent changer. Mais la relation V = Q * D + R reste toujours vérifiée. Mais la relation V = Q * D + R reste toujours vérifiée. Cest ce quon appelle un « invariant » ! Cest ce quon appelle un « invariant » ! Un invariant est un prédicat qui : Un invariant est un prédicat qui : – est vrai à chaque début de boucle, – et à chaque fin de boucle,

53 19 décembre 2006Cours d'algorithmique 10 / Intranet53 Logique de Hoare ----------------------------------------------------------------- Les valeurs de V, D, Q, R peuvent changer. Les valeurs de V, D, Q, R peuvent changer. Mais la relation V = Q * D + R reste toujours vérifiée. Mais la relation V = Q * D + R reste toujours vérifiée. Cest ce quon appelle un « invariant » ! Cest ce quon appelle un « invariant » ! Un invariant est un prédicat qui : Un invariant est un prédicat qui : – est vrai à chaque début de boucle, – et à chaque fin de boucle, – cest-à-dire début de la boucle suivante. (Les tests ne font pas daffectation !) (Les tests ne font pas daffectation !)

54 19 décembre 2006Cours d'algorithmique 10 / Intranet54 Logique de Hoare ----------------------------------------------------------------- Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Pour écrire un corps de boucle, il faut connaître linvariant de la boucle !

55 19 décembre 2006Cours d'algorithmique 10 / Intranet55 Logique de Hoare ----------------------------------------------------------------- Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ». Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ». e

56 19 décembre 2006Cours d'algorithmique 10 / Intranet56 Logique de Hoare ----------------------------------------------------------------- Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ». Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ». Pour savoir ce que vous devez faire au « i » tour de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. Pour savoir ce que vous devez faire au « i » tour de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. e e

57 19 décembre 2006Cours d'algorithmique 10 / Intranet57 Logique de Hoare ----------------------------------------------------------------- Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Pour écrire un corps de boucle, il faut connaître linvariant de la boucle ! Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ». Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ». Pour savoir ce que vous devez faire au « i » tour de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. Pour savoir ce que vous devez faire au « i » tour de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. Ceci revient à connaître « linvariant » ! Ceci revient à connaître « linvariant » ! e e

58 19 décembre 2006Cours d'algorithmique 10 / Intranet58 Logique de Hoare ----------------------------------------------------------------- Quel est linvariant ? Quel est linvariant ? s <- 0 ; i <- 1 ; while ( i <= n ) do s <- s + i ; s <- s + i ; i <- i + 1 i <- i + 1

59 19 décembre 2006Cours d'algorithmique 10 / Intranet59 Logique de Hoare ----------------------------------------------------------------- Quel est linvariant ? Quel est linvariant ? Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ». Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ». s <- 0 ; i <- 1 ; while ( i <= n ) do s <- s + i ; s <- s + i ; i <- i + 1 i <- i + 1 e

60 19 décembre 2006Cours d'algorithmique 10 / Intranet60 Logique de Hoare ----------------------------------------------------------------- Quel est linvariant ? Quel est linvariant ? Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ». Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ». Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ». Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ». s <- 0 ; i <- 1 ; while ( i <= n ) do s <- s + i ; s <- s + i ; i <- i + 1 i <- i + 1 e

61 19 décembre 2006Cours d'algorithmique 10 / Intranet61 Logique de Hoare ----------------------------------------------------------------- Quel est linvariant ? Quel est linvariant ? Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ». Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ». Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ». Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ». Invariant : s = j Invariant : s = j s <- 0 ; i <- 1 ; while ( i <= n ) do s <- s + i ; s <- s + i ; i <- i + 1 i <- i + 1 e j = 1 i – 1

62 19 décembre 2006Cours d'algorithmique 10 / Intranet62 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do : Règle pour le programme while C do :

63 19 décembre 2006Cours d'algorithmique 10 / Intranet63 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do : Règle pour le programme while C do : { I } while C do { I, C } { I, C } { I }

64 19 décembre 2006Cours d'algorithmique 10 / Intranet64 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do : Règle pour le programme while C do : Nous dirons que « I » est linvariant ! Nous dirons que « I » est linvariant ! { I } while C do { I, C } { I, C } { I }

65 19 décembre 2006Cours d'algorithmique 10 / Intranet65 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do : Règle pour le programme while C do : Nous dirons que « I » est linvariant ! Nous dirons que « I » est linvariant ! La condition { I, C } { I } vérifie que « I » est bien invariant ! ! ! La condition { I, C } { I } vérifie que « I » est bien invariant ! ! ! { I } while C do { I, C } { I, C } { I }

66 19 décembre 2006Cours d'algorithmique 10 / Intranet66 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do : Règle pour le programme while C do : Nous dirons que « I » est linvariant ! Nous dirons que « I » est linvariant ! La condition { I, C } { I } vérifie que « I » est bien invariant ! ! ! La condition { I, C } { I } vérifie que « I » est bien invariant ! ! ! La post-condition { I, C } est évidente ! La post-condition { I, C } est évidente ! { I } while C do { I, C } { I, C } { I }

67 19 décembre 2006Cours d'algorithmique 10 / Intranet67 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do : Règle pour le programme while C do : Nous dirons que « I » est linvariant ! Nous dirons que « I » est linvariant ! La condition { I, C } { I } vérifie que « I » est bien invariant ! ! ! La condition { I, C } { I } vérifie que « I » est bien invariant ! ! ! La post-condition { I, C } est évidente ! La post-condition { I, C } est évidente ! Il suffit alors que { I } soit vrai au début ! Il suffit alors que { I } soit vrai au début ! { I } while C do { I, C } { I, C } { I }

68 19 décembre 2006Cours d'algorithmique 10 / Intranet68 Logique de Hoare ----------------------------------------------------------------- Dans la pratique, nous avons une post-condition Q et le code while C do : Dans la pratique, nous avons une post-condition Q et le code while C do : { ??? } while C do { Q } { ???, C } { ??? }

69 19 décembre 2006Cours d'algorithmique 10 / Intranet69 Logique de Hoare ----------------------------------------------------------------- Dans la pratique, nous avons une post-condition Q et le code while C do : Dans la pratique, nous avons une post-condition Q et le code while C do : Quel prédicat « I » faut-il choisir comme invariant ? Quel prédicat « I » faut-il choisir comme invariant ? { ??? } while C do { Q } { ???, C } { ??? }

70 19 décembre 2006Cours d'algorithmique 10 / Intranet70 Logique de Hoare ----------------------------------------------------------------- Dans la pratique, nous avons une post-condition Q et le code while C do : Dans la pratique, nous avons une post-condition Q et le code while C do : Quel prédicat « I » faut-il choisir comme invariant ? Quel prédicat « I » faut-il choisir comme invariant ? Cest lutilisateur qui doit faire une proposition ! Cest lutilisateur qui doit faire une proposition ! { ??? } while C do { Q } { ???, C } { ??? }

71 19 décembre 2006Cours d'algorithmique 10 / Intranet71 Logique de Hoare ----------------------------------------------------------------- Dans la pratique, nous avons une post-condition Q et le code while C do : Dans la pratique, nous avons une post-condition Q et le code while C do : Quel prédicat « I » faut-il choisir comme invariant ? Quel prédicat « I » faut-il choisir comme invariant ? Cest lutilisateur qui doit faire une proposition ! Cest lutilisateur qui doit faire une proposition ! Nouvelle syntaxe : while C do inv I Nouvelle syntaxe : while C do inv I { ??? } while C do { Q } { ???, C } { ??? }

72 19 décembre 2006Cours d'algorithmique 10 / Intranet72 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : {... } while C do inv I { Q }...

73 19 décembre 2006Cours d'algorithmique 10 / Intranet73 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Nous devons prouver que I, C => Q ! Nous devons prouver que I, C => Q !... I, C => Q {... } while C do inv I { Q }

74 19 décembre 2006Cours d'algorithmique 10 / Intranet74 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Nous devons prouver que I, C => Q ! Nous devons prouver que I, C => Q ! Nous calculons la pré-condition « F » de { F } { I } ! Nous calculons la pré-condition « F » de { F } { I } ! { F } { I }... I, C => Q {... } while C do inv I { Q }

75 19 décembre 2006Cours d'algorithmique 10 / Intranet75 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Nous devons prouver que I, C => Q ! Nous devons prouver que I, C => Q ! Nous calculons la pré-condition « F » de { F } { I } ! Nous calculons la pré-condition « F » de { F } { I } ! Nous prouvons que I, C => F ! Nous prouvons que I, C => F ! { F } { I } I, C => F I, C => Q {... } while C do inv I { Q }

76 19 décembre 2006Cours d'algorithmique 10 / Intranet76 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Nous devons prouver que I, C => Q ! Nous devons prouver que I, C => Q ! Nous calculons la pré-condition « F » de { F } { I } ! Nous calculons la pré-condition « F » de { F } { I } ! Nous prouvons que I, C => F ! Nous prouvons que I, C => F ! A ce moment, nous connaissons la pré-condition « I » ! A ce moment, nous connaissons la pré-condition « I » ! { F } { I } I, C => F I, C => Q { I } while C do inv I { Q }

77 19 décembre 2006Cours d'algorithmique 10 / Intranet77 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Attention, il y a deux obligations de preuve ! Attention, il y a deux obligations de preuve ! { F } { I } I, C => F I, C => Q { I } while C do inv I { Q }

78 19 décembre 2006Cours d'algorithmique 10 / Intranet78 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Attention, il y a deux obligations de preuve ! Attention, il y a deux obligations de preuve ! Elles sont semi-automatisables. Elles sont semi-automatisables. { F } { I } I, C => F I, C => Q { I } while C do inv I { Q }

79 19 décembre 2006Cours d'algorithmique 10 / Intranet79 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Attention, il y a deux obligations de preuve ! Attention, il y a deux obligations de preuve ! Elles sont semi-automatisables. Elles sont semi-automatisables. Un prouveur peut ne pas trouver la preuve ! Un prouveur peut ne pas trouver la preuve ! { F } { I } I, C => F I, C => Q { I } while C do inv I { Q }

80 19 décembre 2006Cours d'algorithmique 10 / Intranet80 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme while C do inv I : Règle pour le programme while C do inv I : Attention, il y a deux obligations de preuve ! Attention, il y a deux obligations de preuve ! Elles sont semi-automatisables. Elles sont semi-automatisables. Un prouveur peut ne pas trouver la preuve ! Un prouveur peut ne pas trouver la preuve ! Un prouveur ne saura jamais dire si elle nexiste pas ! ! ! Un prouveur ne saura jamais dire si elle nexiste pas ! ! ! { F } { I } I, C => F I, C => Q { I } while C do inv I { Q }

81 19 décembre 2006Cours d'algorithmique 10 / Intranet81 Logique de Hoare ----------------------------------------------------------------- U N P R E M I E R E X E M P L E

82 19 décembre 2006Cours d'algorithmique 10 / Intranet82 Logique de Hoare ----------------------------------------------------------------- R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I

83 19 décembre 2006Cours d'algorithmique 10 / Intranet83 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D }

84 19 décembre 2006Cours d'algorithmique 10 / Intranet84 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D }

85 19 décembre 2006Cours d'algorithmique 10 / Intranet85 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } C C C

86 19 décembre 2006Cours d'algorithmique 10 / Intranet86 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R }

87 19 décembre 2006Cours d'algorithmique 10 / Intranet87 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q

88 19 décembre 2006Cours d'algorithmique 10 / Intranet88 Logique de Hoare -----------------------------------------------------------------... I, C => Q { I ?? } while C do inv I { Q }

89 19 décembre 2006Cours d'algorithmique 10 / Intranet89 Logique de Hoare ----------------------------------------------------------------- { F } { I }... I, C => Q { I ?? } while C do inv I { Q }

90 19 décembre 2006Cours d'algorithmique 10 / Intranet90 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F ? ? ?

91 19 décembre 2006Cours d'algorithmique 10 / Intranet91 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F ? ? ? { V = D * Q + R, 0 <= R }

92 19 décembre 2006Cours d'algorithmique 10 / Intranet92 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F ? ? ? { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D }

93 19 décembre 2006Cours d'algorithmique 10 / Intranet93 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * ( Q + 1 ) + R – D, 0 <= R – D } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D }

94 19 décembre 2006Cours d'algorithmique 10 / Intranet94 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * Q + R, D <= R } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D } Après simplification !

95 19 décembre 2006Cours d'algorithmique 10 / Intranet95 Logique de Hoare ----------------------------------------------------------------- { F } { I }... I, C => Q { I ?? } while C do inv I { Q }

96 19 décembre 2006Cours d'algorithmique 10 / Intranet96 Logique de Hoare ----------------------------------------------------------------- { F } { I } I, C => Q { I ?? } while C do inv I { Q } I, C => F

97 19 décembre 2006Cours d'algorithmique 10 / Intranet97 Logique de Hoare ----------------------------------------------------------------- { F } { I } I, C => Q { I ?? } while C do inv I { Q } I, C => F { V = D * Q + R, 0 = D }

98 19 décembre 2006Cours d'algorithmique 10 / Intranet98 Logique de Hoare ----------------------------------------------------------------- { F } { I } I, C => Q { I ?? } while C do inv I { Q } I, C => F { V = D * Q + R, 0 = D } ???=> { V = D * Q + R, D <= R }

99 19 décembre 2006Cours d'algorithmique 10 / Intranet99 Logique de Hoare ----------------------------------------------------------------- { F } { I } I, C => Q { I ?? } while C do inv I { Q } I, C => F { V = D * Q + R, 0 = D } ???=> { V = D * Q + R, D <= R }

100 19 décembre 2006Cours d'algorithmique 10 / Intranet100 Logique de Hoare ----------------------------------------------------------------- { F } { I } I, C => Q { I } while C do inv I { Q } I, C => F { V = D * Q + R, 0 = D } !!!!!!=> { V = D * Q + R, D <= R }

101 19 décembre 2006Cours d'algorithmique 10 / Intranet101 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * Q + R, D <= R } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D } I = { V = D * Q + R, 0 <= R } Sans problème : I, C => F

102 19 décembre 2006Cours d'algorithmique 10 / Intranet102 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * Q + R, D <= R } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D } I = { V = D * Q + R, 0 <= R } Sans problème : I, C => F { V = D * 0 + R, 0 <= R }

103 19 décembre 2006Cours d'algorithmique 10 / Intranet103 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * Q + R, D <= R } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D } I = { V = D * Q + R, 0 <= R } Sans problème : I, C => F { V = D * 0 + R, 0 <= R } { V = D * 0 + V, 0 <= V } PRE : PRE :

104 19 décembre 2006Cours d'algorithmique 10 / Intranet104 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * Q + R, D <= R } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D } I = { V = D * Q + R, 0 <= R } Sans problème : I, C => F { V = D * 0 + R, 0 <= R } { V = D * 0 + V, 0 = 0 } PRE : PRE :

105 19 décembre 2006Cours d'algorithmique 10 / Intranet105 Logique de Hoare ----------------------------------------------------------------- POST : POST : R <- V ; Q <- 0 ; while ( R >= D ) do Q <- Q + 1 ; Q <- Q + 1 ; R <- R – D R <- R – D inv I inv I Q = { V = D * Q + R, 0 <= R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } et { R < D } = { V = D * Q + R, 0 <= R } Sans problème : I, C => Q F = { V = D * Q + R, D <= R } { V = D * Q + R, 0 <= R } { V = D * Q + R – D, 0 <= R – D } I = { V = D * Q + R, 0 <= R } Sans problème : I, C => F { V = D * 0 + R, 0 <= R } { V = D * 0 + V, 0 = 0 } PRE : PRE :

106 19 décembre 2006Cours d'algorithmique 10 / Intranet106 Logique de Hoare ----------------------------------------------------------------- U N D E U X I E M E E X E M P L E

107 19 décembre 2006Cours d'algorithmique 10 / Intranet107 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I

108 19 décembre 2006Cours d'algorithmique 10 / Intranet108 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) }

109 19 décembre 2006Cours d'algorithmique 10 / Intranet109 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) }

110 19 décembre 2006Cours d'algorithmique 10 / Intranet110 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 }

111 19 décembre 2006Cours d'algorithmique 10 / Intranet111 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } C C C

112 19 décembre 2006Cours d'algorithmique 10 / Intranet112 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) }

113 19 décembre 2006Cours d'algorithmique 10 / Intranet113 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) } Sans problème : I, C => Q

114 19 décembre 2006Cours d'algorithmique 10 / Intranet114 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) } Sans problème : I, C => Q F ? ? ?

115 19 décembre 2006Cours d'algorithmique 10 / Intranet115 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) } Sans problème : I, C => Q F ? ? ? { pgcd( x, y ) = pgcd( a, b ) }

116 19 décembre 2006Cours d'algorithmique 10 / Intranet116 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) } Sans problème : I, C => Q F ? ? ? { pgcd( x, y ) = pgcd( a, b ) } { pgcd( m, y ) = pgcd( a, b ) }

117 19 décembre 2006Cours d'algorithmique 10 / Intranet117 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) } Sans problème : I, C => Q F ? ? ? { pgcd( x, y ) = pgcd( a, b ) } { pgcd( m, y ) = pgcd( a, b ) } { pgcd( m, x%y ) = pgcd( a, b ) }

118 19 décembre 2006Cours d'algorithmique 10 / Intranet118 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ) } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ) } { pgcd( x, y ) = pgcd( a, b ) } { pgcd( m, y ) = pgcd( a, b ) } { pgcd( m, x%y ) = pgcd( a, b ) }

119 19 décembre 2006Cours d'algorithmique 10 / Intranet119 Logique de Hoare ----------------------------------------------------------------- I, C => F

120 19 décembre 2006Cours d'algorithmique 10 / Intranet120 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ) } et { y <> 0 } ???=> { pgcd( y, x % y ) = pgcd( a, b ) }

121 19 décembre 2006Cours d'algorithmique 10 / Intranet121 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ) } et { y <> 0 } ???=> { pgcd( y, x % y ) = pgcd( a, b ) } Maths : x >= y et y <> 0 => pgcd( x, y ) = pgcd( y, x % y )

122 19 décembre 2006Cours d'algorithmique 10 / Intranet122 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ) } et { y <> 0 } ???=> { pgcd( y, x % y ) = pgcd( a, b ) } Maths : x >= y et y <> 0 => pgcd( x, y ) = pgcd( y, x % y )

123 19 décembre 2006Cours d'algorithmique 10 / Intranet123 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ) } et { y <> 0 } ???=> { pgcd( y, x % y ) = pgcd( a, b ) } ? ? ? Maths : x >= y et y <> 0 => pgcd( x, y ) = pgcd( y, x % y )

124 19 décembre 2006Cours d'algorithmique 10 / Intranet124 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ) } et { y <> 0 } ???=> { pgcd( y, x % y ) = pgcd( a, b ) } ? ? ? Maths : x >= y et y <> 0 => pgcd( x, y ) = pgcd( y, x % y ) Nous devons renforcer linvariant : { pgcd( x, y ) = pgcd( a, b ), x >= y }

125 19 décembre 2006Cours d'algorithmique 10 / Intranet125 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), x >= y } Sans problème : I, C => Q

126 19 décembre 2006Cours d'algorithmique 10 / Intranet126 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q { pgcd( x, y ) = pgcd( a, b ), x >= y } = { pgcd( x, y ) = pgcd( a, b ), x >= y }

127 19 décembre 2006Cours d'algorithmique 10 / Intranet127 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } = { pgcd( x, y ) = pgcd( a, b ), x >= y }

128 19 décembre 2006Cours d'algorithmique 10 / Intranet128 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } = { pgcd( x, y ) = pgcd( a, b ), x >= y }

129 19 décembre 2006Cours d'algorithmique 10 / Intranet129 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ), y >= x % y } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } = { pgcd( x, y ) = pgcd( a, b ), x >= y }

130 19 décembre 2006Cours d'algorithmique 10 / Intranet130 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ), y >= x % y } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } OK ! = { pgcd( x, y ) = pgcd( a, b ), x >= y }

131 19 décembre 2006Cours d'algorithmique 10 / Intranet131 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ) } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } = { pgcd( x, y ) = pgcd( a, b ), x >= y }

132 19 décembre 2006Cours d'algorithmique 10 / Intranet132 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ), x >= y } et { y <> 0 } !!!!!!=> { pgcd( y, x % y ) = pgcd( a, b ) } Maths : x >= y et y <> 0 => pgcd( x, y ) = pgcd( y, x % y )

133 19 décembre 2006Cours d'algorithmique 10 / Intranet133 Logique de Hoare ----------------------------------------------------------------- I, C => F { pgcd( x, y ) = pgcd( a, b ), x >= y } et { y <> 0 } !!!!!!=> { pgcd( y, x % y ) = pgcd( a, b ) } Maths : x >= y et y <> 0 => pgcd( x, y ) = pgcd( y, x % y )

134 19 décembre 2006Cours d'algorithmique 10 / Intranet134 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ) } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } Sans problème : I, C => F I = { pgcd( x, y ) = pgcd( a, b ), x >= y } = { pgcd( x, y ) = pgcd( a, b ), x >= y }

135 19 décembre 2006Cours d'algorithmique 10 / Intranet135 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ) } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } Sans problème : I, C => F I = { pgcd( x, y ) = pgcd( a, b ), x >= y } { pgcd( a, b ) = pgcd( a, b ), a >= b } PRE : PRE : = { pgcd( x, y ) = pgcd( a, b ), x >= y }

136 19 décembre 2006Cours d'algorithmique 10 / Intranet136 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ) } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } Sans problème : I, C => F I = { pgcd( x, y ) = pgcd( a, b ), x >= y } { pgcd( a, b ) = pgcd( a, b ), a >= b } = { a >= b } PRE : PRE : = { pgcd( x, y ) = pgcd( a, b ), x >= y }

137 19 décembre 2006Cours d'algorithmique 10 / Intranet137 Logique de Hoare ----------------------------------------------------------------- x <- a ; y <- b ; while ( y <> 0 ) do m <- y ; m <- y ; y <- x % y ; y <- x % y ; x <- m x <- m inv I inv I POST : POST : Q = { x = pgcd( a, b ) } = { pgcd( x, 0 ) = pgcd( a, b ) } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } = { pgcd( x, y ) = pgcd( a, b ), y = 0 } Sans problème : I, C => Q F = { pgcd( y, x % y ) = pgcd( a, b ) } { pgcd( x, y ) = pgcd( a, b ), x >= y } {..., m >= y } {..., m >= x % y } Sans problème : I, C => F I = { pgcd( x, y ) = pgcd( a, b ), x >= y } { pgcd( a, b ) = pgcd( a, b ), a >= b } = { a >= b } PRE : PRE : = { pgcd( x, y ) = pgcd( a, b ), x >= y }

138 19 décembre 2006Cours d'algorithmique 10 / Intranet138 Logique de Hoare ----------------------------------------------------------------- U N T R O I S I E M E E X E M P L E

139 19 décembre 2006Cours d'algorithmique 10 / Intranet139 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I

140 19 décembre 2006Cours d'algorithmique 10 / Intranet140 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : Q = { s = i } i = 1 n

141 19 décembre 2006Cours d'algorithmique 10 / Intranet141 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : Q = { s = i } = { s = i, c = n + 1 } i = 1 n c – 1

142 19 décembre 2006Cours d'algorithmique 10 / Intranet142 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : Q = { s = i } = { s = i, c n } i = 1 n c – 1

143 19 décembre 2006Cours d'algorithmique 10 / Intranet143 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : Q = { s = i } = { s = i, c n } i = 1 n c – 1 C C C

144 19 décembre 2006Cours d'algorithmique 10 / Intranet144 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1

145 19 décembre 2006Cours d'algorithmique 10 / Intranet145 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c + 1 <= n + 1, s + c = i } I =... i = 1 c + 1– 1

146 19 décembre 2006Cours d'algorithmique 10 / Intranet146 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s + c = i } I =... i = 1 c Après simplification !

147 19 décembre 2006Cours d'algorithmique 10 / Intranet147 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s = i } I =... i = 1 c – 1 Après simplification !

148 19 décembre 2006Cours d'algorithmique 10 / Intranet148 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s = i } I =... i = 1 c – 1 Sans problème : I, C => F

149 19 décembre 2006Cours d'algorithmique 10 / Intranet149 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s = i } I =... i = 1 c – 1 Sans problème : I, C => F i = 1 c – 1 I = { c <= n + 1, s = i }

150 19 décembre 2006Cours d'algorithmique 10 / Intranet150 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s = i } I =... i = 1 c – 1 Sans problème : I, C => F i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 1 – 1 { 1 <= n + 1, 0 = i } PRE : PRE :

151 19 décembre 2006Cours d'algorithmique 10 / Intranet151 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s = i } I =... i = 1 c – 1 Sans problème : I, C => F i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 1 – 1 { 1 = 0 } PRE : PRE :

152 19 décembre 2006Cours d'algorithmique 10 / Intranet152 Logique de Hoare ----------------------------------------------------------------- s <- 0 ; c <- 1 ; while ( c <= n ) do s <- s + c ; s <- s + c ; c <- c + 1 c <- c + 1 inv I inv I POST : POST : i = 1 c – 1 = { c <= n + 1, s = i } Sans problème : I, C => Q Q = { s = i } = { s = i, c n } i = 1 n c – 1 F = { c <= n, s = i } I =... i = 1 c – 1 Sans problème : I, C => F i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 1 – 1 { 1 = 0 } PRE : PRE :

153 19 décembre 2006Cours d'algorithmique 10 / Intranet153 Logique de Hoare ----------------------------------------------------------------- Une autre initialisation : Une autre initialisation :

154 19 décembre 2006Cours d'algorithmique 10 / Intranet154 POST : POST : Logique de Hoare ----------------------------------------------------------------- s <- 1 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } Une autre initialisation : Une autre initialisation : Q = { s = i } i = 1 n

155 19 décembre 2006Cours d'algorithmique 10 / Intranet155 Logique de Hoare ----------------------------------------------------------------- s <- 1 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 <= n + 1, 1 = i } PRE : PRE : Une autre initialisation : Une autre initialisation : POST : POST : Q = { s = i } i = 1 n

156 19 décembre 2006Cours d'algorithmique 10 / Intranet156 Logique de Hoare ----------------------------------------------------------------- s <- 1 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1 } PRE : PRE : Une autre initialisation : Une autre initialisation : POST : POST : Q = { s = i } i = 1 n

157 19 décembre 2006Cours d'algorithmique 10 / Intranet157 Logique de Hoare ----------------------------------------------------------------- s <- 1 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1 } PRE : PRE : Une autre initialisation : Une autre initialisation : POST : POST : Q = { s = i } i = 1 n

158 19 décembre 2006Cours d'algorithmique 10 / Intranet158 Logique de Hoare ----------------------------------------------------------------- Une mauvaise initialisation : Une mauvaise initialisation :

159 19 décembre 2006Cours d'algorithmique 10 / Intranet159 POST : POST : Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } Une mauvaise initialisation : Une mauvaise initialisation : Q = { s = i } i = 1 n

160 19 décembre 2006Cours d'algorithmique 10 / Intranet160 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 <= n + 1, 6 = i } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

161 19 décembre 2006Cours d'algorithmique 10 / Intranet161 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

162 19 décembre 2006Cours d'algorithmique 10 / Intranet162 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } = { FAUX } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

163 19 décembre 2006Cours d'algorithmique 10 / Intranet163 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } = { FAUX } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

164 19 décembre 2006Cours d'algorithmique 10 / Intranet164 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } = { FAUX } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

165 19 décembre 2006Cours d'algorithmique 10 / Intranet165 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } = { n >= 1 } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

166 19 décembre 2006Cours d'algorithmique 10 / Intranet166 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } = { n >= 1 } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

167 19 décembre 2006Cours d'algorithmique 10 / Intranet167 Logique de Hoare ----------------------------------------------------------------- s <- 6 ; c <- 2 ; while ( c <= n ) do...... i = 1 c – 1 I = { c <= n + 1, s = i } i = 1 2 – 1 { 2 = 1, 6 = 1 } = { n >= 3 } PRE : PRE : Une mauvaise initialisation : Une mauvaise initialisation : POST : POST : Q = { s = i } i = 1 n

168 19 décembre 2006Cours d'algorithmique 10 / Intranet168 POST : POST : Logique de Hoare ----------------------------------------------------------------- Un mauvais invariant : Un mauvais invariant : Q = { s = i } i = 1 n... while ( c <= n ) do s <- s + c + 3 ; s <- s + c + 3 ; c <- c + 1 c <- c + 1

169 19 décembre 2006Cours d'algorithmique 10 / Intranet169 POST : POST : Logique de Hoare ----------------------------------------------------------------- Un mauvais invariant : Un mauvais invariant : Q = { s = i } = { s = i, c n } i = 1 n... while ( c <= n ) do s <- s + c + 3 ; s <- s + c + 3 ; c <- c + 1 c <- c + 1 inv I inv I i = 1 c – 1 = { c <= n + 1, s = i } i = 1 c – 1 Sans problème : I, C => Q

170 19 décembre 2006Cours d'algorithmique 10 / Intranet170 POST : POST : Logique de Hoare ----------------------------------------------------------------- Un mauvais invariant : Un mauvais invariant : Q = { s = i } = { s = i, c n } i = 1 n... while ( c <= n ) do s <- s + c + 3 ; s <- s + c + 3 ; c <- c + 1 c <- c + 1 inv I inv I i = 1 c – 1 = { c <= n + 1, s = i } i = 1 c – 1 I =... F = { c + 1 <= n + 1, s + c + 3 = i } i = 1 c + 1– 1 Sans problème : I, C => Q

171 19 décembre 2006Cours d'algorithmique 10 / Intranet171 POST : POST : Logique de Hoare ----------------------------------------------------------------- Un mauvais invariant : Un mauvais invariant : Q = { s = i } = { s = i, c n } i = 1 n... while ( c <= n ) do s <- s + c + 3 ; s <- s + c + 3 ; c <- c + 1 c <- c + 1 inv I inv I i = 1 c – 1 = { c <= n + 1, s = i } i = 1 c – 1 I =... F = { c <= n, s + 3 = i } i = 1 c – 1 Après simplification ! Sans problème : I, C => Q

172 19 décembre 2006Cours d'algorithmique 10 / Intranet172 Logique de Hoare ----------------------------------------------------------------- I, C => F { c <= n + 1, s = i } et { c <= n } ???????=> { c <= n + 1, s + 3 = i } i = 1 c – 1 i = 1 c – 1

173 19 décembre 2006Cours d'algorithmique 10 / Intranet173 Logique de Hoare ----------------------------------------------------------------- I, C => F { c <= n + 1, s = i } et { c <= n } NON=> { c <= n + 1, s + 3 = i } i = 1 c – 1 i = 1 c – 1 // Sinon, nous aurions 3 = 0 !

174 19 décembre 2006Cours d'algorithmique 10 / Intranet174 Logique de Hoare ----------------------------------------------------------------- I, C => F { c <= n + 1, s = i } et { c <= n } NON=> { c <= n + 1, s + 3 = i + 3 } i = 1 c – 1 i = 1 c – 1 //

175 19 décembre 2006Cours d'algorithmique 10 / Intranet175 POST : POST : Logique de Hoare ----------------------------------------------------------------- Un mauvais invariant : Un mauvais invariant : Q = { s = (i + 3) } = { s = (i + 3), c <= n + 1, c > n } c > n } i = 1 n... while ( c <= n ) do s <- s + c + 3 ; s <- s + c + 3 ; c <- c + 1 c <- c + 1 inv I inv I i = 1 c – 1 = { c <= n + 1, s = (i + 3) } i = 1 c – 1 Sans problème : I, C => Q

176 19 décembre 2006Cours d'algorithmique 10 / Intranet176 POST : POST : Logique de Hoare ----------------------------------------------------------------- Un mauvais invariant : Un mauvais invariant : Q = { s = (i + 3) } = { s = (i + 3), c <= n + 1, c > n } c > n } i = 1 n... while ( c <= n ) do s <- s + c + 3 ; s <- s + c + 3 ; c <- c + 1 c <- c + 1 inv I inv I i = 1 c – 1 = { c <= n + 1, s = (i + 3) } i = 1 c – 1 Sans problème : I, C => Q I =... F = { c <= n, s = (i + 3) } i = 1 c – 1 Après simplification ! Sans problème : I, C => F

177 19 décembre 2006Cours d'algorithmique 10 / Intranet177 Logique de Hoare ----------------------------------------------------------------- Attention : Attention : Tout ceci nempêche pas un programme de boucler ! Tout ceci nempêche pas un programme de boucler !

178 19 décembre 2006Cours d'algorithmique 10 / Intranet178 Logique de Hoare ----------------------------------------------------------------- Attention : Attention : Tout ceci nempêche pas un programme de boucler ! Tout ceci nempêche pas un programme de boucler ! Nous affirmons seulement que Nous affirmons seulement que – si le programme sarrête, – alors il rend le résultat indiqué !

179 19 décembre 2006Cours d'algorithmique 10 / Intranet179 Synthèse ----------------------------------------------------------------- Logique de Hoare (fin) : Les boucles et les invariants.

180 19 décembre 2006Cours d'algorithmique 10 / Intranet180 m E r C i e T b O n N e J o U r N é E ! ! ! n O u B l I e Z p A s D e p R é P a R e R v O s T D ! ! !


Télécharger ppt "Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants."

Présentations similaires


Annonces Google