Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare...

Post on 03-Apr-2015

104 views 0 download

Transcript of Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare...

Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1112 décembre 200612 décembre 2006

Cours d’AlgorithmiqueCours d’Algorithmique

Logique de Hoare (début) :Logique de Hoare (début) :

Principes etPrincipes et

constructions élémentaires.constructions élémentaires.

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 22

• Trier et chercher, recherche textuelleTrier et chercher, recherche textuelle• Listes et arbresListes et arbres• Le back-trackLe back-track• Arbres équilibrésArbres équilibrés• Récursivité et induction sur la structureRécursivité et induction sur la structure• Divide and conquer, algorithmes gloutonsDivide and conquer, algorithmes gloutons• Minimax, alpha-betaMinimax, alpha-beta• DérécursionDérécursion• Divers problèmes particuliersDivers problèmes particuliers• Logique de HoareLogique de Hoare• Programmation dynamiqueProgrammation dynamique• Complexité et calculabilitéComplexité et calculabilité

Les grandes lignes du coursLes grandes lignes du cours

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 33

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Logique de Hoare !Logique de Hoare !

• Plus faibles pré-conditions de Dijkstra !Plus faibles pré-conditions de Dijkstra !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 44

Logique de HoareLogique 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 d’un Raisonnement formel sur la correction d’un programme !programme !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 55

Logique de HoareLogique 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 d’un programme !Raisonnement formel sur la correction d’un programme !

• Cadre :Cadre :

– Spécifications formelles.Spécifications formelles.

– Génie logiciel.Génie logiciel.

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 66

Logique de HoareLogique 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 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 77

Logique de HoareLogique 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 fournir une preuve formelle de la correction du programme !programme !

• On peut :On peut :

– utiliser des outils comme « Atelier B » !utiliser des outils comme « Atelier B » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 88

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Analyse de programmes :Analyse de programmes :

ProgrammeProgramme

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 99

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Analyse de programmes :Analyse de programmes :

ProgrammeProgramme

Que fait-il ?Que fait-il ?

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1010

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Analyse de programmes :Analyse de programmes :

ProgrammeProgramme

• Construction d’un programme :Construction d’un programme :

Ce qu’il doit faire ! (cahier des charges)Ce qu’il doit faire ! (cahier des charges)

Que fait-il ?Que fait-il ?

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1111

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Analyse de programmes :Analyse de programmes :

ProgrammeProgramme

• Construction d’un programme :Construction d’un programme :

Ce qu’il doit faire ! (cahier des charges)Ce qu’il doit faire ! (cahier des charges)

Que fait-il ?Que fait-il ?

ProgrammeProgramme

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1212

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Une Une spécification formellespécification formelle est un est un

cahier de charges formel (des définitions cahier de charges formel (des définitions précises).précises).

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1313

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Une Une spécification formellespécification formelle est un est un

cahier de charges formel (des définitions cahier de charges formel (des définitions précises).précises).

• Elle donneElle donne

– les les pré-conditions, notées PRE, pré-conditions, notées PRE, qui sont les conditions qui sont les conditions

vérifiées par vérifiées par les arguments en entréeles arguments en entrée,,

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1414

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Une Une spécification formellespécification formelle est un est un

cahier de charges formel (des définitions précises).cahier de charges formel (des définitions précises).

• Elle donneElle donne

– les les pré-conditions, notées PRE, pré-conditions, notées PRE, qui sont les conditions qui sont les conditions

vérifiées par vérifiées par les arguments en entréeles arguments en entrée,,

– les les post-conditions, notées POST, post-conditions, notées POST, qui sont les conditions qui sont les conditions

vérifiées par vérifiées par les résultats en sortieles résultats en sortie..

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1515

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un exemple :Un exemple :

– PRE : ENTREE , DIV PRE : ENTREE , DIV N N

– POST: POST: QUO , RESTE QUO , RESTE N N

telles ENTREE = QUO * DIV + RESTEtelles ENTREE = QUO * DIV + RESTE et RESTE < DIV .et RESTE < DIV .

II

II

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1616

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un exemple :Un exemple :

– PRE : ENTREE , DIV PRE : ENTREE , DIV N N

– POST: POST: QUO , RESTE QUO , RESTE N N

telles ENTREE = QUO * DIV + RESTEtelles ENTREE = QUO * DIV + RESTE et RESTE < DIV .et RESTE < DIV .

– C’est la spécification de la division euclidienne !C’est la spécification de la division euclidienne !

II

II

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1717

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un exemple :Un exemple :

– PRE : ENTREE , DIV PRE : ENTREE , DIV N N

– POST: POST: QUO , RESTE QUO , RESTE N N

telles ENTREE = QUO * DIV + RESTEtelles ENTREE = QUO * DIV + RESTE et RESTE < DIV .et RESTE < DIV .

– C’est la spécification de la division euclidienne !C’est la spécification de la division euclidienne !

– Nous savons ce qu’il faut faire !Nous savons ce qu’il faut faire !

– Nous ne savons pas encore comment faire ?Nous ne savons pas encore comment faire ?

II

II

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1818

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Ensuite, nous construisons un Ensuite, nous construisons un programmeprogramme tel que tel que

{ PRE } { PRE } programme programme { POST }{ POST }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 1919

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Ensuite, nous construisons un Ensuite, nous construisons un programmeprogramme tel que tel que

{ PRE } { PRE } programme programme { POST }{ POST }

• Ceci signifie queCeci signifie que

– si les si les pré-conditionspré-conditions sont vérifiées par sont vérifiées par les argumentsles arguments,,

– alors les alors les post-conditions post-conditions seront vérifiées par seront vérifiées par les les résultatsrésultats..

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2020

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Ensuite, nous construisons un Ensuite, nous construisons un programmeprogramme tel que tel que

{ PRE } { PRE } programme programme { POST }{ POST }

• Ceci signifie queCeci signifie que

– si les si les pré-conditionspré-conditions sont vérifiées par sont vérifiées par les argumentsles arguments,,

– alors les alors les post-conditions post-conditions seront vérifiées par seront vérifiées par les les résultatsrésultats..

• Ce lien est fait à l’aide de la logique de Hoare !Ce lien est fait à l’aide de la logique de Hoare !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2121

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Ensuite, nous construisons un Ensuite, nous construisons un programmeprogramme tel que tel que

{ PRE } { PRE } programme programme { POST }{ POST }

• Ceci signifie queCeci signifie que

– si les si les pré-conditionspré-conditions sont vérifiées par sont vérifiées par les argumentsles arguments,,

– alors les alors les post-conditions post-conditions seront vérifiées par seront vérifiées par les résultatsles résultats..

• Ce lien est fait à l’aide de la logique de Hoare !Ce lien est fait à l’aide 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 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2222

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme Si la pré-condition n’est pas vérifiée, le programme peutpeut

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2323

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme Si la pré-condition n’est pas vérifiée, le programme peutpeut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2424

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme Si la pré-condition n’est pas vérifiée, le programme peutpeut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2525

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme Si la pré-condition n’est pas vérifiée, le programme peutpeut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

– répondre n’importe quoi,répondre n’importe quoi,

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2626

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme Si la pré-condition n’est pas vérifiée, le programme peutpeut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

– répondre n’importe quoi,répondre n’importe quoi,

– répondre correctement, malgré tout !répondre correctement, malgré tout !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2727

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme peutSi la pré-condition n’est pas vérifiée, le programme peut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

– répondre n’importe quoi,répondre n’importe quoi,

– répondre correctement, malgré tout !répondre correctement, malgré tout !

• Sage précaution :Sage précaution :

– Testons la validité des arguments et générons des messages Testons la validité des arguments et générons des messages d’erreur s’il le faut !d’erreur s’il le faut !

– Ce sont les « assert » !Ce sont les « assert » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2828

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme peutSi la pré-condition n’est pas vérifiée, le programme peut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

– répondre n’importe quoi,répondre n’importe quoi,

– répondre correctement, malgré tout !répondre correctement, malgré tout !

• Sage précaution :Sage précaution :

– Testons la validité des arguments et générons des messages Testons la validité des arguments et générons des messages d’erreur s’il le faut !d’erreur s’il le faut !

– Ce sont les « assert » !Ce sont les « assert » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 2929

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme peutSi la pré-condition n’est pas vérifiée, le programme peut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

– répondre n’importe quoi,répondre n’importe quoi,

– répondre correctement, malgré tout !répondre correctement, malgré tout !

• Sage précaution :Sage précaution :

– Testons la validité des arguments et générons des messages Testons la validité des arguments et générons des messages d’erreur s’il le faut !d’erreur s’il le faut !

– Ce sont les « assert » !Ce sont les « assert » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3030

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si la pré-condition n’est pas vérifiée, le programme peutSi la pré-condition n’est pas vérifiée, le programme peut

– provoquer une erreur (segmentation fault, … ),provoquer une erreur (segmentation fault, … ),

– boucler,boucler,

– répondre n’importe quoi,répondre n’importe quoi,

– répondre correctement, malgré tout !répondre correctement, malgré tout !

• Sage précaution :Sage précaution :

– Testons la validité des arguments et générons des messages Testons la validité des arguments et générons des messages d’erreur s’il le faut !d’erreur s’il le faut !

– Ce sont les « assert » !Ce sont les « assert » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3131

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• DansDans

{ PRE } { PRE } programme programme { POST }{ POST }

nous avons en faitnous avons en fait

PRE => POSTPRE => POST (l’implication logique) ! (l’implication logique) !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3232

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• DansDans

{ PRE } { PRE } programme programme { POST }{ POST }

nous avons en faitnous avons en fait

PRE => POSTPRE => POST (l’implication logique) ! (l’implication logique) !

• Rappels :Rappels :

A => B « Tous les A sont B » !A => B « Tous les A sont B » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3333

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• DansDans

{ PRE } { PRE } programme programme { POST }{ POST }

nous avons en faitnous avons en fait

PRE => POSTPRE => POST (l’implication logique) ! (l’implication logique) !

• Rappels :Rappels :

A => B « Tous les A sont B » !A => B « Tous les A sont B » !

AA

BBA A : : ceux qui vérifient A.ceux qui vérifient A.

B B : : ceux qui vérifient B.ceux qui vérifient B.

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3434

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• DansDans

{ PRE } { PRE } programme programme { POST }{ POST }

nous avons en faitnous avons en fait

PRE => POSTPRE => POST (l’implication logique) ! (l’implication logique) !

• Rappels :Rappels :

A => B « Tous les A sont B » !A => B « Tous les A sont B » !

AA

BB « A » est une condition« A » est une conditionplus forte que « B ».plus forte que « B ».

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3535

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• DansDans

{ PRE } { PRE } programme programme { POST }{ POST }

nous avons en faitnous avons en fait

PRE => POSTPRE => POST (l’implication logique) ! (l’implication logique) !

• Rappels :Rappels :

A => B « Tous les A sont B » !A => B « Tous les A sont B » !

AA

BB « A » est une condition« A » est une conditionplus forte que « B ».plus forte que « B ».

« B » est une condition« B » est une conditionplus faible que « A ».plus faible que « A ».

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3636

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• SoitSoit { PRE } { PRE } programme programme { POST }{ POST } ! !

• Soit Soit PRE’ => PRE PRE’ => PRE !!

• Soit Soit POST => POST’ POST => POST’ !!

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3737

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• SoitSoit { PRE } { PRE } programme programme { POST }{ POST } ! !

• Soit Soit PRE’ => PRE PRE’ => PRE !!

• Soit Soit POST => POST’ POST => POST’ !!

• Donc :Donc :

PRE’ => { PRE } PRE’ => { PRE } programme programme { POST } => { POST } => POST’POST’

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3838

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• SoitSoit { PRE } { PRE } programme programme { POST }{ POST } ! !

• Soit Soit PRE’ => PRE PRE’ => PRE !!

• Soit Soit POST => POST’ POST => POST’ !!

• Donc :Donc :

PRE’ => { PRE } PRE’ => { PRE } programme programme { POST } => { POST } => POST’POST’

etet { PRE’ } { PRE’ } programme programme { POST’ }{ POST’ }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 3939

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• SoitSoit { PRE } { PRE } programme programme { POST }{ POST } ! !

• Soit Soit PRE’ => PRE PRE’ => PRE !!

• Soit Soit POST => POST’ POST => POST’ !!

• Donc :Donc :

PRE’ => { PRE } PRE’ => { PRE } programme programme { POST } => POST’{ POST } => POST’ etet { PRE’ } { PRE’ } programme programme { POST’ }{ POST’ }

Pré-condition plus forte ! Post-condition plus faible !Pré-condition plus forte ! Post-condition plus faible !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4040

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• SoitSoit { PRE } { PRE } programme programme { POST }{ POST } ! !

• Soit Soit PRE’ => PRE PRE’ => PRE !!

• Soit Soit POST => POST’ POST => POST’ !!

• Donc :Donc :

PRE’ => { PRE } PRE’ => { PRE } programme programme { POST } => POST’{ POST } => POST’ etet { PRE’ } { PRE’ } programme programme { POST’ }{ POST’ }

Pré-condition plus forte ! Post-condition plus faible !Pré-condition plus forte ! Post-condition plus faible !

• Pour un Pour un ensemble plus restreint d’argumentsensemble plus restreint d’arguments,,

le programme répond le programme répond de manière plus vaguede manière plus vague ! !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4141

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4242

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

programmeprogramme

PREPRE POSTPOST

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4343

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

programmeprogramme

PREPRE POSTPOSTxx yy

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4444

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

programmeprogramme

PREPRE POSTPOST

PRE’ => PREPRE’ => PRE

PRE’PRE’

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4545

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

programmeprogramme

PREPRE POSTPOST

PRE’ => PREPRE’ => PRE

PRE’PRE’

POST => POST’POST => POST’

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4646

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

{ PRE’ }{ PRE’ } programme programme { POST’ }{ POST’ }

programmeprogramme

PREPRE POSTPOST

PRE’ => PREPRE’ => PRE

PRE’PRE’

POST => POST’POST => POST’

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4747

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Graphiquement :Graphiquement :

{ PRE } { PRE } programme programme { POST } { POST }

{ PRE’ }{ PRE’ } programme programme { POST’ }{ POST’ }

programmeprogramme

PREPRE POSTPOST

PRE’ => PREPRE’ => PRE

PRE’PRE’

POST => POST’POST => POST’

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4848

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Le lien entre le « cahier des charges » et le Le lien entre le « cahier des charges » et le « programme » :« programme » :

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 4949

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Le lien entre le « cahier des charges » et le Le lien entre le « cahier des charges » et le « programme » :« programme » :

Cahier des chargesCahier des charges

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5050

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Le lien entre le « cahier des charges » et le Le lien entre le « cahier des charges » et le « programme » :« programme » :

programmeprogramme

Cahier des chargesCahier des charges

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5151

Logique de HoareLogique 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 !

programmeprogramme

Cahier des chargesCahier des charges

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5252

Logique de HoareLogique 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 qu’exigé !Le programme répond précisément, même plus qu’exigé !

programmeprogramme

Cahier des chargesCahier des charges

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5353

Logique de HoareLogique 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 qu’exigé !Le programme répond précisément, même plus qu’exigé !

• Le cahier des charges est l’exigence minimale ! ! !Le cahier des charges est l’exigence minimale ! ! !

programmeprogramme

Cahier des chargesCahier des charges

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5454

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5555

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

– Soient les prédicats « P » et « Q » !Soient les prédicats « P » et « Q » !

– Soit le programme « Soit le programme «  » ! » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5656

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

– Soient les prédicats « P » et « Q » !Soient les prédicats « P » et « Q » !

– Soit le programme « Soit le programme «  » ! » !

• Nous pouvons dire siNous pouvons dire si { P } { P } { Q } { Q } est vraie ou est vraie ou non !non !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5757

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

– Soient les prédicats « P » et « Q » !Soient les prédicats « P » et « Q » !

– Soit le programme « Soit le programme «  » ! » !

• Nous pouvons dire siNous pouvons dire si { P } { P } { Q } { Q } est vraie ou est vraie ou non !non !

• Plus intéressant :Plus intéressant :

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5858

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

– Soient les prédicats « P » et « Q » !Soient les prédicats « P » et « Q » !

– Soit le programme « Soit le programme «  » ! » !

• Nous pouvons dire siNous pouvons dire si { P } { P } { Q } { Q } est vraie ou non !est vraie ou non !

• Plus intéressant :Plus intéressant :

– Soit la post-condition « Q » !Soit la post-condition « Q » !

– Soit le programme « Soit le programme «  » ! » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 5959

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

– Soient les prédicats « P » et « Q » !Soient les prédicats « P » et « Q » !

– Soit le programme « Soit le programme «  » ! » !

• Nous pouvons dire siNous pouvons dire si { P } { P } { Q } { Q } est vraie ou non !est vraie ou non !

• Plus intéressant :Plus intéressant :

– Soit la post-condition « Q » !Soit la post-condition « Q » !

– Soit le programme « Soit le programme «  » ! » !

Nous avons un programmeNous avons un programmeet une définition de ce queet une définition de ce que

le programme devrait faire !le programme devrait faire !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6060

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Que ferons-nous ?Que ferons-nous ?

– Soient les prédicats « P » et « Q » !Soient les prédicats « P » et « Q » !

– Soit le programme « Soit le programme «  » ! » !

• Nous pouvons dire siNous pouvons dire si { P } { P } { Q } { Q } est vraie ou non !est vraie ou non !

• Plus intéressant :Plus intéressant :

– Soit la post-condition « Q » !Soit la post-condition « Q » !

– Soit le programme « Soit le programme «  » ! » !

• Nous pouvons calculer la plus faible conditionNous pouvons calculer la plus faible condition F F telle quetelle que { F } { F } { Q } { Q } soit vraie !soit vraie !

Nous avons un programmeNous avons un programmeet une définition de ce queet une définition de ce que

le programme devrait faire !le programme devrait faire !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6161

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme Soit la post-condition « Q » ! Soit le programme « «  » ! » !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6262

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme Soit la post-condition « Q » ! Soit le programme « «  » ! » !

QQ

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6363

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme « Soit la post-condition « Q » ! Soit le programme «  » ! » !

• Calculons la plus faible condition Calculons la plus faible condition FF telle que telle que { F } { F } { Q } { Q } !!

QQ

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6464

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme « Soit la post-condition « Q » ! Soit le programme «  » ! » !

• Calculons la plus faible condition Calculons la plus faible condition FF telle que telle que { F } { F } { Q } { Q } !!

FF QQ

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6565

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme « Soit la post-condition « Q » ! Soit le programme «  » ! » !

• Calculons la plus faible condition Calculons la plus faible condition FF telle que telle que { F } { F } { Q } { Q } !!

• Nous comparons avec le cahier des charges ! ! !Nous comparons avec le cahier des charges ! ! !

FF QQ

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6666

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme « Soit la post-condition « Q » ! Soit le programme «  » ! » !

• Calculons la plus faible condition Calculons la plus faible condition FF telle que telle que { F } { F } { Q } { Q } !!

• Nous comparons avec le cahier des charges ! ! !Nous comparons avec le cahier des charges ! ! !

Cahier des chargesCahier des charges

FFPREPRE

QQ = POST = POST

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6767

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• La démarche complète :La démarche complète :

– Soit la post-condition « Q » ! Soit le programme « Soit la post-condition « Q » ! Soit le programme «  » ! » !

• Calculons la plus faible condition Calculons la plus faible condition FF telle que telle que { F } { F } { Q } { Q } !!

• Nous comparons avec le cahier des charges ! ! !Nous comparons avec le cahier des charges ! ! !

• Et nous vérifions que PRE => Et nous vérifions que PRE => F !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Cahier des chargesCahier des charges

QQ = POST = POSTFFPREPRE

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6868

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

C O N C R E T E M E N T . . C O N C R E T E M E N T . . ..

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 6969

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skipskip

– x <x <-- e e

– if C thenif C then else else

– while C dowhile C do

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7070

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait skip le programme qui ne fait rien !rien !

– x <x <-- e e

– if C thenif C then else else

– while C dowhile C do

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7171

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait skip le programme qui ne fait rien !rien !

– x <x <-- e l’affectation ! e l’affectation !

– if C thenif C then else else

– while C dowhile C do

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7272

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait skip le programme qui ne fait rien !rien !

– x <x <-- e l’affectation ! e l’affectation !

– la séquence la séquence d’instructions !d’instructions !

– if C thenif C then else else

– while C dowhile C do

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7373

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait skip le programme qui ne fait rien !rien !

– x <x <-- e l’affectation ! e l’affectation !

– la séquence la séquence d’instructions !d’instructions !

– if C thenif C then else else la conditionnelle !la conditionnelle !

– while C dowhile C do

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7474

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait skip le programme qui ne fait rien !rien !

– x <x <-- e l’affectation ! e l’affectation !

– la séquence la séquence d’instructions !d’instructions !

– if C thenif C then else else la conditionnelle !la conditionnelle !

– while C dowhile C do la boucle ! la boucle !

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7575

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait rien !skip le programme qui ne fait rien !

– x <x <-- e l’affectation ! e l’affectation !

– la séquence d’instructions !la séquence d’instructions !

– if C thenif C then else else la conditionnelle !la conditionnelle !

– while C dowhile C do la boucle ! la boucle !

• Les conditions « C » ne font pas d’affectation !Les conditions « C » ne font pas d’affectation !

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7676

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Les programmes :Les programmes :

– skip le programme qui ne fait rien !skip le programme qui ne fait rien !

– x <x <-- e l’affectation ! e l’affectation !

– la séquence d’instructions !la séquence d’instructions !

– if C thenif C then else else la conditionnelle !la conditionnelle !

– while C dowhile C do la boucle ! la boucle !

• Les conditions « C » ne font pas d’affectation !Les conditions « C » ne font pas d’affectation !

• Toutes les autres constructions peuvent s’exprimer à l’aide de Toutes les autres constructions peuvent s’exprimer à l’aide de celles ci-dessus !celles ci-dessus !

22

11

11

22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7777

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous utilisons des règles logiques de la forme :Nous utilisons des règles logiques de la forme :

HYP . . . HYPHYP . . . HYP1 n1 n

CONCLCONCL

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7878

Logique de HoareLogique 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 enCelles-ci sont utilisées en

– MODUS PONENS : Si nous avons les hypothèses nous MODUS PONENS : Si nous avons les hypothèses nous pouvons déduire la conclusion !pouvons déduire la conclusion !

HYP . . . HYPHYP . . . HYP1 n1 n

CONCLCONCL

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 7979

Logique de HoareLogique 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 enCelles-ci sont utilisées en

– MODUS PONENS : Si nous avons les hypothèses nous pouvons MODUS PONENS : Si nous avons les hypothèses nous pouvons déduire la conclusion !déduire la conclusion !

– MODUS TOLLENS : Pour avoir la conclusion, il suffit d’avoir les MODUS TOLLENS : Pour avoir la conclusion, il suffit d’avoir les hypothèses !hypothèses !

HYP . . . HYPHYP . . . HYP1 n1 n

CONCLCONCL

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8080

Logique de HoareLogique 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 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8181

Logique de HoareLogique 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 P => Q { Q } { Q } { R } { R }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8282

Logique de HoareLogique 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 P => Q { Q } { Q } { R } { R }

{ { PP } } { R } { R }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8383

Logique de HoareLogique 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 } P => Q { Q } { R } { R }

{ P } { P } { R } { R }

Q => R Q => R { P } { P } { Q } { Q }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8484

Logique de HoareLogique 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 } P => Q { Q } { R } { R }

{ P } { P } { R } { R }

Q => R Q => R { P } { P } { Q } { Q }

{ P } { P } { { R R }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8585

Logique de HoareLogique 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 } P => Q { Q } { R } { R }

{ P } { P } { R } { R }

Q => R { P } Q => R { P } { Q } { Q }

{ P } { P } { R } { R }

{ P } { P } { Q } { Q }1 11 1 { P } { P } { Q } { Q }

2 2 2 2

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8686

Logique de HoareLogique 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 } P => Q { Q } { R } { R }

{ P } { P } { R } { R }

Q => R { P } Q => R { P } { Q } { Q }

{ P } { P } { R } { R }

{ P } { P } { Q } { Q }1 11 1 { P } { P } { Q } { Q }

2 2 2 2

{ P , { P , PP } } { Q , { Q , QQ } }1 11 12 2 2 2

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8787

Logique de HoareLogique 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 } P => Q { Q } { R } { R }

{ P } { P } { R } { R }

Q => R { P } Q => R { P } { Q } { Q }

{ P } { P } { R } { R }

{ P } { P } { Q } { Q }1 11 1 { P } { P } { Q } { Q }

2 2 2 2

{ P , { P , PP } } { Q , { Q , QQ } }1 11 12 2 2 2

ConjonctionConjonction

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8888

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme skipskip : :

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 8989

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme skipskip : :

{ P } skip { P }{ P } skip { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9090

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme ; ; : :1 21 2

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9191

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme ; ; : :

{ P } { P } { Q } { Q } { Q } { Q } { R } { R }11 22

{ P } { P } ;; { R } { R }11 22

1 21 2

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9292

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme ; ; : :

• A cause de PRE-STRENGTH et POST-WEAK, nous n’avons pas A cause de PRE-STRENGTH et POST-WEAK, nous n’avons pas besoin d’une règle de la forme :besoin d’une règle de la forme :

{ P } { P } { Q } { Q } { Q } { Q } { R } { R }11 22

{ P } { P } ;; { R } { R }11 22

{ P } { P } { L } { L } { Q } { Q } { R } { R }11 22

{ P } { P } ;; { R } { R }11 22

L => QL => Q

1 21 2

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9393

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

{ P } { P } { L } { L } { Q } { Q } { R } { R }11 22L => QL => Q

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9494

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

{ P } { P } { L } { L } { Q } { Q } { R } { R }11 22L => QL => Q

11

PPLL

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9595

22

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

{ P } { P } { L } { L } { Q } { Q } { R } { R }11 22L => QL => Q

QQ

RR11

PPLL

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9696

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9797

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

{ P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9898

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

ou ou P[ x <P[ x <-- e ] e ] est laest la

substitution de « e » à toutes les occurrencessubstitution de « e » à toutes les occurrences libres de « x » dans « P ».libres de « x » dans « P ».

{ P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 9999

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

ou ou P[ x <P[ x <-- e ] e ] est laest la

substitution de « e » à toutes les occurrencessubstitution 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 n’est pas sous la portée d’un Une occurrence de « x » dans « P » est libre si elle n’est pas sous la portée d’un quantification universel ou existentiel.quantification universel ou existentiel.

{ P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 100100

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

ou ou P[ x <P[ x <-- e ] e ] est laest la

substitution de « e » à toutes les occurrencessubstitution de « e » à toutes les occurrences libres de « x » dans « P ».libres de « x » dans « P ».

( x > 3 et ( x > 3 et x . ( x >= 17 ) ) x . ( x >= 17 ) ) [ x <[ x <-- 9 ] 9 ]

{ P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 101101

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

ou ou P[ x <P[ x <-- e ] e ] est laest la

substitution de « e » à toutes les occurrencessubstitution de « e » à toutes les occurrences libres de « x » dans « P ».libres de « x » dans « P ».

( x > 3 et ( x > 3 et x . ( x >= 17 ) ) x . ( x >= 17 ) ) [ x <[ x <-- 9 ] 9 ]= = ( ( xx > 3 et > 3 et x . ( x >= 17 ) ) x . ( x >= 17 ) ) [ x <[ x <-- 9 ] 9 ]

{ P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 102102

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme x <x <-- e e : :

ou ou P[ x <P[ x <-- e ] e ] est laest la

substitution de « e » à toutes les occurrencessubstitution de « e » à toutes les occurrences libres de « x » dans « P ».libres de « x » dans « P ».

( x > 3 et ( x > 3 et x . ( x >= 17 ) ) x . ( x >= 17 ) ) [ x <[ x <-- 9 ] 9 ]= = ( ( xx > 3 et > 3 et x . ( x >= 17 ) ) x . ( x >= 17 ) ) [ x <[ x <-- 9 ] 9 ]= = ( ( 99 > 3 et > 3 et x . ( x >= 17 ) ) x . ( x >= 17 ) )

{ P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 103103

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Interprétation de Interprétation de { P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P } : :

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 104104

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Interprétation de Interprétation de { P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P } : :

– Si « x » n’est pas libre dans « P » :Si « x » n’est pas libre dans « P » :

• la post-condition ne s’intéresse pas à « x »,la post-condition ne s’intéresse pas à « x »,

• la pré-condition la pré-condition P[ x <P[ x <--e ] = P e ] = P non plus d’ailleurs,non plus d’ailleurs,

• l’affectation l’affectation x <x <-- e e n’est pas fausse, mais inutile !n’est pas fausse, mais inutile !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 105105

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Interprétation de Interprétation de { P[ x <{ P[ x <--e ] } e ] } x <x <-- e e { P } { P } : :

– Si « x » est libre dans « 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 la pré-condition P[ x <P[ x <--e ] e ] est la formule ou nous avons des « est la formule ou nous avons des « ee » à la place des  » à la place des «« x x », »,

• l’affectation l’affectation x <x <-- e e donne la valeur « donne la valeur « ee » à «  » à « xx » et nous pouvons donc dans  » et nous pouvons donc dans P[ x <P[ x <--e ] e ] remplacer « remplacer « ee » par «  » par « x x »,»,

• c’est-à-dire considérer la post-condition c’est-à-dire considérer la post-condition P P ..

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 106106

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 107107

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( ( 11 + 34 )( 11 + 34 ) * y mod ( 1 + * y mod ( 1 + ( 11 + 34 ) ( 11 + 34 ) ) )) ) } } x <x <-- … … { ??? }{ ??? }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 108108

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( ( 11 + 34 )( 11 + 34 ) * y mod ( 1 + * y mod ( 1 + ( 11 + 34 ) ( 11 + 34 ) ) )) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- … … { ??? }{ ??? }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 109109

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( ( 11 + 34 )( 11 + 34 ) * y mod ( 1 + * y mod ( 1 + ( 11 + 34 ) ( 11 + 34 ) ) )) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { ??? }{ ??? }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 110110

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( ( 11 + 34 )( 11 + 34 ) * y mod ( 1 + * y mod ( 1 + ( 11 + 34 ) ( 11 + 34 ) ) )) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { ??? }{ ??? }

PP

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 111111

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( ( 11 + 34 )( 11 + 34 ) * y mod ( 1 + * y mod ( 1 + ( 11 + 34 ) ( 11 + 34 ) ) )) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { P }{ P }

PP

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 112112

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Illustration :Illustration :

{ { ( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) )( ( 11 + 34 ) * y mod ( 1 + ( 11 + 34 ) ) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( ( 11 + 34 )( 11 + 34 ) * y mod ( 1 + * y mod ( 1 + ( 11 + 34 ) ( 11 + 34 ) ) )) ) } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- … … { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { ??? }{ ??? }

{ { ( ( xx * y mod ( 1 + * y mod ( 1 + x x ) )) )[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { P }{ P }

{ { PP[ [ x x <<-- ( 11 + 34 ) ( 11 + 34 ) ] ] } } x <x <-- ( 11 + 34 )( 11 + 34 ) { P }{ P }

PP

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 113113

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 114114

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 115115

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] m ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 116116

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] = { x = a , m = b } m ] = { x = a , m = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 117117

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] = { x = a , m = b } m ] = { x = a , m = b }

S = R[ x <S = R[ x <-- y ] y ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 118118

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] = { x = a , m = b } m ] = { x = a , m = b }

S = R[ x <S = R[ x <-- y ] = { y = a , m = b } y ] = { y = a , m = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 119119

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] = { x = a , m = b } m ] = { x = a , m = b }

S = R[ x <S = R[ x <-- y ] = { y = a , m = b } y ] = { y = a , m = b }

P = S[ m <P = S[ m <-- x ] x ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 120120

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] = { x = a , m = b } m ] = { x = a , m = b }

S = R[ x <S = R[ x <-- y ] = { y = a , m = b } y ] = { y = a , m = b }

P = S[ m <P = S[ m <-- x ] = { y = a , x = b } x ] = { y = a , x = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 121121

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Premier exemple :Premier exemple :

• Post-condition :Post-condition :

m <- x ;m <- x ;

x <- y ;x <- y ;

y <- my <- m

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ y <R = Q[ y <-- m ] = { x = a , m = b } m ] = { x = a , m = b }

S = R[ x <S = R[ x <-- y ] = { y = a , m = b } y ] = { y = a , m = b }

P = S[ m <P = S[ m <-- x ] = { y = a , x = b } x ] = { y = a , x = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 122122

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 123123

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 124124

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] y ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 125125

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } y ] = { x – y = a , y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 126126

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

Des maths !Des maths !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 127127

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] y ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 128128

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 129129

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } = { x = a + b , y = a } y = b } = { x = a + b , y = a }

Des maths !Des maths !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 130130

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } = { x = a + b , y = a } y = b } = { x = a + b , y = a }

P = S[ x <P = S[ x <-- x + y ] x + y ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 131131

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } = { x = a + b , y = a } y = b } = { x = a + b , y = a }

P = S[ x <P = S[ x <-- x + y ] = { x + y = a + b , y = a } x + y ] = { x + y = a + b , y = a }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 132132

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } = { x = a + b , y = a } y = b } = { x = a + b , y = a }

P = S[ x <P = S[ x <-- x + y ] = { x + y = a + b , y = a } = { x = b , y = a } x + y ] = { x + y = a + b , y = a } = { x = b , y = a }

Des maths !Des maths !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 133133

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } = { x = a + b , y = a } y = b } = { x = a + b , y = a }

P = S[ x <P = S[ x <-- x + y ] = { x + y = a + b , y = a } = { x = b , y = a } x + y ] = { x + y = a + b , y = a } = { x = b , y = a }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 134134

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Deuxième exemple :Deuxième exemple :

• POST :POST :

x <- x + y ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- x x -- y ] = { x – y = a , y = b } = { x = a + b , y = b } y ] = { x – y = a , y = b } = { x = a + b , y = b }

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , x y ] = { x = a + b , x -- y = b } = { x = a + b , y = a } y = b } = { x = a + b , y = a }

P = S[ x <P = S[ x <-- x + y ] = { x + y = a + b , y = a } = { x = b , y = a } x + y ] = { x + y = a + b , y = a } = { x = b , y = a }

DépassementDépassementde capacité ? ? ?de capacité ? ? ?

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 135135

Logique de HoareLogique 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 ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b Q = { x = a , y = b , a , a DD , b , b DD }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 136136

Logique de HoareLogique 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 ;x <- x + y ;

y <- x - y ;y <- x - y ;

x <- x - yx <- x - y

Q = { x = a , y = b Q = { x = a , y = b , a , a DD , b , b DD }}

R = Q[ x <R = Q[ x <-- x x -- y ] = { x = a + b , y = b y ] = { x = a + b , y = b , a , a DD , b , b DD , a + b , a + b DD }}

S = R[ y <S = R[ y <-- x x -- y ] = { x = a + b , y = a y ] = { x = a + b , y = a , a , a DD , b , b DD , a + b , a + b DD }}

P = S[ x <P = S[ x <-- x + y ] = { x = b , y = a x + y ] = { x = b , y = a , a , a DD , b , b DD , a + b , a + b DD }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 137137

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 138138

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 139139

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] x ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 140140

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } x ] = { y – x = a , y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 141141

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

Des maths !Des maths !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 142142

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] y ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 143143

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } y = b }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 144144

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } = { x = b – a , y = a } y = b } = { x = b – a , y = a }

Des maths !Des maths !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 145145

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } = { x = b – a , y = a } y = b } = { x = b – a , y = a }

P = S[ x <P = S[ x <-- x x -- y ] y ]

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 146146

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } = { x = b – a , y = a } y = b } = { x = b – a , y = a }

P = S[ x <P = S[ x <-- x x -- y ] = { x y ] = { x -- y = b – a , y = a } y = b – a , y = a }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 147147

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } = { x = b – a , y = a } y = b } = { x = b – a , y = a }

P = S[ x <P = S[ x <-- x x -- y ] = { x y ] = { x -- y = b – a , y = a } = { x = b , y = a } y = b – a , y = a } = { x = b , y = a }

Des maths !Des maths !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 148148

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } = { x = b – a , y = a } y = b } = { x = b – a , y = a }

P = S[ x <P = S[ x <-- x x -- y ] = { x y ] = { x -- y = b – a , y = a } = { x = b , y = a } y = b – a , y = a } = { x = b , y = a }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 149149

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Troisième exemple :Troisième exemple :

• POST :POST :

x <- x - y ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b }Q = { x = a , y = b }

R = Q[ x <R = Q[ x <-- y y -- x ] = { y – x = a , y = b } = { x = b x ] = { y – x = a , y = b } = { x = b -- a , y = b } a , y = b }

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , x y ] = { x = b – a , x ++ y = b } = { x = b – a , y = a } y = b } = { x = b – a , y = a }

P = S[ x <P = S[ x <-- x x -- y ] = { x y ] = { x -- y = b – a , y = a } = { x = b , y = a } y = b – a , y = a } = { x = b , y = a }

DépassementDépassementde capacité ? ? ?de capacité ? ? ?

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 150150

Logique de HoareLogique 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 ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b Q = { x = a , y = b , a , a DD , b , b DD }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 151151

Logique de HoareLogique 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 ;x <- x - y ;

y <- x + y ;y <- x + y ;

x <- y - xx <- y - x

Q = { x = a , y = b Q = { x = a , y = b , a , a DD , b , b DD }}

R = Q[ x <R = Q[ x <-- y y -- x ] = { x = b x ] = { x = b -- a , y = b a , y = b , a , a DD , b , b DD , b , b -- a a DD }}

S = R[ y <S = R[ y <-- x x ++ y ] = { x = b – a , y = a y ] = { x = b – a , y = a , a , a DD , b , b DD , b , b -- a a DD }}

P = S[ x <P = S[ x <-- x x -- y ] = { x = b , y = a y ] = { x = b , y = a , a , a DD , b , b DD , b , b -- a a DD }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 152152

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme if C then if C then else else : :

2211

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 153153

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme if C then if C then else else : :

{ P ,{ P , C } C } { Q } { Q }

{ P } if C then { P } if C then else else { Q } { Q }

2211

1 21 2

22{ P , C } { P , C } { Q } { Q }11

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 154154

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Règle pour le programme Règle pour le programme if C then if C then else else : :

• Mais, dans la pratique, nous n’aurons pas « P » :Mais, dans la pratique, nous n’aurons pas « P » :

{ P ,{ P , T } T } { Q } { Q }

{ P } if C then { P } if C then else else { Q } { Q }

2211

1 21 2

22{ P , T } { P , T } { Q } { Q }11

{ ??? ,{ ??? , C } C } { Q } { Q }

{ ??? } if C then { ??? } if C then else else { Q } { Q }1 21 2

22{ ??? , C } { ??? , C } { Q } { Q }11

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 155155

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous allons déduire les pré-conditions Nous allons déduire les pré-conditions FF et et FF à partir de à partir de et et et de et de Q Q :: 2211

11 22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 156156

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous allons déduire les pré-conditions Nous allons déduire les pré-conditions FF et et FF à partir de à partir de et et et de et de Q Q ::

{ F }{ F } { Q } { Q }

2211

22{ F }{ F } { Q } { Q }1111 22

11 22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 157157

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous allons déduire les pré-conditions Nous allons déduire les pré-conditions FF et et FF à partir de à partir de et et et de et de Q Q ::

• Ensuite, il s’agira de trouver Ensuite, il s’agira de trouver PP tel que : tel que :

{ F }{ F } { Q } { Q }

2211

22{ F }{ F } { Q } { Q }11

P ,P , C => C => FF22P , C =>P , C => FF11

11 22

11 22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 158158

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous allons déduire les pré-conditions Nous allons déduire les pré-conditions FF et et FF à partir de à partir de et et et et de de Q Q ::

• Ensuite, il s’agira de trouver Ensuite, il s’agira de trouver PP tel que : tel que :

• Mais, comment faire ? ? ? ? ?Mais, comment faire ? ? ? ? ?

{ F }{ F } { Q } { Q }

2211

22{ F }{ F } { Q } { Q }11

P ,P , C => C => FF22P , C =>P , C => FF11

11 22

11 22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 159159

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous allons déduire les pré-conditions Nous allons déduire les pré-conditions FF et et FF à partir de à partir de et et et de et de Q Q ::

• Ensuite, il s’agira de trouver Ensuite, il s’agira de trouver PP tel que : 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 }{ F } { Q } { Q }

2211

22{ F }{ F } { Q } { Q }11

P ,P , C => C => FF22P , C =>P , C => FF11

11 22

11 22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 160160

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si nous ne trouvons pas Si nous ne trouvons pas PP nous pouvons toujours nous pouvons toujours faire une discussion par cas et partir de :faire une discussion par cas et partir de :

{ ??? } if C then { ??? } if C then else else { Q } { Q }1 21 2

{ ??? } { ??? } { Q } { Q }11

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 161161

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si nous ne trouvons pas Si nous ne trouvons pas PP nous pouvons toujours nous pouvons toujours faire une discussion par cas et partir de :faire une discussion par cas et partir de :

• pour chercher pour chercher F F : :

{ ??? } if C then { ??? } if C then else else { Q } { Q }1 21 2

{ ??? } { ??? } { Q } { Q }11

11

{ ??? } if C then { ??? } if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }1111

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 162162

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Si nous ne trouvons pas Si nous ne trouvons pas PP nous pouvons toujours faire une discussion par cas et partir nous pouvons toujours faire une discussion par cas et partir de :de :

• pour chercher pour chercher F 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 { ??? } if C then else else { Q } { Q }1 21 2

{ ??? } { ??? } { Q } { Q }11

11

{ ??? } if C then { ??? } if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }1111

{ F , C }{ F , C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }1111

11

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 163163

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous obtenons deux cas :Nous obtenons deux cas :

{ F , C }{ F , C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }1111

11

Test vrai !Test vrai !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 164164

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous obtenons deux cas :Nous obtenons deux cas :

{ F , C }{ F , C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }1111

11

Test vrai !Test vrai !

{ F , { F , C }C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }2222

22

Test faux !Test faux !

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 165165

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Nous obtenons deux cas :Nous obtenons deux cas :

• que nous fusionnons ensuite :que nous fusionnons ensuite :

{ F , C }{ F , C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }1111

11

Test vrai !Test vrai !

{ F , { F , C }C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }2222

22

Test faux !Test faux !

{ F , C } ou { F , { F , C } ou { F , C }C } if C then if C then else else { Q } { Q }1 21 2

{ F }{ F } { Q } { Q }2222

2211

{ F }{ F } { Q } { Q }1111

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 166166

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un premier exemple :Un premier exemple :

if ( a < 0 )if ( a < 0 )thenthen

x <- x + 7x <- x + 7

elseelse

x = x – 3x = x – 3

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 167167

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un premier exemple :Un premier exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- x + 7x <- x + 7

elseelse

x = x – 3x = x – 3

Q = { x = a + 8Q = { x = a + 8 }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 168168

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un premier exemple :Un premier exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- x + 7x <- x + 7

elseelse

x = x – 3x = x – 3

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 169169

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un premier exemple :Un premier exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- x + 7x <- x + 7

elseelse

x = x – 3x = x – 3

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

F = { x = a + 11 }F = { x = a + 11 }22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 170170

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un premier exemple :Un premier exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- x + 7x <- x + 7

elseelse

x = x – 3x = x – 3

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

F = { x = a + 11 }F = { x = a + 11 }22

F = { x = a + 1 }F = { x = a + 1 }11

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 171171

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un premier exemple :Un premier exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- x + 7x <- x + 7

elseelse

x = x – 3x = x – 3

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

Q = { x = a + 8Q = { x = a + 8 }}

F = { x = a + 11 }F = { x = a + 11 }22

F = { x = a + 1 }F = { x = a + 1 }11

{ x = a + 1 , a < 0 } { x = a + 1 , a < 0 } ouou { x = a + 11 , a >= 0 }{ x = a + 11 , a >= 0 }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 172172

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 173173

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

Q = { x = | a |Q = { x = | a | }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 174174

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 175175

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

F = { a >= 0 }F = { a >= 0 }22

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 176176

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

F = { a >= 0 }F = { a >= 0 }22

F = { a < 0 }F = { a < 0 }11

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 177177

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

F = { a >= 0 }F = { a >= 0 }22

F = { a < 0 }F = { a < 0 }11

{ a < 0 } { a < 0 } ouou { a >= 0 }{ a >= 0 }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 178178

Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------

• Un second exemple :Un second exemple :

• POST : POST :

if ( a < 0 )if ( a < 0 )thenthen

x <- -ax <- -a

elseelse

x = ax = a

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

Q = { x = | a |Q = { x = | a | }}

F = { a >= 0 }F = { a >= 0 }22

F = { a < 0 }F = { a < 0 }11

{ a < 0 } { a < 0 } ouou { a >= 0 } { a >= 0 } = = { VRAI }{ VRAI }

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 179179

SynthèseSynthèse----------------------------------------------------------------------------------------------------------------------------------

Logique de Hoare (début) :Logique de Hoare (début) :

Principes etPrincipes et

constructions élémentaires.constructions élémentaires.

12 décembre 200612 décembre 2006 Cours d'algorithmique 9 - IntranetCours d'algorithmique 9 - Intranet 180180

m E r C i e Tm E r C i e Tb O n N e J o U r N é b O n N e J o U r N é

E ! ! !E ! ! !

n ‘ O u B l I e Z p A s D en ‘ O u B l I e Z p A s D ep R é P a R e R v O sp R é P a R e R v O s

T D ! ! !T D ! ! !