Title: Cours dAlgorithmique
1Cours dAlgorithmique
- Logique de Hoare (fin)
- Les boucles et
- les invariants.
2Les grandes lignes du cours
- Trier et chercher, recherche textuelle
- Listes et arbres
- Le back-track
- Arbres équilibrés
- Récursivité et induction sur la structure
- Divide and conquer, algorithmes gloutons
- Minimax, alpha-beta
- Dérécursion
- Divers problèmes particuliers
- Logique de Hoare
- Programmation dynamique
- Complexité et calculabilité
3Logique de Hoare---------------------------------
--------------------------------
W H I L E e t l e s I N V A R
I A N T S D E B O U C L E
4Logique de Hoare---------------------------------
--------------------------------
- Lexemple qui nous sert à illustrer la notion
dinvariant - PRE V , D e N
- POST Q , R e N
- telles V Q D R et R lt D .
-
- Cest la spécification de la division euclidienne
!
I
I
5Logique de Hoare---------------------------------
--------------------------------
Exemple V 17 , D 5
Y a-t-il quelque-chose de commun entre les
différentes itérations ?
Q lt- 0 R lt- V while R gt D Q lt- Q
1 R lt- R - D
V 17 , D 5 , Q 0
OUI V Q D R
V 17 , D 5 , Q 0 , R 17
V 17 , D 5 , Q 0 , R 17
V 17 , D 5 , Q 1 , R 12
V 17 , D 5 , Q 1 , R 17
V 17 , D 5 , Q 2 , R 12
etc etc ! ! !
V 17 , D 5 , Q 1 , R 12
V 17 , D 5 , Q 2 , R 7
6Logique de Hoare---------------------------------
--------------------------------
Exemple V 17 , D 5
Y a-t-il quelque-chose de commun entre les
différentes itérations ?
Q lt- 0 R lt- V while R gt D Q lt- Q
1 R lt- R - D
V 17 , D 5 , Q 0
OUI V Q D R
V 17 , D 5 , Q 0 , R 17
C'est fini ! ! !
V 17 , D 5 , Q 2 , R 7
A la fin V Q D R et R lt D
V 17 , D 5 , Q 3 , R 7
V 17 , D 5 , Q 3 , R 2
7Logique de Hoare---------------------------------
--------------------------------
- Les valeurs de V , D , Q , R peuvent changer.
- Mais la relation V Q D R reste toujours
vérifiée. - Cest ce quon appelle un invariant !
- Un invariant est un prédicat qui
- est vrai à chaque début de boucle,
- et à chaque fin de boucle,
- cest-à-dire début de la boucle suivante.
- (Les tests ne font pas daffectation !)
8Logique de Hoare---------------------------------
--------------------------------
- Pour écrire un corps de boucle, il faut connaître
linvariant de la boucle ! - Votre code sera exécuté par le i tour de
boucle, quel que soit la valeur de i . - Pour savoir ce que vous devez faire au i
tour de boucle, vous devez vous souvenir de ce
que vous avez fait pendant les i 1 premiers
tours. - Ceci revient à connaître linvariant !
e
e
9Logique de Hoare---------------------------------
--------------------------------
- Quel est linvariant ?
- 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 . - Invariant s S j
s lt- 0 i lt- 1 while ( i lt n ) do s lt-
s i i lt- i 1
e
i 1
j 1
10Logique de Hoare---------------------------------
--------------------------------
- Règle pour le programme while C do g
- Nous dirons que I est linvariant !
- La condition I , C g I vérifie que
I est bien invariant ! ! ! - La post-condition I , ù C est évidente !
- Il suffit alors que I soit vrai au début !
I , C g I
I while C do g I , ù C
11Logique de Hoare---------------------------------
--------------------------------
- Dans la pratique, nous avons une post-condition Q
et le code while C do g - Quel prédicat I faut-il choisir comme
invariant ? - Cest lutilisateur qui doit faire une
proposition ! - Nouvelle syntaxe while C do g inv I
??? , C g ???
??? while C do g Q
12Logique de Hoare---------------------------------
--------------------------------
- Règle pour le programme while C do g inv I
- Nous devons prouver que I , ù C gt Q !
- Nous calculons la pré-condition F de F g
I ! - Nous prouvons que I , C gt F !
- A ce moment, nous connaissons la pré-condition
I !
F g I
I , ù C gt Q
I , C gt F
I while C do g inv I Q
13Logique de Hoare---------------------------------
--------------------------------
- Règle pour le programme while C do g inv I
- Attention, il y a deux obligations de preuve !
- Elles sont semi-automatisables.
- Un prouveur peut ne pas trouver la preuve !
- Un prouveur ne saura jamais dire si elle nexiste
pas ! ! !
F g I
I , ù C gt Q
I , C gt F
I while C do g inv I Q
14Logique de Hoare---------------------------------
--------------------------------
- U N
- P R E M I E R
- E X E M P L E
15Logique de Hoare---------------------------------
--------------------------------
R lt- V Q lt- 0 while ( R gt D ) do Q
lt- Q 1 R lt- R D inv I
Q V D Q R , 0 lt R lt D
16Logique de Hoare---------------------------------
--------------------------------
R lt- V Q lt- 0 while ( R gt D ) do Q
lt- Q 1 R lt- R D inv I
Sans problème I , ù C gt Q
V D Q R , 0 lt R
Q V D Q R , 0 lt R lt D V
D Q R , 0 lt R et R lt D
17Logique de Hoare---------------------------------
--------------------------------
R lt- V Q lt- 0 while ( R gt D ) do Q
lt- Q 1 R lt- R D inv I
Après simplification !
F V D Q R , D lt R
V D Q R D , 0 lt R D
Sans problème I , ù C gt Q
V D Q R , 0 lt R
V D Q R , 0 lt R
Q V D Q R , 0 lt R lt D V
D Q R , 0 lt R et R lt D
18Logique de Hoare---------------------------------
--------------------------------
F g I
I , ù C gt Q
I , C gt F
I while C do g inv I Q
V D Q R , 0 lt R et R gt D
!!!!!! gt V D Q R , D lt R
19Logique de Hoare---------------------------------
--------------------------------
V D 0 V , 0 lt V V gt 0
R lt- V Q lt- 0 while ( R gt D ) do Q
lt- Q 1 R lt- R D inv I
V D 0 R , 0 lt R
I V D Q R , 0 lt R
F V D Q R , D lt R
Sans problème I , C gt F
V D Q R D , 0 lt R D
Sans problème I , ù C gt Q
V D Q R , 0 lt R
V D Q R , 0 lt R
Q V D Q R , 0 lt R lt D V
D Q R , 0 lt R et R lt D
20Logique de Hoare---------------------------------
--------------------------------
- U N
- D E U X I E M E
- E X E M P L E
21Logique de Hoare---------------------------------
--------------------------------
x lt- a y lt- b while ( y ltgt 0 ) do m
lt- y y lt- x y x lt- m
inv I
Q x pgcd( a , b )
22Logique de Hoare---------------------------------
--------------------------------
x lt- a y lt- b while ( y ltgt 0 ) do m
lt- y y lt- x y x lt- m
inv I
Sans problème I , ù C gt Q
pgcd( x , y ) pgcd( a , b )
Q x pgcd( a , b ) pgcd( x , 0 )
pgcd( a , b ) pgcd( x , y ) pgcd( a ,
b ) , y 0
23Logique de Hoare---------------------------------
--------------------------------
x lt- a y lt- b while ( y ltgt 0 ) do m
lt- y y lt- x y x lt- m
inv I
F pgcd( y , x y ) pgcd( a , b )
pgcd( m , xy ) pgcd( a , b )
pgcd( m , y ) pgcd( a , b )
Sans problème I , ù C gt Q
pgcd( x , y ) pgcd( a , b )
pgcd( x , y ) pgcd( a , b )
Q x pgcd( a , b ) pgcd( x , 0 )
pgcd( a , b ) pgcd( x , y ) pgcd( a ,
b ) , y 0
24Logique de Hoare---------------------------------
--------------------------------
I , C gt F
? ? ?
pgcd( x , y ) pgcd( a , b ) et y ltgt 0
??? gt pgcd( y , x y ) pgcd( a , b )
Maths x gt y et y ltgt 0 gt pgcd( x , y )
pgcd( y , x y )
Nous devons renforcer linvariant pgcd( x ,
y ) pgcd( a , b ) , x gt y
25Logique de Hoare---------------------------------
--------------------------------
x lt- a y lt- b while ( y ltgt 0 ) do m
lt- y y lt- x y x lt- m
inv I
Sans problème I , ù C gt Q
pgcd( x , y ) pgcd( a , b ) , x gt y
Q x pgcd( a , b ) pgcd( x , 0 )
pgcd( a , b ) pgcd( x , y ) pgcd( a ,
b ) , y 0
26Logique de Hoare---------------------------------
--------------------------------
x lt- a y lt- b while ( y ltgt 0 ) do m
lt- y y lt- x y x lt- m
inv I
F pgcd( y , x y ) pgcd( a , b )
. . . , m gt x y
. . . , m gt y
Sans problème I , ù C gt Q
pgcd( x , y ) pgcd( a , b ) , x gt y
pgcd( x , y ) pgcd( a , b ) , x gt y
Q x pgcd( a , b ) pgcd( x , 0 )
pgcd( a , b ) pgcd( x , y ) pgcd( a ,
b ) , y 0
27Logique de Hoare---------------------------------
--------------------------------
I , C gt F
pgcd( x , y ) pgcd( a , b ) , x gt y et
y ltgt 0 !!!!!! gt pgcd( y , x y ) pgcd(
a , b )
Maths x gt y et y ltgt 0 gt pgcd( x , y )
pgcd( y , x y )
28Logique de Hoare---------------------------------
--------------------------------
pgcd( a , b ) pgcd( a , b ) , a gt b
a gt b
x lt- a y lt- b while ( y ltgt 0 ) do m
lt- y y lt- x y x lt- m
inv I
I pgcd( x , y ) pgcd( a , b ) , x gt y
F pgcd( y , x y ) pgcd( a , b )
Sans problème I , C gt F
. . . , m gt x y
. . . , m gt y
Sans problème I , ù C gt Q
pgcd( x , y ) pgcd( a , b ) , x gt y
pgcd( x , y ) pgcd( a , b ) , x gt y
Q x pgcd( a , b ) pgcd( x , 0 )
pgcd( a , b ) pgcd( x , y ) pgcd( a ,
b ) , y 0
29Logique de Hoare---------------------------------
--------------------------------
- U N
- T R O I S I E M E
- E X E M P L E
30Logique de Hoare---------------------------------
--------------------------------
s lt- 0 c lt- 1 while ( c lt n ) do s
lt- s c c lt- c 1 inv I
Sans problème I , ù C gt Q
c 1
c lt n 1 , s S i
i 1
n
c 1
Q s S i s S i , c lt n
1 , c gt n
i 1
i 1
31Logique de Hoare---------------------------------
--------------------------------
s lt- 0 c lt- 1 while ( c lt n ) do s
lt- s c c lt- c 1 inv I
Après simplification !
c 1
F c lt n , s S i
i 1
Sans problème I , ù C gt Q
I . . .
c 1
c lt n 1 , s S i
i 1
n
c 1
Q s S i s S i , c lt n
1 , c gt n
i 1
i 1
32Logique de Hoare---------------------------------
--------------------------------
s lt- 0 c lt- 1 while ( c lt n ) do s
lt- s c c lt- c 1 inv I
c 1
F c lt n , s S i
Sans problème I , C gt F
i 1
Sans problème I , ù C gt Q
I . . .
c 1
c lt n 1 , s S i
i 1
n
c 1
Q s S i s S i , c lt n
1 , c gt n
i 1
i 1
33Logique de Hoare---------------------------------
--------------------------------
1 1
1 lt n 1 , 0 S i n gt 0
i 1
s lt- 0 c lt- 1 while ( c lt n ) do s
lt- s c c lt- c 1 inv I
c 1
I c lt n 1 , s S i
i 1
c 1
F c lt n , s S i
Sans problème I , C gt F
i 1
Sans problème I , ù C gt Q
I . . .
c 1
c lt n 1 , s S i
i 1
n
c 1
Q s S i s S i , c lt n
1 , c gt n
i 1
i 1
34Logique de Hoare---------------------------------
--------------------------------
2 1
2 lt n 1 , 1 S i n gt 1
i 1
s lt- 1 c lt- 2 while ( c lt n ) do .
. .
c 1
I c lt n 1 , s S i
i 1
n
Q s S i
i 1
35Logique de Hoare---------------------------------
--------------------------------
- Une mauvaise initialisation
2 1
2 lt n 1 , 6 S i n gt 1 , 6 1
FAUX
i 1
s lt- 6 c lt- 2 while ( c lt n ) do .
. .
c 1
I c lt n 1 , s S i
i 1
n
Q s S i
i 1
36Logique de Hoare---------------------------------
--------------------------------
- Une mauvaise initialisation
2 1
2 lt n 1 , 6 S i n gt 1 , 6 1
n gt 1
1
1
i 1
1
s lt- 6 c lt- 2 while ( c lt n ) do .
. .
c 1
I c lt n 1 , s S i
i 1
Nous corrigeons !
n
Q s S i
i 1
37Logique de Hoare---------------------------------
--------------------------------
- Une mauvaise initialisation
4
2 1
4
3
2 lt n 1 , 6 S i n gt 1 , 6 1
n gt 3
6
i 1
s lt- 6 c lt- 2 while ( c lt n ) do .
. .
c 1
4
I c lt n 1 , s S i
i 1
Une autre correction !
n
Q s S i
i 1
38Logique de Hoare---------------------------------
--------------------------------
. . . while ( c lt n ) do s lt- s c
3 c lt- c 1 inv I
Sans problème I , ù C gt Q
c 1
c lt n 1 , s S i
i 1
n
c 1
Q s S i s S i , c lt n
1 , c gt n
i 1
i 1
39Logique de Hoare---------------------------------
--------------------------------
. . . while ( c lt n ) do s lt- s c
3 c lt- c 1 inv I
Après simplification !
c 1
F c lt n , s 3 S i
i 1
Sans problème I , ù C gt Q
I . . .
c 1
c lt n 1 , s S i
i 1
n
c 1
Q s S i s S i , c lt n
1 , c gt n
i 1
i 1
40Logique de Hoare---------------------------------
--------------------------------
I , C gt F
c 1
c lt n 1 , s S i et c lt n
NON gt c lt n 1 , s 3 S i
i 1
//
c 1
i 1
Sinon, nous aurions 3 0 !
41Logique de Hoare---------------------------------
--------------------------------
. . . while ( c lt n ) do s lt- s c
3 c lt- c 1 inv I
Après simplification !
c 1
F c lt n , s S (i 3)
Sans problème I , C gt F
i 1
Sans problème I , ù C gt Q
I . . .
c 1
c lt n 1 , s S (i 3)
i 1
n
c 1
Q s S (i 3) s S (i 3)
, c lt n 1 ,
c gt n
i 1
i 1
42Logique de Hoare---------------------------------
--------------------------------
- Attention
- Tout ceci nempêche pas un programme de boucler !
- Nous affirmons seulement que
- si le programme sarrête,
- alors il rend le résultat indiqué !