8 Indecibilidad 8.1 Problemas

1
Curso Básico de Computación
8 Indecibilidad
Ahora se considera la clase de lenguajes recursivos y recursivamente enumerables. El aspecto más interesante de este estudio trata de lenguajes cuyas
cadenas son interpretadas como códigos de instancias de problemas. Considere el problema de determinar si una MT arbitraria acepta la cadena vacı́a.
Este problema se puede formular como un problema de lenguaje codificado por
una MT con cadenas de 0’s y 1’s. El conjunto de todas las cadenas que codifican MT’s que aceptan la cadena vacı́a es un lenguaje que es recursivamente
enumerable pero no recursivo. De esto se concluye que no existen algoritmos
que decidan cuáles MT aceptan cadenas vacı́as y cuales no.
8.1 Problemas
Informalmente se usa la palabra problema para referirse a una pregunta tal
como: “¿Es una GLC ambigua?” En el caso del problema de ambigüedad, una
instancia del problema es una GLC particular. En general, una instancia de
un problema es una lista de argumentos, un argumento por cada parámetro
del problema. Restringimos nuestra atención a problemas con respuesta SiNo e instancias codificadas por cadenas sobre algún alfabeto finito, podemos
transformar la pregunta de si existe un algoritmo para resolver un problema a
si un lenguaje particular es o no recursivo.
Considere el problema de ambiguedad para GLC. Llamemos a la versión SiNo del problema AMB. Una versión más general del problema, llamada FIND,
requiere producir una palabra con dos o más árboles de derivación y responde
“no” en otro caso. Un algoritmo para FIND se puede usar para resolver AMB.
Si FIND produce una palabra w, entonces la respuesta es “sı́”; si FIND contesta “no”, entonces AMB también. Recı́procamente, dado un algoritmo para
AMB se produce un algoritmo para FIND. El algoritmo primero aplica AMB
a la gramática G. Si AMB responde “no” nuestro algoritmo responde “no”. Si
AMB responde“sı́”, el algoritmo sistematicamente comienza a generar todas
las palabras sobre el alfabeto terminal de G. Tan pronto como se genere una
palabra w, se examina para ver si tiene dos o más árboles de derivación. Note
que el algoritmo no comienza a generar palabras a menos que G sea ambigua,
de esta manera se encuentra alguna w y se imprime. Ası́ en efecto se tiene un
algoritmo.
El proceso por el cual se construye un algoritmo para un problema (como
FIND), y usa un supuesto algoritmo para otro (AMB), se llama una reducción
(de FIND a AMB). En general, cuando se reduce el problema A al problema B
se demuestra que B es por lo menos tan difı́cil como A. Ası́, en este caso, como
en muchos otros, el problema Si-No AMB no es más fácil que la versión más
general del problema. Más tarde se probará que no existe un algoritmo para
Feliú Sagols Troncoso
Matemáticas-Cinvestav
2
AMB. Por la reducción de AMB a FIND se concluye que no existe un algoritmo para FIND, ya que la existencia de un algoritmo para FIND implicarı́a
la existencia de un algoritmo para AMB, y serı́a una contradicción.
Trabajemos con la codificación de la gramática G. Dado que cada máquina
de Turing tienen un alfabeto fijo, no podemos trabajar directamente con la
notación G = (V, T, P, S). Podemos codificar este tipo de 4-tupla utilizando
cadenas binarias como sigue. A los metası́mbolos de la 4-tupla, esto es, los
paréntesis izquierdo y derecho, los corchetes, la coma y el →, son codificados
por 1, 10, 100, ...,105 , respectivamente. Al i-ésimo sı́mbolo de la gramática se
le codifica como 10i+5 . En esta codificación, no se puede saber con exactitud
cuáles son los sı́mbolos usados por terminales o noterminales.
Problemas decidibles e indecidibles
Un problema cuyo lenguaje es recursivo se dice decidible. En otro caso, el
problema es indecidible. Es decir, un problema es indecidible si no existe un
algoritmo que tome como entrada una instancia de un problema y determine
si la respuesta a esa instancia es “sı́” o “no”.
Una consecuencia no intuitiva de la definición de “indecidible” es que problemas con sólo una instancia son trivialmente decidibles.
La teorı́a de la indecibilidad trata de la existencia o no existencia de algoritmos para resolver problemas con un número infinito de instancias.
Propiedades de lenguajes recursivos y
recursivamente enumerables
Una gran cantidad de teoremas sobre indecibilidad se han probado reduciendo
un problema a otro. Esta reducción involucra combinar varias máquinas de
Turing para formar una máquina compuesta. Ahora describimos informalmente cómo se hacen estas construcciones.
Dado un algoritmo (programa para MT que siempre para), se puede permitir
que la MT compuesta ejecute una acción si el algoritmo acepta y otra si rechaza
su entrada. No se puede hacer esto si damos una MT arbitraria en vez de un
algoritmo, ya que si la MT rechaza su entrada, puede ser que corra por siempre, y la máquina compuesta nunca inicie la siguiente tarea. En los diagramas
que usemos para representar máquinas compuestas, una flecha hacia dentro de
una caja etiquetada con “inicio” indica la señal de inicio. Cajas sin señal de
inicio se asumen que comienzan a funcionar cuando la maquina compuesta lo
hace. Los algoritmos tienen dos salidas, “sı́” y “no”, que se pueden usar como
señal de inicio o como una respuesta para la máquina compuesta. Las MT
arbitrarias tienen sólo la salida “sı́”, que se usa para los mismos propósitos.
3
Curso Básico de Computación
Ahora se presentan propiedades básicas de cerradura de la clase de conjuntos
recursivos y r.e.
Teorema 8.1 El complemento de un lenguaje recursivo es recursivo.
Demostración: Sea L un lenguaje recursivo y M una Máquina de Turing
que se para con todas las entradas y acepta a L. Construya M 0 usando M de
tal manera que si M entra en un estado final con la entrada w, entonces M 0
se para sin aceptar la entrada. Si M se para sin aceptar la entrada, M 0 entra
a un estado final. La máquina M 0 es un algoritmo porque siempre ocurre uno
de estos eventos, M 0 es un algoritmo. Claramente L(M 0 ) es el complemento
de L y ası́ el complemento de L es un lenguaje recursivo. La construcción de
M 0 a partir de M se muestra en la siguiente figura:
Si
w
Si
No
M
No
Teorema 8.2: La unión de dos lenguajes recursivos es recursivo. La unión de
dos lenguajes recursivamente enumerables es recursivamente enumerable.
Demostración: Sea L1 y L2 lenguajes recursivos aceptados por los algoritmos M1 y M2 . Se construye M de modo que primero simula a M1 . Si M1
acepta, entonces M acepta. Si M1 rechaza, entonces M simula a M2 y acepta
si y sólo si M2 acepta. Ya que tanto M1 como M2 son algoritmos se tiene la
garantı́a que M siempre para. Claramente M acepta a L1 ∪ L2 .
Para lenguajes recursivamente enumerables la construcción anterior no funciona, ya que M1 puede no parar. En cambio M puede simular simultáneamente
M1 y M2 sobre cintas separadas. Si cualquiera de las dos acepta, entonces M
acepta. Las siguientes figuras muestran las dos construcciones.
Si
w
M
1
Inicio M
2
No
(a)
Si
Si
No
Feliú Sagols Troncoso
Matemáticas-Cinvestav
Si
4
Si
M
1
w
Si
M
2
(b)
Teorema 8.3: Si un lenguaje L y su complemento L̄ son ambos recursivamente enumerables, entonces L (y por lo tanto L̄) son recursivos.
Demostración: Sean M1 y M2 que aceptan a L y L̄, respectivamente. Se
construye M como en la siguiente figura para simular simultáneamente M1 y
M2 .
Si
Si
Si
No
M
1
w
M
2
M acepta a w si M1 acepta a w y rechaza a w si M2 acepta a w. Ya que w está
en L o L̄, sabemos que exactamente una de las máquinas M1 o M2 la acepta.
Ası́, M siempre dice “sı́” o “no”, pero nunca devuelve ambos resultados. Note
que no existe un limite a priori del tiempo que pueden tardar M1 o M2 antes
de aceptar, lo cierto que al menos uno de los dos lo hace. Dado que M es un
algoritmo que acepta a L, se sigue que L es recursivo.
Los Teoremas 8.1 y 8.3 tienen consecuencias importantes. Sea L y L̄ un par
de lenguajes complementarios. Entonces
1) Tanto L como L̄ son recursivos
2) Ninguno de L y L̄ son r.e. o
3) Uno de L y L̄ es r.e. pero no recursivo; el otro no es r.e.
Una técnica importante para demostrar que un problema es indecidible es demostrar por diagonalización que el complemento del lenguaje para el problema
no es r.e. Ası́, se aplica el caso (2) o (3).
8.3 La Máquina Universal de Turing y
un problema indecidible
5
Curso Básico de Computación
Ahora usaremos diagonalización para demostrar que un problema particular
es indecidible. El problema es: “¿La máquina de Turing M acepta la entrada
w?” Aqui, tanto M como w son parámetros del problema. Formalizando el
problema como un lenguaje se restringe w sobre el alfabeto {0, 1} y M tiene
como alfabeto de la cinta a {0, 1, B}. Como el problema restringido es indecidible, el problema más general seguramente también es indecidible. Escogemos
para trabajar la versión más restringida para simplificar la codificación de la
instancia del problema como cadenas.
Forma de codificar una máquina de
Turing
Para comenzar, codificamos las máquinas Turing con Σ = {0, 1}. Sea
M = (Q, {0, 1}, {0, 1, B}, δ, q1, B, {q2 })
una máquina de Turing con el alfabeto entrada {0, 1} y el blanco como el único
sı́mbolo adicional de la cinta. Además, asumimos que Q = {q1 , q2 , ..., qn } es
el conjunto de estados, y que q2 es el único estado final. El Teorema 7.10 nos
asegura que si L ⊆ (0 + 1)∗ es aceptado por alguna MT, entonces es aceptado
por una con alfabeto {0, 1, B}.
Es conveniente denotar a los sı́mbolos 0, 1, B con los sinónimos X1 , X2 , X3 ,
respectivamente. También a las direcciones L y R por los sinónimos D1 y D2 ,
respectivamente . Entonces un movimiento genérico δ(qi , Xj ) = (qk , Xl , Dm )
se codifica por la cadena binaria
0i 10j 10k 10l 10m
(8.1)
Un código binario para la máquina de Turing M es
111 código1 11 código2 11
· · · 11 códigor 111
(8.2)
donde cada códigoi es una cadena de la forma (8.1), y cada movimiento de M
se codifica por uno de los códigoi ’s. Los movimientos no necesitan estar en un
order en particular. Cualquier código para M se denota por hM i.
Cada cadena binaria se puede interpretar como el código de a lo más una
MT; muchas cadenas binarias no son código de ninguna MT. Para ver que la
decodificación es única, note que no hay cadenas de la forma (8.1) que tengan
dos 1’s seguidos, de tal forma que los códigoi ’s se pueden encontrar directamente. Si una cadena no comienza ni termina con tres unos, tiene tres unos
en una posición diferente del inicio o el final o tiene dos pares de unos que
delimitan una subcadena que no es de la forma 0i 10j 10k 10l 10m entonces la
Feliú Sagols Troncoso
Matemáticas-Cinvestav
6
cadena no representa a una MT.
El par M y w se representa por una cadena de la forma (8.2) seguida de
w. Tal cadena se denota por hM, wi.
Ejemplo: Sea M = ({q1 , q2 , q3 }, {0, 1}, {0, 1, B}, δ, q1, B, {q2 }) con los movimientos:
δ(q1 , 1) = (q3 , 0, R)
δ(q3 , 0) = (q1 , 1, R)
δ(q3 , 1) = (q2 , 0, R)
δ(q3 , B) = (q3 , 1, L)
Ası́, una cadena denotada por hM, 1011i es
111010010001010011000101010010011
000100100101001100010001000100101111011
Un lenguaje no r.e
Suponga que se tiene una lista de (0 + 1)∗ en orden canónico, donde wi es la
i-ésima palabra y Mj es la MT cuyo código, como en (8.2) es el entero j escrito
en binario. Imagine una tabla infinita que dice para toda i y para toda j si
wi ∈ L(Mj ).La figura ilustra tal tabla, 0 significa que wi ∈
/ L(Mj ) y 1 significa
wi ∈ L(Mj ).
j
1
0
1
1
0
...
2
1
1
0
0
...
3
0
0
1
0
...
4
0
1
0
1
...
.
...
...
...
4
...
3
...
2
..
i
1
Diagonal
Construimos un lenguaje Ld usando las entradas de la diagonal de la tabla para
determinar la pertenencia en Ld . Para garantizar que no hay MT que acepte
a Ld , insistimos en que wi ∈ Ld si y sólo si la entrada (i, i) es 0, es decir, si
Mi no acepta a wi . Suponga que alguna MT Mj acepta a Ld . Entonces nos
enfrentamos a la siguiente contradicción. si wj ∈ Ld , entonces la entrada (j, j)
es 0, implica que wj ∈
/ L(Mj ) y contradecimos Ld = L(Mj ). Por otra parte,
si wj ∈
/ Ld , entonces la entrada (j, j) es 1, implica que wj ∈ L(Mj ), lo cual
7
Curso Básico de Computación
también contradice Ld = L(Mj ). Como wj pertenece o no pertenece a Ld , se
concluye que la suposición Ld = L(Mj ) es falsa. Ası́, no hay MT en la lista
que acepte a Ld , y por el Teorema 7.10, no hay MT que acepte a Ld . Ası́, se
probó
Lema 8.1 Ld no es r.e.
El lenguaje universal
Definimos Lu , el “lenguaje universal” como {hM, wi | M acepta a w}. Llamamos a Lu “universal” ya que la pregunta de si cualquier cadena particular
w ∈ (0 + 1)∗ es aceptada por cualquier MT particular M es equivalente a la
pregunta de si hM 0 , wi ∈ Lu , donde M 0 es la MT cuyo alfabeto de la cinta es
{0, 1, B} equivalente a M construido como en el Teorema 7.10.
Teorema 8.4 Lu es recursivamente enumerable.
Demostración: Vamos a exhibir una máquina de Turing M1 con tres cintas que acepta a Lu . La primera cinta de M1 es la cinta de entrada, y la
cabeza de lectura de esa cinta se usa para buscar los movimientos de la MT M
cuando recibe el código hM, wi como entrada. Note que los movimientos de
M se localizan entre los dos primeros bloques de tres 1’s. La segunda cinta de
M1 será usada para simular la cinta de M . El alfabeto de M es {0, 1, B}, de
modo que cada sı́mbolo de la cinta de M puede ser almacenado en una celda
de la segunda cinta de M1 . Observe que si no restringieramos el alfabeto de
M , tendrı́amos que usar muchas celdas de la cinta de M1 para simular una
de las una de las celdas de M , pero la simulación podrı́a ser llevada a cabo
con un poco más de trabajo. La Tercer cinta contiene el estado de M , con qi
representado por oi . El comportamiento de M1 puede inferirse fácilmente a
partir de la codificación de la MT.
La existencia de M1 es suficiente para probar el Teorema 8.4. Sin embargo,
por los Teoremas 7.2 y 7.10, se puede encontrar una MT con una cinta semiinfinita y alfabeto {0, 1, B} que acepte a Lu . Llamamos a esta MT Mu , la
máquina universal de Turing.
Por el Lema 8.1, el lenguaje diagonal Ld no es r.e. y por lo tanto no
recursivo. Ası́, por el Teorema 8.1, L̄d no es recursivo. Note que L̄d
{wi | Mi acepta a wi }. Podemos probar que el lenguaje universal Lu
{hM, wi | M acepta a w} no es recursivo reduciendo L̄d a Lu . Ası́ Lu
un ejemplo de un lenguaje que es r.e. pero no es recursivo. De hecho, L̄d
otro ejemplo de tal lenguaje.
es
=
=
es
es
Teorema 8.5 Lu no es recursivo.
Demostración: Suponga que A es un algoritmo que reconoce a Lu . Entonces
puede reconocer a L̄d de la siguiente manera. Dada una cadena w ∈ (0 + 1)∗ ,
Feliú Sagols Troncoso
Matemáticas-Cinvestav
8
determine por un sencillo cálculo el valor de i tal que w = wi . El entero i
en binario es el código para alguna MT Mi . Se da como entrada hMi , wi i al
algoritmo A y se acepta a w si y sólo si Mi acepta a wi . La construcción se
muestra en la siguiente figura:
<M i , wi >
w
Convertir
Hipotetico
A para L u
Si
Si
No
No
Construir algoritmo para L d
Es fácil verificar que el algoritmo construido acepta a w si y sólo si w = wi y
wi ∈ L(Mi ). Ası́, se tiene un algoritmo para L̄d . Ya que no existe tal algoritmo, nuestra suposición, de que el algoritmo A para Lu existe, es falsa. Por
lo tanto, Lu es r.e. pero no recursivo.
8.4 Teorema de Rice y algunos
problemas indecidibles
Ahora tenemos un ejemplo de un lenguaje r.e que no es recursivo. El problema asociado “M acepta a w” es indecidible, y podemos usar este hecho para
demostrar que otros problemas son indecidibles.
Ejemplo: Considérese el siguiente problema: “¿Es L(M ) 6= ∅?” Sea hM i una
codificación de M como en (8.2). Defı́nanse
Lne = {hM i|L(M ) 6= ∅} y Le = {hM i|L(M ) = ∅}.
Nótese que Le y Lne son complementos uno del otro, como cada cadena binaria denota alguna MT; aquellas con un mal formato denotarán las MT’s sin
movimientos. Todas estas cadenas están en Le . Se afirma que Lne es r.e. pero
no recursivo y que Le no es r.e.
Primero se probará que Lne es r.e. construyendo una MT M que reconozca
codificaciones de MT’s que aceptan conjuntos no vacı́os. Dada una entrada
hMi i, M adivina de manera no determinı́stica una cadena x aceptada por Mi
y verifica que, en efecto, Mi acepta a x simulando Mi sobre la entrada x. Este
paso también puede llevarse a cabo determinı́sticamente si se usa la pareja
generadora descrita en la sección 7.7. Para cada par (j, k) se simula Mi sobre
la j-ésima cadena binaria (en orden canónico) para k pasos. Si Mi acepta,
entonces M acepta hMi i.
Ahora se mostrará que Le no es recursivo. Supóngase que lo fuera. Entonces
se podrı́a construir un algoritmo para Lu , lo que vioları́a el Teorema 8.5. Sea
9
Curso Básico de Computación
A un algoritmo que acepta Le . Existe un algoritmo B que, dada hM, wi, construye una MT M 0 que acepta ∅ si M no acepta w y que acepta (0 + 1)∗ si M
acepta a w. El diagrama de M 0 se muestra en la siguiente figura. La máquina
M 0 ignora su entrada x, y en su lugar, simula M sobre la entrada w, aceptando
si M acepta a w.
Si
w
x
Si
M
M’
Nótese que M 0 no es B. En vez de esto, B es como un compilador que toma
hM, wi como un ”programa fuente” y produce M 0 como un ”programa objeto”.
Hasta aquı́ se ha descrito lo que B debe hacer, pero no cómo lo hace.
La construcción de B es sencilla, toma hM, wi y aisla w. La cadena w tiene
longitud n, por decir, w = a1 a2 · · · an . El algoritmo B crea n + 3 estados
q1 , q2 , · · · , qn+3 con movimientos
δ (q1 , X) = (q2 , $, R) para cualquier X
(imprime el marcador),
δ (qi , X) = (qi+1 , ai−1 , R) para cualquier X y
2 ≤ i ≤ n + 1 (imprime w),
δ (qn+2 , X) = (qn+2 , B, R) para X 6= B
(borra sobre la cinta),
δ (qn+2 , B) = (qn+3 , B, L) ,
δ (qn+3 , X) = (qn+3 , X, L) para X 6= B
(encuentra el marcador).
Después de producir las codificaciones para estos movimientos, B suma n + 3
a los ı́ndices de los estados de M e incluye el movimiento
δ(qn+3 , $) = (qn+4 , $, R)/*comienza M */
y todos los movimientos de M en su MT generada. La MT resultante tiene
un sı́mbolo extra en la cinta $, pero por el Teorema 7.10 se puede construir
M 0 con el alfabeto de cinta {0, 1, B}, y son seguridad, se puede hacer que q2
sea el estado de aceptación. Este paso completa el algoritmo B, y su salida es
la MT M 0 de la figura anterior.
Ahora supóngase que el algoritmo A que acepta Le existe. Entonces se construye un algoritmo C para Lu como en la figura siguiente:
Feliú Sagols Troncoso
< M, w >
Matemáticas-Cinvestav 10
M’
B
Si
No
A
C
Si
No
Si M acepta a w, entonces L(M 0 ) 6= ∅; ası́ A dice “no” y C dice “si”. Si M no
acepta a w, entonces L(M 0 ) = ∅, A dice “si” y C dice “no”. Por el Teorema
8.5, C no existe, luego, A tampoco existe. Ası́, Le no es recursivo. Si Lne
fuera recursivo, por el Teorema 8.1, Le lo serı́a también. De esta manera, Lne
es r.e. pero no recursivo. Si Le fuese r.e., entonces por el Teorema 8.3, Le y
Lne serı́an recursivos. Luego, Le no es r.e.
Ejemplo: Considere el lenguaje
Lr = {hM i | L(M ) es recursivo}
y
Lnr = {hM i | L(M ) no es recursivo}
Note que Lr no es {hM i | M se para con todas las entradas}, aunque éste
incluye el último lenguaje. Una MT M puede aceptar un lenguaje recursivo
aún cuando M pueda ciclarse con algunas palabras que no están en L(M );
algunas otras MT equivalentes a M deben parar siempre. Afirmamos que ni
Lr ni Lnr son r.e.
Suponga que Lr fue r.e. Entonces podemos construir una MT para L̄u la cual
sabemos que no existe. Sea Mr la MT que accepta a Lr . Podemos construir
un algoritmo A que tome como entrada a hM, wi y produzca como salida una
MT M 0 tal que
∅ si M no acepta a w
0
L(M ) =
Lu si M acepta a w
Note que Lu no es recursivo, de esta manera M 0 acepta un lenguaje recursivo
si y sólo si M no acepta a w. El plano de M 0 se muestra en la siguiente figura:
w
Si
Inicio
M
Si
Mu
x
M’
Dado A y Mr se puede construir una MT que acepte a L̄u , en la siguiente figura
se muestra el comportamiento.
< M, w >
A
M’
Mr
Si
Si
11
Curso Básico de Computación
Con la entrada hM, wi la MT usa A para producir M 0 , usa Mr para determinar si el conjunto aceptado por M 0 es recursivo, y acepta si y sólo si L(M 0 ) es
recursivo. Pero L(M 0 ) es recursivo si y sólo si L(M 0 ) = ∅, lo que significa que
M no acepta a w. Ası́ la MT de la figura anterior acepta a hM, wi si y sólo si
hM, wi está en L̄u .
Para Lnr , suponga que tiene una MT Mnr que acepta a Lnr . Entonces se puede
usar Mnr y un algoritmo B, para aceptar L̄u . B toma como entrada a hM, wi
y produce como salida una MT M 0 tal que
∗
Σ si M acepta a w
0
L(M ) =
Lu si M no acepta a w
Ası́ M 0 acepta un lenguaje recursivo si y sólo si M acepta a w. M 0 , la cual
debe producir B, se muestra en la siguiente figura
Si
M
w
Si
Si
Mu
x
M’
(a)
Y una MT que acepte a L̄u dados B y Mnr se muestra en
< M, w >
B
M’
M nr
Si
Si
(b)
La MT anterior acepta hM, wi si y sólo si L(M 0 ) no es recursivo, o equivalentemente, si y sólo si M no acepta a w. Es decir, la MT acepta a hM, wi si
y sólo si hM, wi está en L̄u . Como ya tenemos demostrado que no existe tal
MT, la suposición de que Mnr existe es falsa. Y se concluye que Lnr no es r.e.
Teorema de Rice para conjuntos de
ı́ndice recursivo
En el ejemplo anterior se demostró que no se puede decidir si el conjunto aceptado por una MT es vacı́o o recursivo. La técnica de la demostración también
se puede usar para demostrar que no se puede decidir si el conjunto aceptado
es finito, infinito, regular, libre de contexto, si tiene un número par de cadenas, etc. Entonces ¿qué podemos decidir acerca del conjunto aceptado por
una MT?
Sea L un conjunto de lenguajes r.e., cada uno de los cuales es un subconjunto
de (0 + 1)∗ . Se dice que L es una propiedad de los lenguajes r.e. Un conjunto
L tiene la propiedad L si L es un elemento de L. L es una propiedad trivial
si L es vacı́o o si L consiste de todos los lenguajes r.e. Sea LL el conjunto
{hM i | L(M ) ∈ L}
Feliú Sagols Troncoso
Matemáticas-Cinvestav 12
Teorema 8.6 (Teorema de Rice) Cualquier propiedad no trivial L de los
lenguajes r.e. es indecidible.
Demostración: Sin pérdida de generalidad asumimos que ∅ no está en L
(en otro caso considere L). Como L es no trivial, existe L con la propiedad
L. Sea ML una MT que acepta a L. Suponga que L es decidible. Entonces
existe un algoritmo ML que acepta a LL . Usamos ML y ML para construir un
algoritmo para Lu . Primero construya un algoritmo A que tome hM, wi como
entrada y produzca como salida a hM 0 i, donde L(M 0 ) está en L si y sólo si M
acepta a w.
El diseño de M 0 se muestra en la siguiente figura:
w
x
Si Inicio
M
Si
ML
Si
M’
Primero M 0 ignora todas las entradas y simula M en w. Si M no acepta a w,
entonces M 0 no acepta a x. Si M acepta a w, entonces M 0 simula a ML en x,
aceptando a x si y sólo si ML acepta a x. Ası́, M 0 acepta a ∅ o L dependiendo
de si M acepta w o no.
Podemos usar la máquina ML hipotética para determinar si L(M 0 ) está en
L. Como L(M 0 ) está en L si y sólo si hM, wi está en Lu , se tiene un algoritmo
que reconoce a Lu , lo cual es una contradicción. Ası́, L debe ser indecidible.
El Teorema 8.6 tiene una gran variedad de consecuencias, algunas se resumen
en el siguiente corolario.
Corolario: Las siguientes propiedades de los conjuntos r.e. no son decidibles :
a) vacuidad
b) finitud
c) regularidad
d) libertad de contexto
Teorema de Rice para conjuntos de
ı́ndice recursivamente enumerable
La condición bajo la cual un conjunto LL es r.e. es mucho más complicada. Se
debe demostrar que LL es r.e. si y sólo si L satisface las siguientes condiciones:
13
Curso Básico de Computación
1) Si L está en L y L ⊆ L0 , para algún L0 r.e., entonces L0 está en L (la
propiedad de contención).
2) Si L es un lenguaje infinito en L, entonces existe un subconjunto finito de
L en L.
3) El conjunto de lenguajes finitos en L es enumerable, en el sentido que existe
una MT que genera la (posible) cadena infinita código1 #código2 #...,
donde códigoi es un código para el i-ésimo lenguaje infinito en L (en
cualquier orden). El código para el lenguaje finito {w1 , w2 , ..., wn } es
justo w1 , w2 , ..., wn .
Probemos estás caracterizaciones con una serie de lemas.
Lema 8.2 Si L no tiene la propiedad de contención, entonces LL no es r.e.
Demostración: Generalizamos la demostración que Lnr no es r.e. Sea L1
en L, L1 ⊆ L2 , de modo que L2 no está en L. Se construye el algoritmo A que
toma como entrada hM, wi y produce como salida la MT M 0 con el comportamiento que se muestra en la siguiente figura:
Si
M1
x
w
Si
Inicio
Si
Si
M2
M
M’
donde M1 y M2 aceptan a L1 y L2 respectivamente. Si M acepta a w, entonces se inicia M2 , y M 0 acepta a x si x está en L1 o L2 . Si M no acepta a
w, entonces M2 nunca empieza, de esta manera M 0 acepta a x si y sólo si x
está en L1 . Como L1 ⊆ L2 ,
L2 si M acepta a w
0
L(M ) =
L1 si M no acepta a w
Ası́, L(M 0 ) está en L si y sólo si M no acepta a w. Se deja al lector el diseño del
compilador A que toma a hM, wi como entrada y las conecta con la máquina
de Turing fija M1 y M2 para construir M 0 . Ya construido A, se puede usar a
MT ML de LL para aceptar a L̄u , como se muestra en la siguiente figura:
< M, w >
A
M’
ML
Si
Si
Esta MT acepta a hM, wi si y sólo si M 0 acepta un lenguaje en L, o equivalentemente, si y sólo si M no acepta a w. Ası́ L̄u serı́a r.e. Como esto último
no es cierto concluimos que LL no es r.e.
Feliú Sagols Troncoso
Matemáticas-Cinvestav 14
Lema 8.3 Si L tiene un lenguaje infinito L tal que no hay subconjuntos finitos
de L que estén en L, entonces LL no es r.e.
Demostración: Bajo el supuesto que LL es r.e vamos a probar que L̄u es r.e.
Sea M1 una MT que acepta a L. Construya el algoritmo A que toma el par
hM, wi como entrada y produce como salida una MT M 0 que acepta a L si
w no está en L(M ) y acepta algún subconjunto finito de L en otro caso. El
diseño de L0 se muestra en la siguiente figura:
Inicio, simular para | x | movimientos
Si
x
M1
w
M’
M
Si
No "Si" después
de | x| movimientos
M 0 simula a M1 con la entrada x. Si M1 acepta a x, entonces M 0 simula a M
con w durante |x| movimientos. Si M no acepta a w después de |x| movimientos, entonces M 0 acepta a x.
Si w está en L(M ), entonces M acepta a w después de algún número de
movimientos, digamos j. Entonces L(M 0 ) = {x | x ∈ L y |x| < j}, el cual es
un subconjunto finito de L. Si w no está en L(M ), entonces L(M 0 ) = L. Por
lo tanto, si M no acepta a w, L(M 0 ) está en L, y si M acepta a w, L(M 0 ), es
un subconjunto finito de L, que no está en L por hipótesis del lema. Con el
argumento estandar que hemos venido manejando se puede probar que si LL
es r.e., también lo es L̄u . Como el último no es r.e., se concluye que el primero
tampoco lo es.
Lema 8.4 Si LL es r.e., entonces la lista de códigos binarios para el conjunto
finito en L es enumerable.
Demostración: Usamos el par generador descrito en la Sección 7.7. Cuando
(i, j) se genera, tomamos a i como el código binario de un conjunto finito,
asumimos que 0 es el código para la coma, 10 es el código para el cero, y
11 es el código para 1. Podemos construir de manera directa a la MT M (i)
que acepta exactamente las palabras en el lenguaje finito representado por i.
Entonces simula el enumerador para LL con j pasos. Si se tiene impreso a
M (i) , se imprime el código para el conjunto finito representado por i, es decir,
la representación binaria de i mismo, seguido de un sı́mbolo delimitador #.
En cualquier caso, después la simulación regresa el control al par generador,
el cual genera el siguiente par (i, j).
Teorema 8.7 LL es r.e. si y sólo si
1) Si L está en L y L ⊆ L0 , para algún L0 r.e., entonces L0 está en L.
2) Si L es un lenguaje infinito en L, entonces existe un subconjunto finito L0
en L que está en L.
15
Curso Básico de Computación
3) El conjunto de lenguajes finitos en L es enumerable.
Demostración: La parte del “sólo sı́” son los Lemas 8.2, 8.3 y 8.4. Para la
parte del “sı́”, suponga que se tiene (1), (2) y (3). Se construye la MT M1 que
reconoce a hM i si y sólo si L(M ) está en L. M1 genera pares (i, j) usando el
generador de pares. En respuesta a (i, j), M1 simula a M2 , que es un enumerador de un conjunto finito en L, para i pasos. Sabemos que M2 existe por la
condición (3). Sea L1 el último conjunto completamente impreso en la salida
de M2 . Entonces se simula a M durante j pasos en cada palabra de L1 . Si M
acepta todas las palabras en L1 , entonces M1 acepta a hM i . Si no, M1 genera
el siguiente par (i, j).
Usamos la condición (1) y (2) para demostrar que L(M1 ) = LL . Suponga que
L está en LL , y sea M cualquier MT con L(M ) = L. Por la condición (2),
existe un conjunto finito L0 ⊆ L en L. Sea L0 el lenguaje generado después i
pasos por M2 , y sea j el número máximo de pasos que requiere M para aceptar
una palabra en L0 . Entonces cuando M1 genera (i, j) acepta hM i.
Recı́procamente, suponga que M1 acepta hM i. Entonces existe algún (i, j)
tal que dentro de j pasos M acepta cada palabra en algún lenguaje finito L0
tal que M2 genera a L0 dentro de los primeros i pasos. Entonces L0 está en L,
y L0 ⊆ L(M ). Por la condición (1), L(M ) está en L. De tal manera hM i está
en LL . Concluimos que L(M1 ) = LL .
El Teorema 8.7 tiene una gran variedad de consecuencias. Se resumen algunas
de ellas como corolarios.
Corolario 1 Las siguientes propiedades de los conjuntos r.e. no son r.e.
a) L = ∅.
b) L = Σ∗ .
c) L es recursivo.
d) L no es recursivo.
e) L es un singleton (tiene exactamente un miembro).
f) L es un conjunto regular.
g) L − Lu 6= ∅.
Demostración: En cada caso la condición 1 se viola, excepto para (b), donde
(2) se viola, y (g), donde (3) se viola.
Corolario 2 Las siguientes propiedades de las conjuntos r.e. son r.e
a) L 6= ∅.
Feliú Sagols Troncoso
Matemáticas-Cinvestav 16
b) L contiene al menos 10 miembros.
c) w ∈ L para alguna palabra fija w.
d) L ∩ Lu 6= ∅.
Problemas acerca de las máquinas de
Turing
¿El Teorema 8.6 dice todo sobre si la MT es indecidible? La respuesta es
no. Este teorema tiene que ver con propiedades del lenguaje aceptado, no
propiedades de la máquina de Turing misma. Por ejemplo, la pregunta “¿Dada
una MT tiene un número par de estados?” es claramente decidible.
Ejemplo: No se puede decidir si una máquina de Turing con alfabeto {0, 1, B}
imprime alguna vez tres 1’s consecutivos sobre su cinta. Para cada máquina de
ci , la cual simula sobre cinta en blanco
Turing Mi se construye una máquina M
ci usa 01 para codificar un 0 y 10
Mi sobre cinta en blanco. Sin embargo, M
ci
para codificar un 1. Si la cinta de Mi tiene un 0 en la celda j, entonces M
ci
tiene 01 en las celdas 2j − 1 y 2j. Si Mi cambia un sı́mbolo, entonces M
ci
cambia el correspondiente 1 a 0, luego el respectivo 0 a 1. Se puede diseñar M
ci puede
para que nunca tenga tres 1’s consecutivos sobre su cinta. Más aún, M
ci imprima tres 1’s consecutivos y pare.
modificarse para que si Mi acepta, M
c
Ası́, Mi imprime tres 1’s consecutivos si y sólo si Mi acepta . Por el Teorema
8.6, no se puede decidir si una MT acepta , ya que el enunciado “ está en L”
no es trivial. Ası́, la pregunta de saber si una MT arbitraria imprime alguna
vez tres 1’s consecutivos no es decidible.
Ejemplo: ¿Es decidible si una MT que inicia sobre una cinta en blanco, visita
cualquier celda cuatro o más veces?. Si la máquina de Turing nunca visita una
celda cuatro o más veces, entonces cada secuencia de cruce (secuencia de estados en los cuales la frontera entre celdas es atravezada, asumiendo cambio
de estados antes de que la cabeza se mueva) es de longitud a lo más tres. Pero
hay un número finito de secuencias de cruce de longitud tres o menos. Ası́
puede suceder que la máquina de Turing permanezca dentro de una cantidad
fija de celdas de cinta, en cuyo caso las técnicas de autómatas finitos responden
la pregunta, o se repite alguna secuencia de cruce. Pero si alguna secuencia
de cruce se repite, entonces la MT se mueve a la derecha con algún patrón
facilmente detectable, y la pregunta de nuevo es decidible.
8.5 Indecidibilidad del problema de
correspondencia de Post