algunas soluciones - Universidad Rey Juan Carlos
Transcripción
algunas soluciones - Universidad Rey Juan Carlos
Universidad Rey Juan Carlos Curso 2010–2011 Teorı́a de Autómatas y Lenguajes Formales Ingenierı́a Técnica en Informática de Sistemas Hoja de Problemas 11 Autómatas a pila Nivel del ejercicio : (!) básico, (♣) medio, (♠) avanzado. 1. Para cada uno de los lenguajes siguientes, describe un autómata a pila que acepte el lenguaje. (a) (!) L = {an b2n | n ≥ 0}. Solución: AP = ({a, b}, {A, Z}, {q0, q1 , qf }, Z, q0 , f, {qf }) Donde f , la función de transición, viene definida como: f (q0 , λ, Z) f (q0 , a, Z) f (q0 , a, A) f (q0 , b, A) f (q1 , b, A) f (q1 , λ, Z) = = = = = = {(qf , λ)} {(q0 , AAZ)} {(q0 , AAA)} {(q1 , λ)} {(q1 , λ)} {(qf , λ)} (b) (!) L = {xcx−1 | x ∈ {a, b}+ }. Solución: (c) (!) L = {an bm | n ≤ m ≤ 3n}. Solución: Este es un caso parecido al lenguaje {an bn }, con la diferencia de que cada vez que leamos una letra “a”, debemos insertar en la pila de uno a tres contadores “A”. Ası́, por cada letra “a”, habrá de una a tres “b”. El autómata a pila es el siguiente : AP := ({a, b}, {S, A}, {p, q}, S, p, f, ∅) f (p, λ, S) f (p, a, S) f (p, a, A) f (p, b, A) f (q, b, A) f (q, b, A) = = = = = = {(p, λ)} {(p, A), (p, AA), (p, AAA)} {(p, AA), (p, AAA), (p, AAAA)} {(q, λ)} {(q, λ)} {(q, λ)} Página 1 de 11 Hoja de Problemas 11 (cont.) (d) (♣) L = {xcy | x, y ∈ {a, b}∗ , no subcadenas “ab” en x = no subcadenas “ba” en y}. Solución: Este autómata tendrá cuatro estados {p, q, r, s}. Los dos primeros, {p, q} se utilizarán para el reconocimiento de la parte de la palabra que está a la izquierda de la “c”, mientras que los otros son para la parte derecha. En concreto, {p, q}se utilizarán para reconocer las cadenas “ab”. El estado “p” indicará que no se ha comenzado a leer dicha cadena, mientras que el estado “q” sirve para anotar que hemos leı́do la primera letra de la cadena (en este caso, una “a”). Si, estando en el estado “q”, leemos en la cinta una “b”, entonces volvemos al estado inicial “p” y añadimos a la pila un contador “X”. Ası́, el sı́mbolo de la pila “X” indicará la cantidad de subcadenas “ab” que hemos leı́do por el momento. El comportamiento de los estados {r, s} es análogo, pero ahora con el objetivo de que cada vez que se lea la subcadena “ba” se quite de la pila un contador “X”. Ası́, el autómata resultante es el siguiente : AP := ({a, b, c}, {S, X}, {p, q, r, s}, S, p, f, ∅) f (p, a, S) f (p, a, X) f (p, b, S) f (p, b, X) f (q, a, S) f (q, a, X) f (q, b, S) f (q, b, X) f (q, b, X) f (p, c, S) = = = = = = = = = = {(q, S)} {(q, X)} {(p, S)} {(p, X)} {(q, S)} {(q, X)} {(p, XS)} {(p, XX)} {(p, XX)} {(r, S)} f (p, c, X) f (q, c, S) f (q, c, X) f (r, a, S) f (r, a, X) f (r, b, S) f (r, b, X) f (s, a, X) f (r, λ, S) f (s, λ, S) = = = = = = = = = = {(r, X)} {(r, S)} {(r, S)} {(r, S)} {(r, X)} {(s, S)} {(s, X)} {(r, λ)} {(r, λ)} {(s, λ)} (e) (♣) L = {xcy | x, y ∈ {a, b}+ , no subcadenas “ab” en x = no subcadenas “ba” en y}. Solución: Vamos a aprovechar que tenemos resuelto el caso en el que las palabras x e y pueden ser vacı́as. Para ello, añadiremos un par de estados extra “u” y “v”, que indicarán que la palabra x (respectivamente y) es vacı́a. En el momento en que se lea una letra en la cinta, transitaremos al estado correspondiente. Por lo tanto, los cambios a realizar son mı́nimos. La descripción del autómata se cambiarı́a por esta nueva : AP # := ({a, b, c}, {S, X}, {p, q, r, s, u, v}, S, u, f, ∅) Página 2 de 11 Hoja de Problemas 11 (cont.) Hay que añadir las siguientes transiciones : f (u, a, S) f (u, a, X) f (u, b, S) f (u, b, X) = = = = {(q, S)} {(q, X)} {(p, S)} {(p, X)} f (v, a, S) f (v, a, X) f (v, b, S) f (v, b, X) = = = = {(r, S)} {(r, X)} {(s, S)} {(s, X)} También hay que cambiar las siguientes transiciones : f (p, c, S) = {(v, S)} f (p, c, X) = {(v, X)} f (q, c, S) = {(v, S)} (f) (!) L = {an bm cn+m | n, m ≥ 0}. Solución: (g) (!) L = {an bm ct am+t bn | m, n > 0 , t ≥ 0}. Solución: (h) (♣) L = {x ∈ {a, b}∗ | na (x) = nb (x)}. Solución: AP = ({a, b}, {0, 1, Z}, {q0, qf }, Z, q0, f, {qf }) Donde f , la función de transición, viene definida como: f (q0 , λ, Z) f (q0 , a, Z) f (q0 , b, Z) f (q0 , a, 0) f (q0 , b, 1) f (q0 , a, 1) f (q0 , b, 0) = = = = = = = {(qf , Z)} {(q0 , 0Z)} {(q0 , 1Z)} {(q0 , 00)} {(q0 , 11)} {(q0 , λ)} {(q0 , λ)} (i) (♣) L = {x ∈ {a, b}∗ | na (x) = nb (x) + 1}. Solución: Este es un caso parecido al lenguaje {na (x) = nb (x)}, con la salvedad de que en algún momento, el autómata indeterminı́sticamente insertará en la Página 3 de 11 Hoja de Problemas 11 (cont.) pila un contador “B” y pasará a otro estado. Ası́, habrá dos estados : un estado “p” en el que no se habrá insertado dicho contador y un estado “q” en el que se habrá realizado dicha insercción. El resto del comportamiento del autómata es evidente : AP := ({a, b}, {S, A, B}, {p, q}, S, p, f, ∅) f (p, a, S) f (p, a, A) f (p, a, B) f (p, b, S) f (p, b, B) f (p, b, A) f (p, λ, S) f (p, λ, A) f (p, λ, B) = = = = = = = = = {(p, AS)} {(p, AA)} {(p, λ)} {(p, BS)} {(p, BB)} {(p, λ)} {(q, BS)} {(q, BA)} {(q, BB)} f (q, λ, S) f (q, a, S) f (q, a, A) f (q, a, B) f (q, b, S) f (q, b, B) f (q, b, A) = = = = = = = {(q, λ)} {(q, AS)} {(q, AA)} {(q, λ)} {(q, BS)} {(q, BB)} {(q, λ)} (j) (♠) L = {x ∈ {a, b}∗ | na (x) = 2nb (x)}. Solución: (b, S, BBS) (b, B, BBB) (a, B, λ) (b, A, λ) (λ, S, λ) (a, A, A) (a, S, S) p q (b, A, λ) (b, S, BS) (b, B, BBB) (a, B, λ) (a, S, AS) (a, A, AA) ! " (k) (♣) L = amax{0,n−m} bn am | n, m ≥ 0 Solución: A = ({a, b}, {S, A, M}, S, {q0 , q1 , q2 , q3 }, q0 , f, {}) Página 4 de 11 Hoja de Problemas 11 (cont.) f (q0 , λ, S) f (q0 , a, S) f (q0 , b, S) f (q1 , a, A) f (q1 , b, A) f (q1 , λ, M) f (q1 , b, M) f (q1 , a, M) f (q2 , b, A) f (q2 , b, M) f (q2 , a, M) f (q2 , b, S) f (q2 , λ, S) f (q3 , a, M) f (q3 , λ, S) = = = = = = = = = = = = = = = {(q0 , λ), (q1 , MS)} {(q1 , AS)} {(q2 , MS)} {(q1 , AA)} {(q2 , λ)} {(q1 , MM)} {(q2 , MM)} {(q3 , λ)} {(q2 , λ)} {(q2 , MM)} {(q3 , λ)} {(q2 , MS)} {(q2 , λ)} {(q3 , λ)} {(q3 , λ)} (l) (♣) L = {an+m bm+t at bn | n, t > 0, m ≥ 0} Solución: A = ({a, b}, {S, A, B, C}, S, {q0, q1 , q2 , q3 }, q0 , f, {}) f (q0 , a, S) f (q0 , a, A) f (q0 , a, B) f (q0 , b, B) f (q0 , b, A) f (q1 , b, B) f (q1 , b, A) f (q1 , b, C) f (q1 , a, C) f (q2 , a, C) f (q2 , b, A) f (q3 , b, A) = = = = = = = = = = = = {(q0 , A)} {(q0 , AA), (q0 , BA)} {(q0 , BB)} {(q1 , λ)} {(q1 , CA)} {(q1 , λ)} {(q1 , CA)} {(q1 , CC)} {(q2 , λ)} {(q2 , λ)} {(q3 , λ)} {(q3 , λ)} 2. Obtén autómatas a pila que acepten los lenguajes generados por las gramáticas siguientes : (a) (!) S A B C ::= ::= ::= ::= aA aABC | bB | a b c Página 5 de 11 Hoja de Problemas 11 (cont.) Nota: Comprueba que la palabra aaabc está en el lenguaje generado por el autómata. Solución: (b) (♣) A B C D ::= ::= ::= ::= 2BC | 1B | λ 1D | 1C | 1 2 2D | 2C Solución: Vamos a resolver este ejercicio mediante un autómata a pila reconocedor por estado final. Para ello, lo primero que debemos hacer es encontrar el autómata a pila reconocedor por vaciado de pila equivalente a la gramática. Vamos a aplicar el Algoritmo número 2 de los apuntes: AP = ({1, 2}, {A, B, C, D, 1, 2}, {q}, A, q, f, ∅) Donde f , la función de transición, viene definida como: f (q, λ, A) f (q, λ, B) f (q, λ, C) f (q, λ, D) f (q, 1, 1) f (q, 2, 2) = = = = = = {(q, 2BC), (q, 1B), (q, λ)} {(q, 1D), (q, 1C), (q, 1)} {(q, 2)} {(q, 2D), (q, 2C)} {(q, λ)} {(q, λ)} Ahora, transformaremos este autómata pila a uno con reconocimiento por estado final. AP # = ({1, 2}, {A, B, C, D, 1, 2, A0}, {q, r, s}, A0, s, f #, {r}) Donde f # , la función de transición, viene definida como: f # (s, λ, A0 ) f # (q, λ, A) f # (q, λ, B) f # (q, λ, C) f # (q, λ, D) f # (q, 1, 1) f # (q, 2, 2) f # (q, λ, A0 ) = = = = = = = = {(q, SA0)} {(q, 2BC), (q, 1B), (q, λ)} {(q, 1D), (q, 1C), (q, 1)} {(q, 2)} {(q, 2D), (q, 2C)} {(q, λ)} {(q, λ)} {(r, A0 )} Página 6 de 11 Hoja de Problemas 11 (cont.) (c) (♣) S ::= aAb | aBbb | ab | abb | λ A ::= aAb | ab B ::= aBbb | abb Solución: (d) (♣) S ::= AB | BA | 0A1 | 1A0 | 0 A ::= 0A1 | 1A0 | 0 B ::= 0B1 | 1B0 | 01 | 10 Solución: (e) (♣) S ::= aABB | aAA A ::= aBB | a B ::= bBB | A Solución: 3. Obtén gramáticas que generen el lenguaje aceptado por los autómatas a pila siguientes : (a) (!) AP1 = ({a, b}, {A, B}, {p, q}, A, p, f, ∅) f (p, a, A) f (p, a, B) f (p, b, B) f (q, b, B) f (q, λ, B) f (q, λ, A) = = = = = = {(p, BA)} {(p, BB)} {(q, λ)} {(q, λ)} {(q, λ)} {(q, λ)} La gramática de este apartado definela en Forma Normal de Greibach. Solución: Partiendo del autómata: AP1 = ({a, b}, {A, B}, {p, q}, A, p, f, ∅) sabemos cómo construir una gramática equivalente, esa gramática estará formada por: Página 7 de 11 Hoja de Problemas 11 (cont.) # N # # = = {S} ∪ {[qi Aqj ] | qi , qj ∈ Q, A ∈ Γ} T Según lo anterior, nuestra gramática se define como: GAP 1 = ({a, b}, {S, [pAq], [pBq], [pAp], [pBp], [qAp], [qBp], [qAq], [qBq]}, S, P ) Donde el conjunto de producciones P , es el siguiente: S ::= [pAq] | [pAp] [pAp] ::= a[pBp][pAp] | a[pBq][qAp] [pAq] ::= a[pBp][pAq] | a[pBq][qAq] [pBp] ::= a[pBp][pBp] | a[pBq][qBp] [pBq] ::= a[pBp][pBq] | a[pBq][qBq] | b [qBq] ::= b | λ [qAq] ::= λ De forma que si renombramos (para que quede más clara): [pAp] = A [pAq] = B [pBp] = C [pBq] = D [qAq] = E [qBq] = F [qAp] = G [qBp] = H La gramática resultante nos queda: S ::= B | A A ::= aCA | aDG B ::= aCB | aDE C ::= aCC | aDH D ::= aCD | aDF | b F ::= b | λ E ::= λ Para pasarla a F.N.G., primero debemos asegurarnos que esté bien formada, para ello, recordamos que debemos: Eliminar reglas innecesarias (A ::= A). Eliminar reglas no generativas (A ::= λ). Eliminar reglas unitarias (A ::= B). Eliminar sı́mbolos inútiles. Lo que nos produce la siguiente gramática bien formada equivalente: GAP 1F NG = ({a, b}, {S, D, F }, S, P #) Donde P # está definido como: Página 8 de 11 Hoja de Problemas 11 (cont.) S D F Que además, ya se encuentra ::= aD ::= aD | aDF | b ::= b en Forma Normal de Greibach. (b) (♣) AP2 = ({a, b}, {A, z}, {q0 , q1 }, z, q0 , f, {q1 }) f (q0 , a, z) = {(q0 , Az)} f (q0 , b, A) = {(q0 , AA)} f (q0 , a, A) = {(q1 , λ)} Solución: En primer lugar, hay que transformar el autómata a pila en un autómata a pila por vaciado de pila equivalente : AP2# := ({a, b}, {A, z, B}, {q0 , q1 , s, r}, B, s, f #, ∅) f # (s, λ, B) f # (q0 , a, z) f # (q0 , b, A) f # (q0 , a, A) f # (q1 , λ, A) = = = = = {(q0 , zB)} {(q0 , Az)} {(q0 , AA)} {(q1 , λ)} {(r, λ)} f # (q1 , λ, z) f # (q1 , λ, B) f # (r, λ, A) f # (r, λ, z) f # (r, λ, B) = = = = = {(r, λ)} {(r, λ)} {(r, λ)} {(r, λ)} {(r, λ)} Ahora, simplemente aplicamos el algoritmo para calcular la gramática equivalente a AP2# : G2 := ({a, b}, {S, [q0 Aq0 ], [q0 Aq1 ], [q0 As], [q0 Ar], [q0 zq0 ], [q0 zq1 ], [q0 zs], [q0 zr], [q0 Bq0 ], [q0 Bq1 ], [q0 Bs], [q0 Br], [q1 Aq0 ], [q1 Aq1 ], [q1 As], [q1 Ar], [q1 zq0 ], [q1 zq1 ], [q1 zs], [q1 zr], [q1 Bq0 ], [q1 Bq1 ], [q1 Bs], [q1 Br], [rAq0 ], [rAq1 ], [rAs], [rAr], [rzq0 ], [rzq1 ], [rzs], [rzr], [rBq0 ], [rBq1 ], [rBs], [rBr], [sAq0], [sAq1 ], [sAs], [sAr], [szq0 ], [szq1 ], [szs], [szr], [sBq0 ], [sBq1 ], [sBs], [sBr]}, S, P), donde P son las producciones S [sBq0 ] [sBq1 ] [sBr] [sBs] [q0 zq0 ] [q0 zq1 ] [q0 zr] ::= ::= ::= ::= ::= ::= ::= ::= [sBs] | [sBq0 ] | [sBq1 ] | [sBr] [q0 zq0 ][q0 Bq0 ] | [q0 zq1 ][q1 Bq0 ] | [q0 zr][rBq0 ] | [q0 zs][sBq0 ] [q0 zq0 ][q0 Bq1 ] | [q0 zq1 ][q1 Bq1 ] | [q0 zr][rBq1 ] | [q0 zs][sBq1 ] [q0 zq0 ][q0 Br] | [q0 zq1 ][q1 Br] | [q0 zr][rBr] | [q0 zs][sBr] [q0 zq0 ][q0 Bs] | [q0 zq1 ][q1 Bs] | [q0 zr][rBs] | [q0 zs][sBs] a[q0 Aq0 ][q0 zq0 ] | a[q0 Aq1 ][q1 zq0 ] | a[q0 Ar][rzq0 ] | a[q0 As][szq0 ] a[q0 Aq0 ][q0 zq1 ] | a[q0 Aq1 ][q1 zq1 ] | a[q0 Ar][rzq1 ] | a[q0 As][szq1 ] a[q0 Aq0 ][q0 zr] | a[q0 Aq1 ][q1 zr] | a[q0 Ar][rzr] | a[q0 As][szr] Página 9 de 11 Hoja de Problemas 11 (cont.) [q0 zs] [q0 Aq0 ] [q0 Aq1 ] [q0 Ar] [q0 As] [q0 Aq1 ] [q1 Ar] [q1 zr] [q1 Br] [rAr] [rzr] [rBr] ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= a[q0 Aq0 ][q0 zs] | a[q0 Aq1 ][q1 zs] | a[q0 Ar][rzs] | a[q0 As][szs] b[q0 Aq0 ][q0 zq0 ] | b[q0 Aq1 ][q1 zq0 ] | b[q0 Ar][rzq0 ] | b[q0 As][szq0 ] b[q0 Aq0 ][q0 zq1 ] | b[q0 Aq1 ][q1 zq1 ] | b[q0 Ar][rzq0 ] | b[q0 As][szq1 ] b[q0 Aq0 ][q0 zr] | b[q0 Aq1 ][q1 zr] | b[q0 Ar][rzr] | b[q0 As][szr] b[q0 Aq0 ][q0 zs] | b[q0 Aq1 ][q1 zs] | b[q0 Ar][rzs] | b[q0 As][szs] a λ λ λ λ λ λ Una gramática bien formada equivalente a la dada es G#2 := ({a, b}, {S, [q0 Ar]}, S, P # ), donde P # son las producciones S ::= a[q0 Ar] | aa [q0 Ar] ::= b[q0 Ar] | ba (c) (♣) AP3 = ({0, 1}, {A, B}, {p, q}, A, p, f, ∅) f (p, 1, A) f (p, 1, B) f (p, 0, B) f (q, 0, B) f (q, λ, A) = = = = = {(p, BA)} {(p, BB)} {(q, λ)} {(p, λ)} {(q, λ)} Solución: G3 := ({0, 1}, {S, [pAp], [pAq], [pBp], [pBq], [qAp], [qAq], [qBp], [qBq]}, S, P), donde P son las producciones S [pAp] [pAq] [pBp] [pBq] [pBq] [qBp] [qAq] ::= ::= ::= ::= ::= ::= ::= ::= [pAp] | [pAq] 1[pBp][pAp] | 1[pBq][qAp] 1[pBp][pAq] | 1[pBq][qAq] 1[pBp][pBp] | 1[pBq][qBp] 1[pBp][pBq] | 1[pBq][qBq] 0 0 λ Página 10 de 11 Hoja de Problemas 11 (cont.) (d) (♣) AP4 = ({0, 1}, {A, S}, {p, q}, S, p, f, ∅) f (p, 0, S) f (p, 0, A) f (p, 1, A) f (q, 1, A) f (q, λ, A) f (q, λ, S) = = = = = = {(p, AS)} {(p, AA)} {(q, λ)} {(q, λ)} {(q, λ)} {(q, λ)} Solución: G4 := ({0, 1}, {T, [pAp], [pAq], [pSp], [pSq], [qAp], [qAq], [qSp], [qSq]}, T, P), donde P son las producciones T [pSp] [pSq] [pAp] [pAq] [pAq] [qAq] [qSq] ::= ::= ::= ::= ::= ::= ::= ::= [pSp] | [pSq] 0[pAp][pSp] | 0[pAq][qSp] 0[pAp][pSq] | 0[pAq][qSq] 0[pAp][pAp] | 0[pAq][qAp] 0[pAp][pAq] | 0[pAq][qAq] 1 1|λ λ Página 11 de 11