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

Documentos relacionados