¿Cuáles son los ejemplos más simples de programas que no sabemos si terminan?

27

El problema de detención indica que no existe un algoritmo que determine si un programa determinado se detiene. Como consecuencia, debe haber programas sobre los que no podemos saber si terminan o no. ¿Cuáles son los ejemplos más simples (más pequeños) conocidos de tales programas?

MaiaVictor
fuente
Estás contradiciendo tus respuestas ..... ¡Gracias! Pero el programa de detención supone el conocimiento de la fuente. ... Si esto es cierto, ha respondido a su pregunta. El programa de detención ya lo sabría. Imagine un sistema que controla un letrero, siempre está iluminado y parpadeando, ¿cuándo se apaga? Falla de alimentación, interruptor de encendido o durante la secuencia del flash. O dado una batería de respaldo y un generador, nunca.
htm11h
Añadiría que el problema de detención es solo un problema si no pones un límite superior de tiempo. Seguramente no hay diferencia en la práctica entre obtener una respuesta demasiado tarde para ser de alguna utilidad y nunca obtener una respuesta. Puede preguntar si un programa devolverá una respuesta dentro de una serie de pasos, como una definición de corrección en tiempo real. Si no puede garantizar una respuesta oportuna, simplemente tiene un programa que carece de una garantía de corrección.
Rob
1
@Rob Eso no es realmente cierto. Si no sabe si una máquina se detendrá, puede esperar indefinidamente para ver si se detiene; después de un milenio, aún no sabrá si se detendrá o no, digamos, al día siguiente.
Kyle Strand
@KyleStrand Estoy de acuerdo contigo. Pero también digo que es un problema totalmente exagerado en la práctica, porque todos los cálculos realistas están sujetos a plazos (de milisegundos a meses). Si necesita una respuesta en 5 segundos para que sea útil, lo único que importa es si puede garantizar una respuesta en 5 segundos. Suponga que puede garantizar una respuesta dada una cantidad de tiempo indeterminada para calcular. Esa sería una garantía inútil.
Rob

Respuestas:

41

Un ejemplo bastante simple podría ser un programa que pruebe la conjetura de Collatz :

F(norte)={DETENER,Si norte es 1F(norte/ /2),Si norte inclusoF(3norte+1),Si norte es impar

Se conoce a alto por hasta al menos , pero en general es un problema abierto.norte5 5×260 605.764×1018 años

npostavs
fuente
99
Para enfatizar mi punto del comentario debajo de la pregunta: el problema "¿ detiene para todo ?" es computable . f(n)n
Raphael
66
@KyleStrand Ver aquí .
Raphael
10
@KyleStrand, Raphael es 100% correcto. Este es un error común. Debe rastrear cuidadosamente lo que dice la definición, y luego puede descubrir que su intuición no coincide con la definición. Según la definición de computabilidad, es suficiente que exista una máquina de Turing para calcularla; no importa si sabemos qué es esa máquina de Turing. Al ver esto por primera vez, muchos estudiantes piensan que es trampa, pero no lo es, eso es solo una consecuencia de la definición.
DW
2
@KyleStrand Tienes que deshacerte de la idea de que el programa tiene que resolver el problema . No es asi. Solo tiene que generar la respuesta, que es una tarea trivial. Algorítmicamente, los problemas con conjuntos finitos de instancias son aburridos, ya que podemos codificar las respuestas. (E incluso si nos no sabemos las respuestas, aún sabemos que hay un algoritmo correcto.) En general, cuando se demuestra que no hay ningún algoritmo para algo, que no llega a hacer alguna hipótesis sobre cómo se va a trabajo. Nuestra falta de imaginación no proporciona una prueba.
Raphael
2
@KyleStrand Afaik, utilizo la definición estándar de computabilidad tal como se enseña hoy (y, afaik, lo ha sido durante décadas). Le recomiendo que absorba las respuestas y el material vinculado y que averigüe dónde salió mal. No tiene sentido para mí y para los demás repetir las mismas cosas una y otra vez. Un intento más: la definición de computabilidad es inherentemente existencial, no constructiva. Mientras piense dentro de los reinos de la lógica clásica, no hay necesidad de poder entregar un algoritmo de "resolución", solo tenemos que demostrar que hay uno que da las respuestas correctas.
Raphael
31

El problema de detención indica que no existe un algoritmo que determine si un programa determinado se detiene. Como consecuencia, debe haber programas sobre los que no podemos saber si terminan o no.

"Nosotros" no somos un algoritmo =) No existe un algoritmo general que pueda determinar si un programa determinado se detiene para cada programa .

¿Cuáles son los ejemplos más simples (más pequeños) conocidos de tales programas?

Considere el siguiente programa:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

La función is_perfect verifica si n es un número perfecto . No se sabe si hay números perfectos impares, por lo que no sabemos si este programa se detiene o no.

avsmal
fuente
77
Somos un algoritmo
PyRulez
3
@PyRulez no hay pruebas de que el poder computacional de la mente humana sea equivalente al de Turing Machine. La prueba no funciona, por ejemplo, se desconoce cómo simular una mente en otra.
avsmal
1
@avsmal Está bien, pero es extremadamente improbable que seamos capaces de hipercomputar.
PyRulez
2
@PyRulez John Lucas y Roger Penrose han sugerido que la mente humana podría ser el resultado de algún tipo de cálculo "no algorítmico" mejorado mecánicamente cuánticamente. Esa es una suposición fuerte. Pero al menos nuestra mente puede tener alguna fuente de incertidumbre. Y eso es suficiente para romper la prueba: es imposible negar la máquina de Turing "aleatorizada" (para una definición adecuada de lo que significa aleatoriamente) si no se sabe si se detiene.
avsmal
55
¿La computación cuántica se considera hipercomputación? Asumí que las máquinas cuánticas podían simularse perfectamente con máquinas de turing, solo un poco más lento.
MaiaVictor
10

Usted escribe:

El problema de detención indica que no existe un algoritmo que determine si un programa determinado se detiene. Como consecuencia, debe haber programas sobre los que no podemos saber si terminan o no.

Este no es un secuestro, en ambas direcciones. Sucumbes a una falacia común que vale la pena abordar.

Dado cualquier programa fijo , su problema de detención ("¿ P siempre se detiene?") Siempre es decidible, porque la respuesta es "sí" o "no". Incluso si no puede decir cuál es, sabe que uno de los dos algoritmos triviales que responden siempre "sí" resp. "no" resuelve el problema de P -halting.PPP

Solo si requiere que el algoritmo resuelva el problema de Detención de todos los programas, puede demostrar que dicho algoritmo no puede existir.

Ahora, saber que el problema de Detener es indecidible no implica que haya ningún programa que nadie pueda probar su terminación o bucle. Incluso si no eres más poderoso que una máquina de Turing (lo cual es solo una hipótesis, no un hecho comprobado), todo lo que sabemos es que ningún algoritmo / persona puede proporcionar tal prueba para todos los programas. Puede haber una persona diferente que pueda decidir para cada programa.

Algunas lecturas más relacionadas:


Entonces verá que su pregunta real (como se repite a continuación) no tiene nada que ver con si el problema de detención es computable. En absoluto.

¿Cuáles son los ejemplos más simples (más pequeños) conocidos de [programas que no sabemos detener o repetir]?

S

sol(norte)={1,S cierto,sol(norte+1),más.

Por supuesto, estos no son muy "naturales".


  1. No necesariamente todos , pero "muchos" en algún sentido. Infinitamente muchos, al menos.
Rafael
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Raphael
Para tratar de reformular esto para mi propia comprensión, ¿es correcto decir que si bien no existe un algoritmo único que pueda determinar si algún programa arbitrario dado se detiene, bien puede haber algún algoritmo específico para resolver el problema de detención de cada programa posible?
Asad Saeeduddin
@AsadSaeeduddin Es "peor": para cada conjunto finito de programas, el problema de detención es trivial . Cada conjunto finito es decidible.
Raphael
7

Cualquier problema abierto relacionado con la existencia de un número con propiedades particulares da lugar a dicho programa (el que busca dicho número). Por ejemplo, tome la conjetura de Collatz; Como no sabemos si es cierto, tampoco sabemos si el siguiente programa termina:

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  
Klaus Draeger
fuente
6

Dado que el problema de Busy Beaver no se resuelve para una máquina de Turing de 5 estados y 2 símbolos, debe haber una máquina de Turing con solo cinco estados y solo dos símbolos que no se haya demostrado que se detenga o no cuando se inicie con una cinta vacía . Es un programa muy corto, conciso y cerrado.

no-un-usuario
fuente
0

La pregunta es complicada porque la capacidad de decisión (el problema de formalización / generalización equivalente de CS de la detención) está asociada con los idiomas, por lo que debe reformularse en ese formato. Esto parece no señalarse mucho, pero muchos problemas abiertos en matemáticas / CS pueden convertirse fácilmente en problemas (idiomas) de capacidad de decisión desconocida. Esto se debe a una estrecha correspondencia entre la prueba de teorema y el análisis de (no) decidibilidad. por ejemplo (algo así como la otra respuesta con números perfectos impares), tome la conjetura de los primos gemelos que data de los griegos (hace más de 2 milenios) y está sujeta a importantes avances de investigación recientes, por ejemplo, de Zhang / Tao. conviértalo a un problema algorítmico de la siguiente manera:

Entrada: n . Salida: Y / N existe al menos n primos gemelos.

el algoritmo busca primos gemelos y se detiene si encuentra n de ellos. No se sabe si este lenguaje es decidible. La resolución del problema de los primos gemelos (que pregunta si hay un número finito o infinito) también resolvería la capacidad de decisión de este lenguaje (si también se prueba / descubre cuántos hay, si es finito).

otro ejemplo, tome la hipótesis de Riemann y considere este lenguaje:

Entrada: n . Salida: Y / N existen al menos n ceros no triviales de la función zeta de Riemann.

el algoritmo busca ceros no triviales (el código no es especialmente complejo, es similar a la búsqueda de raíces, y hay otras formulaciones equivalentes que son relativamente simples, que básicamente calculan sumas de "paridad" de todos los primos menores que x, etc.) y se detiene si encuentra n de ellos y nuevamente, no se sabe si este lenguaje es decidible y la resolución es "casi" equivalente a resolver la conjetura de Riemann.

ahora, ¿qué tal un ejemplo aún más espectacular? ( advertencia, probablemente también más controvertida)

Entrada: c: Salida: Y / N existe un algoritmo O (n c ) para SAT.

de manera similar, la resolución de la capacidad de decisión de este lenguaje es casi equivalente al problema P vs NP . sin embargo, hay un caso menos obvio para el código "simple" para el problema en este caso.

vzn
fuente
1
¿Explicaría el votante qué está mal con esta respuesta?
MaiaVictor
2
nortenortenortenorteuna,si,dounanorte+sinorte=donortenortenorte=2
vonbrand
3
No soy el votante negativo, pero todas las afirmaciones en esta respuesta son incorrectas. Los tres problemas son demostrablemente decidibles (sin necesidad de hacer suposiciones no comprobadas). Por qué, estudia la respuesta de Raphael de cerca.
DW
ok tal vez la entrada necesita tener la TM especificada y el algoritmo decide si la TM calcula el problema. tengo que pensarlo más ... creo que hay una receta simple para este tipo de problemas que básicamente conecta problemas abiertos con lenguajes indecidibles ... pero acordó que esto rara vez se documenta / formula en las referencias de CS ... solo he encontrado algunos dispersos refs ... o tal vez la entrada es una prueba y el lenguaje verifica si la prueba es correcta ... las otras respuestas con votos altos mencionan números perfectos impares, problema de colatz, etc. .
vzn
¡perdón por la confusion! En otro pensamiento, las afirmaciones son correctas en la forma en que describen programas simples que no se sabe que terminan (para todas las entradas) (es decir, la pregunta original) y el fracaso de la idea general esbozada / señalada por DW está tratando de convertir cada uno en Lenguas indecidibles. continuará reflexionando sobre esa última idea de construcción buscando una que tenga éxito. Otra forma de verlo es que los problemas pueden ser vistos como instancias / entradas individuales para un solucionador de problemas de detención pero no realmente (se sabe que son) equivalentes al problema de detención en sí.
vzn
0

1norte1050

1020

gnasher729
fuente