Escolar Documentos
Profissional Documentos
Cultura Documentos
Capı́tulo 4
En el presente capı́tulo presentamos el modelo de autómata requerido para aceptar los len-
guajes independientes del contexto: el autómata con pila no-determinista. Existe también
la versión determinista pero, a diferencia de lo que sucede con los modelos AFD y AFN, los
autómatas con pila deterministas y no-deterministas no resultan ser computacionalmente
equivalentes.
2. q0 ∈ Q es el estado inicial.
116
Introducción a la Teorı́a de la Computación. Capı́tulo 3 117
PILA ;
..
.
≡
TOPE ; A
..
.
··· a ···
En todo momento la unidad de control solo tiene acceso al sı́mbolo colocado en el tope de
la pila (esa es la razón por la cual la pila se dibuja verticalmente). Al procesar el sı́mbolo
a, la unidad de control se desplaza una casilla a la derecha, cambia al estado q 0 (que puede
ser el mismo q) y realiza sobre la pila una de las siguientes cuatro acciones: o reemplaza
el tope de la pila por otro sı́mbolo, o añade un nuevo sı́mbolo a la pila, o borra el tope de
la pila, o no altera la pila. Las instrucciones permitidas están definidas en términos de la
función de transición
a, A|B
q q0
(2) ∆(q, a, λ) = (q 0 , B). Independientemente del tope actual de la pila, se inserta o añade
un nuevo sı́mbolo B a la pila. B pasa a ser el nuevo tope de la pila. En el grafo del
autómata, esta instrucción la representamos como
a, λ|B
q q0
(3) ∆(q, a, A) = (q 0 , λ). Se borra el tope de la pila A. La unidad de control pasa a escanear
el sı́mbolo ubicado en la casilla inmediatamente debajo, que es el nuevo tope de la
pila. Si la A está inicialmente colocada en el fondo de la pila, entonces la pila se vacı́a
y la unidad de control queda escaneando el fondo. En el grafo del autómata, esta
instrucción la representamos como
a, A|λ
q q0
a, λ|λ
q q0
En las instrucciones (1) a (4) el sı́mbolo a se consume, pero también se permiten tran-
siciones λ o transiciones espontáneas, que se ejecutan independientemente del sı́mbolo
escaneado en la cinta de entrada. Con las transiciones λ, la unidad de control no se des-
plaza a la derecha. Las siguientes son las transiciones λ permitidas; las acciones realizadas
por el autómata sobre la pila son las mismas que con las instrucciones homólogas (1) a
(4):
Se adopta la convención de que la cadena β se lee de arriba hacia abajo. Ası́, en la gráfica
anterior el primer sı́mbolo de β es A, que es el tope de la pila.
La notación
[q, v, β] ` [q 0 , w, γ].
representa un paso computacional, es decir, el autómata pasa de la configuración ins-
tantánea [q, v, β] a la configuración [q 0 , w, γ] al ejecutar una de la instrucciones definidas
por la función de transición ∆. Similarmente, la notación
∗
[q, v, β] ` [p, w, γ]
a, λ|A b, A|λ
b, A|λ
q0 q1
[q0 , aaabbb, λ] ` [q0 , aabbb, A] ` [q0 , abbb, AA] ` [q0 , bbb, AAA] ` [q1 , bb, AA]
` [q1 , b, A] ` [q1 , λ, λ].
Introducción a la Teorı́a de la Computación. Capı́tulo 3 121
Obsérvese que el autómata termina en el estado de aceptación q1 , con la pila vacı́a, pero
la cadena de entrada no es aceptada debido a que no se ha procesado completamente;
[q1 , b, λ] no es una configuración de aceptación.
Si una cadena tiene más aes que bes, la pila no se vacı́a. Por ejemplo, para la cadena
de entrada w = aaabb, se tiene:
[q0 , aaabb, λ] ` [q0 , aabb, A] ` [q0 , abb, AA] ` [q0 , bb, AAA]
` [q1 , b, AA] ` [q1 , λ, A].
b, A|λ
b, A|λ
q0 q2
a, λ|A a, λ|λ
q1
Obsérvese que las cadenas aceptadas por M tienen un número par de aes. Además, si una
entrada solamente tiene aes, no es aceptada porque la pila no se vacı́a.
Las dos transiciones que unen a q0 con q1 se pueden invertir para aceptar el mismo
lenguaje:
Introducción a la Teorı́a de la Computación. Capı́tulo 3 122
b, A|λ
b, A|λ
q0 q2
a, λ|λ a, λ|A
q1
n 2n
Ejemplo Diseñar un AFPD M que acepte el lenguaje L = {a b : n ≥ 0}, sobre el
alfabeto Σ = {a, b}. L no es un regular y no puede ser aceptado por ningún
autómata básico (sin pila).
Solución 1. Se apilan dos Aes por cada a leı́da en la cinta, y luego se borra una A de la
pila por cada b que sea leı́da sobre la cinta. El alfabeto de pila es Γ = {A} y el grafo de
M es:
b, A|λ
b, A|λ
q0 q2
a, λ|A λ, λ|A
q1
Se utiliza una transición λ de q1 a q0 para almacenar una A en la pila sin consumir ningún
sı́mbolo en la cinta de entrada. Nótese además que, cuando aparece la primera b el número
de Aes en la pila es necesariamente par.
Solución 2. Se almacenan todas las aes en la pila y luego se borra una A de la pila por
cada dos bes leı́das en la cinta de entrada. El alfabeto de pila es Γ = {A} y el grafo de M
es:
a, λ|A
b, λ|λ
b, A|λ
q0 q1 q2
b, A|λ
Introducción a la Teorı́a de la Computación. Capı́tulo 3 123
Obsérvese que una cadena aceptada por M necesariamente tiene un número par de bes,
y tal número es exactamente el doble del número de aes.
Nota. En los tres ejemplos anteriores utilizamos Γ = {A} como alfabeto de pila pero
podemos perfectamante hacer Γ = {a} y apilar aes en vez de Aes.
a, λ|A
b, λ|B
a, B|λ
q0
b, A|λ
a, λ|A
q1
b, A|λ
a, λ|X
b, X|λ
q0
a, X|λ
b, λ|X b, λ|B
q2
a, B|λ
[q0 , aababbba, λ] ` [q1 , ababbba, X] ` [q1 , babbba, AX] ` [q1 , abbba, X] ` [q1 , bbba, AX]
` [q1 , bba, X] ` [q0 , ba, λ] ` [q2 , a, X] ` [q0 , λ, λ].
Introducción a la Teorı́a de la Computación. Capı́tulo 3 125
Ejercicios de la sección 4.1
À Diseñar un AFPD que acepte el lenguaje L = {am bn : m > n ≥ 0}, sobre el alfabeto
Σ = {a, b}. Utilizando la notación de configuración (o descripción) instantánea,
procesar paso a paso las cadenas a4 b3 (aceptada), a4 (aceptada) a3 b4 (rechazada) y
a3 b3 (rechazada).
Á Diseñar un AFPD que acepte el lenguaje L = {am bn : n > m ≥ 0}, sobre el alfabeto
Σ = {a, b}. Utilizando la notación de configuración (o descripción) instantánea,
procesar paso a paso las cadenas a3 b4 (aceptada), b4 (aceptada) a4 b3 (rechazada) y
a3 b3 (rechazada).
 Diseñar autómatas con pila, deterministas o no-deterministas, que acepten los si-
guientes lenguajes. En cada caso, explicar brevemente el plan utilizado en el diseño
y presentar el autómata por medio de un grafo de estados.
(i) {an+1 b2n+1 : n ≥ 0} sobre el alfabeto Σ = {a, b}.
(ii) {an bm an+1 : n ≥ 0, m ≥ 1} sobre el alfabeto Σ = {a, b}.
(iii) {ak bm cn : k, m, n ≥ 0, k + m = n} sobre el alfabeto Σ = {a, b, c}.
(iv) {ak bm cn : k, m, n ≥ 0, k + n = m} sobre el alfabeto Σ = {a, b, c}.
(v) {ak bm cn : k, m, n ≥ 0, m + n = k} sobre el alfabeto Σ = {a, b, c}.
(vi) {ak bm cn : k, m, n ≥ 0, 2n = k + m} sobre el alfabeto Σ = {a, b, c}.
(vii) {ak bm cn : k, m ≥ 0, n ≥ 1, n > k + m} sobre el alfabeto Σ = {a, b, c}.
(viii) {ak bm cn : k, m ≥ 1, n ≥ 0, n < k + m} sobre el alfabeto Σ = {a, b, c}.
à Sea Σ = {a, b}. Diseñar autómatas con pila, deterministas o no-deterministas, que
acepten los siguientes lenguajes. En cada caso, explicar brevemente el plan utilizado
en el diseño y presentar el autómata por medio de un grafo de estados.
(i) L = {u ∈ Σ∗ : #a (u) > #b (u)}.
(ii) L = {u ∈ Σ∗ : #a (u) < #b (u)}.
(iii) L = {u ∈ Σ∗ : #a (u) 6= #b (u)}.
(iv) L = {u ∈ Σ∗ : #a (u) = 2#b (u)}.
4.2.1 Proposición. En los autómatas con pila se permiten instrucciones de los siguientes
tipos:
∆(q, a, A) = (q 0 , γ)
a, A|γ
q q0
∆(q, a, λ) = (q 0 , γ)
a, λ|γ
q q0
a, A|BCD
q q0
Esta instrucción se puede simular con una secuencia de tres transiciones básicas, como se
muestra a continuación:
a, A|D λ, λ|C λ, λ|B
q p1 p2 q0
La secuencia es: primero sobre-escribir A por D, luego añadir C a la pila y luego añadir
B. En la primera transición se consume la a, y las demás son transiciones λ. Los estados
Introducción a la Teorı́a de la Computación. Capı́tulo 3 127
p1 y p2 son estados auxiliares (nuevos) que se introducen con el único propósito de hacer
la simulación anterior.
La instrucción ∆(q, a, λ) = (q 0 , BCD) consume a en cinta e inserta la cadena de tres
sı́mbolos BCD encima del tope actual de la pila (este último se mantiene en la pila); el
nuevo tope de la pila pasa a ser B:
a, λ|BCD
q q0
Esta instrucción se puede simular con una secuencia de tres transiciones básicas, como se
muestra a continuación:
a, λ|D λ, λ|C λ, λ|B
q p1 p2 q0
La secuencia es: primero añadir D encima del tope actual de la pila, luego añadir C y
luego añadir B. En la primera transición se consume la a, y las demás son transiciones λ.
Solución. Se almacenan en la pila dos Aes por cada a leı́da en la cinta, y luego se borra
una A de la pila por cada b que sea leı́da sobre la cinta.
a, λ|AA b, A|λ
b, A|λ
q0 q1
En la sección 4.1 se utilizó esta misma idea para resolver este problema, pero añadir dos
Aes a la pila cada a leı́da en la cinta, usando transiciones básicas, requiere un estado
auxiliar adicional.
Ejemplo En la sección 4.1.2 presentamos dos autómatas con pila, uno determinista y
otro no-determinista, para aceptar el lenguaje L = {u ∈ Σ∗ : # (u) = # (u)}
a b
formado por todas las cadenas que tienen igual número de aes que de bes. A continuación
presentamos otro autómata para aceptar este mismo lenguaje. El alfabeto de pila es
Γ = {A, B, X}; el sı́mbolo X se utiliza como marcador de fondo.
La instrucción ∆(q1 , λ, X) = (q0 , λ) es una transición λ que sirve para borrar el mar-
cador de fondo y aceptar, pero introduce una opción no-determinista con respecto a los
bucles ∆(q1 , a, X) = (q1 , AX) y ∆(q1 , b, X) = (q1 , BX). Por consiguiente, este es un
AFPN.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 128
a, X|AX
b, X|BX
λ, λ|X
a, A|AA
q0 q1
b, B|BB
λ, X|λ
a, B|λ
b, A|λ
Ejercicios de la sección 4.2
À Sea Σ = {a, b, c}. Describir explı́citamente los lenguajes aceptados por los siguientes
autómatas con pila:
(i)
b, A|λ c, A|λ
q0 q1 q2
(ii)
b, A|λ
a, λ|AA c, A|λ
b, A|λ
q0 q1
c, A|λ
Á Diseñar autómatas con pila, deterministas o no-deterministas, que acepten los si-
guientes lenguajes. En cada caso, explicar brevemente el plan utilizado en el diseño
y presentar el autómata por medio de un grafo de estados.
(i) {a2n b3n : n ≥ 0} sobre el alfabeto Σ = {a, b}.
(ii) {a3n b2n : n ≥ 0} sobre el alfabeto Σ = {a, b}.
(iii) {ak bm cn : k, m, n ≥ 0, n = 2k + m} sobre el alfabeto Σ = {a, b, c}.
(iv) {ak bm cn : k, m, n ≥ 0, m = k + 2n} sobre el alfabeto Σ = {a, b, c}.
(v) {ak bm cn : k, m, n ≥ 0, k = 2m + n} sobre el alfabeto Σ = {a, b, c}.
(vi) {ak bm cn : k, m, n ≥ 0, 2k = m + n} sobre el alfabeto Σ = {a, b, c}.
(vii) {am bn : 0 ≤ n ≤ 2m} sobre el alfabeto Σ = {a, b}.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 129
a, λ|a a, a|λ
b, λ|b b, b|λ
c, λ|λ
q0 q1
R ∗
Ejemplo Diseñar un AFPN que acepte el lenguaje L = {ww : w ∈ Σ }, donde
Σ = {a, b}. Como se señaló arriba, L es exactamente el lenguaje de los
palı́ndromes de longitud par.
Solución. El lenguaje L del presente ejemplo es similar al lenguaje {wcwR : w ∈ {a, b}∗ }
del ejemplo anterior, excepto que ya no aparece el separador c entre w y wR . El no-
determinismo se utiliza para permitirle al autómata la opción de “adivinar” cuál es la
mitad de la cadena de entrada. Si acierta, procederá a comparar el resto de la cadena
de entrada con los sı́mbolos almacenados en la pila. Si no acierta entonces o bien, no
se consume toda la entrada, o bien, no se vacı́a la pila. Si la cadena de entrada tiene
la forma deseada, entre todos los cómputos posibles estará aquél en el que el autómata
adivina correctamente cuándo ha llegado a la mitad de la cadena.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 130
a, λ|a a, a|λ
b, λ|b b, b|λ
λ, λ|λ
q0 q1
La contradicción surge porque existe una cadena x ∈ Σ∗ tal que a2i x es aceptada pero
a2j x es rechazada. Por simple inspección observamos que tomando x = bba2i se tendrá
a2i x = a2i bba2i ∈ L pero a2j x = a2j bba2i ∈
/ L (porque i 6= j). De esta manera se llega a
una contradicción.
Ejercicios de la sección 4.3
À Sea Σ = {a, b}. Diseñar autómatas con pila no-deterministas que acepten los si-
guientes lenguajes. En cada caso, explicar brevemente el plan utilizado en el diseño
y presentar el autómata por medio de un grafo de estados.
Á Demostrar que ninguno de los lenguajes del problema À puede ser aceptado por
medio de un AFPD (Autómata Finito con Pila Determinista).
 Sea Σ = {a, b, c}. Diseñar un autómata con pila no-determinista que acepte el
lenguaje {ak bm cn : k, m, n ≥ 0, k = m o k = n}.
4.4.1 Teorema. Dada una GIC G, existe un AFPN M tal que L(G) = L(M ).
3. Para cada sı́mbolo terminal a ∈ Σ, ∆(q1 , a, a) = {(q1 , λ)}. Mediante estas transi-
ciones, M borra los terminales del tope de la pila al consumirlos sobre la cinta de
entrada.
El autómata M ası́ definido se puede presentar por medio del siguiente grafo:
Introducción a la Teorı́a de la Computación. Capı́tulo 3 132
λ, λ|S
q0 q1
∗
M está diseñado de tal forma que si S =⇒ w es una derivación a izquierda en la gramática
G, entonces existe un procesamiento
∗
[q0 , w, λ] ` [q0 , w, S] ` [q1 , λ, λ]
Según la construcción del Teorema 4.4.1, el autómata M está dado por M = (Q, q0 , F, Σ, Γ, ∆)
donde
Q = {q0 , q1 },
F = {q1 },
Γ = {a, b, S, A, B},
a, a|λ
b, b|λ λ, S|aAbS
λ, S|bBa
λ, λ|S λ, S|λ
q0 q1 λ, A|aA
λ, A|a
λ, B|bB
λ, B|b
S → aSa | bSb | λ.
Siguiendo el procedimiento del Teorema 4.4.1 podemos construir un AFPN que acepta a
L; su grafo es:
a, a|λ
b, b|λ
λ, λ|S λ, S|aSa
q0 q1 λ, S|bSb
λ, S|λ
Puede observarse que este autómata es diferente al exhibido en la sección 4.3 para aceptar
el mismo lenguaje.
Ejercicios de la sección 4.4
À Sea G la gramática
S −→ aA | aAA
G : A −→ aAB | aA | a
B −→ aBAB | b.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 134