Résumé: Selon le théorème de Rice, tout est impossible. Et pourtant, je fais ce truc soi-disant impossible tout le temps!
Bien entendu, le théorème de Rice ne dit pas simplement "tout est impossible". Il dit quelque chose d'assez plus spécifique: "Chaque propriété d'un programme informatique est non-calculable."
(Si vous voulez diviser les poils, chaque propriété "non triviale". Autrement dit, les propriétés que tous les programmes possèdent ou ne possèdent pas sont trivialement calculables. Mais toute autre propriété n'est pas calculable.)
C'est ce que dit ou semble dire le théorème. Et vraisemblablement un grand nombre de personnes très intelligentes ont soigneusement vérifié l'exactitude de ce théorème. Mais cela semble complètement défier la logique! Il existe de nombreuses propriétés de programmes qui sont triviales à calculer! Par exemple:
Combien d'étapes un programme exécute-t-il avant de s'arrêter? Décider si ce nombre est fini ou infini est précisément le problème de Halting, qui est non calculable. Décider si ce nombre est supérieur ou inférieur à un fini est trivial! Il suffit d’exécuter le programme jusqu’à étapes pour voir s’il s’arrête ou non. Facile!
De même, le programme utilise-t-il plus ou moins de unités de mémoire dans ses premières étapes d'exécution? Trivialement calculable.
Le texte du programme mentionne-t-il une variable nommée ? Une analyse textuelle triviale révélera la réponse.
Le programme appelle-t-il la commande ? Encore une fois, scannez le texte du programme à la recherche de ce nom de commande.
Je peux voir beaucoup de propriétés qui ne semblent pas non plus être calculables; Par exemple, combien d’additions une série complète du programme effectue-t-elle? Eh bien, c'est presque la même chose que de demander combien d' étapes le programme exécute, ce qui est pratiquement le problème de l'arrêt. Mais il semble y avoir de nombreuses propriétés de programme sur le bateau qui sont vraiment très faciles à calculer. Et pourtant, le théorème de Rice insiste sur le fait qu'aucun d'entre eux n'est calculable.
Qu'est-ce que j'oublie ici?
la source
Réponses:
Pour les besoins de cette discussion, un "programme" est un morceau de code qui prend toujours un entier en tant qu'entrée et qui est exécuté à l'infini ou renvoie un entier. Nous disons que deux programmes et sont égal extensionnellement si elles calculent la même fonction, à savoir, pour chaque numéro soit à la fois et courir pour toujours, ou à la fois fin et sortie le même nombre.f g n f(n) g(n)
Une propriété d'extension de programmes est une propriété qui respecte l'égalité d'extension, c'est-à-dire que si et sont égaux sur le plan d'extension, ils ont tous les deux la propriété ou ne l'ont pas.P f g P
Voici quelques exemples de propriétés non extensibles:
k
. (Nous pouvons renommer les variables.)Je suis sûr que vous avez remarqué que j'ai énuméré précisément vos supposés contre-exemples du théorème de Rice, qui dit:
Il existe une autre manière d’expliquer cela: vous devez faire la distinction entre un programme et la fonction qu’il calcule. De nombreux programmes différents calculent la même fonction (ils sont tous égaux par extension). Le théorème de Rice concerne les propriétés des fonctions et non les propriétés des programmes qui les calculent.
la source
Malentendu fondamental:
Ce n'est pas ce dont parle le théorème de Rice. Il parle des propriétés des fonctions et du fait que l'ensemble des programmes calculant cette fonction n'est pas décidable. Formellement, étant donné l'ensemble∅⊂P⊂RE
n'est pas décidable. Pour les propriétés que vous mentionnez, vous ne trouverez pas de approprié pour lequel l'ensemble de programmes comporte ce formulaire. Certains programmes d'une fonction peuvent avoir la propriété alors que d'autres (pour la même fonction) peuvent ne pas en avoir. Voir ici pour quelques exemples.P
Le théorème de Rice traite des propriétés sémantiques (propriétés de la fonction calculées par un programme, par exemple domaine ou plage de valeurs). Vous faites référence à des propriétés syntaxiques (propriétés du programme , telles que le temps d’exécution ou le nombre de variables utilisées).
Pas grand chose semble être connu pour les propriétés syntaxiques; voir cette question .
la source