Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.

Slides:



Advertisements
Présentations similaires
Présentation générale Marc Gengler
Advertisements

Algorithmes et structures de données avancées Cours 7
Algorithmes et structures de données avancés
Calculs de complexité d'algorithmes
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.
Cours d’Algorithmique
Cours d’Algorithmique
Problème des 4 couleurs, graphes planaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut.
Quelques applications.
9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes.
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
Cours d'algorithmique 4 - Intranet 1 16 novembre 2006 Cours dAlgorithmique Lalgorithme alpha-beta. Sous-arbres alpha et beta dun arbre minimax et propriétés.
Cours d’Algorithmique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Cours d'algorithmique 5 - Intranet 1 17/21 novembre 2006 Cours dAlgorithmique Divide and Conquer : principes et applications. Calculabilité.Complexité.
Cours de compilation 2 - Intranet
Cours de graphes Les plus courts chemins,
Cours de compilation Marc Gengler 18h de cours avec un peu de TD
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation.
Analyse syntaxique (intro)
Cours d'algorithmique 8 - Intranet 1 4 décembre 2006 Cours dAlgorithmique Dérécursion (fin) : Équivalences entre programmes récursifs et programmes itératifs.
Cours d’Algorithmique
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
Cours d’Algorithmique
La voie intuitionniste
Cours d’Algorithmique
Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations.
Cours d’Algorithmique
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Calcul et programmation au lycée avec Scilab
Cours d’Algorithmique
Les algorithmes: complexité et notation asymptotique
Programmation logique Logique des prédicats du premier ordre
Sémantique axiomatique
Problème des 4 couleurs, graphes planaires.
Quelques applications.
Quelques graphes particuliers.
Programmation logique Démonstrateur automatique
Cours de graphes Les arbres et arborescences.
16 mars 2007Cours de graphes 7 - Intranet1 Cours de graphes Problèmes NP-complets. Réductions polynômiales.
Rappels de logique des prédicats du 1er ordre
IFT Complexité et NP-complétude
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
CSI3525: Concepts des Languages de Programmation
Partie II Sémantique.
Cours de graphes Marc Gengler Alexandra Bac Sébastien Fournier
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Cours de graphes 6 - Intranet
23 février 2007Cours de graphes 4 - Intranet1 Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut. Algos de Ford-Fulkerson et Edmonds-Karp.
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Structures alternative et répétitive
Programmation procédurale Transformations
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Paradigmes des Langages de Programmation
INTRODUCTION.
Cours n°2UE102e(S. Sidhom) UE 102e. M1.IST-IE cours n°2 Systèmes à base de règles Par : Sahbi SIDHOM MCF. Université Nancy 2 Équipe de recherche SITE –
Programmation procédurale preuves D. Preuves Preuves sur les R-algorithmes. Règle de l'appel (Hoare). Exemple Preuves sur les B-algorithmes (Floyd) Automatisation.
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours d’Algorithmique Logique de Hoare (fin) : Les boucles et les invariants.
LOGIQUE ET PROGRAMMATION LOGIQUE
1 Spécifications de Problèmes. 2 Plan Définition Motivation Qualités attendues Types de formalismes Rappels du cours de programmation Spécifications structurées.
Relation de conséquence logique Nous avons vu une relation entre formules: l’équivalence tautologique (  ) Nous allons définir une nouvelle relation,
Transcription de la présentation:

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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet4 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet5 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 - Intranet6 Logique de Hoare Indispensable dans certains cas (lois européennes) ! Indispensable dans certains cas (lois européennes) ! Transport, nucléaire, … ! Transport, nucléaire, … !

12 décembre 2006Cours d'algorithmique 9 - Intranet7 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 - Intranet8 Logique de Hoare Analyse de programmes : Analyse de programmes :Programme

12 décembre 2006Cours d'algorithmique 9 - Intranet9 Logique de Hoare Analyse de programmes : Analyse de programmes :Programme Que fait-il ?

12 décembre 2006Cours d'algorithmique 9 - Intranet10 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 ?

12 décembre 2006Cours d'algorithmique 9 - Intranet11 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 - Intranet12 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).

12 décembre 2006Cours d'algorithmique 9 - Intranet13 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,

12 décembre 2006Cours d'algorithmique 9 - Intranet14 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 - Intranet15 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. I I

12 décembre 2006Cours d'algorithmique 9 - Intranet16 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 ! I I

12 décembre 2006Cours d'algorithmique 9 - Intranet17 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 - Intranet18 Logique de Hoare Ensuite, nous construisons un programme tel que Ensuite, nous construisons un programme tel que { PRE } programme { POST } { PRE } programme { POST }

12 décembre 2006Cours d'algorithmique 9 - Intranet19 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.

12 décembre 2006Cours d'algorithmique 9 - Intranet20 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet21 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 - Intranet22 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

12 décembre 2006Cours d'algorithmique 9 - Intranet23 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, … ),

12 décembre 2006Cours d'algorithmique 9 - Intranet24 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,

12 décembre 2006Cours d'algorithmique 9 - Intranet25 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,

12 décembre 2006Cours d'algorithmique 9 - Intranet26 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet27 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 - Intranet28 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 - Intranet29 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 - Intranet30 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 - Intranet31 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) !

12 décembre 2006Cours d'algorithmique 9 - Intranet32 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 » !

12 décembre 2006Cours d'algorithmique 9 - Intranet33 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 - Intranet34 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 ».

12 décembre 2006Cours d'algorithmique 9 - Intranet35 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 - Intranet36 Logique de Hoare Soit { PRE } programme { POST } ! Soit { PRE } programme { POST } ! Soit PRE => PRE ! Soit PRE => PRE ! Soit POST => POST ! Soit POST => POST !

12 décembre 2006Cours d'algorithmique 9 - Intranet37 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

12 décembre 2006Cours d'algorithmique 9 - Intranet38 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet39 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet40 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 - Intranet41 Logique de Hoare Graphiquement : Graphiquement : { PRE } programme { POST } { PRE } programme { POST }

12 décembre 2006Cours d'algorithmique 9 - Intranet42 Logique de Hoare Graphiquement : Graphiquement : { PRE } programme { POST } { PRE } programme { POST } programme PRE POST

12 décembre 2006Cours d'algorithmique 9 - Intranet43 Logique de Hoare Graphiquement : Graphiquement : { PRE } programme { POST } { PRE } programme { POST } programme PRE POST xy

12 décembre 2006Cours d'algorithmique 9 - Intranet44 Logique de Hoare Graphiquement : Graphiquement : { PRE } programme { POST } { PRE } programme { POST } programme PRE POST PRE => PRE PRE

12 décembre 2006Cours d'algorithmique 9 - Intranet45 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 - Intranet46 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 - Intranet47 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 - Intranet48 Logique de Hoare Le lien entre le « cahier des charges » et le « programme » : Le lien entre le « cahier des charges » et le « programme » :

12 décembre 2006Cours d'algorithmique 9 - Intranet49 Logique de Hoare Le lien entre le « cahier des charges » et le « programme » : Le lien entre le « cahier des charges » et le « programme » : Cahier des charges

12 décembre 2006Cours d'algorithmique 9 - Intranet50 Logique de Hoare Le lien entre le « cahier des charges » et le « programme » : Le lien entre le « cahier des charges » et le « programme » : programme Cahier des charges

12 décembre 2006Cours d'algorithmique 9 - Intranet51 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 ! programme Cahier des charges

12 décembre 2006Cours d'algorithmique 9 - Intranet52 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é ! programme Cahier des charges

12 décembre 2006Cours d'algorithmique 9 - Intranet53 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 - Intranet54 Logique de Hoare Que ferons-nous ? Que ferons-nous ?

12 décembre 2006Cours d'algorithmique 9 - Intranet55 Logique de Hoare Que ferons-nous ? Que ferons-nous ? – Soient les prédicats « P » et « Q » ! – Soit le programme « » !

12 décembre 2006Cours d'algorithmique 9 - Intranet56 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet57 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 :

12 décembre 2006Cours d'algorithmique 9 - Intranet58 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 « » !

12 décembre 2006Cours d'algorithmique 9 - Intranet59 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 avons un programme et une définition de ce que le programme devrait faire !

12 décembre 2006Cours d'algorithmique 9 - Intranet60 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 - Intranet61 Logique de Hoare La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » !

12 décembre 2006Cours d'algorithmique 9 - Intranet62 Logique de Hoare La démarche complète : La démarche complète : – Soit la post-condition « Q » ! Soit le programme « » ! Q

12 décembre 2006Cours d'algorithmique 9 - Intranet63 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

12 décembre 2006Cours d'algorithmique 9 - Intranet64 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

12 décembre 2006Cours d'algorithmique 9 - Intranet65 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

12 décembre 2006Cours d'algorithmique 9 - Intranet66 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

12 décembre 2006Cours d'algorithmique 9 - Intranet67 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 - Intranet68 Logique de Hoare C O N C R E T E M E N T...

12 décembre 2006Cours d'algorithmique 9 - Intranet69 Logique de Hoare Les programmes : Les programmes : – skip – x < - e – – – if C then else – if C then else – while C do – while C do

12 décembre 2006Cours d'algorithmique 9 - Intranet70 Logique de Hoare Les programmes : Les programmes : – skip le programme qui ne fait rien ! – x < - e – – – if C then else – if C then else – while C do – while C do

12 décembre 2006Cours d'algorithmique 9 - Intranet71 Logique de Hoare Les programmes : Les programmes : – skip le programme qui ne fait rien ! – x < - e laffectation ! – – – if C then else – if C then else – while C do – while C do

12 décembre 2006Cours d'algorithmique 9 - Intranet72 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 – if C then else – while C do – while C do

12 décembre 2006Cours d'algorithmique 9 - Intranet73 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 – while C do

12 décembre 2006Cours d'algorithmique 9 - Intranet74 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet75 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet76 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 - Intranet77 Logique de Hoare Nous utilisons des règles logiques de la forme : Nous utilisons des règles logiques de la forme : HYP... HYP 1 n CONCL

12 décembre 2006Cours d'algorithmique 9 - Intranet78 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 ! HYP... HYP 1 n CONCL

12 décembre 2006Cours d'algorithmique 9 - Intranet79 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 - Intranet80 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 :

12 décembre 2006Cours d'algorithmique 9 - Intranet81 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet82 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet83 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet84 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet85 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

12 décembre 2006Cours d'algorithmique 9 - Intranet86 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet87 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 - Intranet88 Logique de Hoare Règle pour le programme skip : Règle pour le programme skip :

12 décembre 2006Cours d'algorithmique 9 - Intranet89 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 - Intranet90 Logique de Hoare Règle pour le programme ; : Règle pour le programme ; : 1 2

12 décembre 2006Cours d'algorithmique 9 - Intranet91 Logique de Hoare Règle pour le programme ; : Règle pour le programme ; : { P } { Q } { Q } { R } 12 { P } ; { R }

12 décembre 2006Cours d'algorithmique 9 - Intranet92 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 - Intranet93 Logique de Hoare { P } { L } { Q } { R } 12 L => Q

12 décembre 2006Cours d'algorithmique 9 - Intranet94 Logique de Hoare { P } { L } { Q } { R } 12 L => Q 1 P L

12 décembre 2006Cours d'algorithmique 9 - Intranet95 2 Logique de Hoare { P } { L } { Q } { R } 12 L => Q Q R 1 P L

12 décembre 2006Cours d'algorithmique 9 - Intranet96 Logique de Hoare Règle pour le programme x < - e : Règle pour le programme x < - e :

12 décembre 2006Cours d'algorithmique 9 - Intranet97 Logique de Hoare Règle pour le programme x < - e : Règle pour le programme x < - e : { P[ x < - e ] } x < - e { P }

12 décembre 2006Cours d'algorithmique 9 - Intranet98 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 ». { P[ x < - e ] } x < - e { P }

12 décembre 2006Cours d'algorithmique 9 - Intranet99 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 - Intranet100 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 ] { P[ x < - e ] } x < - e { P }

12 décembre 2006Cours d'algorithmique 9 - Intranet101 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 ] { P[ x < - e ] } x < - e { P }

12 décembre 2006Cours d'algorithmique 9 - Intranet102 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 - Intranet103 Logique de Hoare Interprétation de { P[ x < - e ] } x < - e { P } : Interprétation de { P[ x < - e ] } x < - e { P } :

12 décembre 2006Cours d'algorithmique 9 - Intranet104 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 - Intranet105 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 - Intranet106 Logique de Hoare Illustration : Illustration : { ( ( ) * y mod ( 1 + ( ) ) ) } x < - … { ??? }

12 décembre 2006Cours d'algorithmique 9 - Intranet107 Logique de Hoare Illustration : Illustration : { ( ( ) * y mod ( 1 + ( ) ) ) } x < - … { ??? }

12 décembre 2006Cours d'algorithmique 9 - Intranet108 Logique de Hoare Illustration : Illustration : { ( ( ) * y mod ( 1 + ( ) ) ) } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - … { ??? }

12 décembre 2006Cours d'algorithmique 9 - Intranet109 Logique de Hoare Illustration : Illustration : { ( ( ) * y mod ( 1 + ( ) ) ) } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - ( ) { ??? }

12 décembre 2006Cours d'algorithmique 9 - Intranet110 Logique de Hoare Illustration : Illustration : { ( ( ) * y mod ( 1 + ( ) ) ) } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - … { ??? } { ( x * y mod ( 1 + x ) )[ x < - ( ) ] } x < - ( ) { ??? } P

12 décembre 2006Cours d'algorithmique 9 - Intranet111 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

12 décembre 2006Cours d'algorithmique 9 - Intranet112 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 - Intranet113 Logique de Hoare Premier exemple : Premier exemple : m <- x ; x <- y ; y <- m

12 décembre 2006Cours d'algorithmique 9 - Intranet114 Logique de Hoare Premier exemple : Premier exemple : Post-condition : Post-condition : m <- x ; x <- y ; y <- m Q = { x = a, y = b }

12 décembre 2006Cours d'algorithmique 9 - Intranet115 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet116 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet117 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet118 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet119 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet120 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 - Intranet121 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 - Intranet122 Logique de Hoare Deuxième exemple : Deuxième exemple : x <- x + y ; y <- x - y ; x <- x - y

12 décembre 2006Cours d'algorithmique 9 - Intranet123 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet124 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet125 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet126 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 } Des maths !

12 décembre 2006Cours d'algorithmique 9 - Intranet127 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet128 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet129 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 } Des maths !

12 décembre 2006Cours d'algorithmique 9 - Intranet130 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet131 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet132 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 } Des maths !

12 décembre 2006Cours d'algorithmique 9 - Intranet133 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 - Intranet134 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 } Dépassement de capacité ? ? ?

12 décembre 2006Cours d'algorithmique 9 - Intranet135 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet136 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 - Intranet137 Logique de Hoare Troisième exemple : Troisième exemple : x <- x - y ; y <- x + y ; x <- y - x

12 décembre 2006Cours d'algorithmique 9 - Intranet138 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet139 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet140 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet141 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 } Des maths !

12 décembre 2006Cours d'algorithmique 9 - Intranet142 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet143 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet144 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 } Des maths !

12 décembre 2006Cours d'algorithmique 9 - Intranet145 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 ]

12 décembre 2006Cours d'algorithmique 9 - Intranet146 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet147 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 } Des maths !

12 décembre 2006Cours d'algorithmique 9 - Intranet148 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 - Intranet149 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 } Dépassement de capacité ? ? ?

12 décembre 2006Cours d'algorithmique 9 - Intranet150 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet151 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 - Intranet152 Logique de Hoare Règle pour le programme if C then else : Règle pour le programme if C then else : 21

12 décembre 2006Cours d'algorithmique 9 - Intranet153 Logique de Hoare Règle pour le programme if C then else : Règle pour le programme if C then else : { P, C } { Q } { P } if C then else { Q } { P, C } { Q } 1

12 décembre 2006Cours d'algorithmique 9 - Intranet154 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 - Intranet155 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 : 21 12

12 décembre 2006Cours d'algorithmique 9 - Intranet156 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 : { F } { Q }

12 décembre 2006Cours d'algorithmique 9 - Intranet157 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 : { F } { Q } P, C => F

12 décembre 2006Cours d'algorithmique 9 - Intranet158 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 ? ? ? ? ? { F } { Q } P, C => F

12 décembre 2006Cours d'algorithmique 9 - Intranet159 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 - Intranet160 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 : { ??? } if C then else { Q } 1 2 { ??? } { Q } 1

12 décembre 2006Cours d'algorithmique 9 - Intranet161 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 : { ??? } if C then else { Q } 1 2 { ??? } { Q } 1 1 { ??? } if C then else { Q } 1 2 { F } { Q } 1 1

12 décembre 2006Cours d'algorithmique 9 - Intranet162 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 - Intranet163 Logique de Hoare Nous obtenons deux cas : Nous obtenons deux cas : { F, C } if C then else { Q } 1 2 { F } { Q } Test vrai !

12 décembre 2006Cours d'algorithmique 9 - Intranet164 Logique de Hoare Nous obtenons deux cas : Nous obtenons deux cas : { 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 !

12 décembre 2006Cours d'algorithmique 9 - Intranet165 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 - Intranet166 Logique de Hoare Un premier exemple : Un premier exemple : if ( a < 0 ) then x <- x + 7 x <- x + 7else x = x – 3 x = x – 3

12 décembre 2006Cours d'algorithmique 9 - Intranet167 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet168 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet169 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

12 décembre 2006Cours d'algorithmique 9 - Intranet170 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 - Intranet171 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 - Intranet172 Logique de Hoare Un second exemple : Un second exemple : if ( a < 0 ) then x <- -a x <- -aelse x = a x = a

12 décembre 2006Cours d'algorithmique 9 - Intranet173 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 | }

12 décembre 2006Cours d'algorithmique 9 - Intranet174 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 | }

12 décembre 2006Cours d'algorithmique 9 - Intranet175 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

12 décembre 2006Cours d'algorithmique 9 - Intranet176 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 - Intranet177 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet178 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 }

12 décembre 2006Cours d'algorithmique 9 - Intranet179 Synthèse Logique de Hoare (début) : Principes et constructions élémentaires.

12 décembre 2006Cours d'algorithmique 9 - 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 ! ! !