¿El problema de detención es computable para entradas / supuestos particulares?


19

Según tengo entendido, la prueba de que detener el problema no es computable, este problema no es computable porque si tenemos un programa P (x) que calcula si el programa x se detiene o no, tenemos una paradoja al dar P como entrada al mismo P, que tiene: P (P), tratando de decidir si P se detiene o no usa P en sí.

Entonces, mi pregunta es: ¿el programa P puede calcular el problema de detención para todos los demás programas utilizados como entrada, pero P en sí mismo? En otras palabras: ¿el problema de detención no es computable solo en este caso especial o la prueba es más general y me falta algo?


Creo que está malinterpretando la prueba de que el problema de detención no es computable. P (P) simplemente devuelve verdadero, porque P siempre determina si un programa se detiene en tiempo finito. Necesita hacer una construcción un poco más complicada para llegar a una contradicción.
Dan Staley

Creo que obtendría mejores respuestas y quizás prácticamente más relevantes si preguntara si hay muchos programas para los cuales el problema de detención es solucionable. Después de todo, muchos programas son incluso formalmente verificables , lo que ciertamente incluye una determinación de si se detienen con las entradas dadas. Supongo firmemente que ese grupo no puede determinarse (porque eso equivaldría a resolver ..., ya sabes), pero que para la gran mayoría de los programas del mundo real no hay obstáculos para saber si se detendrán o no, para los aportes relevantes.
Peter - Restablece a Monica el

Respuestas:


10

Si es una función computable, entonces , definida comogfg

g(n)={f(n)if nkvotherwise

también es computable, para cualquier elección de .k,v

Básicamente, si tiene un programa que calcula para todos los ' s excepto para , puede "arreglar" ese caso (por ejemplo, usando un ) y obtener otro programa P que calcula g ( n ) para todos n . g ( n ) n n = kPg(n)nn=kif then elsePg(n)n

Por lo tanto, si pudiera calcular la función de detención "a excepción de un caso", también podría calcular la función de detención (sin excepciones). De eso, puede obtener una contradicción como de costumbre.

Conclusión: no, no puede decidir el problema de detención "excepto un caso" (ni "excepto muchos casos").


1
Ok, creo que lo entendí matemáticamente ... Pero me preguntaba: si trataría de escribir un programa que calcule el HP, ¿qué problemas concretos enfrentaría? ¿Por qué y cómo en algún momento entendería que no puedo escribir un programa así?
Alessio Martorana

@AlessioMartorana Depende: ¿cómo abordarías ese problema? Un problema principal es que siempre debe detenerse, incluso cuando su entrada es un programa que no se detiene, por lo que no puede simplemente intentar simular el programa de entrada. P
chi

¿Y si podemos ver el código del programa de entrada? ¿No podemos ver desde el código si el programa se detiene?
Alessio Martorana

2
@AlessioMartorana De hecho, podemos ver el código, pero si hay, por ejemplo, un ciclo while, no podemos decir mucho en general. Un ciclo while puede verificar todas las pruebas posibles de una conjetura matemática arbitraria y detenerse solo si se encuentra una prueba. Decidir si este ciclo se detiene significa decidir si la conjetura es demostrable. Resolver el HP nos daría una máquina que respondería Sí (demostrable) / No (no demostrable) a cualquier pregunta matemática formal. Eso sería irrealmente poderoso.
chi

1
@AlessioMartorana Si creía que había escrito un programa que resuelve el HP, donde su programa podría fallar es de una de dos maneras: para algunos programas, podría devolver el resultado incorrecto (decir que algo se detiene cuando no lo hace o decir que algo no funciona) t se detiene cuando lo hace) y / o su programa de decisión en sí mismo no se detendría en muchas entradas sin que usted pueda saber si realmente no se detendrá o si solo necesita más tiempo para calcular la respuesta.
Shufflepants

21

¿El problema P es computable por el programa P para todos los demás programas utilizados como entrada pero P en sí mismo?

No. Considere la secuencia infinita de programas , donde P i es "Mueva la cabeza i  cuadra hacia la derecha, luego i  cuadra hacia la izquierda, luego haga exactamente lo que P haría". Cada uno de estos programas produce exactamente la misma salida que  P para cada entrada (incluido el bucle para siempre si P se  repite para siempre), pero todos son programas diferentes.P1,P2,PiiiPPP

Y no puede evitar esto si solo requiere que trabaje en programas que no son funcionalmente equivalentes a sí mismos, ya que esa propiedad también es indecidible. Quizás el problema sería decidible cuando se restringiera a esas instancias (aunque sospecho que no lo haría), pero el conjunto de instancias es indecidible, por lo que no podría realizar la restricción.P


15
Sospecho que su última oración es probablemente cierta, pero no creo que se deba a que, debido a que una propiedad es indecidible, restringir el conjunto de entrada basado en esa propiedad dejará el problema indecidible. Como un ejemplo tonto, si restringiera el conjunto de entrada a programas de terminación (una propiedad indecidible), el problema sería decidible (por un programa que siempre devuelve verdadero).
Owen

3
@Owen Cuando la restricción en sí es indecidible, no puede imponer la restricción, por lo que no puede comprarle nada en realidad.
David Richerby

5

Hay algoritmos para mostrar que ciertas clases de programas se detienen o no. Por ejemplo,

  • Es posible determinar algorítmicamente si un programa que modela una máquina de estado finito se detiene.
  • Es posible determinar aritméticamente si una máquina de turing con límites lineales se detiene
  • Si sabe en qué clase de complejidad se encuentra un programa, entonces sabe que el programa se detiene por entradas finitas.

Si bien no existe un algoritmo para determinar si un programa arbitrario se detiene, la mayoría del código se diseñó para detenerse (como la mayoría de las subrutinas) o no (como un bucle infinito para manejar eventos), y es posible determinar algorítmicamente cuál es cuál. En otras palabras, puede tener un algoritmo que responda ya sea "se detiene", "no se detiene" o "No sé", y dicho algoritmo puede diseñarse para cubrir suficientes programas que serían útiles.


¿Qué tiene esto que ver con goto? ¿No podemos tener un programa que use goto y aún decidir si se detiene, siempre que modele una máquina de estados finitos?
Bergi

Iba a escribir sobre la detención en términos de bucles for, y luego lo cambié solo para hablar sobre máquinas de estados finitos y otras cosas
Antonio Pérez

4

Las pruebas por contradicción no tienen que ser exhaustivas , un solo contraejemplo es suficiente. La prueba de que el problema de detención es indecidible le proporciona un ejemplo de P para el que no se puede decidir la propiedad de detención. Esta prueba no indica que P es el único programa de este tipo, de hecho, puede haber pruebas independientes que construyen clases de P. completamente diferentes.


3

La prueba es de hecho más general: el problema de detención es un caso especial del teorema de Rice , que establece

Φ

UNsiΦ(UN)Φ(si)

XX

Usted puede obtener algunos resultados, restringiendo el espacio de programas que desea trabajar, a pesar de estas restricciones tienen que ser bastante drástico. Por ejemplo, si tiene la garantía de que el programa que recibe se detiene dentro de 100 pasos o se ejecuta para siempre, decidir si se detiene se vuelve fácil.

norteksisi(k)


1
norte

1
El último párrafo se parece a Busy Beaver.
Mal

Con respecto a las restricciones "bastante drásticas": los lenguajes de programación totales son una cosa. Tienden a requerir un grado relativamente alto de sofisticación, por lo que tal vez lo consideres drástico, pero es posible resolver problemas reales en un espacio de programas que probablemente se detengan.
Ben Millwood

Incluir un enlace a en.wikipedia.org/wiki/Rice%27s_theorem tendría sentido IMO.
Dmitry Grigoryev

Gracias, he actualizado la respuesta. @BenMillwood Ciertamente, pero dada su solución es "detener todo", no estoy seguro de que sea realmente lo que Alessio está buscando. Sin embargo, sería interesante un caso en el que el comportamiento de detención sea decidible pero no trivial: ¿quizás Agda + tipos coinductores?
Anton Golov

0

Sea R un conjunto recursivamente enumerable pero no recursivo. Hay infinitos conjuntos de este tipo. Sea T una máquina de Turing que se detiene en la entrada k si y solo si k está en R. Tal T existe para cualquier conjunto recursivamente enumerable. Es imposible escribir un programa que pueda resolver el problema de detención de esta T. Esto se debe a que cualquier algoritmo para determinar si T se detiene produciría un algoritmo para determinar la pertenencia a R, lo cual es imposible si R no es recursivo. Dado que hay infinitamente tales R, cada una de las cuales proporciona diferentes máquinas de Turing, hay infinitas máquinas de Turing en las que cualquier intento de detener el programa P podría fallar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.