Si el problema de detención es indecidible, ¿cómo hacen las personas los programas?

El problema de detención plantea la siguiente pregunta: ¿Existe un programa P que pueda determinar si algún otro programa Q se detendrá cuando se presente la entrada I?

Esta es una restricción a nuestra capacidad de crear programas que predicen si otros programas arbitrarios se detendrán. No es una restricción a nuestra capacidad de razonar sobre programas particulares .

Considere el siguiente programa de Python:

def prog (x):
total = 0
mientras x> 0:
total = total + x
x = x – 1
retorno total

Al examinar este programa, puedo mostrar con bastante facilidad que siempre se detiene . Si x 0, se ejecuta el cuerpo del bucle. Esto hace que x disminuya en uno. Como x siempre disminuye en uno, después de las ejecuciones del cuerpo del bucle x será menor o igual a cero. Por lo tanto, el programa siempre se detiene.

Lo que no puedo hacer es escribir un programa que tome cualquier programa y un argumento como entradas, y luego determine si se detiene. Entonces, en términos de Python, no puedo escribir esto:

def se detiene (prog, x):
si prog (x) termina:
volver verdadero
más:
falso retorno

La prueba del problema de detención muestra que la instrucción “if” en la línea 2 no tiene un límite superior en el tiempo necesario para ejecutar. Por lo tanto, es solo un programa que de alguna manera se reduce a esto donde el problema de detención es un problema. La mayoría de los programas que escribimos en la práctica no son así. Nos quedamos con cosas que podemos mostrar que se detendrán entre las entradas.

Problema de detención – Wikipedia

La clave es que decidir si un programa se detendrá solo es complicado para algunos tipos de programas. Muchos programas tienen programas de detención fáciles de resolver: por lo general, puede determinar el peor tiempo de ejecución para los algoritmos más útiles.

La detención (y en particular, qué tan pronto se detienen los programas) es una de las propiedades que nos interesan al escribir software, por lo que solo escribimos software utilizando algoritmos bien entendidos.

Por ejemplo, la métrica principal que usamos para medir la calidad de un algoritmo de clasificación es qué tan pronto se detiene: nunca escribirías un código real que dependiera de Bogosort, Wikipedia, ya que es lento y nunca se garantiza que se detenga.

El problema de detención: para cualquier programa h (x) que identifica si otro se detiene o no, hay una interrupción del programa (x) = si h (interrupción (x)) se bloquea o se detiene, para lo cual está mal.

El práctico problema anti-detención: suponiendo que toda la funcionalidad que no sea el bloqueo es útil, para cualquier programa h (x) = si f (x) entonces g (x) de lo contrario se bloquea deliberadamente, hay un programa h ‘(x) = f (X); g (x) que tiene toda la funcionalidad útil de h (x) pero no desencadena el problema de detención en f (x).

Entonces, esencialmente, el problema de detención es una prueba del uso de la fuerza bruta matemática. No se aplica al hacer un esfuerzo deliberado para escribir y mejorar programas útiles. (Sin embargo, eso no significa que se puedan detener fácilmente, solo que el problema es la explosión de la complejidad en lugar del problema de detención).

El problema de detención no es una afirmación sobre la capacidad de hacer programas. El problema de detención esencialmente pregunta ” ¿podemos escribir un programa H que para un programa de entrada P con entradas de programa X garantice una respuesta sobre si P (X) se detendrá? El problema es que H no siempre puede saber si el programa arbitrario P (X) terminará sin emular en el peor de los casos P (X). Por lo tanto, si P (X) no se detiene, no podemos garantizar que podamos detectar ese comportamiento. Sin embargo, nada indica que debido a esto todavía no podamos ejecutar P (X).

More Interesting

Quiero que mi robot Atmega funcione en múltiples modos (seguimiento de línea, evitación de obstáculos, guía directa de PC) ¿Cómo puedo cargar y cambiar entre ellos?

¿Qué habilidades informáticas son más valiosas en la investigación en neurociencia?

Si quiero ser un hacker, ¿por dónde debo comenzar?

¿Cómo es tomar CS 246 en Stanford?

¿Qué tiene el programa de Sistemas Simbólicos en Stanford que produce tan increíbles alums?

Solo hay tantos componentes que puede meter en un chip de computadora. ¿Se ha alcanzado el límite o hay otra forma de hacer una computadora?

Con información que se duplica cada año, ¿es posible tener más datos que los átomos totales del universo?

¿Qué es la adquisición de recursos es la inicialización (RAII)?

¿Debo comprar o construir un sistema informático para satisfacer mis necesidades?

¿Cómo agrega números una computadora?

¿La informática complica innecesariamente conceptos simples debido a la envidia de la física?

Cuando reproduzco un disco de datos con un reproductor de CD de audio normal, ¿por qué no oigo nada?

¿Qué quiere decir Donald Knuth cuando dice "obtienes más prestigio haciendo buena ciencia que haciendo ciencia popular"?

¿Cuál debería ser el rango mínimo en el JEE Advanced para obtener un asiento CS en el IIT superior?

Alguien me dijo que una computadora portátil con una resolución de pantalla de 1366 * 768 es horrible. Me dijo que no es bueno para nuestros ojos. ¿Es eso cierto? ¿Es realmente una resolución 'antihumana'?