fbpx
Wikipedia

Problema de la parada

El problema de la parada o problema de la detención para máquinas de Turing consiste en lo siguiente: dada una Máquina de Turing y una palabra , determinar si terminará en un número finito de pasos cuando es ejecutada usando como dato de entrada. Alan Turing, en su famoso artículo "On Computable Numbers, with an Application to the Entscheidungsproblem" (1936), demostró que el problema de la parada de la Máquina de Turing es indecidible (no computable o no recursivo), en el sentido de que ninguna máquina de Turing lo puede resolver.

Relevancia en la práctica

Al ejecutar un conjunto de programas, este puede terminar después de un número finito de pasos o puede no terminar nunca. En la práctica, este último caso se manifiesta como programas que se quedan "trabados" o que entran a un bucle infinito. Por esta razón sería de gran utilidad resolver la siguiente pregunta en la práctica:

Existe un programa P, tal que, dado un programa cualquiera q y unos datos de entrada x, muestre como salida 1 si q con entrada x termina en un número finito de pasos o muestre como salida 0 si q con x entra a un bucle infinito.

Conocer si existe el programa P es, en términos resumidos, el problema de la parada.

Sin embargo hay que hacer notar que la sabiduría popular acerca de este problema hace pensar que nunca es posible demostrar que un programa termina. Esto es falso.

Lo que se afirma es que no existe una manera automática computable de saber si todos los programas posibles terminan. No se niega que exista la prueba para programas concretos. De hecho, la construcción de pruebas para programas concretos es un paso obligatorio para demostrar su correctitud.

El procedimiento para construir estas pruebas no es automático; sin embargo, existen heurísticas que facilitan encontrar las pruebas de los programas. El área de conocimiento que estudia la construcción sistemática de pruebas se denomina Análisis de Terminación.

La evaluación o ejecución del programa con las entradas sin embargo no constituye una prueba de que siempre termine, sino de que en las circunstancias de la ejecución, terminó.

Irresolubilidad del problema

La irresolubilidad del problema se puede mostrar de varias formas, pero en esencia todas equivalen a un argumento diagonal de Cantor. A continuación se muestra el argumento en términos modernos de programación:

Supongamos que este problema sí se puede resolver algoritmicamente; entonces hay un programa, que llamaremos Termina, que cada vez que se le suministra el código de un programa p y sus datos de entrada x, hace un número finito de operaciones y responde "True" cuando el programa termina o "False" cuando el programa nunca termina. En lenguaje Python:

def Termina(p, x): #Supongamos que aquí se encuentra un código maravilloso que soluciona el problema de la parada #Esta función regresa True si p(x) termina o False en otro caso 

Bajo la suposición de que existe este programa, se puede usar como subrutina de otro programa más grande, al que llamaremos "Diagonal" (en referencia a la diagonal de Cantor). Este programa recibirá como dato de entrada el código de un programa cualquiera w, y usará el programa Termina para decidir si el programa w termina cuando se le suministra ella misma como entrada (no hay nada de raro en esto, pues en la práctica hay programas como los compiladores que pueden suministrarse a sí mismos como dato de entrada). A continuación, Diagonal hace lo opuesto: Si w termina entonces Diagonal entra en un ciclo infinito y si w entra en un ciclo infinito entonces Diagonal termina. En lenguaje Python:

def Diagonal(w): if Termina(w, w): while True: pass #Esta instrucción es un bucle infinito 

Resumiendo, el programa Diagonal está diseñado para tener la siguiente propiedad (entiéndase la flecha como "siempre y cuando"):

 

Como w puede ser el código de cualquier programa, particularmente puede ser el del mismo Diagonal:

def Diagonal(Diagonal): if Termina(Diagonal, Diagonal): while True: pass 

En este caso se tiene  , y por lo tanto

 

Es decir que bajo la suposición de que existe el algoritmo Termina se llega a la paradójica conclusión de que hay una instrucción que termina siempre y cuando no termine. Como esta conclusión es absurda, entonces no puede existir el algoritmo Termina; es decir que es imposible resolver el problema de la parada algorítmicamente.

Demostración por construcción de máquinas de Turing

Es más común encontrar en los libros de texto la demostración anterior en términos de máquinas de Turing como sigue:

Supongamos que el problema de la parada tiene solución. Es decir, supongamos que existe una máquina de Turing que es capaz de determinar si otra máquina de Turing parará (terminará) con una entrada determinada. Llamemos Termina a esta máquina. Esta máquina recibiría como entrada la cadena  , donde   es la codificación de una máquina de Turing y   es la codificación de la cadena que se le alimenta a  . La máquina   terminará en un estado de aceptación si   para ante la entrada  , y en otro caso terminará en un estado de rechazo, pero nunca entrará en un ciclo infinito.

 

Es posible crear una máquina Copia que al recibir una cadena cualquiera   termine en un estado de aceptación con   en su cinta. Ahora crearemos una máquina Diagonal que recibe de entrada una cadena  , que presuntamente será la codificación de una máquina de Turing  . Primero Diagonal utilizará la máquina Copia para duplicar la cadena  , convirtiéndola en  . A continuación, Diagonal pasará este resultado a través de Termina para decidir si la máquina representada por   para ante la cadena   y realiza lo opuesto: Si Termina acepta, entonces Diagonal entra en un bucle infinito (que consiste de un solo estado al que se regresa una y otra vez) y en otro caso, si Termina rechaza entonces Diagonal termina en estado de aceptación.

 

Resumiendo, la máquina Diagonal está diseñada para tener la siguiente propiedad:

Diagonal para ante la entrada     la máquina codificada en   no para ante la entrada  .

Por último, tomaremos la codificación de la máquina Diagonal, y la aplicaremos como entrada a la propia máquina Diagonal. Como   es la codificación de Diagonal, de lo anterior se sigue que Diagonal para ante sí misma como entrada si y solo si Diagonal no para ante sí misma como entrada. Esta conclusión es paradójica, pero todas las máquinas que hemos usado en la demostración, exceptuando Termina, son construibles; por lo tanto la clave de la demostración se encuentra, por reducción al absurdo, en la supuesta existencia de la máquina Termina. Al ser imposible la existencia de tal máquina Termina, que resolvía el problema de la parada, el problema de la parada no puede ser solucionado por ninguna máquina de Turing.

Véase también

Referencias

  • Sipser, Michael (2005). Introduction to the Theory of Computation (2 edición). Course Technology. ISBN 978-0534950972. 
  • Kelley, Dean (1995). Teoría de Autómatas y Lenguajes Formales. Prentice Hall. ISBN 0-13-497777-7. 
  •   Datos: Q622849

problema, parada, problema, parada, problema, detención, para, máquinas, turing, consiste, siguiente, dada, máquina, turing, displaystyle, palabra, displaystyle, determinar, displaystyle, terminará, número, finito, pasos, cuando, ejecutada, usando, displaystyl. El problema de la parada o problema de la detencion para maquinas de Turing consiste en lo siguiente dada una Maquina de Turing M displaystyle M y una palabra w displaystyle w determinar si M displaystyle M terminara en un numero finito de pasos cuando es ejecutada usando w displaystyle w como dato de entrada Alan Turing en su famoso articulo On Computable Numbers with an Application to the Entscheidungsproblem 1936 demostro que el problema de la parada de la Maquina de Turing es indecidible no computable o no recursivo en el sentido de que ninguna maquina de Turing lo puede resolver Indice 1 Relevancia en la practica 2 Irresolubilidad del problema 3 Demostracion por construccion de maquinas de Turing 4 Vease tambien 5 ReferenciasRelevancia en la practica EditarAl ejecutar un conjunto de programas este puede terminar despues de un numero finito de pasos o puede no terminar nunca En la practica este ultimo caso se manifiesta como programas que se quedan trabados o que entran a un bucle infinito Por esta razon seria de gran utilidad resolver la siguiente pregunta en la practica Existe un programa P tal que dado un programa cualquiera q y unos datos de entrada x muestre como salida 1 si q con entrada x termina en un numero finito de pasos o muestre como salida 0 si q con x entra a un bucle infinito Conocer si existe el programa P es en terminos resumidos el problema de la parada Sin embargo hay que hacer notar que la sabiduria popular acerca de este problema hace pensar que nunca es posible demostrar que un programa termina Esto es falso Lo que se afirma es que no existe una manera automatica computable de saber si todos los programas posibles terminan No se niega que exista la prueba para programas concretos De hecho la construccion de pruebas para programas concretos es un paso obligatorio para demostrar su correctitud El procedimiento para construir estas pruebas no es automatico sin embargo existen heuristicas que facilitan encontrar las pruebas de los programas El area de conocimiento que estudia la construccion sistematica de pruebas se denomina Analisis de Terminacion La evaluacion o ejecucion del programa con las entradas sin embargo no constituye una prueba de que siempre termine sino de que en las circunstancias de la ejecucion termino Irresolubilidad del problema EditarLa irresolubilidad del problema se puede mostrar de varias formas pero en esencia todas equivalen a un argumento diagonal de Cantor A continuacion se muestra el argumento en terminos modernos de programacion Supongamos que este problema si se puede resolver algoritmicamente entonces hay un programa que llamaremos Termina que cada vez que se le suministra el codigo de un programa p y sus datos de entrada x hace un numero finito de operaciones y responde True cuando el programa termina o False cuando el programa nunca termina En lenguaje Python def Termina p x Supongamos que aqui se encuentra un codigo maravilloso que soluciona el problema de la parada Esta funcion regresa True si p x termina o False en otro caso Bajo la suposicion de que existe este programa se puede usar como subrutina de otro programa mas grande al que llamaremos Diagonal en referencia a la diagonal de Cantor Este programa recibira como dato de entrada el codigo de un programa cualquiera w y usara el programa Termina para decidir si el programa w termina cuando se le suministra ella misma como entrada no hay nada de raro en esto pues en la practica hay programas como los compiladores que pueden suministrarse a si mismos como dato de entrada A continuacion Diagonal hace lo opuesto Si w termina entonces Diagonal entra en un ciclo infinito y si w entra en un ciclo infinito entonces Diagonal termina En lenguaje Python def Diagonal w if Termina w w while True pass Esta instruccion es un bucle infinito Resumiendo el programa Diagonal esta disenado para tener la siguiente propiedad entiendase la flecha como siempre y cuando D i a g o n a l w termina w w nunca termina displaystyle it Diagonal w text termina iff w w text nunca termina Como w puede ser el codigo de cualquier programa particularmente puede ser el del mismo Diagonal def Diagonal Diagonal if Termina Diagonal Diagonal while True pass En este caso se tiene w D i a g o n a l displaystyle w Diagonal y por lo tanto D i a g o n a l D i a g o n a l termina D i a g o n a l D i a g o n a l nunca termina displaystyle it Diagonal it Diagonal text termina iff it Diagonal it Diagonal text nunca termina Es decir que bajo la suposicion de que existe el algoritmo Termina se llega a la paradojica conclusion de que hay una instruccion que termina siempre y cuando no termine Como esta conclusion es absurda entonces no puede existir el algoritmo Termina es decir que es imposible resolver el problema de la parada algoritmicamente Demostracion por construccion de maquinas de Turing EditarEs mas comun encontrar en los libros de texto la demostracion anterior en terminos de maquinas de Turing como sigue Supongamos que el problema de la parada tiene solucion Es decir supongamos que existe una maquina de Turing que es capaz de determinar si otra maquina de Turing parara terminara con una entrada determinada Llamemos Termina a esta maquina Esta maquina recibiria como entrada la cadena M w displaystyle M w donde M displaystyle M es la codificacion de una maquina de Turing y w displaystyle w es la codificacion de la cadena que se le alimenta a M displaystyle M La maquina T e r m i n a displaystyle Termina terminara en un estado de aceptacion si M displaystyle M para ante la entrada w displaystyle w y en otro caso terminara en un estado de rechazo pero nunca entrara en un ciclo infinito Es posible crear una maquina Copia que al recibir una cadena cualquiera w displaystyle w termine en un estado de aceptacion con w w displaystyle w w en su cinta Ahora crearemos una maquina Diagonal que recibe de entrada una cadena w displaystyle w que presuntamente sera la codificacion de una maquina de Turing M displaystyle M Primero Diagonal utilizara la maquina Copia para duplicar la cadena w displaystyle w convirtiendola en w w displaystyle w w A continuacion Diagonal pasara este resultado a traves de Termina para decidir si la maquina representada por w displaystyle w para ante la cadena w displaystyle w y realiza lo opuesto Si Termina acepta entonces Diagonal entra en un bucle infinito que consiste de un solo estado al que se regresa una y otra vez y en otro caso si Termina rechaza entonces Diagonal termina en estado de aceptacion Resumiendo la maquina Diagonal esta disenada para tener la siguiente propiedad Diagonal para ante la entrada w displaystyle w displaystyle iff la maquina codificada en w displaystyle w no para ante la entrada w displaystyle w Por ultimo tomaremos la codificacion de la maquina Diagonal y la aplicaremos como entrada a la propia maquina Diagonal Como w displaystyle w es la codificacion de Diagonal de lo anterior se sigue que Diagonal para ante si misma como entrada si y solo si Diagonal no para ante si misma como entrada Esta conclusion es paradojica pero todas las maquinas que hemos usado en la demostracion exceptuando Termina son construibles por lo tanto la clave de la demostracion se encuentra por reduccion al absurdo en la supuesta existencia de la maquina Termina Al ser imposible la existencia de tal maquina Termina que resolvia el problema de la parada el problema de la parada no puede ser solucionado por ninguna maquina de Turing Vease tambien EditarConstante de ChaitinReferencias EditarSipser Michael 2005 Introduction to the Theory of Computation 2 edicion Course Technology ISBN 978 0534950972 Kelley Dean 1995 Teoria de Automatas y Lenguajes Formales Prentice Hall ISBN 0 13 497777 7 George S Boolos John P Burgess amp Richard C Jeffrey 2007 Computability and Logic Cambridge University Press ISBN 978 0521701464 Datos Q622849Obtenido de https es wikipedia org w index php title Problema de la parada amp oldid 135071966, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos