Porque muchos problemas realmente prácticos son el problema de detención disfrazado. Una solución para ellos resuelve el problema de detención.
¿Desea un compilador que encuentre el código de máquina más rápido posible para un programa dado? En realidad el problema de detención.
Tiene JavaScript, con algunas variables con niveles de seguridad altos y otras con niveles de seguridad bajos. Desea asegurarse de que un atacante no pueda acceder a la información de alta seguridad. Esto también es solo el problema de detención.
Tiene un analizador para su lenguaje de programación. Lo cambia, pero desea asegurarse de que aún analice todos los programas que solía. En realidad el problema de detención.
Tiene un programa antivirus y desea ver si alguna vez ejecuta una instrucción maliciosa. En realidad, solo el problema de la detención.
En cuanto al ejemplo de Wikipedia, sí, podría modelar una computadora moderna como una máquina de estado finito. Pero hay dos problemas con esto.
Cada computadora sería un autómata diferente, dependiendo de la cantidad exacta de bits de RAM. Por lo tanto, esto no es útil para examinar un fragmento de código en particular, ya que el autómata depende de la máquina en la que puede ejecutarse.
Necesitaría estados si tiene n bits de RAM. Entonces, para su computadora moderna de 8GB, eso es . Este es un número tan grande que Wolfram Alpha ni siquiera sabe cómo interpretarlo. Cuando hago dice que tiene dígitos decimales. Esto es claramente demasiado grande para almacenar en una computadora normal.2 32000000000 2 10 9 3000000002n2320000000002109300000000
El problema de detención nos permite razonar sobre la dificultad relativa de los algoritmos. Nos permite saber que hay algunos algoritmos que no existen, que a veces, todo lo que podemos hacer es adivinar un problema y nunca saber si lo hemos resuelto.
Si no tuviéramos el problema de la detención, aún estaríamos buscando el algoritmo mágico de Hilbert que introduce teoremas y resultados, ya sean verdaderos o no. Ahora sabemos que podemos dejar de buscar, y podemos poner nuestros esfuerzos en encontrar la heurística y el segundo mejor método para resolver estos problemas.
ACTUALIZACIÓN: Solo para abordar un par de cuestiones planteadas en los comentarios.
@Tyler Fleming Cloutier: El problema "sin sentido" surge en la prueba de que el problema de detención es indecidible, pero lo que está en el centro de la indecidibilidad es realmente tener un espacio de búsqueda infinito. Está buscando un objeto con una propiedad determinada y, si no existe, no hay forma de saber cuándo ha terminado.
La dificultad de un problema puede estar relacionada con la cantidad de cuantificadores que tiene. Intentando mostrar que existe ( ) un objeto con una propiedad arbitraria, debe buscar hasta encontrar uno. Si no existe ninguno, no hay forma (en general) de saber esto. Probar que todos los objetos ( ) tienen una propiedad es difícil, pero puede buscar un objeto sin la propiedad para refutarlo. Cuantas más alternancias haya entre todo y existe, más difícil es un problema.∀∃∀
Para más información sobre esto, vea la Jerarquía aritmética . Cualquier cosa por encima de es indecidible, aunque el nivel 1 es semi-decidible.Σ00=Π00
También es posible demostrar que hay problemas indecidibles sin utilizar una paradoja sin sentido como el problema de detención o la paradoja de los mentirosos. Una máquina de Turing puede codificarse utilizando una cadena de bits, es decir, un número entero. Pero un problema puede codificarse como un lenguaje, es decir, un subconjunto de los enteros. Se sabe que no hay biyección entre el conjunto de enteros y el conjunto de todos los subconjuntos de enteros. Por lo tanto, debe haber algunos problemas (idiomas) que no tienen una máquina de Turing asociada (algoritmo).
@Brent: sí, esto admite que esto es decidible para las computadoras modernas. Pero es decidible para una máquina específica. Si agrega una unidad USB con espacio en disco, o la capacidad de almacenar en una red, o cualquier otra cosa, entonces la máquina ha cambiado y el resultado aún no se mantiene.
También hay que decir que habrá muchas veces en que el algoritmo diga "este código se detendrá" porque el código fallará y se quedará sin memoria, y que agregar un solo bit adicional de memoria haría que el código tener éxito y dar un resultado diferente.
La cuestión es que las máquinas de Turing no tienen una cantidad infinita de memoria. Nunca hay un momento en que una cantidad infinita de símbolos se escriben en la cinta. En cambio, una máquina Turing tiene memoria "ilimitada", lo que significa que puede seguir obteniendo más fuentes de memoria cuando la necesite. Las computadoras son así. Puede agregar RAM, memorias USB, discos duros o almacenamiento en red. Sí, te quedas sin memoria cuando te quedas sin átomos en el universo. Pero tener memoria ilimitada es un modelo mucho más útil.