Problema de la parada

Problema de la parada

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 M y una palabra w, determinar si M se detendrá cuando es ejecutada usando w 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.

Relevancia en la práctica

Al ejecutar un programa, este puede terminar después de un número finito de pasos o puede nunca terminar. 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:

Dado un programa p y sus datos de entrada x, decidir si p eventualmente terminará en un número finito de pasos o si entrará a un bucle infinito.

Esta pregunta es, en términos modernos, el problema de la parada. Una forma muy natural de intentar resolver el problema es hacer funcionar el programa p con los datos de entrada x y esperar para ver si termina; sin embargo habría que determinar cuánto tiempo hay que esperar para estar completamente seguros de que p en verdad nunca termina. De hecho, esto es imposible: está demostrado que este problema no se puede solucionar algoritmicamente –es decir, que es irresoluble.

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 anterior 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 se 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: #Estas instrucciones forman un bucle infinito
            pass

Resumiendo, el programa Diagonal está diseñado para tener la siguiente propiedad:

\it{Diagonal}(w)\text{ termina}\iff w(w)\text{ nunca termina}

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

Diagonal("def Diagonal(w):\n    if Termina(w, w):\n        while True:\n            pass")

En este caso se tiene w = Diagonal, y por lo tanto

\it{Diagonal}(\it{Diagonal})\text{ termina}\iff \it{Diagonal}(\it{Diagonal})\text{ nunca termina}

Es decir que bajo la suposición de que existe el algoritmo Termina se llega a la absurda 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 algoritmicamente.

Referencias

  • [Michael] (2005). Introduction to the Theory of Computation, 2 edición, Course Technology. ISBN 978-0534950972.
  • [Dean] (1995). Teoría de Autómatas y Lenguajes Formales. Prentice Hall. ISBN 0-13-497777-7.
  • George S. Boolos, John P. Burgess & Richard C. Jeffrey (2007). Computability and Logic. Cambridge University Press. ISBN 978-0521701464.
Obtenido de "Problema de la parada"

Wikimedia foundation. 2010.

Игры ⚽ Поможем сделать НИР

Mira otros diccionarios:

  • Problema de la parada — El problema de parada para máquinas de Turing es el ejemplo de problema irresoluble más conocido. Fue además el primer problema que se demostró formalmente que no tenía solución. El concepto de problema irresoluble se aplica a problemas de… …   Enciclopedia Universal

  • Problema de correspondencia de Post — Saltar a navegación, búsqueda El Problema de Correspondencia de Post es un problema de decisión indecidible que fue propuesto por Emil Post. Por ser más sencillo que el Problema de parada y que el Entscheidungsproblem, resulta útil para realizar… …   Wikipedia Español

  • Problema de correspondencia de Post — El Problema de Correspondencia de Post es un problema de decisión indecidible que fue propuesto por Emil Post. Por ser más sencillo que el Problema de parada y que el Entscheidungsproblem, resulta útil para realizar pruebas de indecibilidad.… …   Enciclopedia Universal

  • Máquina de Turing — Para otros usos de este término, véase Turing (desambiguación). Una máquina de Turing (MT) es un modelo computacional que realiza una lectura/escritura de manera automática sobre una entrada llamada cinta, generando una salida en esta misma. Este …   Wikipedia Español

  • Teoría de la computación — La teoría de la computación es una rama de la matemática y la computación que centra su interés en las limitaciones y capacidades fundamentales de las computadoras. Específicamente esta teoría busca modelos matemáticos que formalizan el concepto… …   Wikipedia Español

  • Teoremas de incompletitud de Gödel — Kurt Gödel a los 19 años de edad, cinco años antes de la demostración de los teoremas. Los teoremas de incompletitud de Gödel son dos célebres teoremas de lógica matemática demostrados por Kurt Gödel en 1930. Ambos están relacionados con la… …   Wikipedia Español

  • Cálculo lambda — Artículo parcialmente traducido: Contiene texto en inglés. Ayuda a terminarlo. El cálculo lambda es un sistema formal diseñado para investigar la definición de función, la noción de aplicación de funciones y la recursión. Fue introducido por… …   Wikipedia Español

  • Alan Turing — Para otros usos de este término, véase Turing (desambiguación). Alan Turing Alan Mathison Turing Nacimiento 23 de junio de …   Wikipedia Español

  • Número computable — En matemáticas, especialmente en ciencia computacional teórica y lógica matemática, los números computables o recursivos son los números reales que pueden ser computados con la precisión que se desee por un algoritmo finito. Se puede llegar al… …   Wikipedia Español

  • Algoritmo — Los diagramas de flujo sirven para representar algoritmos de manera gráfica. En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y éste a su vez del matemático persa Al… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”