Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
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
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.
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 » !
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
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.
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
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 ? ? ? ? ?
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 » !
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 » !
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 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 ».
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 !
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
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
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 !
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
12 décembre 2006Cours d'algorithmique 9 - Intranet18 Logique de Hoare C O N C R E T E M E N T...
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 !
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
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 } Conjonction
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 }
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
12 décembre 2006Cours d'algorithmique 9 - Intranet24 2 Logique de Hoare { P } { L } { Q } { R } 12 L => Q Q R 1 P L
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 }
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 }
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 !
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.
12 décembre 2006Cours d'algorithmique 9 - Intranet29 Logique de Hoare Illustration : Illustration : { ( ( ) * y mod ( 1 + ( ) ) ) } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - ( ) { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - ( ) { P } { P[ x < - ( ) ] } x < - ( ) { P } P
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 }
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 }
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 }
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 }
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 }
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 } { P, T } { Q } 1 { ???, C } { Q } { ??? } if C then else { Q } { ???, C } { Q } 1
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 } P, C => F
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
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 } Test vrai ! { F, C } if C then else { Q } 1 2 { F } { Q } Test faux ! { F, C } ou { F, C } if C then else { Q } 1 2 { F } { Q }
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
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 }
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
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 }