Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Problèmes fondamentaux de l’informatique
w3.uqo.ca/luigi
2
Problèmes fondamentaux
L’informatique et le génie informatique sont conditionnés par des problèmes fondamentaux d’indécidabilité Nous pouvons écrire un programme pour décider si un programme n’a pas d’erreurs de syntaxe Mais nous ne pouvons pas écrire un programme pour décider si un programme calcule le résultat désiré L’autre solution, de simplement exécuter le programme et voir le résultat, n’est pas complètement satisfaisante, car Nous ne pouvons pas essayer toutes les valeurs d’entrée possibles Un programme pourrait prendre un jour, un mois, un an pour rendre son résultat, il pourra donner un résultat ou pourrait ne jamais le rendre… INF6001 Indécidabilité
3
A very old puzzle Epimenides Paradox (6th Century BC), modified by Eubulides (4th Century BC) Certain statements can neither be true nor false ‘The statement written on this line is false’ is this statement true or false? If this statement is true, then it cannot be false If this statement is false, then it cannot be true Other examples: I am lying – cannot be true nor false Everyone is lying… Should a library catalogue include the catalogue itself as one of its books? It should, and it shouldn’t INF6001 Indécidabilité
4
Type theory A solution for this problem was proposed around 1910 by logician/philosopher Bertrand Russell. He postulated a type theory, which essentially makes these statements illegal They cause a type-checking error, just as the one your compiler will generate if you apply a function to the wrong arguments However this solution is still a matter of debate: One cannot simply outlaw all applications of a statement to itself: For example, there is nothing wrong with this statement: Cette phrase est écrite en français Similarly, one cannot outlaw applications of a function or a program to itself: One can apply a syntax checker program to the program itself INF6001 Indécidabilité
5
Problèmes indécidables en informatique
L’application d’idées semblables en informatique conduit à la conclusion que: Certains problèmes sont indécidables C’est-à-dire, il n’est pas possible d’écrire un programme pour les résoudre Un programme pour résoudre un problème de ce type est logiquement impossible Si le programme existait, une contradiction logique en dériverait Nous verrons que la manière d’arriver à une telle preuve est essentiellement: Supposons qu’un tel programme existe, et appliquons-le à lui-même (diagonalisation!) Ceci conduit à une contradiction, donc le programme ne peut pas exister INF6001 Indécidabilité
6
Undecidability results (well before the invention of computers!)
In the early 1930s, it was discovered that there are mathematical problems that cannot be solved by any program Such problems are called undecidable The first undecidability results were proven by Gödel in a paper published in 1931 (undecidability of predicate calculus with number theory) This is often cited as one of the major scientific discoveries of the 20th century Alan Turing proved the undecidability result for the halting of Turing machines a paper published in 1936 His proof was quite complicated, nowadays we can understand it in simple terms INF6001 Indécidabilité
7
The main idea: diagonalization
The main issue with Epimenides/Eubulides paradox is that it allowed a statement to refer to itself. This process of applying a function to itself is called diagonalization Programs can be applied to themselves: for example, a syntax checker program SC can be applied to itself, to decide if SC is free of syntax errors: SC(SC) will return either true or false, no problem… But in some cases, thinking of the consequences of applying a program P to itself leads to the conclusion that program P cannot exist, cannot be written This is expressed by saying that the problem that P is supposed to solve is undecidable INF6001 Indécidabilité
8
Une preuve simplifiée du théorème d’indécidabilité
On peut donner à un ordinateur un programme qui répond VRAI ou FAUX à une affirmation qu'on lui donne, sans jamais se tromper. La question est de savoir: Si un humain est capable de savoir si la phrase qu'il donne à la machine est vraie ou fausse, la machine est-elle aussi capable de découvrir la vérité ? Gödel donne alors la phrase suivante à la machine: "La machine ne répondra jamais VRAI à cette phrase" Que fait la machine ? Si elle répond VRAI, elle affirme que "La machine ne répondra jamais VRAI à cette phrase" est une affirmation vraie. Or ce n'est pas le cas, puisqu'elle vient justement de répondre VRAI à la phrase. Si la machine ne se trompe pas, elle ne peut donc pas répondre VRAI. Si elle répond FAUX, elle affirme que "La machine ne répondra jamais VRAI à cette phrase" est une affirmation fausse. Or l'affirmation n'est pas fausse puisque la machine vient justement de répondre FAUX. Si la machine ne se trompe pas, elle ne peut donc pas répondre FAUX. Et nous, pouvons nous répondre à la question ?... La phrase dit : "La machine ne répondra jamais VRAI à cette phrase". Nous venons de voir qu'en effet, la machine ne peut pas répondre VRAI. Nous savons donc que cette phrase est une vérité. Pourtant la machine ne pourra pas la découvrir... Adapté de (accédé janvier 2004) INF6001 Indécidabilité
9
Application to problems of software engineering: Turing’s Halting problem
Suppose one could write a program Stops(Z,X) to decide whether an arbitrary program Z will stop, if given as input the string X Using Stops we can define a function Loop which uses Stops to determine whether or not another function W halts when given its own text as input If W stops then Loop enters an infinite loop, otherwise Loop stops Loop(W) = if Stops(W,W) then while (true) {} else stop Then we run Loop(Loop), i.e. if Stops(Loop,Loop) then while (true) {} else stop INF6001 Indécidabilité
10
The contradiction If Stops(Loop,Loop) returns true then:
From the definition of Stops, Loop stops on input Loop From the definition of Loop, Loop loops on input Loop If Stops(Loop,Loop) returns false then: From the definition of Stops, Loop loops on input Loop From the definition of Loop, Loop stops on input Loop Contradiction in both cases! No such program can exist, the program Stops cannot be written INF6001 Indécidabilité
11
Consequences By static analysis of an arbitrary program it is impossible to determine, in general If the program has an infinite loop If it has a deadlock Whether a test in the program will give true or false If an arbitrary program path can ever be executed If an arbitrary statement can ever be executed If a variable will ever be used Etc., etc. INF6001 Indécidabilité
12
Mais il ne faut pas être trop pessimistes…
Les questions mentionnées ne peuvent pas être intégralement résolues de manière générale Ceci ne veut pas dire qu’elles ne puissent pas être résolues dans un grand nombre de cas particuliers, par des algorithmes spécifiques à ces cas particuliers C’est un des sujets de l’informatique et du génie informatique… INF6001 Indécidabilité
13
Décidabilité et complexité
Il est important de ne pas confondre les problèmes indécidable et les problèmes à haut niveau de complexité Un problème indécidable est un problème logiquement impossible à résoudre, ni avec un ordinateur présent ni futur (à moins de trouver une façon différente de le formuler) Aucun algorithme ne peut exister Un problème à haute complexité (par exemple, exponentiel) est un problème qui demande des calculs laborieux Des algorithmes existent Le calcul peut être effectué sur des petits ensembles Le calcul pourrait devenir pratique avec des ordinateurs futurs, p.ex. quantiques, si jamais ils deviendront réalité INF6001 Indécidabilité
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.