Information, Calcul, Communication Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 1er module du cours qui offre une 1e approche des notions de calcul et d’information. Information, Calcul, Communication 1. Information & Calcul – Leçon 3: Théorie du Calcul Clip 3: Notion de Décidabilité B. Moret, J-C. Chappelier, R. Boulic, commentaire: P. Janson
Plan de la leçon Formalisation de la notion de calcul: les machines de Turing Problème = question + données Théorie du calcul Dénombrement et calculabilité Calculabilité et décidabilité Théorie de la complexité Complexité des problèmes Problèmes de complexité P = calculables avec coût polynomial Problèmes de complexité NP = vérifiables avec coût polynomial Le clip précédent s’est intéressé à la notion de dénombrement qui a permis de comprendre celle de calculabilité. Le présent clip va s’intéresser à un autre grand problème de la théorie du calcul: celui de la décidabilité.
Décision et décidabilité Problème de décision = question à laquelle on ne peut répondre que par OUI ou NON Problème décidable => question à laquelle un algorithme peut répondre par OUI ou NON en un nombre fini d'étapes Problème indécidable => question à laquelle aucun algorithme ne peut répondre OUI ou NON 1 On appelle problème de décision une question à laquelle on ne peut répondre que par oui ou par non. 2 Un problème est alors réputé décidable s’il consiste en une question à laquelle un algorithme peut répondre par OUI ou NON en un nombre fini d’étapes. 3 Par contraste un problème est réputé indécidable si aucun algorithme ne peut jamais répondre OUI ou NON à la question du problème.
Exemple de problème décidable M est-il un multiple de N ? (M et N entiers > 1) "8 est multiple de 2" est VRAI – "16 est multiple de 3" est FAUX Mais deux instances du problème ne suffisent pas à déterminer si le problème est décidable en général pour toutes les valeurs possibles de M et N Par contre l'algorithme suivant peut répondre à la question pour tout M et N Faire la division entière de M par N pour obtenir le reste R Si le reste R est nul répondre VRAI Sinon répondre FAUX => Ce problème est donc décidable Pour mieux comprendre cette notion de décidabilité, considérons un problème décidable et un problème non-décidable. 1 Comme exemple de problème décidable, prenons celui qui consiste à déterminer si un entier M est un multiple d’un entier N. 2 8 est clairement un multiple de 2 alors que 16 n’est clairement pas un multiple de 3. 3 Mais cette décision dans 2 instances particulières du problème ne permet pas de dire si le problème est décidable en général, pour toutes les valeurs possibles de M et N. 4 Dans le cas présent, il existe un algorithme qui peut répondre à la question en général: Il suffit de diviser M par N et de tester le reste R de cette division. S’il est nul, M est divisible par N et sinon il ne l’est pas. 5 Le problème est donc bien décidable.
Exemple de problème indécidable: l’arrêt d’un programme Est-il toujours possible de décider si un programme P(x) implémentant un algorithme acceptant une entrée x entière s’arrête pour toute valeur de x? Exemple trivial P(x) : Tant que x > 0 incrémenter x Si x = 0, P(x) s’arrête immédiatement Par contre si x > 0, P(x) ne s’arrête jamais (boucle sans fin) => La question de l’arrêt du programme P(x) n’est donc pas décidable (Voir http://wandida.com/fr/archives/168 sur l’indécidabilité de l’arrêt des programmes) Comme exemple de problème non-décidable prenons celui de l’arrêt d’un programme. 1 Ce problème de l’arrêt d’un programme consiste en la question: Est-il toujours possible de décider si un programme P(x) implémentant un algorithme acceptant une donnée x entière s’arrête pour toute valeur de x? 2 Pour illustrer l’indécidabilité de cette question dans un cas particulier considérons le programme P(x) : Tant que x>0 incrémenter x 3 Il est évident que si x est nul, le programme ne fait rien et s’arrête immédiatement. 4 Par contre il est tout aussi évident que si x>0, le programme entre dans une boucle infinie et ne s’arrête jamais. 5 La question de l’arrêt d’un programme tel que P(x) n’est donc pas décidable … 6 … comme l’explique par ailleurs ce clip du Prof. Guerraoui
Outil de preuve: l’autoréférence peut mener au paradoxe L’autoréférence dans le paradoxe du philosophe Crétois Epiménides «Tous les Crétois sont des menteurs» (ou «Je suis en train de vous mentir») L’autoréférence dans le paradoxe de Berry / Russel (18 mots!) «N est le plus petit entier positif qui ne peut pas être défini en moins de 20 mots» L’autoréférence dans le dessin paradoxal de Geluck Mais encore une fois l’indécidabilité dans ce cas particulier n’implique pas l’indécidabilité en général. Pour prouver l’indécidabilité de l’arrêt d’un programme en général on a besoin de recourir à un outil appelé autoréférence qui est utile (et dangereux!) en ce qu’il peut mener à des paradoxes absurdes. 1 Un 1er exemple célèbre d’un paradoxe autoréférentiel est dû au philosophe Crétois Epiménides qui aurait dit que tous les Crétois étaient des menteurs. Comme il était Crétois il aurait aussi bien pu dire que tout ses dires ne sont que des mensonges … et on voit tout de suite l’absurdité paradoxale résultant de cette phrase qui fait autoréférence à son contexte. 2 Un 2nd exemple célèbre plus récent de paradoxe autoréférentiel est dû à Bertrand Russel qui a défini en 18 mots que N est le plus petit entier positif qui ne peut pas être défini en moins de 20 mots. 3 De tels paradoxes autoréférentiels peuvent s’imaginer dans tous les domaines. C’est ce que le dessinateur humoriste Philippe Geluck a fait avec son fameux chat.
Preuve de l’indécidabilité de l’arrêt d’un programme Preuve par l’absurde basée sur l’autoréférence Imaginons qu’il existe un programme Arrêt(P,x) implémentant un algorithme Arrêt capable de décider si un programme P(x) s’arrête ou pas, où Arrêt, P, x sont des textes Définissons un nouveau programme Q(P) : Tant que Arrêt(P,P) boucler ( Arrêt(P,P) décide de l’arrêt de P prenant comme entrée son propre texte P ) Fournissons ensuite comme entrée P à Q le texte de son propre programme Q (autoréférence) Donc Q(Q) exécute Arrêt(Q,Q) Si Arrêt(Q,Q) décidait que Q(Q) s’arrête, alors Q(Q) ne s’arrêterait pas => paradoxe Si Arrêt(Q,Q) décidait que Q(Q) ne s’arrête pas, alors Q(Q) s’arrêterait => paradoxe Donc un programme Arrêt(P,x) décidant de l’arrêt de P sur x ne peut pas exister => Le problème de l’arrêt d’un programme est donc indécidable en général Ayant défini l’autoréférence et les paradoxes auxquels elle peut mener, revenons-en à la preuve de l’indécidabilité du problème de l’arrêt d’un programme en général. Cette preuve se fait par l’absurde résultant d’autoréférence. 1 Supposons – ce qui va s’avérer absurde – qu’il existe un algorithme appelé Arrêt(P,x)) qui permette de décider de l’arrêt de tout programme P d’une variable x, Arrêt, P, et x étant exprimés sous forme de simple chaînes de caractères textuelles. 2 Définissons maintenant un nouveau programme Q(P) : Tant que Arrêt(P,P) boucler. Q est donc un programme qui entre dans une boucle infinie si P s’arrête quand on lui soumet comme entrée son propre texte. 3 Imaginons alors de soumettre à Q comme donnée d’entrée le texte de son propre programme Q, donc une autoréférence! 4 Concrètement Q(Q) exécuterait donc Tant que Arrêt(Q,Q) boucler. 5 Si dans ce cas l’hypothétique Arrêt(Q,Q) décidait que Q s’arrête quand on lui soumet son texte Q comme entrée, alors Q(Q) entrerait dans la boucle infinie, ce qui est un paradoxe absurde. 6 Si par contre l’hypothétique Arrêt(Q,Q) décidait que Q ne s’arrête pas alors Q(Q) s’arrêterait immédiatement, ce qui est un paradoxe tout aussi absurde. 7 Donc un programme Arrêt(P,x) décidant de l’arrêt de P pour tout x ne peut pas exister. 8 Et donc le problème de l’arrêt d’un programme en général n’est pas décidable.
Autres problèmes indécidables Quelle est la longueur minimale de description de quelque chose? Un programme contient-il un morceau de code inutile? (Théorème de Rice) Deux programmes calculent-ils la même chose ? (Théorème de Rice) Une configuration du jeu de la vie de Conway finit-elle par disparaitre ou persiste-t-elle toujours ? Peut-on paver le plan sans recouvrement ni espace vide avec un ensemble de formes géométriques ? Problème indécidable PERSONNE ne trouvera jamais de solution ! =>> beaucoup plus fort que « pas de solution connue » (= ignorance) (≈ peut-être que quelqu'un en trouverait un jour une) Il existe en fait une infinité de problèmes dont les questions sont indécidables, bien plus que de problèmes décidables. Citons seulement quelques exemples de questions indécidables: 1 Quelle est la description la plus courte de quelque chose? 2 Un programme contient-il un morceau de code inutile? (Théorème de Rice) 3 Deux programmes calculent-ils la même chose ? (Théorème de Rice) 4 Une configuration du jeu de la vie de Conway finit-elle par disparaitre ou persiste-t-elle toujours ? 5 Peut-on paver le plan sans recouvrement ni espace vide avec un ensemble de formes géométriques ? 6 La preuve qu’une question est indécidable est une déclaration extrêmement puissante. Elle implique que personne ne pourra jamais donner une réponse à cette question. 7 «Une question est indécidable» dit bien plus que «une question n’a pas de réponse». En effet, un jour quelqu’un pourrait trouver une réponse à une question qui n’en a pas … tant que cette question n’a pas été prouvée indécidable. Source: wikiart.org par M. C. Escher
Bilan La plupart partie des problèmes mathématiques que l’on peut imaginer n’ont pas de solution algorithmique L’aspect clef de ces problèmes est l’autoréférence un outil (presque trop) puissant en informatique La plupart de ces problèmes sont artificiels et sans intérêt mais certains sont importants en pratique en particulier des questions de caractéristiques des programmes (arrêt, longueur minimale, code « mort », équivalence, etc.) Pour ces problèmes intéressants il peut exister des algorithmes résolvant des instances pratiques courantes 1 En réalité la majorité des problèmes mathématiques que l’on peut imaginer n’ont pas de solution algorithmique. 2 L’aspect clef de ces problèmes est l’autoréférence, un outil (presque trop) puissant en informatique. 3 La plupart de ces problèmes sont artificiels et sans intérêt mais certains d’entre eux sont importants en pratique, en particulier des questions portant sur les caractéristiques des programmes, p.ex. leur arrêt, leur longueur minimale, leur inclusion de code « mort », Leur équivalence à d’autres programmes, etc.). 4 Pour de tels problèmes intéressants il peut cependant exister des algorithmes capables de répondre à la question dans des cas pratiques spécifiques.
Que faire en cas d’indécidabilité ? Généralité du problème Nombre fini d’instances Nombre infini d’instances Problèmes résolus par des algorithmes connus Pour considérer les problèmes en perspective … 1 … on peut les diviser en problèmes admettant un nombre d’instances fini et problèmes présentant un nombre d’instances infini. 2 Ceux de la 1e catégorie sont facilement résolu par une table qui peut être pré-calculée et consultée en cas de besoin. 3 Parmi les autres, seuls une minorité sont calculables par des algorithmes connus. 4 La majorité des problèmes sont indécidables. 5 Entre ces deux extrêmes se trouvent des problèmes que l’on peut résoudre en élargissant des algorithmes connus à des données plus générales … 6 … ou en divisant un problème indécidable en des sous-problèmes plus simples et décidables. Elargir le problème avec plus de tolérance sur les données Précalculer et consulter une table Problèmes Indécidables Identifier des sous-problèmes plus simples et décidables