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.
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
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..
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 « « » ! » !
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 « « » ! » !
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 } !!
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
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
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
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
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
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
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 }
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
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 }
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
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
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 !
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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 » !
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 :
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,
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,
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 !)
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 !
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
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
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
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
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
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
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
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 : :
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 }
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 }
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 }
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 }
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 }
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 } { ??? }{ ??? }
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 } { ??? }{ ??? }
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 } { ??? }{ ??? }
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 } { ??? }{ ??? }
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 }
. . .. . .. . .. . . . . .. . .
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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
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
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 }
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 }
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
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 }
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
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 }
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 }
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 ? ? ?
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 }
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 }
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 }
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 !
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 }
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
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 }
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 }
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 }
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 }
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
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 }
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 :
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 :
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 :
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
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
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 ) }
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 ) }
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 }
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
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 ) }
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
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 ? ? ?
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 ) }
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 ) }
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 ) }
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 ) }
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
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 ) }
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 )
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 )
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 )
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 }
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
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 }
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 }
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 }
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 }
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 }
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 }
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 )
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 )
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 }
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 }
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 }
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 }
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
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
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
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
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
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
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
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
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 !
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 !
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
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 }
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 :
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 :
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 :
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 :
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
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
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
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
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 :
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 !
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
////
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
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
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 !
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é !
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.
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 ! ! !