¿Puede una máquina de turing aceptar una entrada sin detenerse?

Tu pregunta no está clara. Me parece que no ha entendido la definición de un lenguaje re (recursivamente enumerable).

Cuando se trata de un lenguaje de re, el lenguaje que acepta TM M es exactamente el conjunto de cadenas en el que M se detiene. Las cadenas en las que M realiza un bucle son exactamente las cadenas que no pertenecen a L (M).

Entonces, por definición, la respuesta es no, en este contexto. Y esta es incluso la definición misma de cómo los idiomas son aceptados por las máquinas de turing, la cadena no se acepta si el TM se repite.

La definición: una cadena w pertenece a L (M) si M se detiene cuando se alimenta w para la entrada. Una cadena w no pertenece a L (M) si M bucles alimentan w para la entrada.

En caso de que tenga una M en curso y esté tratando de averiguar sobre L (M) alimentándola con diferentes cadenas, ¿cómo sabe cuándo dejar de esperar a que se detenga? En general no puede, y esto está relacionado con el problema de detención, por supuesto.

No, no puede. Se pregunta cómo puede concluir que la máquina ha aceptado la entrada antes de que incluso haya dejado de procesarla.

Creo que solo necesita una pequeña aclaración sobre la definición de un lenguaje recursivamente enumerable “, se dice que un lenguaje es recursivamente enumerable si existe una máquina de Turing que se detiene (y acepta) en cadenas que son parte del lenguaje, mientras se ejecuta con cadenas de entrada que no forman parte del lenguaje, la máquina puede detenerse (debe rechazarse) o puede repetirse para siempre “.

Espero que esto ayude.

Descargo de responsabilidad: para comprender la respuesta, primero, debe completar otra prueba, lo que me permite hacer esa, con la primera prueba haciendo que la respuesta sea más comprensible para los no especialistas.

Como la mayoría de las cosas en la teoría de la computación, las matemáticas generalmente se interponen en la comprensión del concepto. Una vez que entiendes el concepto, es fácil reinsertar las matemáticas. En este caso particular, veamos un diálogo hipotético entre las dos personas para discernir el problema, convirtiendo sus ideas en matemáticas más adelante.

Ada : Cada vez que encontramos algún problema que nos obliga a aumentar la potencia de cálculo, ‘Babbage nunca puede construir una máquina para ejecutar mi software. Cada vez que intento hacer algo con bucles, funciona bien con una excepción: casos en los que es imposible saber si algún bucle será infinito o terminará.

Alan : Me pregunto por qué sucede esto solo en bucles de duración indeterminada. ¿A ver si podemos razonar esto?

Ada : OK, tienes razón en que el problema es la duración realmente indeterminada, no si los bucles son infinitos.

Alan : ¿Estás de acuerdo en que cuando algo no se repite, tiene una duración determinada, mientras que cualquier cosa que tenga una longitud infinita también es determinada? Además, ¿está de acuerdo en que, debido a la inducción (también conocida como recursión), podemos decir que cualquier bucle de longitud finita tiene un tiempo de ejecución determinado?

Ada : Sí … pero déjame verificar el paso recursivo ……

1. Si es cierto para ningún ciclo, y también es cierto para un ciclo, entonces debe ser cierto para dos ciclos.

2. Si se sabe que un ciclo dado termina en una cantidad de tiempo finita, entonces sabemos que un ciclo de una longitud más que el ciclo original también terminará en una cantidad de tiempo finita ……… OK, eso tiene sentido ahora.

Alan : Bien … Pero, ¿por qué no podemos hacer que todos nuestros bucles sean probablemente infinitos o probablemente finitos?

Ada : No veo ninguna razón por la que no podamos, pero intentemos algunos casos para ver si funciona. Para cualquier programa dado, siempre puedo esperar para ver si termina, suponiendo que pueda esperar para siempre. Como eso no funcionará, ¿qué programas funcionarán? Los programas procesan sus entradas para producir salidas, y digamos que una de las entradas implica decidir si una copia de sí misma terminará alguna vez. ¡Ese es un caso interesante que parece representar la cúspide del problema!

Alan : Tienes razón (guiño) … No puedo hacer preguntas sobre mí si tienen que ver con mi posible terminación, eso es demasiado desagradable. Digamos que mi programa termina; el monitor también terminará. Si no termina, nunca terminaré. De cualquier manera, es decidible, aunque todavía estamos atrapados con casos indeterminados que son indecidibles.

Ada : Bingo! Creo que tienes algo allí: siempre podemos decidir si un bucle es finito o infinito. Sin embargo, no podemos decidir sobre bucles indeterminados, y la forma de forzar uno indeterminado es ejecutar un detector de terminación de bucle sobre sí mismo.

Alan : Tienes razón, ¡déjame escribir eso! ¿Suena “On Computable Numbers” como un buen título para el periódico? (Ada: Sí) ¡Pero, el OP preguntó sobre idiomas, no programas!

Ada : Eso es fácil para un alfabeto de cualquier tamaño (idioma). Podemos enumerar todas las cadenas posibles (programas), y si el programa es decidible, podemos poner un 0 en la cinta de una máquina Turing. Si es indecidible, pondremos un 1. Simplemente contamos los números de 0 y 1; eso es decidible para cualquier idioma. La enumeración siempre es decidible, porque en cualquier punto dado, tenemos un número finito. Y agregar 1 a un número finito también es finito.

Fin del dialogo

Formalicemos lo anterior:

La última declaración de Ada dice que para el lenguaje L, si introducimos todas las entradas posibles de la máquina M, como resultado siempre obtendremos uno de los símbolos en L. Es una máquina / programa decidible o indecidible, y esto implica que para un UTM, “L” es todos los programas posibles, incluido él mismo. Llame a esto L (M). Ahora es fácil ver que no hay diferencia entre L y L (M), así que digamos que L = L (M). Por lo tanto, dado que para aceptar necesitamos HALT L no es decidible.