Você está na página 1de 19

Notas de clase para el curso

Introducción a la Teorı́a de la Computación


II Semestre 2018
Profesor: Rodrigo De Castro K.

Capı́tulo 4

Autómatas con pila

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.

4.1. Definición de los autómatas con pila


4.1.1. Autómatas con Pila Deterministas (AFPD)
Un Autómata Finito con Pila Determinista (AFPD) es una séxtupla, M = (Q, q0 , F, Σ, Γ, ∆),
con los siguientes componentes:
1. Q es el conjunto (finito) de estados internos de la unidad de control.

2. q0 ∈ Q es el estado inicial.

3. F es el conjunto de estados finales o de aceptación, ∅ 6= F ⊆ Q.

4. Σ es el alfabeto de entrada, también llamado alfabeto de cinta.

5. Γ es el alfabeto de pila. Los alfabetos Σ y Γ pueden tener sı́mbolos comunes, es


decir, no son necesariamente disyuntos.

6. ∆ es la función de transición del autómata:

∆ : Q × (Σ ∪ {λ}) × (Γ ∪ {λ}) −→ (Q × (Γ ∪ {λ})).

116
Introducción a la Teorı́a de la Computación. Capı́tulo 3 117

Como en los modelos de autómatas considerados en los capı́tulos anteriores, un autómata


con pila procesa cadenas sobre una cinta de entrada semi-infinita; estas entradas están es-
critas con el alfabeto Σ. Pero hay una cinta adicional, llamada pila, también semi-infinita,
que es utilizada por el autómata como lugar de almacenamiento o memoria temporal. Los
sı́mbolos que el autómata puede colocar en la pila pertenecen al alfabeto Γ. Inicialmente,
la pila está vacı́a y la unidad de control está escaneando el fondo de la pila.
En un momento determinado, la unidad de control del autómata está en el estado q
escaneando un sı́mbolo a sobre la cinta de entrada, y el sı́mbolo A en el tope o cima de
la pila, como lo muestra la siguiente gráfica:

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

∆ : Q × (Σ ∪ {λ}) × (Γ ∪ {λ}) −→ (Q × (Γ ∪ {λ}))


∆(q, a, A) = (q 0 , B).

Hay que tener en cuenta los casos a ∈ Σ, a = λ, A, B ∈ Γ, A = λ o B = λ, que se detallan


a continuación.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 118

(1) ∆(q, a, A) = (q 0 , B). El tope de la pila A se reemplaza por B. En otras palabras, el


sı́mbolo B sobre-escribe a A. En el grafo del autómata, esta instrucción la represen-
tamos como

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

(4) ∆(q, a, λ) = (q 0 , λ). El contenido de la pila no se altera. En el grafo del autómata,


esta instrucción la representamos como

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):

(10 ) ∆(q, λ, A) = (q 0 , B).

(20 ) ∆(q, λ, λ) = (q 0 , B).

(30 ) ∆(q, λ, A) = (q 0 , λ).


Introducción a la Teorı́a de la Computación. Capı́tulo 3 119

(40 ) ∆(q, λ, λ) = (q 0 , λ).

Las transiciones λ o espontáneas permiten que el autómata cambie el contenido de la pila


sin procesar (o consumir) sı́mbolos sobre la cinta de entrada.
Es importante aclarar que la función ∆ puede estar parcialmente definida; es decir,
∆(q, a, A) puede no estar definida, para algunos valores q ∈ Q, a ∈ (Σ∪{λ}), A ∈ (Γ∪{λ}).
Se infiere que el procesamiento de algunas cadenas de entrada puede abortarse o detenerse
sin que las entradas se procesen completamente.

Configuración o descripción instantánea. Es una tripla [q, v, β] que representa lo


siguiente: la unidad de control está en el estado q, v es la parte no procesada de la cadena
de entrada (la unidad de control está escaneando el primer sı́mbolo de v), y la cadena β
es el contenido total de la pila, tal como se exhibe en la siguiente gráfica:

.. Configuración instantánea [q, v, β]


.
q: estado actual de la unidad de control.

v: parte no procesada de la entrada.
A
β: contenido total de la pila.
..
β .
v
··· ··· ≡ ···

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, γ]

significa que el autómata pasa de la configuración instantánea [q, u, β] a la configuración


instantánea [p, v, γ] en uno o más pasos computacionales.
En el modelo de autómata con pila determinista (AFPD) se debe cumplir la siguien-
te restricción adicional: dada cualquier configuración instantánea [q, v, β] solamente hay
una instrucción posible (a lo sumo) que se puede aplicar. Para garantizar el determi-
nismo, ∆(q, a, A) y ∆(q, λ, A), con a ∈ Σ y A ∈ (Γ ∪ {λ}), no pueden estar definidos
Introducción a la Teorı́a de la Computación. Capı́tulo 3 120

simultáneamente (de lo contrario el autómata tendrı́a una opción no-determinista). En el


modelo determinista se permiten transiciones λ siempre y cuando satisfagan la restricción
anterior. Esto quiere decir que en un AFPD toda cadena de entrada w ∈ Σ∗ se puede
procesar de manera única. Es posible que el procesamiento de w se aborte (o se detenga)
sin consumir toda la entrada.

Configuración inicial y configuración de aceptación. Hay dos casos particulares


importantes de configuraciones instantáneas. En primer lugar, la configuración inicial es
[q0 , w, λ] para una cadena de entrada w ∈ Σ∗ . Al comenzar el procesamiento de toda
entrada, la pila está vacı́a y la unidad de control está escaneando el fondo de la pila.
La configuración [p, λ, λ], siendo p un estado final o de aceptación, se llama configura-
ción de aceptación. Esto significa que, para ser aceptada, una cadena de entrada debe ser
procesada completamente, el procesamiento debe terminar con la pila vacı́a y la unidad
de control en un estado de aceptación.

Lenguaje aceptado por un AFPD. El lenguaje aceptado por un AFPD M se define


como ∗
L(M ) := {w ∈ Σ∗ : [q0 , w, λ] ` [p, λ, λ], p ∈ F }.
O sea, una cadena w es aceptada si el único procesamiento posible de w desde la configu-
ración inicial [q0 , w, λ] termina en una configuración de aceptación. Como caso particular
se deduce que si el estado inicial q0 es un estado de aceptación, la cadena vacı́a λ es
aceptada, ya que [q0 , λ, λ] serı́a una configuración tanto inicial como de aceptación.
  n n
Ejemplo Diseñar un AFPD M que acepte el lenguaje L = {a b : n ≥ 0}, sobre el
 alfabeto Σ = {a, b}. Recordemos que L no es regular y no puede ser aceptado
por ningún autómata básico (sin pila).
Solución. La idea es almacenar las aes en la pila y borrar luego una a del tope de la
pila por cada b que sea leı́da sobre la cinta. Una cadena será aceptada si es procesada
completamente y la pila se vacı́a. Para mayor claridad, cada a se almacenará como A; es
decir el alfabeto de pila es Γ = {A}. El grafo de M es:

a, λ|A b, A|λ

b, A|λ
q0 q1

Podemos ilustrar el procesamiento de varias cadenas de entrada w ∈ Σ∗ . Sea, inicialmente,


w = aaabbb.

[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

La última es una configuración de aceptación; por lo tanto la cadena w = aaabbb es


aceptada.
Si una cadena tiene más bes que aes, la entrada no se procesa completamente. Por
ejemplo, para la cadena de entrada w = aabbb, se obtiene el siguiente procesamiento:

[q0 , aabbb, λ] ` [q0 , abbb, A] ` [q0 , bbb, AA] ` [q1 , bb, A]


` [q1 , b, λ] (Procesamiento abortado).

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].

A pesar de que la cadena de entrada w se ha procesado completamente y el procesamiento


termina en el estado de aceptación q1 , la configuración [q1 , λ, A] no es de aceptación. Por
lo tanto, w = aaabb no es aceptada.
  2n n
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. La idea es apilar una A por cada dos aes leı́das en la cinta y luego borrar 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

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.

4.1.2. Autómatas con Pila No-Deterministas (AFPN)


Un Autómata Finito con Pila No-Determinista (AFPN) consta de los mismos seis compo-
nentes de un AFPD, M = (Q, q0 , F, Σ, Γ, ∆), pero la función de transición ∆ está definida
como:
∆ : Q × (Σ ∪ {λ}) × (Γ ∪ {λ}) −→ ℘(Q × (Γ ∪ {λ})),
donde ℘(Q × (Γ ∪ {λ})) es el conjunto de subconjuntos de Q × (Γ ∪ {λ}). Para q ∈ Q,
a ∈ Σ ∪ {λ} y A ∈ (Γ ∪ {λ}), ∆(q, a, A) es de la forma

∆(q, a, A) = {(p1 , B1 ), (p2 , B2 ), . . . , (pk , Bk )},

donde p1 , p2 , . . . , pk ∈ Q, y B1 , B2 , . . . , Bk ∈ (Γ ∪ {λ}). El significado de esta transición es:


cuando la unidad de control escanea el sı́mbolo a sobre la cinta de entrada y el sı́mbolo
A en el tope de la pila, la unidad de control puede ejecutar (aleatoriamente) una de
las instrucciones (pk , Bk ) (1 ≤ i ≤ k). A diferencia de lo que sucede con los AFPD,
en el modelo AFPN las transiciones λ, ∆(q, λ, A), no tienen restricción alguna. De esta
manera, una cadena de entrada puede tener muchos procesamientos diferentes. También se
permite que ∆(q, a, A) = ∅, lo que da lugar a procesamientos abortados que no consumen
completamente la entrada.
El lenguaje aceptado por un AFPN M se define como:

L(M ) := {w ∈ Σ∗ : existe un procesamiento [q0 , w, λ] ` [p, λ, λ], p ∈ F }.

O sea, una cadena w es aceptada si existe por lo menos un procesamiento de w desde la


configuración inicial [q0 , w, λ] hasta una configuración de aceptación. Para ser aceptada,
la entrada w debe ser procesada completamente, el procesamiento debe terminar con la
pila vacı́a y la unidad de control en un estado de aceptación.
 
Ejemplo Diseñar un Autómata Finito con Pila No-Determinista (AFPN) que acepte
 el lenguaje L de todas las cadenas sobre el alfabeto Σ = {a, b} que tienen
igual número de aes que de bes. Es decir, L = {u ∈ Σ∗ : #a (u) = #b (u)}.
Solución. Para resolver este problema utilizamos el alfabeto de pila Γ = {A, B}. La idea
es almacenar en la pila aes consecutivas o bes consecutivas. Si en el tope de la pila hay una
A y el autómata lee una b, se borra la A; similarmente, si en el tope de la pila hay una B
y el autómata lee una a, se borra la B. De esta manera, cada a de la entrada se empareja
con una b, y viceversa. Para implementar esta idea solamente se requiere un estado:
Introducción a la Teorı́a de la Computación. Capı́tulo 3 124

a, λ|A
b, λ|B

a, B|λ
q0
b, A|λ

El autómata M es no-determinista porque en un momento determinado las dos instruc-


ciones a, λ|A y a, B|λ le otorgan a M dos opciones al procesar a: almacenar A o borrar el
tope de la pila B. Algo similar sucede con las dos instrucciones b, λ|B y b, A|λ. De todas
maneras, si una cadena tiene igual número de aes que de bes, existe un procesamiento
que consume toda entrada y desocupa la pila. Por otro lado, si una entrada w tiene un
número diferente de aes que de bes, entonces cualquier procesamiento de w, consume la
entrada sin vaciar la pila.
 
Ejemplo Diseñar un Autómata Finito con Pila Determinista (AFPD) que acepte el
 lenguaje L de todas las cadenas sobre el alfabeto Σ = {a, b} que tienen igual
número de aes que de bes. Es decir, L = {u ∈ Σ∗ : #a (u) = #b (u)}.
Solución. En el ejemplo anterior se presentó un AFPN que acepta a L, pero es también es
posible diseñar un AFPD. Vamos a utilizar un recurso que es útil en muchas situaciones:
colocar un marcador de fondo X en la pila al iniciar el procesamiento de una entrada; de
esta forma el autómata sabrá, al vaciar la pila en pasos subsiguientes, cuándo se ha llegado
al fondo. Para el presente problema el alfabeto de pila es Γ = {X, A, B}; al consumir el
primer sı́mbolo de la entrada, ya sea a o b, el autómata coloca X en el fondo.

a, λ|A
q1
b, A|λ
a, λ|X
b, X|λ
q0
a, X|λ

b, λ|X b, λ|B
q2
a, B|λ

A continuación ilustramos el funcionamiento de M procesando la entrada aababbba, la


cual debe ser aceptada porque tiene cuatro aes y cuatro bes.

[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. Inserción de cadenas en la pila


En los autómatas con pila la instrucción básica es ∆(q, a, A) = (p, B), que incluye varios
casos: a ∈ Σ, a = λ, A, B ∈ Γ, A = λ o B = λ. Al ejecutar una instrucción básica, el
autómata solo puede añadir (a lo sumo) un sı́mbolo a la pila. No obstante, las instrucciones
por medio de las cuales se insertan en la pila cadenas de longitud arbitraria se pueden
simular con las transiciones básicas y, por consiguiente, se pueden permitir en el diseño
de autómatas. Esto se precisa en la siguiente proposición.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 126

4.2.1 Proposición. En los autómatas con pila se permiten instrucciones de los siguientes
tipos:

1. ∆(q, a, A) = (q 0 , γ). Instrucción por medio de la cual el tope de la pila A se sustituye


(o sobre-escribe) por la cadena γ ∈ Γ∗ . El nuevo tope de la pila pasa a ser el primer
sı́mbolo de γ. Aquı́ se incluyen los casos a ∈ Σ (se consume a en la cinta y) y a = λ
(transición λ).

∆(q, a, A) = (q 0 , γ)

a, A|γ
q q0

2. ∆(q, a, λ) = (q 0 , γ). Instrucción por medio de la cual se inserta en pila la cadena


γ ∈ Γ∗ , independientemente del tope actual de la pila (este último se mantiene en
la pila). El nuevo tope de la pila pasa a ser el primer sı́mbolo de γ. Aquı́ se incluyen
los casos a ∈ Σ (se consume a en la cinta y) y a = λ (transición λ).

∆(q, a, λ) = (q 0 , γ)

a, λ|γ
q q0

Bosquejo de la demostración. Cada una de las instrucciones ∆(q, a, A) = (q 0 , γ) y


∆(q, a, λ) = (q 0 , γ) se puede simular (añadiendo estados auxiliares) por medio de una
secuencia de k transiciones básicas, donde k es la longitud de γ.
  0
Ejemplo La instrucción ∆(q, a, A) = (q , BCD) consume a en cinta y reemplaza (o
 sustituye) el tope de la pila A por la cadena de tres sı́mbolos BCD; el nuevo
tope de la pila pasa a ser B:

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 λ.

Las instrucciones de la Proposición 4.2.1 se pueden usar en ejercicios concretos de


diseño de autómatas y se usarán más adelante en la demostración del Teorema 4.4.1.
  n 2n
Ejemplo Diseñar un AFPD M que acepte el lenguaje L = {a b : n ≥ 0}, sobre el
 alfabeto Σ = {a, b}.

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)

a, λ|AA b, A|λ c, A|λ

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

4.3. Los modelos AFPD y AFPN no son equivalentes


En contraste con lo que sucede con los modelos AFD y AFN, los modelos de autómata
con pila determinista (AFPD) y no-determinista (AFPN) no resultan ser computacional-
mente equivalentes: existen lenguajes aceptados por autómatas AFPN que no pueden ser
aceptados por ningún AFPD. Un ejemplo concreto es el lenguaje L = {wwR : w ∈ Σ∗ }
sobre el alfabeto Σ = {a, b}. Las cadenas de la forma wwR son palı́ndromes de longitud
par; en efecto,
(wwR )R = (wR )R wR = wwR .
Como se mostrará en la presente sección, se puede construir un autómata con pila no-
determinista para aceptar a L, pero no es posible diseñar ningún autómata con pila
determinista que lo haga. La demostración de esta imposibilidad se presenta en el Teore-
ma 4.3.1
  0
 R ∗

Ejemplo Primero consideramos el lenguaje L = wcw : w ∈ {a, b} sobre el alfa-
 beto Σ = {a, b, c}. Nótese que las cadenas w y w R sólo poseen aes y/o bes.
Es muy fácil diseñar un AFPD que acepte el lenguaje L0 porque el sı́mbolo c actúa como
un separador entre las dos mitades w y wR . Para aceptar una cadena de la forma wcwR ,
la idea es almacenar en la pila los sı́mbolos que preceden a la c central. El contenido
de la pila, leı́do de arriba hacia abajo será precisamente wR . El autómata consume la c
(sin alterar la pila) y luego procesa el resto de la entrada borrando en cada paso el tope
de la pila. El alfabeto de pila para este autómata es Γ = {a, b} y su grafo se exhibe a
continuación.

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 transición λ de q0 a q1 le permite al autómata una opción no-determinista: conjeturar


que se ha llegado a la mitad de la cadena de entrada. En este último caso, la unidad de
control pasa al estado q1 y comienza a borrar los sı́mbolos ya almacenados en la pila, que
deben coincidir con los que se leen en la cinta.

4.3.1 Teorema. El lenguaje L = {wwR : w ∈ Σ∗ }, donde Σ = {a, b}, no puede ser


aceptado por ningún AFPD (Autómata Finito con Pila Determinista).

Demostración. Razonamiento por contradicción. Se supone que existe un AFPD M tal


que L(M ) = L. Las potencias a2 , a4 , a6 , . . . son palı́ndromes de longitud par y, por tanto,
son aceptadas por M . Pero como hay infinitas cadenas de la forma a2n , con n ≥ 0, y
solamente hay un número finito de configuraciones de aceptación (ya que M tiene un
número finito de estados), existen dos cadenas a2i y a2j , con i 6= j, cuyo procesamiento

termina en al misma configuración de aceptación [p, λ, λ], con p ∈ F . Esto es, [q0 , a2i , λ] `

[p, λ, λ] y [q0 , a2j , λ] ` [p, λ, λ]. Como M es determinista, se sigue entonces que, para
toda cadena x ∈ Σ∗ , M procesará las cadenas a2i x y a2j x de la misma forma; es decir,
∗ ∗
[q0 , a2i x, λ] ` [p, x, λ] y [q0 , a2j x, λ] ` [p, x, λ]. Esto implica que, para toda cadena x ∈ Σ∗ ,
a2i x y a2j x son ambas aceptadas o ambas rechazadas por M ; en otras palabras,

(∀x ∈ Σ∗ )[(a2i x ∈ L y a2j x ∈ L) ó (a2i x ∈


/ L y a2j x ∈
/ L)].

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.

(i) El lenguaje de todos los palı́ndromes.


(ii) El lenguaje de todos los palı́ndromes de longitud impar.
(iii) a∗ ∪ {an bn : n ≥ 0}.
(iv) {an bn : n ≥ 0} ∪ {an b2n : n ≥ 0}.
Introducción a la Teorı́a de la Computación. Capı́tulo 3 131

(v) {a2n bn : n ≥ 0} ∪ {an b2n : n ≥ 0}.

Á 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. Autómatas con pila y Lenguajes Independientes


del Contexto
Los lenguajes aceptados por los AFPN son exactamente los lenguajes generados por las
gramáticas GIC, o sea, los lenguajes independientes del contexto. En primer lugar, a
partir de una GIC G es fácil construir un AFPN M tal que L(G) = L(M ). El autómata
M solamente utiliza dos estados, como se establece en el Teorema 4.4.1.

4.4.1 Teorema. Dada una GIC G, existe un AFPN M tal que L(G) = L(M ).

Bosquejo de la demostración. Para una gramática G = (Σ, V, S, P ) dada, se construye un


AFPN que utiliza la pila para simular la derivación de cadenas realizada por G. M requiere
solamente dos estados, independientemente del número de variables y producciones de
G. Concretamente, el autómata M se define como M = (Q, q0 , F, Σ, Γ, ∆), donde Q =
{q0 , q1 }, F = {q1 } y Γ = Σ ∪ V . La función de transición ∆ se define de la siguiente
manera:

1. ∆(q0 , λ, λ) = {(q1 , S)}. Transición λ mediante la cual M coloca el sı́mbolo inicial de


la gramática, S, en el fondo de la pila al iniciar el procesamiento de una cadena de
entrada.

2. Para cada variable A ∈ V ,

∆(q1 , λ, A) = {(q1 , u) : A → u es una producción de la gramática G}.

De esta manera, todas y cada una de las producciones de G se convierten en tran-


siciones λ de M . Mediante estas transiciones, M utiliza la pila para simular las de-
rivaciones: si el tope de la pila es A y en la derivación se usa la producción A → u,
el tope de la pila A es substituido por u. Recuérdese que este tipo de transiciones
está permitido en un AFPN según la Proposición 4.2.1.

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

λ, A|u para cada producción A → u.

λ, λ|S
q0 q1

a, a|λ para cada terminal a ∈ Σ.


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 , λ, λ]

que simula la derivación.


∗ ∗
Recı́procamente, puede demostrarse que si [q0 , w, λ] ` [q1 , λ, λ] entonces S =⇒ w en la
gramática G.
 
Ejemplo Sea G la gramática:
 

 S → aAbS | bBa | λ

G : A → aA | a

B → bB | b

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},

y la función de transición ∆ es:

∆[q0 , λ, λ] = {(q1 , S)},


∆[q1 , λ, S] = {(q1 , aAbS), (q1 , bBa), (q1 , λ)},
∆[q1 , λ, A] = {(q1 , aA), (q1 , a)},
∆[q1 , λ, B] = {(q1 , bB), (q1 , b)},
∆[q1 , a, a] = {(q1 , λ)},
∆[q1 , b, b] = {(q1 , λ)}.

El autómata puede presentarse también por medio de un grafo:


Introducción a la Teorı́a de la Computación. Capı́tulo 3 133

a, a|λ
b, b|λ λ, S|aAbS
λ, S|bBa
λ, λ|S λ, S|λ
q0 q1 λ, A|aA
λ, A|a
λ, B|bB
λ, B|b

Podemos ilustrar la correspondencia entre derivaciones en G y procesamientos en M con


la cadena aabbba, la cual tiene la siguiente derivación a izquierda:

S =⇒ aAbS =⇒ aabS =⇒ aabbBa =⇒ aabbba.

El autómata M simula esta derivación de la cadena aabbba ası́:


[q0 , aabbba, λ] ` [q1 , aabbba, S] ` [q1 , aabbba, aAbS]
` [q1 , abbba, AbS] ` [q1 , abbba, abS]
` [q1 , bbba, bS] ` [q1 , bba, S] ` [q1 , bba, bBa]
` [q1 , ba, Ba] ` [q1 , ba, ba] ` [q1 , a, a] ` [q1 , λ, λ].
 
Ejemplo La siguiente gramática genera los palı́ndromes de longitud par, sobre Σ =
 {a, b}, es decir, el lenguaje L = {ww R : w ∈ Σ∗ }:

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

(i) Siguiendo el procedimiento del Teorema 4.4.1, construir un AFPN M que


acepte el lenguaje generado por G.
(ii) Encontrar una derivación a izquierda en G de la cadena u = aaaabab y hacer
el árbol de esa derivación.
(iii) Utilizando la notación de configuración (o descripción) instantánea, procesar la
cadena u con el autómata M , paso a paso, simulando la derivación encontrada
en (ii).

Você também pode gostar