La PizarraMatemática.

Grado en Matemáticas

Modelos de computación y decidibilidad

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.

  1. Sí

    1,01 y 100 pertenecen a L.

  2. No

    ε,0 y 000 no pertenecen.

  3. Criterio

    Se debe encontrar algún símbolo 1; la longitud sola no decide la respuesta.

Resultado

El problema queda especificado para todas las cadenas binarias finitas.

Lo comprobamos

ε 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.

  1. Estructura

    Cada entrada de la matriz indica si existe la arista entre esa pareja.

  2. Validar

    Se comprueban dimensiones, diagonal cero y simetría.

  3. Pregunta

    El lenguaje puede reunir las codificaciones válidas de grafos conexos; una búsqueda finita decide esa propiedad.

Resultado

Una codificación convierte instancias de grafos en cadenas que un procedimiento puede leer.

Lo comprobamos

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.

Un autómata de dos estados conserva exactamente la paridad
Solo recordamos par o imparPI0011P acepta ; I no acepta0 mantiene ; 1 cambia de estadoInicio en P: cero unos es par.
Estado P inicial y de aceptación, marcado con doble círculo, y estado I no aceptante. Leer cero conserva el estado mediante un lazo; leer uno cambia de P a I o de I a P. Al acabar la cadena se acepta exactamente si se está en P, lo que incluye la cadena vacía.

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.

  1. Inicio

    P representa cero unos.

  2. Actualizar

    Con los símbolos 1,1,0,0,1 se recorren I, P, P, P, I.

  3. Final

    I no es aceptante; la cadena tiene tres unos, una cantidad impar.

Resultado

Se rechaza 11001.

Lo comprobamos

ε 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}.

  1. Prefijos

    Tras leer 0⁰,0¹,…,0ᵖ hay p+1 situaciones y solo p estados.

  2. Coincidencia

    Dos prefijos 0ⁱ y 0ʲ, i<j, llegan al mismo estado.
  3. Mismo futuro

    Añadir 1ⁱ lleva al mismo estado final en ambos; sin embargo 0ⁱ1ⁱ pertenece y 0ʲ1ⁱ no.

Resultado

La contradicción demuestra que ese lenguaje no es regular.

Lo comprobamos

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.

Una transición cambia símbolo, estado y posición del cabezal
Un paso local de la máquinaAntes: q, lee 0□101□□□Regla: (q,0) → (q′,1, derecha)Después: q′□111□□□Escribe 1 y avanza una celda.Las demás celdas se conservan.
Se muestra una ventana de siete celdas de una cinta que puede extenderse. Antes, la celda destacada contiene cero y el control está en q. La regla escribe uno en esa celda, pasa a q prima y mueve el cabezal una celda a la derecha. Después se destaca la nueva celda del cabezal; las otras celdas mantienen sus símbolos.

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).

  1. Condición

    Se aplica cuando el control está en q y el cabezal lee 0.

  2. Escribir

    Solo la celda actual cambia de 0 a 1.

  3. Continuar

    El estado pasa a q′ y el cabezal avanza a la celda de la derecha.

Resultado

Un paso modifica símbolo, estado y posición según una regla finita.

Lo comprobamos

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.

  1. Forma

    Primero se comprueba que no haya un cero después de empezar los unos.

  2. Emparejar

    Se marca un cero no marcado y un uno no marcado; si falta el segundo se rechaza. Se repite.

  3. Final

    Al acabarse los ceros, se acepta si no quedan unos sin marcar; de lo contrario se rechaza.

  4. Terminar

    Cada ronda consume dos símbolos sin marcar, de una entrada finita; los barridos de cada ronda son finitos.

Resultado

Es decidible con memoria de cinta aunque no regular.

Lo comprobamos

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.

  1. Procedimiento A

    Si encuentra 1 acepta; si acaba sin encontrarlo entra deliberadamente en bucle.

  2. Procedimiento B

    Si encuentra 1 acepta; si acaba sin encontrarlo rechaza.

  3. Clasificar

    A reconoce el lenguaje, pero no lo decide; B lo decide.

Resultado

La respuesta negativa finita distingue al decisor.

Lo comprobamos

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.

  1. Positivos

    Aceptaría los que contienen un 1.

  2. Negativo

    También aceptaría 000, que no pertenece a L.

  3. Fallo

    La definición de reconocedor prohíbe esas aceptaciones falsas.

Resultado

No es un reconocedor correcto de L.

Lo comprobamos

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.

La simulación intercalada no queda atrapada esperando una respuesta negativa
No esperar a que termine el primeroReconoce LReconoce ¬Lpaso 1paso 1paso 2paso 2paso 3paso 3aceptapaso 4Alternar garantiza avanzar en ambos.Si acepta L: responder sí.
Dos reconocedores, uno de L y otro de su complemento, avanzan un paso cada uno por ronda. En el ejemplo el primero acepta en su cuarto paso y se responde sí, sin necesitar que el segundo termine. En una entrada del complemento ocurriría la aceptación del segundo y se respondería no. La garantía depende de que ambos sean reconocedores correctos de lenguajes complementarios.

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.

  1. Rondas

    En cada ronda avanzamos un paso de cada simulación.

  2. Progreso

    Tras cuatro rondas, la primera ha ejecutado sus cuatro pasos y acepta.

  3. Respuesta

    Se devuelve sí, sin esperar a la segunda.

Resultado

La simulación conjunta termina en este caso.

Lo comprobamos

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.

  1. Suponer

    Si también se reconociera su complemento, tendríamos dos reconocedores complementarios.

  2. Intercalar

    El procedimiento anterior decidiría la parada en todas las entradas.

  3. Contradicción

    Eso contradice la indecidibilidad demostrada por la diagonal.

Resultado

La parada es reconocible y su complemento no lo es.

Lo comprobamos

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.

  1. HALT

    El par ⟨M, w⟩ pertenece a HALT para cualquier w porque M termina.

  2. Aceptación

    No pertenece al lenguaje de pares donde M acepta w.

  3. Separar

    Una pregunta mira terminación; la otra mira además qué respuesta produjo.

Resultado

Parada no significa aceptación.

Lo comprobamos

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.

  1. Observación corta

    Tras cincuenta incrementos, ninguno ha terminado.

  2. Primer programa

    Su contador tiene un límite explícito y una medida de pasos pendientes que demuestra terminación.

  3. Segundo

    Su regla repite sin condición de salida, lo que permite demostrar no parada en este caso.

Resultado

La observación finita común no decide por sí sola cuál terminará.

Lo comprobamos

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.

La diagonal hace que D actúe al revés de la predicción sobre sí mismo
Supongamos un decisor total HEntrada p para DH(p, p)parano parabucleterminaAhora usamos p=⟨D⟩.Ambas predicciones se contradicen.
D recibe una descripción p y pregunta al supuesto decisor H si el programa descrito por p termina con entrada p. Si H responde que para, D entra en bucle; si responde que no para, D termina. Al introducir la propia descripción de D, cualquier respuesta de H contradice la conducta que define para D. La construcción supone que H siempre termina y acierta, precisamente lo que se demuestra imposible.

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”.

  1. Qué predice

    D con esa entrada debería detenerse.

  2. Qué ejecuta D

    Al recibir la predicción positiva, entra por definición en un bucle infinito.

  3. Contradicción

    H predijo parada y la ejecución no para.

Resultado

La respuesta “termina” sería incorrecta.

Lo comprobamos

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”.

  1. Qué predice

    D con esa entrada no debería detenerse.

  2. Qué ejecuta D

    Al recibir la predicción negativa, su definición hace que termine.

  3. Agotar opciones

    H es supuesto decisor y tiene que dar una de estas dos respuestas, ambas contradictorias.

Resultado

No existe un algoritmo universal total y correcto para HALT.

Lo comprobamos

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.

Por eso A indecidible y A≤ₘB implican B indecidible.

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.

  1. Transformación finita

    Se escribe el código de Q incorporando P y w; no se ejecuta P para construirlo.

  2. Si P termina

    Tanto si acepta como si rechaza, Q acaba su simulación y acepta.

  3. Si P no termina

    Q permanece simulando y no acepta.

  4. Equivalencia

    ⟨P, w⟩∈HALT si y solo si ⟨Q, ε⟩ pertenece al problema de aceptación.
Resultado

Un decisor universal de aceptación decidiría HALT; por tanto aceptación también es indecidible.

Lo comprobamos

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.

  1. Imagen

    El par fijo no pertenece a HALT.

  2. Equivalencia

    Ninguna entrada pertenece a A y ninguna imagen pertenece a HALT: la reducción A≤ₘHALT es correcta.

  3. Alcance

    A sigue siendo decidible, pese a reducirse a un problema indecidible.

Resultado

Reducir B a algo indecidible no demuestra que B sea indecidible.

Lo comprobamos

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.

  1. Simulación

    Se ejecutan como máximo cinco transiciones, comprobando los estados de parada.

  2. Respuesta

    No ha parado dentro del límite, así la respuesta acotada es no.

  3. Cambiar límite

    Con T=6 la respuesta es sí; ambas son compatibles con que termine.

Resultado

La pregunta acotada es decidible y distinta de HALT sin límite.

Lo comprobamos

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.

  1. Bucle interno

    Tiene un límite finito calculado antes de recorrerlo y cada vuelta termina.

  2. Construcción

    Una cantidad finita de esos bucles anidados o consecutivos termina por inducción sobre la estructura.

  3. Límite de la conclusión

    La prueba cubre esa clase; D y programas generales no están obligados a pertenecer a ella.

Resultado

La terminación de una clase sintácticamente restringida puede garantizarse.

Lo comprobamos

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.

  1. Información que basta

    Solo se recuerda si la cantidad de unos leída es par o impar.

  2. Estados

    P representa par y es inicial; I representa impar.

  3. Al leer cero

    Se conserva el estado, porque no cambia la cantidad de unos.

  4. Al leer uno

    Se intercambian P e I.

  5. Aceptación

    Al terminar la entrada se acepta exactamente en P, así bastan dos estados.

  6. Comprobar y mínimo

    ε acepta, 1 rechaza y 11 acepta. Un solo estado no distinguiría ε de 1, que necesitan respuestas diferentes.

Resultado

Bastan dos estados.

Lo comprobamos

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.

  1. Especificación

    La entrada es una cadena binaria finita; se pide responder sí exactamente si aparece un 1.

  2. Recorrer

    Se leen los símbolos de izquierda a derecha.

  3. Positivo

    Si se encuentra un 1, se responde sí y se termina.

  4. Negativo

    Si se alcanza el final sin verlo, se responde no y se termina.

  5. Terminación

    Se leen a lo sumo todos los símbolos y se detecta el final, una cantidad finita de pasos.

  6. Concluir

    El procedimiento es correcto en positivos y negativos y siempre termina; el lenguaje es decidible.

Resultado

El lenguaje es decidible.

Lo comprobamos

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 →

Para ampliar