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

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

Embed Size (px)

Citation preview

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

Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1119 décembre 200619 décembre 2006

Cours d’AlgorithmiqueCours d’Algorithmique

Logique de Hoare (fin) :Logique de Hoare (fin) :

Les boucles etLes boucles et

les invariants.les invariants.

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / 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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 33

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

• Rappel :Rappel :

{ 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..

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 44

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 « «  » ! » !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 55

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 66

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 77

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 88

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 99

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1010

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1111

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 => QP => Q { { QQ } } { R } { R }

{ { PP } } { R } { R }

Q => RQ => R { P } { P } { { QQ } }

{ P } { P } { { RR } }

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

2 2 2 2

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1212

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1313

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

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

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1414

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1515

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 }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1616

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

• Règles pour le programme Règles 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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1717

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

• Règles pour le programme Règles 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

{ F }{ F } { Q } { Q }1111

{ 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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1818

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

• Toutes ces règles sont complètement automatisables !Toutes ces règles sont complètement automatisables !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1919

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

W H I L EW H I L E

e t l e se t l e s

I N V A R I A N T SI N V A R I A N T SD ED E

B O U C L EB O U C L E

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2020

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

• L’exemple qui nous sert à illustrer la notion L’exemple qui nous sert à illustrer la notion d’invariant :d’invariant :

– PRE : V , D PRE : V , D N N

– POST: POST: Q , R Q , R N N

telles V = Q * D + R telles V = Q * D + R et R < D .et R < D .

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

II

II

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2121

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

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2222

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2323

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 V = 17 , D = 5 , Q = 0, Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2424

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17, R = 17

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2525

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2626

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , V = 17 , D = 5 , Q = 1Q = 1 , R = 17 , R = 17

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2727

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , V = 17 , D = 5 , Q = 1 , R = 12R = 12

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2828

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2929

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , V = 17 , D = 5 , Q = 2Q = 2 , R = 12 , R = 12

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3030

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , V = 17 , D = 5 , Q = 2 , R = 7R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3131

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3232

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3333

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3434

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3535

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3636

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3737

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3838

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3939

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , V = 17 , D = 5 , Q = 3Q = 3 , R = 7 , R = 7

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4040

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , V = 17 , D = 5 , Q = 3 , R = 2R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4141

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4242

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4343

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4444

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4545

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4646

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4747

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

Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5

V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0

Q <- 0 ;Q <- 0 ;

R <- V ;R <- V ;

while R >= Dwhile R >= D

Q <- Q + 1 ;Q <- Q + 1 ;

R <- R - DR <- R - D

V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17

Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?

OUI : V = Q * D + ROUI : V = Q * D + R

V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7

V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7

V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2

A la fin :A la fin :

V = Q * D + RV = Q * D + Retet

R < DR < D

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4848

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

• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.

• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours reste toujours vérifiée.vérifiée.

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4949

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

• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.

• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours reste toujours vérifiée.vérifiée.

• C’est ce qu’on appelle un « invariant » !C’est ce qu’on appelle un « invariant » !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5050

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

• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.

• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours reste toujours vérifiée.vérifiée.

• C’est ce qu’on appelle un « invariant » !C’est ce qu’on appelle un « invariant » !

• Un invariant est un prédicat qui :Un invariant est un prédicat qui :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5151

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

• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.

• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours reste toujours vérifiée.vérifiée.

• C’est ce qu’on appelle un « invariant » !C’est ce qu’on appelle un « invariant » !

• Un invariant est un prédicat qui :Un invariant est un prédicat qui :

– est vrai à chaque début de boucle,est vrai à chaque début de boucle,

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5252

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

• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.

• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours reste toujours vérifiée.vérifiée.

• C’est ce qu’on appelle un « invariant » !C’est ce qu’on appelle un « invariant » !

• Un invariant est un prédicat qui :Un invariant est un prédicat qui :

– est vrai à chaque début de boucle,est vrai à chaque début de boucle,

– et à chaque fin de boucle,et à chaque fin de boucle,

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5353

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

• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.

• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours vérifiée. reste toujours vérifiée.

• C’est ce qu’on appelle un « invariant » !C’est ce qu’on appelle un « invariant » !

• Un invariant est un prédicat qui :Un invariant est un prédicat qui :

– est vrai à chaque début de boucle,est vrai à chaque début de boucle,

– et à chaque fin de boucle,et à chaque fin de boucle,

– c’est-à-dire début de la boucle suivante.c’est-à-dire début de la boucle suivante. (Les tests ne font pas d’affectation !)(Les tests ne font pas d’affectation !)

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5454

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

• Pour écrire un corps de boucle, il faut connaître Pour écrire un corps de boucle, il faut connaître l’invariant de la boucle !l’invariant de la boucle !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5555

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

• Pour écrire un corps de boucle, il faut connaître Pour écrire un corps de boucle, il faut connaître l’invariant de la boucle !l’invariant de la boucle !

• Votre code sera exécuté par le « i  » tour de Votre code sera exécuté par le « i  » tour de boucle, quel que soit la valeur de « i ».boucle, quel que soit la valeur de « i ».

ee

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5656

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

• Pour écrire un corps de boucle, il faut connaître Pour écrire un corps de boucle, il faut connaître l’invariant de la boucle !l’invariant de la boucle !

• Votre code sera exécuté par le « i  » tour de Votre code sera exécuté par le « i  » tour de boucle, quel que soit la valeur de « i ».boucle, quel que soit la valeur de « i ».

• Pour savoir ce que vous devez faire au « i  » tour Pour savoir ce que vous devez faire au « i  » tour de boucle, vous devez vous souvenir de ce que de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. vous avez fait pendant les « i – 1 » premiers tours.

ee

ee

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5757

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

• Pour écrire un corps de boucle, il faut connaître Pour écrire un corps de boucle, il faut connaître l’invariant de la boucle !l’invariant de la boucle !

• Votre code sera exécuté par le « i  » tour de Votre code sera exécuté par le « i  » tour de boucle, quel que soit la valeur de « i ».boucle, quel que soit la valeur de « i ».

• Pour savoir ce que vous devez faire au « i  » tour Pour savoir ce que vous devez faire au « i  » tour de boucle, vous devez vous souvenir de ce que de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. vous avez fait pendant les « i – 1 » premiers tours.

• Ceci revient à connaître « l’invariant » !Ceci revient à connaître « l’invariant » !

ee

ee

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5858

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

• Quel est l’invariant ?Quel est l’invariant ?

s <- 0 ;s <- 0 ;i <- 1 ;i <- 1 ;

while ( i <= n ) do while ( i <= n ) do

s <- s + i ;s <- s + i ; i <- i + 1 i <- i + 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 5959

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

• Quel est l’invariant ?Quel est l’invariant ?

• Avant le « i  » tour de boucle, nous avons fait les tours de Avant le « i  » tour de boucle, nous avons fait les tours de boucleboucle de « 1 » à « i – de « 1 » à « i – 1 ».1 ».

s <- 0 ;s <- 0 ;i <- 1 ;i <- 1 ;

while ( i <= n ) do while ( i <= n ) do

s <- s + i ;s <- s + i ; i <- i + 1 i <- i + 1

ee

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6060

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

• Quel est l’invariant ?Quel est l’invariant ?

• Avant le « i  » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ».Avant le « i  » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ».

• Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ».Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ».

s <- 0 ;s <- 0 ;i <- 1 ;i <- 1 ;

while ( i <= n ) do while ( i <= n ) do

s <- s + i ;s <- s + i ; i <- i + 1 i <- i + 1

ee

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6161

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

• Quel est l’invariant ?Quel est l’invariant ?

• Avant le « i  » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ».Avant le « i  » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ».

• Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ».Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ».

• Invariant :Invariant : s = s = j j

s <- 0 ;s <- 0 ;i <- 1 ;i <- 1 ;

while ( i <= n ) do while ( i <= n ) do

s <- s + i ;s <- s + i ; i <- i + 1 i <- i + 1

ee

j = 1j = 1

i – 1i – 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6262

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

• Règle pour le programme Règle pour le programme while C dowhile C do : :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6363

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

• Règle pour le programme Règle pour le programme while C dowhile C do : :

{ I }{ I } while C dowhile C do { I{ I , , C } C }

{ I , C }{ I , C } { I }{ I }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6464

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

• Règle pour le programme Règle pour le programme while C dowhile C do : :

• Nous dirons que « I » est l’invariant !Nous dirons que « I » est l’invariant !

{ I }{ I } while C dowhile C do { I{ I , , C } C }

{ I , C }{ I , C } { I }{ I }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6565

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

• Règle pour le programme Règle pour le programme while C dowhile C do : :

• Nous dirons que « I » est l’invariant !Nous dirons que « I » est l’invariant !

• La condition La condition { I , C }{ I , C } { I } { I } vérifie que « I » est bien invariant ! ! !vérifie que « I » est bien invariant ! ! !

{ I }{ I } while C dowhile C do { I{ I , , C } C }

{ I , C }{ I , C } { I }{ I }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6666

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

• Règle pour le programme Règle pour le programme while C dowhile C do : :

• Nous dirons que « I » est l’invariant !Nous dirons que « I » est l’invariant !

• La condition La condition { I , C }{ I , C } { I } { I } vérifie que « I » est bien invariant ! ! !vérifie que « I » est bien invariant ! ! !

• La post-condition La post-condition { I{ I , , C } C } est évidente !est évidente !

{ I }{ I } while C dowhile C do { I{ I , , C } C }

{ I , C }{ I , C } { I }{ I }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6767

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

• Règle pour le programme Règle pour le programme while C dowhile C do : :

• Nous dirons que « I » est l’invariant !Nous dirons que « I » est l’invariant !

• La condition La condition { I , C }{ I , C } { I } { I } vérifie que « I » est bien invariant ! ! !vérifie que « I » est bien invariant ! ! !

• La post-condition La post-condition { I{ I , , C } C } est évidente !est évidente !

• Il suffit alors que Il suffit alors que { I }{ I } soit vrai au début ! soit vrai au début !

{ I }{ I } while C dowhile C do { I{ I , , C } C }

{ I , C }{ I , C } { I }{ I }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6868

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

• Dans la pratique, nous avons une post-condition Dans la pratique, nous avons une post-condition QQ et le code et le code while C dowhile C do : :

{ ??? }{ ??? } while C dowhile C do { Q }{ Q }

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 6969

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

• Dans la pratique, nous avons une post-condition Dans la pratique, nous avons une post-condition QQ et le code et le code while C dowhile C do : :

• Quel prédicat « I » faut-il choisir comme invariant ?Quel prédicat « I » faut-il choisir comme invariant ?

{ ??? }{ ??? } while C dowhile C do { Q }{ Q }

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7070

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

• Dans la pratique, nous avons une post-condition Dans la pratique, nous avons une post-condition QQ et le code et le code while C dowhile C do : :

• Quel prédicat « I » faut-il choisir comme invariant ?Quel prédicat « I » faut-il choisir comme invariant ?

• C’est l’utilisateur qui doit faire une proposition !C’est l’utilisateur qui doit faire une proposition !

{ ??? }{ ??? } while C dowhile C do { Q }{ Q }

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7171

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

• Dans la pratique, nous avons une post-condition Dans la pratique, nous avons une post-condition QQ et le code et le code while C dowhile C do : :

• Quel prédicat « I » faut-il choisir comme invariant ?Quel prédicat « I » faut-il choisir comme invariant ?

• C’est l’utilisateur qui doit faire une proposition !C’est l’utilisateur qui doit faire une proposition !

• Nouvelle syntaxe :Nouvelle syntaxe : while C do while C do inv Iinv I

{ ??? }{ ??? } while C dowhile C do { Q }{ Q }

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

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7272

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

{ . . . }{ . . . } while C dowhile C do inv I inv I { Q }{ Q }

. . .. . .. . .. . . . . .. . .

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7373

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Nous devons prouver que I , Nous devons prouver que I , C => Q ! C => Q !

. . .. . .. . .. . . I , I , C => Q C => Q

{ . . . }{ . . . } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7474

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Nous devons prouver que I , Nous devons prouver que I , C => Q ! C => Q !

• Nous calculons la pré-condition « F » de { F } Nous calculons la pré-condition « F » de { F } { I } ! { I } !

{ F } { F } { I } { I }. . .. . . I , I , C => Q C => Q

{ . . . }{ . . . } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7575

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Nous devons prouver que I , Nous devons prouver que I , C => Q ! C => Q !

• Nous calculons la pré-condition « F » de { F } Nous calculons la pré-condition « F » de { F } { I } ! { I } !

• Nous prouvons que I , C => F !Nous prouvons que I , C => F !

{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q

{ . . . }{ . . . } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7676

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Nous devons prouver que I , Nous devons prouver que I , C => Q ! C => Q !

• Nous calculons la pré-condition « F » de { F } Nous calculons la pré-condition « F » de { F } { I } ! { I } !

• Nous prouvons que I , C => F !Nous prouvons que I , C => F !

• A ce moment, nous connaissons la pré-condition « I » !A ce moment, nous connaissons la pré-condition « I » !

{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q

{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7777

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Attention, il y a deux obligations de preuve !Attention, il y a deux obligations de preuve !

{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q

{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7878

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Attention, il y a deux obligations de preuve !Attention, il y a deux obligations de preuve !

• Elles sont semi-automatisables.Elles sont semi-automatisables.

{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q

{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 7979

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Attention, il y a deux obligations de preuve !Attention, il y a deux obligations de preuve !

• Elles sont semi-automatisables.Elles sont semi-automatisables.

• Un prouveur peut ne pas trouver la preuve !Un prouveur peut ne pas trouver la preuve !

{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q

{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8080

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

• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::

• Attention, il y a deux obligations de preuve !Attention, il y a deux obligations de preuve !

• Elles sont semi-automatisables.Elles sont semi-automatisables.

• Un prouveur peut ne pas trouver la preuve !Un prouveur peut ne pas trouver la preuve !

• Un prouveur ne saura jamais dire si elle n’existe pas ! ! !Un prouveur ne saura jamais dire si elle n’existe pas ! ! !

{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q

{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8181

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

U NU N

P R E M I E RP R E M I E R

E X E M P L EE X E M P L E

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8282

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

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8383

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8484

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8585

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

CC

CC

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8686

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8787

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8888

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

. . .. . .. . .. . . I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 8989

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

{ F } { F } { I } { I }. . .. . . I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9090

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9191

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9292

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9393

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * ( Q + 1 ) + R – D , 0 <= R – D }F = { V = D * ( Q + 1 ) + R – D , 0 <= R – D }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9494

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

Après simplification !Après simplification !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9595

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

{ F } { F } { I } { I }. . .. . . I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9696

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

{ F } { F } { I } { I } I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

I , C => FI , C => F

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9797

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

{ F } { F } { I } { I } I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

II , , CC => F => F

{ V = D * Q + R , 0 <= R } { V = D * Q + R , 0 <= R } et et { R >= D }{ R >= D }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9898

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

{ F } { F } { I } { I } I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

II , , CC => => FF

{ V = D * Q + R , 0 <= R } { V = D * Q + R , 0 <= R } et et { R >= D }{ R >= D }

??????=>=>

{ V = D * Q + R , D <= R }{ V = D * Q + R , D <= R }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 9999

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

{ F } { F } { I } { I } I , I , C => Q C => Q

{ I ?? }{ I ?? } while C dowhile C do inv I inv I { Q }{ Q }

II , , CC => => FF

{ V = D * Q + R , 0 <= R } { V = D * Q + R , 0 <= R } et et { R >= D }{ R >= D }

??????=>=>

{ V = D * Q + R , D <= R }{ V = D * Q + R , D <= R }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 100100

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

{ F } { F } { I } { I } I , I , C => Q C => Q

{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }

I , C => FI , C => F

{ V = D * Q + R , 0 <= R } { V = D * Q + R , 0 <= R } et et { R >= D }{ R >= D }

!!!!!!!!!!!!=>=>

{ V = D * Q + R , D <= R }{ V = D * Q + R , D <= R }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 101101

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

I = { V = D * Q + R , 0 <= R }I = { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , C => FI , C => F

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 102102

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

I = { V = D * Q + R , 0 <= R }I = { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , C => FI , C => F

{ V = D * 0 + R , 0 <= R }{ V = D * 0 + R , 0 <= R }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 103103

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

I = { V = D * Q + R , 0 <= R }I = { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , C => FI , C => F

{ V = D * 0 + R , 0 <= R }{ V = D * 0 + R , 0 <= R }

{ V = D * 0 + V , 0 <= V }{ V = D * 0 + V , 0 <= V }• PRE :PRE :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 104104

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

I = { V = D * Q + R , 0 <= R }I = { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , C => FI , C => F

{ V = D * 0 + R , 0 <= R }{ V = D * 0 + R , 0 <= R }

{ V = D * 0 + V , 0 <= V } = { V >= 0 }{ V = D * 0 + V , 0 <= V } = { V >= 0 }• PRE :PRE :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 105105

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

• POST :POST :

R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;

while ( R >= D ) dowhile ( R >= D ) do

Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D

inv Iinv I

Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }

= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }

{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }

{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }

I = { V = D * Q + R , 0 <= R }I = { V = D * Q + R , 0 <= R }

Sans problème :Sans problème :

I , C => FI , C => F

{ V = D * 0 + R , 0 <= R }{ V = D * 0 + R , 0 <= R }

{ V = D * 0 + V , 0 <= V } = { V >= 0 }{ V = D * 0 + V , 0 <= V } = { V >= 0 }• PRE :PRE :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 106106

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

U NU N

D E U X I E M ED E U X I E M E

E X E M P L EE X E M P L E

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 107107

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 108108

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) }Q = { x = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 109109

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 110110

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 111111

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

CC

CC

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 112112

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 113113

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 114114

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 115115

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 116116

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) }

{ pgcd( m , y ) = pgcd( a , b ) }{ pgcd( m , y ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 117117

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

Sans problème :Sans problème :

I , I , C => Q C => Q

F ? ? ?F ? ? ?

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) }

{ pgcd( m , y ) = pgcd( a , b ) }{ pgcd( m , y ) = pgcd( a , b ) }

{ pgcd( m , x%y ) = pgcd( a , b ) }{ pgcd( m , x%y ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 118118

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) }

{ pgcd( m , y ) = pgcd( a , b ) }{ pgcd( m , y ) = pgcd( a , b ) }

{ pgcd( m , x%y ) = pgcd( a , b ) }{ pgcd( m , x%y ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 119119

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

II , , C C => => FF

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 120120

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) } et et { y <> 0 }{ y <> 0 }

??????=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 121121

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) } et et { y <> 0 }{ y <> 0 }

??????=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 122122

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) } et et { y <> 0 }{ y <> 0 }

??????=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 123123

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) } et et { y <> 0 }{ y <> 0 }

??????=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

? ? ?? ? ?

Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 124124

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) } et et { y <> 0 }{ y <> 0 }

??????=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

? ? ?? ? ?

Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )

Nous devons renforcer l’invariant :Nous devons renforcer l’invariant :

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 125125

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 126126

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 127127

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 128128

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 129129

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) , y >= x % y }F = { pgcd( y , x % y ) = pgcd( a , b ) , y >= x % y }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 130130

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) , y >= x % y }F = { pgcd( y , x % y ) = pgcd( a , b ) , y >= x % y }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

OK !OK !

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 131131

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 132132

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y } et et { y <> 0 }{ y <> 0 }

!!!!!!!!!!!!=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 133133

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

II , , C C => => FF

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y } et et { y <> 0 }{ y <> 0 }

!!!!!!!!!!!!=>=>

{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }

Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 134134

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

Sans problème :Sans problème :

I , C => FI , C => F

I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 135135

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

Sans problème :Sans problème :

I , C => FI , C => F

I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ pgcd( a , b ) = pgcd( a , b ) , a >= b }{ pgcd( a , b ) = pgcd( a , b ) , a >= b }• PRE :PRE :

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 136136

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

Sans problème :Sans problème :

I , C => FI , C => F

I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ pgcd( a , b ) = pgcd( a , b ) , a >= b } = { a >= b }{ pgcd( a , b ) = pgcd( a , b ) , a >= b } = { a >= b }• PRE :PRE :

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 137137

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

x <- a ;x <- a ;y <- b ;y <- b ;

while ( y <> 0 ) dowhile ( y <> 0 ) do

m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m

inv Iinv I

• POST :POST :

Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }

Sans problème :Sans problème :

I , I , C => Q C => Q

F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }

{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ . . . , m >= y }{ . . . , m >= y }

{ . . . , m >= x % y }{ . . . , m >= x % y }

Sans problème :Sans problème :

I , C => FI , C => F

I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }

{ pgcd( a , b ) = pgcd( a , b ) , a >= b } = { a >= b }{ pgcd( a , b ) = pgcd( a , b ) , a >= b } = { a >= b }• PRE :PRE :

= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 138138

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

U NU N

T R O I S I E M ET R O I S I E M E

E X E M P L EE X E M P L E

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 139139

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 140140

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 141141

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

Q = { s = Q = { s = i } i } = { s = = { s = i , c = n + 1 } i , c = n + 1 }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 142142

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 143143

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

CC

CC

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 144144

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 145145

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c + 1 <= n + 1 , s + c = F = { c + 1 <= n + 1 , s + c = i } i }

I = . . .I = . . .

i = 1i = 1

c + 1– 1c + 1– 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 146146

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s + c = F = { c <= n , s + c = i } i }

I = . . .I = . . .

i = 1i = 1

cc

Après simplification !Après simplification !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 147147

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s = F = { c <= n , s = i } i }

I = . . .I = . . .

i = 1i = 1

c – 1c – 1

Après simplification !Après simplification !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 148148

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s = F = { c <= n , s = i } i }

I = . . .I = . . .

i = 1i = 1

c – 1c – 1Sans problème :Sans problème :

I , C => FI , C => F

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 149149

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s = F = { c <= n , s = i } i }

I = . . .I = . . .

i = 1i = 1

c – 1c – 1Sans problème :Sans problème :

I , C => FI , C => F

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 150150

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s = F = { c <= n , s = i } i }

I = . . .I = . . .

i = 1i = 1

c – 1c – 1Sans problème :Sans problème :

I , C => FI , C => F

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

1 – 11 – 1{ 1 <= n + 1 , 0 = { 1 <= n + 1 , 0 = i } i }• PRE :PRE :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 151151

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s = F = { c <= n , s = i } i }

I = . . .I = . . .

i = 1i = 1

c – 1c – 1Sans problème :Sans problème :

I , C => FI , C => F

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

1 – 11 – 1{ 1 <= n + 1 , 0 = { 1 <= n + 1 , 0 = i } i } = { n >= 0 } = { n >= 0 }• PRE :PRE :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 152152

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

s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1

inv Iinv I

• POST :POST :

i = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

Sans problème :Sans problème :

I , I , C => Q C => Q

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

i = 1i = 1

c – 1c – 1

F = { c <= n , s = F = { c <= n , s = i } i }

I = . . .I = . . .

i = 1i = 1

c – 1c – 1Sans problème :Sans problème :

I , C => FI , C => F

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

1 – 11 – 1{ 1 <= n + 1 , 0 = { 1 <= n + 1 , 0 = i } i } = { n >= 0 } = { n >= 0 }• PRE :PRE :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 153153

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

• Une autre initialisation :Une autre initialisation :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 154154

• POST :POST :

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

s <- s <- 11 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

• Une autre initialisation :Une autre initialisation :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 155155

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

s <- s <- 11 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 1 1 = = i } i }• PRE :PRE :

• Une autre initialisation :Une autre initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 156156

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

s <- s <- 11 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 1 1 = = i } i } = { n >= 1 } = { n >= 1 }• PRE :PRE :

• Une autre initialisation :Une autre initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 157157

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

s <- s <- 11 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 1 1 = = i } i } = { n >= 1 } = { n >= 1 }• PRE :PRE :

• Une autre initialisation :Une autre initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 158158

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

• Une mauvaise initialisation :Une mauvaise initialisation :

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 159159

• POST :POST :

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

• Une mauvaise initialisation :Une mauvaise initialisation :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 160160

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 161161

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 }}• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 162162

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { FAUX } = { FAUX }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 163163

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { FAUX } = { FAUX }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 164164

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { FAUX } = { FAUX }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 165165

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { n >= 1 }= { n >= 1 }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 166166

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { n >= 1 }= { n >= 1 }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 167167

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

s <- s <- 66 ; ;c <- c <- 2 2 ;;

while ( c <= n ) dowhile ( c <= n ) do

. . .. . .

i = 1i = 1

c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }

i = 1i = 1

22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { n >= 3 }= { n >= 3 }• PRE :PRE :

• Une mauvaise initialisation :Une mauvaise initialisation :

• POST :POST :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 168168

• POST :POST :

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

• Un mauvais invariant :Un mauvais invariant :

Q = { s = Q = { s = i } i }i = 1i = 1

nn

. . .. . .

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c s <- s + c + 3+ 3 ; ; c <- c + 1c <- c + 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 169169

• POST :POST :

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

• Un mauvais invariant :Un mauvais invariant :

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

. . .. . .

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1

inv Iinv Ii = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

i = 1i = 1

c – 1c – 1

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 170170

• POST :POST :

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

• Un mauvais invariant :Un mauvais invariant :

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

. . .. . .

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1

inv Iinv Ii = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

i = 1i = 1

c – 1c – 1

I = . . .I = . . .

F = { c + 1 <= n + 1 , s + c + 3 = F = { c + 1 <= n + 1 , s + c + 3 = i } i }i = 1i = 1

c + 1– 1c + 1– 1

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 171171

• POST :POST :

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

• Un mauvais invariant :Un mauvais invariant :

Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1

nn

. . .. . .

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1

inv Iinv Ii = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }

i = 1i = 1

c – 1c – 1

I = . . .I = . . .

F = { c <= n , s + 3 = F = { c <= n , s + 3 = i } i }i = 1i = 1

c – 1c – 1

Après simplification !Après simplification !

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 172172

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

II , , C C => => FF

{ c <= n + 1 , s = { c <= n + 1 , s = i } i } et et { c <= n }{ c <= n }

??????????????=>=>

{ c <= n + 1 , s + 3 = { c <= n + 1 , s + 3 = i } i }i = 1i = 1

c – 1c – 1

i = 1i = 1

c – 1c – 1

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 173173

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

II , , C C => => FF

{ c <= n + 1 , s = { c <= n + 1 , s = i } i } et et { c <= n }{ c <= n }

NONNON=>=>

{ c <= n + 1 , s + 3 = { c <= n + 1 , s + 3 = i } i }i = 1i = 1

c – 1c – 1

i = 1i = 1

c – 1c – 1

////

Sinon, nous aurions 3 = 0 !Sinon, nous aurions 3 = 0 !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 174174

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

II , , C C => => FF

{ c <= n + 1 , s = { c <= n + 1 , s = i } i } et et { c <= n }{ c <= n }

NONNON=>=>

{ c <= n + 1 , s + 3 = { c <= n + 1 , s + 3 = i i + 3+ 3 } }i = 1i = 1

c – 1c – 1

i = 1i = 1

c – 1c – 1

////

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 175175

• POST :POST :

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

• Un mauvais invariant :Un mauvais invariant :

Q = { s = Q = { s = (i + 3) } (i + 3) } = { s = = { s = (i + 3) , c <= n + 1 , (i + 3) , c <= n + 1 , c > n }c > n }i = 1i = 1

nn

. . .. . .

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1

inv Iinv Ii = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = (i + 3) } (i + 3) }

i = 1i = 1

c – 1c – 1

Sans problème :Sans problème :

I , I , C => Q C => Q

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 176176

• POST :POST :

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

• Un mauvais invariant :Un mauvais invariant :

Q = { s = Q = { s = (i + 3) } (i + 3) } = { s = = { s = (i + 3) , c <= n + 1 , (i + 3) , c <= n + 1 , c > n }c > n }i = 1i = 1

nn

. . .. . .

while ( c <= n ) dowhile ( c <= n ) do

s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1

inv Iinv Ii = 1i = 1

c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = (i + 3) } (i + 3) }

i = 1i = 1

c – 1c – 1

Sans problème :Sans problème :

I , I , C => Q C => Q

I = . . .I = . . .

F = { c <= n , s = F = { c <= n , s = (i + 3) } (i + 3) }i = 1i = 1

c – 1c – 1

Après simplification !Après simplification !

Sans problème :Sans problème :

I , C => FI , C => F

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 177177

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

• Attention :Attention :

• Tout ceci n’empêche pas un programme de Tout ceci n’empêche pas un programme de boucler !boucler !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 178178

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

• Attention :Attention :

• Tout ceci n’empêche pas un programme de boucler !Tout ceci n’empêche pas un programme de boucler !

• Nous affirmons seulement queNous affirmons seulement que

– si le programme s’arrête,si le programme s’arrête,

– alors il rend le résultat indiqué !alors il rend le résultat indiqué !

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 179179

SynthèseSynthèse----------------------------------------------------------------------------------------------------------------------------------

Logique de Hoare (fin) :Logique de Hoare (fin) :

Les boucles etLes boucles et

les invariants.les invariants.

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

19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / 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 ! ! !