Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parArman Blandin Modifié depuis plus de 10 années
1
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
2
12 décembre 2006Cours d'algorithmique 9 - 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
12 décembre 2006Cours d'algorithmique 9 - Intranet3 Logique de Hoare ----------------------------------------------------------------- Logique de Hoare ! Logique de Hoare ! Plus faibles pré-conditions de Dijkstra ! Plus faibles pré-conditions de Dijkstra ! Objectif : Objectif : – Raisonnement formel sur la correction dun programme ! Cadre : Cadre : – Spécifications formelles. – Génie logiciel.
4
12 décembre 2006Cours d'algorithmique 9 - Intranet4 Logique de Hoare ----------------------------------------------------------------- Indispensable dans certains cas (lois européennes) ! Indispensable dans certains cas (lois européennes) ! Transport, nucléaire, … ! Transport, nucléaire, … ! Il faut : Il faut : – fournir une preuve formelle de la correction du programme ! On peut : On peut : – utiliser des outils comme « Atelier B » !
5
12 décembre 2006Cours d'algorithmique 9 - Intranet5 Logique de Hoare ----------------------------------------------------------------- Analyse de programmes : Analyse de programmes :Programme Construction dun programme : Construction dun programme : Ce quil doit faire ! (cahier des charges) Ce quil doit faire ! (cahier des charges) Que fait-il ? Programme
6
12 décembre 2006Cours d'algorithmique 9 - Intranet6 Logique de Hoare ----------------------------------------------------------------- Une spécification formelle est un Une spécification formelle est un cahier de charges formel (des définitions précises). cahier de charges formel (des définitions précises). Elle donne Elle donne – les pré-conditions, notées PRE, qui sont les conditions vérifiées par les arguments en entrée, vérifiées par les arguments en entrée, – les post-conditions, notées POST, qui sont les conditions vérifiées par les résultats en sortie. vérifiées par les résultats en sortie.
7
12 décembre 2006Cours d'algorithmique 9 - Intranet7 Logique de Hoare ----------------------------------------------------------------- Un exemple : Un exemple : – PRE : ENTREE, DIV N – POST: QUO, RESTE N telles ENTREE = QUO * DIV + RESTE et RESTE < DIV. et RESTE < DIV. – Cest la spécification de la division euclidienne ! – Nous savons ce quil faut faire ! – Nous ne savons pas encore comment faire ? I I
8
12 décembre 2006Cours d'algorithmique 9 - Intranet8 Logique de Hoare ----------------------------------------------------------------- Ensuite, nous construisons un programme tel que Ensuite, nous construisons un programme tel que { 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. Ce lien est fait à laide de la logique de Hoare ! Ce lien est fait à laide de la logique de Hoare ! Et si les pré-conditions ne sont pas vérifiées ? ? ? ? ? Et si les pré-conditions ne sont pas vérifiées ? ? ? ? ?
9
12 décembre 2006Cours d'algorithmique 9 - Intranet9 Logique de Hoare ----------------------------------------------------------------- Si la pré-condition nest pas vérifiée, le programme peut Si la pré-condition nest pas vérifiée, le programme peut – provoquer une erreur (segmentation fault, … ), – boucler, – répondre nimporte quoi, – répondre correctement, malgré tout ! Sage précaution : Sage précaution : – Testons la validité des arguments et générons des messages derreur sil le faut ! – Ce sont les « assert » !
10
12 décembre 2006Cours d'algorithmique 9 - Intranet10 Logique de Hoare ----------------------------------------------------------------- Si la pré-condition nest pas vérifiée, le programme peut Si la pré-condition nest pas vérifiée, le programme peut – provoquer une erreur (segmentation fault, … ), – boucler, – répondre nimporte quoi, – répondre correctement, malgré tout ! Sage précaution : Sage précaution : – Testons la validité des arguments et générons des messages derreur sil le faut ! – Ce sont les « assert » !
11
12 décembre 2006Cours d'algorithmique 9 - Intranet11 Logique de Hoare ----------------------------------------------------------------- Dans Dans { PRE } programme { POST } { PRE } programme { POST } nous avons en fait nous avons en fait PRE => POST (limplication logique) ! PRE => POST (limplication logique) ! Rappels : Rappels : A => B « Tous les A sont B » ! A => B « Tous les A sont B » ! A B A : ceux qui vérifient A. B : ceux qui vérifient B.
12
12 décembre 2006Cours d'algorithmique 9 - Intranet12 Logique de Hoare ----------------------------------------------------------------- Dans Dans { PRE } programme { POST } { PRE } programme { POST } nous avons en fait nous avons en fait PRE => POST (limplication logique) ! PRE => POST (limplication logique) ! Rappels : Rappels : A => B « Tous les A sont B » ! A => B « Tous les A sont B » ! A B « A » est une condition plus forte que « B ». « B » est une condition plus faible que « A ».
13
12 décembre 2006Cours d'algorithmique 9 - Intranet13 Logique de Hoare ----------------------------------------------------------------- Soit { PRE } programme { POST } ! Soit { PRE } programme { POST } ! Soit PRE => PRE ! Soit PRE => PRE ! Soit POST => POST ! Soit POST => POST ! Donc : Donc : PRE => { PRE } programme { POST } => POST PRE => { PRE } programme { POST } => POST et et { PRE } programme { POST } { PRE } programme { POST } Pré-condition plus forte ! Post-condition plus faible ! Pour un ensemble plus restreint darguments, Pour un ensemble plus restreint darguments, le programme répond de manière plus vague ! le programme répond de manière plus vague !
14
12 décembre 2006Cours d'algorithmique 9 - Intranet14 Logique de Hoare ----------------------------------------------------------------- Graphiquement : Graphiquement : { PRE } programme { POST } { PRE } programme { POST } programme PRE POST PRE => PRE PRE POST => POST
15
12 décembre 2006Cours d'algorithmique 9 - Intranet15 Logique de Hoare ----------------------------------------------------------------- Le lien entre le « cahier des charges » et le « programme » : Le lien entre le « cahier des charges » et le « programme » : Le programme accepte toutes les données, voire plus ! Le programme accepte toutes les données, voire plus ! Le programme répond précisément, même plus quexigé ! Le programme répond précisément, même plus quexigé ! Le cahier des charges est lexigence minimale ! ! ! Le cahier des charges est lexigence minimale ! ! ! programme Cahier des charges
16
12 décembre 2006Cours d'algorithmique 9 - Intranet16 Logique de Hoare ----------------------------------------------------------------- Que ferons-nous ? Que ferons-nous ? – Soient les prédicats « P » et « Q » ! – Soit le programme « » ! Nous pouvons dire si { P } { Q } est vraie ou non ! Nous pouvons dire si { P } { Q } est vraie ou non ! Plus intéressant : Plus intéressant : – Soit la post-condition « Q » ! – Soit le programme « » ! Nous pouvons calculer la plus faible condition F telle que { F } { Q } soit vraie ! Nous pouvons calculer la plus faible condition F telle que { F } { Q } soit vraie ! Nous avons un programme et une définition de ce que le programme devrait faire !
17
12 décembre 2006Cours d'algorithmique 9 - Intranet17 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
18
12 décembre 2006Cours d'algorithmique 9 - Intranet18 Logique de Hoare ----------------------------------------------------------------- C O N C R E T E M E N T...
19
12 décembre 2006Cours d'algorithmique 9 - Intranet19 Logique de Hoare ----------------------------------------------------------------- Les programmes : Les programmes : – skip le programme qui ne fait rien ! – x < - e laffectation ! – la séquence dinstructions ! – if C then else la conditionnelle ! – while C do la boucle ! Les conditions « C » ne font pas daffectation ! Les conditions « C » ne font pas daffectation ! Toutes les autres constructions peuvent sexprimer à laide de celles ci-dessus ! Toutes les autres constructions peuvent sexprimer à laide de celles ci-dessus ! 2 1 1 2
20
12 décembre 2006Cours d'algorithmique 9 - Intranet20 Logique de Hoare ----------------------------------------------------------------- Nous utilisons des règles logiques de la forme : Nous utilisons des règles logiques de la forme : Celles-ci sont utilisées en Celles-ci sont utilisées en – MODUS PONENS : Si nous avons les hypothèses nous pouvons déduire la conclusion ! – MODUS TOLLENS : Pour avoir la conclusion, il suffit davoir les hypothèses ! HYP... HYP 1 n CONCL
21
12 décembre 2006Cours d'algorithmique 9 - Intranet21 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 Conjonction
22
12 décembre 2006Cours d'algorithmique 9 - Intranet22 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme skip : Règle pour le programme skip : { P } skip { P }
23
12 décembre 2006Cours d'algorithmique 9 - Intranet23 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme ; : Règle pour le programme ; : A cause de PRE-STRENGTH et POST-WEAK, nous navons pas besoin dune règle de la forme : A cause de PRE-STRENGTH et POST-WEAK, nous navons pas besoin dune règle de la forme : { P } { Q } { Q } { R } 12 { P } ; { R } 12 { P } { L } { Q } { R } 12 { P } ; { R } 12 L => Q 1 2
24
12 décembre 2006Cours d'algorithmique 9 - Intranet24 2 Logique de Hoare ----------------------------------------------------------------- { P } { L } { Q } { R } 12 L => Q Q R 1 P L
25
12 décembre 2006Cours d'algorithmique 9 - Intranet25 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme x < - e : Règle pour le programme x < - e : ou P[ x < - e ] est la ou P[ x < - e ] est la substitution de « e » à toutes les occurrences substitution de « e » à toutes les occurrences libres de « x » dans « P ». libres de « x » dans « P ». Une occurrence de « x » dans « P » est libre si elle nest pas sous la portée dun quantification universel ou existentiel. Une occurrence de « x » dans « P » est libre si elle nest pas sous la portée dun quantification universel ou existentiel. { P[ x < - e ] } x < - e { P }
26
12 décembre 2006Cours d'algorithmique 9 - Intranet26 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme x < - e : Règle pour le programme x < - e : ou P[ x < - e ] est la ou P[ x < - e ] est la substitution de « e » à toutes les occurrences substitution de « e » à toutes les occurrences libres de « x » dans « P ». libres de « x » dans « P ». ( x > 3 et x. ( x >= 17 ) ) [ x 3 et x. ( x >= 17 ) ) [ x < - 9 ] = ( x > 3 et x. ( x >= 17 ) ) [ x 3 et x. ( x >= 17 ) ) [ x < - 9 ] = ( 9 > 3 et x. ( x >= 17 ) ) { P[ x < - e ] } x < - e { P }
27
12 décembre 2006Cours d'algorithmique 9 - Intranet27 Logique de Hoare ----------------------------------------------------------------- Interprétation de { P[ x < - e ] } x < - e { P } : Interprétation de { P[ x < - e ] } x < - e { P } : – Si « x » nest pas libre dans « P » : la post-condition ne sintéresse pas à « x », la post-condition ne sintéresse pas à « x », la pré-condition P[ x < - e ] = P non plus dailleurs, la pré-condition P[ x < - e ] = P non plus dailleurs, laffectation x < - e nest pas fausse, mais inutile ! laffectation x < - e nest pas fausse, mais inutile !
28
12 décembre 2006Cours d'algorithmique 9 - Intranet28 Logique de Hoare ----------------------------------------------------------------- Interprétation de { P[ x < - e ] } x < - e { P } : Interprétation de { P[ x < - e ] } x < - e { P } : – Si « x » est libre dans « P » : la post-condition dépend bien de « x », la post-condition dépend bien de « x », la pré-condition P[ x < - e ] est la formule ou nous avons des « e » à la place des « x », la pré-condition P[ x < - e ] est la formule ou nous avons des « e » à la place des « x », laffectation x < - e donne la valeur « e » à « x » et nous pouvons donc dans P[ x < - e ] remplacer « e » par « x », laffectation x < - e donne la valeur « e » à « x » et nous pouvons donc dans P[ x < - e ] remplacer « e » par « x », cest-à-dire considérer la post-condition P. cest-à-dire considérer la post-condition P.
29
12 décembre 2006Cours d'algorithmique 9 - Intranet29 Logique de Hoare ----------------------------------------------------------------- Illustration : Illustration : { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( 11 + 34 ) ] } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( 11 + 34 ) ] } x < - ( 11 + 34 ) { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( 11 + 34 ) ] } x < - ( 11 + 34 ) { P } { P[ x < - ( 11 + 34 ) ] } x < - ( 11 + 34 ) { P } P
30
12 décembre 2006Cours d'algorithmique 9 - Intranet30 Logique de Hoare ----------------------------------------------------------------- Premier exemple : Premier exemple : Post-condition : Post-condition : m <- x ; x <- y ; y <- m Q = { x = a, y = b } R = Q[ y < - m ] = { x = a, m = b } S = R[ x < - y ] = { y = a, m = b } P = S[ m < - x ] = { y = a, x = b }
31
12 décembre 2006Cours d'algorithmique 9 - Intranet31 Logique de Hoare ----------------------------------------------------------------- Deuxième exemple : Deuxième exemple : POST : POST : x <- x + y ; y <- x - y ; x <- x - y Q = { x = a, y = b } R = Q[ x < - x - y ] = { x – y = a, y = b } = { x = a + b, y = b } S = R[ y < - x - y ] = { x = a + b, x - y = b } = { x = a + b, y = a } P = S[ x < - x + y ] = { x + y = a + b, y = a } = { x = b, y = a }
32
12 décembre 2006Cours d'algorithmique 9 - Intranet32 Logique de Hoare ----------------------------------------------------------------- Deuxième exemple, avec vérification de la capacité : Deuxième exemple, avec vérification de la capacité : POST : POST : x <- x + y ; y <- x - y ; x <- x - y Q = { x = a, y = b, a D, b D } R = Q[ x < - x - y ] = { x = a + b, y = b, a D, b D, a + b D } S = R[ y < - x - y ] = { x = a + b, y = a, a D, b D, a + b D } P = S[ x < - x + y ] = { x = b, y = a, a D, b D, a + b D }
33
12 décembre 2006Cours d'algorithmique 9 - Intranet33 Logique de Hoare ----------------------------------------------------------------- Troisième exemple : Troisième exemple : POST : POST : x <- x - y ; y <- x + y ; x <- y - x Q = { x = a, y = b } R = Q[ x < - y - x ] = { y – x = a, y = b } = { x = b - a, y = b } S = R[ y < - x + y ] = { x = b – a, x + y = b } = { x = b – a, y = a } P = S[ x < - x - y ] = { x - y = b – a, y = a } = { x = b, y = a }
34
12 décembre 2006Cours d'algorithmique 9 - Intranet34 Logique de Hoare ----------------------------------------------------------------- Troisième exemple, avec vérification de la capacité : Troisième exemple, avec vérification de la capacité : POST : POST : x <- x - y ; y <- x + y ; x <- y - x Q = { x = a, y = b, a D, b D } R = Q[ x < - y - x ] = { x = b - a, y = b, a D, b D, b - a D } S = R[ y < - x + y ] = { x = b – a, y = a, a D, b D, b - a D } P = S[ x < - x - y ] = { x = b, y = a, a D, b D, b - a D }
35
12 décembre 2006Cours d'algorithmique 9 - Intranet35 Logique de Hoare ----------------------------------------------------------------- Règle pour le programme if C then else : Règle pour le programme if C then else : Mais, dans la pratique, nous naurons pas « P » : Mais, dans la pratique, nous naurons pas « P » : { P, T } { Q } { P } if C then else { Q } 21 1 2 2 { P, T } { Q } 1 { ???, C } { Q } { ??? } if C then else { Q } 1 2 2 { ???, C } { Q } 1
36
12 décembre 2006Cours d'algorithmique 9 - Intranet36 Logique de Hoare ----------------------------------------------------------------- Nous allons déduire les pré-conditions F et F à partir de et et de Q : Nous allons déduire les pré-conditions F et F à partir de et et de Q : Ensuite, il sagira de trouver P tel que : Ensuite, il sagira de trouver P tel que : Mais, comment faire ? ? ? ? ? Mais, comment faire ? ? ? ? ? Si vous avez de la chance, vous trouverez ! Si vous avez de la chance, vous trouverez ! Sinon, il faudra trouver une autre approche ! Sinon, il faudra trouver une autre approche ! { F } { Q } 21 2 1 P, C => F 2 1 12 12
37
12 décembre 2006Cours d'algorithmique 9 - Intranet37 Logique de Hoare ----------------------------------------------------------------- Si nous ne trouvons pas P nous pouvons toujours faire une discussion par cas et partir de : Si nous ne trouvons pas P nous pouvons toujours faire une discussion par cas et partir de : pour chercher F : pour chercher F : et déduire une pré-condition au cas ou le test est vrai : et déduire une pré-condition au cas ou le test est vrai : { ??? } if C then else { Q } 1 2 { ??? } { Q } 1 1 { ??? } if C then else { Q } 1 2 { F } { Q } 1 1 { F, C } if C then else { Q } 1 2 { F } { Q } 1 1 1
38
12 décembre 2006Cours d'algorithmique 9 - Intranet38 Logique de Hoare ----------------------------------------------------------------- Nous obtenons deux cas : Nous obtenons deux cas : que nous fusionnons ensuite : que nous fusionnons ensuite : { F, C } if C then else { Q } 1 2 { F } { Q } 1 1 1 Test vrai ! { F, C } if C then else { Q } 1 2 { F } { Q } 2 2 2 Test faux ! { F, C } ou { F, C } if C then else { Q } 1 2 { F } { Q } 2 2 21 1 1
39
12 décembre 2006Cours d'algorithmique 9 - Intranet39 Logique de Hoare ----------------------------------------------------------------- Un premier exemple : Un premier exemple : POST : POST : if ( a < 0 ) then x <- x + 7 x <- x + 7else x = x – 3 x = x – 3 Q = { x = a + 8 } F = { x = a + 11 } 2 F = { x = a + 1 } 1
40
12 décembre 2006Cours d'algorithmique 9 - Intranet40 Logique de Hoare ----------------------------------------------------------------- Un premier exemple : Un premier exemple : POST : POST : if ( a < 0 ) then x <- x + 7 x <- x + 7else x = x – 3 x = x – 3 Q = { x = a + 8 } F = { x = a + 11 } 2 F = { x = a + 1 } 1 { x = a + 1, a = 0 }
41
12 décembre 2006Cours d'algorithmique 9 - Intranet41 Logique de Hoare ----------------------------------------------------------------- Un second exemple : Un second exemple : POST : POST : if ( a < 0 ) then x <- -a x <- -aelse x = a x = a Q = { x = | a | } F = { a >= 0 } 2 F = { a < 0 } 1
42
12 décembre 2006Cours d'algorithmique 9 - Intranet42 Logique de Hoare ----------------------------------------------------------------- Un second exemple : Un second exemple : POST : POST : if ( a < 0 ) then x <- -a x <- -aelse x = a x = a Q = { x = | a | } F = { a >= 0 } 2 F = { a < 0 } 1 { a = 0 } = { VRAI }
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.