Un programa que responde correctamente cuando encuentra una solución puede quedarse buscando para siempre cuando no la hay. ¿Ha decidido el problema? Empezaremos con máquinas de pocos estados, añadiremos memoria y después veremos por qué ninguna máquina puede resolver correctamente la parada de todos los programas.
Si necesitas repasar:
1. Una pregunta de sí o no se representa por un lenguaje de cadenas finitas
Un alfabeto Σ es un conjunto finito de símbolos. Σ* contiene todas sus cadenas finitas, incluida la vacía ε. Un lenguaje L⊆Σ* reúne las entradas cuya respuesta es sí. Decidir L exige responder correctamente tanto si la cadena pertenece como si no pertenece, en tiempo finito.
Se pueden codificar enteros, grafos o programas como cadenas. La codificación debe ser efectiva: un procedimiento finito permite construirla e interpretar su estructura. Las entradas mal formadas pueden rechazarse según la especificación. Una pregunta de decisión no es lo mismo que pedir construir una solución, aunque ambas puedan relacionarse.
Definir el lenguaje antes de diseñar la máquina
Σ={0,1}; L contiene las cadenas que tienen al menos un 1.
Sí
1,01 y 100 pertenecen a L.
No
ε,0 y 000 no pertenecen.
Criterio
Se debe encontrar algún símbolo 1; la longitud sola no decide la respuesta.
El problema queda especificado para todas las cadenas binarias finitas.
ε es una entrada válida de longitud cero y su respuesta también debe definirse.
Codificar una conexión conserva una pregunta precisa
Para un grafo simple con vértices numerados, se guarda n y una matriz binaria de adyacencia.
Estructura
Cada entrada de la matriz indica si existe la arista entre esa pareja.
Validar
Se comprueban dimensiones, diagonal cero y simetría.
Pregunta
El lenguaje puede reunir las codificaciones válidas de grafos conexos; una búsqueda finita decide esa propiedad.
Una codificación convierte instancias de grafos en cadenas que un procedimiento puede leer.
La validación y la propiedad buscada son pasos distintos; una matriz mal formada no se toma como un grafo válido por omisión.
2. Un autómata finito conserva solo su estado actual
Un autómata finito determinista tiene estados Q, uno inicial q₀, un conjunto de aceptación F y una transición δ(q, s) por cada estado y símbolo. Lee de izquierda a derecha. Tras consumir toda la cadena acepta si su estado final pertenece a F. No guarda el prefijo completo: solo el estado.
Para contar unos módulo dos basta recordar par o impar. El dibujo usa P inicial y aceptante, I no aceptante: 0 mantiene y 1 cambia. Los lenguajes aceptados por autómatas finitos son regulares. La memoria finita permite muchas preguntas, pero no recordar sin límite una cantidad exacta de símbolos.
Seguir una palabra paso a paso
Leemos 11001 en el autómata de paridad.
Inicio
P representa cero unos.
Actualizar
Con los símbolos 1,1,0,0,1 se recorren I, P, P, P, I.
Final
I no es aceptante; la cadena tiene tres unos, una cantidad impar.
Se rechaza 11001.
ε se aceptaría en P; el resultado depende del estado al acabar, no de haber pasado alguna vez por P.
Por qué no bastan estados finitos para todo conteo
Supongamos que un autómata de p estados reconoce L={0ⁿ1ⁿ: n≥0}.
Prefijos
Tras leer 0⁰,0¹,…,0ᵖ hay p+1 situaciones y solo p estados.
Coincidencia
Dos prefijos 0ⁱ y 0ʲ, i<j, llegan al mismo estado.Mismo futuro
Añadir 1ⁱ lleva al mismo estado final en ambos; sin embargo 0ⁱ1ⁱ pertenece y 0ʲ1ⁱ no.
La contradicción demuestra que ese lenguaje no es regular.
El argumento usa palomar y comportamiento idéntico desde un mismo estado; no dice que el lenguaje sea indecidible con otra memoria.
3. La cinta aporta memoria que puede crecer con la entrada
Una máquina de Turing combina control finito, cinta de símbolos y un cabezal. Una transición mira estado y símbolo, escribe uno, cambia de estado y mueve el cabezal. La cinta tiene espacio disponible sin una cota fija común a todas las entradas; cada ejecución finita utiliza solo una parte finita.
Las variantes usuales con varias cintas y los modelos de registros apropiados tienen igual capacidad de cálculo que una cinta, aunque la simulación cambie los costes. Esas equivalencias entre modelos formales son teoremas. La tesis de Church–Turing relaciona informalmente esa capacidad con lo que llamamos algoritmo efectivo; no se confunde con una igualdad de velocidades ni con un teorema sobre una definición informal.
Leer una transición local
La regla dice (q,0)↦(q′,1, derecha).
Condición
Se aplica cuando el control está en q y el cabezal lee 0.
Escribir
Solo la celda actual cambia de 0 a 1.
Continuar
El estado pasa a q′ y el cabezal avanza a la celda de la derecha.
Un paso modifica símbolo, estado y posición según una regla finita.
Las otras celdas no cambian; no se reescribe toda la cinta en un solo paso.
Una cinta sí puede decidir cuántos ceros corresponden a cuántos unos
Lenguaje 0ⁿ1ⁿ, incluyendo n=0.
Forma
Primero se comprueba que no haya un cero después de empezar los unos.
Emparejar
Se marca un cero no marcado y un uno no marcado; si falta el segundo se rechaza. Se repite.
Final
Al acabarse los ceros, se acepta si no quedan unos sin marcar; de lo contrario se rechaza.
Terminar
Cada ronda consume dos símbolos sin marcar, de una entrada finita; los barridos de cada ronda son finitos.
Es decidible con memoria de cinta aunque no regular.
La entrada vacía supera la comprobación y acepta sin rondas de emparejamiento.
4. Reconocer puede dejar los negativos esperando; decidir no
Un decisor siempre termina y responde sí exactamente en L. Un reconocedor debe aceptar cada entrada de L después de un número finito de pasos y no aceptar ninguna de fuera; en negativos puede rechazar o seguir ejecutándose. Todo lenguaje decidible es reconocible, porque su decisor cumple la exigencia más débil.
No observar aceptación hasta cierto instante no es una respuesta negativa de un reconocedor. La distinción está en la garantía universal de terminación en negativos, no en que el programa haya acertado alguna vez o en cuánto tiempo lleva ejecutándose.
Dos procedimientos para “contiene un 1”
Una cadena binaria finita se recorre hasta encontrar un 1 o llegar al final.
Procedimiento A
Si encuentra 1 acepta; si acaba sin encontrarlo entra deliberadamente en bucle.
Procedimiento B
Si encuentra 1 acepta; si acaba sin encontrarlo rechaza.
Clasificar
A reconoce el lenguaje, pero no lo decide; B lo decide.
La respuesta negativa finita distingue al decisor.
Para 000, A no acepta y no termina; B termina con no. Ambos aceptan 001.
Un reconocedor no puede aceptar un negativo ni por equivocación
L es el lenguaje de cadenas con un 1; se propone aceptar toda cadena tras esperar diez pasos.
Positivos
Aceptaría los que contienen un 1.
Negativo
También aceptaría 000, que no pertenece a L.
Fallo
La definición de reconocedor prohíbe esas aceptaciones falsas.
No es un reconocedor correcto de L.
La libertad de no terminar fuera de L no permite responder sí fuera de L.
5. Dos reconocedores complementarios se pueden intercalar para decidir
Si L y su complemento son reconocibles, simulamos ambos reconocedores con la misma entrada, alternando un paso de cada uno. Si acepta el de L respondemos sí; si acepta el del complemento respondemos no. La entrada pertenece a uno de los dos, así ese reconocedor aceptará tras un número finito de sus pasos.
Ejecutar primero uno hasta que termine y luego el otro no ofrece esa garantía: el primero podría quedarse para siempre en una entrada negativa. La intercalación hace progresar ambos sin esperar a que uno rechace. Junto con el hecho de que un decidible tiene complemento decidible, obtenemos: L es decidible si y solo si L y su complemento son reconocibles.
Una aceptación en el cuarto paso no necesita que el otro termine
El reconocedor de L acepta x en su paso cuatro; el del complemento continúa indefinidamente.
Rondas
En cada ronda avanzamos un paso de cada simulación.
Progreso
Tras cuatro rondas, la primera ha ejecutado sus cuatro pasos y acepta.
Respuesta
Se devuelve sí, sin esperar a la segunda.
La simulación conjunta termina en este caso.
Si x estuviera en el complemento, sería su reconocedor el que garantizaría aceptación finita y la respuesta sería no.
Por qué el complemento de parada no puede ser reconocible
El lenguaje de parada se reconoce simulando y es indecidible, como probaremos a continuación.
Suponer
Si también se reconociera su complemento, tendríamos dos reconocedores complementarios.
Intercalar
El procedimiento anterior decidiría la parada en todas las entradas.
Contradicción
Eso contradice la indecidibilidad demostrada por la diagonal.
La parada es reconocible y su complemento no lo es.
La conclusión usa ambas piezas: reconocibilidad de parada e indecidibilidad; no se deduce de que una simulación concreta tarde mucho.
6. Un programa puede ser un dato de otro programa
Una descripción finita de máquina puede codificarse como una cadena ⟨M⟩. Una máquina universal lee esa descripción y simula las transiciones de M con una entrada w. La pregunta HALT reúne pares ⟨M, w⟩ para los que M termina con w. Terminar incluye tanto aceptar como rechazar: no es la misma pregunta que “acepta”.
HALT es reconocible: se simula M y se acepta el par si la simulación alcanza cualquier estado de parada. Si M no termina, la simulación puede continuar indefinidamente sin aceptar. Ningún tiempo finito de espera por sí solo certifica no parada; una prueba especializada de un programa concreto sí podría hacerlo.
Terminar con no sigue siendo terminar
M ignora su entrada y devuelve rechazo inmediatamente.
HALT
El par ⟨M, w⟩ pertenece a HALT para cualquier w porque M termina.
Aceptación
No pertenece al lenguaje de pares donde M acepta w.
Separar
Una pregunta mira terminación; la otra mira además qué respuesta produjo.
Parada no significa aceptación.
El reconocedor de HALT responde sí también cuando la máquina simulada termina rechazando.
Esperar cincuenta pasos no separa todos los casos
Un programa hace un millón de incrementos y termina; otro incrementa para siempre.
Observación corta
Tras cincuenta incrementos, ninguno ha terminado.
Primer programa
Su contador tiene un límite explícito y una medida de pasos pendientes que demuestra terminación.
Segundo
Su regla repite sin condición de salida, lo que permite demostrar no parada en este caso.
La observación finita común no decide por sí sola cuál terminará.
Se pueden resolver ambos por analizar sus reglas; la imposibilidad posterior se refiere a un decisor universal de todos los programas.
7. La diagonal contradice cualquier supuesto decisor total de parada
Supongamos que H(p, w) siempre termina y acierta si el programa descrito por p termina con entrada w. Construimos D(p): consulta H(p, p); si H responde que termina, D entra en bucle; si responde que no termina, D termina. Si H existiera, esa sería una construcción efectiva mediante una llamada y una bifurcación.
Ahora se ejecuta D con su propia descripción ⟨D⟩ como dato. No hace falta que D descubra su código ni que pueda resolver su propio comportamiento: nosotros proporcionamos esa cadena de entrada. Las dos posibles respuestas de H se contradicen con la definición de D. Por tanto ese H total y correcto no existe.
Primera respuesta posible del supuesto H
H(⟨D⟩,⟨D⟩) responde “termina”.
Qué predice
D con esa entrada debería detenerse.
Qué ejecuta D
Al recibir la predicción positiva, entra por definición en un bucle infinito.
Contradicción
H predijo parada y la ejecución no para.
La respuesta “termina” sería incorrecta.
El bucle es una rama fija de D, no una conjetura sobre una simulación difícil.
La otra respuesta tampoco escapa
H(⟨D⟩,⟨D⟩) responde “no termina”.
Qué predice
D con esa entrada no debería detenerse.
Qué ejecuta D
Al recibir la predicción negativa, su definición hace que termine.
Agotar opciones
H es supuesto decisor y tiene que dar una de estas dos respuestas, ambas contradictorias.
No existe un algoritmo universal total y correcto para HALT.
Permitir que H no termine en algunos casos evita esa suposición, pero entonces ya no es el decisor que se pretendía construir.
8. Una reducción traslada un decisor hipotético en la dirección correcta
Una reducción computable A≤ₘB transforma cualquier entrada x en f(x), termina y cumple x∈A si y solo si f(x)∈B. Si B fuese decidible, primero calcular f y después usar su decisor decidiría A.
La transformación no debe resolver antes la pregunta difícil. Puede construir el código de otro programa que la simulará después. La dirección importa: reducir un problema fácil a uno indecidible no vuelve difícil al primero. Tampoco basta conservar solo las respuestas positivas; el “si y solo si” controla positivos y negativos.
Reducir parada a aceptación mediante un programa envoltorio
Dado ⟨P, w⟩, construimos Q que ignora su entrada, simula P(w) y, si esa simulación termina, acepta.
Transformación finita
Se escribe el código de Q incorporando P y w; no se ejecuta P para construirlo.
Si P termina
Tanto si acepta como si rechaza, Q acaba su simulación y acepta.
Si P no termina
Q permanece simulando y no acepta.
Equivalencia
⟨P, w⟩∈HALT si y solo si ⟨Q, ε⟩ pertenece al problema de aceptación.
Un decisor universal de aceptación decidiría HALT; por tanto aceptación también es indecidible.
El programa envoltorio conserva los dos casos, sin confundir rechazo de P con no parada.
La dirección inversa no prueba dificultad del problema fácil
A=∅ es decidible: se responde siempre no. Se transforma toda entrada en el mismo par de un programa que entra siempre en bucle.
Imagen
El par fijo no pertenece a HALT.
Equivalencia
Ninguna entrada pertenece a A y ninguna imagen pertenece a HALT: la reducción A≤ₘHALT es correcta.
Alcance
A sigue siendo decidible, pese a reducirse a un problema indecidible.
Reducir B a algo indecidible no demuestra que B sea indecidible.
Para transferir la imposibilidad desde HALT a un nuevo problema, HALT debe estar en el lado de partida de la reducción.
9. Indecidible no significa que todos los casos sean imposibles ni que solo falte tiempo
La indecidibilidad excluye un único algoritmo correcto y terminante para todas las entradas del dominio. No impide resolver programas concretos con invariantes, inspección o restricciones sintácticas. Muchas clases restringidas tienen decisores; eso no contradice el resultado universal.
Un problema decidible puede ser extremadamente costoso y sigue siendo decidible. Si limitamos la pregunta a “¿termina en como máximo T transiciones?”, hay un procedimiento finito: comprobar parada inicial, simular hasta T pasos y revisar si se alcanzó parada dentro del límite. Un no en esa pregunta no afirma que jamás termine.
Si T se da en binario, esa simulación puede ser muy cara respecto a su longitud, sin dejar de terminar.
Parada acotada tiene una respuesta negativa finita
Un programa termina exactamente tras seis transiciones; preguntamos si termina en cinco.
Simulación
Se ejecutan como máximo cinco transiciones, comprobando los estados de parada.
Respuesta
No ha parado dentro del límite, así la respuesta acotada es no.
Cambiar límite
Con T=6 la respuesta es sí; ambas son compatibles con que termine.
La pregunta acotada es decidible y distinta de HALT sin límite.
Se distingue el límite de transiciones del estado inicial, que puede ser ya de parada incluso con T=0.
Resolver una clase restringida no produce un decisor universal
Programas formados solo por un número finito de bucles acotados, sin llamadas ni recursión no acotadas, y cuerpos de operaciones elementales terminantes.
Bucle interno
Tiene un límite finito calculado antes de recorrerlo y cada vuelta termina.
Construcción
Una cantidad finita de esos bucles anidados o consecutivos termina por inducción sobre la estructura.
Límite de la conclusión
La prueba cubre esa clase; D y programas generales no están obligados a pertenecer a ella.
La terminación de una clase sintácticamente restringida puede garantizarse.
Ni la diagonal prohíbe esas pruebas ni una prueba restringida resuelve todos los programas posibles.
Ahora lo resolvemos de principio a fin.
EJEMPLO RESUELTO 1
Paridad con dos estados
Diseña un autómata que acepta cadenas binarias con un número par de unos.
Información que basta
Solo se recuerda si la cantidad de unos leída es par o impar.
Estados
P representa par y es inicial; I representa impar.
Al leer cero
Se conserva el estado, porque no cambia la cantidad de unos.
Al leer uno
Se intercambian P e I.
Aceptación
Al terminar la entrada se acepta exactamente en P, así bastan dos estados.
Comprobar y mínimo
ε acepta, 1 rechaza y 11 acepta. Un solo estado no distinguiría ε de 1, que necesitan respuestas diferentes.
Bastan dos estados.
La cadena vacía termina en P y se acepta;1 termina en I y se rechaza;11 vuelve a P y se acepta.
EJEMPLO RESUELTO 2
Un problema decidible
Decide si una cadena finita contiene un 1.
Especificación
La entrada es una cadena binaria finita; se pide responder sí exactamente si aparece un 1.
Recorrer
Se leen los símbolos de izquierda a derecha.
Positivo
Si se encuentra un 1, se responde sí y se termina.
Negativo
Si se alcanza el final sin verlo, se responde no y se termina.
Terminación
Se leen a lo sumo todos los símbolos y se detecta el final, una cantidad finita de pasos.
Concluir
El procedimiento es correcto en positivos y negativos y siempre termina; el lenguaje es decidible.
El lenguaje es decidible.
La corrección cubre sí y no; la finitud de la entrada da una cota de pasos sin depender de la presencia de1.
Los símbolos que hemos usado
- Σ
- Alfabeto finito de símbolos de entrada.
- Σ*
- Conjunto de todas las cadenas finitas sobre Σ, incluida la vacía.
- L
- Lenguaje: subconjunto de Σ* que representa las respuestas afirmativas.
- δ
- Regla de transición que determina el siguiente estado o paso.
- ⟨M,w⟩
- Codificación finita de una máquina M junto con una entrada w.
- Decisor
- Procedimiento que termina con respuesta correcta sí o no en todas las entradas.
- Reconocedor
- Procedimiento que acepta todas y solo las cadenas de un lenguaje, pudiendo no terminar fuera de él.
Ahora te toca a ti.
Tienes cinco ejercicios. Inténtalos; las pistas te ayudan si te atascas.
Practicar este tema →