Máquinas de Turing Jorge A. Baier Departamento de Ciencia de la Computación Pontificia Universidad Católica de Chile Santiago, Chile Máquinas de Turing como Enumeradoras Las máquinas de Turing pueden ser usadas para enumerar palabras. De hecho cualquier lenguaje recursivamente enumerable siempre puede ser generado (escrito en una cinta) por una MT. Si el lenguaje es infinito, esta máquina no se detiene, pero garantiza que eventualmente cualquier palabra w del lenguaje aparecerá escrita en la cinta. La máquina que genera esta salida es una máquina enumeradora. Jorge A. Baier (DCC-PUC): Máquinas de Turing 2 / 22 Una máquina para enumerar L(M ) Supongamos que tenemos una máquina M que acepta un lenguaje recursivamente enumerable, L. ¿Cómo construimos una máquina enumeradora para L? (que escriba como output a todas las palabras de L) Primer intento: Construimos una máquina con 2 cintas: una para salida y otra para simular a M . Definimos un orden canónico para las palabras en Σ∗ (es decir Σ∗ = {w1 , w2 , . . . , wn }. Escribimos wi en la segunda cinta. Simulamos a M ocupando la segunda cinta. 3 Si M acepta a wj escribimos wj # en la cinta de salida. 1 2 Problema: ¿Qué pasa si M no para con wi ? Jorge A. Baier (DCC-PUC): Máquinas de Turing 3 / 22 Una máquina para enumerar L(M ) Supongamos que tenemos una máquina M que acepta un lenguaje recursivamente enumerable, L. ¿Cómo construimos una máquina enumeradora para L? (que escriba como output a todas las palabras de L) Primer intento: Construimos una máquina con 2 cintas: una para salida y otra para simular a M . Definimos un orden canónico para las palabras en Σ∗ (es decir Σ∗ = {w1 , w2 , . . . , wn }. Escribimos wi en la segunda cinta. Simulamos a M ocupando la segunda cinta. 3 Si M acepta a wj escribimos wj # en la cinta de salida. 1 2 Problema: ¿Qué pasa si M no para con wi ? No podremos seguir generando las palabras que vienen a continuación. Jorge A. Baier (DCC-PUC): Máquinas de Turing 3 / 22 Una máquina para enumerar L(M ) Construir una máquina que simule a M pero sólo un número finito de pasos. La máquina recorre la siguiente matriz: w0 w1 w2 ... 1 (1, w0 ) (1, w1 ) (1, w2 ) · · · 2 (2, w0 ) (2, w1 ) (2, w2 ) · · · 3 (3, w0 ) (3, w1 ) (3, w2 ) · · · .. .. . . ··· De tal forma que para cada par (i, wj ) nuestra máquina simula i movidas de M con entrada wj . Si M acepta en a lo más i movidas, escribe wj # en la cinta de salida. El recorrido se realiza de tal manera que i + j = constante. Con esto garantizamos que en tiempo finito recorreremos todas las palabras posibles, enumerando a L. Jorge A. Baier (DCC-PUC): Máquinas de Turing 4 / 22 Lenguajes Recursivos y Recursivamente Enumerables Definition Un lenguaje L es recursivamente en enumerable ssi es aceptado por alguna máquina de Turing. Definition La máquina M se detiene con el input w ssi M , después de un número finito de pasos, llega a una configuración en la que no está definida una siguiente movida. Definition Un lenguaje es recursivo ssi es aceptado por una máquina de Turing M que se detiene para todo input. Jorge A. Baier (DCC-PUC): Máquinas de Turing 5 / 22 Lenguajes Recursivos y Recursivamente Enumerables Definition Un lenguaje L es recursivamente en enumerable ssi es aceptado por alguna máquina de Turing. Definition La máquina M se detiene con el input w ssi M , después de un número finito de pasos, llega a una configuración en la que no está definida una siguiente movida. Definition Un lenguaje es recursivo ssi es aceptado por una máquina de Turing M que se detiene para todo input. Observación: Todo lenguaje recursivo es también recursivamente enumerable. Jorge A. Baier (DCC-PUC): Máquinas de Turing 5 / 22 Propiedades de los lenguajes aceptados por MTs Theorem Los lenguajes recursivos son cerrados bajo complemento. Theorem Los lenguajes recursivos son cerrados bajo unión. Theorem Los lenguajes recursivamente enumerables son cerrados bajo unión. Jorge A. Baier (DCC-PUC): Máquinas de Turing 6 / 22 Un teorema importante Teorema: Si L es r.e. y L es r.e., entonces L es recursivo. Jorge A. Baier (DCC-PUC): Máquinas de Turing 7 / 22 Un teorema importante Teorema: Si L es r.e. y L es r.e., entonces L es recursivo. Demostración: Sean M1 y M2 máquinas para L y L. Usando a M1 y M2 podemos construir la siguiente máquina para L: Sı́ w Sı́ M1 Sı́ No M2 Esta máquina se detiene para toda entrada, puesto que o M1 se detiene aceptando o M2 se detiene aceptando. Por lo tanto, L es recursivo. Jorge A. Baier (DCC-PUC): Máquinas de Turing 7 / 22 Problemas de Decisión Los problemas de decisión están caracterizados por preguntas con respuesta sı́/no. Por ejemplo: Dada una gramática libre de contexto G, ¿es G ambigua? Jorge A. Baier (DCC-PUC): Máquinas de Turing 8 / 22 Problemas de Decisión Los problemas de decisión están caracterizados por preguntas con respuesta sı́/no. Por ejemplo: Dada una gramática libre de contexto G, ¿es G ambigua? Esperamos resolver los problemas de decisión usando máquinas de Turing que respondan a la pregunta. Jorge A. Baier (DCC-PUC): Máquinas de Turing 8 / 22 Problemas de Decisión y su Lenguaje Por esa razón, conviene ver a las MT como aceptando o no un lenguaje asociado al problema. Para el caso anterior, lo que la máquina M = (Q, Σ, Γ, δ, q0 , B, F ) debe aceptar es: L(M ) = {hGi | G es una GLC ambigua} Jorge A. Baier (DCC-PUC): Máquinas de Turing 9 / 22 Problemas de Decisión y su Lenguaje Por esa razón, conviene ver a las MT como aceptando o no un lenguaje asociado al problema. Para el caso anterior, lo que la máquina M = (Q, Σ, Γ, δ, q0 , B, F ) debe aceptar es: L(M ) = {hGi | G es una GLC ambigua} Diremos que la máquina ha entregado una respuesta si ésta se detiene. La respuesta será sı́ si la máquina se detuvo en un estado de aceptación. Por otra parte, la respuesta será no, si se detuvo en un estado en Q \ F . Jorge A. Baier (DCC-PUC): Máquinas de Turing 9 / 22 Problemas Decidibles e Indecidibles Diremos que un problema de decisión P es decidible si su lenguaje asociado, L, es recursivo. En caso contrario el problemas es indecidible. Jorge A. Baier (DCC-PUC): Máquinas de Turing 10 / 22 Problemas Decidibles e Indecidibles Diremos que un problema de decisión P es decidible si su lenguaje asociado, L, es recursivo. En caso contrario el problemas es indecidible. De este último tipo de problemas, debemos distinguir entre aquellos que tienen asociado un lenguaje recursivamente enumerable y los que no lo tienen. Jorge A. Baier (DCC-PUC): Máquinas de Turing 10 / 22 Problemas Decidibles e Indecidibles Diremos que un problema de decisión P es decidible si su lenguaje asociado, L, es recursivo. En caso contrario el problemas es indecidible. De este último tipo de problemas, debemos distinguir entre aquellos que tienen asociado un lenguaje recursivamente enumerable y los que no lo tienen. Cabe notar que los problemas con una sola instancia tales como: “¿Es P = N P ?” o “¿Existe vida extra-terrestre?” son decidibles. Jorge A. Baier (DCC-PUC): Máquinas de Turing 10 / 22 Codificación de Máquinas de Turing Una MT se puede codificar como un string binario. Si, por ejemplo, tenemos a la máquina M = (Q, {0, 1}, {0, 1, B}, δ, q1 , B, {q2 }), y ésta tiene movidas del tipo: δ(qi , Xj ) = (qk , Xl , Dm ) (Xj , Xl ∈ Γ; qi , qj ∈ Q) Representamos esta movida con el string: 0i 10j 10k 10l 10m (*) El código de M , denotado por hM i, se puede escribir como: 111cod 1 11cod 2 11 · · · 11cod r 111, donde cada cod i es del tipo (*). Jorge A. Baier (DCC-PUC): Máquinas de Turing 11 / 22 Un Lenguaje no R.E. Supongamos que tenemos una lista de las palabras en {0, 1}∗ de tal manera que wi corresponde a la i-ésima palabra. Sea Mj la MT cuyo código corresponde a wj . Definamos a Ld = {wi | wi 6∈ L(Mi )} Jorge A. Baier (DCC-PUC): Máquinas de Turing 12 / 22 Un Lenguaje no R.E. Supongamos que tenemos una lista de las palabras en {0, 1}∗ de tal manera que wi corresponde a la i-ésima palabra. Sea Mj la MT cuyo código corresponde a wj . Definamos a Ld = {wi | wi 6∈ L(Mi )} Si Ld es recursivamente enumerable, entonces éste debe ser aceptado por una máquina. Esta máquina debe ser MJ , para algún J y es tal que Ld = L(MJ ). Jorge A. Baier (DCC-PUC): Máquinas de Turing 12 / 22 Un Lenguaje no R.E. (cont.) La pregunta que nos hacemos es ¿pertenece wJ a L(MJ )? Jorge A. Baier (DCC-PUC): Máquinas de Turing 13 / 22 Un Lenguaje no R.E. (cont.) La pregunta que nos hacemos es ¿pertenece wJ a L(MJ )? Si suponemos que sı́, es decir wJ ∈ L(MJ ), llegamos a una contradicción, puesto que por definición del lenguaje wJ 6∈ L(MJ ). Jorge A. Baier (DCC-PUC): Máquinas de Turing 13 / 22 Un Lenguaje no R.E. (cont.) La pregunta que nos hacemos es ¿pertenece wJ a L(MJ )? Si suponemos que sı́, es decir wJ ∈ L(MJ ), llegamos a una contradicción, puesto que por definición del lenguaje wJ 6∈ L(MJ ). Si suponemos que no, es decir wJ 6∈ L(MJ ), por la definición del lenguaje, wJ ∈ L(Mj ), lo que también es una contradicción. Concluimos que no puede existir una máquina de Turing para Ld y, por lo tanto, Ld no es recursivamente enumerable. Jorge A. Baier (DCC-PUC): Máquinas de Turing 13 / 22 El Lenguaje Universal El lenguaje universal se define de la siguiente manera: Lu = {hM, wi | M acepta a w}, El problema de decisión asociado a este problema es: Dada una MT M y una palabra w, ¿acepta M a w? ¿Es Lu recursivamente enumerable? La respuesta es sı́. Para aceptarlo, podemos construir una Máquina de Turing M 0 que recibe el código de M y w, y simula a M alimentada con w. Si M acepta a w, entonces responde sı́. Nótese que esta máquina siempre acepta cuando hM, wi ∈ Lu . Jorge A. Baier (DCC-PUC): Máquinas de Turing 14 / 22 Lu no es recursivo Demostraremos que Lu no es recursivamente enumerable: Supongamos que lo fuera y que Mu acepta Lu . Entonces, podemos construir una máquina M 0 que acepta Ld de la siguiente manera: M 0 recibe un argumento hM i y alimenta a Mu con hM, hM ii. Si Mu responde sı́, significa que M no acepta hM i y, por lo tanto hM i ∈ Ld . Luego M 0 acepta Ld , lo cual no es posible. Se concluye, por lo tanto, que Lu no es recursivo. Jorge A. Baier (DCC-PUC): Máquinas de Turing 15 / 22 El problema de la parada de una MT Dada una máquina M y una palabra w, ¿para M alimentada w? El lenguaje asociado a este problema es el siguiente: Lh = {(hM i, w) | M (w) para} Suponiendo que tal algoritmo existe construiremos un algoritmo M 0 para decidir Ld . Supongamos M 00 que, dada la codificación de una máquina M , entrega el código de una máquina M0 que acepta el mismo lenguaje que M , pero que entra en un loop infinito cuando M se detiene sin aceptar. Jorge A. Baier (DCC-PUC): Máquinas de Turing 16 / 22 El problema de la parada, gráficamente M0 funciona igual que M pero , con la diferencia que cada vez M dice NO, M0 entra en un loop infinito. El siguiente esquema muestra un algoritmo para aceptar Lu . Algoritmo que decide Lu hM i Generador de M 0 hM 0 i Si Si No No Algoritmo que decide Lh $w$ Jorge A. Baier (DCC-PUC): Máquinas de Turing 17 / 22 Otro problema ¿Dada una máquina arbitraria M , es L(M ) = ∅? El lenguaje asociado a este problema: Le = {hM i | L(M ) = ∅} Por otro lado, tenemos que su complemento es: Lne = {hM i | L(M ) 6= ∅} ¿Qué podemos decir acerca de estos lenguajes? Jorge A. Baier (DCC-PUC): Máquinas de Turing 18 / 22 Otro problema ¿Dada una máquina arbitraria M , es L(M ) = ∅? El lenguaje asociado a este problema: Le = {hM i | L(M ) = ∅} Por otro lado, tenemos que su complemento es: Lne = {hM i | L(M ) 6= ∅} ¿Qué podemos decir acerca de estos lenguajes? La conclusión más directa es que Lne es recursivamente enumerable. ¿por qué? Jorge A. Baier (DCC-PUC): Máquinas de Turing 18 / 22 Le no es recursivo Demostraremos que si suponemos que Le es recursivo entonces Lu también lo es. Supongamos que Me puede decidir Le . Jorge A. Baier (DCC-PUC): Máquinas de Turing 19 / 22 Le no es recursivo Demostraremos que si suponemos que Le es recursivo entonces Lu también lo es. Supongamos que Me puede decidir Le . Dado un par hM, wi, podemos construir una máquina M 00 que ignora su entrada y simula a hM, wi. Jorge A. Baier (DCC-PUC): Máquinas de Turing 19 / 22 Le no es recursivo Demostraremos que si suponemos que Le es recursivo entonces Lu también lo es. Supongamos que Me puede decidir Le . Dado un par hM, wi, podemos construir una máquina M 00 que ignora su entrada y simula a hM, wi. M 00 acepta (0 + 1)∗ ssi M acepta a w y acepta ∅ ssi M no acepta a w. Podemos usar ahora Me para decidir Lu . Jorge A. Baier (DCC-PUC): Máquinas de Turing 19 / 22 Otro problema ¿Dada una MT cualquiera M , acepta M un lenguaje con 3 palabras? El lenguaje asociado es L#3 = {hM i | |L(M )| = 3} L#3 es indecidible (no es recursivo). Demostraremos que si L#3 es recursivo, entonces Lu también lo es. En efecto, dado hM, wi arbitrarios, siempre podemos construir: M0 w Sı́ M Partida Sı́ Sı́ M#3 x Jorge A. Baier (DCC-PUC): Máquinas de Turing 20 / 22 Otro problema (continuación) Donde M#3 es cualquier máquina que acepta un lenguaje de exactamente 3 palabras (puede ser {0, 00, 000}, por ejemplo). Para esta máquina se tiene que: ( L(M#3 ) si M acepta w 0 L(M ) = ∅ si M no acepta w Si tuviéramos un algoritmo para decidir L#3 podemos usarlo también para decidir Lu pasándole M 0 y viendo qué responde. Jorge A. Baier (DCC-PUC): Máquinas de Turing 21 / 22 Teorema de Rice La construcción que hemos visto se puede hacer con cualquier conjunto que hable sobre propiedades de los lenguajes de máquinas de Turing. Generalizando esta construcción se obtiene: Theorem (de Rice) Cualquier propiedad no triviala P de los lenguajes recursivamente enumerables es indecidible. a Una propiedad no trivial es aquélla que es cumplida sólo por algunos lenguajes Jorge A. Baier (DCC-PUC): Máquinas de Turing 22 / 22 Demostración del Teorema de Rice Supongamos que ∅ no cumple con la propiedad (si no, podemos considerar P). Como P es no trivial existe un lenguaje r.e. L que cumple con la propiedad. Supongamos que ML es la máquina que lo acepta. Podemos construir la siguiente máquina M 0 : M0 w Sı́ M Partida Sı́ Sı́ ML x Cuyo lenguaje es ( L(ML ) L(M 0 ) = ∅ si M acepta w si M no acepta w Claramente, si existe una máquina MP para decidir si un lenguaje tiene la propiedad P, entonces podemos usar M 0 para decidir Lu . Jorge A. Baier (DCC-PUC): Máquinas de Turing 23 / 22