Je comprends que la plupart des problèmes sont triviaux si un oracle d'arrêt est disponible (ou, je pense de manière équivalente, l'hyper-calcul). Cependant, appliquer l'argument qui montre que le problème d'arrêt est impossible pour une machine Turing montre également qu'il est impossible pour un oracle Turing + de décider du problème d'arrêt pour un oracle Turing +. Existe-t-il des exemples concrets et pratiques de problèmes insolubles par un oracle qui s'arrête?
Remarque: par "oracle", je veux dire oracle pour une machine de Turing standard, pas un TM avec un oracle lui-même.
Réponses:
Prenez juste un problème dont le degré de Turing est supérieur à , qui est le degré de l'Oracle Halting. En termes de hiérarchie arithmétique, vous voulez des problèmes supérieurs à . Exemples de tels problèmes (où est la ème fonction partielle calculable et est le - e ensemble énumérable):0′ Σ01 ϕn n Wn={k∈N∣ϕn(k) is defined} n
Aucun de ces problèmes ne peut être résolu même si vous avez un Oracle Halting. Par exemple, considérons le deuxième exemple, "is total?" Étant donné comment le Halting Oracle nous aiderait-il à décider si la machine de Turing codée par s'arrête à chaque entrée? n nφn n n
[Ajouté le 03-06-2014] Pour un aspect "pratique" de tout cela, considérons le problème: un programmeur a écrit une fonction
void charge_credit_card(int card_number, int amount)
et nous aimerions savoir si la fonction se termine sur toutes les entrées. Il est impossible d'écrire un compilateur qui peut vérifier automatiquement cela en général. De plus, même si nous permettons au compilateur de nous poser des questions de la forme "secharge_credit_card
termine-t-il quand on donne une entrée(k,m)
?", C'est toujours impossible.la source
int
, bien évidemment. Avez-vous vraiment besoin de moi pour écrireBigInt
ou quelque chose du genre, ou vous plaindrez-vous alors que la mémoire de l'ordinateur est limitée?