Entiendo que la mayoría de los problemas son triviales si hay un oráculo de detención disponible (o, creo, equivalentemente, hipercomputación). Sin embargo, aplicar el argumento que muestra que el problema de detención es imposible para una máquina de Turing también muestra que es imposible que un oráculo de Turing + decida el problema de detención para un oráculo de Turing +. ¿Hay ejemplos reales y prácticos de problemas que no se puedan resolver con un oráculo de detención?
Nota: por "oráculo" me refiero a oráculo para una máquina Turing estándar, no a un TM con un oráculo en sí.
Respuestas:
Simplemente tome un problema cuyo grado de Turing está por encima de , que es el grado de The Halting Oracle. En términos de la jerarquía aritmética , desea problemas que estén por encima de . Ejemplos de tales problemas (donde es la -ésima función computable parcial y es el - th conjunto computablemente enumerable):0′ Σ01 ϕn n Wn={k∈N∣ϕn(k) is defined} n
Ninguno de estos puede resolverse incluso si tiene un Oracle detenido. Por ejemplo, considere el segundo ejemplo, "¿es total?" Dado ¿cómo nos ayudaría el Halting Oracle a decidir si la máquina de Turing codificada por detiene en cada entrada? n nφn n n
[Agregado 2014-06-03] Para un aspecto "práctico" de todo esto, considere el problema: un programador ha escrito una función
void charge_credit_card(int card_number, int amount)
y nos gustaría saber si la función termina en todas las entradas. Es imposible escribir un compilador que pueda verificar automáticamente esto en general. Además, incluso si permitimos que el compilador nos haga preguntas de la forma "¿charge_credit_card
termina cuando se le da entrada(k,m)
?", Todavía es imposible.fuente
int
, obviamente. ¿Realmente necesita que escribaBigInt
o algo así, o se quejará de que la memoria de la computadora es finita?