Anda di halaman 1dari 5

Teorı́a de la Computación I

Notas sobre autómatas de pila

Ejercicio 1:
a) Un autómata de pila es una 7-upla definida de la siguiente manera:
M = (Q, Σ, Γ, δ, q0 , Z0 , F )
Q = conjunto f inito de estados
Σ = conjunto f inito de sı́mbolos de entrada
Γ = conjunto f inito de sı́mbolos de la pila
δ = relación de transición : (Qx (Σ ∪ {ε}) x (Γ ∪ {ε})) → subconjunto f inito de (QxΓ∗ )

• δ toma los argumentos (q, a, X) donde q ∈ Q, a ∈ (Σ ∪ {ε}) y X ∈ (Γ ∪ {ε})


• La salida de δ es una dupla (p, γ) donde p es el estado destino γ es la cadena de sı́mbolos de la pila que reemplaza a X en la
parte superior de la pila.

q0 = estado inicial
Z0 = sı́mbolo inicial de la pila
F = conjunto de estados de aceptación
b) Fundamentalmente un AP es una af no determinista con transiciones-ε y una capacidad adicional: una pila en la que se puede
almacenar una cadena de sı́mbolos de la pila, esto permite “recordar” una cantidad finita de información. La infiormación allı́
almacendada sólo se puede acceder extrayendo el elemento que se encuentra en la parte superior de la pila, el último elemento
ingresado, y de esa manera ir vaciando la pila-estructura LIFO. Para introducir datos en la pila utilizamos el mecanismo push, para
sacar elementos de la pila se utiliza el mecanismo pop.
c)
Movimiento: Dada una transición δ (q, a, Z) = {(p1 , γ1 ) , (p2 , γ2 ) , ..., (pn , γn )} donde q ∈ Q, a ∈ (Σ ∪ {ε}) y X ∈ (Γ ∪ {ε}) y pi ∈
Q, γi ∈ Γ∗ un movimiento consiste en: Estando en el estado q con sómbolo de entrada a y Z en la parte superior de la pila, se puede
acceder a cualquier estado pi sustituyendo al sı́mbolo Z por γi en la parte superior de la pila y avanzar la lectura de la cadena de entrada
un sı́mbolo.
Adoptamos la convención de que el sı́mbolo más a la izquierda de γi es el que queda en la parte superior de la pila.
Cuando tenemosδ (q, ε, Z) = {(p1 , γ1 ) , (p2 , γ2 ) , ..., (pn , γn )} independientemente del sı́mbolo de entrada que se está leyendo y con Z en
la parte supoerior de la pila, se puede acceder a cualquier estado pi sustituyendo al sı́mbolo Z por γi en la parte superior de la pila y
SIN avanzar en la lectura de la cadena de entrada un sı́mbolo.
Descripción Instantántea: Sirve para describir de forma formal la configuración de un AP en un instante dado. Se define como una
terna (q, w, γ) donde q ∈ Q, w ∈ Σ∗ y γ ∈ Γ∗ .
Sea M = (Q, Σ, Γ, δ, q0 , Z0 , F ) un AP decimos que (q, aw, Zα) ` (p, w, βα) si la transición δ (q, a, Z) = (p, β) está definida en M.
Por ejemplo, si tenemos un AP en donde está definida una transición δ (q, 0, G) = (q, BG) una descripción instantánea de este AP
podrı́a ser: (q, 001, GRR) ` (q, 01, BGRR).
Transiciones de un AP:

 0 0 0

• Transición Leer/Push: (q, w, ZZ0 ) ` q , w , Z Z0 donde w = w1 w2 ...wr y ZZ0 = Zn Zn−1 ...Z1 Z0 .

– LEER: Lectura de (q, w1 , Zn ), es decir, se lee el caracter de entrada w1 y el sı́mbolo de la pila que se encuentra en la parte
superior.
∗ w0 = w2 w3 ...wr se borra o consume el primer caracter de la cadena de entrada
∗ se realiza un pop sobre la pila para obtener el sı́mbolo que se encuentra en la parte superior, es decir Zn
 0

– TRANSCIÓN: Se aplica la transición δ (q, w1 , Zn ) = q , γ con w1 6= ε y γ 6= ε
– PUSH: Se realiza el movimiento push en la pila de la cadena γ definida en la transición.
0
∗ Z Z0 = γZn−1 Zn−2 ...Z1 Z0
 0

∗ (q, w1 w2 ...wr , Zn Zn−1 ...Z1 Z0 ) ` q , w2 ...wr , γZn−1 ...Z1 Z0 , lo que se puede representar como push(pop(ZZ0 ), γ), es
decir, se reemplana el sı́mbolo de la parte superior de la pila por una nueva cadena de sı́mbolos.

1
 0 0 0

• Transición Leer/Pop: (q, w, ZZ0 ) ` q , w , Z Z0 donde w = w1 w2 ...wr y ZZ0 = Zn Zn−1 ...Z1 Z0 .

– LEER: Lectura de (q, w1 , Zn ), es decir, se lee el caracter de entrada w1 y el sı́mbolo de la pila que se encuentra en la parte
superior.
∗ w0 = w2 w3 ...wr se borra o consume el primer caracter de la cadena de entrada
∗ se realiza un pop sobre la pila para obtener el sı́mbolo que se encuentra en la parte superior, es decir Zn
 0

– TRANSCIÓN: Se aplica la transición δ (q, w1 , Zn ) = q , ε con w1 6= ε
– POP: Se realiza el movimiento pop en la pila de la cadena insertando la cadena vacı́a nuevamente en ella.
0
∗ Z Z0 = Zn−1 Zn−2 ...Z1 Z0
 0

∗ (q, w1 w2 ...wr , Zn Zn−1 ...Z1 Z0 ) ` q , w2 ...wr , Zn−1 ...Z1 Z0 , lo que se puede representar como push(pop(ZZ0 ), ε), es
decir que se borra el último sı́mbolo de la pila.
 0 0

• Transición NO Leer/Push: (q, w, ZZ0 ) ` q , w, Z Z0 donde w = w1 w2 ...wr y ZZ0 = Zn Zn−1 ...Z1 Z0 .

– LEER: Lectura de (q, w1 , Zn ), es decir, se lee el caracter de entrada w1 y el sı́mbolo de la pila que se encuentra en la parte
superior.
∗ NO se borra o consume el primer caracter de la cadena de entrada
∗ se realiza un pop sobre la pila para obtener el sı́mbolo que se encuentra en la parte superior, es decir Zn
 0

– TRANSCIÓN: Se aplica la transición δ (q, ε, Zn ) = q , γ con γ 6= ε
– PUSH: Se realiza el movimiento push en la pila de la cadena γ definida en la transición.
0
∗ Z Z0 = γZn−1 Zn−2 ...Z1 Z0
 0

∗ (q, w1 w2 ...wr , Zn Zn−1 ...Z1 Z0 ) ` q , w1 w2 ...wr , γZn−1 ...Z1 Z0 , lo que se puede representar como push(pop(ZZ0 ), γ),
es decir, se reemplana el sı́mbolo de la parte superior de la pila por una nueva cadena de sı́mbolos.
 0 0

• Transición NO Leer/Pop: (q, w, ZZ0 ) ` q , w, Z Z0 donde w = w1 w2 ...wr y ZZ0 = Zn Zn−1 ...Z1 Z0 .

– LEER: Lectura de (q, w1 , Zn ), es decir, se lee el caracter de entrada w1 y el sı́mbolo de la pila que se encuentra en la parte
superior.
∗ NO se borra o consume el primer caracter de la cadena de entrada
∗ se realiza un pop sobre la pila para obtener el sı́mbolo que se encuentra en la parte superior, es decir Zn
 0

– TRANSCIÓN: Se aplica la transición δ (q, ε, Zn ) = q , ε
– POP: Se realiza el movimiento pop en la pila de la cadena insertando la cadena vacı́a nuevamente en ella.
0
∗ Z Z0 = Zn−1 Zn−2 ...Z1 Z0
 0

∗ (q, w1 w2 ...wr , Zn Zn−1 ...Z1 Z0 ) ` q , w1 w2 ...wr , Zn−1 ...Z1 Z0 , lo que se puede representar como push(pop(ZZ0 ), ε), es
decir que se borra el último sı́mbolo de la pila.

• Transición NO Leer: Este tipo de transiciones no modifican ni la cadena de entrada, ni la pila. Es decir, no se consume acarcater
  0
de entrada y no se realiza pop de la pila para leer el sı́mbolo que se encuentra en la parte superior de ella. δ (q, ε, ε) = q , ε .

d) Lenguaje acpetado por un AP: Existen dos enfoques, aceptación por pila vacı́a, en el que se acepta la cadena cuando la pila está
vacı́a, y el enfoque aceptación por estado final en el que la cadena se acepta siempre y cuando la pila esté vacı́a y el autómata fianlice
en un estado de aceptación. En la materia trabajaremos utilizando el primer enforque. Se sugiere leer Hopcroft 3ra edición páginas
199-202.
e) Traza de un AP: Significa mostrar todos los movimientos que realiza un AP para una determinada cadena de entrada. La manera
formal de hacer esto es a través de las descripciones instantáneas. Se puede utilizar una tabla en la que se muestren las trabnsiciones
sobre los estados, los cambios en la cadena de entrada y el estado de la pila.

2
f)
Para diferenciar las transiciones en las que queremos representar la cadena vacı́a de las transiciones en las que no se desea consumir
caracter de la entrada, usaremos la cadena cadena vacia para representar la cadena vacı́a en las transiciones.
L = {w ∈ (a, b)∗ | na (w) = nb (w)}
Cadenas de L: cadena vacia, aababb, ab, baab
M = (Q, Σ, Γ, δ, q0 , Z0 )
Q = {q0 }
Σ = {a, b}
Γ = {I, A, B}
q0 =estado inicial
Z0 = I
Transiciones: Traza: Configuración Instantántea:
(q0 , cadena− vacia, I) = (q0 , ε) Q Entrada Pila (q0 , abaabbababbbaa, I) ` (q0 , baabbababbbaa, AI) `
(q0 , a, I) = (q0 , AI) q0 abaabbababbbaa I (q0 , aabbababbbaa, I) ` (q0 , abbababbbaa, AI) ` (q0 , bbababbbaa, AAI) `
(q0 , b, I) = (q0 , BI) q0 baabbababbbaa AI (q0 , bababbbaa, AI) ` (q0 , ababbbaa, I) ` (q0 , babbbaa, AI) ` (q0 , abbbaa, I) `
(q0 , a, A) = (q0 , AA) q0 aabbababbbaa I (q0 , bbbaa, AI) ` (q0 , bbaa, I) ` (q0 , baa, BI) ` (q0 , aa, BBI) ` (q0 , a, BI) `
(q0 , b, A) = (q0 , ε) q0 abbababbbaa AI (q0 , cadena− vacia, I) ` (q0 , cadena− vacia, ε)
(q0 , a, B) = (q0 , ε) q0 bbababbbaa AAI Como la pila termina vacı́a, la cadena es aceptada.
(q0 , b, B) = (q0 , BB) q0 bababbbaa AI
q0 ababbbaa I
q0 babbbaa AI
q0 abbbaa I
q0 bbbaa AI
q0 bbaa I
q0 baa BI
q0 aa BBI
q0 a BI
q0 cadena− vacia I
q0 cadena− vacia ε
L = {w ∈ (a, b)∗ | w = an bn }
Cadenas de L: cadena vacia, ab, aaabbb
M = (Q, Σ, Γ, δ, q0 , Z0 )
Q = {q0 , q1 }
q0 =estado en el que se leen las a’s del inicio de la cadena
q1 =estado en el que se leen las b’s que aparecen de la mitad en adelante de la cadena
Σ = {a, b}
Γ = {I, A}
q0 =estado inicial
Z0 = I
Transiciones: Traza: Configuración Instantántea:
(q0 , cadena− vacia, I) = (q0 , ε) Q Entrada Pila (q0 , aaaabbbb, I) ` (q0 , aaabbbb, AI) ` (q0 , aabbbb, AAI) `
(q0 , a, I) = (q0 , AI) q0 aaaabbbb I (q0 , abbbb, AAAI) ` (q0 , bbbb, AAAAI) ` (q1 , bbb, AAAI) `
(q0 , a, A) = (q0 , AA) q0 aaabbbb AI (q1 , bb, AAI) ` (q1 , b, AI) ` (q1 , cadena− vacia, I) `
(q0 , b, A) = (q1 , ε) q0 aabbbb AAI (q1 , cadena− vacia, ε)
(q1 , b, A) = (q1 , ε) q0 abbbb AAAI Como la pila termina vacı́a, la cadena es aceptada.
(q1 , cadena− vacia, I) = (q1 , ε) q0 bbbb AAAAI
q1 bbb AAAI
q1 bb AAI
q1 b AI
q1 cadena− vacia I
q1 cadena− vacia ε

3
Ejercicio 2:
a) Palı́ndromos sobre una cantidad par de sı́mbolos (tomamos la longitud 0 como par)
SOLUCIÓN 1: Usando un caracter especial (c) para determinar la mitad de la cadena:
L = {w ∈ (a, b)∗ | w = ucur , | w |= 2k, k ∈ N}
Cadenas que pertenecen a L: cadena vacı́a, abba, abaaba, aa
Cadenas que no pertenecen a L: abababa, aaabaaa, aba
M = (Q, Σ, Γ, δ, q0 , Z0 )
Q = {q0 , q1 }
q0 =estado en el que se leen las a’s y las b’s de la primera mitad del palı́ndromo (se ingresan sı́mbolos a la pila)
q1 =estado en el que se leen las a’s y las b’s de la segunda mitad del palı́ndromo (se sacan sı́mbolos a la pila)
Σ = {a, b}
Γ = {I, A, B}
q0 =estado inicial
Z0 = I
Transiciones: Traza: Configuración Instantántea:
(q0 , cadena− vacia, I) = (q0 , ε) Q Entrada Pila (q0 , abacaba, I) ` (q0 , bacaba, AI) ` (q0 , acaba, BAI) ` (q0 , caba, ABAI) `
(q0 , a, I) = (q1 , AI) q0 abacaba I (q1 , aba, ABAI) ` (q1 , ba, BAI) ` (q1 , a, AI) ` (q1 , cadena− vacia, I) `
(q0 , b, I) = (q1 , BI) q0 bacaba AI (q1 , cadena− vacia, ε)
(q0 , a, A) = (q0 , AA) q0 acaba BAI Como la pila termina vacı́a, la cadena es aceptada.
(q0 , b, A) = (q0 , BA) q0 caba ABAI
(q0 , a, B) = (q0 , AB) q1 aba ABAI
(q0 , b, B) = (q0 , BB) q1 ba BAI
(q0 , c, A) = (q1 , ε) q1 a AI
(q0 , c, B) = (q1 , ε) q1 cadena− vacia I
(q1 , a, A) = (q1 , ε) q1 cadena− vacia ε
(q1 , b, B) = (q1 , ε)
(q1 , cadena− vacia, I) = (q1 , ε)

SOLUCIÓN 2: Usando usando una transición No Leer para indicar la mitad de la cadena
L = {w ∈ (a, b)∗ | w = uu, | w |= 2k, k ∈ N}
Cadenas que pertenecen a L: cadena vacia, abba, abaaba, aa
Cadenas que no pertenecen a L: abababa, aaabaaa, aba
M = (Q, Σ, Γ, δ, q0 , Z0 )
Q = {q0 , q1 }
q0 =estado en el que se leen las a’s y las b’s de la primera mitad del palı́ndromo (se ingresan sı́mbolos a la pila)
q1 =estado en el que se leen las a’s y las b’s de la segunda mitad del palı́ndromo (se sacan sı́mbolos a la pila)
Σ = {a, b}
Γ = {I, A, B}
q0 =estado inicial
Z0 = I

Transiciones: Traza: Configuración Instantántea:


(q0 , cadena− vacia, I) = (q0 , ε) Q Entrada Pila (q0 , abaaba, I) ` (q0 , baaba, AI) ` (q0 , aaba, BAI) ` (q0 , aba, ABAI) `
(q0 , a, I) = (q0 , AI) q0 abaaba I (q1 , aba, ABAI) ` (q1 , ba, BAI) ` (q1 , a, AI) ` (q1 , cadena− vacia, I) `
(q0 , b, I) = (q0 , BI) q0 baaba AI (q1 , cadena− vacia, ε)
(q0 , a, A) = (q0 , AA) q0 aaba BAI Como la pila termina vacı́a, la cadena es aceptada.
(q0 , b, A) = (q0 , BA) q0 aba ABAI
(q0 , a, B) = (q0 , AB) q1 aba ABAI
(q0 , b, B) = (q0 , BB) q1 ba BAI
(q0 , ε, ε) = (q1 , ε) q1 a AI
(q1 , a, A) = (q1 , ε) q1 cadena− vacia I
(q1 , b, B) = (q1 , ε) q1 cadena− vacia ε
(q1 , ε, I) = (q1 , ε)

4
 ∗
Ejemplo 1: L = w ∈ (a, b) | na (w) = 2nb (w) Creamos el autómata de pila M = (Q, Σ, Γ, δ, q0 , Z0 )
Σ = {a, b}, Γ = {I, A, B}, Z0 = I, Q = {q0 , q1 , q2 , q3 }
q0 = estado inicial, no se leyeron aún caracteres de la entrada (ni a0 s ni b0 s)
q1 = se leen a0 s
q2 = se leen b0 s
q3 = se consumen elementos de la pila cuando hay a en la entrada y B en la pila o viceversa. Cuando hay coincidencia de
caracter de la entrada con elemento de la pila, se deriva al estado correspondiente (q1 o q2 ).

Transiciones: Traza: Configuración Instantántea:


(q0 , cadena− vacia, I) = (q3 , ε) Q Entrada Pila (q0 , aaababbabb, I) ` (q1 , aababbabb, AI) ` (q1 , ababbabb, AAI) `
(q0 , a, I) = (q1 , AI) q0 aaababbabb I (q1 , babbabb, AAAI) ` (q3 , abbabb, AAI) ` (q1 , bbabb, AAAI) `
(q0 , b, I) = (q2 , BI) q1 aababbabb AI (q3 , babb, AAI) ` (q3 , abb, AI) ` (q1 , bb, AAI) ` (q3 , b, AI) `
(q1 , a, A) = (q1 , AA) q1 ababbabb AAI (q3 , cadena− vacia, I) ` (q3 , cadena− vacia, ε)
(q1 , b, A) = (q3 , ε) q1 babbabb AAAI Como la pila queda vacı́a,entonces la cadena es aceptada.
(q2 , a, B) = (q3 , ε) q3 abbabb AAI
(q2 , b, B) = (q2 , BB) q1 bbabb AAAI
(q3 , a, A) = (q1 , AA) q3 babb AAI
(q3 , b, A) = (q3 , ε) q3 abb AI
(q3 , a, B) = (q3 , ε) q1 bb AAI
(q3 , b, B) = (q2 , BB) q3 b AI
(q3 , cadena− vacia, I) = (q3 , ε) q3 cadena vacia I
q3 cadena vacia ε

Anda mungkin juga menyukai