Algorithmique et ComplexiT´
e
Rappels:
Preuve et complexit´
e des algorithmes
ACT - Master1 Informatique
Sophie Tison -Lille1-
sophie.tison@lifl.fr
Un premier rappel: comment prouver qu’un
algorithme est correct
PROUVER QUUN PROGRAMME EST CORRECT???
Certaines estimations ´
evaluent les pertes annuelles li´
ees aux
erreurs de programmation en Europe `
a plusieurs dizaines de
milliards d’euros.
Les exemples de bugs c´
el`
ebres sont nombreux: Sonde Mariner
1, Ariane V, Panne d’Electricit´
e en Am´
erique du Nord en 2003,
F22 Raptor en 2007, BNP Paribas en 2009, . . . Certains bugs ont
des cons´
equences dramatiques comme celui du Therac-25.
PROUVER QUUN PROGRAMME EST CORRECT???
TESTER?
Le test est un outil essentiel mais ne garantit pas l’absence de
bugs.
”Program testing can be used to show the presence of bugs, but never
to show their absence !” Edsger W. Dijkstra
PROUVER QUUN PROGRAMME EST CORRECT???
PREUVE FORMELLE?
Elle peut ˆ
etre:
IManuelle
IAutomatique – donc limit´
ee (cf dernier cours)
IInteractive comme par exemple avec Coq. ACM d´
ebut
2014:
Coq Selected As Recipient Of The 2013 Software System
Award Coq is a software tool for the interactive
development of formal proofs, which is a key enabling
technology for certified software. It provides a formal
language to write mathematical definitions, executable
algorithms and theorems together with an environment for
semi-interactive development of machine-checked proofs.
Coq a par exemple permis la r´
ealisation du compilateur
certifi´
e CompCert.
PROUVER QUUN PROGRAMME EST CORRECT???
PREUVE FORMELLE?
”One does not need to give a formal proof of an obviously correct
program; but one needs a thorough understanding of formal proof
methods to know when correctness is obvious.” John C. Reynolds
PROUVER LA CORRECTION DUN PROGRAMME,
c’est prouver qu’il correspond `
a la sp´
ecification donn´
ee.
La Logique de Hoare-Floyd a ´
et´
e introduite `
a la fin des ann´
ees
60 pour formaliser la relation entre langage de programmation
(imp´
eratif) et langage de sp´
ecification.
Elle se base sur la notion de triplet de Hoare, de la forme
{P}A{Q};
Pest la pr´
econdition,
Qla postcondition,
Aune expression du langage de programmation.
SP´
ECIFICATION
{P}A{Q};
Pet Qsont des assertions, i.e. des formules du langage de
sp´
ecification d´
ecrivant les valeurs des variables, l’´
etat de la
m´
emoire ou du syst`
eme.
En toute rigueur, le langage de sp´
ecification devrait ˆ
etre un
langage math´
ematique comme la logique des pr´
edicats, mais
dans un objectif de documentation plus que de preuve de
programmes, le langage de sp´
ecification peut ˆ
etre le langage
naturel (en ´
evitant les ambiguit´
es!).
INTERPR´
ETATION:
L’interpr´
etation de {P}A{Q}est:
si le syst`
eme v´
erifie {P}, on peut assurer qu’il v´
erifie {Q}apr`
es
l’ex´
ecution de A;
En fait, c’est un peu plus compliqu´
e que cela; en effet, il se peut
que l’ex´
ecution de Ane termine pas! On a donc deux
interpr´
etations possibles:
Isi {P}est v´
erifi´
ee, apr`
es l’ex´
ecution de A, si celle-ci termine,
on peut assurer {Q}; on parle alors de correction partielle.
Isi {P}est v´
erifi´
ee, et si la terminaison de Aest assur´
ee et
apr`
es son ex´
ecution, on peut assurer {Q};
Prouver un programme revient donc `
a prouver:
{Pr´
econdition sur les donn´
ees}
Programme
{condition exprimant les r´
esultats attendus}
`
a partir des axiomes et des r`
egles d’inf´
erences de Hoare qui
montrent comment inf´
erer la correction d’instructions
compos´
ees `
a partir de celles de base.
UN EXEMPLE
\\ x >=y >=0
int ??? (int x, int y)
int R=0;
int a=x, b=y;
tant que b>0
si b impair R=R+a; fsi;
a=2*a;
b=b div 2;
fin tant que;
retourner R;
UN EXEMPLE:MULTIPLICATION `
A LA RUSSE ..; OU `
A
L´
EGYPTIENNE
\\ {x >=y >=0}
int Mult (int x, int y)
int R=0;
int a=x, b=y;
tant que b>0
si b impair R=R+a; fsi;
a=2*a;
b=b div 2;
fin tant que;
\\ {R=x*y?}
retourner R;
UN EXEMPLE:MULTIPLICATION `
A LA RUSSE ... OU `
A
L´
EGYPTIENNE
\\ {x >=y >=0}
int Mult (int x, int y)
int R=0;
int a=x, b=y;
\\ R=0, a=x, b=y
tant que b >0 \\invariant: {R+a*b=x*y}
si b impair R=R+a; fsi;
a=2*a;
b=b div 2;
fin tant que;
\\ {R=x*y?}
retourner R;
UN EXEMPLE:MULTIPLICATION `
A LA RUSSE .. OU `
A
L´
EGYPTIENNE
\\ {x >=y >=0}
int Mult (int x, int y)
int R=0;
int a=x, b=y;
\\ {R=0, a=x, b=y }
tant que b > 0 \\invariant {R+ a*b=x*y}
\\ {R+ a *(2 (b div 2)) + b mod 2) =x *y}
si b impair R=R+a; fsi;
\\ {R+a*(2 (b div 2)) = x *y}
a=2*a; \\ {R+a*(b div 2)= x *y}
b=b div 2; \\ { R+a*b=x*y}
fin tant que;
\\ {R=x*y}
retourner R;
LES R `
EGLES DINF ´
ERENCE DE HOARE
La r`
egle pour la S´
equence
{P}A;B {Q}?
si
{P}A{Intermede}et {Intermede}B{Q}
alors:
{P}A;B {Q}
LA R `
EGLE DE LA CONDITIONNELLE
{P}si cond alors A sinon B {Q}?
si
{Pcond}A{Q}et {P∧ ¬cond}B{Q}
alors:
{P}si cond alors A sinon B {Q}
LA R `
EGLE POUR LE TANT QUE
{P}tant que cond faire A {Q}??
si on trouve une assertion i, qu’on appelle invariant, telle que:
Pi
{icond}A{i}
{i∧ ¬cond} ⇒ {Q}
alors:
{P}tant que cond faire A {Q}
Attention: pour avoir une preuve de correction totale, il faut
aussi faire une preuve d’arrˆ
et de la boucle!
LAFFECTATION
P[xexp]x=exp P
en supposant que exp ne contient pas de fonctions `
a effet de
bord.
Par exemple, x+y<5x=x+y x<5
LE RENFORCEMENT DE LA PR ´
ECONDITION
si
PQ
et
{Q}A{R}
alors
{P}A{R}
LAFFAIBLISSEMENT DE LA POSTCONDITION
si
{P}A{Q}
et
QR
alors
{P}A{R}
Soit: Qui peut le plus, peut le moins!
1 / 15 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !