¿Es el problema de detención decidible para programas puros en una computadora ideal?

25

Es bastante simple entender por qué el problema de detención es indecidible para los programas impuros (es decir, aquellos que tienen E / S y / o estados dependientes del estado global de la máquina); pero intuitivamente, parece que la interrupción de un programa puro en una computadora ideal sería decidible, por ejemplo, mediante análisis estático.

¿Es éste de hecho el caso? Si no, ¿cuáles son algunos contraejemplos o documentos que refutan esta afirmación?

Jules
fuente
35
Tenga en cuenta que las pruebas estándar de que el problema de detención es indecidible (como el descrito en wikipedia: en.wikipedia.org/wiki/Halting_problem#Sketch_of_proof ) funcionan con modelos de cómputo que ni siquiera intentan representar E / S. Y aunque, por ejemplo, las máquinas de Turing tienen estado, su comportamiento se define formalmente en términos de funciones puras. Entonces, en cierto sentido, "programas puros en una computadora ideal" es en realidad el entorno en el que el problema de detención generalmente se demuestra indecidible.
Ben
1
¿Qué investigación has hecho? Google "Problema de detención" ya debería haber respondido esta pregunta por usted.
Jonathan Cast el

Respuestas:

38

Aquí hay una prueba de indecidibilidad por reducción del problema de detención.

Reducción: Dada una máquina y una entrada x , construya una nueva máquina Turing H que no lea ninguna entrada, pero escriba M y x en la cinta y simule M en x hasta que M se detenga.MxHMxMxM

El comportamiento de esta nueva máquina es independiente de la cinta de entrada, por lo que es una máquina Turing pura en la que solo es aplicable el análisis estático. Si el análisis estático fuera suficiente, podría mostrar si H se detiene, lo que mostraría si M se detiene en x , lo que resolvería el problema de detención para máquinas impuras, lo que sabemos es indecidible, y por lo tanto su problema también es indecidible.HHMx

Lieuwe Vinkhuijzen
fuente
@HendrikJan ¡Precisamente!
Lieuwe Vinkhuijzen
16

No, no lo es, y además no depende de E / S.

Contraejemplo simple: escriba un programa para encontrar un número impar perfecto (este es un problema abierto: aún no sabemos si existe): no toma ninguna entrada y no realiza ninguna tarea impura ; puede detenerse cuando encuentra uno, o puede funcionar infinitamente (en el caso de que tal número no exista). Ahora bien, si el análisis estático fuera lo suficientemente poderoso como para determinar el caso de detención, se usaría para responder esto (y muchas más preguntas) donde detener significaría la existencia positiva de dicho número y no detenerlo significaría que no existe dicho número, pero desafortunadamente el análisis estático No es tan poderoso.

Mal
fuente
18
Realmente no veo el punto en esta respuesta. El hecho de que actualmente no sepamos si existe tal número no implica que no exista, ni que en el futuro no podamos escribir un analizador estático que pueda decidir esto. Una mejor alternativa es usar algún problema indecidible conocido. Por ejemplo, se sabe que no existe un programa que pueda resolver todas las ecuaciones de diofantina, y resolver dicha ecuación es una tarea similar a la que se muestra en la respuesta.
Bakuriu
2
Bueno, si el problema de Detener era decidible, entonces todos los problemas serían decidibles si podemos ponerlo en un formulario donde preguntamos si un programa se detiene o no. O cualquier pregunta de la forma: hay un conjunto contable, y puedo decidir si algún elemento potencial individual está en el conjunto o no. ¿Está vacío el conjunto? Las ecuaciones de diofantina tienen un conjunto contable de soluciones potenciales, y puedo verificar si cada solución potencial individual es una solución o no. Si el problema de detención fuera decidible, las ecuaciones de diofantina serían decidibles.
gnasher729
10
@ gnasher729 Sí, y dado que no son el problema, detener es indecidible. Ese es mi punto. Si bien la afirmación en esta respuesta no tiene implicación real: "Considere esta definición matemática. Actualmente no tenemos idea de si un programa que decide esto se detendrá o no, pero mañana un chico podría descubrir que sí o no y esta respuesta se convierte en 100 % sin sentido ".
Bakuriu
66
¿No es este un caso similar a ¿Cómo puede ser decidible si π tiene alguna secuencia de dígitos? , el problema de detención es indecidible en clases de problemas, no en problemas individuales .
npostavs
2

La prueba clásica por diagonalización es una máquina pura , no solo es una máquina de Turing pura, sino que no se basa en "problemas abiertos".

Por ejemplo, una máquina de Turing que ejecuta la Conjetura de Collatz tiene un estado de detención desconocido, pero eso se basa en nuestra ignorancia sobre la Conjetura de Collatz, un día podríamos probar que Collatz tenía razón y luego podríamos decidir el estado de Detención de la conjetura. (O para algunas entradas no se detiene, o siempre se detiene).

Entonces, la Conjetura de Collatz ya podría responder a su pregunta (al menos temporalmente), pero se basa en algo que no sabemos . En cambio, la prueba clásica es un problema resuelto: ya sabemos que es indecidible .

Desarrollador de juegos
fuente
0

Solo para el registro, la prueba estándar de la indecidibilidad del problema de detención se basa en la misma idea que quines: que es posible escribir un programa cuyo término se evalúe en el código fuente de todo el programa. Luego, si hubiera una función haltsque, dado el código fuente de un programa, devuelva True si ese programa se detuvo en todas las entradas y False, de lo contrario, este sería un programa legal:

prog() = if halts "prog" then prog() else ()

donde "prog"habría alguna expresión que evaluara el código fuente para prog; sin embargo, puede ver rápidamente que se progdetiene (para todas las entradas) si no se detiene, lo cual es una contradicción. Nada en esta prueba se basa en E / S de ninguna manera (¿necesita E / S para escribir una quine?).

Por cierto, es posible que desee buscar "E / S basadas en cuadros de diálogo" para obtener más evidencia de que la E / S es completamente irrelevante para su problema (básicamente, los programas que hacen E / S pueden reducirse a programas que toman datos como argumentos explícitos (explícitos) y resultados de retorno como resultados adicionales (explícitos) en un lenguaje vago). Desafortunadamente, no puedo encontrar una página razonable, imparcial (o pro-diálogo) en la web en este momento.

Jonathan Cast
fuente