Se prohíbe la reproducción total o parcial de este documento, excepto para uso privado de los alumnos de la asignatura Teoría de Autómatas I de la UNED y los alumnos de asignaturas equivalentes de otras universidades
Problemas resueltos del libro de texto: J. G. Brookshear, Teoría de la Computación, Addison-Wesley Iberoamericana, 1993
Teoría de Autómatas I Profª Dra. Mª Ángeles Manjarrés Prof. Dr. Francisco Javier Díez Correo-e:
[email protected]
Dpto. Inteligencia Artificial E.T.S.I. Informática UNED
Primera edición: diciembre de 1999 Revisado en junio de 2001
Problemas de repaso del capítulo 1
Problema 1 Tal y como se muestra en el ejercicio número 2, la intersección de una colección finita de lenguajes regulares siempre es regular. Basta probar pues que el lenguaje descrito en el enunciado coincide con la intersección de una colección finita de lenguajes regulares del alfabeto {x, y, z}. Una tal colección la constituyen los lenguajes L1, L2 y L3 donde: L1 es la colección de todas las cadenas de x, y y z con un número impar de xs L2 es la colección de todas las cadenas de x, y y z con un número impar de ys L3 es la colección de todas las cadenas de x, y y z con un número par de zs Las cadenas que pertenezcan al lenguaje L =L1 ∩ L2 ∩ L3 habrán de verificar las tres condiciones anteriores. Podemos demostrar que los lenguajes L1, L2 y L3 son regulares mostrando los autómatas finitos que los reconocen: y
x
y
x
x z
y
x 1
3
2
5
4
z
z
6 z
y
x z
x
y
z
y
Problema 2 Demostraremos que el lenguaje L intersección de una colección finita de lenguajes regulares {Li}i=1..n es un lenguaje regular describiendo un procedimiento sistemático de construcción del autómata finito que lo reconoce. Sea {Mi(Si, Σ, δi, ιi, Fi)}i=1..n un conjunto de autómatas finitos tales que ∀ i Mi reconoce el lenguaje Li. Entonces el autómata M (S, Σ, δ, ι, F) tal que: S = S1 x S2 x…Sn, producto cartesiano de los respectivos conjuntos de estados Si; Σ alfabeto de los lenguajes Li; δ: S x Σ → S, función de transición definida en términos de las funciones δi, tal que dado un estado s = (s1, s2,…sn), con si ∈ Si, y un símbolo x∈Σ entonces δ(s,x) = q, q ∈ S q = (δ1(s1,x), δ2(s2,x),… δn(sn,x)) (al dibujar el diagrama del autómata M, desde cada estado s = (s1, s2,…sn) se traza un arco hacia q = (q1, q2,…qn) rotulado por x si y sólo si para todo i en el diagrama del autómata Mi existe un arco hacia qi rotulado por x) ; ι = (ι1, ι2,…ιn), ι ∈ S, estado producto de los estados iniciales ιi;
F = {f ∈ S , | f = (f1,f2,…fn), fi ∈ Fi}, F ⊆ S, colección de estados producto de estados finales fi; reconoce el lenguaje L = L1 ∩ L2 ∩ …Ln. Demostremos que el autómata M acepta exclusivamente las cadenas que pertenecen al lenguaje L. Por definición de aceptación de una cadena por un autómata finito, M acepta una cadena x1x2..xL si y sólo si existe una secuencia de estados E1, E2…EL (Ej = (e1j, e2j,…enj)), con E1 = ι y EL ∈ F, tales que desde Ej-1 existe un arco rotulado por xj hacia Ej, para todo valor de j. Dado el procedimiento de construcción del autómata M, lo anterior tiene lugar si y sólo si ∀ i existe una secuencia de estados ei1, ei2…eiL con ei1 = ιi y EiL ∈ Fi, tales que desde eij-1 existe un arco rotulado por xj hacia eij, para todo valor de j. La afirmación anterior implica que el autómata M acepta una cadena si y sólo si cada autómata Mi acepta dicha cadena. Puesto que existe un procedimiento de construcción de un autómata finito que reconoce el lenguaje L, podemos afirmar que L es regular. Siguiendo el procedimiento indicado, puede construirse el autómata finito que reconoce el lenguaje especificado en el enunciado del problema 1, a partir de los autómatas que reconocen los lenguajes L1, L2 y L3. y 235
245
y z x
z
x
z
z
y 236
246
y
x
x
y 135
y
145
z
x z
x
z
z 136
y
146
y
Problema 3 Veamos igualmente un procedimiento sistemático de construcción de un autómata finito M (S, Σ, δ, ι, F) que reconoce el lenguaje L = L1 – L2. Sean M1(S1, Σ, δ1, ι1, F1) y M2(S2, Σ, δ2, ι2, F2) los autómatas finitos que reconocen los lenguajes L1 y L2. Entonces el autómata M (S, Σ, δ, ι, F) tal que:
S = S1 x S2, producto cartesiano de los conjuntos de estados S1 y S2; Σ alfabeto de los lenguajes L1 y L2; δ: S x Σ → S, función de transición definida en términos de las funciones δ1 y δ2, tal que dado un estado s = (s1, s2), con s1 ∈ S1 y s2 ∈ S2, y un símbolo x∈Σ entonces δ(s,x) = q, q ∈ S q = (δ1(s1,x), δ2(s2,x)). (al dibujar el diagrama del autómata, desde cada estado s = (s1, s2) se traza un arco hacia q = (q1, q2) rotulado por x si y sólo si en los diagramas de los autómatas M1 y M2 existe un arco hacia q1 y q2, respectivamente, rotulado por x) ι = (ι1, ι2), ι ∈ S, estado producto de los estados iniciales ι1 y ι2; F = {f ∈ S , | f = (f1,f2), f1 ∈ F1 y f2 ∉ F2}, F ⊆ S; reconoce el lenguaje L = L1 – L2. Obsérvese que el procedimiento de construcción es el mismo que el del autómata que reconoce el lenguaje intersección excepto en lo que respecta a la designación de los estados de aceptación. Dado el procedimiento de construcción del autómata, es fácil ver que una cadena es reconocida por M si y sólo si es reconocida por M1 y rechazada por M2: M acepta una cadena x1x2..xL si y sólo si existe una secuencia de estados E1, E2…EL (Ej = (e1j, e2j)), con E1 = ι y EL ∈ F, tales que desde Ej-1 existe un arco rotulado por xj hacia Ej, para todo valor de j. Si este es el caso existe asimismo una secuencia de estados e11, e12…e1L con e11 = ι1 y e1L ∈ F1, tal que desde e1j-1 existe un arco rotulado por xj hacia e1j, y por tanto la cadena es reconocida por el autómata M1. El reconocimiento de la cadena lleva sin embargo al autómata M2 a un estado e2L que no es de aceptación. A continuación ilustramos este procedimiento de construcción cuando el lenguaje L1 es el conjunto de cadenas con un número impar de xs y el lenguaje L2 es el conjunto de cadenas con un número impar de ys. L = L1 – L2 es el conjunto de las cadenas con un número impar de xs y un número par de ys. y
y
x
-
x 1
2 x
z
x y
3
4 y
z
z
z
z z
y
x
14
y 13
x
z 24
x
y
x 23
y
z
El mismo resultado puede demostrarse considerando dos resultados previos:
1) la intersección de dos lenguajes regulares es un lenguajes regular (demostrado en el problema 2) 2) el complemento de un lenguaje regular es un lenguaje regular (para construir el autómata que reconozca dicho lenguaje basta con cambiar en el autómata que reconoce el lenguaje inicial los estados de aceptación por estados de no aceptación y viceversa) , y considerando la relación L1 –L2 = L1 ∩ (Σ* - L2)
Problema 4.a Un autómata finito no puede reconocer la colección de palíndronos de Σ*, siempre que Σ sea un alfabeto con más de un símbolo (en el caso de un sólo símbolo la colección de palíndronos coincide con Σ*), por tener un número finito de estados. El autómata que reconociese este lenguaje debería, en particular, reconocer cadenas que respondieran al patrón xnymxn, donde x e y son dos símbolos cualesquiera del alfabeto, para n y m arbitrariamente grandes. Para n mayor que el número de estados del autómata, forzosamente en el reconocimiento de la subcadena xn el autómata pasaría más de una vez por al menos uno de los estados, recorriendo un bucle o camino cerrado en el diagrama de estados. Supongamos que el número de símbolos xs leídos en ese tránsito es j. En ese caso, cualquier cadena de configuración xn+kjymxn sería asimismo reconocida por el autómata para cualquier valor de k ∈ N, a pesar de no ser un palíndrono. Problema 4.b La colección de palíndronos de un lenguaje regular no necesariamente es un lenguaje regular. Consideremos como contraejemplo la colección de palíndronos del lenguaje regular caracterizado por la expresión regular x*· y*· x*. Las cadenas capicuas de este lenguaje responden precisamente al patrón xnymxn, que caracteriza un lenguaje no regular. Problema 5. El lenguaje que consiste en las cadenas de la forma ων, con ω∈ L y ν ∈(Σ*-L) es regular por ser la concatenación de dos lenguajes regulares: el lenguaje L y su lenguaje complementario. Problema 6. Si L es un lenguaje regular, también es regular el lenguaje Linv obtenido al escribir de forma inversa las cadenas de L. Para demostrar esto, veremos que existe un procedimiento sistemático para formular la expresión regular que representa al lenguaje Linv. Expresiones regulares de un alfabeto Σ son:
∅ (que representa el lenguaje vacío);
los símbolos de Σ; cualquier combinación de expresiones regulares mediante las operaciones ∪, · y ∗. Si r es la expresión regular que representa el lenguaje L, denominaremos I(r) a la expresión regular que representa al lenguaje constituido por las cadenas inversas de las cadenas contenidas en L. Es fácil ver que: I(∅) = ∅ I(x) = x ∀ x ∈Σ ∀ r, s expresiones regulares en Σ: I(r·s) = I(r) · I(s) I(r*) = (I(r))* I(r∪s) = I(r)∪I(s) La demostración puede basarse asimismo en la demostración de existencia de un autómata finito que reconoce tal lenguaje, construído a partir del autómata que reconoce el lenguaje de partida. Si M (S, Σ, δ, ι, F) es el autómata finito que reconoce el lenguaje L, el lenguaje Linv será reconocido por el autómata Minv (Sinv, Σ, δinv, ιinv, Finv) tal que: Sinv = S∪ιinv δinv: Sinv x Σ → Sinv, función de transición inversa de δ, tal que dado un estado s ∈ Sinv, y un símbolo x∈Σ entonces δinv (s,x) = q si δ(q, x) = s. Además, se añaden las transiciones δinv (ιinv,x) = q si δ(q, x) = f, ∀ f ∈ F. ιinv, estado inicial Finv = {ι} si ι ∉F (el único estado de aceptación es el estado inicial de M). Finv = {ι, ιinv } si ι ∈ F (los estados de aceptación son el estado inicial de M y el nuevo estado inicial). M acepta una cadena x1x2..xL si y sólo si existe una secuencia de estados E1, E2…EL, E1 = ι y EL ∈ F, tales que desde Ej-1 existe un arco rotulado por xj hacia Ej, para todo valor de j. Dado su procedimiento de construcción, el autómata Minv reconocerá la cadena xL…x2x1 ya que la secuencia de estados ιinv,EL-1…E2, E1, (con E1 = ι, estado de aceptación de Minv) verifica que desde ιinv existe un arco rotulado por x1 hacia EL-1 y desde EL-j existe un arco rotulado por xj+2 hacia EL – j+1, para todo valor de j entre 1 y L. La afirmación anterior implica que el autómata Minv acepta una cadena si y sólo si el autómata M acepta la cadena inversa. El ejemplo muestra el autómata que reconoce el lenguaje constituido por las cadenas inversas del lenguaje generado por la expresión regular (x·y*·z) ∪ y, obtenido por el procedimiento descrito:
y
y x
z
x
y
z
y
y
z
Los estados de aceptación del autómata de partida pueden, en este caso, eliminarse del diagrama: y x z y
z
Problema 7 El lenguaje L’ definido por la colección de cadenas de L cuyas inversas también se encuentran en L puede expresarse como: L’ = Linv∩L Y por tanto es un lenguaje regular. Problema 9 Dado un conjunto de reglas gramaticales que genera un lenguaje regular, la gramática que resulta al intercambiar el orden entre terminales y no terminales en la parte derecha de las reglas generará, obviamente, el lenguaje constituido por las cadenas inversas. Tal lenguaje será, por tanto, un lenguaje regular (resultado obtenido en el problema 6). Demostrar que todo lenguaje regular puede generarse mediante una gramática de estas características es trivial, ya que todo lenguaje regular es el lenguaje obtenido al invertir las cadenas de otro lenguaje regular (en particular, L = (Linv)inv). Problema 10 El lenguaje descrito debería incluir, en particular, todas las cadenas del tipo xnyn, para n∈N. Por un razonamiento análogo al utilizado en el problema 4 puede deducirse que un autómata finito (y, por tanto, con un número finito de estados) que acepte dichas cadenas aceptará también determinadas cadenas que respondan al patrón xnym, con n ≠m, que no pertenecerán al lenguaje especificado.
Problema 11 El lenguaje que consiste en aquellas cadenas que no contienen tres xs consecutivas es el lenguaje complementario del que consiste en aquellas cadenas que sí contienen tres xs consecutivas. Este último lenguaje es regular, puesto que puede representarse mediante la expresión regular: (x∪y)* ·x·x·x· (x∪y)*. Su lenguaje complementario es también por tanto regular (ver problema 3). A continuación se muestran los respectivos diagramas de los autómatas que reconocen los dos lenguajes anteriores.
y
x x
x
x
y
x
x
y
y
x
y
x
y
Problema 12 Cualquier lenguaje finito puede expresarse como la unión finita de los lenguajes que constituyen cada una de sus cadenas. Es decir, si L = {ωi}i=1…n, y Li ={ωi}, entonces L = {∪ Li}i=1…n Problema 13 El diagrama se obtiene siguiendo las indicaciones del libro de texto (página 46). 2
b
a
1 b 3
b
13 a
b 1
a 23
3 b
12
a
2
Eliminando los estados no accesibles se obtiene:
b
a
Problema 14 Cada transición (p,λ,q) del diagrama D se sustituye en el diagrama D’ por el conjunto de transiciones {(p,xi,si) | (q,xi,si) transición de D}. Es decir, la transición λ se elimina y a su estado origen se añaden todos los arcos que partían de su estado destino (conservando sus etiquetas y destinos). Lógicamente en este proceso de construcción del nuevo diagrama pueden aparecer etiquetas repetidas en los arcos y, por tanto, no determinismo. Puesto que la transición λ no implica la lectura de ningún símbolo de la cadena de entrada, el diagrama D´ conduce a un estado de aceptación bajo la lectura de las mismas cadenas que D, abreviando el tránsito de p a los estados si al saltarse el estado q. Problema 15 (z ∪ y)* · x Cualquier combinación de z e y seguida de x, o bien una única x b. ((x·x*)·y·y*)) Cadenas que empiezan por una sucesión de xs (con al menos una x) y termina con una sucesión de ys (con al menos una y) c. ((x·x*)∪(y·y*)) Cadenas de xs con al menos una x y cadenas de ys con al menos una y. d. ((x*·y*)·z)) Cadenas formadas por cero o más xs seguidas de cero o más ys seguidas de cero o más zs. a.
Problema 16 a. Todas las cadenas que consisten en un número impar de x. x · (x · x) * b. Todas las cadenas que consisten en un número impar de xs y un número par de ys. Veremos primero cuál es el autómata finito que reconoce este lenguaje y de ahí derivaremos la expresión regular que lo describe. El lenguaje puede verse como la intersección de dos lenguajes más sencillos: el conjunto de cadenas con un
número impar de xs y el conjunto de cadenas con un número par de ys. El autómata que reconoce el lenguaje puede construirse a partir de los correspondientes autómatas. y
y
∩
x 1
x
2 x
y
y 4
3 y
x
14
y 13
x
x 24
x
y
x 23
y
Siguiendo el procedimiento indicado en la página 63 del libro de texto, el autómata anterior puede describirse mediante un diagrama de tan sólo dos estados. x· x
y· y
y· x
24
x· y y
13
y
x x
(y · x) · (x · x)* · (x · y) ∪ (y · y)
23
y · (x · x)*) · y
(((y · x) · (x · x)* · (x · y))∪ (y · y)
23
13 (y · (x · x)*) · (x · y)) ∪ x
Aplicando las reglas de obtención de expresiones regulares correspondientes a autómatas de dos estados (uno inicial y otro de aceptación): t
r s
u *
*
*
(((r · s) · t ) · (u · ((r · s) · t*))*)
Se obtiene la expresión regular: ((((((y · x) · (x · x)* · (x · y))∪ (y · y ))* · (((y · x) · (x · x)*) · y) ∪ x) · (y · (x · x)*) · y)* · (y · (x · x)*) · (x · y)) ∪ x) · (((((y · x) · (x · x)* · (x · y))∪ (y · y ))* · (((y · x) · (x · x)*) · y) ∪ x))*) c. Todas las cadenas de x e y tales que cada y esté inmediatamente precedida por una x e inmediatamente seguida por una x. Análogamente, partiendo del autómata: x x
y
Se obtiene la expresión regular: (x · x*) · (y · x · x*)* Problema 18. Demostraremos que el lenguaje {ω | ω∈Σ∗ y xω∈ L} es regular mostrando que existe una gramática regular que lo genera. Si L es regular, existe una gramática regular que lo genera. Dicha gramática verifica las propiedades de las gramáticas regulares: en la parte izquierda de sus reglas sólo aparecen símbolos no terminales, y en la parte derecha de sus reglas aparece el símbolo de cadena vacía o bien un símbolo terminal seguido de un no terminal o un solo símbolo terminal. Si xω∈ L y ω ≠ λ, existe una regla de reescritura S → xA, donde S es el símbolo de inicio de la gramática, tal que la reescritura del símbolo no terminal A mediante la aplicación de cierta secuencia de reglas genera la cadena ω. Si ω = λ entonces la regla S → x forma parte de la gramática. Es posible pues seleccionar de entre las reglas de la gramática que genera el lenguaje L un subconjunto que genera el lenguaje constituido por las cadenas ω (el subconjunto que reescribe a símbolos terminales el no terminal A) al que habrá que añadir la regla S → λ en el caso en que x∈ L. Considerando reglas lineales por la izquierda (ver problema 9) se demuestra análogamente que el lenguaje {ω | ω∈Σ∗ y ωx∈ L} es también regular. Problema 19 Vale como ejemplo cualquier lenguaje regular que se exprese como la unión de lenguajes cuya intersección sea el lenguaje vacío, y desde cuyo estado de aceptación existan transiciones distintas de aquellas que conducen a un estado de error o captación global.
b a
b a
∪
a a b
b
Problema 20 Denotemos la cadena con un número de símbolos mayor que el número de estados del autómata como x1x2…xn. Forzosamente en el reconocimiento de esta cadena el autómata pasa más de una vez por un cierto estado, es decir, alguna subcadena xjxj+1…xk es reconocida en un camino cerrado entre estados del autómata. El autómata aceptará también necesariamente cualquier cadena de la forma x1x2…(xjxj+1…xj+k)m…xn ∀ n ∈ N, y por tanto aceptara un número infinito de cadenas. Problema 21 El algoritmo se deduce de la demostración de equivalencia entre los lenguajes aceptados por los autómatas finitos y los lenguajes generados por expresiones regulares (ver página 63 del libro de texto). El algoritmo consta de tres etapas: 1) El diagrama de transiciones se replica tantas veces como estados de aceptación tenga el autómata, pero de modo que en cada réplica sólo uno de los estados de aceptación siga siendo de aceptación. El lenguaje aceptado por el autómata que representa el diagrama de transiciones original es igual a la unión de los lenguajes aceptados por los autómatas que representan los diagramas así obtenidos. 2) En cada uno de los diagramas anteriores se van suprimiendo estados hasta que sólo queden el estado inicial y el de aceptación. Por cada estado suprimido se suprimen también sus arcos incidentes y emergentes y, por cada par de arcos eliminado (uno que llega al estado y otro que emerge de él) se añade un arco desde el estado origen del primero al estado destino del segundo, rotulado por la etiqueta que se indica en la figura. r p
q
((p · r*) · q)
3) Una vez que se dispone de un diagrama con sólo dos estados, uno de inicio y otro de aceptación, considerando la notación de la figura:
r
t s
u
Se obtiene la expresión regular asociada como: ((r* · s) · t*) , si no existe el arco etiquetado por u (((r* · s) · t*) · (u · ((r* · s) · t*))*), si existe el arco etiquetado por u Problema 22 Veamos que no existe ningún autómata finito que reconozca exclusivamente las cadenas indicadas. Para cadenas con n superior al número de estados del autómata, necesariamente el autómata pasa más de una vez por un mismo estado en el proceso de reconocimiento. Si xj es una subcadena leída en un camino cerrado (xn = xmxjxn-m-j), cualquier cadena de tipo xmxkjxn-m-j será también reconocida por el autómata, ∀ k ∈ N. Veamos, finalmente, que pk= m + kj + n – m – j = (k – 1)j +n no puede ser un número primo para todo valor de k. Si k = n + 1, pn+1= n(j+1), que no es un número primo. Problema 23 Análogamente (k – 1)j +n no puede tener raíz cuadrada exacta para todo valor de k, ya que no existe una serie infinita de números {pk} con raíz cuadrada exacta tales que pk+1 > pk ∀ k ∈ N y que la diferencia entre dos números consecutivos de la serie sea constante (pk+1 – pk = j). Si a > b > c, a, b, c∈ N entonces a2-b2 > b2-c2. Problema 24 a. (x ∪ y*) y (x ∪ y*) (x ∪ y*) b. (x · (x ∪ y)* y ((x ∪ y)* · y) x · (x ∪ u)* · y c. (((x ∪ y) · y) · (x ∪ y)*) y (y · (x ∪ y)*) y ·y · (x ∪ y)* d. ((x ∪ y) · (x ∪ ∅)) y (x ∪ y) · (x ∪ y)* ((x ∪ y) · (x ∪ ∅)) Problema 25. Si L es un lenguaje regular, entonces el conjunto de cadenas en L de longitud impar es también un lenguaje regular.
Consideremos el lenguaje constituido por el conjunto de todas las cadenas de longitud par de Σ*. Dicho lenguaje es regular, ya que puede representarse mediante la expresión regular: (∪i,j (xixj))*. El conjunto de cadenas en L de longitud impar es el complementario en L del lenguaje anterior, y por tanto es también un lenguaje regular. El conjunto de cadenas en L de longitud par coincide con la intersección entre el lenguaje L y el lenguaje de las cadenas de longitud par de Σ*, y es también por tanto un lenguaje regular. Problema 26. El diagrama de un autómata finito con más de un estado de aceptación puede transformarse en el diagrama de un autómata – posiblemente no determinista - que reconoce el mismo lenguaje y tiene un único estado de aceptación mediante el siguiente procedimiento: 1- Se dibuja un nuevo estado que será ahora el único estado de aceptación del autómata. Los anteriores estados de aceptación dejan de serlo. 2- Por cada uno de los anteriores estados de aceptación, se duplican todos los arcos de entrada con los mismos orígenes y etiquetas dándoles como destino el nuevo estado de aceptación 3- Si el antiguo estado de aceptación no tenía arcos de salida puede eliminarse. Como alternativa a la etapa 2), puede trazarse un arco desde los antiguos estados de aceptación hacia el nuevo estado de aceptación con la etiqueta λ, dejando inalterado el resto del autómata. Problema 27 Cualquier lenguaje, ya sea finito o infinito, puede expresarse como la unión de una colección de lenguajes regulares tales que cada uno de ellos consiste exclusivamente en una de sus cadenas (Si L = {ωi}i=1…n, y Li ={ωi}, entonces L = {∪ Li}i=1…n, donde n puede tener un valor infinito). Lo anterior es cierto, en particular, para los lenguajes no regulares. Por tanto, así como de la unión de una colección finita de lenguajes regulares se obtiene siempre un lenguaje regular, no siempre es el caso cuando se trata de la unión de una colección infinita. Así por ejemplo, el lenguaje L = {∪ xiyi}i=0…∞, coincide con el lenguaje {xnyn, n∈ N}, que no es regular Problema 28 Convirtiendo la gramática en una gramática regular con reglas λ es más fácil, se obtiene el autómata correspondiente por el procedimiento indicado en la página 54 del libro de texto. Convirtiendo la gramática en una gramática regular con reglas λ es más fácil, se obtiene el autómata correspondiente por el procedimiento indicado en la página 54 del libro de texto. S → xN
S → xZ Z→λ
N → yM N → yQ Q→λ M → zN M → zT T→λ
y
N
S
T
z y
x
Z
S → xN
S → xZ Z→λ N → yM N → yQ Q→λ M → zN M → zT T→λ y
M
zz
x N
T
z y
x
zz
x
La expresión regular correspondiente es:
S
M
Z
Q
Q
La expresión regular correspondiente es: (x ∪ (x · (y · z)* · y) ∪ (x · y ) · (z · y)* · z ) Problema 29 Demostración en el capítulo 2, página 94. Problema 30. Si el autómata no tiene ningún camino cerrado, toda cadena reconocida tendrá un número de símbolos inferior o igual al número de estados del autómata. Si el lenguaje incluye más cadenas aparte de la cadena vacía, dichas cadenas tendrán una longitud no nula. En autómatas que tienen caminos cerrados, las cadenas de longitud mayor que el número de estados del autómata se reconocen pasando más de una vez por alguno o algunos de los estados. Sin embargo, siempre existirá al menos una cadena de símbolos cuya lectura lleve al autómata a un estado de aceptación recorriendo sus caminos cerrados una única vez (y pasando por tanto una sola vez por cada estado). La longitud de esta cadena será obviamente menor o igual que el número de estados del autómata, y será no vacía si el lenguaje incluye cadenas distintas de la cadena vacía. Problema 31 El diagrama de transiciones es el siguiente:
x w
y
x w
z
y z
w
w w
z
x
y
Problemas de repaso del capítulo 2
Problema 1. • Lenguaje general, no independiente del contexto: {xnynzn | n ∈ N+}, {xmynxmyn | m, n ∈ N+}, {xmymzn | n, m ∈ N+, n ≥ m}. • Lenguaje independiente del contexto que no puede ser reconocido por ningún autómata de pila determinista: {xnyn | n ∈ N+} ∪ {xn y2n | n ∈ N+} • Lenguaje independiente del contexto no reconocido por ningún autómata de pila determinista que vacíe su pila antes de aceptar una cadena: {xn | n ∈ N+} ∪ {xnyn | n ∈ N+}, {xnyx | n ∈ N+} ∪ {xnyxn| n ∈ N+}. • Lenguaje independiente del contexto reconocido por un autómata de pila determinista que vacía su pila antes aceptar una cadena, pero no es regular: {xnyn| n ∈ N+}, {xmynxn| m, n ∈ N+}, {xnynz | n ∈ N+}, {xnyxn| n ∈ N+}. • Lenguaje regular: Σ*, ∅, {λ}, {x}, {xz, y}, {xn| n ∈ N+}, {xmyn | m, n ∈ N+}. Problema 2. Es el lenguaje generado por la siguiente gramática. S → AB A → xAy A→λ B → yBz B→λ Problema 3. a. Existe una expresión regular que lo representa: xx*yy*. Problema 3. b. Es el lenguaje generado por la siguiente gramática. S → xSx S → xMx M → yM M→ y Si el lenguaje fuera regular, debería existir también un autómata finito que lo reconociese. Supongamos que existe tal autómata. Por tratarse de un autómata finito, debería tener un número finito de estados. Para m > número de estados del autómata, en el reconocimiento de la primera subcadena xm forzosamente se recorren más de una vez uno o más estados (se recorren bucles), y lo mismo ocurre en el reconocimiento de la segunda subcadena xm. Esto significa que podrán reconocerse cadenas con más x’s antes de las y’s que después de las y’s, o
2
viceversa, porque cada bucle puede recorrerse en el autómata un número indeterminado de veces. (demostración análoga en la página 40, teorema 1.2). Problema 3. c. Este lenguaje verifica el lema de bombeo (condición necesaria pero no suficiente para que un lenguaje sea independiente del contexto). No podemos por tanto utilizar este lema para demostrar que no es independiente del contexto. Sin embargo, resulta evidente que un autómata de pila no puede llevar el recuento de las dos variables x e y independientemente (cuando el número de x’s y de y’s puede ser arbitrariamente grande) puesto que sólo dispone de una pila para almacenar símbolos. Sería posible guardar en la pila la primera secuencia de x´s y a continuación la primera secuencia de y´s, pero después no sería posible acceder a las x´s sin vaciar primero las y´s. No existe pues el autómata de pila que reconozca las cadenas del lenguaje. Sí existe, sin embargo, un autómata de pila que reconoce el lenguaje {xmynynxm | m, n ∈ N+} o el lenguaje {xmynxnym | m, n ∈ N+}. Problema 4. Existe un autómata de pila determinista que acepta dicho lenguaje: Problema 5. Las reglas de reescritura que definen la gramática de dicho lenguaje siguen verificando las restricciones propias de las gramáticas independientes del contexto. Una gramática independiente del contexto siempre puede escribirse al menos parcialmente en la forma normal de Chomsky (en la parte izquierda de las reglas aparece un único símbolo no terminal y en la parte derecha, o bien un símbolo terminal o bien un par de símbolos no terminales) junto con un par de reglas S´ → S, S → λ si contiene la cadena vacía. Las reglas de reescritura de la gramática que genera el lenguaje de las cadenas de L escritas a la inversa se obtienen sin más que alterar las reglas de tipo A → BC convirtiéndolas en A → CB. Problema 6. S → zMNz M → aMa M→ z N → bNb N→z S / / \ \ z M N z / /|\ z b N b /|\ bNb | z
3
Derivación por la izquierda: S → zMNz → zzNz → zzbNbz → zzbbNbbz → zzbbzbbz Derivación por la derecha: S → zMNz → zMbNbz → zMbbNbbz → zMbbzbbz → zzbbzbbz Otra derivación: S → zMNz → zMbNbz → zzbNbz → zzbbNbbz → zzbbzbbz Hay en total tres derivaciones posibles. Problema 8. Es el lenguaje {xnym | n, m ∈ N, n ≥ m}. Problema 9. Este autómata acepta cadenas con cualquier número de x e y tal que al leer la cadena de izquierda a derecha el número de y leídas no supera al número de x leídas en ningún momento. Las cadenas que se aceptan cuando la pila no está vacía es el subconjunto del anterior cuyas cadenas tienen más x’s que y’s. Problema 10. S → S1 S1 → x S1 y S1 → xy (estas tres reglas generan las cadenas con m = n ) S → S2 S2 → xS2 yy S2 → xy (estas tres reglas generan las cadenas con m = 2n ) Problema 12. S → xSz S→y S
x xSz
y y
z error
y y
FDC error
FDC error
Problema 13. S → xSy S→y S
x xSy
4
Problema 18. La gramática del enunciado es equivalente a la siguiente: S → xM M → yN N → zS N→z N→λ que es regular. Basta construir un autómata finito determinista a partir de esta gramática y luego sustituir cada transición x por x,λ;λ, etc. Problema 20. S → xSx S → ySy S→λ Problema 21. Es generado por una gramática independiente del contexto: S → xSx S → ySy S→x S→y S→λ Problema 22. a. {xmyn | m y n son enteros no negativos donde n < m}. S → xS S → xSy S→x Problema 22. b. {xmyn | m y n son enteros no negativos donde n > m}. S → Sy S → xSy S→y
5
Problema 28. Si se trata de dos lenguajes, es posible realizar la unión a partir de las reglas correspondientes a sus respectivas gramáticas: G1 = (T1, V1, S1, R1) G2 = (T2, V2, S2, R2) G = G1 ∪ G2 → T = T1 ∪ T2 V = V1 ∪ V2 ∪ S (nuevo símbolo inicial) R = R1 ∪ R2 ∪ {S → S1 , S → S2} Por inducción (es decir, uniendo el tercer lenguaje con la unión de los dos primeros, y el cuarto con la unión de los tres primeros, etc.) se puede demostrar que la unión finita de una colección de lenguajes independientes del contexto es independientes del contexto. Sin embargo, si la colección es infinita, puede que la unión no sea independiente del contexto. Por ejemplo, el lenguaje {xnynzn} puede formarse como la unión de infinitos lenguajes, cada uno de los cuales tiene solamente una cadena (estos lenguajes, por ser finitos, son regulares y, por tanto, independientes del contexto): {xnynzn} = {λ} ∪ {xyz} ∪ {xxyyzz} ∪ {xxxyyyzzz} ∪ … Problema 29. Considerando un alfabeto Σ, los autómatas de pila que reconocen lenguajes de este alfabeto constituyen un conjunto contable, ya que puede idearse un procedimiento para enumerarlos: empezamos por los autómatas de un estado, a continuación los autómatas de dos estados etc. Para un número de estados determinado, se consideran todas las distintas combinaciones de transiciones posibles (considerando todas las operaciones posibles sobre la pila). Como el conjunto Σ* es infinito, el número de lenguajes definibles sobre Σ es incontable, luego existen más lenguajes que los lenguajes independientes del contexto. (Igualmente podría haberse demostrado el carácter contable del conjunto de los lenguajes independientes del contexto viendo que también las gramáticas independientes del contexto constituyen un conjunto contable. Es evidente que también pueden escribirse una a una de forma ordenada si consideramos la forma normal de Chomsky y tomamos como criterio de ordenación el número de símbolos no terminales en la gramática). Problema 32. S → MzN M → xM M→λ N → yN N→λ 1) Encadenamientos: M→λ N→λ => S → MzN M → xM
6
S → zN M → x S → Mz N → yN S→z N→y 2) Eliminación de terminales mezclados con no terminales: => S → MZN M → XM Y → y S → ZN M → x Z → z S → MZ N → YN X → x S→z N→y 3) Eliminación de más de dos no terminales: => S → MA M → XM Y → y S → ZN M → x Z → z S → MZ N → YN X → x S → z N → y A → ZN Problema 33. S → zMNz M → aMa M→z N → bNb N→z 2) => S → ZMNZ Z → z M → AMA A → a M→z B→b N → BNB N→z 3) => S → ZR Z → z M → AV A → a M→z B→b N → BW T → NZ N → z V → MA R → MT W → NB Problema 34. X → xY Y → yZ Z→z Z→λ
7
X → xyz X→x
La primera da lugar a un analizador LL(1) (sólo se necesita conocer el siguiente símbolo para saber qué regla aplicar: Z → z o Z → λ ) En cambio, para la segunda se necesita un analizador LL(2): hace falta conocer por anticipado dos símbolos para deducir la aplicación de la regla X → xyz (aplicable si los dos primeros símbolos son xy) o X →x (aplicable en presencia de xFDC). Problema 35. La forma normal de Griebach puede obtenerse aplicando los siguientes pasos: 1) Se eliminan las reglas λ (siempre es posible cuando el lenguaje no contiene la cadena vacía). 2) En las reglas cuyo lado derecho comience por un símbolo no terminal, se reescribe este (de todas las formas posibles) utilizando el resto de las reglas hasta conseguir que aparezca un terminal al principio de la cadena (en todo conjunto de reglas de una gramática bien constituido, cada no terminal forzosamente puede reescribirse al menos en una forma en términos de símbolos terminales) 3) Una vez que el lado derecho de todas las reglas empieza por un terminal, se sustituyen los terminales que aparezcan en otras posiciones por nuevos símbolos no terminales (del mismo modo en que se hacía para obtener la forma normal de Chomsky), añadiéndose las nuevas reglas de reescritura correspondientes. Veamos un ejemplo: S → MzN M → xM M→λ N → yN N→λ 1) => S → MzN S → zN S → Mz S→z
M → xM M→x N → yN N→y
2) => De S → MzN obtenemos S → xMzN De S → Mz obtenemos S → xMz Conservamos las otras reglas: S → zN S→z M → xM M→x N → yN N→y
8
y y
S → xzN S → xz
3) => S → xMZN S → xZN S → xMZ S → xZ S → zN S→z
M → xM M→x N → yN N→y Z→z
Problema 37. S S S S S S S S S S S S
→λ → SS → xSxSxSySy → xSxSySxSy → xSxSySySx → xSySxSxSy → xSySxSySx → xSySySxSx → ySxSxSxSy → ySxSxSySx → ySxSySxSx → ySySxSxSx
Observe que estas reglas incluyen todas las permutaciones de las x’s y las y’s: P53+2 = C35 × C22 = 5! / (3! × 2!) = 10. Está claro que todas las cadenas generadas por esta gramática pertenecen al lenguaje. Lo que es mucho más complicado demostrar es que todas las cadenas del lenguaje pueden ser generadas por esta gramática. Observamos primero que toda cadena que pertenezca al lenguaje debe tener una longitud múltiplo de 5. La cadena vacía, que pertenece al lenguaje, es generada por la gramática. Todas las cadenas de longitud igual a 5 (en total, 10 cadenas) también son generadas por la gramática. Toda cadena que pertenece al lenguaje y tiene longitud mayor que cinco contiene al menos una subcadena de longitud 5 que también pertenece al lenguaje, y denominaremos como subcadena nula;1 si sustituimos esta subcadena por S, obtenemos una secuencia tal que, salvo por la S, es de nuevo una cadena del lenguaje. Si esta nueva secuencia tiene cinco símbolos terminales (que necesariamente serán 3 x’s y 2 y’s), está claro que puede ser generada por la gramática. Si la secuencia tiene 10 o más símbolos terminales, la cadena resultante de suprimir 1
La demostración es bastante compleja. Como punto de partida definimos una función f tal que, dada una cadena cuyo número de x’s es nX y cuyo número de y’s es nY, f(cadena) = 2 × nX − 3 × nY. Una cadena pertenece al lenguaje si y sólo si f(cadena) = 0. Dada una cadena del lenguaje (por tanto, de longitud múltiplo de 5), la dividimos en varias subcadenas de longitud 5. Si f es nula para alguna de ellas, ya hemos demostrado que hay al menos una subcadena nula (de ahí su nombre). Si no, f debe ser positiva para unas subcadenas y negativa para otras, porque la f de la cadena primitiva, que es la suma de las f’s de las subcadenas, debe ser 0. Dadas dos subcadenas consecutivas de signos opuestos, que forman una cadena de longitud 10, tomamos la subcadena formada por los símbolos 1-5 (la primera subcadena), luego la formada por los símbolos 2-6, etc., hasta llegar a la subcadena 5-10 (la segunda de las subcadenas que teníamos); en este “viaje” el signo de f ha pasado de positivo a negativo —o viceversa— y para alguna de estas subcadenas que están “a caballo” de las dos subcadenas iniciales f debe ser nula, porque f nunca puede psar de positiva a negativa al sustituir una x por una y —o viceversa—, sino que debe pasar primero de positiva a nula y luego a negativa. Así se demuestra que hay al menos una subcadena nula.
9
la S (o las S’s, en plural, en sucesivas iteraciones) es de nuevo una cadena del lenguaje, y debe contener una subcadena nula. El proceso se puede repetir sucesivamente hasta llegar a una secuencia de cinco símbolos no terminales, que puede ser sustituida por S. Ilustramos el proceso tomando como ejemplo la cadena yxxxxxyxyxyxxxyxyxyy, de longitud 20. Empezamos buscando una subcadena nula, que identificamos mediante un subrayado: yxxxxxyxyxyxxxyxyxyy. Sustituimos esta subcadena por S y obtenemos yxxxxSyxxxyxyxyy. La cadena resultante al omitir la S también pertenece al lenguaje, y por ello debe contener una subcadena nula: yxxxxyxxxyxyxyy. Recuperando la S que habíamos eliminado, la secuencia anterior, que resulta ser yxxxxSyxxxyxyxyy (lo único que hemos hecho ha sido subrayar la cadena nula), puede reescribirse como yxxxxSSxyxyy, y ésta a su vez como yxxxxSxyxyy, por la segunda regla de la gramática. Buscando de nuevo la subcadena nula llegamos a yxxxxSxyxyy, que puede reescribirse como yxxxSy, una secuencia generada por la gramática. Nótese que en este proceso lo que hacemos siempre es buscar la subcadena nula y aplicar a la inversa alguna de las reglas de la gramática. El resultado es una derivación de la cadena a partir de la gramática, pero a la inversa. De hecho, el ejemplo anterior puede resumirse así: yxxxxxyxyxyxxxyxyxyy ← yxxxxSyxxxyxyxyy ← yxxxxSyxxxyxyxyy ← yxxxxSSxyxyy ← yxxxxSxyxyy ← yxxxxSxyxyy ← yxxxxSxyxyy ← yxxxSy ← S
10
Problemas de repaso del capítulo 3
Problema 1.
→R∆ L x, y
}
u
#R∆R∆ uL# u
}
u
∆R∆R∆ uL∆L∆u
Otra solución:
→R∆ L x, y Problema 2.
→ R∆SLL∆ Problema 3. En el segundo caso hay una terminación anormal si la celda inicial es el extremo de la cinta. Problema 6. S→M S→N S→P M → xMx M→λ N → yNy N→λ P → xUP P → PVy P→λ Ux → xU Uy → xy UV → VU yV → Vy xV → xy Observe que las reglas que contienen M generan el lenguaje {x2m, m ≥ 0}, las que contienen N generan {y2n, n ≥ 0}, y las que cotienen P, U o V generan {xm yn xm yn, m > 0}.
11
Problema 7. S → S1 S1 → xyMS1z yMx → xyM yMz → yyz yMy → yyM S1 → λ S → S2 S2 → xyNS2z yNx → xyN yNz → yz yNy → yyN S2 → λ Problema 8. [s∆∆yx∆] [∆t∆yx∆] [∆h∆yx∆] Problema 9. [i∆xyx∆] [i*xyx∆] [*pxyx∆] [*xpyx∆] [*xypx∆] [*xyxp∆] [*xyqx∆] [*xyq∆][*xqy∆] [*xq∆] [*qx∆] [*q∆] [q*∆] [h∆] Problema 10. S → xN N → Sx xNx → y Lo es. Podría describirse con la gramática independiente del contexto: S → xA A → xAx A→y Es el lenguaje {xnyxn-1| n ∈ N+} Problema 11. S → SPQR S→λ QP → PQ PQ → QP PR → RP
12
RP → PR QR → RQ RQ → QR P→x Q→y R→z Se trata de cadenas del alfabeto Σ = {x, y, z} con el mismo número de x’s, y’s y z’s, en cualquier orden. Intuitivamente se ve que no es un lenguaje independiente del contexto, porque un autómata de pila no puede llevar el recuento de 3 variables independientes; la demostración rigurosa puede hacerse por el lema de bombeo.
Sólo si L es decidible. En ese caso existe una máquina de Turing M que se detiene con la configuración ∆Y∆∆ para las cadenas de L y con la configuración ∆N∆∆... en las cadenas de Σ*–L. Al poderse detectar las cadenas en Σ*–L, puede modificarse M para construir una M’ que en esos casos provoque un desplazamiento repetido hacia la izquierda, hasta provocar una terminación anormal. Si el lenguaje no es decidible, en general no es posible construir tal máquina M’, porque para las cadenas que no pertenecen al lenguaje L puede ocurrir que la máquina original M no se detenga nunca, y por tanto no puede entrar en funcionamiento la parte de M’ que llevaría a una terminación anormal. Problema 15. a. Sí, por las razones que se expusieron en el problema 28 del capítulo 2. Problema 15. b. No, porque si fuera así, todo lenguaje sería estructurado por frases (por el mismo motivo que expusimos en la solución del problema 28 del capítulo 2). Problema 16. a. En este caso, el autómata que acepta la intersección de lenguajes puede diseñarse del siguiente modo:
M| → M1 → M2 ..........→ Mn Donde las máquinas Mi son máquinas de dos cintas, de modo que inicialmente duplican la cadena de entrada desde la primera a la segunda cinta y a continuación trabajan sobre la réplica. Cuando se detienen borran la segunda cinta y vuelven las cabezas a su posición inicial. Para que una cadena sea aceptada por M cada uno de los Mi debe alcanzar el estado de parada con dicha cadena. Problema 16. b. Lo demostramos por reducción al absurdo. Sea un lenguaje no estructurado por frases, L. Sea L’ el complementario de L. Podemos ordenar las cadenas de L’ (en orden alfabético) y
13
numerarlas. Sea Li el lenguaje que contiene todas de Σ* excepto la i-ésima cadena de L’; cada Li es regular (porque su complementario, que sólo tiene una cadena, es regular) y estructurado por frases. La intersección de todos los Li es el conjunto L.2 Por tanto, si la intersección de una colección de lenguajes estructurados por frases fuera siempre un lenguaje estructurado por frases, entonces L sería estructurado por frases, lo cual está en contradicción con nuestro punto de partida. Problema 18. S → xSy xSy → λ Problema 19. Por definición, ha de existir al menos una gramática estructurada por frases para L. A partir de ella podemos generar otras gramáticas introduciendo tantos símbolos innecesarios y reglas redundantes como deseemos. Baste, por ejemplo, considerar reglas de tipo: S → S1, S1 → S2, …, Sn → S. Problema 20. Construimos una máquina M de varias cintas basándonos en una máquina auxiliar M1; M1 funciona así: — si en la cinta de entrada sólo hay una cadena a la derecha de la cabeza lectora, se detiene; — si hay dos o más cadenas a la derecha, lee las dos primeras, las escribe otra vez en la cinta ordenadas y se detiene en el espacio de separación entre ambas; si se ha cambiado el orden de estas dos cadenas, escribe Y en la segunda cinta; si no, no modifica esta cinta.3 La máquina M funciona así: — si hay menos de dos cadenas para ordenar, se detiene. — si hay al menos dos cadenas, se sitúa en el inicio de la cinta y simula M1 hasta situarse entre las dos últimas cadenas. Entonces si en la segunda cinta no hay nada escrito, eso significa que las cadenas estaban ordenadas y no se ha hecho ninguna modificación, y por eso se detiene; si hay una Y en la segunda cinta, borra esta Y, vuelve al inicio de la primera cinta repite el proceso.
Problema 21. El conjunto de lenguajes aceptados por máquinas de Turing (estructurados por frases) es contable, mientras que el conjunto de lenguajes generales no lo es. Como el conjunto de lenguajes generales es la unión del conjunto de los lenguajes estructurados por frases y el 2
La demostración es ésta: si una cadena w pertenece a L, no pertenece a L’, y por tanto no hay ningún Li que excluya w; y si w pertenece a todos los Li, también pertenece a la intersección de todos ellos. Por el contrario, si una cadena w no pertenece a L, entonces pertenece a L’, y por tanto el Li correspondiente excluye w, de donde se deduce que w no pertenece a la intersección. 3 La máquina M1 puede funcionar así: copia la primera cadena de la derecha en la tercera cinta y la segunda cadena en la cuarta cinta. Luego va desplazando simultáneamente las cabezas de estas dos cintas hasta encontrar el primer símbolo en que difieren estas cadenas, lo cual permite decidir cuál de las dos debe ir antes que la otra en el orden.
14
conjunto de los lenguajes no estructurados por frases, el conjunto de los lenguajes no estructurados por frases debe ser por fuerza incontable y, por tanto, de mayor cardinalidad que el anterior. Problema 22. Utilizaremos de nuevo un argumento de cardinalidad. Consideremos los siguientes conjuntos: {L | L y Σ*–L son aceptados por máquinas de Turing} {L | L es aceptado y Σ*–L no lo es} {L | L no es aceptado y Σ*–L sí lo es} {L | L no es aceptado y Σ*–L tampoco} Puesto que la unión de estos cuatro conjuntos es conjunto de los lenguajes generales, y por tanto es un conjunto incontable, deducimos que el cuarto conjunto debe ser no vacío e incontable. De otro modo, puesto que los tres primeros conjuntos son contables, su unión también sería un conjunto contable. Problema 23. La colección de lenguajes decidibles es contable por ser un subconjunto de los lenguajes estructurados por frases (que son contables). Es infinita porque contiene a los lenguajes independientes del contexto, que son infinitos. Problema 25. No. Por ejemplo, Σ* es un lenguaje estructurado por frases, y sin embargo existe un número incontable de lenguajes del alfabeto Σ que no lo son. Problema 26. Si el lenguaje es aceptable según Turing entonces existe una gramática estructurada por frases que lo genera. L* será aceptable si también existe una gramática estructurada por frases que genere L*. Esta gramática se construye del siguiente modo a partir de la gramática G de L: G = (T, V, S, R) G’ = (T’, V’, S’, R’) T’= T V‘= V R’ = R ∪ {S → SS} Problema 27. Es aceptado por la siguiente máquina de Turing de dos cintas: llamaremos w a la cadena analizada (primera cinta), que no se modifica, y waux a la cadena que está en la segunda cinta en cada momento, que inicialmente será xx (con un espacio a su izquierda). Si w es la cadena vacía, la máquina entra en un bucle (rechaza la cadena). Si |w| ≤ |waux|, la máquina acepta la cadena; esto nos garantiza que acepta x y xx. En otro caso, desplaza la cabeza de la primera cinta tantas celdas como símbolos tiene waux; pueden darse tres casos:
15
— si la cabeza de la primera está sobre una x que tiene a su derecha otra x, vuelve a desplazarse |waux| celdas hacia la derecha, y así sucesivamente, hasta que se cumpla una de las condiciones siguientes; — si la cabeza de la primera cinta está sobre una x que tiene a su derecha un espacio en blanco, eso indica que la longitud de la cadena de la primera cinta es múltiplo de |waux|, y por eso la máquina debe entrar en un bucle, para no aceptar la cadena; — si está sobre un espacio en blanco, significa que |w| no es múltiplo de |waux|. Entonces debe añadir una x más a waux, llevar la cabeza de la primera cinta al inicio, y repetir el proceso. Si |w| es número primo, la máquina se detiene cuando |w| = |waux|. Problema 34. Basta con añadir, para cada terminal x, una regla del tipo X → x y sustituir en el resto de las reglas todos los símbolos terminales por el no terminal correspondiente. (Naturalmente, suponemos que X no era un símbolo de la gramática original; si lo fuera, deberíamos escribir X’ u otro terminal diferente que no pertenezca a la gramática original.) Así, por ejemplo: S → xyNSz S→λ yNx → xyN yNz → yz yNy → yyN se convierte en S → XYNSZ S→λ YNX → XYN YNZ → YZ YNY → YYN X→x Y→y Z→z Problema 35. Los lenguajes recursivamente enumerables son aquéllos que pueden aceptar una máquina de Turing, es decir, los lenguajes estructurados por frases. En la demostración del teorema 3.4 (págs. 176-177) se muestra cómo diseñar una máquina que acepte un lenguaje a partir de las reglas de reescritura de la gramática que lo genera. Esta máquina aplica las reglas de reescritura para generar las cadenas y compararlas con la cadena analizada. La máquina que buscamos puede prescindir de la cinta 1 y mostrar como resultado las cadenas que genera en la cinta 2.
16