Calculabilité et vérification

publicité
Calculabilité et vérification
Marc Zeitoun, LaBRI, Univ. Bordeaux
Mars 2016
Calculabilité
Quelques jalons de la mécanisation du calcul
◮
−300? Algorithme d’Euclide.
◮
820 Algorithmes d’Al-Khwârîzmî.
◮
1623 Description d’une machine à calculer de Schickard.
◮
1645 Machine à calculer de Pascal.
◮
1710 Machine à calculer de Leibniz.
◮
1801 Métier à tisser de Jacquart.
◮
◮
1842 Programme de Lovelace, Machine de Babbage.
1900– Que peut-on calculer automatiquement ?
◮
Hilbert, Gödel, Turing, Church.
3/56
Limites des ordinateurs
◮
Peut-on résoudre n’importe quel problème avec un ordinateur ?
◮
Peut-on faire n’importe quel calcul ?
◮
Combien de temps faut-il pour résoudre un problème ?
◮
Combien de mémoire faut-il pour résoudre un problème ?
4/56
Des progrès impressionnants
2016 : Alphago
5/56
Des progrès impressionnants
2016 : Alphago
2015 : Gérard Berry
5/56
Que peut-on calculer automatiquement ?
1900 Hilbert, 10ème problème : peut-on décider, de façon mécanique, si une
équation Diophantienne a une solution ?
1928 Hilbert, Entscheidungsproblem : mécanisation des mathématiques.
6/56
Que peut-on calculer automatiquement ?
1900 Hilbert, 10ème problème : peut-on décider, de façon mécanique, si une
équation Diophantienne a une solution ?
1928 Hilbert, Entscheidungsproblem : mécanisation des mathématiques.
1931 Gödel publie ses théorèmes d’incomplétude.
1935 Turing formalise une définition de machine et de calcul.
1936 Church exhibe un problème non résoluble par machine.
1938 Kleene : équivalence machines de Turing/λ-calcul/fonctions récursives
6/56
Que peut-on calculer automatiquement ?
1900 Hilbert, 10ème problème : peut-on décider, de façon mécanique, si une
équation Diophantienne a une solution ?
1928 Hilbert, Entscheidungsproblem : mécanisation des mathématiques.
1931 Gödel publie ses théorèmes d’incomplétude.
1935 Turing formalise une définition de machine et de calcul.
1936 Church exhibe un problème non résoluble par machine.
1938 Kleene : équivalence machines de Turing/λ-calcul/fonctions récursives
1947 Post & Markov prouvent qu’un problème posé par Thue en 1914 n’est
pas résoluble mécaniquement.
1970 Matiyasevich répond négativement au 10ème problème de Hilbert.
1971 Cook & Levin formalisent la notion de problème NP-complet.
6/56
Portrait de famille
Click !
Pour le personnage en pull violet, voir ici (ou éventuellement là)
.
7/56
Exemples de problèmes de décision
Problème 1
Donnée Un nombre entier positif n en base 2.
Question n est-il pair ?
Problème 2
D. Un programme dans votre langage favori.
Q. Le programme est-il syntaxiquement correct ?
Problème 3
D. Un nombre entier positif n en base 10.
Q. n est-il premier ?
[AKS 2004]
Problème 4
D. Un graphe donné par une liste d’adjacence.
Q. Le graphe est-il 3-coloriable ?
Problème 5
D. Une grille de Sudoku n × n.
Q. La grille a-t-elle une solution ?
Problème 6
D. Un puzzle EternityUn puzzle Eternity n × n.
Q. Le puzzle a-t-il une solution ?
8/56
Exemples de problèmes de décision (2)
Problème 7
D. Un programme dans votre langage préféré.
Q. S’arrête-t-il sur au moins une entrée ?
Problème 8
D. Un programme dans votre langage préféré.
Q. S’arrête-t-il sur toute entrée ?
Problème 9
D. Des couples de mots (u1 , v1 ), . . . , (un , vn ).
Q. Existe-t-il des entiers ii , . . . , ik tels que
ui 1 . . . ui k = vi 1 . . . vi k ?
9/56
Légende pour les problèmes précédents
◮
◮
◮
: on connaît un algorithme qui résout le problème de façon efficace
(en temps polynomial par rapport à la taille de l’entrée).
Ce n’est pas du tout évident pour le Problème 3 de primalité.
En effet, la taille d’une entrée n représentée en base 10 est ∼ log10 (n).
: on connaît un algorithme, mais le meilleur connu fait un nombre
exponentiel d’opérations par rapport à la taille de l’entrée.
: on sait qu’il n’existe pas d’algorithme pour ce problème (avec la
notion actuelle d’algorithme).
10/56
Notion de problème de décision
Un problème de décision est
◮
une question. . .
◮
. . . portant sur un ensemble de données. . .
◮
. . . dont une description est fixée. . .
◮
. . . et dont la réponse est OUI ou NON.
Ne pas confondre problème et algorithme le résolvant.
◮
◮
On peut aussi s’intéresser aussi aux problèmes calculatoires, dont la
réponse n’est pas nécessairement binaire (OUI/NON).
Exemple : calculer un 3-coloriage.
11/56
Problème 5 : Sudoku
◮
On convient d’un codage des grilles. Exemple ? ? ? ? ? ? ? ?3- ? ? ?57 ? ? ? ?...
◮
Peut-on résoudre ce problème (pour toute taille de grille d’entrée) ?
12/56
Problème 5 : Sudoku
◮
On convient d’un codage des grilles. Exemple ? ? ? ? ? ? ? ?3- ? ? ?57 ? ? ? ?...
◮
Peut-on résoudre ce problème (pour toute taille de grille d’entrée) ?
◮
OUI : on essaie toutes les combinaisons.
◮
Combien d’essais doit-on faire au maximum ?
12/56
Problème 6 : Eternity II
13/56
Problème 9 : PCP, Problème de Correspondance de
Post
http://www.soc.napier.ac.uk/~andrew/co42010/pcp.htm
D : Des couples de mots.
Q : Peut-on former le même mot en utilisant ces couples de mots ?
Donnée
14/56
Vérification
15/56
Un domaine important : la vérification
◮
◮
Les bugs sont partie intégrante de l’informatique.
Mais en fait. . . les bugs, est-ce si grave ?
Juste quand je mets à jour mes applications.... . .
16/56
Un domaine important : la vérification
◮
Les bugs sont partie intégrante de l’informatique.
◮
Mais en fait. . . les bugs, est-ce si grave ?
Ça peut être coûteux, et parfois grave...
Mariner 1
Spirit
Ariane 5
16/56
Des bugs logiciels aux conséquences désastreuses (1)
Aéronautique
1962 Perte d’itinéraire de la sonde Mariner 1 (NASA) au lancement.
2 causes, dont erreur de transcription d’une équation.
1996 Auto-destruction d’Ariane 5 (1er vol), 37 secondes après décollage.
Cause. Conversion flottant 64 bits trop grand, vers entier 16 bits.
2004 Blocage du robot Mars Rover Spirit.
Cause. Trop de fichiers ouverts en mémoire flash.
Médecine
85–87 5 morts par irradiations massives dues à la machine Therac-25.
Cause. Conflit d’accès aux ressources entre 2 parties logicielles.
17/56
Des bugs logiciels aux conséquences désastreuses (2)
Télécoms
1990 Crash à grande échelle du réseau AT&T, effet domino.
Cause. Toute unité défaillante alertait ses voisines, mais la
réception du message d’alerte causait une panne du récepteur !
Énergie
2003 Panne d’électricité aux USA & Canada, General Electric.
Cause. À nouveau : mauvaise gestion d’accès concurrents aux
ressources dans un programme de surveillance.
Finance
2/2012 Bourse de Tokyo paralysée par un bug.
18/56
Des bugs logiciels aux conséquences désastreuses (3)
Informatique
1994 Bug du Pentium FDIV Intel sur opérations en nombres flottants.
Cause. Algorithme de division erroné (découvert par Th. Nicely).
06–08 Clés générées par OpenSSL et données cryptées non sûres,
impactant les applications l’utilisant (comme ssh).
Cause. Générateur de nombres aléatoires d’OpenSSL cassé.
78–95 Faille dans le protocole d’authentification de Needham-Schroeder.
Cause. Attaque man in the middle détectée par G. Lowe.
19/56
Les bugs sont-ils fréquents ?
◮
◮
Mettez à jour les apps de votre smartphone pour le constater.
Exemples récents :
◮
◮
◮
◮
◮
Caisse d’épargne, en 2016.
Adidas, en 2015.
Bug Heartbleed dans OpenSSL, avril 2014.
Bug SFR et chiffres du chômage, octobre 2013.
Bug Carte Vitale, janvier 2013.
20/56
Comment détecter et corriger des bugs ?
Il suffirait d’écrire un super-compilateur qui, en plus de compiler, détecterait
les bugs.
21/56
Comment détecter et corriger des bugs ?
Il suffirait d’écrire un super-compilateur qui, en plus de compiler, détecterait
les bugs.
◮
Comment décrire le comportement attendu du programme à vérifier ?
◮
Comment être certain/e que ce super-compilateur est lui-même correct ?
◮
Peut-on réellement écrire un tel super-compilateur ?
21/56
Vérification et Calculabilité
22/56
Quel rapport vérification automatique / calculabilité ?
Un problème de vérification fondamental : le problème de l’arrêt.
Donnée Un programme P et une entrée x de ce programme.
Question P s’arrête-t-il sur x ?
23/56
Quel rapport vérification automatique / calculabilité ?
Un problème de vérification fondamental : le problème de l’arrêt.
Donnée Un programme P et une entrée x de ce programme.
Question P s’arrête-t-il sur x ?
Turing : il n’existe aucun algorithme pour résoudre ce problème !
23/56
Quel rapport vérification automatique / calculabilité ?
Un problème de vérification fondamental : le problème de l’arrêt.
Donnée Un programme P et une entrée x de ce programme.
Question P s’arrête-t-il sur x ?
Turing : il n’existe aucun algorithme pour résoudre ce problème !
◮
Par l’absurde, supposons qu’il existe un tel algorithme, halt.
◮
Ce programme halt prendrait 2 chaînes de caractères en arguments :
◮
◮
un programme P, et
un argument x de P.
23/56
Pas d’algorithme pour résoudre le problème de l’arrêt
Regardons le programme suivant :
Quand on lance Contradiction(Contradiction), 2 cas possibles :
1. Soit Contradiction(Contradiction) s’arrête,
alors halt(Contradiction,Contradiction) renvoie True,
donc on passe dans la boucle while et on ne s’arrête pas.
24/56
Pas d’algorithme pour résoudre le problème de l’arrêt
Regardons le programme suivant :
Quand on lance Contradiction(Contradiction), 2 cas possibles :
2. Soit Contradiction(Contradiction) ne s’arrête pas,
alors halt(Contradiction,Contradiction) renvoie False,
donc on ne passe pas dans la boucle while et on s’arrête.
24/56
Pas d’algorithme pour résoudre le problème de l’arrêt
Regardons le programme suivant :
Quand on lance Contradiction(Contradiction), 2 cas possibles.
– Dans les 2 cas, il y a une contradiction.
– Donc l’algorithme halt ne peut pas exister.
24/56
Indécidabilité
◮
◮
Un problème est indécidable si aucun algorithme ne le résout.
Turing : Le problème de l’arrêt est indécidable. La preuve en vidéo :
https://www.youtube.com/watch?v=92WHN-pAFCs
Est-ce une exception ?
25/56
Indécidabilité
◮
◮
Un problème est indécidable si aucun algorithme ne le résout.
Turing : Le problème de l’arrêt est indécidable. La preuve en vidéo :
https://www.youtube.com/watch?v=92WHN-pAFCs
Est-ce une exception ?
◮
◮
Non : c’est fréquent et plutôt “la règle” en vérification.
Exemple Problème de la division par 0.
Donnée Un programme Q et une variable v de ce programme.
Question Q effectue-t-il une division par v quand v = 0 ?
25/56
Notion de réduction
◮
◮
Problème de l’arrêt.
Donnée Un programme P et une entrée x de ce programme.
Question P s’arrête-t-il sur x ?
Problème de la division par 0.
Donnée Un programme Q et une variable v de ce programme.
Question Q effectue-t-il une division par v quand v = 0 ?
On utilise une technique appelée réduction.
26/56
Notion de réduction
◮
◮
Problème de l’arrêt.
Donnée Un programme P et une entrée x de ce programme.
Question P s’arrête-t-il sur x ?
Problème de la division par 0.
Donnée Un programme Q et une variable v de ce programme.
Question Q effectue-t-il une division par v quand v = 0 ?
On utilise une technique appelée réduction.
D’un programme et d’une donnée (P, x), on construit un programme et une
variable (Q, v ) tels que
P s’arrête sur la donnée x
⇐⇒
Q fait une division par v quand v = 0.
26/56
Réduction et preuve par l’absurde
D’un programme et d’une donnée (P, x), on construit un programme et une
variable (Q, v ) tels que
P s’arrête sur la donnée x
⇐⇒
Q fait une division par v quand v = 0.
◮
On sait déjà que le problème de l’arrêt est indécidable.
27/56
Réduction et preuve par l’absurde
D’un programme et d’une donnée (P, x), on construit un programme et une
variable (Q, v ) tels que
P s’arrête sur la donnée x
⇐⇒
Q fait une division par v quand v = 0.
◮
◮
On sait déjà que le problème de l’arrêt est indécidable.
Si le problème de division par 0 était décidable, alors le problème de
l’arrêt le serait aussi.
◮
Pourquoi ?
27/56
Réduction et preuve par l’absurde
D’un programme et d’une donnée (P, x), on construit un programme et une
variable (Q, v ) tels que
P s’arrête sur la donnée x
⇐⇒
Q fait une division par v quand v = 0.
◮
◮
On sait déjà que le problème de l’arrêt est indécidable.
Si le problème de division par 0 était décidable, alors le problème de
l’arrêt le serait aussi.
◮
◮
Pourquoi ?
Réduction du problème de l’arrêt au problème de division par 0 ?
27/56
Quelques problèmes indécidables
Donnée : un programme.
◮
Le programme termine-t-il sur une entrée au moins ?
◮
Le programme termine-t-il sur toute entrée ?
◮
Le programme atteint-il sa 42ème instruction ?
◮
Le programme assigne-t-il 42 à la variable x ?
28/56
Quelques problèmes indécidables
Donnée : un programme.
◮
Le programme termine-t-il sur une entrée au moins ?
◮
Le programme termine-t-il sur toute entrée ?
◮
Le programme atteint-il sa 42ème instruction ?
◮
Le programme assigne-t-il 42 à la variable x ?
Un résultat formalise que toute propriété intéressante est indécidable.
28/56
D’autres problèmes indécidables
◮
◮
PCP (Problème de Correspondance de Post)
D. Des couples de mots (u1 , v1 ), . . . , (un , vn ).
Q. Existe-t-il ii , . . . , ik tels que ui1 . . . uik = vi1 . . . vik ?
Tuiles de Wang
D. Des tuiles de Wang (à la Eternity).
Q. Peut-on paver le plan entier avec ces tuiles (disponibles
en nombre illimité), de telle sorte que 2 tuiles adjacentes
soient toujours connectées par la même couleur ?
◮
Tetris : même chose avec des pièces de Tetris.
29/56
Les limites du calcul automatique
Théorème de Rice
Toute propriété non triviale des langages récursivement énumérables est indécidable.
30/56
Les limites du calcul automatique
Théorème de Rice
Toute propriété non triviale des langages récursivement énumérables est indécidable.
En clair : on ne peut pas programmer un « super compilateur » qui, à la
super-compilation, prendrait en entrée un programme source et qui :
◮
Détecterait les instructions non atteintes,
◮
Détecterait les assertions fausses.
◮
...
30/56
Les limites du calcul automatique
Théorème de Rice
Toute propriété non triviale des langages récursivement énumérables est indécidable.
En clair : on ne peut pas programmer un « super compilateur » qui, à la
super-compilation, prendrait en entrée un programme source et qui :
◮
Détecterait les instructions non atteintes,
◮
Détecterait les assertions fausses.
◮
...
Et cela, même pour les programmes qui n’utilisent que 2 variables entières,
et juste 2 types d’instructions :
◮
x++
◮
if (x==0) goto p else x-- goto q
30/56
La vérification de logiciels malgré tout
Amir Pnueli — ACM Turing Award 1996
31/56
La vérification de logiciels malgré tout
Leslie Lamport — ACM Turing Award 2013
32/56
La vérification de logiciels malgré tout
Gérard Berry — Médaille d’Or du CNRS 2014.
33/56
La vérification de logiciels malgré tout
Test : trouver le bug caché dans ce diplôme de chasseurs de bugs
.
34/56
La chasse aux bugs n’est pas facile
◮
On ne peut donc pas détecter des bugs automatiquement.
◮
Et pourtant, c’est une nécessité.
35/56
Un exemple concret : le protocole de
Needham-Schroeder
1978 Publié par Needham et Schroeder.
1989 « Prouvé » correct par Burrows, Abadi, et Needham.
1995 Prouvé erroné par Lowe (17 ans d’utilisation !).
1996 Prouvé erroné par Lowe de façon automatique, en le modélisant en
CSP et en utilisant le logiciel de model-checking FDR.
Now Le bug peut être retrouvé automatiquement grâce au
model-checking.
36/56
La vérification de logiciel
Constat. Problèmes logiciels très coûteux, dus à des bugs.
Pour les détecter, approches complémentaires
◦ Simulation/test.
Peut trouver des bugs,
Pas garantir leur absence.
37/56
La vérification de logiciel
Constat. Problèmes logiciels très coûteux, dus à des bugs.
Pour les détecter, approches complémentaires
◦ Simulation/test.
Peut trouver des bugs,
Pas garantir leur absence.
◦ Preuve de théorème.
Donne des garanties.
37/56
La vérification de logiciel
Constat. Problèmes logiciels très coûteux, dus à des bugs.
Pour les détecter, approches complémentaires
◦ Simulation/test.
Peut trouver des bugs,
Pas garantir leur absence.
◦ Preuve de théorème.
Donne des garanties.
Pas entièrement automatique, demande de l’expertise
37/56
La vérification de logiciel
Constat. Problèmes logiciels très coûteux, dus à des bugs.
Pour les détecter, approches complémentaires
◦ Simulation/test.
Peut trouver des bugs,
Pas garantir leur absence.
◦ Preuve de théorème.
Donne des garanties.
Pas entièrement automatique, demande de l’expertise
◦ Vérification de modèle, ou model-checking.
Donne des garanties.
Automatique.
Ne fonctionne que sur des abstractions du système.
◦ ...
37/56
Le model-checking.
Clarke/Emerson & Queille/Sifakis, 1981
◮
◮
◮
Objectif : détecter de façon automatique les bugs dans les circuits, dans
les protocoles de communication,...
S’applique bien en phase de conception, ou après modélisation.
Travaille sur un modèle de système pour en vérifier des propriétés.
E.M. Clarke
E.A. Emerson
J. Sifakis
Prix Turing 2007.
38/56
Principe du model-checking
Système
vérifie ?
propriété
39/56
Principe du model-checking
Système
vérifie ?
propriété
Expression
dans une
logique adaptée
Modélisation
S
φ
39/56
Principe du model-checking
Système
vérifie ?
propriété
Expression
dans une
logique adaptée
Algorithme
Modélisation
?
S
|=
φ
39/56
Le model-checking : schéma
Modèle S d’un système =
Système de transitions
Chaque état satisfait des
propriétés atomiques
Propriété φ :
comportements corrects
Algorithme de vérification
S |= φ : OK
S 6|= φ : trace d’erreur
40/56
Comment contourner le théorème de Rice ?
◮
Vérifier des modèles moins réalistes que les machines de Turing,
en se concentrant sur certains aspects.
◮
Compromis réalisme des modèles / expressivité des logiques.
◮
Vérifier de façon approchée.
◮
◮
◮
Vérifier à nombre de pas de calcul borné.
Semi-algorithmes, plus de garantie de terminaison.
...
41/56
Exemple : algorithme de Peterson
Deux processus P0 , P1 . Variables req[0], req[1] et turn partagées.
Code pour Pi :
req [i ] = true
tour = 1- i
while ( req [1 - i] && tour == 1- i )
; // attente
section_critique ()
req [i ] = false
◮
Garantit plusieurs propriétés, en particulier l’exclusion mutuelle.
42/56
Exemple : algorithme de Peterson
Deux processus P0 , P1 . Variables req[0], req[1] et turn partagées.
Code pour Pi :
req [i ] = true
tour = 1- i
while ( req [1 - i] && tour == 1- i )
; // attente
section_critique ()
req [i ] = false
◮
◮
◮
Garantit plusieurs propriétés, en particulier l’exclusion mutuelle.
4 états de contrôle par processus et 3 variables Booléennes
⇒ 42 × 23 = 128 états au plus pour la structure de Kripke.
Seuls ∼ 30 sont accessibles mais protocole non immédiat à prouver.
42/56
Algorithme de Peterson : modélisation
Pi
idlei
req[i] = true
req[i] = false
critiquei
requesti
tour = 1 − i
tour == i ||
¬req[1 − i]?
waiti
else
◮
Autres algorithmes MutEx : http://en.wikipedia.org/wiki/Mutex.
◮
Exemple : Dekker, ∼ 10 lignes de code, ∼ 140 états accessibles.
43/56
SPIN : un model-checker
http://www.spinroot.com
44/56
Gérard Holzmann, concepteur de SPIN
45/56
Un exemple concret : le protocole de
Needham-Schroeder
1978 Publié par Needham et Schroeder.
1989 « Prouvé » correct par Burrows, Abadi, et Needham.
1995 Prouvé erroné par Lowe (17 ans d’utilisation !).
1996 Prouvé erroné par Lowe de façon automatique, en le modélisant en
CSP et en utilisant le logiciel de model-checking FDR.
Now Le bug peut être retrouvé automatiquement avec SPIN.
46/56
Un exemple concret : le protocole de
Needham-Schroeder
◮
But du protocole : authentification sur un réseau.
◮
Moyens : chaque agent A a une paire de « clés » :
◮
◮
◮
KA−1 , clé privée, connue seulement de A. Joue le rôle de clé.
KA , clé publique, connue de tous. Joue le rôle de cadenas.
On l’utilise pour coder les messages envoyés à A.
[m]KA désigne le message m chiffré par KA .
Chaque partie doit s’assurer de l’identité de l’autre partie,
◮
◮
en transmettant un nombre aléatoire chiffré, appelé nonce,
en demandant que le nonce soit décodé et renvoyé.
47/56
Protocole de Needham-Schroeder
[A,NA ]KB
Alice
[NA ,NB ]KA
Bob
[NB ]KB
◮
◮
◮
Hypothèse : un message peut être intercepté, mais pas décrypté sans
clé privée correspondante. Clés privées sûres.
Pour Alice : la seule personne à pouvoir connaître NA est celui qui
possède la clé privée correspondant à KB , c’est donc Bob.
Raisonnement similaire pour Bob.
48/56
Protocole de Needham-Schroeder : attaque
Mais si Alice utilise le protocole pour parler à Charlie, malhonnête...
... Charlie peut se faire passer pour Alice auprès de Bob.
49/56
Protocole de Needham-Schroeder : attaque
Mais si Alice utilise le protocole pour parler à Charlie, malhonnête...
... Charlie peut se faire passer pour Alice auprès de Bob.
[A, NA ]KC
Alice
[NA , NB ]KA
[NB ]KC
[A,NA ]KB
Charlie
[NA ,NB ]KA
Bob
[NB ]KB
49/56
Protocole de Needham-Schroeder : attaque
Mais si Alice utilise le protocole pour parler à Charlie, malhonnête...
... Charlie peut se faire passer pour Alice auprès de Bob.
[A, NA ]KC
Alice
[NA , NB ]KA
[NB ]KC
[A,NA ]KB
Charlie
[NA ,NB ]KA
Bob
[NB ]KB
◮
Alice et Bob suivent honnêtement le protocole (pas Charlie).
◮
Alice parle à Charlie : ok.
49/56
Protocole de Needham-Schroeder : attaque
Mais si Alice utilise le protocole pour parler à Charlie, malhonnête...
... Charlie peut se faire passer pour Alice auprès de Bob.
[A, NA ]KC
Alice
[NA , NB ]KA
[NB ]KC
[A,NA ]KB
Charlie
[NA ,NB ]KA
Bob
[NB ]KB
◮
Alice et Bob suivent honnêtement le protocole (pas Charlie).
◮
Alice parle à Charlie : ok.
49/56
Protocole de Needham-Schroeder : attaque
Mais si Alice utilise le protocole pour parler à Charlie, malhonnête...
... Charlie peut se faire passer pour Alice auprès de Bob.
[A, NA ]KC
Alice
[NA , NB ]KA
[A,NA ]KB
Charlie
[NB ]KC
[NA ,NB ]KA
Bob
[NB ]KB
◮
Alice et Bob suivent honnêtement le protocole (pas Charlie).
◮
Alice parle à Charlie : ok.
◮
◮
Mais Bob parle à Charlie croyant parler à Alice (NB a été révélé à
Charlie).
Comment corriger simplement ?
49/56
Complexité
50/56
Objectif
◮
◮
◮
Classifier les problèmes selon la difficulté des algorithmes pour les
résoudre.
Calculabilité : Peut-on trouver un algorithme qui résout mon problème ?
Complexité : Peut-on trouver un algorithme qui résout mon problème et
qui fonctionne en temps f (n) ? (où n est la taille de l’entrée)
51/56
Des problèmes décidables mais difficiles
◮
Formule propositionnelle en forme normale disjonctive.
Donnée Une formule propositionnelle φ en DNF.
Question Y a-t-il une affectation des variables rendant φ vraie ?
(¬x ∧ ¬ ∧ ¬z ∧ x) ∨ (x ∧ y ∧ ¬z).
52/56
Des problèmes décidables mais difficiles
◮
◮
Formule propositionnelle en forme normale disjonctive.
Donnée Une formule propositionnelle φ en DNF.
Question Y a-t-il une affectation des variables rendant φ vraie ?
(¬x ∧ ¬ ∧ ¬z ∧ x) ∨ (x ∧ y ∧ ¬z).
Formule propositionnelle en forme normale conjonctive.
Donnée Une formule propositionnelle φ en CNF.
Question Y a-t-il une affectation des variables rendant φ vraie ?
(¬x ∨ ¬ ∨ ¬z ∨ x) ∧ (x ∨ y ∨ ¬z) ∧ (y ∨ z).
52/56
Des problèmes décidables mais difficiles
◮
◮
Formule propositionnelle en forme normale disjonctive.
Donnée Une formule propositionnelle φ en DNF.
Question Y a-t-il une affectation des variables rendant φ vraie ?
(¬x ∧ ¬ ∧ ¬z ∧ x) ∨ (x ∧ y ∧ ¬z).
Formule propositionnelle en forme normale conjonctive.
Donnée Une formule propositionnelle φ en CNF.
Question Y a-t-il une affectation des variables rendant φ vraie ?
(¬x ∨ ¬ ∨ ¬z ∨ x) ∧ (x ∨ y ∨ ¬z) ∧ (y ∨ z).
◮
L’un de ces problèmes est facile à résoudre rapidement. Lequel ?
◮
L’autre vaut 1M$.
52/56
Le problème de satisfaisabilité
◮
◮
◮
◮
Pour une formule CNF, le problème est difficile.
Essentiellement, on ne sait pas faire bien mieux que de tester toutes
les combinaisons possibles.
Combien y en a-t-il, sur n variables ?
Ce problème est dit NP-complet : il s’agit d’une classe de problèmes
difficiles, on ne sait pas si on peut les résoudre en temps polynomial.
53/56
D’autres problèmes décidables mais difficiles
◮
◮
Chemin Euclidien
Donnée Un graphe non orienté.
Question Existe-t-il un chemin dans le graphe qui passe une et
une seule fois par chaque arête ?
Chemin Hamiltonien
Donnée Un graphe non orienté.
Question Existe-t-il un chemin dans le graphe qui passe une et
une seule fois par chaque sommet ?
54/56
D’autres problèmes décidables mais difficiles
◮
◮
Chemin Euclidien
Donnée Un graphe non orienté.
Question Existe-t-il un chemin dans le graphe qui passe une et
une seule fois par chaque arête ?
Chemin Hamiltonien
Donnée Un graphe non orienté.
Question Existe-t-il un chemin dans le graphe qui passe une et
une seule fois par chaque sommet ?
◮
L’un de ces problèmes est facile à résoudre rapidement. Lequel ?
◮
L’autre vaut 1M$.
54/56
Problèmes NP-complets
◮
Il s’agit de problèmes dont on peut vérifier une solution rapidement.
◮
Rapidement signifie : en temps polynomial.
◮
◮
◮
Exemples de tels problèmes : CNF-satisfaisabilité, chemin Hamiltonien,
Eternity, Sudoku, etc.
Si on montre qu’un seul de ces problèmes peut être résolu (et pas
seulement vérifié) en temps polynomial, alors tous pourraient l’être...
... car a prouvé des réductions polynomiales entre tous ces problèmes.
55/56
Conclusion
◮
L’informatique fait des progrès impressionnants, mais,
◮
◮
◮
On ne peut pas tout calculer,
On ne peut pas tout calculer rapidement,
Cependant, on programme des algorithmes (incomplets) même pour
pour des problèmes indécidables ou très difficiles (NP-complets).
Questions ?
56/56
Téléchargement