Você está na página 1de 161

Autmatos e Linguagens Formais

S. C. Coutinho
Universidade Federal do Rio de Janeiro
i
ii
c ( by S. C. Coutinho 2007
Agradeo a
David Boechat
Gabriel Rosrio
pelas correes s notas de aula.
Sumrio
Captulo 1. Conjuntos e linguagens 1
1. Exerccios 1
Captulo 2. Autmatos nitos determinsticos 3
1. Exerccios 3
Captulo 3. Expresses regulares 5
1. Introduo 5
2. Lema de Arden 8
3. O algoritmo de substituio 10
4. Expresses regulares 12
5. Anlise formal do algoritmo de substituio 15
6. Exerccios 17
Captulo 4. Linguagens que no so regulares 21
1. Propriedade do bombeamento 21
2. Lema do bombeamento 23
3. Aplicaes do lema do bombeamento 25
4. Exerccios 31
Captulo 5. Autmatos nitos no determinsticos 35
Captulo 6. Operaes com autmatos nitos 39
1. Unio 39
2. Concatenao 45
3. Estrela 47
4. Exerccios 51
Captulo 7. Autmatos de expresses regulares 53
1. Consideraes gerais 53
2. Unio 54
Captulo 8. Gramticas lineares direita 59
1. Exerccios 59
Captulo 9. Linguagens livres de contexto 61
1. Gramticas e linguagens livres de contexto 61
2. Linguagens sensveis ao contexto 65
v
vi SUMRIO
3. Mais exemplos 66
4. Combinando gramticas 69
5. Exerccios 72
Captulo 10. rvores Gramaticais 75
1. Anlise Sinttica e lnguas naturais 75
2. rvores Gramaticais 77
3. Colhendo e derivando 80
4. Equivalncia entre rvores e derivaes 83
5. Ambigidade 84
6. Removendo ambigidade 88
7. Exerccios 90
Captulo 11. Linguagens que no so livres de contexto 93
1. Introduo 93
2. Lema do bombeamento 94
3. Exemplos 98
4. Exerccios 102
Captulo 12. Autmatos de Pilha 103
1. Heurstica 103
2. Denio e exemplos 105
3. Computando e aceitando 111
4. Variaes em um tema 113
5. Exerccios 118
Captulo 13. Gramticas e autmatos de pilha 123
1. O autmato de pilha de uma gramtica 123
2. A receita e mais um exemplo 126
3. Provando a receita 128
4. Autmatos de pilha cordatos 130
5. A gramtica de um autmato de pilha 132
6. Exerccios 137
Captulo 14. Mquinas de Turing 139
1. Exerccios 139
Captulo 15. Mquinas de Turing e Linguagens 143
1. Conectando Mquinas em Paralelo 143
2. Fechamento de linguagens 145
3. A mquina de Turing universal 147
4. Comportamento de | 150
5. Linguagens no recursivas 151
6. O problema da parada 152
Referncias Bibliogrcas 155
CAPTULO 1
Conjuntos e linguagens
Neste primeiro captulo, revisamos algumas propriedades bsicas dos con-
juntos e suas operaes e introduzimos o conceito de linguagem formal.
1. Exerccios
1. Sejam A e B conjuntos, prove que:
(a) A = A;
(b) A = ;
(c) se A B ento A B = A;
(d) se A B ento A B = B;
(e) A A = A = A A;
(f) A B = B A e A B = B A;
(g) A (B C) = (A B) C;
(h) A (B C) = (A B) C;
(i) A (B C) = (A B) (A C);
(j) A (B C) = (A B) (A C);
(k) A ` B = A B onde B o complemento de B no conjunto universo,
isto o conjunto que contm todos os conjuntos com que estamos tra-
balhando;
(l) (A B) = A B;
(m) (A B) = A B;
(n) A = A;
(o) A` B = A` (B A);
(p) B A se, e somente se, A B = ;
(q) (A` B) ` C = (A` C) ` (B ` C) = A` (B C);
(r) A B = e A B = se e somente se A = B.
2. Considere as armaes abaixo: prove as verdaeiras e d umcontra-exemplo
para as falsas.
(a) se A B = A C ento B = C;
1
2 1. CONJUNTOS E LINGUAGENS
(b) se A B = A C ento B = C.
3. Sejam A, B e C conjuntos, prove que:
(a) A(B C) = (AB) (AC);
(b) A(B C) = (AB) (AC);
(c) A(B ` C) = (AB) ` (AC);
4. Explique a diferena entre e . Calcule L , onde L uma linguagem
qualquer.
5. Seja w uma palavra em um alfabeto . Denimos o reexo de w recursi-
vamente da seguinte maneira:
R
= e se w = ax ento w
R
= x
R
a onde
a .
(a) Determine (turing)
R
e (anilina)
R
.
(b) Se x e y so palavras no alfabeto , determine (xy)
R
em funo de x
R
e y
R
.
(c) Determine (x
R
)
R
.
6. SejamL
1
e L
2
linguagens no alfabeto . Determine as seguintes linguagens
em funo de L
R
1
e L
R
2
:
(a) (L
1
L
2
)
R
;
(b) (L
1
L
2
)
R
;
(c) (L
1
L
2
)
R
;
(d) L
1
R
;
(e) (L

1
)
R
.
7. Mostre, por induo em n, que se L
0
, . . . , L
n
so linguagens no alfabeto
ento
L
0
(L
1
L
n
) = (L
0
L
1
) (L
0
L
n
).
8. Sejam
1
e
2
dois alfabetos e seja :
1

2
uma aplicao. Estenda
a

1
de acordo com a seguinte denio recursiva:
() = ;
(x) = (a)(), onde a

1
.
Se L uma linguagem no alfabeto
1
dena
(L) = (w) : w

1
.
Mostre que se L e L

so linguagens no alfabeto
1
ento:
(a) (L L

) = (L) (L

);
(b) (L L

) = (L) (L

);
(c) (L L

) = (L) (L

);
CAPTULO 2
Autmatos nitos determinsticos
Neste captulo introduzimos a noo de autmato nito determinstico
atravs de um exemplo concreto e estudamos alguns outros exemplos que ocor-
rero freqentemente ao longo do livro.
1. Exerccios
1. Seja / um autmato nito determinstico. Quando que L(/)?
2. Desenhe o grafo de estados e determine a linguagem aceita por cada um dos
seguintes autmatos nitos. Em cada caso o estado inicial q
1
e o alfabeto
a, b, c
(a) F
1
= q
5
e a funo de transio dada por:

1
a b c
q
1
q
2
q
3
q
4
q
2
q
2
q
4
q
5
q
3
q
4
q
3
q
5
q
4
q
4
q
4
q
5
q
5
q
4
q
4
q
5
(b) F
2
= q
4
e
2
=
1
.
(c) F
3
= q
2
e a funo de transio dada por:

3
a b c
q
1
q
2
q
2
q
1
q
2
q
3
q
2
q
1
q
3
q
1
q
3
q
2
3. Considere o autmato nito determinstico no alfabeto a, b, com estados
q
0
, q
1
, estado inicial q
0
, estados nais F = q
1
e cuja funo de transi-
o dada por:
3
4 2. AUTMATOS FINITOS DETERMINSTICOS
a b
q
0
q
0
q
1
q
1
q
1
q
0
(a) Esboce o diagrama de estados deste autmato.
(b) Descreva a computao deste autmato que tem incio na congurao
(q
0
, aabba). Esta palavra aceita pelo autmato?
(c) Descreva a computao deste autmato que tem incio na congurao
(q
0
, aabbab). Esta palavra aceita pelo autmato?
(d) Descreva emportugus a linguagemaceita pelo autmato denido acima?
4. Seja um alfabeto com n smbolos. Quantos autmatos nitos determins-
ticos existem com alfabeto e m > 0 estados?
Sugesto: No esquea de considerar todas as possibilidades para o con-
junto de estados nais.
5. Invente autmatos nitos determinsticos que aceitem as seguintes lingua-
gens sobre o alfabeto 0, 1:
(a) o conjunto das palavras que acabam em 00;
(b) o conjunto das palavras com trs 0s consecutivos;
(c) o conjunto das palavras em que cada 0 est entre dois 1s;
(d) o conjunto das palavras cujos quatro smbolos nais so 1101;
(e) o conjunto dos palndromos de comprimento igual a 6.
6. D exemplo de uma linguagem que aceita por um autmato nito deter-
minstico com mais de um estado nal, mas que no aceita por nenhum
autmato nito determinstico com apenas um estado nal. Justique cui-
dadosamente sua resposta.
CAPTULO 3
Expresses regulares
hora de abordarmos o primeiro dos problemas propostos ao nal do ca-
ptulo anterior; isto , como determinar a linguagem aceita por um autmato
nito? De quebra, descobriremos uma maneira de caracterizar estas lingua-
gens.
1. Introduo
Desejamos obter um algoritmo que, dado um autmato nito , deter-
mine a linguagem L() que ele aceita. O algoritmo recursivo, e para poder
descrev-lo comeamos por generalizar a noo de linguagem aceita por um
autmato.
Seja um autmato nito denido pelos ingredientes (, Q, q
1
, F, ).
Para cada q Q denimos L
q
como sendo a linguagem
L
q
= w

: (q, w)

(f, ) onde f F.
Em outras palavras, L
q
formada pelas palavras que levam o autmato do es-
tado q a algum estado nal. Quando os estados do autmato forem numerados
como q
1
, . . . , q
n
, escrevermos L
i
em vez de L
q
i
para simplicar a notao.
Portanto, se q
1
o estado inicial de , ento
L
q
1
= L
1
= L().
Sejam p e q estados de , e digamos que (p, ) = q. Esta transi-
o estabelece uma relao entre as lingaugens L
p
e L
q
. De fato, temos que
(p, ) (q, ) ao passo que, se w L
q
, ento (q, w)

(f, ). Combinado
estas duas computaes obtemos
(p, w) (q, w)

(f, ).
Portanto, L
q
L
p
. Mais uma vez, com a nalidade de no sobrecarregar
a notao, eliminaremos as chaves, escrevendo simplesmente L
q
L
p
.
5
6 3. EXPRESSES REGULARES
A no ser que o alfabeto tenha apenas um smbolo, no h a menor
chance de que L
q
L
p
seja uma igualdade. Isto porque teremos uma in-
cluso como esta para cada . Portanto, se =
1
, . . . ,
n
e se
(p,
i
) = q
i
, ento
n

i=1

i
L
q
i
L
p
.
Desta vez, porm, a incluso , de fato, uma igualdade, desde que p no
seja um estado nal do autmato! Para ver isto suponhamos que u L
p
.
Podemos isolar o primeiro smbolo de u, escrevendo u =
i
w, para algum

i
. Mas, pela denio de L
p
,
(p, u) = (p,
i
w)

(f, ),
para algum f F. Por outro lado, como (p,
i
) = q
i
, temos que (p,
i
)
(q
i
, ). Combinando estas duas computaes, temos que
(p, u) = (p,
i
w) (q
i
, w)

(f, ),
de onde segue que w L
q
i
.
Precisamos ainda analisar o que acontece quando p um estado nal do
autmato. Considerando em detalhe o argumento do pargrafo acima, vemos
que assumimos implicitamente que u = , j que estamos explicitando o seu
primeiro smbolo. Entretanto, se p for um estado nal, teremos, alm disso,
que L
p
.
Resumindo, provamos que, se =
1
, . . . ,
n
, e se (p,
i
) = q
i
, ento
L
p
=

n
i=1

i
L
q
i
se p / F

n
i=1

i
L
q
i
se p F
Oalgoritmo que desejamos segue diretamente desta equao, como mostra
o seguinte exemplo.
Considere o autmato nito determinstico com alfabeto 0, 1 e cujo
grafo
I
?>=< 89:;
q
1
0

?>=< 89:;
q
2
1

?>=< 89:; 7654 0123


q
3
0,1
.
.
.
.
.
.
.
.
.
.
.
?>=< 89:;
q
4
0,1
_
Deste grafo extramos as seguintes eques
L
1
= 0L
2
1L
4
L
2
= 1L
3
0L
4
L
3
= 0L
4
1L
4
(j que q
3
estado nal)
L
4
= 0L
4
1L
4
.
1. INTRODUO 7
Observe que q
4
um estado morto, de modo que nada escapa de q
4
. Em
particular, nenhuma palavra leva o autmato de q
4
a um estado nal. Portanto,
L
4
= . Isto simplica drasticamente as equaes anteriores, que passam a ser
L
1
= 0L
2
L
2
= 1L
3
L
3
=
L
4
= .
Podemos agora resolver este sistema de equaes por mera substituio. As-
sim, substituindo a terceira equao na segunda, obtemos
L
2
= 1L
3
= 1 = 1.
Finalmente, substituindo esta ltima equao na primeira, obtemos
L
1
= 0L
2
= 10 = 10.
Como L
1
= L(), obtivemos uma descrio da linguagem aceita por .
Como seria de esperar, as coisas nem sempre so to diretas. Anal, o
autmato deste exemplo tinha um comportamento muito simples. Vejamos
o que acontece em um exemplo menos elementar. Por exemplo, seja A o
autmato nito determinstico de alfabeto 0, 1 e grafo
I
?>=< 89:;
q
1
0,1

?>=< 89:; 7654 0123


q
2
0,1
.
As equaes correspondentes a L
1
e L
2
so:
L
1
= 0L
2
1L
2
L
2
= 0L
1
1L
1
(j que q
2
estado nal)
Continuando a denotar 0 e 1 por 0 e 1, podemos reescreer estas equaes
como
L
1
= (0 1)L
2
L
2
= (0 1)L
1
.
primeira vista, tudo o que temos que fazer para resolver este sistema subs-
tituir a segunda equao na primeira. Contudo, ao fazer isto obtemos
L
1
= (0 1)((0 1)L
1
),
ou seja,
(1.1) L
1
= (0 1)
2
L
1
(0 1),
de modo que L
1
ca escrito em termos do prprio L
1
. Parece claro que ne-
nhuma substituio pode nos tirar desta encrenca. O que fazer ento?
8 3. EXPRESSES REGULARES
2. Lema de Arden
Na verdade, ao aplicar o mtodo de substituio para resolver sistemas de
equaes e achar a linguagem aceita por um autmato vamos nos deparar mui-
tas vezes com equaes em que uma linguagem escrita em termos dela pr-
pria. Equaes que sero, freqentemente, ainda mais complicadas que (1.1).
Convm, portanto, abordar deste j o problema em um grau de generalidade
suciente para dar cabo de todas as equaes que apaream como resultado do
algoritmo de substituio.
Para isso, suponhamos que um alfabeto e que A e B so linguagens
em . Digamos, que X seja uma outra linguagem em que satisfaa
X = AX B.
O problema que queremos resolver consiste em usar esta equao para deter-
minar X.
Uma coisa que podemos fazer substituir X = AX B de volta nela
prpria. Isso d
(2.1) X = A(AX B) B = A
2
X (A )B,
e no parece adiantar de nada porque anal de contas continuamos com um X
do lado direito da equao. Mas no vamos nos deixar abater por to pouco:
faamos a substituio mais uma vez. Desta vez substituremos X = AX B
em (2.1), o que nos d
X = A
2
(AX B) (AB B) = A
3
X (A
2
A )B.
Repetindo o mesmo procedimento k vezes, chegamos equao
X = A
k+1
X (A
k
A
k1
A
2
A )B.
O problema que o X continua presente. Mas, e se repetssemos o processo
innitas vezes? Neste caso, perderamos de vista o termo que contm X que
seria empurrado para o innito, e sobraria apenas
(2.2) X = ( A A
2
)B.
Para poder fazer isto de maneira formal precisamos introduzir uma nova
operao comlinguagens, a estrela de Kleene. Emgeral, se A uma linguagem
no alfabeto , ento A

denida como a reunio de todas as potncias de A;


isto ,
A

= A A
2
A
3
.
Por exemplo, se = 0, 1 e A = 01, ento
A

= (01)
j
: j 0 = , 01, 0101, 010101, . . . .
Por outro lado, se A = , ento A

o conjunto de todas as palavras no


alfabeto que alis j vnhamos denotando por

.
A equao (2.2) sugere que, continuando o processo de substituio in-
denidamente, deveramos obter X = A

B. Este um conjunto perfeita-


mente bem denido, resta-nos vericar se realmente uma soluo da equao
2. LEMA DE ARDEN 9
X = AXB. Para isso substituremos X por A

B do lado direito da equao:


AX B = A(A

B) B = AA

B B.
Como A

= A A
2
A
3
, obtemos
AA

B B = A( A A
2
A
3
)B B,
que d
AA

B B = (A A
2
A
3
A
4
)B B.
Pondo B em evidncia em todo o lado direito, obtemos
AA

B B = ( A A
2
A
3
A
4
)B = A

B.
Conclumos que A(A

B) B = A

B, de modo que A

B , de fato, uma
soluo da equao X = AX B.
Infelizmente, isto ainda no suciente para completar os clculos do
algoritmo de substituio. O problema que obtivemos uma soluo da equa-
o desejada, mas ainda no sabemos se esta soluo corresponde ao maior
conjunto X

que satisfaz X = AX B. Se no for este o caso, quando


usarmos A

B como soluo estaremos perdendo algumas palavras do conjunto


aceito pelo autmato, o que no queremos que acontea.
Suponhamos, ento, que X o maior subconjunto de

que satisfaz X =
AX B. Como j sabemos que A

B satisfaz esta equao, podemos escrever


X = A

B C, onde C um conjunto (disjunto de A

B) que contm as
possveis palavras excedentes. Substituindo X = A

BC em X = AXB,
temos
(2.3) A

B C = A(A

B C) B = A

B AC,
j que, como vimos, A(A

B) B = A

B. Intersectando ambos os membros


de (2.3) com C, e lembrando que, por hiptese, C A

B = , chegamos a
C = AC C = (A )C.
Temos, ento, duas possibilidades. A primeira que A no contenha . Neste
caso A = , de modo que C = ; ou seja, A

B o maior conjunto solu-


o da equao X = AX B. A outra possibilidade que A contenha , e
neste caso estamos encrencados. Por sorte, esta segunda possibilidade nunca
ocorre na soluo das equaes que advm do algoritmo de substituio! Voc
pode conrmar isto lendo a demonstrao detalhada do algoritmo de substi-
tuio na seo 5. Vamos resumir tudo o que zemos em um lema, provado
originalmente por D. N. Arden em 1960.
LEMA DE ARDEN. Sejam A e B linguagens em um alfabeto . Se / A
ento o maior subconjunto de

que satisfaz X = AX B X = A

B.
Vamos aplicar o que aprendemos para resolver a equao (1.1), que re-
sultou da aplicao do mtodo de substituio ao segundo exemplo da seo
anterior. A equao
L
1
= (0 1)
2
L
1
(0 1).
10 3. EXPRESSES REGULARES
Aplicando o Lema de Arden com X = L
1
, A = (0 1)
2
e B = (0 1),
teremos que
L
1
= X = A

B = ((0 1)
2
)

(0 1).
Conclumos, assim, que a linguagem aceita pelo autmato A
L(A) = ((0 1)
2
)

(0 1).
3. O algoritmo de substituio
Antes de fazer outro exemplo, vamos descrever em mais detalhes o al-
goritmo de substituio que usamos para determinar a linguagem aceita pelos
autmatos da seo 1. Este algoritmo foi inventado por J. A. Brzozowski em
1964.
Algoritmo de substituio
Entrada: ingredientes (, Q, q
1
, F, ) de um autmato nito determinstico
.
Sada: uma descrio da linguagem aceita por .
Primeira etapa: Seja Q = q
1
, . . . , q
n
. Escreva as equaes para as lingua-
gens L
j
, para cada 1 j n.
Segunda etapa: Comeando por L
n
e acabando em L
1
, substitua L
j+1
na
equao para L
j
, aplicando o Lema de Arden sempre que uma linguagem for
expressa em termos dela prpria.
Terceira etapa: A linguagem aceita por corresponde expresso obtida
para L
1
.
Uma descrio detalhada deste algoritmo, e uma demonstrao de que faz
o que pedido, pode ser encontrada na seo 5. Por enquanto, nos contentare-
mos com a descrio acima, que vamos aplicar ao autmato no alfabeto 0, 1
cujo grafo
?>=< 89:;
q
5
0,1

I
?>=< 89:;
q
1
1

0
?>=< 89:;
q
2
0

?>=< 89:;
q
3
0

1
?>=< 89:; 7654 0123
q
4
0,1

As equaes correspondents a autmato so


L
1
= 0L
2
1L
5
L
2
= 1L
3
0L
5
L
3
= 0L
1
1L
4
L
4
= 0L
4
1L
4

L
5
= 0L
5
1L
5
.
3. O ALGORITMO DE SUBSTITUIO 11
Uma olhada no grafo mostra que q
5
um estado morto, de modo que L
5
= .
Com isto as equaes se simpicam:
L
1
= 0L
2
L
2
= 1L
3
L
3
= 0L
1
1L
4
L
4
= 0L
4
1L
4

L
5
= .
A equao para L
4
nos d
L
4
= (0 1)L
4
,
de modo que precisamos aplicar o Lema de Arden. fazendo isto obtemos
L
4
= (0 1)

= (0 1)

.
Substituindo em L
3
,
L
3
= 0L
1
1(0 1)

.
De modo que, da segunda equao, segue que
L
2
= 1(0L
1
1(0 1)

) = 10L
1
11(0 1)

.
Com isso, resulta da primeira equao que
L
1
= 010L
1
011(0 1)

.
Usando o Lema de Arden mais uma vez,
L
1
= 010

(011(0 1)

),
que a linguagem aceita pelo autmato.
Antes de encerrar a seo precisamos fazer algumas consideraes sobre
a aplicao do Lema de Arden.
Emprimeiro lugar, o que aconteceria se no tivssemos notado que q
5
um
estado morto? Neste caso teramos de confrontar a equao L
5
= 0L
5
1L
5
,
ou seja L
5
= (0 1)L
5
. Como L
5
aparece dos dois lados da equao, ser
necessrio aplicar o Lema de Arden. Note que, neste caso X = L
5
, A = (01)
e B = , de modo que
L
5
= X = (0 1)

= ,
que o resultado esperado.
O segundo comentrio diz respeito aplicao do Lema de Arden equa-
o
L
4
= 0L
4
1L
4
.
Na aplicao que zemos anteriormente, tomamos A = (0 1) e B = . Mas
o que aconteceria se escolhssemos A = 0 e B = 1L
4
? Neste caso,
L
4
= 0

(1L
4
) = 0

1L
4
0

,
12 3. EXPRESSES REGULARES
e continuamos com L
4
dos dois lados da equao. Mas, ao invs de nos deixar
intimidar, aplicaremos o Lema de Arden a esta ltima equao, o que nos d
(3.1) L
4
= (0

1)

.
Note que se isto estiver correto (e est!) ento devemos ter que os conjuntos
(0

1)

e (0 1)

so iguaisquer dizer, tm os mesmos elementos. Por-


tanto, deve ser possvel mostrar que toda palavra no alfabeto 0, 1 pertence
ao conjunto (0

1)

. Fica por sua conta se convencer disto. Finalmente,


se adotarmos esta ltima maneira de expressar L
4
, a descrio da linguagem
aceita pelo autmato que resulta do algoritmo de substituio
010

(011(0

1)

).
Em particular, o algoritmo de substituio pode retornar linguagens diferentes,
todas corretas, dependendo da maneira como for aplicado.
4. Expresses regulares
Utilizando o algoritmo de substituio sempre obtemos uma descrio bas-
tante precisa da linguagem aceita por um autmato nito determinstico. Alm
disso, por causa da maneira como o algoritmo opera, a linguagem quase
sempre expressa como resultado da aplicao das operaes de unio, conca-
tenao e estrela, aos conjuntos unitrios formados pelos smbolos do alfabeto
do autmato. As nicas excesses ocorrem quando a linguagem vazia ou .
Formalizaremos isto em uma denio, como segue.
Seja um alfabeto e seja

= , , , (, ), , .
Consideraremos o conjunto

como um outro alfabeto, uma extenso de .
Alm disso, , , , (, ), , sero considerados apenas como smbolos (isto ,
seu dignicado ser ignorado) quando estiverem posando de elementos de

.
Uma expresso regular uma palavra no alfabeto

, construda recursiva-
mente pela aplicao sucessiva das seguintes regras:
(1) se ento uma expresso regular;
(2) e so expresses regulares;
(3) se r
1
e r
2
so expresses regulares, ento (r
1
r
2
) e (r
1
r
2
) tambm
so;
(4) se r uma expresso regular, ento r

tambm .
No h nada de misterioso sobre (3) e (4), elas apenas reetem a maneira
correta de se usar os smbolos , e , quando so interpretados como operado-
res de conjuntos. Portanto, se identicarmos 0, 1, e com os conjuntos 0,
1, e , uma expresso regular r

corresponder a um subconjunto
L(r) em , a linguagem denotada pela expresso regular r.
Suponhamos, por exemplo, que = 0, 1. Neste caso

= 0, 1, , , , (, ), , .
4. EXPRESSES REGULARES 13
Como 0 e 1 so expresses regulares por (1), ento 0

tambm uma expresso


regular por (4). Mas isto implica, por (3), que (0

1) regular. Usando (4)


novamente, obtemos (0

1)

, e por (3) conclumos que ((0

1)

) uma
expresso regular. Esta a expresso regular que denota uma das maneiras de
representar a linguagem L
4
do nal da seo 3. Entretanto, para obter uma
expresso regular corretamente construda, precisamos acrescentar parntesis
representao de L
4
dada pela equao (3.1). O papel dos parntesis apenas
o de eliminar qualquer ambigidade na interpretao das expresses.
A razo para introduzir expresses regulares como palavras em um alfa-
beto, em vez de pens-las simplesmente como a descrio de uma linguagem,
que expresses regulares distintas podem denotar o mesmo conjunto. Este
o caso, por exemplo, das expresses (0 1)

e ((0

1)

), como vimos ao
nal da seo anterior.
claro que qualquer conjunto que possa ser representado a partir dos con-
juntos unitrios e e das operaes de unio, concatenao e estrela
pode ser denotado por uma expresso regular. Em particular, se cuidarmos
de pr os parntesis no lugar certo, o algoritmo de substituio aplicado a um
autmato nito sempre retorna uma expresso regular que denota a lingua-
gem L().
Resta-nos praticar um pouco a construo de uma expresso regular que
denote um conjunto dado, a partir da descrio deste conjunto. Suponhamos
que = a, b, c. Para obter todas as palavras em um certo subconjunto de
devemos usar a estrela de Kleene. Assim,
Linguagem formada por todas as palavras Expresso regular
(vazias ou no) que s contm a a

nos smbolos a, b e c ((a b) c)

que no contm a (b c)

em a e cujo comprimento par (a a)

A ltima expresso merece um comentrio. As palavras de comprimento


par t em a forma a
2k
, para algum k 0 inteiro. Mas,
a
2k
= (aa)
k
aa
k
.
Portanto, o conjunto das palavras de comprimento par ser

k0
aa
k
= aa

.
J as palavras no smbolo a cujo comprimento mpar so da forma a
2k+1
=
a (aa)
k
. Assim, a linguagem formada por essas palavras denotada por
(a (a a)

).
Outro exemplo interessante consiste na linguagem formada pelas palavras
que contm exatamente um a. Isto signica que os outros smbolos da palavra
tm que ser bs ou cs. Como estes smbolos tanto podem aparecer antes como
14 3. EXPRESSES REGULARES
depois do a, uma tal palavra ser da forma uav, onde u e v so palavras que
contmapenas b e c. Isto nos remete expresso regular (((bc)

a)(bc)

)).
Como as expresses regulares j esto cando bastante complicadas, va-
mos suprimir os parntesis e o ponto que denota concatenao, quando no
forem absolutamente necessrios interpretao correta da expresso. Eviden-
temente, ao fazer isto no obtemos uma expresso regular no sentido da deni-
o formal. Fica como exerccio acrescentar os smbolos necessrios para que
cada uma das expresses dadas abaixo se torne uma expresso regular correta.
Duas variaes, dignas de nota, do ltimo exemplo acima so a linguagem
formada por todas as palavras que contm exatamente dois as, que corresponde
a
(b c)

a(b c)

a(b c)

e a linguagem formada por todas as palavras que contm um nmero par de as,
que denotada por
((b c)

a(b c)

a(b c)

Um exemplo um pouco mais difcil a linguagem formada pelas palavras que


contm um nmero mpar de as. Precisamos adicionar um a extra expresso
acima. O problema que este a pode aparecer em qualquer lugar da palavra,
de modo que no podemos simplesmente concaten-lo no incio ou no m da
expresso acima. A sada tomar
((b c)

a(b c)

a(b c)

a((b c)

a(b c)

a(b c)

.
Encerramos com trs exemplos de natureza mais prtica.
Um dos primeiros passos do processo de compilao de uma linguagem de
programao conhecido como anlise lxica. Nesta etapa o compilador iden-
tica, por exemplo, quais foram os nmeros inteiros e as variveis utilizadas
no programa. claro que esta uma etapa necessria para que seja possvel
interpretar corretamente o programa. Na prtica, isto pode ser feito com um
autmato nito. Assim, para identicar as variveis, construmos um autmato
nito que aceita a linguagem que descreve as variveis de uma linguagem. Isto
feito em duas etapas. Primeiro obtemos uma expresso regular que denote
as variveis da linguagem de programao. Em seguida, construmos um aut-
mato nito que aceite esta linguagem.
Contudo, pr esta estratgia em prtica depende de sermos capazes de
resolver algoritmicamente o seguinte problema.
PROBLEMA 3.1. Dada uma expresso regular r, construir um autmato
nito que aceite a linguagem denotada por r.
Abordaremos este problema detalhadamente a partir do prximo captulo.
Entretanto, j estamos em condies de obter expresses regulares para as lin-
guagens que descrevem inteiros e variveis de um programa, como veremos a
seguir.
5. ANLISE FORMAL DO ALGORITMO DE SUBSTITUIO 15
Para comear determinaremos uma expresso regular no alfabeto 0, 1, . . . , 9
que denote os inteiros positivos no sistema decimal. primeira vista pode pa-
recer que a expresso seja simplesmente
(0 1 9)

.
O problema que isto inclui palavras como 00000, que no correspondem a um
nmero formado de maneira correta. A soluo no permitir que as palavras
comecem com o smbolo 0, tomando
(1 9)(0 1 9)

.
J a expresso que denota os inteiros no negativos
0 (1 9)(0 1 9)

.
Finalmente, suponhamos que uma certa linguagem de programao tem
por variveis todas as palavras nos smbolos 0, 1, . . . , 9, A, B, C, . . . , Z que
no comeam por um nmero inteiro. A expresso regular que denota as va-
riveis nesta linguagem de programao
(A B Z)(A B Z 0 1 9)

.
5. Anlise formal do algoritmo de substituio
Nesta seo damos uma descrio detalhada do algoritmo de substituio;
isto , uma descrio cuidadosa o suciente para servir, tanto para programar
o algoritmo, quanto para provar que funciona como esperado. Na verdade,
encerramos a seo justamente com uma demonstrao de que o algoritmo
est correto. Contudo, se voc no pretende programar o algoritmo, nem sente
necessidade de uma demonstrao formal, talvez seja melhor pular esta seo
e passar ao prximo captulo.
Comeamos comalgumas denies umtanto tcnicas. Para t = 0, . . . , m
seja
t
o alfabeto denido por

t
=

se t = 0

1
, . . . ,
t
se t 1.
Seja agora
t
o conjunto formado pelas expresses regulares em
t
da forma

it

i

i
,
onde
i
= uma expresso regular em
0
= . Note que
0
o conjunto
das expresses regulares em .
Dado
t
, seja L() a linguagem obtida de acordo com as seguintes
regras:
(1) L() = ;
(2) L() = ;
(3) L(
i
) = L
i
;
com L
i
como denido na seo 1, e se e so expresses regulares em
t
ento
16 3. EXPRESSES REGULARES
(4) L( ) = L() L();
(5) L( ) = L() L();
(6) L(

) = L()

.
Estamos, agora, prontos para dar uma descrio minuciosa do funciona-
mento do algoritmo.
Algoritmo de Substituio
Entrada: umautmato nito determinstico /cujos ingredientes so (, Q, q
1
, F, ),
onde Q = q
1
, . . . , q
n
.
Sada: uma expresso regular que denota a linguagem aceita por /.
Etapa 1: Para cada estado q
i
escreva uma expresso regular em
m
da forma
E
i
=

(
j

j(i)
) : (q
i
,
j
) = q
j(i)

se q
m
no estado nal, ou
E
i
=

(
j

j(i)
) : (q
i
,
j
) = q
j(i)

se q
m
estado nal; e inicialize k = m.
Etapa 2: Se E
k
j est escrito como uma expresso regular em
k1
, v
para (3), seno E
k
da forma
E
k
=
k
B
onde B
k1
. Neste caso escreva E
k
=

B e v para para a Etapa 3.


Observe que pode acontecer que B = ; se isto ocorrer ento E
k
= .
Etapa 3: Subtraia 1 de k. Se k = 0, ento L(/) denotada pela expresso
regular E
1
no alfabeto
0
e podemos parar; seno, substitua
k
por E
k
na
expresso regular E
i
para i = k e volte Etapa 2.
Resta-nos apenas dar uma demonstrao de que este algoritmo funciona.
Faremos isso usando induo nita.
DEMONSTRAO. Digamos que, para um certo inteiro 0 k m esta-
mos para executar o (m k)-simo lao deste algoritmo. Queremos mostrar
que, ao nal deste lao
(1) E
i

k1
e
(2) L(E
i
) = L
i
,
para i = 1, . . . , m. Para fazer isto, podemos supor que, chegados a este lao,
temos E
i

k
e L(E
i
) = L
i
para i = 1, . . . , m. Observe que estas duas
ltimas armaes so claramente verdadeiras quando k = m.
Comeamos considerando a execuo da Etapa 2 no (mk)-simo lao.
Se j temos que E
k

k1
ento nada h a fazer nesta etapa. Por outro lado,
se E
k
/
k1
, ento como E
k

k
podemos escrever
(5.1) E
k
=
k

k
B,
6. EXERCCIOS 17
onde B
k1
. Seja F =

k
B. Temos de (5.1) e (2) que
A
k
= L(E
k
) = L(
k
) A
k
L(B).
Logo, pelo lema de Arden,
A
k
= L(
k
)

L(B),
mas isto igual a L(F). Como o algoritmo manda fazer E
k
= F, obtemos, ao
nal desta etapa, que E
k

k1
e L(E
k
) = A
k
.
Finalmente, na etapa 3, basta substituir
k
por F na expresso regular de
E
j
sempre que j = k. Note que segue imediatamente disto que E
j

k1
e
que L(E
j
) = A
j
.
6. Exerccios
1. Seja = 0, 1. Se L
1
= 0 e L
2
= 1

, determine:
(1) L
1
L
2
e L
1
L
2
;
(2) L

1
e L

2
;
(3) (L
1
L
2
)

;
(4) L

1
L
2
;
(5) L
1
;
(6) L
2
L

1
.
2. Se L uma linguagem em um alfabeto ento L
R
= w
R
: w L. Se
L = 0 1

calcule L
R
.
3. Seja L uma linguagem no alfabeto . O que podemos concluir a respeito de
L se L
+
= L

` ?
4. Sejam
1
e
2
dois alfabetos e seja :
1

2
uma aplicao. Se L
uma linguagem no alfabeto
1
, mostre que (L

) = (L)

.
5. Para cada um dos autmatos nitos determinsticos, no alfabeto 0, 1, da-
dos abaixo:
esboce o diagrama de estados;
encontre os sorvedouros e os estados mortos;
determine a expresso regular da linguagemaceita pelo autmato usando
o algoritmo de substituio.
(a) Os estado so q
1
, . . . , q
4
, o estado inicial q
1
, o conjunto de estados
nais q
2
e a funo de transio dada por:
0 1
q
1
q
2
q
4
q
2
q
3
q
1
q
3
q
4
q
4
q
4
q
4
q
4
(b) Os estado so q
1
, . . . , q
5
, o estado inicial q
1
, o conjunto de estados
nais q
3
, q
4
e a funo de transio dada por:
18 3. EXPRESSES REGULARES
0 1
q
1
q
2
q
4
q
2
q
2
q
3
q
3
q
5
q
5
q
4
q
5
q
5
q
5
q
5
q
5
(c) Os estado so q
1
, . . . , q
4
, o estado inicial q
1
, o conjunto de estados
nais q
1
e a funo de transio dada por:
0 1
q
1
q
2
q
4
q
2
q
3
q
1
q
3
q
4
q
2
q
4
q
4
q
4
(d) Os estado so q
1
, q
2
, q
3
, o estado inicial q
1
, o conjunto de estados
nais q
1
e a funo de transio dada por:
0 1
q
1
q
1
q
2
q
2
q
3
q
2
q
3
q
1
q
2
(e) Os estado so q
1
, . . . , q
6
, o estado inicial q
1
, o conjunto de estados
nais q
4
e a funo de transio dada por:
0 1
q
1
q
5
q
2
q
2
q
5
q
3
q
3
q
4
q
3
q
4
q
4
q
4
q
5
q
6
q
2
q
6
q
6
q
4
6. Descreva em portugus o conjunto denotado por cada uma das expresses
regulares abaixo:
(a) 1

0;
(b) 1

0(0)

(c) 111 001;


(d) (1 00)

;
(e) (0(0)

1)

;
(f) (0 1)(0 1)

00;
7. Expresse cada uma das seguintes linguagens no alfabeto 0, 1 usando uma
expresso regular:
(a) o conjunto das palavras de um ou mais zeros seguidos de um 1;
6. EXERCCIOS 19
(b) o conjunto das palavras de dois ou mais smbolos seguidos por trs ou
mais zeros;
(c) o conjunto das palavras que contm uma seqncia de 1s, de modo que
o nmero de 1s na seqncia congruente a 2 mdulo 3, seguido de
um nmero par de zeros.
8. Se r e s so expresses regulares, vamos escrever r s se e somente se
L(r) = L(s). Supondo que r, s e t so expresses regulares, mostre que:
(a) (r r) r;
(b) ((r s) (r t)) (r (s t));
(c) ((s r) (t r)) ((s t) r);
(d) (r

) r

;
(e) (r r

) (r

r);
(f) r

;
(g) ( (r r

)) r

;
(h) ((r s)

r) (r (s r)

);
(i) (r s)

(r

(r

.
9. Usando as identidades do exerccio 4 prove que
((abb)

(ba)

(b aa)) (abb)

(( (b(ab)

a))b (ba)

(aa)).
Observe que alguns parnteses e o smbolo foram omitidos para facilitar
a leitura.
CAPTULO 4
Linguagens que no so regulares
O objetivo deste captulo desenvolver um mtodo que nos permita mos-
trar que uma dada linguagem no regular. Nossa estratgia ser a seguinte.
Em primeiro lugar, mostraremos que toda linguagem regular satisfaz certa pro-
priedade, conhecida como propriedade do bombeamento. Assim, para provar
que uma dada linguagem no regular basta constatar que no satisfaz esta
propriedade. Isto , provaremos que uma linguagem no regular atravs de
uma demonstrao por contradio.
1. Propriedade do bombeamento
Comeamos por introduzir a terminologia bsica e obter uma primeira
aproximao para a propriedade de bombeamento das linguagens regulares.
Considere o autmato M da gura abaixo.
I
?>=< 89:;
q
1
0

?>=< 89:;
q
2
1

?>=< 89:;
q
3
0

?>=< 89:;
q
4
0

?>=< 89:;
q
5
1

?>=< 89:; 7654 0123


q
6
0,1

?>=< 89:;
q
7
0,1

FIGURA 1
Entre as palavras aceitas por este autmato temos:
w = 01011001.
Se considerarmos o caminho indexado pela palavra w = 01011001, vemos
que inclui um ciclo que comea em q
2
e acaba em q
4
. Este ciclo corresponde
21
22 4. LINGUAGENS QUE NO SO REGULARES
subpalavra y = 101 de 01011001. Mais precisamente, podemos decompor w
na forma
w = 0
....
x
101
....
y
1001
....
z
= xyz.
Observe que podemos percorrer o ciclo indexado por y vrias vezes e ainda
assim obter uma palavra que aceita por M. Por exemplo, percorrendo o ciclo
3 vezes obtemos
xy
3
z = 0
....
x
101
....
y
101
....
y
101
....
y
1001
....
z
,
que aceita por M. De fato, podemos at remover a subpalavra y de w e
ainda assim continuaremos com uma palavra aceita pelo autmato, neste caso
xz = 01001. Resumindo, vericamos que a palavra w = xyz aceita por
M e que admite uma subpalavra y = que pode ser removida ou repetida
vrias vezes sem que a palavra resultante que fora de L(M). Sempre que isto
acontecer diremos que y uma subpalavra de w que bombevel em L(M).
Naturalmente, o ponto chave o fato da subpalavra y indexar um ciclo no
grafo de M. Na verdade, esta no a nica subpalavra bombevel de w uma
vez que podemos considerar o ciclo como comeando em qualquer um de seus
vrtices. Assim, se tomarmos o incio do ciclo como sendo q
4
, conclumos que
a subpalavra 110 tambm bombevel; isto ,
010(110)
k
01 L(M) para todo k 0.
conveniente estabelecer a noo de bombeabilidade em um contexto
mais geral que o das linguagens regulares. Seja L uma linguagem em um
alfabeto e seja w L. Dizemos que y

uma subpalavra de w
bombevel em L se
(1) y = ;
(2) existem x, z

tais que w = xyz;


(3) xy
k
z L para todo k 0.
A nica funo da condio (1) excluir o caso trivial y = da denio
de palavra bombevel; j (2) signica que y subpalavra de w. Quanto a (3),
o ponto crucial a observar que, para que seja y seja bombevel preciso
que seja possvel omiti-la ou repeti-la no interior de w tantas vezes quanto
desejarmos sem que a palavra resultante deixe de pertencer a L. Para entender
melhor este ponto, considere o autmato M

da gura 2.
claro que 0 uma subpalavra de 10 L(M

). Alm disso, podemos


repetir a subpalavra 0 vrias vezes e ainda assim obter uma palavra em L(M

);
de fato, 1, 10, 10
2
, 10
3
e 10
4
pertencem a L(M

). Apesar disto, 0 no uma


subpalavra de 10 bombevel em L(M

), porque se k 5 ento 10
k
/ L(M

).
Permanecendo com o autmato M

da gura 2, vemos que


L(M

) = 1, 10, 10
2
, 10
3
, 10
4
.
Em particular, no h nenhuma palavra de L(M

) que admita uma subpala-


vra bombevel. Isto no surpreendente. De fato, se uma linguagem admite
2. LEMA DO BOMBEAMENTO 23
I
?>=< 89:;
q
1
1

?>=< 89:; 7654 0123


q
2
0

?>=< 89:; 7654 0123


q
3
0

?>=< 89:; 7654 0123


q
4
0

1
.

?>=< 89:; 7654 0123


q
5
0

?>=< 89:; 7654 0123


q
6
0,1

?>=< 89:;
q
7
0,1

FIGURA 2
uma palavra que tem uma subpalavra bombevel, ento claro que a lingua-
gem innita. H dois pontos importantes nesta discusso que voc no deve
esquecer:
nenhuma palavra de uma linguagem nita L admite subpalavra bom-
bevel em L;
para que uma subpalavra seja bombevel preciso que possa ser re-
petida qualquer nmero de vezes sem que a palavra resultante saia de
L.
2. Lema do bombeamento
Diante do que acabamos de ver, uma pergunta se impe de maneira natu-
ral:
dada uma linguagem L, como achar uma palavra de L que
admita uma subpalavra bombevel?
Em primeiro lugar, esta pergunta s faz sentido se L for innita. Alm disso,
vamos nos limitar, de agora em diante, s linguagens regulares. Sendo assim,
vamos supor que L

uma linguagem innita que aceita por um aut-


mato nito determinstico M no alfabeto .
Se conhecemos M o problema fcil de resolver: basta achar um ciclo em
M. Mas suponha que, apesar de conhecer L, sabemos de M apenas que tem
n estados. Ser que esta informao suciente para achar uma palavra de L
que tenha uma subpalavra bombevel em L? A resposta sim, e mais uma vez
trata-se apenas de achar um ciclo em M. S que, como no conhecemos M,
no temos uma maneira de identicar qual este ciclo. Mesmo assim somos
capazes de saber que um tal ciclo tem que existir. Fazemos isto recorrendo a
um princpio que aprendemos a respeitar ainda criana, quando brincamos de
dana das cadeiras.
PRINCPIO DA CASA DO POMBO. Se, em um pombal, h mais pombos
que casas, ento dois pombos vo ter que ocupar a mesmo casa.
Nossa aplicao deste princpio depende de termos, de um lado uma lin-
guagem innita, de outro um autmato nito determinstico. De fato, como L
innita, ter palavras de comprimento arbitrariamente grande. Em particu-
lar, podemos escolher uma palavra w cujo comprimento muito maior que o
24 4. LINGUAGENS QUE NO SO REGULARES
nmero n de estados de M. Considere o caminho indexado por w no grafo de
M. Como M tem n estados e w tem muito mais do que n smbolos, este ca-
minho tem que passar duas vezes por um mesmo estado. Mas um caminho no
grafo de M no qual h estados repetidos tem que conter um ciclo. Entretanto,
j sabemos que um ciclo no caminho indexado por w nos permite determinar
uma subpalavra bombevel de w. Com isto provamos a seguinte propriedade
do bombeamento das linguagens regulares:
Seja M um autmato nito determinstico. Se w uma
palavra de L(M) de comprimento maior que o nmero de
estados do autmato, ento w admite uma subpalavra bom-
bevel em L(M).
O lema do bombeamento, que o principal resultado deste captulo, no
passa de uma verso renada da propriedade do bombeamento enunciada acima.
LEMA DO BOMBEAMENTO. Seja M um autmato nito determinstico
com n estados e seja L a linguagem aceita por M. Se w uma palavra de L
com comprimento maior ou igual a n ento existe uma decomposio de w na
forma w = xyz, onde
(1) y = ;
(2) [xy[ n;
(3) xy
k
z L para todo k 0.
Antes de passar demonstrao, observe que (1) e (3) nos dizem apenas
que y subpalavra de w bombevel em L. A nica novidade a condio
(2). Esta condio tcnica permite simplicar vrias demonstraes de no
regularidade, reduzindo o nmero de casos que precisam ser considerados.
DEMONSTRAO. A estratgia adotada no incio da seo consistiu em
considerar o caminho no grafo de M indexado por w. Como observamos no
captulo 2, isto formalizado atravs da computao de M determinada por w.
Seja o alfabeto de M. Ento podemos escrever w =
1

n
, onde

1
, . . . ,
n
so elementos de no necessariamente distintos. Seja q
1
o estado
inicial de M. Temos, ento, uma computao
(q
1
, w) = (q
1
,
1

n
) (q
2
,
2

n
) (q
n
,
n
) (q
n+1
, ).
Observe que tambm no estamos supondo que os estados q
1
, . . . , q
n+1
so
todos distintos. De fato, dois destes estados tm que coincidir, porque M s
tem n estados. Digamos que q
i
= q
j
, onde 1 i < j n + 1. Qualquer
escolha de i e j que satisfaa as condies acima suciente para provar (1)
e (3); mas no (2). Para garantir (2) precisamos escolher q
j
como sendo o
primeiro estado que coincide com algum estado anterior. Assumindo desde j
que i e j so inteiros entre 1 e n+1, precisamos fazer a seguinte hiptese sobre
j:
Hiptese: j o menor inteiro para o qual existe i < j tal que q
i
= q
j
.
3. APLICAES DO LEMA DO BOMBEAMENTO 25
Levando tudo isto em conta, podemos reescrever a computao na forma
(q
1
, w) = (q
1
,
1

n
)

(q
i
,
i

n
)

(q
j
,
j

n
)

(q
n
,
n
) (q
n+1
, ).
O ciclo que procuramos est identicado pelo trecho da computao que vai
de q
i
a q
j
= q
i
. Isto sugere que devemos tomar
x =
1

i1
, y =
i

j1
e z =
j

n+1
.
Alm disso, como i < j temos que
y =
i

j1
= ,
de forma que a condio (1) satisfeita. Usando esta notao, a computao
ca
(q
1
, w) = (q
1
, xyz)

(q
i
, yz)

(q
j
, z)

(q
n+1
, ).
Note que, como q
i
= q
j
, a palavra y leva a computao do estado q
i
ao estado
q
i
. Desta forma, repetindo ou omitindo y, podemos fazer este trecho repetir-se
vrias vezes no interior da computao sem alterar o estado em que compu-
tao termina, que continuar a ser q
n+1
. Por exemplo, repetindo y uma vez
temos a palavra xy
2
z, que d lugar computao
(q
1
, xy
2
z)

(q
i
, y
2
z)

(q
j
, yz) = (q
i
, yz)

(q
j
, z)

(q
n+1
, ).
Como xyz L(M) por hiptese, ento q
n+1
umestado nal de M. Portanto,
xy
2
z L(M). De maneira semelhante xy
k
z L(M) para todo k 0, o que
prova (3).
Falta-nos apenas explicar porque (2) vale. Mas, [xy[ = j 1. Entre-
tanto, q
j
o primeiro estado que coincide com algum estado anterior. Isto ,
q
1
, . . . , q
j1
so todos estados distintos. Como M tem n estados, isto signica
que j 1 n. Portanto, [xy[ n, o que completa a demonstrao.
Antes de passar s aplicaes preciso chamar a ateno para o fato de que
a recproca do lema do bombeamento falsa. Isto , o fato de uma linguagem
L conter palavras que admitem subpalavras bombeveis no garante que L
seja regular. Portanto, no possvel provar regularidade usando o lema do
bombeamento. Voltaremos a discutir este ponto no exemplo 5.
3. Aplicaes do lema do bombeamento
O maior obstculo aplicao do lema do bombeamento est na inter-
pretao correta do seu enunciado. Seja M um autmato nito determinstico
com n estados. Segundo o lema do bombeamento, dada qualquer palavra
w L(M) de comprimento maior que n existe uma subpalavra y = que
bombevel em L(M). Note que o lema no diz que qualquer subpalavra de w
bombevel, mas apenas que existe uma subpalavra de w que bombevel.
Por exemplo, considere a linguagem L no alfabeto 0 formada pelas pa-
lavras de comprimento par. fcil construir um autmato nito com 2 estados
que aceita L, portanto esta uma linguagem regular e n = 2. Vamos escolher
uma palavra de L de comprimento maior que 2; digamos, 0
6
. No verdade
26 4. LINGUAGENS QUE NO SO REGULARES
que qualquer subpalavra de 0
6
bombevel em L. Por exemplo, 0 uma sub-
palavra de 0
6
, j que temos uma decomposio 0
6
= 0
2
00
3
; mas bombeando
0 obtemos
0
2
0
k
0
3
= 0
5+k
,
que no pertence a L se k por par. De fato, para que a subpalavra seja bom-
bevel em L preciso que tenha comprimento par. Assim, neste exemplo,
poderamos escolher as subpalavras 0
2
, 0
4
ou 0
6
para bombear.
Tudo isto pode parecer bvio. O problema que um nvel adicional de
diculdade surge nas aplicaes, porque desejamos usar o lema para provar
que uma linguagem no regular. Imagine que temos uma linguagem L e que,
por alguma razo, desconamos que L no regular. Para provar que L de fato
no regular podemos proceder por contradio.
Suponha, ento, por contradio, que L seja aceita por algum autmato
nito determinstico com n estados. De acordo com o lema do bombeamento
qualquer palavra w L de comprimento maior que n ter que admitir uma
subpalavra bombevel. Assim, para obter uma contradio, basta achar uma
palavra em L (o que uma boa notcia!) que no tenha nenhuma subpalavra
bombevel (o que uma m notcia!).
Um ltimo comentrio antes de passar aos exemplos. Neste esboo de de-
monstrao por contradio supusemos que L aceita por um autmato nito
determinstico com n estados. Entretanto, ao fazer esta hiptese no podemos
especicar um valor numrico para n. De fato, se escolhermos n = 100, tudo
o que teremos provado que a linguagem no pode ser aceita por um autmato
com 100 estados. Mas nada impediria, em princpio, que fosse aceita por um
autmato com 101 estados. Resta-nos aplicar estas consideraes gerais em
alguns exemplos concretos.
Exemplo 1. Considere a linguagem no alfabeto 0 denida por
L
primos
= 0
p
: p um primo positivo.
A primeira coisa a observar que esta linguagem innita. Isto uma con-
seqncia de teorema provado pelo matemtico grego Euclides por volta de
300 a. C., segundo o qual existem innitos nmeros primos.
Em seguida devemos considerar se seria possvel construir um autmato
nito que aceitasse esta linguagem. Para isto, seria necessrio que o autmato
pudesse determinar se um dado nmero p primo ou no. Em outras palavras,
o autmato teria que se certicar que p no divisvel pelos inteiros positivos
menores que p. Como a quantidade de inteiros menores que p aumenta com p,
isto requer uma memria innita; que exatamente o que um autmato nito
no tem. Esta uma boa indicao de que L
primos
no regular. Vamos
comprovar nosso palpite usando o lema do bombeamento.
Suponha, ento, por contradio, que L
primos
aceita por um autmato
nito determinstico com n estados. Precisamos escolher uma palavra com
comprimento maior que n em L
primos
. Para fazer isto, basta escolher um
primo q > n. Aexistncia de umtal primo conseqncia imediata do teorema
3. APLICAES DO LEMA DO BOMBEAMENTO 27
de Euclides mencionado acima. Portanto, 0
q
uma palavra de L
primos
de
comprimento maior que n.
Nestas circunstncias, o lema do bombeamento garante que existe uma de-
composio 0
q
= xyz de modo que y = bombevel em L
primos
. Como
o que desejamos contradizer esta armao, temos que mostrar que 0
q
no
admite nenhuma subpalavra bombevel. Neste exemplo fcil executar esta
estratgia neste grau de generalidade. De fato, uma subpalavra no vazia qual-
quer de 0
q
tem que ser da forma 0
j
para algum 0 < j q. Mas x e z tambm
so subpalavras de 0
q
; de modo que tambm so cadeias de zeros. Tomando,
x = 0
i
, teremos que z = 0
qij
.
Bombeando y, conclumos que
xy
k
z = 0
i
(0
j
)
k
0
qij
= 0
i+jk+(qij)
= 0
q+(k1)j
deve pertencer a L
primos
para todo k 0. Mas isto s pode ocorrer se q+(k
1)j for um nmero primo para todo k 0. Entretanto, tomando k = q + 1,
obtemos
q + (k 1)j = q + qj = q(1 + j)
que no pode ser primo porque tanto q quanto j +1 so nmeros maiores que 1.
Temos assim uma contradio, o que conrma nossas supeitas de que L
primos
no regular.
Note que a condio (2) do lema do bombeamento no foi usada em ne-
nhum lugar nesta demonstrao. Como frisamos anteriormente, esta uma
condio tcnica que serve para simplicar o tratamento de exemplos mais
complicados, como veremos a seguir.
Exemplo 2. Nosso prximo exemplo a linguagem
L = a
m
b
m
: m 0
no alfabeto a, b. Tambm neste caso fcil dar um argumento heurstico que
nos leva a desconar que L no pode ser regular. Lembre-se que o autmato
l a entrada da esquerda para a direita. Assim, ele ler toda a seqncia de as
antes de chegar aos bs. Portanto, o autmato tem que lembrar quantos as viu
para poder comparar com o nmero de bs. Mas a memria do autmato nita,
e no h restries sobre a quantidade de as em uma palavra de L.
Para provar que L no regular vamos recorrer ao lema do bombeamento.
Suponha, por contradio, que L aceita por um autmato nito determinstico
com n estados. Em seguida temos que escolher uma palavra w de L com
comprimento maior que n; digamos que w = a
n
b
n
. Como [w[ = 2n > n, tem
que existir uma decomposio
a
n
b
n
= xyz
de forma que as condies (1), (2) e (3) do lema do bombeamento sejam satis-
feitas.
Mas que decomposies de a
n
b
n
satisfazem estas condies? Dessa vez
comearemos analisando (2), segundo a qual [xy[ n. Isto , xy um prexo
28 4. LINGUAGENS QUE NO SO REGULARES
de a
n
b
n
de comprimento menor ou igual a n. Como a
n
b
n
comea com n letras
a, conclumos que a o nico smbolo que x e y podem conter. Portanto,
x = a
i
e y = a
j
.
Alm disso, j = 0 pela condio (1). J z rene o que sobrou da palavra w, de
modo que
z = a
nij
b
n
.
Observe que no h razo pela qual xy tenha que ser igual a a
n
, de modo que
podem sobrar alguns as em z.
Resta-nos bombear y. Fazendo isto temos que
xy
k
z = a
i
(a
j
)
k
a
nij
b
n
= a
n+(k1)j
b
n
,
um elemento de L para todo k 0. Contudo, a
n+(k1)j
b
n
s pode pertencer
a L se os expoentes de a e b coincidirem. Porm
n + (k 1)j = n para todo k 0
implica que j = 0, contradizendo a condio (1) do lema do bombeamento.
Antes de passar ao prximo exemplo convm considerar a escolha que
zemos para a palavra de comprimento maior que n. No parece haver nada de
extraordinrio nesta escolha, mas a verdade que nem toda escolha de w seria
satisfatria. Por exemplo, assumindo que n 2, teramos que [a
n1
b
n1
[ =
2n 2 n. Entretanto, esta no uma boa escolha para w. A razo que
a
n1
b
n1
= xyz e [xy[ n
no excluem a possibilidade de y conter um b. Isto nos obrigaria a considerar
dois casos separadamente, a saber, y = a
j
e y = a
j
b, o que complicaria um
pouco a demonstrao. Diante disto, podemos descrever o papel da condio
(2) como sendo o de restringir os possveis y. O problema que isto no se
d automaticamente mas, como no exemplo acima, depende de uma escolha
adequada para w.
Por sorte, na maioria dos casos, muitas escolhas para w so possveis.
Neste exemplo, bastaria tomar w = a
r
b
r
com r n. Entretanto, para algu-
mas linguagens a escolha da palavra requer bastante cuidado, como mostra o
prximo exemplo.
Exemplo 3. Um argumento heurstico semelhante ao usado para a linguagem
anterior sugere que
L = a
m
b
r
: m r
no deve ser regular. Vamos provar isto usando o lema do bombeamento.
Suponhamos, por contradio, que L seja aceita por um autmato nito
determinstico com n estados. Neste exemplo, como no anterior, uma escolha
possvel para uma palavra de comprimento maior que n em L a
n
b
n
. Da
condio (2) do lema do bombeamento conclumos que, se a
n
b
n
= xyz, ento
x = a
i
e y = a
j
.
3. APLICAES DO LEMA DO BOMBEAMENTO 29
J condio (1) nos garante que j = 0. Como z = a
nij
b
n
, obteremos, ao
bombear y, que
xy
k
z = a
i
(a
j
)
k
a
nij
b
n
= a
n+(k1)j
b
n
.
Mas, para que esta palavra esteja em L preciso que
n + (k 1)j n,
donde segue que (k 1)j 0. Por sua vez, j = 0 fora que k 1 0, ou
seja, que k 1. Mas, para que y seja bombevel preciso que xy
k
z L para
todo k 0, e no apenas k 1. Portanto, temos uma contradio com o lema
do bombeamento, o que prova que L no regular.
Desta vez estivemos perto de no chegar a lugar nenhum! De fato, uma
contradio s obtida porque tomando k = 0,
a
n+(k1)j
b
n
= a
nj
b
n
no pertence a L. Entretanto, neste exemplo, muitas escolhas aparentemente
adequadas de w no levariam a nenhuma contradio. Por exemplo, fcil
se deixar sugestionar pelo sinal e escolher w = a
n+1
b
n
. Esta palavra tem
comprimento maior que n e qualquer decomposio da forma a
n+1
b
n
= xyz
requer que x e y s tenham as. Entretanto, tomando
x = a
i
, y = a
j
e z = a
n+1ij
b
n
,
e bombeando y, obtemos
xy
k
z = a
n+1+(k1)j
b
n
que pertence a L desde que 1 (1 k)j. Infelizmente, neste caso isto no
leva a contradio nenhuma, a no ser que j > 1, e no temos como descartar
a possibilidade de j ser exatamente 1.
A prxima linguagem requer uma escolha ainda mais sutil da palavra w.
Exemplo 4. Considere agora a linguagem
L
uu
= uu : u 0, 1

.
Como nos exemplos anteriores, fcil descrever um argumento heurstico para
justicar porque seria de esperar que L
uu
no fosse regular, e deixaremos isto
como exerccio. Para provar a no regularidade de L
uu
pelo lema do bombe-
amento, suporemos que esta linguagem aceita por um autmato nito deter-
minstico com n estados.
O principal problema neste caso escolher uma palavra de comprimento
maior que n que nos permita chegar facilmente a uma contradio. A escolha
mais bvia u = 0
n
, que, infelizmente, no leva a nenhuma contradio,
como mostra o exerccio 5. Felizmente uma variao simples desta palavra se
mostra adequada, a saber u = 0
n
1. Neste caso, w = 0
n
10
n
1 tem comprimento
2n + 2 > n, e qualquer decomposio
0
n
10
n
1 = xyz
30 4. LINGUAGENS QUE NO SO REGULARES
satisfaz
x = 0
i
, y = 0
j
e z = 0
nij
10
n
1
para algum i 0 e j 1. Bombeando y obtemos
xy
k
z = 0
n+(k1)j
10
n
1
Para saber se esta palavra pertence ou no a L
uu
precisamos descobrir se pode
ser escrita na forma vv para algum v 0, 1

. Igualando
0
n+(k1)j
10
n
1 = vv
conclumos que v tem que terminar em 1. Como s h um outro 1 na palavra,
v = 0
n+(k1)j
1 = 0
n
1.
Isto , n + (k 1)j = n. Como j = 0, esta igualdade s verdadeira se
k = 1. Mas isto contradiz o lema do bombeamento, segundo o qual xy
k
z
deveria pertencer a L
uu
para todo k 0.
Os exemplos anteriores mostram que a demonstrao pelo lema do bom-
beamento de que uma certa linguagem L no regular obedece a um padro,
que esboamos abaixo:
Suponhamos, por contradio, que L seja aceita por um
autmato nito determinstico com n estados.
Escolha uma palavra w L, de comprimento maior
que n, de modo que as possibilidades para uma de-
composio da forma w = xyz sejam bastante limi-
tadas.
Bombeie y e mostre que se xy
k
z L ento uma con-
tradio obtida.
As principais diculdades em fazer funcionar esta estratgia so as seguintes:
a escolha de uma palavra w adequada;
a identicao correta da condio que a pertinncia xy
k
z L im-
pe sobre os dados do problema.
No exerccio 7 temos um exemplo de demonstrao em que vrios erros foram
cometidos na aplicao desta estratgia. Resolver este exerccio pode ajud-lo
a evitar os erros mais comuns que surgem na aplicao do lema do bombea-
mento.
Infelizmente o lema do bombeamento est longe de ser uma panacia in-
falvel. Para ilustrar isto, vamos considerar mais um exemplo.
Exemplo 5. Seja L a linguagem no alfabeto a, b, c formada pelas palavras
da forma a
i
b
j
c
r
para as quais i, j, r 0 e, se i = 1 ento j = r. Mostraremos
que a nica palavra de L que no admite uma subpalavra bombevel .
H dois casos a considerar. No primeiro, i = 1 e j e r no so ambos
nulos. Neste caso a subpalavra bombevel y = b se j = 0 ou y = c se r = 0.
O segundo caso consiste em supor que i = 1, ou que i = 1 mas j = r = 0.
Desta vez podemos tomar y = a como sendo a palavra bombevel.
4. EXERCCIOS 31
Como cada palavra de L se encaixa em um destes dois casos, provamos
que toda palavra de L admite uma subpalavra bombevel. Entretanto, esta
linguagem no regular. Assim, constatamos neste exemplo que:
a recproca do lema do bombeamento falsa; isto , no basta que
o resultado do lema do bombeamento seja verdadeiro para que a lin-
guagem seja regular;
nem sempre o lema do bombeamento basta para mostrar que uma
linguagem no regular.
Provaremos que a linguagem acima de fato no regular no captulo ???. Para
isto, alm do lema do bombeamento, vamos precisar usar um resultado sobre a
estabilidade das linguagens regulares por interseco.
4. Exerccios
1. Considere o autmato nito determinstico no alfabeto 0, 1, com es-
tado inicial q
1
, conjunto de estados nais q
5
, q
6
, q
8
e funo de transio
dada pela seguinte tabela:
0 1
q
1
q
2
q
6
q
2
q
6
q
3
q
3
q
4
q
2
q
4
q
2
q
5
q
5
q
5
q
5
q
6
q
7
q
4
q
7
q
8
q
4
q
8
q
4
q
5
(a) Esboce o diagrama de estados do autmato M.
(b) Ache uma subpalavra de 010011101000 que possa ser bombeada na
linguagem L(M).
(c) Seja w = 00. Verique que w, w
2
L(M). w bombevel emL(M)?
2. Considere a linguagem L no alfabeto 0, 1 dada por
L = 10, 101
2
0, 101
2
01
3
0, 101
2
01
3
01
4
0, . . . .
(a) Mostre que L innita mas no admite nenhuma palavra que tenha
uma subpalavra bombevel.
(b) Mostre que L no regular.
3. Seja M um autmato nito determinstico e L a linguagem aceita por M.
Vimos que para encontrar uma palavra de L que contm uma subpalavra
bombevel basta encontrar um caminho no grafo de M que contenha um
ciclo. Suponha agora que no conhecemos M, mas que conhecemos uma
32 4. LINGUAGENS QUE NO SO REGULARES
expresso regular r que denota L. De que forma podemos usar r para achar
uma palavra de L que tem uma subpalavra bombevel?
4. Ache uma palavra que contenha uma subpalavra bombevel na linguagem
denotada pela expresso regular
(1 1 0) (((1 0)

0) 0).
5. Considere a linguagem
L
uu
= uu : u 0, 1

.
Mostre que, tomando u = 0
n
, a palavra uu admite uma subpalavra bombe-
vel em L
uu
.
SUGESTO: Tome uma subpalavra de comprimento par.
6. Mostre que se L uma linguagem regular innita, ento L admite pelos
menos uma palavra que tem uma subpalavra bombevel.
7. Considere a linguagem
L = 0
2
n
: n 0.
Determine os erros cometidos na demonstrao abaixo de que L no regu-
lar. Corrija estes erros e d uma demonstrao correta da no regularidade
de L.
Suponha que L aceita por um autmato nito determinstico.
Seja w = 0
2
n
. Pelo lema do bombeamento podemos decompor w
na forma w = xyz, onde
x = 0
r
, y = 0
s
e z = 0
2
n
rs
.
Bombeando y obtemos
xy
k
z = 0
2
n
+(k1)s
.
Mas para que esta palavra pertena a L preciso que 2
n
+ (k
1)s = 2
n
, o que s possvel se (k 1)s = 0. Como s = 0,
conclumos que k s pode ser igual a 1, o que contradiz o lema do
bombeamento.
8. Verique quais das linguagens dadas abaixo so regulares e quais no so.
Em cada caso justique cuidadosamente sua resposta.
(a) 0
i
1
2i
: i 1;
(b) (01)
i
: i 1;
(c) 1
2n
: n 1;
(d) 0
n
1
m
0
n+m
: n, m 1;
(e) 1
2
n
: n 0;
(f) w : w = w
r
onde w 0, 1;
(g) wxw
r
: w, x 0, 1

` .
4. EXERCCIOS 33
Se w uma palavra emumalfabeto ento w
r
a palavra obtida invertendo-
se a ordem das letras em w. Portanto se uma palavra satisfaz w = w
r
ento
um palndromo.
9. Uma palavra w no alfabeto (, ) balanceada se:
(a) em cada prexo de w o nmero de (s no menor que o nmero de )s
e
(b) o nmero de (s em w igual ao nmero de )s.
Isto , w balanceada se pode ser obtida a partir de uma expresso aritmtica
corretamente escrita pela omisso das variveis, nmeros e smbolos das
operaes. Mostre que a linguagemL que consiste nas palavras balanceadas
no alfabeto (, ) no regular.
10. Use o lema do bombeamento para mostrar que, se uma linguagem L contm
uma palavra de comprimento maior ou igual a n e aceita por um aut-
mato nito determinstico com n estados, ento L innita. Use isto para
descrever um algoritmo que permite decidir se a linguagem aceita por um
autmato nito determinstico dado ou no innita.
11. Seja M um autmato nito determinstico com n estados e seja L a lingua-
gem aceita por M.
(a) Use o lema do bombeamento para mostrar que se Lcontmuma palavra
de comprimento maior ou igual que 2n, ento ela contm uma palavra
de comprimento menor que 2n.
(b) Mostre que L innita se e somente se admite uma palavra de compri-
mento maior ou igual a n e menor que 2n.
(c) Descreva um algoritmo baseado em (3) que, tendo como entrada um
autmato nito determinstico M, determina se L(M) nita ou in-
nita.
SUGESTO: Para provar (a) use o lema do bombeamento com k = 0.
12. Seja um autmato nito determinstico com n estados e um alfabeto de
m smbolos.
(a) Use (a) para mostrar que L() no vazia se e somente se contm
uma palavra de comprimento menor ou igual a n.
(b) Explique como isto pode ser usado para criar um algoritmo que verica
se a linguagem de um autmato nito determinstico ou no vazia.
(c) Suponha que a linguagem aceita por vazia. Quantas so as pa-
lavras que tero que ser testadas antes que o algoritmo de (b) possa
chegar a esta concluso? O que isto nos diz sobre a ecincia deste
algoritmo?
CAPTULO 5
Autmatos nitos no determinsticos
1. Desenhe o diagrama de estados e descreva a linguagem aceita por cada um
dos seguintes autmatos nitos no determinsticos. Em cada caso o estado
inicial q
1
.
(a) F
1
= q
4
e a funo de transio dada por:

1
a b c
q
1
q
1
, q
2
, q
3

q
2
q
4

q
3
q
4

q
4

(b)
2
=
1
e F
2
= q
1
, q
2
, q
3
.
(c) F
3
= q
2
e a funo de transio dada por:

3
a b
q
1
q
2

q
2
q
1
, q
3

q
3
q
1
, q
3

2. Determine, usando o algoritmo descrito em aula, autmatos nitos no de-
terminsticos que aceitem as linguagens cujas expresses regulares so da-
das abaixo:
(a) (10 001 010)

;
(b) (1 0)

00101;
(c) ((0 0) (0 0 0))

.
3. Converta cada umdos autmatos nitos no determinsticos obtidos no exer-
ccio anterior em um autmato nito determinstico.
4. Seja A um autmato nito determinstico com um nico estado nal. Con-
sidere o autmato nito no determinstico A

obtido invertendo os papis


35
36 5. AUTMATOS FINITOS NO DETERMINSTICOS
dos estados inicial e nal e invertendo tambm a direo de cada seta no
diagrama de estado. Descreva L(A

) em termos de L(A).
5. Seja = 0, 1. Seja L
1

a linguagem que consiste das palavras onde


h pelo menos duas ocorrncias de 0, e L
2

a linguagem que consiste


das palavras onde h pelo menos uma ocorrncia de 1. Para cada uma das
linguagens L abaixo d uma expresso regular para L e use os algoritmos
descritos emaula para criar umautmato nito no determinstico que aceita
L.
(a) L = L
1
L
2
;
(b) L =

` L
1
;
(c) L = L
1
L
2
.
6. Sejam L e L

linguagens regulares. Mostre que L ` L

regular
7. Sejam L e L

linguagens tais que L regular, LL

regular e LL

= .
Mostre que L

regular.
8. Sejam M e M

autmatos nitos no determinsticos em um alfabeto .


Neste exerccio discutimos uma maneira de denir um autmato nito no
determinstico N que aceita a concatenao L(M) L(M

) diferente da que
foi vista em aula. Seja a funo de transio de M. Para construir o grafo
de N a partir dos grafos de M e M

procedemos da seguinte maneira. Toda


vez que um estado q de M satisfaz
para algum , o conjunto (q, ) contm um estado
nal,
acrescentamos uma transio de q para o estado inicial de M

, indexada por
.
(a) Descreva detalhadamente todos os ingredientes de N. Quem so os
estados nais de N?
(b) Mostre que se / L(M) ento N aceita L(M) L(M

).
(c) Se L(M) ento pode ser necessrio acrescentar mais uma transio
para que o autmato aceite L(M) L(M

). Que transio esta?


9. Seja M um autmato nito determinstico no alfabeto , com estado inicial
q
1
, conjunto de estados Q e funo de transio . Dizemos que M tem
reincio se existem q Q e tais que
(q, ) = q
1
.
Em outras palavras, no grafo de M h uma seta que aponta para q
1
. Mos-
tre como possvel construir, a partir de um autmato nito determins-
tico M qualquer, um autmato nito determinstico M

sem reincio tal que


L(M) = L(M

).
10. Sejam A e A

autmatos nitos determinsticos com alfabeto , conjunto de


estados Q e Q

, estados iniciais q
1
e q

1
, conjuntos de estados nais F e F

e funes de transio e

. Seja M o autmato nito determinstico com


alfabeto , conjunto de estados Q
1
Q
2
, estado inicial (q
1
, q

1
), conjunto
5. AUTMATOS FINITOS NO DETERMINSTICOS 37
de estados nais F
1
F
2
e funo de transio dada por
((q, q

), ) = (
1
(q, ),
2
(q

, )),
onde q Q, q

e .
(a) Mostre que L(M) = L(A) L(A

).
(b) Use (a) para dar uma outra demonstrao de que a interseo de lingua-
gens regulares regular.
(c) Use esta construo para obter um autmato nito determinstico que
aceita a linguagem L do exerccio 6(c).
11. Seja L uma linguagem que regular. Denimos o posto de L como sendo o
menor inteiro positivo k para o qual existe um autmato nito determinstico
A com k estados e tal que L = L(A).
(a) Se L
1
e L
2
so linguagens regulares cujos postos so k
1
e k
2
respecti-
vamente, determine m (em termos de k
1
e k
2
) de modo que o posto de
L
1
L
2
seja menor ou igual a m.
(b) Considere a armao: se L
1
L
2
so linguagens regulares ento
o posto de L
1
tem que ser menor ou igual que o posto de L
2
. Esta
armao verdadeira ou falsa? Justique sua resposta com cuidado!
CAPTULO 6
Operaes com autmatos nitos
No captulo 3 vimos como obter a expresso regular da linguagem aceita
por um autmato nito. Agora, comeamos a preparar o terreno para poder re-
solver o problema inverso; isto , dada uma expresso regular r em um alfabeto
, como construir um autmato nito que aceita L(r)? Nossa estratgia
consistir em usar r como uma receita recursiva para construir . Contudo, r
construda, a partir dos smbolos de , por aplicaes repetidas das operaes
de unio, concatenao e estrela. Assim, para poder usar r como uma receita
para construir precisamos antes solucionar o seguinte problema:
dados autmatos nitos e

em um alfabeto cons-
tuir autmatos nitos que aceitemL()L(

), L()
L(

) e L()

.
exatamente isto que faremos neste captulo.
1. Unio
Suponhamos que e

so autmatos nitos no determinsticos em


um mesmo alfabeto . Mais precisamente, digamos que
(1.1) = (, q
1
, Q, F, ) e

= (, q

1
, Q

, F

).
Assumiremos, tambm, que QQ

= . Observe que esta hiptese no repre-


senta nenhuma restrio expressiva, j que para alcan-la basta renomear os
estados de

, no caso de serem denotados pelo mesmo nome que os estados


de .
Um outro detalhe que vale a pena mencionar que, tanto nesta construo,
como na da concatenao, estamos supondo que ambos os autmatos esto
denidos para um mesmo alfabeto. Novamente, esta restrio apenas apa-
rente j que os autmatos no precisam ser determinsticos. De fato, podemos
aumentar o alfabeto de entrada de um autmato no determinstico o quanto
quisermos, sem alterar o seu comportamento. Para isso basta decretar que as
39
40 6. OPERAES COM AUTMATOS FINITOS
transies pelos novos estados so todas vazias. No caso da unio, isto sig-
nica que, se e

tiverem alfabetos de entrada e

diferentes, ento
podemos considerar ambos como autmatos no alfabeto

. Para mais
detalhes veja o exerccio 1.
Vejamos como deve ser o comportamento de um autmato nito
u
para
que aceite L() L(

). O autmato
u
aceitar uma palavra w

somente quando w for aceita por ou por

. Mas, para descobrir isto,

u
deve ser capaz de simular estes dois autmatos. Como estamos partindo
do princpio de que
u
no determinstico, podemos deix-lo escolher qual
dos dois autmatos vai querer simular em uma dada computao. Portanto, ao
receber uma palavra w, o autmato
u
:
escolhe se vai simular ou

;
executa a simulao escolhida e aceita w apenas se for aceita pelo
autmato cuja simulao est sendo executada.
Uma maneira de realizar isto em um autmato nito criar um novo estado
inicial q
0
cuja nica funo realizar a escolha de qual dos dois autmatos ser
simulado. Mais uma vez, como
u
no determinstico, podemos deix-lo
decidir, por si prprio, qual o autmato que ser simulado.
Ainda assim, resta um problema. De fato, todos os smbolos de w sero
necessrios para que as simulaes de e

funcionem corretamente. Con-


tudo, nossos autmatos precisam consumir smbolos para efetuar suas transi-
es. Digamos, por exemplo, que ao receber w no estado q
0
o autmato
u
escolhe simular com entrada w. Entretanto, para poder simular em w,

u
precisa deixar q
0
e chegar ao estado inicial q
1
de ainda tendo w por
entrada, o que no possvel. Resolvemos este problema fazendo com que
q
0
comporte-se, simultaneamente, como q
1
ou como q

1
, dependendo de qual
autmato
u
escolheu simular. Mais precisamente, se
u
escolheu simular
, ento q
0
realiza a transio a partir do primeiro smbolo de w como se fosse
uma transio de a partir de q
1
por este mesmo smbolo.
Para poder formalizar isto, digamos que w = u, onde e u

.
Neste caso, se
u
escolheu simular , devemos ter que
(q
0
, w) (p, u) se, e somente se, p (q
1
, ).
Podemos dissecar o comportamento de
u
a partir de q
0
como duas escolhas
sucessivas:
(1) primeiro
u
decide se vai simular ou

;
(2) a seguir,
u
escolhe qual a transio que vai ser executada por , a
partir de q
1
ou q

1
dependendo da escolha feita em (1).
Denotando por
u
a funo de transio de
u
, podemos resumir isto escre-
vendo

u
(q
0
, ) = (q
1
, )

(q

1
, ).
O comportamento geral de
u
pode ser ilustrado em uma gura, como
segue. As transies que foram acrescentadas como parte da construo de

u
aparecem tracejadas.
1. UNIO 41

'&%$ !"#

/.-, ()*+
q
1


'&%$ !"#

'&%$ !"#

/.-, ()*+
q
0

'&%$ !"#

/.-, ()*+
q
1

'&%$ !"#

Como a gura sugere, os estados de


u
so os mesmos de e

,
exceto por q
0
. Quanto aos estados nais, precisamos ser mais cuidadosos. Em
primeiro lugar, uma vez tendo passado por q
0
, o autmato
u
meramente
simula ou

. Portanto, a descrio dos estados nais de


u
s apresenta
algum problema se q
1
F ou q

1
F

. Por exemplo, se q
1
for nal, ento
e, portanto,
u
, dever aceitar . Mas isto s pode ocorrer se q
0
for nal.
Portanto, q
0
dever ser declarado como nal sempre que q
1
ou q

1
forem nais.
Vamos formalizar a construo, listando os vrios elementos de
u
um a
um:
Alfabeto: ;
Estados: q
0
Q Q

;
Estado inicial: q
0
;
Estados nais:
q
0
F F

se q
1
F ou q

1
F

F F

se q
1
/ F e q

1
/ F

Funo de transio:

u
(q, ) =

(q
1
, )

(q

1
, ) se q = q
0
(q, ) se q Q

(q, ) se q Q

42 6. OPERAES COM AUTMATOS FINITOS


Vejamos como a construo se comporta em um exemplo. Considere o
autmato nito determinstico
par
, com grafo
I
GFED @ABC ?>=< 89:;
q
1
b
a

GFED @ABC
q
2
b

a
.
e o autmato nito no determinstico
ab
cujo grafo
I
GFED @ABC
q

1
a
GFED @ABC
q

2
b
GFED @ABC ?>=< 89:;
q

3
J sabemos que aceita a linguagem formada pelas palavras no alfa-
beto a, b que tm uma quantidade par de as, e que L(

) = ab.
Aplicando a construo discutida acima para construir um autmato

u
que aceita L() L(

), obtemos
GFED @ABC ?>=< 89:;
q
1
b
a

GFED @ABC
q
2
b

a
.
I
GFED @ABC ?>=< 89:;
q
0
a

GFED @ABC
q

1
a
GFED @ABC
q

2
b
GFED @ABC ?>=< 89:;
q

3
H dois detalhes importantes a serem observados neste exemplo.
O primeiro que, como h uma seta de q
1
nele prprio, indexada por
a, voc poderia esperar encontrar em
u
uma seta de q
0
nele prprio
com o mesmo ndice. No entanto, no isto que acontece. De fato,
denotando por a funo de transio de temos, pela denio de

u
, que
(q
1
, b) = q
1
implica q
1

u
(q
0
, b).
Em outras palavras, a transio por b em , que leva q
1
nele prprio,
d lugar a uma transio por b de q
0
em q
1
.
O segundo detalhe diz respeito eliminao de estados redundantes.
primeira vista, como q
0
passa a desempenhar o papel de estado inicial,
em substituio a q
1
e q

1
, ento estes ltimos estados deveriam ter-se
tornado redundantes. Entretanto, embora q

1
seja, de fato, redundante,
o mesmo no ocorre com q
1
. Por exemplo, o autmato retorna a q
1
1. UNIO 43
durante a computao
(q
1
, a
2
) (q
2
, a) (q
1
, ).
Simulando a mesma computao em
u
, teremos
(q
0
, a
2
) (q
2
, a) (q
1
, ).
Note que embora
u
parta de q
0
, na terceira etapa da computao ele
alcana q
1
, exatamente como . Assim, q
0
substitui q
1
apenas quando
este ltimo est desempenhando o papel de estado inicial.
Para esclarecer, de forma denitiva, todos os detalhes da construo
de
u
, provaremos formalmente que
L(
u
) = L() L(

).
Faremos isto no caso geral, admitindo que e

so os autmatos
no determinsticos denidos em (1.1). Nossa demonstrao consiste
em provar que w

aceita por
u
se, e somente se, for aceita por
ou

. Se w = no h muito o que dizer, por isso deixamos este


caso aos seus cuidados. De agora em diante estaremos assumindo que
w = . Com isso, podemos escrever w na forma
w = u, onde e u

.
Antes de prosseguir, convm enunciar claramente as propriedades
de
u
que sero utilizadas na demonstrao. Em primeiro lugar, os
estados e transies de e de

correspondem um a um, aos estados


e transies de
u
, exceto por q
0
e suas transies. Assim,
toda computao empode ser reproduzida literalmente (quer
dizer, com os mesmos estados e transies) como uma compu-
tao de
u
;
reciprocamente, qualquer computao de
u
a partir de um
estado de pode ser reproduzida literalmente em .
Naturalmente, as mesmas armaes valem se substitumos por

.
Em segundo lugar,
(1.2) se p (q
1
, ) ento p
u
(q
0
, ).
Digamos, primeiramente, que w L(). Temos, ento, uma com-
putao
(q
1
, u) (p, u)

(f, ),
onde p Q e f F. Mas, por (1.2),
se (q
1
, u) (p, u) em , ento (q
1
, u) (p, u) em
u
.
Por outro lado, da primeira propriedade acima, a computao (p, u)

(f, ) em pode ser reproduzida, passo a passo, e com os mesmos


44 6. OPERAES COM AUTMATOS FINITOS
estados e transies, como uma computao de
u
. Obtemos, assim, a
computao
(q
0
, u) (p, u)

(f, ),
em
u
. Como f nal em, ele tambm ser nal em
u
, de modo
que toda palavra aceita por ser aceita por
u
; isto L()
L(
u
). Um argumento anlogo mostra que L(

) L(
u
).
Esta primeira parte do argumento pressupe que todos os estados
no redundantes de e

sejam tambm estados de


u
. Mas h
uma exceo a esta armao. Digamos, por exemplo, que q
1
seja ina-
cessvel a partir de qualquer estado de , inclusive dele prprio. Neste
caso, q
1
vai se tornar redundante em
u
. Isto acontece porque uma
computao s pode passar por q
1
uma vez e, mesmo assim, somente se
comear deste estado, ao passo que as computaes de
u
comeam
de q
0
. Este fenmeno ocorre, por exemplo, com o estado q

1
no exemplo
descrito acima.
Suponha, agora, que
w = u L(
u
).
Teremos, ento, uma computao em
u
da forma
(1.3) (q
0
, u) (p, u)

(f, ),
onde f um estado nal de
u
. Pela denio das transies em

u
devemos ter que p Q ou p Q

. Suporemos, sem perda de


generalidade, que p Q. Contudo, qualquer transio em
u
a partir
de um estado de tambm uma transio de . Como p Q, isto
signica que
(p, u)

(f, )
ter que corresponder, passo a passo, a uma computao em . Por-
tanto, usando (1.2), obtemos uma computao
(q
1
, u) (p, u)

(f, ),
em . Como f um estado nal de
u
que pertence a Q, conclumos
que f F. Logo, w aceita por .
Observe que a segunda parte da demonstrao est ancorada no fato
de nenhuma transio de
u
poder chegar emq
0
. Se isto pudesse acon-
tecer,
u
poderia executar parte da computao em, retornar a q
0
, e
continuar com uma computao de

. Entretanto, o argumento acima


s funciona porque, uma vez que
u
tenha alcanado um estado de ,
ele ca preso neste ltimo autmato, e assim obrigado a se comportar
como .
2. CONCATENAO 45
2. Concatenao
A segunda operao de linguagens que precisamos transcrever para
os autmatos a concatenao. Suponhamos, mais uma vez, que temos
dois autmatos e

no mesmo alfabeto , cujos elementos so


= (, q
1
, Q, F, ) e

= (, q

1
, Q

, F

).
Continuaremos assumindo que Q Q

= .
Nosso objetivo construir um autmato
c
que aceite a concate-
nao L() L(

). Assim, dada uma palavra w

, o autmato

c
precisa vericar se existe um prexo de w que aceito por e
que seguido de um suxo aceito por

. Naturalmente isto sugere


conectar os autmatos e

em srie; quer dizer, um depois do


outro. Alm disso, para que o prexo esteja em L() o ltimo estado
de alcanado em uma computao por w deve ser nal. Finalmente,
mais fcil construir um modelo no determinstico de
c
, j que no
temos como saber exatamente onde acaba o prexo de w que pertence a
L().
Nossa experincia com a unio deixa claro que no adianta conec-
tar os autmatos atravs de transies de um estado nal de para
o estado inicial de

. Isto s seria possvel se nossos autmatos pu-


dessem efetuar transies sem consumir nenhum smbolo da entrada.
Contornamos o problema, como zemos no caso da unio, construindo
as transies diretamente dos estados nais de para os sucessores
do estado inicial de

. Podemos ilustrar a construo em uma gura,


como segue.

'&%$ !"#


.
.


'&%$ !"#

7654 0123
q
1




?>=< 89:;
q


'&%$ !"#

'&%$ !"#



.
.

.
.
.
.
.

'&%$ !"#

As setas correspondentes s transies entre os autmatos e

foram tracejadas para dar maior clareza gura. Observe tambm que
os estados que seriam nais em aparecem com a bolinha central
vazada ( em vez de ). Fizemos isto porque nem sempre um estado
nal de continuar nal em
c
. Na verdade, se todo estado em F
for nal em
c
ento toda computao em que acabar em F ser
46 6. OPERAES COM AUTMATOS FINITOS
aceita por
c
. Quer dizer, toda palavra em L() tambm pertence
a L(
c
) = L() L(

). Entretanto, isto s pode acontecer se


L(

); ou, o que equivalente, se q

1
estado nal de

. Caso
contrrio, apenas os estados nais de

sero nais em .
Formalizaremos a construo, listando os vrios elementos de
c
um a um:
Alfabeto: ;
Estados: Q Q

;
Estado inicial: q
1
;
Estados nais:
F F

se q

1
F

se q

1
/ F

Funo de transio:

c
(q, ) =

(q, ) se q Q` F
(q, )

(q

1
, ) se q F

(q, ) se q Q

A demonstrao de que esta construo funciona corretamente


bastante simples e segue a linha da demonstrao para a unio dada
na seo anterior, por isso vamos omiti-la. Vejamos como a construo
se comporta quando aplicada aos autmatos utilizados no exemplo da
seo 1. Comearemos concatenando
par
com
ab
:
GFED @ABC
q
1
b
a

GFED @ABC
q
2
b

a
.
GFED @ABC
q

1
a
GFED @ABC
q

2
b
GFED @ABC ?>=< 89:;
q

3
Observe que o estado q
1
deixou de ser nal nesta concatenao,
porque q

1
no estado nal de
ab
. Por outro lado, se concatenarmos

ab
com
par
, ento q

3
continuar sendo nal, j que q
1
nal em

par
. O grafo do autmato resultante desta concatenao o seguinte:
GFED @ABC
q

1
a
GFED @ABC
q

2
b
GFED @ABC ?>=< 89:;
q

3
b

GFED @ABC ?>=< 89:;


q
1
b
a

GFED @ABC
q
2
b

a
.
3. ESTRELA 47
Neste caso temos duas transies a partir do estado nal de
ab
,
porque q
1
tem como sucessores q
2
e o prprio q
1
.
3. Estrela
Tendo mostrado como construir um autmato para a concatenao,
no parece to difcil lidar com a estrela. Anal, se L uma linguagem,
ento L

obtida concatenando L com ela prpria mais e mais vezes;


isto , calculando a unio das L
j
, para todo j 0. Portanto, uma ma-
neira de realizar um autmato , que aceite L, consistiria em conectar
a sada de com sua entrada. Com isso a concatenao passaria inni-
tas vezes pelo prprio , e teramos um novo autmato

que aceita
L

. Vamos testar esta idia em um exemplo e ver o que acontece.


Considere o autmato nito A no alfabeto a, b, cujo grafo dado
por
GFED @ABC
q
1
a
GFED @ABC
q
2
b

GFED @ABC ?>=< 89:;


q
3
a

A linguagem aceita por A denotada pela expresso regular (aba)

ab,
como fcil de ver.
Para concatenar A comele prprio precisamos criar transies entre
seus estados nais e os sucessores do estado inicial. Neste exemplo, h
apenas o estado nal q
3
, e q
1
tem apenas um sucessor; a saber, o estado
q
2
que acessvel a partir de q
1
por a. Por isso precisamos criar uma
nova transio de q
3
para q
2
por a, obtendo o seguinte autmato
GFED @ABC
q
1
a
GFED @ABC
q
2
b

GFED @ABC ?>=< 89:;


q
3
a

A transio acrescentada foi desenhada tracejada para que possa ser


mais facilmente identicada.
Infelizmente, no pode ser verdade que este autmato aceita L(A)

.
Anal, pertence a L(A)

e no aceito pelo autmato que acabamos


de construir. A essa altura, sua reao pode ser:
No seja por isso! Para resolver este problema basta
marcar q
1
como sendo estado nal do novo autmato.
48 6. OPERAES COM AUTMATOS FINITOS
Vamos fazer isto e ver o que acontece. O grafo do autmato passaria a
ser o seguinte:
GFED @ABC ?>=< 89:;
q
1
a
GFED @ABC
q
2
b

GFED @ABC ?>=< 89:;


q
3
a

Contudo, este autmato aceita a palavra aba que no pertence a


L(A)

= ((aba)

ab)

.
O problema no est em nossa idia original de concatenar um aut-
mato com ele prprio, mas sim na emenda que adotamos para resolver
o problema de fazer o novo autmato aceitar . Ao declarar q
1
como
sendo estado nal, no levamos em conta que o autmato admite transi-
es que retornam ao estado q
1
. Isto fez com que outras palavras, alm
de , passassem a ser aceitas pelo novo autmato. Mas no isso que
queremos. A construo original funcionava perfeitamente, exceto por-
que no era aceita. Uma maneira simples de contornar o problema
inspirar-se na unio, e criar um novo estado q
0
para fazer o papel de es-
tado inicial. Este estado vai comportar-se como q
1
, e tambm ser nal.
Entretanto, como no caso da unio, as transies por q
0
so exatamente
as mesmas que as transies por q
1
. Em particular, nenhuma transio
do novo autmato aponta para q
0
. Isto garante que a introduo de q
0
leva aceitao de apenas uma nova palavra, que . Esboamos abaixo
o grafo do autmato resultante desta construo, no exemplo que vimos
considerando.
GFED @ABC ?>=< 89:;
q
0
a

GFED @ABC
q
1
a
GFED @ABC
q
2
b

GFED @ABC ?>=< 89:;


q
3
a

Em geral, quando dado um autmato


= (, q
1
, Q, F, )
podemos construir um autmato

que aceita L(

) segundo o mo-
delo estabelecido no exemplo anterior. Como no caso da unio e da con-
catenao, podemos ilustrar o autmato

em uma gura nas quais as


3. ESTRELA 49
novas transies aparecem tracejadas.

'&%$ !"#

BC
ED

GF

@A

7654 0123 '&%$ !"#


q
0

.
.
.
.
.







7654 0123
q
1

'&%$ !"#

ED
BC

@A

GF

Formalizaremos a construo, listando os vrios elementos de

,
como segue:
Alfabeto: ;
Estados: q
0
Q;
Estado inicial: q
0
;
Estados nais: F q
0

Funo de transio:

(q, ) =

(q
1
, ) se q = q
0
(q, ) se q Q` F
(q, ) (q
1
, ) se q F
Encerramos a seo com a demonstrao de que esta construo
funciona corretamente. Em primeiro lugar, como aceita por constru-
o, podemos limitar nossa discusso a uma palavra w = que pertena
a

.
Como em nossa discusso do autmato que aceita a unio de lin-
guagens, isolaremos duas propriedades da denio de

que sero
utilizadas na demonstrao. Em primeiro lugar, se (q
1
, ) (p, ) em
, ento existiro transies em

da forma
(q
0
, ) (p, ),
e, tambm, da forma
(f, ) (p, ) para cada estado nal f de .
Que q
0
comporta-se como se fosse q
1
bvio da maneira como suas
transies foram denidas. J a segunda parte da armao segue do
fato de que tambmzemos cada estado nal de

comportar-se como
se fosse q
1
ao concatenar com ele prprio. Outro ponto importante
que toda computao empode ser simulada por

com os mesmos
50 6. OPERAES COM AUTMATOS FINITOS
estados e transies, j que foi inteiramente preservado dentro de

.
Seja L = L(). Como sempre, temos que provar que toda pa-
lavra que pertence a L

aceita por

, e vice-versa. Comearemos
mostrando L

L(

). Digamos que w L

. Neste caso, podemos


escrever w na forma
w = w
1
w
2
w
k
onde w
1
, w
2
, . . . , w
k
L.
Digamos que w
j
=
j
u
j
, com
j
e u
j

. Como cada w
j
pertence a L, tem que existir uma computao
(q
1
, w
j
) (p
j
, u
j
)

(f
j
, ),
onde p
j
Q e f
j
F. Mas o estado inicial q
0
de

simula o
comportamento de q
1
, e

capaz de simular qualquer computao


em. Portanto, podemos construir uma computao em

da forma:
(q
0
,
1
u
1
w
2
w
k
) (p
1
, u
1
w
2
w
k
)

(f
1
, w
2
w
k
).
Por outro lado, tambm podemos construir computaes da forma
(f
j
, w
j+1
w
k
) = (f
j
,
j+1
u
j+1
w
k
) (p
j+1
, u
j+1
w
k
)

(f
j+1
, w
j+2
w
k
),
para todo 1 j < k. Emendando o incio de cada uma dessas compu-
taes ao nal da outra, obtemos
(q
0
, w
1
w
2
w
k
)

(f
1
, w
2
w
k
)

(f
2
, w
3
w
k
)

(f
k1
, w
k
)

(f
k
, ),
provando, assim, que

aceita w.
Passamos, agora, a mostrar que L(

) L

. Para facilitar a dis-


cusso, distinguiremos dois tipos de transio em

:
Primeiro tipo: as transies a partir de q
0
, alm de todas aquelas
que j eram transies de ;
Segundo tipo: transies que

faz a partir dos estados nais


de , como se fossem q
1
.
Suponha, agora, que w aceita por

. Neste caso existe uma compu-


tao
(q
0
, w) (f, ),
em

. Percorrendo, agora, esta computao, vamos dividi-la em par-


tes de modo que a primeira transio de cada segmento, a partir do se-
gundo, seja uma transio do segundo tipo. Se w
j
for a subpalavra de
4. EXERCCIOS 51
w consumida ao longo do j-simo segmento, podemos escrever os seg-
mentos na forma
(q
0
, w)

(f
1
, w
2
w
k
)
(f
1
, w
2
w
k
)

(f
2
, w
3
w
k
)
.
.
.
(f
k1
, w
k
)

(f
k
, ),
onde f
1
, . . . , f
k
F. Alm disso, se w
j
=
j
u
j
, com
j
e
u
j

, ento a transio do segundo tipo pode ser isolada em cada


segmento
(f
j
, w
j
w
j+1
w
k
) = (f
j
,
j
u
j
w
j+1
w
k
) (p
j
, u
j
w
j+1
w
k
)

(f
j+1
, w
j+1
w
k
),
para todo 1 j < k, onde p
j
Q. Temos, assim, computaes da
forma
(f
j
, w
j
) = (f
j
,
j
u
j
) (p
j
, u
j
)

(f
j+1
, ),
em

, que por sua vez do lugar a computaes da forma


(q
1
, w
j
) = (f
j
,
j
u
j
) (p
j
, u
j
)

(f
j+1
, ),
em . Portanto, w
2
, . . . , w
k
L. Um argumento semelhante mostra
que w
1
L, e nos permite concluir que
w = w
1
w
2
w
k
L

,
como nos faltava mostrar.
4. Exerccios
1. Sejam

dois alfabetos. Suponha que um autmato -


nito no determinstico no alfabeto . Construa formalmente um
autmato nito no determinstico

no alfabeto

, de modo que
L() = L(

). Prove que sua construo funciona corretamente.


SUGESTO: Dena todas as transies de

por smbolos de

`
como sendo vazias.
2. Seja = 0, 1. Suponha que L
1

a linguagem que consiste


das palavras onde h pelo menos duas ocorrncias de 0, e que L
2

a linguagem que consiste das palavras onde h pelo menos uma


ocorrncia de 1.
(a) Construa autmatos nitos no determinsticos que aceitem L
1
e
L
2
.
(b) Use os algortimos desta seo para criar autmatos nitos no
determinsticos que aceitem L
1
L
2
, L
1
L
2
, L

1
e L

2
.
52 6. OPERAES COM AUTMATOS FINITOS
3. Sejam M e M

autmatos nitos no determinsticos em um alfabeto


. Neste exerccio discutimos uma maneira de denir um autmato
nito no determinstico N, que aceita a concatenao L(M)L(M

),
e que diferente do que foi vista na seo 2. Seja a funo de
transio de M. Para construir o grafo de N a partir dos grafos de M
e M

procedemos da seguinte maneira. Toda vez que um estado q de


M satisfaz
para algum , o conjunto (q, ) contm um
estado nal,
acrescentamos uma transio de q para o estado inicial de M

, inde-
xada por .
(a) Descreva detalhadamente todos os elementos de N. Quem so
os estados nais de N?
(b) Mostre que se / L(M) ento N aceita L(M) L(M

).
(c) Se L(M) ento pode ser necessrio acrescentar mais uma
transio para que o autmato aceite L(M) L(M

). Que transi-
o esta?
4. Seja M um autmato nito determinstico no alfabeto , com estado
inicial q
1
, conjunto de estados Q e funo de transio . Dizemos
que M tem reincio se existem q Q e tais que
(q, ) = q
1
.
Em outras palavras, no grafo de M h uma seta que aponta para q
1
.
Mostre como possvel construir, a partir de um autmato nito de-
terminstico M qualquer, um autmato nito determinstico M

sem
reincio tal que L(M) = L(M

).
5. Sejam M e M

autmatos nitos determinsticos no alfabeto cujos


elementos so (, Q, q
1
, F, ) e (, Q

, q

1
, F

), respectivamente.
Dena um novo autmato nito determinstico N construdo a partir
de M e M

como segue:
Alfabeto: ;
Estados: pares (q, q

) onde q Q e q

;
Estado inicial: (q
1
, q

1
);
Estados nais: pares (q, q

) onde q F ou q

;
Transio: a funo de transio denida em um estado (q, q

)
de N e smbolo por

((q, q

), ) = (p, p

),
onde p = (q, ) e p

(q

, ).
Calcule L(N) em funo de L(M) e L(M

) e prove que a sua res-


posta est correta.
CAPTULO 7
Autmatos de expresses regulares
No captulo ?? vimos como obter a expresso regular da linguagem
aceita por um autmato nito. Neste captulo, resolvemos o problema
inverso; isto , dada uma expresso regular r em um alfabeto , cons-
trumos um autmato nito que aceita L(r). Na verdade, o autmato
que resultar de nossa construo no ser determinstico. Mas isto no
um problema, j que sabemos como convert-lo em um autmato de-
terminstico usando a construo de subconjuntos.
1. Consideraes gerais
Seja r uma expresso regular r no alfabeto . Nossa estratgia
consistir em utilizar a expresso regular r como uma receita para a
construo de um autmato nito no determinstico (r) que aceita
L(r). Entretanto, como vimos no captulo ??, r denida, de maneira
recursiva, a partir dos smbolos de , e , por aplicao sucessiva
das operaes de unio, concatenao e estrela. Por isso, efetuaremos a
construo de (r) passo passo, a partir dos autmatos que aceitam
os smbolos de , e .
Contudo, para que isto seja possvel, precisamos antes de resolver
alguns problemas. O primeiro, e mais simples, consiste em construir
autmatos nitos que aceitem um smbolos de , ou ou . Estes aut-
matos funcionaro como os tomos da construo. Os problemas mais
interessantes dizem respeito construo de novos autmatos a partir de
autmatos j existentes. Suponhamos, ento, que
1
e
2
so aut-
matos nitos no determinsticos. Precisamos saber construir
(1) um autmato
u
que aceita L(
1
) L(
2
);
(2) um autmato
c
que aceita L(
1
) L(
2
); e
(3) um autmato
1
que aceita L(
1
)

.
53
54 7. AUTMATOS DE EXPRESSES REGULARES
Se formos capazes de inventar maneiras de construir todos estes aut-
matos, ento seremos capazes de reproduzir a montagem de r passo
passo no domnio dos autmatos nitos, o que nos levar a um autmato
nito que aceita L(r), como desejamos.
Comearemos descrevendo os tomos desta construo; isto , os
autmatos que aceitam smbolos de , e . Seja . Um autmato
simples que aceita dado pelo grafo
I
GFED @ABC
q
1

GFED @ABC ?>=< 89:;


q
2
O autmato que aceita ainda mais simples
I
GFED @ABC ?>=< 89:;
q
1
Para obter o que aceita basta no declarar nenhum estado como sendo
nal. A maneira mais simples de fazer isto alterar o autmato acima,
como segue.
I
GFED @ABC
q
1
Construdos os tomos, falta-nos determinar como podem ser conecta-
dos para obter estruturas maiores e mais complicadas. Passamos, assim,
soluo dos problemas enunciados acima.
2. Unio
Suponhamos que e

so autmatos nitos no determinsticos


em um mesmo alfabeto . Mais precisamente, digamos que
= (, q
1
, Q, F, ) e

= (, q

1
, Q

, F

).
Suporemos, tambm, que Q Q

= . Isto no representa nenhuma


restrio expressiva. Signica, no mximo, que pode ser necessrio re-
nomear os estados de

caso sejam denotados pelo mesmo nome que


os estados de .
Vejamos como deve ser o comportamento de um autmato nito

u
para que aceite L() L(

). Dada uma palavra w a

u
ele deve aceit-la apenas se w for aceita por ou por

. Mas,
para descobrir isto,
u
deve ser capaz de simular estes dois autmatos.
Como estamos partindo do princpio que
u
no determinstico, po-
demos deix-lo escolher qual dos dois autmatos ele vai querer simular
2. UNIO 55
em uma dada computao. Portanto, dada uma palavra w a
u
, ele
executa a seguinte estratgia:
escolhe se vai simular ou

;
executa a simula ao escolhida e aceita w apenas se for aceita
pelo autmato cuja simulao est sendo executada.
Uma maneira de realizar isto em um autmato nito criar um novo
estado inicial q
0
cuja nica funo realizar a escolha de qual dos dois
autmatos ser simulado. Mais uma vez, como
u
no determins-
tico, podemos deix-lo decidir, por si prprio, qual o autmato que ser
simulado.
Ainda assim, resta um problema. De fato, todos os smbolos de w
sero necessrios para que as simulaes de e

funcionem corre-
tamente. Contudo, nossos autmato precisam consumir smbolos para
se mover. Digamos, por exemplo, que ao receber w no estado q
0
o aut-
mato
u
escolhe simular com entrada w. Entretanto, para poder
simular em w,
u
precisa deixar q
0
e chegar ao estado inicial q
1
de
ainda tendo w por entrada, o que no possvel. Resolvemos este
problema fazendo com que q
0
comporte-se, simultaneamente, como q
1
ou como q

1
, dependendo de qual autmato
u
escolheu simular. Mais
precisamente, se
u
escolheu simular , ento q
0
realiza a transio
a partir do primeiro smbolo de w como se fosse uma transio de a
partir de q
1
por este mesmo smbolo.
Para poder formular isto formalmente, digamos que w = u, onde
e u

. Neste caso, se
u
escolheu simular , devemos ter
que
(q
0
, w) (p, u) se, e somente se, p (q
1
, ).
Podemos dissecar o comportamento de
u
a partir de q
0
como duas
escolhas sucessivas:
(1) primeiro
u
decide se vai simular ou

;
(2) a seguir,
u
escolhe qual a transio que vai ser executada por
, a partir de q
1
ou q

1
dependendo da escolha feita em (1).
Denotando por
u
a funo de transio de
u
, podemos resumir isto
escrevendo

u
(q
0
, ) = (q
1
, )

(q

1
, ).
O comportamento geral de
u
pode ser ilustrado em uma gura,
como segue.
56 7. AUTMATOS DE EXPRESSES REGULARES

'&%$ !"#

7654 0123
q
1


'&%$ !"#

'&%$ !"#

7654 0123
q
0

'&%$ !"#

7654 0123
q
1

'&%$ !"#

Como a gura sugere, a parte q


0
, os estados de
u
so os mesmos
de e

. Quanto aos estados nais, precisamos ser mais cuidado-


sos. Como, uma vez tendo passado por q
0
, o autmato
u
meramente
simula ou

, s pode haver algum problema se um dos estados q


1
ou q

1
for nal. Por exemplo, se q
1
for nal, ento e, portanto,
u
,
dever aceitar . Mas isto s pode ocorrer se q
0
for nal. Portanto, q
0
dever ser declarado como nal sempre que q
1
ou q

1
forem nais.
Vamos formalizar a construo de
u
antes de fazer um exemplo.
Listando os vrios elementos de
u
um a um temos
Alfabeto: ;
Estados: q
0
Q Q

;
Estado inicial: q
0
;
Estados nais:
q
0
F F

se q
1
F ou q

1
F

F F

se q
1
/ F e q

1
/ F

2. UNIO 57
Funo de transio:

u
(q, ) =

(q
1
, )

(q

1
, ) se q = q
0
(q, ) se q Q

(q, ) se q Q

Vejamos como a construo se comporta em um exemplo. Consi-


dere os autmatos nitos e

cujos grafos so, respectivamente


I
GFED @ABC ?>=< 89:;
q
1
b
a

GFED @ABC
q
2
b

a
.
e
I
GFED @ABC
p
1
a
GFED @ABC
p
2
b
GFED @ABC ?>=< 89:;
p
3
CAPTULO 8
Gramticas lineares direita
Neste captulo comeamos o estudo das gramticas formais, que
sero introduzidas a partir da noo de autmato nito.
1. Exerccios
1. Determine gramticas lineares direita que gerem as linguagens de-
notadas pelas seguintes expresses regulares:
(a) (0

1) 0;
(b) (0

1) (1

0);
(c) ((0

1) (1

0))

.
2. Ache a expresso regular que denota a linguagem regular gerada pela
gramtica com variveis S, A, B, terminais a, b, smbolo inicial S e
regras:
S bA [ aB [
A abaS
B babS.
3. Ache uma gramtica linear direita que gere a seguinte linguagem
w 0, 1

: w no contm a seqncia aa.


4. Ache gramticas lineares direita que gerem cada uma das lingua-
gens regulares do exerccio 2 da 2
a
lista de exerccios.
5. Ache autmatos nitos que aceitem as linguagens geradas pelas gra-
mticas lineares direita no alfabeto 0, 1 e smbolo inicial S, com
as seguintes regras:
(a) S 011X, S 11S, X 101Y , Y 111.
(b) S 0X, X 1101Y , X 11X, Y 11Y , X 1.
59
60 8. GRAMTICAS LINEARES DIREITA
6. Seja L uma linguagem regular no alfabeto . Mostre que L `
pode ser gerada por uma gramtica linear direita cujas regras so
dos tipos
X Y ou
X ,
onde X, Y so variveis e um smbolo de .
CAPTULO 9
Linguagens livres de contexto
Neste captulo comeamos a estudar uma classe de gramticas fun-
damental na descrio das linguagens de programao: as gramticas
livres de contexto.
1
1. Gramticas e linguagens livres de contexto
J vimos no captulo anterior que uma gramtica descrita pelos
seguintes ingredientes: terminais, variveis, smbolo inicial e regras.
claro que, em ltima anlise, quando pensamos em uma gramtica
o que nos vem a cabea so suas regras; os outros ingredientes so,
de certo modo, circunstanciais. Assim, o que diferencia uma classe de
gramticas da outra o tipo de regras que nos permitido escrever. No
caso de gramticas lineares direita, as regras so extremamente rgidas:
uma varivel s pode ser levada na concatenao de uma palavra nos
terminais com alguma varivel, alm disso a varivel tem que estar
direita dos terminais.
J as linguagens livres de contexto, que estaremos estudando neste
captulo, admitem regras muito mais exveis. De fato a nica restrio
que esquerda da seta s pode aparecer uma varivel. Talvez voc
esteja se perguntando: mas o que mais poderia aparecer esquerda de
1
Agradeo ao David Boechat pelas correes a uma verso anterior deste captulo
61
62 9. LINGUAGENS LIVRES DE CONTEXTO
uma seta? Voltaremos a esta questo na seo 2, depois de considerar
vrios exemplos de linguagens que so livres de contexto. Mas antes dos
exemplos precisamos dar uma denio formal do que uma gramtica
livre de contexto.
Seja ( uma gramtica com conjunto de terminais T , conjunto de va-
riveis 1 e smbolo inicial S 1. Dizemos que ( livre de contexto se
todas as suas regras so do tipo X w, onde X 1 e w (T V )

.
Observe que as regras de uma gramtica linear direita so deste
tipo. Portanto, toda gramtica linear direita livre de contexto. Por
outro lado, evidente que nem toda gramtica livre de contexto linear
direita. Um exemplo simples dado pela gramtica (
1
com terminais
T = 0, 1, variveis V = S, smbolo inicial S e conjunto de regras
S 0S1, S .
Como do lado esquerdo de cada seta s h uma varivel, (
1
livre de
contexto. Contudo, (
1
no linear direita porque S 0S1 tem um
terminal direita de uma varivel.
Outro exemplo simples a gramtica (
2
com terminais T = 0, 1,
variveis V = S, X, smbolo inicial S e conjunto de regras
S X1X, X 0X, X .
Mais uma vez, apesar de ser claramente livre de contexto, esta gramtica
no linear direita, por causa da regra S X1X.
Os dois exemplos construdos acima esto relacionados a lingua-
gens que so velhas conhecidas nossas. Entretanto, para constatar isto
precisamos entender como possvel construir uma linguagem a partir
de uma gramtica livre de contexto. Isto se faz de maneira anloga ao
que j ocorria com linguagens lineares direita.
Seja ( uma gramtica livre de contexto com terminais T , variveis
1, smbolo inicial S e conjunto {de regras, e sejam w, w

(T 1)

.
Dizemos que w

pode ser derivada em um passo a partir de w em (, e


escrevemos w
G
w

, se w

pode ser obtida a partir de w substituindo-


se uma varivel que aparece em w pelo lado direito de alguma regra da
gramtica (. Em outras palavras, para que w
G
w

preciso que:
exista uma decomposio da forma w = uXv, onde u, v
(T 1) e X 1, e
exista uma regra X em {tal que w

= uv.
Como j estamos acostumados a fazer, dispensaremos o ( subscrito na
notao acima quando no houver dvidas quanto gramtica que est
sendo considerada (isto , quase sempre!).
1. GRAMTICAS E LINGUAGENS LIVRES DE CONTEXTO 63
Como j ocorria com as gramticas lineares direita, estaremos ge-
rando palavras a partir de uma gramtica livre de contexto pelo encade-
amento de vrias derivaes de um passo. Assim, dizer que w

pode ser
derivada a partir de w em ( em n passos signica que existem palavras
w
1
, . . . , w
n1
(T 1)

tais que
w = w
0
w
1
w
n1
w
n
= w

Chamamos a isto uma derivao de w

a partir de w em ( e escrevemos
w
n
w

. Caso no seja conveniente indicar o nmero de passos da


derivao substitumos o n por uma como j estamos acostumados
a fazer. conveniente tambm adotar a conveno de que w pode ser
derivada dela prpria em zero passos, de modo que faz sentido escrever
w

w.
O conjunto de todas as palavras de T

que podem ser derivadas a


partir do smbolo inicial S na gramtica ( a linguagem gerada por (.
Denotando L(() a linguagem gerada por (, e usando a notao denida
acima, temos que
L(() = w T

: existe uma derivao S

w em (.
Vejamos alguns exemplos. Seja (
1
a gramtica denida acima. Te-
mos que
S 0S1 0
2
S1
2
0
2
1
2
.
Note que S 0S1 e 0S1 0
2
S1
2
so derivaes de um passo em
(
1
porque, em ambos os casos a palavra direita de foi obtida da
que est esquerda trocando-se S por 0S1. Isto permitido porque
S 0S1 uma regra de (
1
. J 0
2
S1
2
0
2
1
2
foi obtida trocando-se
S por . Podemos fazer isto por que S tambm uma regra de (
1
.
Toda esta cadeia de derivaes pode ser abreviada como
S
3
0
2
1
1
ou S

0
2
1
1
.
Por outro lado, 0
2
S1
2
0
2
1
3
no uma derivao legtima em (
1
porque neste caso a regra usada foi S 1, que no pertence a (
1
.
Do que zemos acima segue que 0
2
1
2
L((
1
). Mas podemos ser
muito mais ambiciosos e tentar determinar todas as palavras de L((
1
).
Para comear, note que se S
n
w em(
1
e w / T

, ento w = 0
n
S1
n
.
Para provar isto basta usar induo em n. Por outro lado, como a nica
regra de (
1
que permite eliminar a varivel S S , conclumos que
toda palavra derivada a partir de S em (
1
da forma 0
n
1
n
, para algum
inteiro n 0. Assim,
L((
1
) = 0
n
1
n
: n 0.
64 9. LINGUAGENS LIVRES DE CONTEXTO
J vimos no captulo 4, que esta linguagem no regular. Em particular,
no existe nenhuma gramtica linear direita que gere L((
1
).
Passando gramtica (
2
, temos a derivao
S X1X 0X1X 0
2
X1X 0
2
X1 0
2
1.
Note que, na derivao acima, algumas ocorrncias da varivel X foram
sublinhadas. Fizemos isto para indicar qual instncia da varivel X foi
aplicada a regra da gramtica que leva ao passo seguinte da derivao.
Assim, no segundo passo da derivao, aplicamos a regra X 0X
ao X mais esquerda X1X. Com isto este X foi trocado por 0X,
mas nada foi feito ao segundo X. Coisa semelhante ocorreu no passo
seguinte. Alm disso, a regra X 0X nunca foi aplicada ao segundo
X. Fica claro deste exemplo que:
A cada passo de uma derivao apenas uma ocorrn-
cia de uma varivel pode ser substituda pelo lado di-
reito de uma seta. Alm disso, cada ocorrncia de
uma varivel tratada independentemente da outra.
Sempre que for conveniente, sublinharemos a instncia da varivel
qual a regra est sendo aplicada em um determinado passo da derivao.
Vamos tentar, tambm neste caso, determinar todas as palavras que
podem ser derivadas a partir de S em (
2
. Suponhamos que S

w em
(
2
. fcil ver que em w
h um nico 1;
pode haver, no mximo, duas ocorrncias de X, uma de cada
lado do 1.
Assim, w pode ser de uma das seguintes formas
0
n
X10
m
X ou 0
n
10
m
X ou 0
n
X10
m
ou 0
n
10
m
Portanto, se w T

e S

w, ento w = 0
n
10
m
, para inteiros
m, n 0. Conclumos que
L((
2
) = 0
n
10
m
: n, m 0.
Mas esta , na verdade, uma linguagem regular, que pode ser descrita na
forma L((
2
) = 0

10

. Temos assim um exemplo de gramtica livre de


contexto que no linear direita mas que gera uma linguagem regular.
Voltando ao caso geral, seja L uma linguagem no alfabeto . Dize-
mos que L livre de contexto se existe pelo menos uma gramtica livre
de contexto (, com conjunto de terminais , tal que L(() = L.
Portanto, toda linguagem regular livre de contexto. Isto ocorre
porque, pelo teorema de Kleene, uma linguagem regular sempre pode
ser gerada por uma gramtica linear direita. Mas, como j vimos, toda
gramtica linear direita livre de contexto.
2. LINGUAGENS SENSVEIS AO CONTEXTO 65
Por outro lado, nem toda linguagem livre de contexto regular. Por
exemplo, vimos na seo 3 do captulo 4 que a linguagem 0
n
1
n
: n
0 no regular. No entanto, ela gerada pela gramtica (
1
e, portanto,
livre de contexto. Na seo 3 veremos mais exemplos de linguagens
livres de contexto, incluindo vrias que no so regulares.
Antes que voc comece a alimentar falsas esperanas, bom es-
clarecer que existem linguagens que no so livres de contexto. Para
mostrar, diretamente da denio, que uma linguagem L no livre de
contexto seria necessrio provar que no existe nenhuma gramtica li-
vre de contexto que gere L, o que no parece possvel. Como no caso
de linguagens regulares, a estratgia mais prtica consiste em mostrar
que h uma propriedade de toda linguagem livre de contexto que no
satisfeita por L. Veremos como fazer isto no captulo 11.
2. Linguagens sensveis ao contexto
hora de voltar questo de como seria uma gramtica que no
livre de contexto.
Lembre-se que o que caracteriza as gramticas livres de contexto
o fato de que todas as suas regras tm apenas uma varivel (e nenhum
terminal) do lado esquerdo da seta. Na prtica isto signica que sempre
que X aparece em uma palavra, ele pode ser trocado por w, desde que
X w seja uma regra da gramtica.
Para uma gramtica no ser livre de contexto basta que, do lado es-
querdo da seta de alguma de suas regras, aparea algo mais complicado
que uma varivel isolada. Um exemplo simples, mas importante, a
gramtica com terminais a, b, c, variveis S, X, Y , smbolo inicial
S e regras
S abc
S aXbc
Xb bX
Xc Y bc
2
bY Y b
aY a
2
aY a
2
X.
Considere uma derivao nesta gramtica que comece com S aXbc.
Queremos, no prximo passo, substituir o X por alguma coisa. Mas,
apesar de haver duas regras com X esquerda da seta na gramtica, s
uma delas pode ser aplicada. Isto ocorre porque na palavra aXbc o X
66 9. LINGUAGENS LIVRES DE CONTEXTO
vem seguido de b, e a nica regra em que X aparece neste contexto
Xb bX. Aplicando esta regra, obtemos
S aXbc abXc abY bc
2
.
Continuando desta forma, podemos derivar a palavra a
2
b
2
c
2
nesta gra-
mtica. A derivao completa a seguinte:
S aXbc abXc abY bc
2
aY b
2
c
2
a
2
b
2
c
2
.
De maneira semelhante, podemos derivar qualquer palavra da forma
a
n
b
n
c
n
, com n 1. De fato, pode-se mostrar que o conjunto das pala-
vras desta forma constitui toda a linguagem gerada pela gramtica dada
acima.
Este exemplo se encaixa em uma classe de gramticas chamadas de
sensveis ao contexto. A denio formal a seguinte. Seja ( uma gra-
mtica com conjunto de terminais T, conjunto de variveis V e smbolo
inicial S. Dizemos que ( sensvel ao contexto se todas as regras de (
so da forma u v, onde u, v (T V )

e [u[ [v[. Esta ltima


condio claramente satisfeita pelas regras de uma gramtica livre de
contexto, de modo que toda gramtica livre de contexto sensvel ao
contexto
Diremos que uma linguagem L no alfabeto sensvel ao contexto
se existe uma gramtica sensvel ao contexto, com conjunto de terminais
, que gera L. Portanto, toda linguagem livre de contexto sensvel ao
contexto
A discusso acima mostra que a linguagem
a
n
b
n
c
n
: n 1
sensvel ao contexto. Entretanto, como provaremos no captulo 11
no existe nenhuma gramtica livre de contexto que gere esta lingua-
gem. Temos, assim, que a classe das linguagens livres de contexto est
propriamente contida na classe das linguagens sensveis ao contexto. A
relao entre os diversos tipos de linguagens detalhada na hierarquia
de Chomsky, que discutiremos em um captulo posterior.
3. Mais exemplos
Nesta seo veremos mais exemplos de linguagens livres de con-
texto. Comeamos com uma gramtica que gera frmulas que sejam
expresses aritmticas envolvendo apenas os operadores soma e multi-
plicao, alm dos parnteses. Isto , expresses da forma
(3.1) ((x + y) x) (z + w) y),
3. MAIS EXEMPLOS 67
onde x, y, z e w so variveis (no sentido em que o termo usado em
lgebra).
Note que, para saber se uma dada expresso legtima, no precisa-
mos conhecer as variveis que nela aparecem, mas apenas sua localiza-
o em relao aos operadores. Assim, podemos construir uma gram-
tica mais simples, em que as posies ocupadas por variveis em uma
expresso so todas marcadas com um mesmo smbolo. Este smbolo
chamado de identicador, e abreviado id. Portanto, o identicador
id ser um terminal da gramtica que vamos construir, juntamente com
os operadores + e e os parnteses ( e ). Substituindo as variveis da
expresso (3.1) pelo identicador, obtemos
(3.2) ((id + id) id) (id + id) id).
Em resumo, queremos construir uma gramtica livre de contexto
(
exp
, com conjunto terminais +, , (, ), id, que gere todas as expres-
ses aritmticas legtimas nos operadores + e . Note que (
exp
deve
gerar todas as expresses legtimas, e apenas estas. Isto , queremos
gerar expresses como (3.2), mas no como
(+id)id .
Na prtica estas expresses aritmticas so produzidas recursiva-
mente, somando ou multiplicando expresses mais simples, sem esque-
cer de pr os parnteses no devido lugar. Para obter a gramtica, pode-
mos criar uma varivel E (de expresso), e introduzir as seguintes regras
para combinao de expresses:
E E + E
E E E
E (E).
Finalmente, para eliminar E e fazer surgir o identicador, adicionamos
a regra E id.
Vejamos como derivar a expresso id + id id nesta gramtica.
Para deixar claro o que est sendo feito em cada passo, vamos utilizar
a conveno, estabelecida na seo em 1, de sublinhar a instncia da
varivel qual uma regra est sendo aplicada:
(3.3)
E E+E E+EE id+EE id+idE id+idid.
Construmos esta derivao aplicando em cada passo uma regra da
gramtica a uma varivel escolhida sem nenhum critrio especial. En-
tretanto podemos ser mais sistemticos. Por exemplo, poderamos, em
68 9. LINGUAGENS LIVRES DE CONTEXTO
cada passo da derivao, aplicar uma regra sempre varivel que est
mais esquerda da palavra. Usando esta estratgia chegamos a uma
derivao de id + id id diferente da que foi obtida acima:
E E + E id + E id + E E id + id E id + id id.
Neste caso no h necessidade de sublinhar a varivel qual a regra est
sendo aplicada j que, em cada passo, escolhemos sempre a que est
mais esquerda da palavra.
As derivaes deste tipo so muito importantes no desenvolvimento
da teoria e em suas aplicaes. Por isso conveniente ter um nome
especial para elas. Seja ( uma gramtica livre de contexto e w L(().
Uma derivao mais esquerda de w em ( aquela na qual, em cada
passo, a varivel qual a regra aplicada a que est mais esquerda
da palavra. Analogamente, podemos denir derivao mais direita
em uma gramtica livre de contexto.
Uma gramtica como (
exp
usada em uma linguagem de programa-
o com duas nalidades diferentes. Em primeiro lugar, para vericar
se as expresses aritmticas de um programa esto bem construdas; em
segundo, para informar ao computador qual a interpretao correta
destas expresses. Por exemplo, o computador tem que ser informado
sobre a precedncia correta entre os operadores soma e multiplicao.
Isto necessrio para que, na ausncia de parntesis, o computador saiba
que deve efetuar primeiro as multiplicaes e s depois as somas. Do
contrrio, confrontado com id + id id ele no saberia como efetuar o
clculo da forma correta. Voltaremos a esta questo em mais detalhes
no prximo captulo.
Analisando (
exp
com cuidado, vericamos que permite derivar (id).
Apesar do uso dos parnteses ser desnecessrio neste caso, no se trata
de uma expresso aritmtica ilegtima. Entretanto, no difcil resol-
ver este problema introduzindo uma nova varivel, como sugerido no
exerccio 5.
O segundo exemplo que desejamos considerar o de uma gramti-
ca que gere a linguagem formada pelos palndromos no alfabeto 0, 1.
Lembre-se que um palndromo uma palavra cujo reexo igual a ela
prpria. Isto , w um palndromo se e somente se w
R
= w. Precisa-
mos de dois fatos sobre palndromos que so conseqncia imediata da
denio. Digamos que w (0 1)

e que 0 ou 1; ento:
(1) w palndromo se e somente se w comea e termina com o
mesmo smbolo;
(2) w palndromo se e somente se w tambm palndromo.
4. COMBINANDO GRAMTICAS 69
Isto sugere que os palndromos podem ser construdos recursivamente
onde, a cada passo, ladeamos um palndromo j construdo por duas
letras iguais.
Comisto podemos passar construo da gramtica. Vamos cham-
la de (
pal
: ter terminais 0, 1 e apenas uma varivel S, que far o
papel de smbolo inicial. As observaes acima sugerem as seguintes
regras
S 0S0
S 1S1
Estas regras ainda no bastam, porque apenas com elas no possvel
eliminar S da palavra. Para fazer isto precisamos de, pelo menos, mais
uma regra. A primeira idia seria introduzir S . Entretanto, se zer-
mos isto s estaremos gerando palndromos que no tm um smbolo no
meio; isto , os que tm comprimento par. Para gerar os de comprimento
mpar necessrio tambm introduzir regras que permitam substituir S
por um terminal; isto ,
S 0 e S 1.
Podemos resumir o que zemos usando a seguinte notao. Supo-
nha que ( uma gramtica livre de contexto que tem vrias regras
X w
1
, . . . , X w
k
todas com uma mesma varivel do lado esquerdo. Neste caso escreve-
mos abreviadamente
X w
1
[w
2
. . . [w
k
,
onde a barra vertical tem o valor de ou. Como G
pal
tem uma nica
varivel, podemos escrever todas as suas regras na forma
S 0S0 [ 1S1 [ [ 0 [ 1.
De quebra, obtivemos a gramtica (
+
pal
que gera os palndromos de
comprimento par. A nica diferena entre as duas gramticas que o
conjunto de regras de (
+
pal
ainda mais simples:
S 0S0 [ 1S1 [ .
4. Combinando gramticas
Muitas vezes possvel decompor uma linguagem livre de contexto
L como unio, concatenao ou estrela de outras linguagens livres de
contexto. Nesta seo introduzimos tcnicas que facilitam a construo
70 9. LINGUAGENS LIVRES DE CONTEXTO
de uma gramtica livre de contexto para L a partir das gramticas das
suas componentes.
Comearemos com um exemplo cuja verdadeira natureza s ser
revelada no prximo captulo. Considere a linguagem
L
in
= a
i
b
j
c
k
: i, j, k 0 e i = j ou j = k.
Podemos decomp-la, facilmente, como unio de outras duas, a saber
L
1
= a
i
b
j
c
k
: i, j, k 0 e i = j, e
L
2
= a
i
b
j
c
k
: i, j, k 0 e j = k.
Alm disso, L
1
= L
3
c

e L
2
= a

L
4
, onde
L
3
= a
i
b
j
: i, j 0 e i = j, e L
4
= b
j
c
k
: j, k 0 e j = k.
Chegados a este ponto, j conseguimos obter uma decomposio de
L
in
em linguagens para as quais conhecemos gramticas. De fato, a

e c

so linguagens regulares para as quais existem gramticas lineares


direita bastante simples. Por outro lado, a gramtica (
1
denida na
seo 1 gera uma linguagem anloga a L
3
e L
4
. Resta-nos descobrir
como esta decomposio pode ser usada para construir uma gramtica
para L
in
. Contudo, prefervel discutir o problema de combinar gram-
ticas em geral, e s depois aplic-lo no exemplo acima.
Suponhamos, ento, que (
1
e (
2
so gramticas livres de contexto
que geram linguagens L
1
e L
2
, respectivamente. O que queremos so
receitas que nos permitamobter gramticas livres de contexto que gerem
L
1
L
2
e L
1
L
2
a partir de (
1
e (
2
.
Digamos que (
1
tem ingredientes (T , 1
1
, o
1
, {
1
) e (
2
ingredientes
(T , 1
2
, o
2
, {
2
). Observe que estamos supondo que as duas gramticas
tm os mesmos terminais, e que os conjuntos de variveis so disjuntos;
isto , 1
1
1
2
= .
Vamos comear com L
1
L
2
. Neste caso a nova gramtica, que
chamaremos de (

, deve gerar uma palavra que pertena a L


1
ou a L
2
.
Assim, o conjunto de regras de (

precisa conter {
1
e {
2
. Mas quere-
mos tambm que, depois do primeiro passo, a derivao s possa pro-
ceder usando regras de uma das duas gramticas. Fazemos isto criando
um novo smbolo inicial S e duas novas regras
S S
1
e S S
2
.
Assim, o primeiro passo da derivao fora uma escolha entre S
1
e S
2
.
Esta escolha determina de maneira inequvoca se a palavra a ser gerada
estar em L
1
ou L
2
. Em outras palavras, depois do primeiro passo a de-
rivao ca obrigatoriamente restrita s regras de uma das duas gram-
ticas. Mais precisamente, (

ca denida pelos seguintes ingredientes:


4. COMBINANDO GRAMTICAS 71
Terminais: T
1
T
2
;
Variveis: 1
1
1
2
S;
Smbolo inicial: S;
Regras: {
1
{
2
S S
1
, S S
2
.
Podemos proceder de maneira semelhante para criar uma gramtica
(

que gere a concatenao L


1
L
2
. Neste caso, as palavras que quere-
mos derivar so construdas escrevendo uma palavra de L
1
seguida de
uma palavra de L
2
. Como as palavras de L
1
so geradas a partir de S
1
e as de L
2
a partir de S
2
, basta acrescentar S S
1
S
2
s regras de (
1
e
(
2
. Os ingredientes da gramtica (

so:
Terminais: T
1
T
2
;
Variveis: 1
1
1
2
S;
Smbolo inicial: S;
Regras: {
1
{
2
S S
1
S
2
.
Finalmente, h uma receita semelhante s que foram dadas acima
para criar uma gramtica livre de contexto para L

a partir de uma gra-


mtica livre de contexto que gere L. Deixamos os detalhes desta cons-
truo para o exerccio 7.
Podemos, agora, voltar linguagem L
in
. Como L
in
= L
3
c

L
4
, precisamos comear criando gramticas que gerem as linguagens
L
3
, L
4
, c

e a

. Para L
3
e L
4
podemos usar adaptaes da gramtica (
1
da seo 1. J c

e a

so regulares, geradas por gramticas lineares


direita extremamente simples. Resumimos os ingredientes destas vrias
gramticas na tabela abaixo:
Linguagem L
3
L
4
a

Terminais 0, 1 0, 1 0, 1 0, 1
Variveis S
1
S
2
S
3
S
4
Smbolo inicial S
1
S
2
S
3
S
4
Regras S
1
aS
1
b S
2
bS
2
c S
3
aS
3
S
4
cS
4
S
1
S
2
S
4
S
3

Seguindo a receita dada acima para a gramtica de uma concatena-
o, obtemos:
72 9. LINGUAGENS LIVRES DE CONTEXTO
Linguagem L
3
c

L
4
Terminais 0, 1 0, 1
Variveis S

, S
1
, S
4
S

, S
2
, S
3

Smbolo inicial S

Regras S

S
1
S
4
S

S
2
S
3
S
1
aS
1
b S
2
bS
2
c
S
1
S
2

S
4
cS
4
S
3
aS
3
S
3
S
4

Resta-nos, apenas, proceder unio destas gramticas, o que nos d
uma gramtica livre de contexto para L
in
, com os seguintes ingredien-
tes:
Terminais: 0, 1;
Variveis: S, S

, S

, S
1
, S
2
, S
3
, S
4
;
Smbolo inicial: S;
Regras: S S

, S S

, S

S
1
S
4
, S

S
2
S
3
, S
1

aS
1
b, S
2
bS
2
c, S
1
, S
2
, S
4
cS
4
, S
3
aS
3
, S
3

, S
4
.
5. Exerccios
1. Considere a gramtica ( com variveis S, A, terminais a, b, smbolo
inicial S e regras
S AA
A AAA[ a [ bA[ Ab
(a) Quais palavras de L(() podem ser produzidas com derivaes de
at 4 passos?
(b) D pelo menos 4 derivaes distintas da palavra babbab.
(c) Para m, n, p > 0 quaisquer, descreva uma derivao em ( de
b
m
ab
n
ab
p
.
2. Determine gramticas livres de contexto que gerem as seguintes lin-
guagens:
(a) (01)
i
: i 1;
(b) 1
2n
: n 1;
(c) 0
i
1
2i
: i 1;
(d) w 0, 1

: w em que o nmero de 0s e 1s o mesmo;


(e) wcw
r
: w 0, 1

;
5. EXERCCIOS 73
(f) w : w = w
r
onde w 0, 1.
3. Considere o alfabeto = 0, 1, (, ), , , . Construa uma gram-
tica livre de contexto que gere todas as palavras de

que so ex-
presses regulares em 0, 1.
4. A gramtica livre de contexto ( cujas regras so
S 0S1 [ 0S0 [ 1S0 [ 1S1 [
no linear direita. Entretanto, L(() uma linguagem regular.
Ache uma gramtica linear direita (

que gere L(().


5. Modique a gramtica (
exp
(introduzindo novas variveis) de modo
que no seja mais possvel derivar a expresso (id) nesta gramtica.
6. Seja ( uma gramtica livre de contexto com conjunto de terminais T,
conjunto de variveis V e smbolo inicial S. Dizemos que ( linear
se todas as suas regras so da forma
X Y ou X ,
onde X e Y so variveis e , T

. Isto pode haver no mximo


uma varivel do lado direito de cada regra de (. Uma linguagem
linear se pode ser gerada por alguma gramtica linear. Mostre que
se L linear ento L pode ser gerada por uma gramtica cujas regras
so de um dos 3 tipos seguintes:
X Y ou X Y ou X
onde X uma varivel e um terminal ou = .
7. Seja ( uma gramtica livre de contexto que gere uma linguagem L.
Mostre como construir, a partir de (, uma gramtica livre de contexto
que gera L

.
SUGESTO: S SS.
8. Seja L uma linguagem livre de contexto. Mostre que L
r
= w
r
:
w L tambm livre de contexto.
CAPTULO 10
rvores Gramaticais
No captulo anterior vimos como gerar palavras a partir de uma gra-
mtica livre de contexto, por derivao. Neste captulo consideramos
outra maneira pela qual uma gramtica livre de contexto gera palavras:
as rvores gramaticais. Esta noo tem origem na necessidade de dia-
gramar a anlise sinttica de uma sentena em uma lngua natural, como
o portugus ou o javans.
1. Anlise Sinttica e lnguas naturais
At agora as gramticas formais que introduzimos tm servido basi-
camente para gerar palavras que pertencem a uma dada linguagem. J a
gramtica da lngua portuguesa no serve apenas para gerar frases com
sintaxe correta, mas tambm para analisar a estrutura de uma frase e de-
terminar o seu signicado. A isso se chama anlise sinttica. Descobrir
quem fez o qu, e a quem, uma questo de identicar sujeito, verbo e
objetos de uma frase. Entretanto, a noo de derivao no uma ferra-
menta adequada para realizar a anlise sinttica em uma gramtica; para
isto precisamos das rvores gramaticais.
Vejamos como usar uma rvore para diagramar a anlise sinttica
da frase
Pedro ligou o computador.
O sujeito da sentena Pedro e o predicado ligou o computador. Por
sua vez o predicado pode ser decomposto no verbo ligou seguido do
objeto direto, o computador. Esta anlise da frase pode ser diagramada
em uma rvore como a da gura abaixo.
75
76 10. RVORES GRAMATICAIS
'sentena`

'sujeito` 'predicado`
.
.
.
.
.
.
.
.
.
.
.
.

'verbo` 'objeto`
Pedro
ligou o computador
Note que as palavras sentena, sujeito, predicado, verbo e objeto
direto aparecem entre ' `. Fizemos isto para diferenciar o conceito,
da palavra da lngua portuguesa que o denota. Em outras palavras, '
sujeito ` indica que na gramtica da lngua portuguesa h uma varivel
chamada de sujeito.
Existe uma estreita relao entre a estrutura da rvore acima e as
regras da gramtica da lngua portuguesa. Lendo esta rvore de cima
para baixo, cada bifurcao corresponde a uma regra da gramtica por-
tuguesa. As regras que aparecem na rvore da gura acima so as se-
guintes:
'sentena` 'sujeito`'predicado`
'predicado` 'verbo`'objeto direto`
'sujeito` Pedro
'verbo` ligou
'objeto direto` o computador.
Assimpodemos usar esta rvore para derivar a frase Pedro ligou o com-
putador a partir das regras acima:
'sentena` 'sujeito`'predicado` 'sujeito`'verbo`'objeto direto`
Pedro'verbo`'objeto direto` Pedro ligou 'objeto direto`
Pedro ligou o computador
O principal resultado deste captulo mostra que existe uma estreita
relao entre rvores gramaticais e derivaes. Antes, porm, precisa-
remos denir formalmente a noo de rvore gramatical de uma lingua-
gem livre de contexto.
2. RVORES GRAMATICAIS 77
2. rvores Gramaticais
Nesta seo, alm de introduzir formalmente o conceito de rvore
gramatical de uma linguagem livre de contexto, estabelecemos a relao
entre rvores e derivaes.
Lembre-se que uma rvore um grafo conexo que no tem ciclos.
As rvores que usaremos so na verdade grafos orientados. Entretanto,
no desenharemos as arestas destas rvores como setas. Em vez disso,
indicaremos que o vrtice v precede v

desenhando v acima de v

. Alm
disso suporemos sempre que estamos lidando com rvores que satisfa-
zem as seguintes propriedades:
h um nico vrtice, que ser chamado de raiz, e que no
precedido por nenhum outro vrtice;
os sucessores de um vrtice esto totalmente ordenados.
Se v

e v

so sucessores de v, e se v

precede v

na ordenao dos
vrtices, ento desenharemos v

esquerda de v

. De agora em diante a
palavra rvore ser usada para designar um grafo com todas as proprie-
dades relacionadas acima.
Falta um grafo aqui
Um exemplo de rvore com estas propriedades, a rvore geneal-
gica que descreve os descendentes de uma dada pessoa. Note que, em
uma rvore genealgica, os irmos podem ser naturalmente ordenados
pela ordem do nascimento. A terminologia que passamos a descrever
inspirada neste exemplo. Suponhamos que T uma rvore e que v

um
vrtice de T . Ento h um nico caminho ligando a raiz a v

. Digamos
que este caminho contm um vrtice v. Neste caso,
v ascendente de v

e v

descendente de v;
se v e v

esto separados por apenas uma aresta ento v pai


de v

e v

lho de v;
se v

e v

so lhos de um mesmo pai, ento so irmos;


um vrtice sem lhos chamado de folha;
um vrtice que no uma folha chamado de vrtice interior.
Aordenao entre irmos, que faz parte da denio de rvore, pode
ser estendida a uma ordenao de todas as folhas. Para ver como isto
feito, digamos que f

e f

so duas folhas de uma rvore. Comea-


mos procurando o seu primeiro ascendente comum, que chamaremos de
v. Observe que f e f

tm que ser descendentes de lhos diferentes


de v, a no ser que sejam eles prprios lhos de v. Digamos que f
descendente de v

e f

de v

. Como v

e v

so irmos, sabemos que


esto ordenados; digamos que v

precede v

. Neste caso dizemos que


78 10. RVORES GRAMATICAIS
f

precede f

. Esta uma ordem total; isto , todas as folhas de uma


tal rvore podem ser escritas em la, de modo que a seguinte sucede
anterior.
Nenhuma preocupao adicional com esta ordenao necessriao
na hora de desenhar uma rvore; basta obedecer conveno de sempre
ordenar os vrtices irmos da esquerda para a direita. Se zermos isto,
as folhas caro automaticamente ordenadas da esquerda para a direita.
Seja ( uma gramtica livre de contexto com terminais T e vari-
veis V . De agora em diante estaremos considerando rvores, no sentido
acima, cujos vrtices esto rotulados por elementos de T V . Contudo,
no estaremos interessados em todas estas rvores, mas apenas naquelas
resultantes de um procedimento recursivo bastante simples, as rvores
gramaticais. Como se trata de uma denio recursiva, precisamos esta-
belecer quem so os tomos da construo, que chamaremos de rvores
bsicas, e de que maneira podemos combin-las.
As rvores gramaticais so denidas recursivamente da seguinte
maneira:
rvores bsicas: se T, X V e X uma regra de (, ento
e
X

so rvores gramaticais e suas colheitas so, respectivamente, e .


Regras de combinao: sejam T
1
, . . . , T
n
rvores gramaticais, e supo-
nhamos que o rtulo da raiz de T
j

j
. Se X
1

n
uma regra
de (, ento a rvore T denida por
X
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

T
1
T
2
T
n
tambm uma rvore gramatical.
Umexemplo simples a rvore na gramtica (
exp
(denida na seo
3 do captulo 7) esboada abaixo.
2. RVORES GRAMATICAIS 79
E

E
+
E

id id

id
FIGURA 1. rvore gramatical
Uma conseqncia muito importante desta denio recursiva, e
uma que usaremos em vrias oportunidades, a seguinte. Suponha-
mos que uma rvore gramatical T tem um vrtice v rotulado por uma
varivel X. Ento podemos trocar toda a parte de T que descende de v
por qualquer outra rvore gramatical cuja raiz seja rotulada por X.
Segue tambm da denio que os nicos vrtices de uma rvore
gramatical que podem ser rotulados por elementos de T so as
folhas. Portanto, um vrtice interior de uma rvore gramatical s pode
ser rotulado por uma varivel.
Por outro lado, se o vrtice v de uma rvore gramatical T est rotu-
lado por uma varivel X, e seus lhos por
1
, . . . ,
n
T V ento
X
1

n
temque ser uma regra da gramtica (. Diremos que esta
a regra associada ao vrtice v. No caso de v ser a raiz, T uma X-
rvore. Caso a rvore gramatical consista apenas de uma folha rotulada
por um terminal , diremos que se trata de uma -rvore.
Uma vez tendo introduzido rvores gramaticais temos uma outra
maneira de gerar palavras a partir de uma gramtica livre de contexto.
Para isso, denimos a colheita c(T ) de uma rvore gramatical T . Como
a denio de rvore recursiva, assim ser a denio de colheita. As
colheitas das rvores bsicas so
c( ) = e c

=
Por outro lado sejam T
1
, . . . , T
n
rvores gramaticais, e suponhamos que
o rtulo da raiz de T
j

j
. Se X
1

n
uma regra de (, ento
a rvore T construda de acordo com a regra de combinao satisfaz
c(T) = c(T
1
) c(T
2
) c(T
n
).
Como conseqncia da denio recursiva, temos que a colheita de
uma rvore gramatical T a palavra obtida concatenando-se os rtulos
80 10. RVORES GRAMATICAIS
de todas as folhas de T, da esquerda para a direita. Como as folhas
de uma rvore gramatical esto totalmente ordenadas, no h nehuma
ambigidade nesta maneira de expressar a colheita. Para uma demons-
trao formal deste fato veja o exerccio 1. Portanto, a rvore da gura
1 tem colheita id + id id.
Digamos que w uma palavra que pode ser derivada emuma gram-
tica livre de contexto ( comsmbolo inicial S. Uma rvore de derivao
para w uma S-rvore de ( cuja colheita w. Note que reservamos o
nome de rvore de derivao para o caso especial das S-rvores.
3. Colhendo e derivando
No captulo 7 vimos como gerar uma palavra em terminais a partir
do smbolo inicial de uma linguagem livre de contexto por derivao. A
noo de colheita de uma rvore gramatical nos d uma segunda maneira
de produzir uma tal palavra. Como seria de esperar, h uma estreita
relao entre estes dois mtodos, que ser discutida em detalhes nesta
seo.
Para explicitar a relao entre rvores gramaticais e derivaes va-
mos descrever um algoritmo que constri uma derivao mais es-
querda de uma palavra a partir de sua rvore gramatical. Heuristica-
mente falando, o algoritmo desmonta a rvore gramatical da raiz s fo-
lhas. Contudo, ao remover a raiz de uma rvore gramatical, no obtemos
uma nova rvore gramatical, mas sim uma seqncia ordenada de rvo-
res. Isto sugere a seguinte denio. Seja ( uma gramtica livre de
contexto com terminais T e variveis V . Se
w =
1

n
(T V )

ento uma uma w-oresta T uma seqncia ordenada T


1
, . . . , T
n
de
rvores gramaticais, onde T
j
uma
j
-rvore. A colheita da oresta T
a concatenao das colheitas de suas rvores; isto
c(T) = c(T
1
) c(T
n
).
Podemos agora descrever o algoritmo. Lembre-se que quando di-
zemos remova a raiz da rvore T estamos implicitamente assumindo
que as arestas incidentes raiz tambm esto sendo removidas. Se v
a raiz de uma rvore T da oresta T, denotaremos por T ` v a oresta
obtida quando v removido de T .
Precisamos considerar, separadamente, o efeito desta construo
quando T a rvore bsica que tem a raiz rotulada pela varivel X e
uma nica folha rotulada por . Neste caso, quando removemos a raiz
sobra apenas um vrtice rotulado por , que no constitui uma rvore
3. COLHENDO E DERIVANDO 81
gramatical. Suporemos, ento, que remover a raiz de uma tal rvore tem
o efeito de apagar toda a rvore.
ALGORITMO 10.1. Constri uma derivao a partir de uma rvore
gramatical.
Entrada: uma X-rvore T , onde X uma varivel.
Sada: uma derivao mais esquerda de c(T ).
Etapa 1: Inicialize T com T .
Etapa 2: Se T uma w-oresta, ento imprima w. Pre se todas
as rvores de T so rotuladas por terminais.
Etapa 3: Seja v a raiz da rvore mais esquerda de T que
rotulada por uma varivel. Faa T = T ` v e volte etapa 2.
seguir, voc encontrar um exemplo da aplicao passo a passo
deste algoritmo a uma rvore na gramtica (
exp
.
Inicializao
Passo 1
E

E
+
E

E
+
E

id E

E id E

E
id id id id
Imprime: E Imprime: E + E
Passo 2 Passo 3
+
E

+
id E

E id E

E
id id id id
Imprime: id + E Imprime: id + E E
82 10. RVORES GRAMATICAIS
Passo 4 Passo 5
+ +
id

E id

id id id id
Imprime: id + id E Imprime: id + id id
Resta-nos demonstrar que este algoritmo funciona. Comeamos
por analisar o que o algoritmo faz quando um de seus passos execu-
tado. Suponhamos que, ao nal do k-simo passo, temos uma
1

n
-
oresta T formada pelas rvores T
1
, . . . , T
n
. Portanto, a palavra im-
pressa pelo algoritmo no passo k

1

n
.
Digamos que
j
uma varivel, mas que
1
, . . . ,
j1
so termi-
nais. Portanto, a rvore mais esquerda de T, cuja raiz rotulada por
uma varivel, T
j
. Assim, ao executar o (k + 1)-simo passo do al-
goritmo deveremos remover a raiz de T
j
. Mas ao fazer isto estamos
substituindo T
j
em T por uma
1

r
-oresta, onde
j

1

r
a regra associada raiz de T
j
. Ao nal deste passo, o algoritmo ter
impresso

1

j1

1

r

j+1

n
.
Entretanto,
j
era a varivel mais esquerda de
1

n
, e

1

j1

j+1

n

1

j1

1

r

j+1

n
.
Como o algoritmo comea imprimindo X, podemos concluir que pro-
duz uma derivao mais esquerda em (, a partir de X. Falta apenas
mostrar que o que derivado mesmo c(T ). Contudo, a colheita das o-
restas a cada passo da aplicao do algoritmo sempre a mesma. Alm
disso, as rvores gramaticais que constituem a oresta no momento que
o algoritmo termina tm suas razes indexadas por terminais. Como o
algoritmo no apaga nenhum vrtice indexado por terminal diferente de
, conclumos que a concatenao das razes das rvores no momento
em que o algoritmo pra c(T), como desejvamos.
4. EQUIVALNCIA ENTRE RVORES E DERIVAES 83
4. Equivalncia entre rvores e derivaes
Passemos recproca da questo considerada na seo 3. Mais pre-
cisamente, queremos mostrar que se ( uma gramtica livre de contexto
ento toda palavra que tem uma derivao em ( colheita de alguma
rvore de derivao de (.
Para resolver este problema usando um algoritmo precisaramos in-
ventar uma receita recursiva para construir uma rvore de derivao a
partir de uma derivao qualquer em(. Isto possvel, mas o algoritmo
resultante no to enxuto quanto o anterior. Por isso vamos optar por
dar uma demonstrao indireta, por induo.
PROPOSIO 10.2. Seja X uma varivel da gramtica livre de
contexto (. Se existe uma derivao X

w, ento w colheita de
uma X-rvore em (.
DEMONSTRAO. Suponhamos que a gramtica livre de contexto
( tem terminais T e variveis V . A proposio ser provada por induo
no nmero p de passos de uma derivao X
p
w.
Abase da induo consiste emsupor que existe uma derivao X
w de apenas um passo. Mas isto s pode ocorrer se existem terminais
t
1
, . . . , t
n
e uma regra da forma X t
1
t
n
. Assim, w a colheita de
uma X-rvore que tem a raiz rotulada por X e as folhas por t
1
, . . . , t
n
,
o que prova a base da induo.
A hiptese de induo arma que, se Y 1 e se existe uma deriva-
o
Y
p
u T

,
ento u colheita de uma Y -rvore de (. Digamos, agora, que w
T

pode ser derivado a partir de X V em p + 1 passos. O pri-


meiro passo desta derivao ser da forma X v
1
v
2
v
n
, onde
v
1
, . . . , v
n
T V e X v
1
v
2
v
n
uma regra de (. A derivao
continua com cada v
i
deagrando uma derivao da forma v
i

u
i
onde u
1
u
n
= w. Como cada uma destas derivaes tem compri-
mento menor ou igual a p, segue da hiptese de induo que existem
v
i
-rvores T
i
com colheita u
i
, para cada i = 1, . . . , n. Mas T
1
, . . . , T
n
uma v
1
v
n
-oresta, e a primeira regra utilizada na derivao de w
foi X v
1
v
n
. Portanto, pela denio de rvore gramatical, pode-
mos colar as razes desta oresta de modo a obter uma X-rvore cuja
colheita
c(T
1
) c(T
n
) = u
1
u
n
= w,
o que prova o passo de induo. O resultado desejado segue pelo prin-
cpio de induo nita.
84 10. RVORES GRAMATICAIS
S nos resta reunir, para referncia futura, tudo o que aprendemos
sobre a relao entre derivaes e rvores gramaticais em um nico te-
orema. Antes de enunciar o teorema, porm, observe que tudo o que
zemos usando derivaes mais esquerda vale igualmente para deri-
vaes mais direita.
TEOREMA 10.3. Seja ( uma gramtica livre de contexto e w
L((). Ento:
(1) existe uma rvore de derivao cuja colheita w;
(2) a cada rvore de derivao cuja colheita w corresponde uma
nica derivao mais esquerda de w;
(3) a cada rvore de derivao cuja colheita w corresponde uma
nica derivao mais direita de w.
Temos que (1) segue da proposio acima e que (2) conseqn-
cia do algoritmo da seo 3. J (3) segue de uma modicao bvia
deste mesmo algoritmo. A importncia deste teorema car clara nos
prximos captulos.
5. Ambigidade
Como vimos na seo 1, as rvores gramaticais so usadas na gra-
mtica da lngua portuguesa para representar a anlise sinttica de uma
frase em um diagrama. Portanto, tm como nalidade ajudar-nos a in-
terpretar corretamente uma frase.
Contudo, preciso no esquecer que possvel escrever sentenas
gramaticalmente corretas em portugus que, apesar disso, admitem duas
interpretaes distintas. Por exemplo, a frase
a seguir veio uma me com uma criana empurrando
um carrinho,
pode signicar que a me empurrava um carrinho com a criana dentro;
ou que a me vinha com uma criana que brincava com um carrinho.
Ambos os sentidos so admissveis, mas a funo sinttica das palavras
num, e noutro caso, diferente. No primeiro caso o sujeito que corres-
ponde ao verbo empurrar me, no segundo caso criana. Assim,
teramos que escolher entre duas rvores gramaticais diferentes para re-
presentar esta frase, cada uma correspondendo a um dos sentidos acima.
No caso de uma gramtica livre de contexto (, formalizamos esta
noo de dupla interpretao na seguinte denio. A gramtica (
ambga se existe uma palavra w L(() que admite duas rvores de
derivao distintas em (.
bom chamar a ateno para o fato de que nem toda frase com
duplo sentido emportugus se encaixa na denio acima. Por exemplo,
5. AMBIGIDADE 85
a galinha est pronta para comer tem dois signicados diferentes, mas
em ambos as vrias palavras da frase tm a mesma funo sinttica.
Assim, no importa o signicado que voc d frase, o sujeito sempre
a galinha.
Frases que admitem signicados diferentes so uma fonte inesgo-
tvel de humor; mas para o compilador de uma linguagem de progra-
mao uma instruo que admite duas interpretaes distintas pode ser
um desastre. Voltemos por um momento gramtica (
exp
. Na gura
abaixo, direita, reproduzimos a rvore de derivao de id+id id que
j havamos esboado na seo 2. Uma rvore de derivao diferente
para a mesma expresso pode ser encontrada esquerda, na mesma -
gura.
E
.
.
.
.
.
.
.
.
.


E E
+
E

E
+
E id id E

E
id id id id
FIGURA 2. Duas rvores e uma mesma colheita
A existncia desta segunda rvore de derivao signica que, se um
computador estiver usando a gramtica (
exp
, ele no saber como dis-
tinguir a precedncia correta entre os operadores + e . Dito de outra
maneira, esta gramtica no permite determinar que, quando nos depa-
ramos com id + id id devemos primeiro efetuar a multiplicao e s
depois somar o produto obtido com a outra parcela da soma.
Uma sada possvel tentar inventar uma outra gramtica que gere
a mesma linguagem, mas que no seja ambga. A idia bsica consiste
em introduzir novas variveis e novas regras que forcem a precedncia
correta. Para fazer isto, compare novamente as duas rvores gramaticais
com colheita id + id id da gura 2.
Observe que, na rvore da direita, id id obtida a partir da ex-
presso E E, e os vrtices que correspondem a estes trs rtulos so
todos irmos. Por outro lado, o nico vrtice do qual descendem todos
os smbolos da expresso id + id id a prpria raiz. Portanto, inter-
pretando a expresso id + id id conforme a rvore da direita, teremos
primeiro que calcular o produto, e s depois a soma. Interpretando a
mesma expresso de acordo com a rvore da esquerda, vemos que neste
caso a adio id+id efetuada antes, e o resultado, ento, multiplicado
86 10. RVORES GRAMATICAIS
por id. Isto , a rvore que d a interpretao correta da precedncia dos
operadores a que est direita da gura 2.
Assim, precisamos construir uma nova gramtica na qual uma r-
vore como a que est direita da gura possa ser construda, mas no
uma como a da esquerda.
A estratgia consiste em introduzir novas variveis de modo a forar
a precedncia correta dos operadores. Faremos isto deixando a varivel
E controlar as adies, e criando uma nova varivel F (de fator) para
controlar a multiplicao. O conjunto de regras resultante o seguinte:
E E + F
E F
F F F
F (E)
F id
No h nada de mais a comentar sobre a primeira e a terceira regras; e a
segunda apenas permite passar de somas a multiplicaes. A regra que
realmente faz a diferena a quarta. Ela nos diz que, aps efetuar uma
multiplicao, s podemos voltar varivel E (que controla as somas)
colocando os parntesis.
Embora esta nova gramtica no permita a construo de uma r-
vore como a da esquerda na gura 2, ainda assim ela ambga. Por
exemplo, as rvores da gura 3 esto de acordo com a nova gramtica
mas, apesar de diferentes, tm ambas colheita id id id.
E E
F

.
.
.
.
.
.
.
.
.
F

F

F
id F

F F

F id
id id id id
FIGURA 3. Outras duas rvores com mesma colheita
A sada introduzir mais uma varivel, que vamos chamar de T
(para termo). A nova gramtica, que chamaremos de (

exp
, tem variveis
5. AMBIGIDADE 87
E, T e F, smbolo inicial E, e as seguintes regras:
E E + T [ T
T T F [ F
F (E)[ id
A gramtica (

exp
no ambga, mas provar isto no fcil, e no
faremos os detalhes aqui.
Ainda h um ponto que precisa ser esclarecido. A discusso anterior
pode ter deixado a impresso de que, para estabelecer a precedncia
correta entre os operadores aritmticos, basta eliminar a ambigidade
da gramtica. Mas isto no verdade. Por exemplo, a gramtica (
exp
cujas regras so:
S E
E (E)R [ V R
R +E [ E [ A
V id
A
gera L
exp
. Alm disso, no difcil provar que esta gramtica no pode
ser ambga. Isto decorre dos seguintes fatos:
no h mais de duas regras em (
exp
cujo lado esquerdo seja
ocupado por uma mesma varivel;
se h duas regras a partir de uma mesma varivel, o lado di-
reito de uma comea com uma varivel, e o da outra com um
terminal;
cada terminal s aparece uma vez como prexo do lado direito
de alguma regra de (
exp
.
Imagine, ento, que estamos tentando calcular uma derivao esquerda
em (
exp
para uma dada palavra w L
exp
. Digamos que, isolando o
n-simo passo da derivao, obtivemos o seguinte
S

uEv w,
onde u s contm terminais, mas v pode conter terminais e variveis.
Precisamos decidir qual a regra a ser aplicada a seguir. Neste exemplo, a
varivel mais esquerda no n-simo passo da derivao E. Assim, h
duas regras que podemos aplicar. Para saber qual das duas ser escolhida
voltamos nossa ateno para a palavra w que est sendo derivada.
claro que w tem u como prexo; digamos que o terminal seguinte a u
em w seja . Temos ento duas possibilidades. Se = ( ento a regra
88 10. RVORES GRAMATICAIS
a ser aplicada tem que ser E (E)R. Por outro lado, se = ( ento
s nos resta a possibilidade de aplicar E V R. Assim, a regra a ser
aplicada neste passo est completamente determinada pela varivel mais
esquerda presente, e pela seqncia de terminais da palavra que est
sendo derivada.
Entretanto, apesar de (
exp
no ser ambga, a rvore de derivao
de id + id id em (
exp
no apresenta a precedncia desejada entre os
operadores, como mostra a gura abaixo.
S
E

V R

id

E

V R

id
+
E

V R
id A

Voltaremos a discutir (
exp
quando tratarmos de autmatos de pilha
determinsticos.
6. Removendo ambigidade
O que zemos na seo anterior parece indicar que, ao se deparar
com uma gramtica ambga, tudo o que temos que fazer adicionar
algumas variveis e alterar um pouco as regras de maneira a remover a
6. REMOVENDO AMBIGIDADE 89
ambigidade. verdade que criar novas variveis e regras para remover
ambigidade pode no ser muito fcil, e bom no esquecer que no
chegamos a provar que a gramtica (

exp
no ambga.
Por outro lado, isto parece bem o tipo de problema que poderia ser
deixado para um computador fazer, bastaria que descobrssemos o al-
goritmo. a justamente que est o problema. Um computador no
consegue sequer detectar que uma linguagem ambga. De fato:
no pode existir um algoritmo para determinar se uma
dada linguagem livre de contexto ou no ambga.
Voltaremos a esta questo em um captulo posterior.
Infelizmente, as ms notcias no acabam a. H linguagens livres
de contexto que no podem ser geradas por nenhuma gramtica livre
de contexto que no seja ambga. Tais linguagens so chamadas de
inerentemente ambgas. Note que ambigidade uma propriedade da
gramtica, mas ambigidade inerente uma propriedade da prpria lin-
guagem.
Um exemplo bastante simples de linguagem inerentemente ambga

L
in
= a
i
b
j
c
k
: i, j, k 0 e i = j ou j = k.
Com isso voc descobre porque demos este nome a L
in
. No fcil
mostrar que esta linguagem inerentemente ambga, e por isso no
vamos fazer a demonstrao aqui. Os detalhes podem ser encontrados
em [1, theorem 7.2.2, p. 236] ou [2, theorem 4.7, p. 100].
Para no encerrar o captulo num clima pessimista, vamos analisar
o problema da ambigidade para o caso particular das linguagens regu-
lares. Sabemos que estas linguagens podem ser geradas por gramticas
livres de contexto de um tipo bastante especial: as gramticas lineares
direita. Assima primeira pergunta : uma gramtica linear direita pode
ser ambga? Aresposta sim. Por exemplo, considere a gramtica com
terminal 0, que tem S como nica varivel, e cujas regras so
S 0 [ 0S [ 0
2
.
A palavra 0
2
tem duas rvores gramaticais distintas que esto esboadas
na abaixo.
S

0 S 0 0
0
90 10. RVORES GRAMATICAIS
Felizmente, no caso de gramticas lineares direita sempre poss-
vel remover a ambigidade. Em outras palavras, no existem linguagens
regulares inerentemente ambgas. Alm disso, existe um algoritmo
simples que, tendo como entrada uma gramtica linear direita, cons-
tri uma outra que gera a mesma linguagem regular mas no ambga.
O algoritmo conseqncia do seguinte fato:
a gramtica linear direita construda a partir de um
autmato nito determinstico pelo algoritmo do ca-
ptulo 8 no ambga.
Para entender porque isto verdade, suponha que M seja um autmato
nito determinstico e ( seja a gramtica construda a partir de M pelo
algoritmo do captulo ??. Vimos que as derivaes em ( simulam com-
putaes em M e vice-versa. Como M determinstico, s h uma
computao possvel para cada palavra de L(M). Logo cada palavra
de L(() = L(M) s tem uma derivao possvel. Como ( linear
direita, toda derivao em ( mais esquerda. Logo ( no ambga
pelo teorema da seo 4.
Diante deste resultado, claro que, ao receber uma gramtica linear
direita ( como entrada, o algoritmo procede da seguinte maneira:
Etapa 1: determina um autmato nito no determinstico M tal
que L(M) = L(();
Etapa 2: determina umautmato nito determinstico M

tal que
L(M) = L(M

);
Etapa 3: determina uma gramtica (

, obtida a partir de M

, e
que gera L(M

).
Como j vimos, (

no pode ser uma gramtica ambga.


7. Exerccios
1. Prove, por induo no nmero de vrtices internos, que a colheita de
uma rvore gramatical T igual palavra obtida concatenando-se os
rtulos das folhas de T da esquerda para a direita.
2. Seja ( uma gramtica livre de contexto e seja X uma varivel de (.
Seja w uma palavra somente em terminais e que pode ser derivada
em ( a partir de X. Prove, por induo no nmero de passos de uma
derivao de w a partir de X que existe uma X-rvore em ( cuja
colheita w.
3. Considere a gramtica no ambgua G

exp
que gera as expresses arit-
mticas.
7. EXERCCIOS 91
(a) Esboce as rvores de derivao de id + (id + id) id e de (id
id + id id)
(b) D uma derivao esquerda e uma derivao direita da ex-
presso (id id + id id).
4. Repita o exerccio anterior para a gramtica (
exp
.
5. Descreva detalhadamente um algoritmo que, tendo como entrada a
derivao de uma palavra w em uma gramtica livre de contexto,
constri uma rvore gramatical cuja colheita w. O principal pro-
blema consiste em, tendo dois passos consecutivos da derivao, de-
terminar qual a regra que foi aplicada.
6. Prove que a gramtica (
exp
no ambga.
SUGESTO: Use induo no nmero de passos de uma derivao
esquerda.
7. Mostre que a gramtica cujas regras so
S 1A[ 0B
A 0 [ 0S [ 1AA
B 1 [ 1S [ 0BB
ambgua.
8. Seja G a gramtica linear direita com terminais 0, 1, variveis
e smbolo inicial S, cujas regras so dadas por
S 0X
X 10Y [ 1Z
Z 01W [ 1
Y 1 [0
W
(a) Mostre que G ambga.
(b) Use o algoritmo descrito em 6 para construir uma gramtica li-
near direita G

no ambga que gere L(G).


CAPTULO 11
Linguagens que no so livres de contexto
Neste captulo, nalmente, confrontamos a inevitvel pergunta: como
provar que uma dada linguagem no livre de contexto? A estratgia
muito semelhante adotada para linguagens regulares, apesar do lema
do bombeamento resultante ser um pouco mais difcil de aplicar na pr-
tica.
1. Introduo
J conhecemos muitas linguagens livres de contexto, mas ainda no
temos nenhum exemplo de uma linguagem que no seja deste tipo. Quer
dizer, j dissemos no captulo 9 que a linguagem
L
abc
= a
n
b
n
c
n
: n 0
no livre de contexto, mais ainda no provamos isto. claro que
isto no satisfatrio. O problema que nada podemos concluir do
simples fato de no termos sido capazes de inventar uma gramtica livre
de contexto que gere esta linguagem. Talvez a gramtica seja muito
complicada, ou quem sabe foi s falta de inspirao.
Mas como ser possvel provar que no existe nenhuma gramtica
livre de contexto que gere uma dada linguagem? A estratgia a mesma
adotada para o caso de linguagens regulares. Isto , provaremos que toda
linguagem livre de contexto satisfaz uma propriedade de bombeamento.
Portanto, uma linguagem que no satiszer esta propriedade no pode
ser livre de contexto. Comeamos com um resultado relativo a rvores
que ser necessrio na demonstrao do lema do bombeamento.
Como no captulo anterior, consideraremos apenas rvores enraiza-
das. Dizemos que uma rvore m-ria se cada vrtice tem, no mximo,
93
94 11. LINGUAGENS QUE NO SO LIVRES DE CONTEXTO
m lhos. Desejamos relacionar o nmero de folhas de uma rvore m-
ria com a altura desta rvore. Lembre-se que a altura de uma rvore
o mais longo caminho entre a raiz e alguma de suas folhas.
Quando todos os vrtices internos da rvore tm exatamente m-
lhos, a rvore m-ria completa. Seja f(h) o nmero de folhas de
uma rvore m-ria completa de altura h. Como a rvore m-ria com-
pleta aquela que tem o maior nmero possvel de folhas, o problema
estar resolvido se formos capazes de encontrar uma frmula para f(h)
em funo de h e m. Faremos isto determinando uma relao de recor-
rncia para f(h) e resolvendo-a.
Para comear, se a rvore tem altura zero, ento consiste apenas de
um vrtice. Neste caso h apenas uma folha, de modo que f(0) = 1.
Para estabelecer a relao de recorrncia podemos imaginar que T
uma rvore m-ria completa de altura h. claro que, removendo todas
as folhas de T , obtemos uma rvore m-ria completa T

de altura h1.
Para reconstruir T a partir de T

precisamos repor as folhas. Fazemos


isso dando m-lhos a cada folha de T

. Como T

tem f(h 1) folhas,


obtemos
f(h) = mf(h 1).
Assim,
f(h) = mf(h 1) = m
2
f(h 2) = = m
h
f(0) = m
h
.
Portanto, f(h) = m
h
a frmula desejada.
Para estabelecer a relao entre este resultado e o lema do bombe-
amento precisamos de uma denio. Seja ( uma linguagem livre de
contexto. A amplitude (() de uma gramtica livre de contexto ( o
comprimento mximo das palavras que aparecem direita de uma seta
em uma regra de (. Por exemplo, para as gramticas (
exp
e (

exp
de-
nidas no captulo anterior, temos ((
exp
) = 3 e ((

exp
) = 4.
Se uma gramtica livre de contexto tem amplitude , ento todas
as suas rvores gramaticais so -rias. A frmula para o nmero de
folhas de uma rvore -ria completa nos d ento seguinte lema.
LEMA 11.1. Seja ( uma linguagem livre de contexto. Se X uma
varivel de ( e se w colheita de uma X-rvore de ( de altura h ento
[w[ (()
h
.
2. Lema do bombeamento
Antes de enunciar e provar o lema do bombeamento de maneira
formal, vamos considerar o seu funcionamento de maneira informal.
2. LEMA DO BOMBEAMENTO 95
Suponhamos que ( uma gramtica livre de contexto que gera uma
linguagem innita. Segundo o lema da seo 1, quanto maior o com-
primento da colheita de uma rvore gramatical maior tem que ser a sua
altura. Portanto, se o comprimento da colheita de uma rvore de deri-
vao T sucientemente grande, ento o caminho mais longo entre a
raiz e alguma folha conter mais vrtices interiores do que h variveis
na gramtica. Em particular, haver dois vrtices diferentes em T cujos
rtulos so iguais. Vamos chamar de
1
e
2
estes vrtices, e de A a
varivel que os rotula, como na gura 1.
FIGURA 1. Decompondo a palavra para bombear
Observe que as regras associadas a
1
e
2
tm ambas A do seu
lado esquerdo. Mas isto signica que podemos construir a partir de
T uma nova rvore T

da seguinte maneira. Comece construindo T

exatamente como T at chegar a


2
. Como
2
rotulado pela mesma
varivel que
1
, podemos construir a partir dele a mesma A-rvore que
estava associada a
1
emT , como mostra a gura 2. Note que os trechos
da colheita da rvore T da gura 1 marcados como v e y aparecem
repetidos emT

. Como T

uma rvore de derivao em(, sua colheita


um elemento de L(() no qual os trechos x e y de c(T ) aparecem
bombeados. Naturalmente o processo acima pode ser repetido quantas
vezes quisermos, de modo que podemos bombear estes trechos qualquer
nmero de vezes.
Para que esta propriedade do bombeamento possa ser usada para
provar que uma linguagem no livre de contexto precisamos formul-
la de maneira mais precisa. Alm disso, como no caso do lema cor-
respondente para linguagens regulares, incluiremos algumas condies
96 11. LINGUAGENS QUE NO SO LIVRES DE CONTEXTO
FIGURA 2. Bombeando uma vez
tcnicas extras que reduzem o nmero de possveis decomposies da
palavra a ser bombeada que precisamos considerar. De fato, h vrias
verses diferentes do lema do bombeamento para linguagens livres de
contexto. A que apresentamos aqui no a mais forte, mas suciente
para cobrir muitos dos exemplos mais simples. Verses mais sostica-
das so discutidas em [2, Chapter 6, p. 125].
LEMA DO BOMBEAMENTO. Seja ( uma gramtica livre de con-
texto. Existe um nmero inteiro , que depende de (, tal que, se w
L(() e [w[ , ento existe uma decomposio de w na forma w =
uvxyz, onde
(1) vy = ;
(2) [vxy[ ;
(3) uv
n
xy
n
z L((), para todo n 0.
DEMONSTRAO. Suponhamos que ( tem k variveis; neste caso
escolheremos = (()
k+1
. Seja w L(() uma palavra com compri-
mento maior que . J sabemos, pelo teorema da seo 4 do captulo
10, que tm que existir rvores de derivao com colheita w. Entre to-
das estas rvores escolha uma, que chamaremos de T , que satisfaa a
seguinte propriedade:
Hiptese 1: T tem o menor nmero possvel de folhas entre to-
das as rvores de derivao de colheita w em (.
2. LEMA DO BOMBEAMENTO 97
Como a colheita de T tem comprimento maior que = (()
k+1
,
segue do lema da seo 1 que T tem altura pelo menos k+1. Chamando
de C o mais longo caminho em T que vai de sua raiz a uma folha, con-
clumos que C tem, pelo menos, k +1 arestas. Logo C tem, no mnimo,
k + 2 vrtices. Como s pode haver uma folha num tal caminho, ento
C tem k + 1 vrtices interiores. Contudo k o nmero de variveis
da gramtica, e cada vrtice de C est rotulado por uma varivel. Por-
tanto, pelo princpio da casa do pombo, h dois vrtices diferentes em
C rotulados pela mesma varivel. Entre todos os pares de vrtices de
C rotulados pela mesma varivel, escolha aquele que satisfaz a seguinte
propriedade:
Hiptese 2: o vrtice
1
precede o vrtice
2
e todos os vrtices
de C entre
1
e a folha so rotulados por variveis distintas.
Lembre-se que as rvores que estamos considerando so grafos orien-
tados. Portanto, C um caminho orientado; logo faz sentido dizer, de
dois vrtices de C, que um precede o outro.
Seja A a varivel que rotula
1
e
2
. Temos ento duas A-rvores:
T
1
, com raiz em
1
, e T
2
com raiz em
2
. Denotaremos por x a colheita
de T
2
. Observe que, como
1
precede
2
ao longo de C, ento x uma
subpalavra da colheita de T
1
. Assim, podemos decompor a colheita
de T
1
na forma vxy. A relao entre estas rvores e suas colheitas
ilustrada na gura 1.
Entretanto, pela hiptese 2, o caminho (ao longo de C) que vai de

1
folha tem, no mximo, k + 2 vrtices (contando com a folha, que
rotulada por um terminal!). Alm disso, como C o mais longo ca-
minho que vai da raiz de T a uma folha, o trecho de C que comea em

1
o mais longo caminho em T
1
entre sua raiz (que
1
) e uma fo-
lha. Portanto, T
1
tem altura no mximo k + 1. Conclumos, utilizando
novamente o lema da seo 1 que, como vxy a colheita de T
1
, ento
[vxy[ (()
k+1
= .
Isto prova (2) do enunciado do lema.
Considere agora o que acontece na construo de T quando chega-
mos a
2
. Este vrtice rotulado pela varivel A e a ele est associ-
ada uma regra que tem A do lado esquerdo da seta. Mas suponha que,
chegados a
2
, decidimos aplicar a mesma regra que aplicamos quando
chegamos a
1
. Podemos fazer isto porque esta tambm uma regra que
tem A do lado esquerdo. Se continuarmos, vrtice a vrtice, copiando o
trecho da rvore T hachurado na gura, teremos uma nova rvore gra-
matical em(, cuja colheita uv
2
xy
2
z. Se repetirmos este procedimento
98 11. LINGUAGENS QUE NO SO LIVRES DE CONTEXTO
n vezes, obteremos uma rvore cuja colheita uv
n
xy
n
z. Isto prova (3)
quando n > 0.
Por outro lado, ao chegar ao vrtice
1
, tambm podemos usar a
regra associada a
2
e continuar a construir a rvore como se fosse T
2
.
Neste caso obteremos uma rvore T
0
com menos vrtices que T e com
colheita uxz, que corresponde a tomar n = 0 em (3).
S nos resta mostrar que vy = . Mas se vy fosse igual a ento
a rvore T
0
, construda no pargrafo anterior, teria colheita igual a w,
e menos folhas que T , o que contradiz a hiptese 1. Portanto, vy =
e provamos (1), concluindo assim a demonstrao do lema do bombea-
mento.
3. Exemplos
Veremos a seguir que vrias das linguagens que j encontramos an-
teriormente, e outras que ainda vamos encontrar frente, no so li-
vres de contexto. Antes, porm, precisamos discutir como o lema do
bombeamento utilizado para provar que uma linguagem no livre de
contexto.
Digamos que L uma linguagem que voc suspeita no ser livre de
contexto. Para aplicar o lema do bombeamento a L usamos a mesma
estratgia j utilizada no caso de linguagens regulares. Assim,
(1) suporemos, por contradio, que L gerada por uma gramtica
livre de contexto;
(2) escolheremos uma palavra w L de comprimento maior que
;
(3) mostraremos que no h nenhuma maneira possvel de decom-
por w na forma do lema do bombeamento, de modo que w
tenha subpalavras bombeveis.
Com isto podemos concluir que L no livre de contexto.
claro que, se o seu palpite estiver errado e L for livre de contexto,
ento voc no chegar a nenhuma contradio. Por outro lado, o fato
de uma contradio no ter sido obtida no signica que L livre de
contexto.
Como no caso das linguagens regulares, a escolha da palavra em (2)
depende de , uma varivel inteira positiva. Alm disso, escolher w de
maneira a obter facilmente uma contradio envolve uma certa dose de
tentativa e erro. Finalmente, por causa da maneira mais complicada de
decompor w, podemos ter vrios casos a analisar antes de esgotar todas
as possibilidades. Vejamos alguns exemplos.
3. EXEMPLOS 99
Exemplo 1. J havamos dito no captulo 7 que a linguagem
L
abc
= a
n
b
n
c
n
: n 0
no livre de contexto. Temos, agora, as ferramentas necessrias para
provar que isto verdade.
Suponha, por contradio, que L
abc
livre de contexto. Pelo lema
do bombeamento existe um inteiro positivo tal que, se n > , ento
possvel decompor w = a
n
b
n
c
n
na forma w = uvxyz, onde:
(1) vy = ;
(2) [vxy[ ;
(3) uv
n
xy
n
z L
abc
para todo n 0.
Como n > mas [vxy[ , temos que vxy no pode conter, ao
mesmo tempo, as, bs e cs. Digamos que vxy s contenha as e bs. Neste
caso, nem v, nem y, podem conter c, mas vy tem que conter pelo menos
um a ou um b. Assim, quando n > 1 o nmero de as ou bs em uv
n
xy
n
z
tem que ser maior que n, ao passo que o nmero de cs no foi alterado, e
continua sendo n. O caso em que vxy s contm bs e cs pode ser tratado
de maneira anloga. Portanto, uv
n
xy
n
z / L
abc
o que contradiz o lema
do bombeamento. Conclumos que, de fato, L no uma linguagem
livre de contexto.
Exemplo 2. No captulo 3 vimos que a linguagem
L
primos
= 0
p
: p um primo positivo,
no regular. Como j sabemos que h linguagens livres de contexto
que no so regulares, faz sentido perguntar se esta linguagem livre de
contexto. A resposta no.
Suponhamos, por contradio, que L
primos
seja livre de contexto.
Ento, de acordo com o lema do bombeamento, deve existir um inteiro
positivo tal que se p umprimo maior que , ento podemos decompor
0
p
na forma 0
p
= uvxyz, onde
(1) vy = ;
(2) [vxy[ ;
(3) uv
n
xy
n
z L
primos
para todo n 0.
Mas u, v, x, y e z so todas palavras em 0

. Logo existem inteiros


m, r, s, t 0 tais que
u = 0
m
, v = 0
r
, x = 0
s
, y = 0
t
e z = 0
prst
.
Alm disso, segue de (1) que r + t > 0, e de (3) que
uv
n
xy
n
z = 0
m
(0
r
)
n
0
s
(0
t
)
n
0
prst
= 0
p+(r+t)(n1)
100 11. LINGUAGENS QUE NO SO LIVRES DE CONTEXTO
pertence a L
primos
para todo n > 0. Mas, para que esta ltima armao
seja verdadeira, os nmeros p +(r +t)(n 1) tm que ser primos para
todo n 0. Tomando n = p + 1 temos que
p + (r + t)(n 1) = p(1 + r + t),
composto, pois r + t > 0; uma contradio. Portanto, L
primos
no
uma linguagem livre de contexto.
Exemplo 3. Considere, agora, a linguagem
L
rr
= rr : s (0 1)

.
J vimos no captulo 3 que esta linguagem no regular, queremos pro-
var que tambm no livre de contexto.
Suponhamos, por contradio, que L
rr
livre de contexto. Aprovei-
tando uma idia j usada no captulo 3, escolhemos w = 0
m
10
m
1 como
nossa primeira tentativa. Entretanto, escolhendo = 3 e decompondo
0
m
10
m
1 na forma
u = 0
m1
, v = 0, x = 1, y = 0 e z = 0
m1
1,
vericamos que todas as condies do lema do bombeamento so sa-
tisfeitas. Portanto, no possvel chegar a uma contradio escolhendo
r = 0
m
1.
A sada escolher uma palavra mais complexa. Observe que, no
exemplo acima, a decomposio proposta no funcionaria se o nmero
de 1s tambm dependesse de m. Isto sugere que devemos escolher r =
0
m
1
m
.
Supondo, por contradio, que L
rr
livre de contexto e escolhendo
w = 0
m
1
m
0
m
1
m
temos, pelo lema do bombeamento, que se m
ento w pode ser decomposta na forma
0
m
1
m
0
m
1
m
= uvxyz
de modo que as condies (1), (2) e (3) do lema do bombeamento sejam
satisfeitas. H dois casos a considerar.
O primeiro caso consiste em supor que vxy uma subpalavra do
primeiro 0
m
1
m
. Escrevendo 0
m
1
m
= uvxyz

, onde z = z

0
m
1
m
, te-
mos que
2m < [uv
2
xy
2
z

[ 2m + .
Isto signica que yz

foi deslocado [vxy[ casas para direita. Contudo,


[vxy[ m
e vxy
2
z

acaba em m uns. Como o segundo 0


m
1
m
no foi bombeado,
temos que o smbolo seguinte ao meio da palavra 1. Em particular, se
uv
2
xy
2
z = rr ento o segundo r comea com 1 e o primeiro com 0, o
3. EXEMPLOS 101
que uma contradio. O caso em que vxy subspalavra do segundo
0
m
1
m
pode ser tratado de maneira anloga.
Finalmente, resta-nos supor que vxy inclui o meio da palavra. Neste
caso, vxy tem que ser subpalavra de 1
m
0
m
, j que [vxy[ m.
Assim, ou v contm algum 1 ou y algum 0. Removendo-os, conclumos
que uxz = 0
m
1
s
0
t
1
m
, onde s ou t (ou ambos) so menores que m.
Entretanto, se 0
m
1
s
0
t
1
m
= rr ento r comea em 0 e acaba em 1,
de forma que precisamos ter s = m = t, o que uma contradio.
Conclumos que L
rr
no livre de contexto.
Exemplo 4. Vimos na seo 4 do captulo 7 que a unio, concatenao
e estrela de linguagens livres de contexto tambm livre de contexto.
Resta-nos analisar o que acontece com a interseco e o complemento
de linguagens livres de contexto.
Considere, por exemplo as linguagens
L
1
= a
i
b
j
c
k
: i, j, k 0 e i = j, e
L
2
= a
i
b
j
c
k
: i, j, k 0 e j = k.
J vimos no captulo 7 que estas duas linguagens so livres de contexto.
Entretanto,
L
1
L
2
= a
i
b
j
c
k
: i = j e j = k.
Em outras palavras, L
1
L
2
= L
abc
. Porm, mostramos no exemplo 1
acima que esta linguagem no livre de contexto. Assim, a interseco
de duas linguagens livres de contexto pode no ser livre de contexto.
E quanto ao complemento? J sabemos do captulo 5, que existe
uma maneira de relacionar o complemento e a interseco de duas lin-
guagens atravs da unio. Como a interseco de linguagens livres de
contexto no necessariamente livre de contexto, seria de esperar que
o mesmo valesse para o complemento. Provaremos isto argumentando
por contradio.
Suponhamos, por contradio, que o complemento de linguagens
livres de contexto seja livre de contexto. Como L
1
e L
2
so livres de
contexto, ento L
1
e L
2
tambm sero. Mas a unio de linguagens livres
de contexto livre de contexto. Portanto, L
1
L
2
livre de contexto.
Usando mais uma vez a hiptese sobre o complemento, conclumos que
(L
1
L
2
) = L
1
L
2
,
livre de contexto. Entretanto j vimos que isto falso neste caso.
Portanto, o complemento de linguagens livres de contexto pode no ser
livre de contexto.
102 11. LINGUAGENS QUE NO SO LIVRES DE CONTEXTO
Note que nossa concluso diz apenas que a interseco e o comple-
mento de linguagens livres de contexto pode no ser livre de contexto.
Isto porque, em muitos casos, estas operaes produzem linguagens li-
vres de contexto. Por exemplo, toda linguagem regular livre de con-
texto; e j vimos que a interseco e o complemento de linguagens regu-
lares regular. Portanto, neste caso estamos intersectando ou tomando
o complementar de linguagens livres de contexto e obtendo como resul-
tado uma linguagem do mesmo tipo. possvel aperfeioar este resul-
tado, e mostrar que a interseco de uma linguagem livre de contexto
com uma linguagem regular sempre livre de contexto. Mas, para fazer
isto, precisamos usar os autmatos de pilha que sero introduzidos no
prximo captulo.
4. Exerccios
1. Mostre que nenhuma das linguagens abaixo livre de contexto usando
o lema do bombeamento.
(a) a
2
n
: n primo;
(b) a
n
2
: n 0;
(c) a
n
b
n
c
r
: r n;
(d) o conjunto das palavras em a, b, c

que tm o mesmo nmero


de as e bs, e cujo nmero de cs maior ou igual que o de as;
(e) 0
n
1
n
0
n
1
n
: n 0;
(f) rrr : s (0 1)

;
(g) wcwcw : w 0, 1

;
(h) 0
n!
: n 1;
(i) 0
k
1
k
0
k
: k 0;
CAPTULO 12
Autmatos de Pilha
Neste captulo comeamos a estudar a classe de autmatos que aceita
as linguagens livres de contexto: os autmatos de pilha no determins-
ticos. Ao contrrio dos autmatos nitos, os autmatos de pilha tm
uma memria innita. Contudo o acesso a esta memria feito de ma-
neira extremamente restrita, uma vez que o ltimo item que foi posto na
memria obrigatoriamente o primeiro a ser consultado.
1. Heurstica
Suponhamos que L uma linguagem livre de contexto em um al-
fabeto . Nesta seo consideramos como construir um procedimento
que, tendo como entrada uma palavra w no alfabeto , determina se
w pertence ou no a L. Como sempre, assumiremos que w lida, um
smbolo de cada vez, da esquerda para a direita.
Nossos procedimentos utilizaro uma memria innita, em forma
de pilha. Para tornar o problema mais concreto, podemos imaginar que
esta memria constituda por discos perfurados ao meio, que so em-
pilhados em uma haste. Os discos vm em vrias cores e temos um es-
toque innito deles. Alm disso, a haste pode ser feita to longa quanto
for necessrio.
Para lembrar alguma coisa, enamos discos coloridos na haste.
Como os discos esto trespassados pela haste, s possvel remov-los
um a um, comeando sempre pelo que est mais acima.
Nosso primeiro exemplo a linguagem L
1
formada pelas palavras
no alfabeto a, b, c que so da forma vcv
R
, onde v uma palavra qual-
quer nos as e bs. Por exemplo, as palavras abaacaaba e bbacabb per-
tencem a L
1
, mas abcab e abba no pertencem. fcil mostrar que esta
103
104 12. AUTMATOS DE PILHA
linguagem no regular usando o lema do bombeamento; portanto, no
existe nenhum autmato nito que a aceite.
Para poder construir um procedimento que verica se uma dada pa-
lavra de a, b, c pertence ou no a L
1
precisamos ter uma maneira de
lembrar exatamente qual a seqncia de as e bs que apareceu antes
do c. Comparamos, ento, esta seqncia com a que vem depois do c.
Faremos isto usando uma pilha e duas cores diferentes de discos:
preto e branco. Procedemos da seguinte forma:
Etapa 1: Se achar a empilhe um disco preto na haste, e se achar
b, um disco branco.
Etapa 2: Se achar c, mude de atitude e prepare-se para desempi-
lhar discos.
Etapa 3: Compare o smbolo que est sendo lido com o que est
no topo da pilha: se l a e o topo da pilha ocupado por um
disco preto, ou se l b e o topo ocupado por um disco branco,
desempilhe o disco.
Este procedimento obedece ainda a uma instruo que no foi explici-
tada acima, e que diz: se em alguma situao nenhuma das etapas acima
puder ser aplicada, ento pre de executar o procedimento.
Por exemplo, se a palavra dada for w = abcba, o procedimento se
comporta da seguinte maneira:
Acha Faz Pilha Resta na entrada
a empilha disco preto bcba
b empilha disco branco

cba
c muda de atitude

ba
b compara e desempilha a
a compara e desempilha
Observe que a pilha registra os smbolos de w que antecedem o c
de baixo para cima. Os discos da pilha, por sua vez, so comparados,
de cima para baixo, com a parte da palavra que sucede o c. Assim, o
reexo da parte da palavra que antecede o c comparado com a parte da
palavra que sucede o c. Portanto, se w L
1
, ento todos os smbolos
de w devem ter sido consumidos e a pilha deve estar vazia quando o
procedimento parar.
Por outro lado, se a palavra no est em L
1
ento podem aconte-
cer duas coisas. A primeira que a entrada no possa ser totalmente
2. DEFINIO E EXEMPLOS 105
consumida por falta de instrues adequadas. Isto ocorre, por exem-
plo, quando a entrada cab. A segunda possibilidade que a entrada
seja totalmente consumida, mas a pilha no se esvazie. Este o caso,
por exemplo, da entrada a
2
bcba. Conclumos que a entrada dever ser
aceita se, e somente se, ao nal da execuo do procedimento ela foi
totalmente consumida e a pilha est vazia.
A instruo de parar nos casos omissos faz com que o procedi-
mento descrito acima seja completamente determinstico. Entretanto,
nem sempre possvel criar um procedimento determinstico deste tipo
para testar se uma palavra pertence a uma dada linguagem livre de con-
texto. Por exemplo, a linguagem
L
2
= vv
R
: v a, b

,
no alfabeto a, b, livre de contexto.
A nica diferena desta linguagem para L
1
que no h um smbolo
especial marcando o meio da palavra. Portanto, se descobrirmos como
identicar o meio da palavra, o resto do procedimento pode ser igual ao
anterior. A sada deixar por conta de quem est executando o procedi-
mento o nus de advinhar onde est o meio da palavra. Como somente
um smbolo da palavra visto de cada vez, a deciso acaba tendo que
ser aleatria. Portanto, tudo o que precisamos fazer alterar a etapa 2,
que passar a ser:
Nova etapa 2: decida (aleatoriamente) se quer mudar de atitude
e passar a desempilhar os discos.
Observe que, se o procedimento determinar que a palavra dada per-
tence a L
2
, ento podemos estar seguros de que isto verdade. Entre-
tanto, como o procedimento no determinstico, uma sada negativa
no garante que a palavra no pertence a L
2
. Podemos apenas ter sido
infelizes na nossa escolha de onde estaria o meio da palavra.
2. Denio e exemplos
Vamos analisar os elementos utilizados na construo destes proce-
dimentos e, a partir deles, sistematizar nossa denio de autmato de
pilha.
Os elementos mais bvios so: o alfabeto de entrada e a pilha. En-
tretanto, em ambos os exemplos temos mudanas de atitude de empilha
para compara e desempilha. Como no caso de autmatos nitos, a ati-
tude dos autmatos de pilha sero codicadas nos estados. Com isto
precisamos tambm de um estado inicial que indica qual a primeira
106 12. AUTMATOS DE PILHA
etapa do procedimento. Finalmente, precisamos de uma funo de tran-
sio que nos diz o que fazer com a entrada (e a pilha!), e que seja
exvel o suciente para codicar procedimentos no determinsticos.
Comparando a anlise acima com a denio de autmato nito,
vericamos que no foi necessrio mencionar estados nais. Anal, a
aceitao de uma entrada pelos nossos procedimentos foi determinada
pelo fato da entrada ter sido totalmente consumida e pelo esvaziamento
da pilha. Apesar disso, introduziremos a noo de estado nal em nossa
denio formal, porque isto nos d maior exibilidade construo
dos autmatos. Sistematizando estas consideraes, obtemos a seguinte
denio.
Um autmato de pilha no determinstico M ca completamente
denido pelos seguintes elementos:
ALFABETO DE ENTRADA: ;
ALFABETO DA PILHA: ;
CONJUNTO DE ESTADOS: Q = q
1
, . . . , q
n
;
ESTADO INICIAL: q
1
;
CONJUNTO DE ESTADOS FINAIS: F Q;
FUNO DE TRANSIO: : Q ( ) ( )
{
f
(Q

).
Como no caso dos autmatos nitos, abreviaremos os elementos de
um autmato nito listando-os em um vetor, sempre na ordem acima.
Portanto, o autmato de pilha M que acabamos de denir tem como
elementos (, , Q, q
1
, F, ).
H algumas consideraes que precisamos fazer sobre a funo de
transio denida acima. A primeira diz respeito ao seu conjunto de
chegada. Se, por analogia com autmatos nitos no determinsticos,
escolhssemos este conjunto como sendo {(Q

), abriramos a pos-
sibilidade de uma quantidade innita de escolhas em uma transio. Isto
porqu, ao contrrio do que ocorria com autmatos nitos, o conjunto
Q

innito. Para evitar este problema, restringimos o conjunto de


chegada a {
f
(Q

), que o conjunto formado pelos subconjuntos


nitos de Q

.
Voltando nossa ateno agora para o conjunto de partida da funo
de transio, note que toma valores em triplas formadas por um estado,
um smbolo do alfabeto de entrada e um smbolo do alfabeto da pilha.
No h nada de muito surpreendente at a, porque estamos tentando
modelar os procedimentos da seo 1, que consultam tanto a entrada
quanto a pilha. Entretanto, diante destas consideraes, esperaramos
2. DEFINIO E EXEMPLOS 107
que o domnio de fosse Q , contudo, o que de fato obtemos
Q( ) ( ).
Isto signica que o autmato pode efetuar uma transio sem consultar
a entrada ou sem consultar a pilha, ou ambos! Portanto podemos esperar
destes autmatos um comportamento ainda mais indeterminstico que
o dos autmatos nitos.
Para poder enquadrar os procedimentos da seo 1 na estrutura da
denio acima precisamos saber como interpretar o comportamento
da funo de transio em termos mais concretos. Digamos que M
um autmato de pilha no determinstico cujos elementos obedecem
notao adotada na denio de autmato de pilha no determinstico.
Suponhamos que
q Q, e .
Dados p Q e u

, a condio
(p, u) (q, , ),
signica que se o autmato M est no estado q, lendo o smbolo na
entrada, e tendo no topo da pilha, ento ao consumir :
M muda para o estado p;
M troca por u no topo da pilha.
Alm disso, se = temos que a entrada no consultada. J quando
= , a transio efetuada sem que o topo da pilha seja consultado.
Note que M pode trocar o smbolo do topo da pilha por uma palavra
inteira. Em termos da pilha de discos perfurados da seo anterior isto
signica que o disco do alto da pilha pode ser trocado por uma pilha de
vrios discos em uma nica transio.
O fato de u poder ser uma palavra qualquer de

inclui a possibi-
lidade de u ser . Mas o que signica trocar por no topo da pilha?
Como no tem smbolos, retiramos e no pusemos nada no seu lugar.
Portanto foi apenas removido da pilha.
Vale a pena enumerar os vrios casos em que aparece para no
deixar dvidas quanto interpretao correta de cada um:
108 12. AUTMATOS DE PILHA
Caso Interpretao
= a entrada no consultada
= o topo da pilha no consultado
= = nem a entrada, nem o topo da pilha so consultados
= e u = remove da pilha
= e u = empilha u
= e u = no altera a pilha
O que vimos j suciente para que possamos adaptar os procedi-
mentos da seo 1 ao modelo de autmato de pilha no determinstico.
Analisando o procedimento que aceita a linguagem L
1
, vemos que
h apenas uma mudana de atitude, que corresponde passagem de em-
pilha para desempilha. Isto signica que o autmato de pilha
1
que
desejamos construir deve ter dois estados, digamos q
1
e q
2
.
No primeiro estado,
1
pe um smbolo diferente na pilha para
cada a ou b encontrado na entrada. Para facilitar, podemos imaginar que
o alfabeto da pilha a, b. Assim, para cada a achado na entrada, o
autmato acrescenta um a no topo da pilha; e para cada b da entrada,
um b acrescentado ao topo da pilha. Temos assim as duas transies
(q
1
, a, ) = (q
1
, a),
(q
2
, b, ) = (q
2
, b).
Note o indicando que um smbolo empilhado, no importando o que
esteja no topo da pilha.
Por outro lado, ao achar um c na entrada
1
muda de atitude,
preparando-se para passar a desempilhar. Como esta mudana de ati-
tude ocorre sem que nada seja feito pilha, temos a transio
(q
1
, c, ) = (q
2
, ).
J no estado q
2
, o autmato passa a comparar o smbolo da entrada com
o que est no topo da pilha. Se os smbolos na entrada e na pilha coinci-
dem, o autmato remove o smbolo que est no topo da pilha. Portanto,
(q
2
, a, a) = (q
2
, ),
(q
2
, b, b) = (q
2
, ).
Para completar a descrio de
1
precisamos ainda decidir sobre
seu estado inicial e seus estados nais. No h problema quanto ao
estado inicial que, claramente, deve ser q
1
. E quanto aos estados nais?
De acordo com a denio do procedimento em 1, uma palavra aceita
2. DEFINIO E EXEMPLOS 109
quando for inteiramente consumida e a pilha estiver vazia. Mas isso s
pode acontecer quando o estado nal for q
2
. Como razovel esperar
que, se o autmato aceita a entrada, ento parou em um estado nal,
vamos declarar q
2
como sendo nal.
A descrio do autmato acima seria, sem dvida, mais fcil de
interpretar se tivssemos uma maneira mais compacta de descrever as
transies. Como no caso dos autmatos nitos, faremos isto usando
uma tabela que, alm da palavra de entrada e do estado, registrar o que
o autmato faz pilha.
Suponhamos que temos um autmato de pilha e que q, p
1
, . . . , p
s
so estados, um smbolo do alfabeto de entrada, um smbolo do
alfabeto da pilha e u
1
, . . . , u
s
palavras no alfabeto da pilha. Uma tran-
sio
(q, , ) = (p
1
, u
1
), . . . , (p
s
, u
s
),
corresponder a uma entrada da seguinte forma na tabela:
estado entrada topo da pilha transies
q (p
1
, u
1
)
.
.
.
(p
s
, u
s
)
Observe que os diferentes pares (estado, smbolo da pilha) de uma
mesma transio so listados um sobre o outro sem uma linha divisria.
As linhas horizontais da tabela separaro transies distintas uma da
outra. Em muitos casos conveniente acrescentar a este modelo bsico
de tabela uma quinta coluna com comentrios sobre o que o autmato
est fazendo naquela transio. claro que estes comentrios no fazem
parte da descrio formal do autmato de pilha, eles apenas nos ajudam
a entender como ele se comporta.
Utilizando esta notao, a tabela do autmato
1
seguinte:
110 12. AUTMATOS DE PILHA
estado entrada topo da pilha transies comentrios
q
1
a (q
1
, a) acha a e empilha a
q
1
b (q
1
, b) acha b e empilha b
q
1
c (q
2
, ) acha c e muda de estado
q
2
a a (q
2
, ) acha a na entrada e pilha
e o desempilha
q
2
b b (q
2
, ) acha b na entrada e pilha e o
desempilha
No caso da linguagem L
2
da seo 1, o procedimento que criamos
era no determinstico. Por isso, para model-lo como um autmato
de pilha precisamos dar ao autmato a capacidade de, a qualquer mo-
mento, alterar o seu comportamento, deixando de empilhar e passando
a desempilhar. Assim, enquanto est no estado q
1
o autmato pode ter
duas atitudes:
Primeira: vericar qual o smbolo de entrada e acrescentar o
smbolo correspondente ao topo da pilha; ou
Segunda: ignorar a entrada e a pilha, mudar de estado e passar a
desempilhar.
Levando em conta estas consideraes, obtemos um autmato de pilha

2
que tema, b como alfabeto de entrada e da pilha; estados q
1
e q
2
;
estado inicial q
1
, estado nal q
2
e funo de transio dada por:
estado entrada topo da pilha transies comentrios
q
1
a (q
1
, a) acha a e empilha a
q
1
b (q
1
, b) acha b e empilha b
q
1
(q
2
, ) muda de estado
q
2
a a (q
2
, ) acha a na entrada e pilha e o
desempilha
q
2
b b (q
2
, ) acha b na entrada e pilha e o
desempilha
Observe que vale para a tabela a ressalva feita para os procedimen-
tos na seo 1. Isto , se surgir uma situao que leve a uma transio
que no esteja especicada na tabela, ento o autmato pra de se mo-
ver. Alis, o mesmo valia para os autmatos nitos no determinsticos.
3. COMPUTANDO E ACEITANDO 111
3. Computando e aceitando
Apesar de j termos uma descrio formal dos autmatos de pilha,
ainda precisamos denir de maneira precisa o que signica umautmato
de pilha aceitar uma linguagem. Faremos isto adaptando as noes cor-
respondentes da teoria de autmatos nitos.
Seja M um autmato de pilha cujos elementos so dados pelo vetor
(, , Q, q
1
, F, ). Uma congurao de M um elemento de Q

; ou seja, uma tripla (q, w, u) onde


q um estado de M;
w uma palavra no alfabeto de entrada;
u uma palavra no alfabeto da pilha.
Por uma questo de coerncia com a maneira como a palavra w lida,
listamos os elementos da pilha em u de modo que o topo da pilha cor-
responda ao smbolo mais esquerda de u.
Como ocorreu com os autmatos nitos, a nalidade desta denio
permitir que possamos acompanhar de maneira simples o comporta-
mento de M com uma dada entrada. Portanto, esta denio s faz sen-
tido quando vem conjugada relao congurao seguinte. Suponha-
mos que C = (q, w, u) uma congurao de M, onde ,
. Dizemos que C

= (q

, w, vu) uma das conguraes


seguintes a C se
(q

, v) (q, , ).
Neste caso, escrevemos C
M
C

.
Uma computao de M uma seqncia de conguraes C
0
, , C
k
tais que C
i+1
uma das conguraes seguintes a C
i
. Freqentemente
abreviaremos a computao acima na forma C
0

k
M
C
k
, j que, na mai-
oria dos casos, estaremos interessados apenas nas conguraes com
as quais a computao comea e termina. Se o nmero de etapas da
computao no for conhecido, ou no for relevante para as nossas con-
sideraes, escreveremos apenas C
0

M
C
k
. Usaremos em lugar de

M
a no ser que haja risco de confuso sobre qual o autmato que est
sendo considerado.
Como no caso de autmatos nitos, convencionaremos que se C
uma congurao, ento C
0
C, e tambm C

C. Note, contudo,
que C
0
C no equivalente a uma transio com entrada vazia. Por
exemplo, o autmato
2
satisfaz
(q
1
, , ) (q
2
, , ).
Mas, apesar da entrada e da pilha no terem sido alteradas, as congu-
raes inicial e nal no coincidem.
112 12. AUTMATOS DE PILHA
Vejamos estas denies em ao em alguns exemplos. Partindo da
congurao (q
1
, abcba
2
, a) temos a seguinte computao no autmato

1
da seo 2:
(q
1
, abcba
2
, a) (q
1
, bcba
2
, a
2
) (q
1
, cba
2
, ba
2
) (q
2
, ba
2
, ba
2
) (q
2
, a
2
, a
2
)
(q
2
, a, a) (q
2
, , ).
Esta , essencialmente, a nica computao possvel partindo de (q
1
, abcba
2
, a).
A nica coisa que podemos fazer para obter uma computao diferente
interromper a computao acima antes de chegar a (q
2
, , ). Entretanto,
isto est longe de ser sempre verdade, como mostra o exemplo seguinte.
Desta vez queremos considerar o autmato de pilha
2
denido ao
nal da seo 2. Digamos que a congurao inicial seja (q
1
, a
2
b, ).
Uma computao possvel
(q
1
, a
2
b, ) (q
1
, ab, a) (q
1
, b, a
2
) (q
2
, b, a
2
).
Mas h muitas outras possibilidades, como:
(q
1
, a
2
b, ) (q
2
, a
2
b, )
ou ainda
(q
1
, a
2
b, ) (q
1
, ab, a) (q
2
, ab, a).
A diferena que o primeiro autmato era basicamente determinstico,
ao passo que este ltimo claramente no determinstico.
Supondo, como antes, que M um autmato de pilha cujos elemen-
tos so dados pelo vetor (, , Q, q
1
, F, ), diremos que uma palavra
w

aceita por M se existe uma computao


(q
1
, w, )

(p, , ),
onde p um estado nal de M. Como j ocorria no caso de autma-
tos nitos no determinsticos, basta que exista uma computao como
acima para que a palavra seja aceita. A linguagem L(M) aceita por M
o conjunto de todas as palavras que M aceita.
Em geral no fcil determinar por simples inspeco qual a lingua-
gem aceita por um autmato de pilha no determinstico dado. Contudo,
veremos no prximo captulo que possvel construir uma gramtica li-
vre de contexto que gere L(M) diretamente da descrio de M.
Observe que trs condies precisam ser simultaneamente satis-
feitas para que possamos armar, ao nal de uma computao, que M
aceita w:
(1) a palavra w tem que ter sido completamente consumida;
(2) a pilha tem que estar vazia;
(3) o autmato tem que ter atingido um estado nal.
4. VARIAES EM UM TEMA 113
A condio referente ao estado nal no aparece na descrio dos pro-
cedimentos na seo 1. De fato, ela surgiu na denio formal de aut-
mato de pilha sob a pa justicativa de que seria razovel exigir que o
autmato parasse aceitando num estado nal!
Como sempre acontece, a exigncia de que o autmato tenha que
atingir um estado nal para que a entrada seja aceita simplica a cons-
truo de alguns autmatos e complica a de outros. A verdade que,
como o exerccio 7 mostra, teria sido possvel suprimir toda meno a
estados nais, embora isto no seja desejvel do ponto de vista do de-
senvolvimento da teoria.
4. Variaes em um tema
Nesta seo discutimos a construo de autmatos de pilha para trs
linguagens denidas de maneira muito semelhante. Com isto teremos a
oportunidade de chamar a ateno para algumas diculdades comuns;
alm de desenvolver tcnicas simples, mas teis, na construo de aut-
matos mais sosticados.
Exemplo 1. Consideremos, em primeiro lugar, a linguagem livre de
contexto
L = a
i
b
i
: i 0,
fcil descrever um procedimento extremamente simples que usa uma
pilha com apenas um tipo de disco para aceitar as palavras de L:
Etapa 1: Se achar um a na entrada, ponha um disco na pilha.
Etapa 2: Se achar um b na entrada mude de atitude e passe a
comparar a entrada com a pilha, removendo um disco da pilha
para cada b que achar na entrada (incluindo o primeiro!).
Para precisar o comportamento do autmato de maneira a no deixar
dvida sobre o que ele realmente faz basta construir sua tabela de tran-
sio.
estado entrada topo da pilha transies comentrios
q
1
a (q
1
, a) empilha a
q
1
b a (q
2
, ) desempilha a e muda de estado
q
2
b a (q
2
, ) desempilha a
claro que queremos que q
1
seja o estado inicial, mas precisamos
tomar cuidado com a escolha dos estados nais. A primeira impresso
talvez seja que q
2
o nico estado nal. Entretanto, o autmato s pode
114 12. AUTMATOS DE PILHA
alcanar q
2
se houver algum smbolo na entrada, o que faria com que o
autmato no aceitasse .
H duas solues possveis. A primeira declarar que q
1
tambm
um estado nal. Isto com certeza faz com que seja aceita. Porm,
precisamos nos certicar de que a incluso de q
1
entre os estados nais
no cria novas palavras aceitas que no pertencem a L. Fazemos isto
analisando em detalhes o comportamento do autmato. Suponhamos,
ento, que = w a, b

e que o autmato recebe w como entrada.


Temos que:
se w comea por b ento nenhum de seus smbolos consu-
mido;
se w comea por a ento os as so empilhados e para desempilh-
los preciso chegar ao estado q
2
.
No primeiro caso a palavra no ser aceita; no segundo, s ser aceita
se os as so seguidos pelo mesmo nmero de bs e nada mais. Ou seja,
se declaramos que os estados nais so q
1
, q
2
ento o autmato resul-
tante aceita L.
A segunda possibilidade alterar as transies e dar ao autmato a
alternativa de, sem consultar a entrada ou a pilha, mudar de estado de
q
1
para q
2
. Neste caso, o nico estado nal q
2
. Alm disso, a tran-
sio que vamos acrescentar torna completamente redundante a terceira
linha da tabela acima. A tabela que descreve a funo de transio do
autmato passa, ento, a ser:
estado entrada topo da pilha transies comentrios
q
1
(q
2
, ) muda de estado
q
1
a (q
1
, a) empilha a
q
2
b a (q
2
, ) desempilha a
O problema com esta ltima estratgia que a transio que acres-
centamos pode ser executada enquanto o autmato est no estado q
1
,
no importando o que est sendo lido, nem o que h na pilha. Para ter
certeza que tudo ocorre como esperado, devemos analisar o que o aut-
mato faria se usasse esta transio no momento errado. Em primeiro
lugar, se o autmato est no estado q
1
ento ele no pode se mover ao
ler b, a no ser que ignore a entrada e mude para o estado q
2
. Portanto,
o autmato se comportar de maneira anmala apenas se ainda estiver
lendo a e executar a transio que permite mudar de estado sem afetar a
entrada nem a pilha. Neste caso ainda haveria as a serem lidos. Como
o autmato no se move se est no estado q
2
e l a, ento a computao
4. VARIAES EM UM TEMA 115
simplesmente pra. A concluso que o autmato continua aceitando o
que devia apesar da alterao na tabela de transio.
Exemplo 2. A linguagem deste segundo exemplo uma generalizao
da que aparece no primeiro. Seja L a linguagem formada pelas pala-
vras w a, b para as quais o nmero de as e bs o mesmo. Assim,
abaaabbabb L, mas aaabaa / L. Observe que a linguagem do exem-
plo anterior est contida em L.
primeira vista, podemos construir umautmato de pilha que aceite
L usando a mesma estratgia do Exemplo 1. Isto , quando achamos a
empilhamos a e quando achamos um b desempilhamos um a. O pro-
blema o que fazer quando nos deparamos comuma palavra como abba.
Neste caso comearamos empilhando um a, mas em seguida teramos
de desempilhar dois as. S que h apenas um a na pilha: como seria
possvel desempilhar mais as do que h na pilha?
A estratgia que vamos adotar consiste em construir um contador
que:
ao achar a soma 1 ao contador;
ao achar b soma 1 ao contador.
Poderamos fazer isto usando 1, 1 como alfabeto da pilha, entre-
tanto, palavras como 1 1 esto demasiadamente sujeitas a causar
confuso. Por isso, vamos simplesmente empilhar a para cada a encon-
trado na entrada, e b para cada b encontrado na entrada. S precisamos
lembrar que empilhar um b sobre um a tem o efeito de desempilhar o
b da pilha, e vice-versa.
O que ocorre quando aplicamos esta estratgia palavra abba? O
primeiro a contribui um a para a pilha, que por sua vez removido pelo
b seguinte. Portanto, depois de ler o prexo ab o autmato est com a
pilha vazia. Em seguida aparece um b e o autmato pe um b na pilha.
Este b seguido por um a. Portanto teramos que acrescentar um a no
topo da pilha. Mas isto tem o efeito de desempilhar o b anterior, e a
pilha acaba vazia, como desejado.
Parece fcil transcrever esta estratgia em uma tabela de transio,
mas ainda h um obstculo a vencer antes de podermos fazer isto. A-
nal, para que esta estratgia funcione o autmato precisa ser capaz de
detectar que a pilha est vazia. Entretanto, escrever para o topo da
pilha em uma tabela de transio no signica que a pilha est vazia;
signica apenas que o autmato no precisa saber o que est no topo da
pilha ao realizar esta transio.
A sada inventar um novo smbolo para o alfabeto da pilha. Este
smbolo acrescentado pilha ainda vazia, no incio da computao.
116 12. AUTMATOS DE PILHA
Da em diante, o autmato opera apenas com as e bs na pilha. Assim,
ao avistar no topo da pilha o autmato sabe que a pilha no contm
mais nenhum a ou b. Para garantir que s vai ser usado uma vez,
convm reservar ao estado inicial apenas a ao de marcar o fundo da
pilha. Portanto, se q
1
for o estado inicial teremos
(q
1
, , ) = (q
2
, ).
Ao nal desta transio, a entrada no foi alterada, o fundo da pilha
foi marcado e o autmato saiu do estado q
1
para onde no vai poder
mais voltar. O que o autmato deve fazer no estado q
2
est descrito
resumidamente na seguinte tabela:
Acha na entrada Acha na pilha Faz
a ou a empilha a
b ou b empilha b
b a desempilha a
a b desempilha b
Com isto se, ao nal da computao, a pilha contm apenas o mar-
cador ento a palavra est em L e aceita; do contrrio a palavra
rejeitada. Entretanto, pela denio formal, dada na seo 3, o aut-
mato s pode aceitar a palavra se a pilha estiver completamente vazia.
Isto sugere que precisamos de mais uma transio para remover o do
fundo da pilha.
Com isto surge um novo problema. Se a palavra est em L, en-
to ser totalmente consumida deixando na pilha apenas . Portanto, a
transio que remove o ao nal desta computao, e esvazia comple-
tamente a pilha, no tem nenhuma entrada para consultar. O problema
que se permitimos ao autmato remover sem consultar a entrada, ele
pode realizar este movimento no momento errado, antes que a entrada
tenha sido consumida. Como os nossos autmatos so no determinsti-
cos, isto no apresenta nenhum problema conceitual.
Infelizmente o fato de ainda haver smbolos na entrada abre a pos-
sibilidade do autmato continuar a computao depois de ter retirado o
marcador do fundo. Para evitar isto, o autmato deve, ao remover ,
passar a um novo estado q
3
a partir do qual no h transies. Assim, se
o autmato decidir remover o marcador antes da entrada ser totalmente
consumida ele ser obrigado a parar, e no poder aceitar a entrada nesta
computao. Como a pilha s vai poder se esvaziar em q
3
, claro que
este ser o nico estado nal deste autmato.
4. VARIAES EM UM TEMA 117
Resumindo, temos um autmato que tem a, b como alfabeto de
entrada e da pilha; estados q
1
, q
2
e q
3
; estado inicial q
1
; estado nal q
3
;
e cuja funo de transio denida na tabela 1.
estado entrada topo da pilha transies comentrios
q
1
(q
2
, ) marca o fundo da pilha
q
2
a (q
2
, a) acha a e empilha um a
q
2
b (q
2
, b) acha b e empilha um b
q
2
a a (q
2
, aa) acha a e empilha um a
q
2
b b (q
2
, bb) acha b e empilha um b
q
2
b a (q
2
, ) desempilha um a
q
2
a b (q
2
, ) desempilha um b
q
2
(q
3
, ) esvazia a pilha
TABELA 1
Exemplo 3. A terceira linguagem que desejamos considerar o con-
junto das palavras w a, b que tm mais as que bs. Vamos cham-la
de L
3
. primeira vista, pode parecer que autmato essencialmente
igual ao anterior, bastando alterar a condio sob a qual a palavra
aceita. Anal, se ao nal da computao do autmato do Exemplo 2
sobram as na pilha, ento a palavra de entrada tem mais as que bs. Mas
surgem alguns problemas tcnicos quando tentamos implementar esta
estratgia.
A primeira diculdade que no temos como codicar nas transi-
es o fato de no haver mais smbolos na entrada. A sada permitir
que o autmato tente advinhar isto por conta prpria. Assim, ao achar
um a na pilha, o autmato deve poder decidir que a computao chegou
ao m e, sem consultar a entrada, passar a um estado nal. Natural-
mente uma palavra no ser aceita se a deciso de aplicar esta transio
for tomada antes que a entrada tenha sido completamente consumida.
A segunda diculdade que estamos identicando que uma palavra
est em L
3
porque sobram as na pilha. Entretanto, um dos requisitos
para que uma palavra seja aceita por um autmato de pilha que no
sobrem smbolos na pilha ao nal da computao! Resolvemos este
conito fazendo com que, ao chegar ao estado nal, o autmato possa
esvaziar a pilha sem se preocupar com a entrada.
Tomando por base o autmato do Exemplo 2, teremos que substi-
tuir a transio codicada na ltima linha da tabela, e acrescentar as trs
118 12. AUTMATOS DE PILHA
transies que permitem ao autmato esvaziar a pilha. O autmato re-
sultante ter alfabetos de entrada e da pilha iguais a a, b; estados q
1
,
q
2
e q
3
; estado inicial q
1
; estado nal q
3
; e sua funo de transio ser
dada na tabela 2.
estado entrada topo da pilha transies comentrios
q
1
(q
2
, ) marca o fundo da pilha
q
2
a (q
2
, a) empilha um a
q
2
b (q
2
, b) empilha um b
q
2
a a (q
2
, aa) empilha um a
q
2
b b (q
2
, bb) empilha um b
q
2
b a (q
2
, ) desempilha um a
q
2
a b (q
2
, ) desempilha um b
q
2
a (q
3
, a) decide que a computao acabou
com as sobrando na pilha
q
3
a (q
3
, ) retira a da pilha
q
3
b (q
3
, ) retira b da pilha
q
3
(q
3
, ) retira da pilha
TABELA 2
5. Exerccios
1. Considere o autmato de pilha no determinstico com alfabetos
= a, b e = a, estados q
1
e q
2
, estado inicial q
1
e nal q
2
e
transies dadas pela tabela:
estado entrada topo da pilha transies
q
1
a (q
1
, a)
(q
2
, )
q
1
b (q
1
, a)
q
2
a a (q
2
, )
q
2
b a (q
2
, )
(a) Descreva todas as possveis seqncias de transies de na
entrada aba.
(b) Mostre que aba, aa e abb no pertencem a L() e que baa, bab
e baaaa pertencem a L().
5. EXERCCIOS 119
(c) Descreva a linguagem aceita por em portugus.
2. Ache um autmato de pilha no determinstico cuja linguagem aceita
L onde:
(a) L = a
n
b
n+1
: n 0;
(b) L = a
n
b
2n
: n 0;
(c) L = w 0, 1

: w cujo nmero de as diferente do de bs;


(d) L = a
n
b
m
: m, n 0 e m = n;
(e) L = w
1
cw
2
: w
1
, w
2
a, b

e w
1
= w
r
2
;
3. Um autmato nito no determinstico que aceita a linguagem deno-
tada por 0 0

1 0 no pode ter menos de 4 estados. Construa um


autmato de pilha no determinstico com apenas 2 estados que aceita
esta linguagem.
4. Considere a linguagem dos parnteses balanceados descrita no exer-
ccio 2 da lista 4.
(a) D exemplo de uma gramtica livre de contexto que gere esta
linguagem.
(b) D exemplo de um autmato de pilha no determinstico que
aceita esta linguagem.
5. Esta questo trata da existncia ou inexistncia de computaes in-
nitas.
(a) Explique porque um autmato nito (determinstico ou no) no
admite uma computao com um nmero innito de etapas.
(b) D exemplo de um autmato de pilha no determinstico que ad-
mite uma computao com um nmero innito de etapas.
6. Seja M um autmato de pilha. Mostre como denir a partir de M um
novo autmato de pilha M
s
que aceita a mesma linguagem que M e
que, alm disso, satisfaz s seguintes condies:
(a) a nica transio de M
s
a partir do seu estado inicial i (i, , ) =
(q, ), onde q um estado, um smbolo do alfabeto da pilha
e a funo de transio de
s
;
(b) o nico estado de M
s
a partir do qual h transies sem consultar
a pilha i;
(c) M
s
tem um nico estado nal f;
(d) as transies que desempilham levam o autmato ao estado f;
(e) no h transies a partir de f.
7. Construa uma autmato de pilha no determinstico que aceite o com-
plementar da linguagem
L = ww
R
: w (0 1)

.
120 12. AUTMATOS DE PILHA
8. Seja M um autmato de pilha no determinstico com alfabeto de
entrada , estado inicial q
1
e conjunto de estados Q. A linguagem
que M aceita por pilha vazia denida como:
N(M) = w

: existe (q
1
, w, )

(q, , ) onde q Q.
Note que a diferena entre L(M) e N(M) que, para a palavra ser
aceita em L(M) tem que ser possvel chegar a uma congurao
(q, , ) em que q um estado nal, ao passo que no h restries
sobre o estado no caso de N(M).
(a) D exemplo de um autmato de pilha no determinstico M para
o qual N(M) = L(M).
(b) Mostre que dado um autmato de pilha no determinstico M
existe umautmato de pilha no determinstico M

tal que L(M) =


N(M

).
(c) Mostre que dado um autmato de pilha no determinstico M
existe umautmato de pilha no determinstico M

tal que N(M) =


L(M

).
SUGESTO: use o autmato M
s
construdo no exerccio anterior.
Resoluo do Exerccio 7
Oautmato temalfabeto de entrada 0, 1, alfabeto da pilha , 0, 1,
conjunto de estados q
1
, . . . , q
4
, estado inicial q
1
, estado nal q
4
e a se-
guinte tabela de transio:
5. EXERCCIOS 121
estado entrada topo da pilha transies comentrios
q
1
(q
2
, ) marca o fundo da pilha
q
2
0 (q
2
, 0) empilha 0
q
2
1 (q
2
, 1) empilha 1
q
2
(q
3
, 0) tenta advinhar o meio da entrada
q
3
0 0 (q
3
, ) desempilha 0s casados
q
3
1 1 (q
3
, ) desempilha 1s casados
q
3
0 1 (q
4
, ) acha smbolo descasado
q
3
1 0 (q
4
, ) acha smbolo descasado
q
4
0 0 (q
4
, ) continua a desempilhar
q
4
0 1 (q
4
, ) continua a desempilhar
q
4
1 0 (q
4
, ) continua a desempilhar
q
4
1 1 (q
4
, ) continua a desempilhar
q
4
(q
4
, ) esvazia a pilha
Depois de marcar o fundo da pilha o autmato empilha 0s e 1s at
decidir, de maneira no determinstica, que o meio da palavra de entrada
foi encontrado. Ento, muda de estado e passa a desempilhar em busca
de um smbolo da pilha que no corresponda ao que est vendo na en-
trada. Ao achar um tal smbolo o autmato muda para o estado nal e
esvazia a pilha, comparando-a smbolo a smbolo com a entrada. Pre-
cisamos fazer isto para ter certeza de que o autmato advinhou o meio
da palavra corretamente. Se no sobrarem nem 0s, nem 1s na pilha, o
autmato remove o marcador do fundo e esvazia a pilha.
Note que, se o autmato advinhar incorretamente o meio da palavra,
ento sobraro smbolos na entrada (se advinhar cedo demais) ou na
pilha (se advinhar tarde demais). Em nenhum destes casos a palavra
ser aceita. Um destes casos ocorrer obrigatoriamente se a palavra
tiver comprimento mpar. Finalmente, se a palavra da entrada estiver em
L e se o autmato advinhar corretamente onde est o meio da palavra
ento a entrada ser consumida e todos os 0s e 1s sero removidos da
pilha. Entretanto, como o autmato continua no estado q
3
o marcador do
fundo da pilha no removido, de modo que a pilha no ser esvaziada
e a palvra ser no ser aceita.
CAPTULO 13
Gramticas e autmatos de pilha
Nosso objetivo neste captulo dar uma demonstrao do seguinte
resultado fundamental.
TEOREMA 13.1. Uma linguagem livre de contexto se, e somente
se, aceita por algum autmato de pilha no determinstico.
Como uma linguagem livre de contexto se for gerada por uma
gramtica livre de contexto, o que precisamos fazer estabelecer um
elo entre gramticas livres de contexto e autmatos de pilha.
J temos alguma experincia com este tipo de questo. De fato, pro-
vamos que uma linguagem gerada por uma gramtica linear direita
regular construindo um autmato nito cujas computaes simulam de-
rivaes na gramtica dada. No caso de linguagens livres de contexto a
correspondncia ser entre computaes no autmato de pilha e deriva-
es mais esquerda na gramtica.
Como no caso das linguagens regulares o problema pode ser divi-
dido em dois. Assim, dada uma gramtica livre de contexto ( precisa-
mos de uma receita para construir um autmato de pilha no determi-
nstico que aceite L((). Reciprocamente, dado um autmato de pilha
queremos construir uma gramtica livre de contexto que gere a lin-
guagem aceita por .
1. O autmato de pilha de uma gramtica
Seja ( uma gramtica livre de contexto. Nosso objetivo nesta seo
consiste em construir um autmato de pilha cujas computaes simulem
as derivaes esquerda em(. claro que a pilha temque desempenhar
um papel fundamental nesta simulao. O que de fato acontece que o
123
124 13. GRAMTICAS E AUTMATOS DE PILHA
papel dos estados secundrio, e a simulao se d na pilha. Dizendo
de outra maneira, construiremos um autmato de pilha que simula na
pilha as derivaes mais esquerda em (.
Digamos que a gramtica livre de contexto ( denida pela qu-
drupla de elementos (T, V, S, R), e seja o autmato de pilha a ser
construdo a partir de (. Como deve aceitar L((), claro que seu
alfabeto de entrada tem que ser T. Chamaremos a funo de transio
de de e seu estado inicial de i.
A maneira mais concreta de pr em prtica a idia delineada acima
consiste em escolher o alfabeto da pilha como sendo T V , e fazer cor-
responder a cada derivao de ( uma transio do autmato. Entretanto,
como a derivao de palavras de L(() feita a partir do smbolo inicial
S, o autmato deve comear pondo este smbolo no fundo da pilha. Ob-
serve que o autmato no pode consumir entrada ao marcar o fundo da
pilha, j que precisamos da entrada para gui-lo na busca da derivao
correta. Nem adianta consultar a pilha, j que ainda est totalmente va-
zia. Entretanto, uma transio que no consulta a entrada nem a pilha
pode ser executada em qualquer momento da computao. Por isso for-
amos o autmato a mudar de estado depois desta transio, impedindo
assim que volte a ser executada. Temos, ento, que
(i, , ) = (f, S),
onde f um estado do autmato diferente de i.
Da em diante toda a ao vai se processar na pilha, e podemos si-
mular a derivao sem nenhuma mudana de estado adicional. Portanto,
f ser o estado nal de . Assim, regra X de ( fazemos cor-
responder a transio
(1.1) (f, , ) (f, X)
de . Contudo, a construo do autmato ainda no est completa. O
problema que s pode aplicar uma transio como (1.1) se a vari-
vel X estiver no topo da pilha. Infelizmente isto nem sempre acontece,
como ilustra o exemplo a seguir.
Suponhamos que (
1
a gramtica com terminais a, b, c, varivel
S, smbolo inicial S, e regras
S Sc [aSb [ .
De acordo com a discusso acima o autmato
1
correspondente a (
1
deve ter a, b, c como alfabeto de entrada, a, b, c, S como alfabeto
da pilha e conjunto de estados i, f, onde i o estado inicial e f o
estado nal. Lembrando que a cada regra de (
1
deve corresponder uma
transio de
1
, conclumos que a tabela resultante deve ser
1. O AUTMATO DE PILHA DE UMA GRAMTICA 125
Estado Entrada Topo da pilha Transio
i (f, S)
f S (f, Sc)
(f, aSb)
(f, )
A palavra abc
2
tem derivao mais esquerda
S Sc Sc
2
aSbc
2
abc
2
em (
1
. Resta-nos vericar se somos capazes, ao menos neste exemplo,
de construir uma computao de
1
que copie na pilha esta derivao
de abc
2
. A computao deve comear marcando o fundo da pilha com
S e deve prosseguir, a partir da, executando, uma a uma, as transies
de
1
que correspondem s regras aplicadas na derivao acima. Isto
nos d
(1.2)
(i, abc
2
, ) (f, abc
2
, S) (f, abc
2
, Sc) (f, abc
2
, Sc
2
) (f, abc
2
, aSbc
2
).
At aqui tudo bem, mas a transio seguinte deveria substituir S por .
S que para isto ser possvel a varivel S tem que estar no topo da pilha,
o que no acontece neste caso. Observe, contudo, que o a que apareceu
na pilha acima do S na ltima congurao de (1.2) corresponde ao pri-
meiro smbolo da palavra de entrada. Alm disso, como se trata de uma
derivao mais esquerda, este smbolo no ser mais alterado. Con-
clumos que, como o primeiro smbolo da palavra j foi corretamente
derivado, podemos esquec-lo e partir para o smbolo seguinte. Para
implementar isto na prtica basta apagar da pilha os terminais que pre-
cedem a varivel mais esquerda da pilha e que j foram corretamente
construdos. Isto signica acrescentar tabela acima transies que per-
mitam apagar terminais que apaream simultaneamente na entrada e na
pilha:
Estado Entrada Topo da pilha Transio
f a a (f, )
f b b (f, )
f c c (f, )
Levando isto em conta a computao acima continua, a partir da
ltima congurao de (1.2) da seguinte maneira
(1.3)
(f, abc
2
, aSbc
2
) (f, bc
2
, Sbc
2
) (f, bc
2
, bc
2
) (f, c
2
, c
2
) (f, c, c) (f, , ).
126 13. GRAMTICAS E AUTMATOS DE PILHA
Observe que a passagem da segunda para a terceira congurao em
(1.3) corresponde regra S . Todas as outras etapas so aplicaes
das transies da segunda tabela.
2. A receita e mais um exemplo
Podemos agora descrever de maneira sistematica a receita usada
para construir um autmato de pilha no determinstico cuja lingua-
gemaceita L((). Se a gramtica livre de contexto ( tempor elementos
(T, V, S, R), ento o autmato car completamente determinado pelos
seguintes os elementos:
o alfabeto de entrada T;
o alfabeto da pilha T V ;
o conjunto de estados i, f;
o estado inicial i;
o conjunto de estados nais f;
a funo de transio
: i, f (T ) (T V ) i, f (T V )

que denida por


(q, , ) =

(f, S) se q = i e = =
(f, u) : onde X u regra de ( se q = f e = X V
(f, ) se q = f e = T
Este autmato executa dois tipos diferentes de transio a partir do
estado f. As primeiras permitem substituir uma varivel X no topo da
pilha por u (T V )

quando X u uma regra se (, e sero


chamadas substituies. As segundas permitem remover terminais que
aparecem casados na pilha e na entrada, e vamos cham-las remoes.
Observe que, em geral, este autmato ter um comportamento muito
pouco determinstico porque cada uma de suas transio corresponde
ao conjunto de todas as regras que tm uma mesma varivel do lado
direito.
Vejamos mais um exemplo de autmato de pilha construdo a partir
de uma gramtica livre de contexto pela receita acima. Considere a
2. A RECEITA E MAIS UM EXEMPLO 127
gramtica (

exp
, denida no captulo 9, cujas regras so
E E + T [ T
T T F [ F
F (E) [ id.
O alfabeto de entrada do autmato de pilha

exp
correspondente a esta
gramtica id, +, , (, ), o alfabeto da pilha id, +, , (, ), E, T, F,
os estados so i, f, o estado inicial i, o estado nal f e a funo
de transio denida pela tabela 1.
Estado Entrada Topo da pilha Transio
i (f, S)
f E (f, E + T)
(f, T)
f T (f, T F)
(f, F)
f F (f, (E))
(f, id)
f ( ( (f, )
f ) ) (f, )
f + + (f, )
f (f, )
f id id (f, )
TABELA 1. Tabela de transio
Quando criamos a receita acima, nosso objetivo era inventar um
autmato que aceitasse a linguagem gerada por uma gramtica livre de
contexto dada. Mas para ter certeza de que a receita funciona precisamos
provar o seguinte resultado.
Se ( uma gramtica livre de contexto e o aut-
mato de pilha no determinstico construdo de acordo
com a receita acima, ento L(() = L().
A demonstrao deste resultado consiste em formalizar a relao
entre derivaes mais esquerda em ( e computaes em , que foi
o nosso ponto de partida para a criao da receita. Antes de fazer isto,
porm, vale a pena tentar equiparar cada etapa de uma derivao mais
128 13. GRAMTICAS E AUTMATOS DE PILHA
esquerda em (

exp
com uma computao no autmato que acabamos de
descrever. Por exemplo, vamos construir a computao correspondente
derivao mais esquerda
E E + T T + T F + T id + T id + F id + id
e compar-las passo-a-passo. A derivao comea marcando o fundo da
pilha com o smbolo inicial de (

exp
(i, id + id, ) (f, id + id, E),
mas isto no corresponde a nenhuma etapa da derivao. Em seguida,
utilizando transies por substituio, reproduzimos na pilha as quatro
primeiras etapas da derivao
(f, id+id, E) (f, id+id, E+T) (f, id+id, T+T) (f, id+id, F+T)
(f, id + id, id + T).
Neste ponto nos deparamos com a necessidade de usar remoes para
eliminar os terminais que obstruem o topo da pilha:
(f, id + id, id + T) (f, +id, +T) (f, id, T).
A computao prossegue com a aplicao de mais duas substituies e
a remoo do ltimo terminal na pilha e na entrada:
(f, id, T) (f, id, F) (f, id, id) (f, , ).
Como era esperado, o nmero de passos na computao excede em
muito o nmero de etapas da derivao por causa das transies de re-
moo, que no correspondem a nenhuma regra de (

exp
. Observe que
muito fcil determinar se um passo da computao corresponde ou no
a uma etapa da derivao; isto , a uma transio por substituio. De
fato, estas transies s podem ser aplicadas a conguraes nas quais
h uma varivel no topo da pilha. Esta observao vai desempenhar um
papel importante na demonstrao de que nossa receita funciona.
3. Provando a receita
Como sempre a demonstrao pode ser dividida em duas partes, que
correspondem s incluses L(() L() e L(() L().
Seja ( uma gramtica livre de contexto formada pelos elementos
(T, V, S, R) e seja w uma palavra gerada por (. Queremos mostrar que
w aceita por . Suponhamos que conhecemos uma derivao mais
esquerda S

w em (. Devemos ser capazes de usar esta derivao


para obter uma computao
(i, w, )

(f, , ).
3. PROVANDO A RECEITA 129
Alm disso, sabemos que cada etapa desta computao deve correspon-
der a uma etapa da derivao, ou aplicao de uma das transies por
remoo, que apagam os prexos de terminais que j tenham sido cor-
retamente gerados na pilha de .
Digamos que, depois de k etapas, a derivao seja
S
k
Xv,
onde estamos assumindo que T

e que X V . Em particular, X
a varivel mais esquerda de Xv. Isto signica, por um lado, que w
deve ser da forma , para alguma palavra T

, e por outro que a


prxima regra deve ser aplicada varivel X.
Se imaginarmos que j construmos a computao passo-a-passo at
este ponto, devemos ter obtido
(i, w, ) (f, w, S)

(f, , Xv),
porque os terminais de foram sendo eliminados na mesma medida em
que foram produzidos, para que a computao pudesse avanar.
Suponhamos que a regra aplicada na prxima etapa da derivao
seja X u, onde u (T V )

. Avanando mais esta etapa na deriva-


o, obtemos
S
k
Xv uv.
Queremos reproduzir esta etapa na computao de . Como j chega-
mos a umponto emque X est no topo da pilha, basta aplicar a transio
(f, u) (f, , X), que nos d
(i, w, ) (f, w, S)

(f, , Xv) (f, , uv).


Contudo isto no basta, porque queremos deixar a varivel mais es-
querda de uv descoberto, para poder aplicar a prxima regra sem obs-
tculos. Para isto precisamos localizar onde est esta varivel, que va-
mos batizar de Y . Digamos que uv = Y v

, onde T

. Como
uv = Y v

w = .
e s tem terminais, podemos concluir que prexo de . Portanto,
=

e usando as regras de eliminao obtemos a computao


(i, w, )

(f, , uv) = (f,

, Y v

(f,

, Y v

),
o que nos deixa prontos para prosseguir com a construo da computa-
o exatamente como zemos na etapa anterior.
Note que, continuando desta maneira, quando chegarmos ao nal da
derivao teremos obtido uma computao
(i, w, )

(f, , ),
demonstrando, portanto, que w L().
130 13. GRAMTICAS E AUTMATOS DE PILHA
Provamos, assim, que L(() L(), falta mostrar que a incluso
oposta tambm vale. Para isto, basta vericar que se w aceita por
ento existe uma derivao S

w.
A primeira impresso talvez seja de que, como a pilha de re-
produz uma derivao de w em (, deve ser suciente olhar para o que
h na pilha em cada etapa da computao. Contudo, por causa das re-
gras de remoo, cada vez que uma parte de w for gerada na pilha, ela
ser apagada antes da computao poder continuar. Portanto, para obter
a etapa da derivao que corresponde a um dado passo da computao
basta concatenar o prexo de w que foi removido da entrada com o con-
tedo da pilha. Em outras palavras, se a congurao de em uma
dada etapa da computao for (f, u, Y v) e w = u, ento a etapa cor-
respondente da computao ser Y v.
O problema desta correspondncia que mais de uma etapa da com-
putao pode corresponder a uma nica etapa da derivao. Para evitar
isto s vamos construir as etapas da derivao que correspondem a um
passo da computao em que h uma varivel no topo da pilha. Note
que escolhemos estes passos porque exatamente neles que se aplicam
as transies por substituio.
Para concluir a demonstrao precisamos nos convencer de que esta
seqncia de palavras de (T V )

de fato uma derivao de w a partir


de S. H trs coisas a vericar:
(1) a seqncia comea com S;
(2) para passar de uma palavra da seqncia para a prxima tro-
camos sua varivel mais esquerda pelo lado direito de uma
regra de (;
(3) a ltima palavra da seqncia w.
Mas (1) e (2) so conseqncias imediatas da maneira como foi de-
nido, e (3) segue do fato de que a computao acaba na congurao
(f, , ). Provamos, portanto, que w L(().
4. Autmatos de pilha cordatos
Na prxima seo consideramos a recproca do problema descrito
na seo anterior. Isto , descrevemos um algoritmo que, a partir de um
autmato de pilha constri uma gramtica livre de contexto ( tal que
L(() = L().
Para tornar a construo da gramtica a partir do autmato mais
fcil, comearemos transformando o autmato de pilha no determins-
tico dado. Construiremos a partir de um autmato de pilha

que aceita a mesma linguagem que , mas cujo comportamento mais


4. AUTMATOS DE PILHA CORDATOS 131
predizvel. Em particular,

ter apenas um estado nal e a pilha s


poder se esvaziar neste estado.
Para melhor sistematizar os algoritmos conveniente introduzir a
noo de um autmato de pilha cordato. Seja A um autmato de pilha
com estado inicial i e funo de transio . Dizemos que A cordato
se as seguintes condies so satisfeitas:
(1) a nica transio a partir de i (i, , ) = (q, ), onde q
um estado de A e um smbolo do alfabeto da pilha;
(2) A tem um nico estado nal f;
(3) a pilha s se esvazia no estado nal f;
(4) no h transies a partir de f.
Note que por causa de (1), (3) e (4), h um elemento que
nunca sai do fundo da pilha at que o estado nal seja atingido. Alm
disto, (3) nos diz que se (q, , ) = (p, ) ento p = f.
Vejamos como possvel construir a partir de um autmato de pilha
qualquer um autmato de pilha cordato A que aceita L(). Supo-
nhamos que denido pelos ingredientes (, , Q, q
1
, F, ). Ento
A ser o autmato de pilha com os seguintes ingredientes:
alfabeto de entrada ;
alfabeto da pilha , onde / ;
conjunto de estados Q i, f, onde i, f / Q;
estado inicial i;
conjunto de estados nais f;
funo de transio

denida de acordo com a tabela abaixo:


estado entrada topo da pilha transio
i (q
1
, )
q = i, f e q / F (q, , )
q = i, f e q F = (q, , )
q = i, f e q F (q, , ) (f, )
onde estamos supondo que e que .
claro que A cordato; falta apenas mostrar que L(A) = L().
Observe que o comportamento de A pode ser descrito suncintamente
dizendo que, depois de marcar o fundo da pilha com , o autmato si-
mula o comportamento de . De fato, na primeira transio A apenas
pe no fundo da pilha e passa ao estado q
1
de . A partir da A se
comporta como at que um estado nal p de atingido. Neste
caso, se a pilha contm apenas , A tem a opo de entrar no estado f
132 13. GRAMTICAS E AUTMATOS DE PILHA
e esvaziar a pilha. Observe que a pilha s esvaziada no estado f, e isto
obriga o autmato a parar porque no existem transies a partir de f.
Suponha agora que A computa a partir de uma entrada w

. Se
w for aceita por , ento existir uma computao
(q
1
, w, )

(p, , ) em .
Esta computao dar lugar a uma computao em A da forma
(i, w, ) (q
1
, w, )

(p, , ) (f, , ).
Portanto se w for aceita por ser aceita por A.
Por outro lado, uma computao
(4.1) (i, w, )

(f, , ),
implica que a congurao do autmato A anterior ltima tinha que
ser (p, , ), com p um estado nal de . Assim, a computao (4.1)
de A procede ao longo das seguintes etapas
(i, w, ) (q
1
, w, )

(p, , ) (f, , ).
Temos assim que (q
1
, w, )

(p, , ) uma computao vlida de .


Como p estado nal de conclumos que w aceita por . Portanto
e A aceitam exatamente as mesmas palavras.
5. A gramtica de um autmato de pilha
Suponha agora que A um autmato de pilha cordato. Veremos
como possvel construir uma gramtica livre de contexto Gque gera as
palavras aceitas por A. Digamos que A est denido pelos ingredientes
(, , Q, i, f, ). Alm disso, suporemos que o smbolo que ca
no fundo da pilha de A enquanto ele simula .
Naturalmente os terminais da gramtica G sero os elementos de
. A construo das variveis mais complicada. Cada varivel ser
indexada por trs smbolos: dois estados e um smbolo da pilha. Como
isto complica muito a notao prefervel identicar cada varivel com
a prpria tripla que lhe serve de ndice. Assim o conjunto de variveis
de G ser
Q Q.
Portanto uma varivel de G ser uma tripla (q, , p), onde q e p so
estados de A e um smbolo do alfabeto da pilha. Note que no
pode ser .
Se
(i, , ) = (i

, ),
5. A GRAMTICA DE UM AUTMATO DE PILHA 133
ento o smbolo inicial de G ser (i

, , f). Precisamos agora construir


as regras de G. Suponhamos que
(p, u) (q, , )
onde u

. H dois casos a considerar:


Primeiro caso: u =
1

k
.
Neste caso, para cada k-upla (r
1
, . . . , r
k
) Q
k
contrumos
uma regra
(q, , r
k
) (p,
1
, r
1
)(r
1
,
2
, r
2
) (r
k1
,
k
, r
k
).
Observe que isto nos d, no apenas uma, mas n
k
regras dis-
tintas, onde n o nmero de estados de A.
Segundo caso: u =
Neste caso construmos apenas a regra
(q, , p) .
De nossa experincia anterior sabemos que, de alguma maneira,
uma derivao mais esquerda por G deve simular uma computao
por A. Mais precisamente,
(5.1)
(i, w, ) (i

, w, )

(f, , ) se, e somente se (i

, , f)

w.
Entretanto, neste caso a simulao procede de maneira bem mais sutil.
Para melhor identicar o problema, consideremos uma etapa da compu-
tao acima
(q, v, u) (p, w,
1

k
u),
onde v

e u

. Evidentemente para que esta etapa seja legtima


preciso que
(5.2) (p,
1

k
) (q, , ).
Mas (5.2) d lugar a n
k
regras: qual delas devemos escolher? Para
decidir isto precisamos vericar como a computao continua.
Em outras palavras, para construir o i-simo passo da derivao no
suciente considerar apenas o i-simo passo da computao, mas v-
rios outros passos; at mesmo todo o restante da computao ! claro
que isto torna a demonstrao da correspondncia bem mais difcil que
no caso de autmatos nitos. Felizmente podemos generalizar a equi-
valncia (5.1) de modo a tornar a demonstrao mais transparente. Para
isso substituimos em (5.1) os estados i

e f por estados quaisquer p e q,


e por um smbolo qualquer X do alfabeto da pilha. Esta generalizao
o contedo do seguinte lema.
134 13. GRAMTICAS E AUTMATOS DE PILHA
LEMA 13.2. Sejam p e q estados do autmato de pilha no deter-
minstico A. Ento
(q, w, X)

(p, , ) se, e somente se (q, X, p)

w
na gramtica G(A).
De acordo com esta correspondncia se o autmato est no estado
p quando X desempilhado, ento a varivel que inicia a derivao
(q, X, p). Assim, para achar a varivel da partida preciso olhar a
computao at o ltimo passo!
A demonstrao por induo nita, e para torn-la mais clara va-
mos dividi-la em duas partes.
Primeira parte: Queremos mostrar a armao
(A(m)) se (q, w, X)
m
(p, , ), ento (q, X, p)

w.
por induo em m.
Se m = 1, ento
w = e (p, ) (q, , X).
Mas, por construo, isto signica que na gramtica G(A) h uma regra
do tipo
(q, X, p) .
Como, neste caso, toda a derivao se reduz a uma aplicao desta regra,
a base da induo est provada.
Suponhamos, agora, que s > 1 um nmero inteiro, e que A(m)
vale para todo m < s. Seja
(5.3) (q, w, X)
s
(p, , )
uma computao em A com s etapas.
Isolando o primeiro smbolo de w, podemos escrever w = v, onde
e v

. Neste caso o primeiro passo da computao (5.3) ser


da forma
(q, v, X) (q
1
, v, Y
1
Y
k
),
que corresponde transio
(5.4) (q
1
, v, Y
1
Y
k
) (q, , X).
Note que, ao nal da computao (5.3) cada Y foi desempilhado.
Lembre-se que dizer, por exemplo, que Y
1
removido da pilha signica
que a pilha passou a ser Y
2
Y
k
. Isto no tem que acontecer em apenas
uma transio. Assim, Y
1
pode ser trocado por uma palavra no alfabeto
da pilha sem que seja necessariamente desempilhado. Por isso, durante
os passos seguintes da computao a pilha pode crescer bastante antes
5. A GRAMTICA DE UM AUTMATO DE PILHA 135
de diminuir ao ponto de ser apenas Y
2
Y
k
. Digamos ento que v
1
o prexo de v que consumido para que Y
1
seja desempilhado. Se
v = v
1
v, temos uma computao
(q
1
, v
1
v

, Y
1
Y
k
)

(q
2
, v

, Y
2
Y
k
),
onde q
2
algum estado de A.
Analogamente, sejam v
2
, v
3
, . . . , v
k
as subpalavras de v que tm
que ser consumidas para que Y
2
, . . . , Y
k
sejam desempilhados. Assim,
v = v
1
v
2
. . . v
k
, e existem estados q
1
, . . . , q
k
de A modo que (5.3) pode
ser subdividida em k 1 etapas da forma
(q
i
, v
i
v
k
, Y
i
Y
k
)

(q
i+1
, v
i+1
v
k
, Y
i+1
Y
k
),
seguidas de uma etapa nal da forma
(q
k
, v
k
, Y
k
)

(p, , ).
Como cada uma destas computaes tem menos de s passos, segue da
hiptese de induo, que
(q
i
, v
i
, Y
i
)

(q
i+1
, , ),
d lugar derivao
(5.5) (q
i
, Y
i
, q
i+1
)

v
i
,
ao passo que a etapa nal da computao corresponde a
(5.6) (q
k
, Y
k
, p)

v
k
.
Falta-nos apenas reunir de modo ordenado tudo o que zemos at
agora. Em primeiro lugar, a transio (5.4) d lugar a uma regra de
G(A) da forma
(q, X, p) (q
1
, Y
1
, q
2
) (q
k
, Y
k
, p).
Substituindo, nalmente, as derivaes de (5.5) e (5.6) nos lugares apro-
priados, obtemos
(q, X, p) (q
1
, Y
1
, q
2
) (q
k
, Y
k
, p)

v
1
v
k
= w,
como queramos.
Segunda parte: Queremos mostrar a armao
(B(m)) se (q, X, p)
m
w ento (q, w, X)

(p, , )
por induo em m
Se m = 1 ento a derivao se resume a regra
(q, X, p) w,
136 13. GRAMTICAS E AUTMATOS DE PILHA
da gramtica G(A). Mas, pela construo da gramtica, w tem que ser
um smbolo . Alm disto, esta regra s pode ocorrer se
houver uma transio da forma
(p, ) (q, , X)
em A. Mas esta transio d lugar computao
(q, , X) (p, , )
que espervamos obter.
Suponha, agora, que s > 1 um nmero inteiro e que o resultado
vale para toda derivao com menos de s passos. Seja
(5.7) (q, X, p)
s
w
uma derivao de G(A) com s etapas. Como s > 1, a primeira regra a
ser aplicada nesta derivao deve ser da forma
(5.8) (q, X, p) (s
1
, Y
1
, s
2
)(s
2
, Y
2
, s
3
) (s
k
, Y
k
, p),
onde (s
1
, . . . , s
k
) Q
k
e o smbolo mais esquerda de w. Di-
gamos que w = v, para alguma palavra v

. Para que a deriva-


o possa acabar produzindo w deve ser possvel decompor v na forma
v = v
1
v
k
de modo que, para i = 1, . . . , k, temos
(s
i
, Y
i
, s
i+1
)

v
i
onde s
k+1
= p. Como a derivao de v
i
s tem que ter um nmero de
etapas menor que s, podemos aplicar a hiptese de induo, obtendo
assim computaes
(s
i
, v
i
, Y
i
)

(s
i+1
, ).
para i = 1, . . . , k. Alm disso, se pusermos Y
i+1
, . . . , Y
k
abaixo de Y
i
,
no fundo da pilha, obteremos
(s
i
, v
i
, Y
i
Y
i+1
Y
k
)

(s
i+1
, ).
Agora, (5.8) provm da transio
(p, Y
1
Y
k
) (q, , X),
que pode ser reescrita na forma
(q, , X) (p, Y
1
Y
k
).
Lembrando que w = v
1
v
k
, vemos que A admite uma computao
da forma
(q, w, X) (s
1
, v
1
v
k
, Y
1
Y
k
)

(s
2
, v
2
v
k
, Y
2
Y
k
)

(s
k
, v
k
, Y
k
) (p, , ),
como queramos mostrar.
6. EXERCCIOS 137
6. Exerccios
1. Construa a computao no autmato descrito na seo 2 que corres-
ponde derivao mais esquerda de id (id + id) na gramtica
(

exp
.
2. Ache umautmato de pilha no determinstico que aceita a linguagem
gerada pela gramtica cujas regras so:
S 0AA
A 1S[0S[0
3. Considere a linguagem dos parnteses balanceados descrita no exer-
ccio 2 do captulo ??.
(1) D exemplo de uma gramtica livre de contexto que gere esta
linguagem.
(2) D exemplo de um autmato de pilha no determinstico que
aceita esta linguagem.
4. Para cada uma das linguagens L, abaixo, invente uma gramtica livre
de contexto que gere L e use a receita da seo 2 para construir um
autmato de pilha no determinstico que aceite L.
(a) L = wc
4
w
r
: w 0, 1;
(b) L = a
n
b
m
c : n m 1;
(c) L = 0
m
1
n
: n m 2n;
(d) L = a
i+3
b
2i+1
: i 0;
(e) L = a
i
b
j
c
j
d
i
e
3
: i, j 0.
5. Seja ( uma gramtica livre de contexto cujo smbolo inicial S, e
seja o autmato de pilha construdo a partir de ( pela receita da
seo 2. Suponhamos que w uma palavra de comprimento k em
L(() . Determine o nmero de passos da computao de que
corresponde derivao mais esquerda S
n
w.
CAPTULO 14
Mquinas de Turing
1. Exerccios
1. Considere a mquina de Turing cujo alfabeto a, b, ., , conjunto
de estados q
0
, q
1
, h, estado inicial q
0
e transies dadas pela tabela:
estado entrada transies
q
0
0 (q
1
, 1)
1 (q
1
, 0)
. (h, .)
(q
0
, )
q
1
0 (q
0
, )
1 (q
0
, )
. (q
0
, )
(q
1
, )
(a) Descreva a computao de M a partir da congurao (q
0
, 001110).
(b) Descreva informalmente o que M faz quando iniciada no estado
q
0
e em alguma casa de sua ta.
2. Descreva a tabela de transio de uma mquina de Turing, no alfabeto
a, b, ., , que se move para a esquerda at encontrar trs as na ta
e ento pra.
3. Explique porque as mquinas DE e ED nem sempre tm a mesma
sada.
4. Esboce o esquema de mquinas de Turing que aceitem as seguintes
linguagens:
139
140 14. MQUINAS DE TURING
(a) 010

1;
(b) w 0, 1

: [w[ par;
(c) a
n
b
n
c
m
: m n;
(d) w 0, 1 : w = w
r
;
(e) 0
n
2
: n 1.
5. Construa, a partir do diagrama dado em aula, a tabela de transies da
mquina de Turing M
e
que move uma palavra w (01)

, precedida
de uma casa vazia, uma casa para a esquerda; isto , que transforma
.w em w.
6. Construa mquinas de Turing que calculem as seguintes funes f :
N N denidas por:
(a) f(n) = n + 1;
(b) f(n) o resto da diviso de n por 2;
(c)
f(n, m) =

n m se n m 0
0 se n < m.
7. Descreva uma mquina de Turing que, tendo como entrada uma pala-
vra w 0, 1

encontra o smbolo do meio da palavra (se existir!).


8. Descreva uma mquina de Turing que, tendo como entrada uma pa-
lavra w 0, 1

com comprimento par, substitui os 0s por a ou c e


os 1s por bs ou ds, de modo que a palavra ca escrita na forma w
1
w
2
onde w
1
a, b

e w
2
c, d

.
9. Utilizando a mquina de Turing da questo anterior construa uma m-
quina de Turing que aceita a linguagem ww : w 0, 1

.
10. Mostre que a linguagem ww : w 0, 1

recursiva.
11. Construa a ta de entrada para que a mquina de Turing universal
simule a computao da mquina de Turing do exerccio 1 a partir da
congurao (q
0
, 001110).
12. Sejam L
1
e L
2
linguagens recursivas aceitas por mquinas de Turing
M
1
e M
2
, respectivamente. Mostre como construir uma mquina de
Turing que aceite a linguagem L
1
L
2
.
13. A interseco de linguagens recursivas recursiva? Explique sua res-
posta.
14. D a denio formal de uma mquina de Turing cuja ta dupla-
mente innita (isto , vai de a +). Mostre como possvel
simular uma mquina destas usando uma mquina de Turing cuja
1. EXERCCIOS 141
ta innita somente direita. As mquinas denidas originalmente
por Alan Turing tinham tas duplamente innitas.
Sugesto: Escolha um ponto de referncia na ta duplamente innita
e escreva os smbolos das casas direita do referencial nas casas pa-
res da ta de , e aqueles que esto esquerda nas casas mpares.
Explique como deve ser o comportamento de . Note que chega
a quando a mquina original cruza o ponto de referncia. Qual vai
ser o comportamento de neste caso?
15. Seja
0
um alfabeto e L uma linguagem no alfabeto
0
. Mostre que,
se L e
0
` L so recursivamente enumerveis, ento L recursiva.
16. Seja
0
um alfabeto e L uma linguagem no alfabeto
0
que recur-
sivamente enumervel mas no recursiva. Suponha que M uma
mquina de Turing que aceita L. Mostre que existe uma quantidade
innita de palavras em
0
que no aceita por M.
CAPTULO 15
Mquinas de Turing e Linguagens
Neste captulo discutimos vrias propriedades das linguagens recur-
sivas e recursivamente enumerveis. Entretanto, o principal resultado do
captulo o fato de que existe uma mquina de Turing que capaz de
simular qualquer outra mquina de Turing. Esta mquina conhecida
como mquina de Turing Universal, e foi originalmente construda por
Alan Turing em 1937.
O captulo comea com a descrio de uma construo que permite
conectar duas mquinas de Turing em paralelo, e se encerra com o Pro-
blema da Parada.
1. Conectando Mquinas em Paralelo
Suponhamos que M = (, Q, q
1
, F, ) e M

= (, Q

, q

1
, F

)
so duas mquinas de Turing no alfabeto . Dena um novo alfabeto
por

= : .
Quer dizer, para cada smbolo , existem dois smbolos em

: o
prprio e . A nova mquina constituda pelos seguintes ele-
mentos:
ALFABETO:

2
, .
CONJUNTO DE ESTADOS: O QQ

.
ESTADO INICIAL: (q
1
, q

1
),
ESTADOS FINAIS: H Q Q

que depende do que eu quero que a


mquina faa.
143
144 15. MQUINAS DE TURING E LINGUAGENS
Antes de discutir as transies, precisamos explicar como a ta da
mquina. Como sempre, a extremidade esquerda da ta est marcada
pelo smbolo . J a casa imediatamente direita desta sempre conter
(, ) ou (, ) ou (, ) ou (, ).
Alm disso, a mquina que estamos construindo s poder imprimir um
destes smbolos nesta casa.
TRANSIO: Vamos descrever o comportamento da mquina na forma
de um ciclo completo que ela ca repetindo at parar. No comeo do
ciclo, est no estado (q, q

) QQ

.
A mquina precisa lembrar que est simulando M a partir do
estado q e M

a partir do estado q

, at chegar na etapa 5. Nesta etapa


haver uma mudana nos estados a partir dos quais a simulao est
sendo feita. Estes novos estados sero lembrados at chegar etapa 8.
Como isto feito ser discutido ao nal da descrio da transio.
ETAPA 1: Se (q, q

) H a mquina pra.
ETAPA 2: Lembrando que est simulando M a partir de q e M

a partir
de q

, a mquina recua seu cabeote para a esquerda at encontrar .


ETAPA 3: Lembrando que est simulando M a partir de q e M

a partir
de q

, a mquina move o cabeote para a direita at encontrar um


smbolo da forma (,

).
ETAPA 4: Lembrando que est simulando M a partir de q e M

a partir
de q

, a mquina atualiza a ta e os estados que est simulando de


M e M

conforme a tabela abaixo


Novo esta- Novo esta- Fita
(q, ) do de M do de M

(p, ) p q

imprime (,

) sem mover cabeote


(p, ) p q

imprime (,

) e move para a direita:


se est lendo (,

), imprime (,

)
se est lendo ., imprime (., .)
(p, ) p q

imprime (,

) e move para a esquerda:


se est lendo (,

), imprime (,

)
se est lendo ., imprime (., .)
Se, na ltima linha da tabela, (,

) = (, ) ento a mquina ser


forada a mover o cabeote para a direita, efetuando a mudana de esta-
dos correspondente em M.
2. FECHAMENTO DE LINGUAGENS 145
Ao nal desta etapa os estados M e M

que esto sendo lembrados


por passam a ser p e q

.
ETAPA 5: Se (p, q

) H a mquina pra.
ETAPA 6: Lembrando que est simulando M a partir de p e M

a partir
de q

, a mquina recua seu cabeote para a esquerda at encontrar .


ETAPA 7: Lembrando que est simulando M a partir de p e M

a partir
de q

, a mquina move o cabeote para a direita at encontrar um


smbolo da forma (,

).
ETAPA 8: Lembrando que est simulando M a partir de p e M

a partir
de q

, a mquina atualiza a ta e os estados que est simulando de


M e M

conforme a tabela abaixo


Novo esta- Novo esta- Fita
(q

) do de M do de M

(p

) p p

imprime (,

) sem mover cabeote


(p

, ) p p

imprime (,

) e move para a direita:


se est lendo (,

), imprime (,

)
se est lendo ., imprime (., .)
(p

, ) p p

imprime (,

) e move para a esquerda


se est lendo (,

), imprime (,

)
se est lendo ., imprime (., .)
Naturalmente, se, na ltima linha da tabela, (,

) = (, ) ento
a mquina ser forada a mover o cabeote para a direita, efetuando a
mudana de estados correspondente em M.
Ao nal desta transio a mquina entra o estado (p, p

) e o ciclo
reinicializado.
Falta somente explicar como que a mquina lembra que est simu-
lando M a partir de q e M

a partir de q

. Para isto, para cada par (q, q

),
construmos um conjunto de estados associado a este par que a mquina
dever entrar ao executar as etapas 1, 2, 3 e 4 do ciclo, e outro conjunto
de estados que corresponder s etapas 5, 6, 7 e 8 do ciclo. Em outras
palavras, a mquina lembra quais so os estados q e q

a partir dos quais


est simulando M e M

por causa dos estados que est vendo.


2. Fechamento de linguagens
Estamos prontos para usar a mquina construda na seo anterior
para discutir como o comportamento das linguagens recursivas e re-
cursivamente enumerveis com respeito s operaes de unio e inter-
seco.
146 15. MQUINAS DE TURING E LINGUAGENS
Para comear, digamos que L uma linguagem aceita por uma m-
quina de Turing M = (, Q, q
1
, F, ) e L

por M

= (, Q

, q

1
, F

).
Assim, estamos supondo que L e L

so recursivamente enumerveis.
A partir destas mquinas construiremos uma mquina , como na
seo 1, tomando H = (F Q

) (Q F

). O efeito desta escolha


de estados nais fazer com que esta m quina pre quando M ou M

atinge um estado nal.


Seja w =
1

n
uma palavra de

. Daremos a a entrada
(2.1) (, )(., .)(
1
,
1
) (
n
,
n
).
Por causa de nossa escolha de estados nais, a computao de a
partir desta palavra vai parar se, e somente se, w L ou w L

.
Portanto, a linguagem aceita por , sob esta escolha de estados nais
LL

. Conclumos, assim, que se L e L

so linguagens recursivamente
enumerveis, ento L L

recursivamente enumervel.
Tambm verdade que se L e L

linguagens recursivamente enume-


rveis, ento L L

recursivamente enumervel. Fica como exerccio


para voc, determinar qual a escolha de conjunto de estados nais para
a qual aceita L L

.
Suponhamos, agora, que L e L

so linguagens recursivas. Sejam


M e M

, denidas como acima, de modo que L seja decidida por M e


L

por M

. Lembre-se que, neste caso, F = F

= s, n. Escolheremos
H = F F

.
Dando a uma entrada como (2.1), vericamos que esta mquina s
pra no estado (n, n) se w / L e w / L

. Por outro lado, se w L


ou w L

, ento pode parar em um dos estados (s, n), (n, s) ou


(s, s). Isto no satisfatrio, porque se w L L

esperaramos que
parasse sempre no mesmo estado. Para curar este problema, basta
construir uma mquina A que executa como explicado acima e que,
terminada a computao de , altera o estado para (s, s) se alcan-
ou um dos estados de aceitao (s, n), (n, s) ou (s, s). Vericamos,
portanto, que se L e L

so linguagens recursivas, ento LL

tambm
recursiva.
Deixamos aos seus cuidados escolher os estados nais de e efe-
tuar as mudanas necessrias para provar que se L e L

so linguagens
recursivas, ento L L

tambm recursiva.
De todas as operaes bsicas com conjuntos s no analisamos
ainda o que ocorre com o complementar. Neste ponto as duas classes de
linguagens divergem radicalmente. Suponhamos, para comear, que L
seja uma linguagem recursiva no alfabeto
0
e que M uma mquina
3. A MQUINA DE TURING UNIVERSAL 147
de Turing, em um alfabeto que contm
0
, e que decide L. Ento, o
conjunto de estados nais de M s, n e, dado w

0
, temos que
w L se e s se M pra no estado s;
w L =

0
` L se e s se M pra no estado n.
Para construir uma m quina M que decida L, basta alterar as transies
de M de modo que quando M entra o estado s, ento M entra o estado
n; e vice-versa. Logo se L recursiva, ento L tambm .
Infelizmente, uma estratgia deste tipo no vai funcionar quando L
for apenas recursivamente enumervel porque, neste caso, a mquina
que aceita L simplesmente no pra se a palavra estiver fora de L. Vere-
mos, na seo 5, que o complementar de uma linguagem recursivamente
enumervel no tem que ser recursivamente enumervel. Por hora, re-
sumiremos tudo o que vimos nesta seo em um teorema.
TEOREMA 15.1. Sejam L e L

linguagens em um alfabeto
0
.
(1) Se L e L

so recursivamente enumerveis, ento L L

e
L L

tambm so.
(2) Se L e L

so recursivas, ento L L

e L L

tambm so.
(3) Se L for recursiva, ento L =

0
` L tambm .
3. A mquina de Turing universal
Nesta seo descrevemos uma construo para a mquina de Tu-
ring universal |. Trata-se de uma mquina de Turing capaz de simular
qualquer outra mquina de Turing. Naturalmente, para que isto seja pos-
svel, a mquina universal precisa receber como entrada o programa
da mquina que est sendo simulada. Em outras palavras, precisamos
ser capazes de descrever o alfabeto, o conjunto de estados e as transies
de uma mquina de Turing qualquer a partir do alfabeto de |.
H muitas maneiras diferentes de construir a mquina |. Na cons-
truo que faremos o alfabeto ser
= , 0, 1, , q, X, Y, Z, , ., a, b.
Descreveremos as transies de uma mquina de Turing M na ta de
| enumerando (separadamente) os smbolos e os estados de M no sis-
tema unrio. Para distinguir smbolos de estados vamos adicionar aos
smbolos o prexo e aos estados o prexo q. Para os propsitos desta
descrio, conveniente representar as setas e como se fossem
smbolos de M.
Digamos que a mquina de Turing M que desejamos simular usando
| tem n estados e um alfabeto com m smbolos. Para que o nmero de
casas da ta de | ocupadas pela descrio de um smbolo de M seja
148 15. MQUINAS DE TURING E LINGUAGENS
sempre o mesmo, reservaremos m + 3 casas para representar cada sm-
bolo, preenchendo as casas redundantes com 1s. Mas se o alfabeto de M
s tem m smbolos, por que precisamos de m + 3 casas? Em primeiro
lugar, estamos considerando as setas como smbolos honorrios, o que
d conta de duas, das trs casas extra. A outra casa usada para pr o
prexo , que indica que a seqncia de 0s e 1s que vem a seguir um
smbolo, e no um estado de M.
Procederemos de maneira anloga para os estados, reservando neste
caso n + 1 casas para cada estado. Assim, o r-simo smbolo do alfa-
beto de M ser denotado por 0
r
1
m+2r
, e o r-simo estado de M por
q0
r
1
nr
. Lembre-se que nesta descrio esto includas e . Por
razes mnemnicas, convencionaremos que , e , sero sempre os
trs primeiros smbolos a serem enumerados. Assim,
smbolo cdigo
01
m+1
0
2
1
m
0
3
1
m1
SejamM uma mquina de Turing e w uma palavra que dever servir
de entrada para M. Para dar incio simulao de M por | precisamos
preparar a ta de | com os dados de M. Consideremos, em primeiro
lugar, a maneira de codicar uma transio de M da forma (q
i
,
j
) =
(q
r
,
s
). Se
s
, , ento esta transio corresponder a um
segmento da ta da forma
X q 0
i
1
ni
0
j
1
m+2j
q 0
r
1
nr
0
s
1
m+2s
X
Note que o 0
i
representa na verdade um segmento de i casas da ta, e o
mesmo vale para 1
i
.
A descrio completa de M e w na ta de entrada de | ser feita se-
gundo o modelo abaixo, onde S
i
denota um segmento, da forma descrita
acima, entre os dois Xs.
X S
1
X S
2
X S
t
Y Q Z u
1
u
2
u
3

Nesta ta temos que:
3. A MQUINA DE TURING UNIVERSAL 149
De At Contedo do segmento
Y descrio do comportamento de M
Y Z Q = q0
i
1
ni
o estado em que M se encontra no estgio atual
da computao
Z nal w onde cada smbolo est escrito em unrio e precedido de
Note que o nmero unrio que descreve um dos smbolos da en-
trada da mquina M na ta acima est precedido de e no de . A
serve para marcar o smbolo atualmente lido por M na simulao por
|. Assim, quando a ta preparada para a entrada de |, o segmento Q
preenchido com o estado inicial de M e o smbolo ocupa a segunda
casa direita do Z (porque a segunda e no a primeira?). A sucesso de
smbolos do trecho da ta de | que contm a descrio da mquina M
uma palavra no alfabeto . Vamos denotar esta palavra por c(M).
Exemplo. Considere a mquina de Turing com alfabeto 0, ., , con-
junto de estados q
0
, q
1
, h, estado inicial q
0
, conjunto de estados nais
h e tabela de transio
estado entrada transies
q
0
0 (q
1
, .)
. (h, .)
(q
0
, )
q
1
0 (q
0
, 0)
. (q
0
, )
(q
1
, )
Neste caso os smbolos e estados de M so codicados como abaixo.
Lembre-se que, neste exemplo, deve haver 4 casas da ta para cada es-
tado e para cada smbolo (j que h 3 estados e 3 smbolos), sendo que
as casas redundantes devem ser preenchidas com 1s.
estado cdigo smbolo cdigo
q
0

q
1

h
* * .
* * 0
150 15. MQUINAS DE TURING E LINGUAGENS
Exerccio. Descreva a ta de | correspondente a esta mquina com en-
trada 000..
4. Comportamento de |
O procedimento da mquina de Turing universal constitudo de
duas partes: na primeira a mquina verica se a ta contm uma des-
crio legtima de alguma mquina de Turing; na segunda | simula a
mquina cuja descrio lhe foi dada.
Na primeira parte do processamento da entrada, | verica que a ta
que recebeu contm uma descrio legtima de mquina de Turing. Para
fazer isto, | varre a ta a partir de e verica que os Xs, qs, s e Zs
esto posicionados na ordem correta. medida que faz isto, | utiliza
a mquina contagem para comparar o bloco de 0s e 1s entre q e com
o bloco correspondente que vem depois do prximo X; e faz o mesmo
com o bloco entre e X. Finalmente, | compara o bloco entre os dois
Zs com o bloco entre o primeiro q e o primeiro para ver se tm o
mesmo nmero de casas. Se alguma destas condies no vericada
| caminha para a direita pela ta sem parar.
A segunda parte do processamento de | pode ser descrito como um
ciclo com 3 etapas:
Primeira Etapa: No incio o cabeote est parado sobre o Z. Ento
entra em ao uma mquina do tipo localiza que, a partir de localiza
uma qudrupla que comece com o par (Q, ), onde o smbolo di-
reita do Z marcado com e Q o estado entre Y e Z. medida que vai
tentando achar este par, a mquina vai trocando os 0s e 1s (da esquerda
para a direita) por as e bs, respectivamente. Isto permite identicar at
onde j foi feita a busca. Ao achar o par desejado, a mquina tambm
troca os 0s e 1s deste par por as e bs. Com isto o q0
i
1
ni
mais es-
querda da ta corresponde ao estado seguinte a Q na transio de M
por . Note que se | no conseguir localizar a transio desejada ento
o estado atual de M nal. Portanto, neste caso, | deve entrar em um
estado nal, o que a faz parar tambm.
Segunda Etapa: Agora copie o estado seguinte ao atual na transio de
M a partir de Q e no campo que corresponde ao estado atual de M.
Troque os nmeros por letras tambm neste estado. Considere agora o
seguido de algum nmero que ca mais esquerda da ta: ele nos diz o
que M faria com sua ta de entrada nesta transio. O comportamento
de | est resumido na tabela abaixo:
5. LINGUAGENS NO RECURSIVAS 151
Acha Faz
0
1
1
m+1
move o para o lugar do seguinte
0
2
1
m
move o para o lugar do anterior
0
j
1
m+2j
e j 3 substitui o segmento entre e por 0
j
1
m+2j
Terceira Etapa: Agora | volta o cabeote at e move-se para direita
trocando todos os as e bs por 0s e 1s, respectivamente at chegar ao
segundo depois da (por qu?). Finalmente o cabeote volta a Z.
Assim | est pronta para comear um novo ciclo.
5. Linguagens no recursivas
Seja M uma mquina de Turing no alfabeto . J vimos que pode-
mos simular M usando a mquina universal |. Para fazer isto, precisa-
mos preparar a ta da mquina | de modo a codicar o comportamento
de M. A descrio de M vem no comeo da vida e est inteiramente
contida na palavra c(M)

.
Considere agora a linguagem / formada pelas palavras de

que
representam corretamente a descrio de uma mquina de Turing no
alfabeto . Em outras palavras
/ = c(M) : M uma mquina de Turing no alfabeto .
A linguagem que desejamos considerar um subconjunto de /:
/
0
= c(M) : a mquina M aceita c(M).
Por mais extica que possa parecer, /
0
uma linguagem recursivamente
enumervel. Para ver isto basta exibir uma mquina de Turing que aceita
/
0
. Seja ( a mquina de Turing que, tendo como entrada w., produz
a sada wZw.. Ento a linguagem aceita por ( | /
0
. Observe
que se w

no uma descrio legtima de alguma mquina de


Turing, ento wZw automaticamente rejeitada por | no momento da
checagem inicial da entrada.
Diante do que acabamos de ver a seguinte pergunta imediatamente
se impe.
PERGUNTA. /
0
uma linguagem recursiva?
Se /
0
fosse recursiva, seu complemento /
0
tambm seria. Surpre-
endentemente isto est longe de ser verdade.
TEOREMA 15.2. /
0
no uma linguagem recursivamente enume-
rvel.
152 15. MQUINAS DE TURING E LINGUAGENS
Suponhamos, por contradio, que /
0
seja recursivamente enume-
rvel. Ento aceita por alguma mquina de Turing M no alfabeto .
O cdigo desta mquina um elemento de /. Podemos perguntar:
c(M) pertence a /
0
?
Digamos que a resposta desta pergunta seja sim. Neste caso
c(M) /
0
= L(M).
Mas se c(M) L(M) ento c(M) aceita por M. Assim, por deni-
o, c(M) /
0
; e obtemos uma contradio.
Por outro lado, se a resposta da pergunta for no, ento
c(M) / /
0
= L(M).
Em outras palavras, c(M) no aceita por M. Mas isto signica que
c(M) / /
0
; isto c(M) /
0
; e mais uma vez obtemos uma contradi-
o.
Mostramos assim que existem linguagens recursivamente enumer-
veis que no so recursivas. De quebra, obtemos o seguinte resultado.
COROLRIO 15.3. O complemento de uma linguagem recursiva-
mente enumervel no necessariamente recursivamente enumervel.
6. O problema da parada
Podemos enunciar este problema da seguinte maneira:
PROBLEMA 15.1. Dada uma mquina de Turing M no alfabeto
e uma palavra w

existe uma mquina de Turing { que, tendo


c(M) Z w como entrada decide se M pra com entrada w?
Se o problema da parada tivesse uma resposta armativa, ento
toda linguagem recursivamente enumervel seria recursiva. Para mos-
trar isto, suponha que L uma linguagem recursivamente enumervel
qualquer e seja M uma mquina de Turing que aceita L. Se conhece-
mos M, ento conhecemos c(M). Seja ( a mquina que transforma a
entrada w. em c(M)Zw.. Se w L ento a mquina M pra na
entrada w; portanto C { pra no estado sim. Do contrrio, M no pra
com entrada M; mas neste caso C { tambm pra, s que no estado
no.
Diante disto podemos concluir que o problema da parada no pode
ter uma resposta armativa porque, como vimos na seo anterior, exis-
tem linguagens recursivamente enumerveis que no so recursivas.
A resposta negativa para o problema da parada tem importantes con-
seqncias, tanto de natureza terica quanto prtica. Por exemplo, seria
6. O PROBLEMA DA PARADA 153
certamente desejvel ter algoritmo que, recebendo um programa P e
uma entrada E de P, decidisse se P pra com entrada E. Um algoritmo
deste tipo ajudaria muito na elaborao e teste de programas. Infeliz-
mente a resposta negativa para o problema da parada mostra que um tal
algoritmo no pode existir.
Uma conseqncia de natureza terica muito importante do mesmo
problema que nem toda questo matemtica pode ser decidida de ma-
neira algortmica. Em outras palavras, h limites tericos claros para o
que uma mquina pode fazer.
Alm disto o problema da parada est longe de ser o nico pro-
blema matemtico que no admite soluo algortmica. Outros proble-
mas, ainda na rea de linguagens formais, que padecem do mesmo mal
so os seguintes:
dadas duas linguagens livres de contexto, determinar se sua
interseco livre de contexto.
dada uma linguagem livre de contexto, determinar se regular.
dada uma linguagem livre de contexto, determinar se ineren-
temente ambga.
Referncias Bibliogrcas
[1] M. A. Harrison, Introduction to formal language theory, Addison-Wesley (1978).
[2] J. E. Hopcroft e J. D. Ullman, Introduction to automata theory, languages and computation,
Addison-Wesley (1979).
155