Beruflich Dokumente
Kultur Dokumente
k
=a
1
. . . a
k
[a
i
, para i = 1, . . . , k.
Em particular,
0
= . Por exemplo, se tomarmos = 0, 1, tem-se
0
= ,
1
=0, 1,
2
=00, 01, 10, 11,
3
=000, 001, 010, 011, 100, 101, 110, 111, . . .
2
Linguagens Formais e Autmatos - Daniel Graa
Como uma palavra no tem comprimento xo, o conjunto das palavras sobre ,
designado por
k=0
k
=
0
2
. . .
Como iremos utilizar frequentemente o conjunto dos nmeros inteiros no-negativos,
vamos assumir nesta cadeira, como usual na teoria da computao, que N=0, 1, 2, . . ..
Note-se que esta notao difere da tradicionalmente utilizada em Portugal, em que
N =1, 2, . . . e N
0
=0, 1, 2, . . ..
s vezes tambm vamos utilizar um expoente num smbolo ou palavra. Em geral a
notao w
k
, para k N e w
, designa a palavra
w
k
= ww. . . w
k vezes
.
Por exemplo, 0
3
= 000, (10)
2
= 1010, (101)
0
= .
Denio 1.2.3. Dadas duas palavras x = x
1
. . . x
k
, y =y
1
. . . y
m
sobre , denimos a sua
concatenao xy (tambm representada simplesmente como xy) como sendo a palavra
x
1
. . . x
k
y
1
. . . y
m
.
Nos exemplos que se seguem = 0, 1. Por exemplo, dadas palavras u = 1011 e
v = 11, denidas sobre = 0, 1, tem-se uv = 101111 e vu = 111011 (note-se que a
ordem pela qual se faz a concatenao importa!).
Denio 1.2.4. Dada uma palavra x = x
1
. . . x
k
, a sua palavra reversa x escrita ao
contrrio, i.e. x
R
= x
k
. . . x
1
. Se x = x
R
, x diz-se um palndromo.
Por exemplo, u
R
= 1101 e v
R
= 11. Alm do mais, como v = 11 = v
R
, conclumos
que v um palndromo.
Denio 1.2.5. Uma linguagem sobre um alfabeto um subconjunto L de
.
Por exemplo, L = 1, 11, 111 uma linguagem sobre , assim como o conjunto
vazio , ou o conjunto w
[x A ou x B.
Concatenao: A B =xy
[x A e y B.
Operador de fecho: A
=x
1
x
2
. . . x
k
[k 0 e x
i
A.
3
Captulo 1. Introduo
Dito de outro modo, A
[x
i
A
para k N.
Por exemplo, tomando A =10, 11, B =0, 111, tem-se
AB =0, 10, 11, 111
A B =100, 10111, 110, 11111
A
como sendo a mesma ordem que utilizada num dicionrio, exceto que palavras mais
curtas precedem palavras mais longas. Por exemplo, a ordem lexicogrca sobre 0, 1
dada por (assumindo que j temos a ordem denida por 0 < 1 sobre este alfabeto)
<
0 <
1 <
00 <
01 <
10 <
11 <
000 <
. . .
Formalmente diz-se que u <
v, para u, v
q
1
. Como o ltimo estado nal, a palavra
010 aceite. A palavra 010 aceite se pelo menos um dos seus desdobramentos
aceite. Como neste caso 010 admite um desdobramento que aceite (010. Outro
desdobramento seria a prpria palavra 010), a palavra 010 ser aceite pelo AFND da
Fig. 2.3.
Formalmente:
Denio 2.2.4. Um autmato nito no-determinstico um 5-tuplo (Q, , , q
0
, F)
onde
1. Q um conjunto nito de estados;
2. um alfabeto;
3. : Q() P(Q) =A[A Q a funo de transio;
4. q
0
o estado inicial;
5. F Q o conjunto dos estados nais.
Como j mencionamos, num AFND podem existir vrios caminhos de computao
para uma palavra w
/
(R, a) =
rR
(r, a).
3. q
/
0
=q
0
.
4. F
/
=R Q
/
[R contm um estado nal.
No difcil ver que M reconhece L. Falta-nos agora ver o caso em que as transies
podem utilizar a palavra vazia . Para isso vamos denir para cada estado R de M um
conjunto E(R) de estados que podem ser alcanados a partir de transies com , tendo
o cuidado de incluir os prprios membros de R. Formalmente, se R Q, ento tomamos
E(R) =q Q[q pode ser alcanado com
0 ou mais transies utilizando a palavra .
Posto isto, basta alterar
/
e q
/
0
na denio de M para o seguinte: q
/
0
= E(q
0
) e
/
(R, a) =
rR
E((r, a)).
10
Linguagens Formais e Autmatos - Daniel Graa
Note-se que a demonstrao do Teorema 2.2.6 construtiva: dado um AFND, essa
demonstrao indica-nos um processo que nos permite obter um AFD que reconhece a
mesma linguagem. Para dar um exemplo, consideremos o AFND da Fig. 2.3. Vamos
utilizar o processo indicado na demonstrao do Teorema 2.2.6 para obter um AFD que
reconhece a mesma linguagem.
O conjunto dos estados do AFND Q =q
0
, q
1
, q
2
. Ento o conjunto dos estados
do AFD que lhe est associado pela construo anterior
P(Q) =, q
0
, q
1
, q
2
, q
0
, q
1
, q
0
, q
2
, q
1
, q
2
, q
0
, q
1
, q
2
.
Para simplicar a notao, e porque alterar o nome dos estados no muda a linguagem
reconhecida por um AFD, vamos antes designar os estados do AFD por
Q
/
=q
/
, q
/
0
, q
/
1
, q
/
2
, q
/
0,1
, q
/
0,2
, q
/
1,2
, q
/
0,1,2
. (2.1)
Como temos transies com a palavra vazia, o estado inicial do AFD
q
0
= E(q
0
) =q
0
, q
1
= q
/
0,1
(no se utilizou a notao q
/
0
da demonstrao para o estado inicial, para no se confun-
dir com o estado q
/
0
de (2.1)). Os estados nais de Q
/
so aqueles que esto associados
a um conjunto que contm um estado nal. Por exemplo, q
/
no nal
no AFD. Da mesma forma, q
/
0
est associado ao estado q
0
do AFND, que no nal,
logo q
/
0
tambm no nal. Por outro lado, q
/
0,1
est associado aos estados q
0
, q
1
do
AFND. Como pelo menos um deles nal (q
1
), ento q
/
0,1
ser um estado nal no AFD.
Procedendo desta forma conclu-se que o conjunto dos estados nais do AFD
F
/
=q
/
1
, q
/
2
, q
/
0,1
, q
/
0,2
, q
/
1,2
, q
/
0,1,2
.
Falta s denir as transies no AFD. Note-se que, para cada estado de Q
/
, dever estar
denida uma e uma s transio para cada smbolo de 0, 1, e no haver transies
para a palavra vazia. Se falhar alguma destas condies, o autmato obtido ser no-
determinstico, o que no o nosso objetivo. Por exemplo, tomemos o estado q
/
1,2
, que
est associado aos estados q
1
e q
2
do AFND. Quando tomamos o smbolo 0, o que
acontece para estes dois estados? q
1
no vai para lado nenhum (o conjunto formado
pelo resultado da transio ) e q
2
vai para ele prprio e q
0
(o conjunto formado
pelo resultado da transio q
0
, q
2
). Agora unimos o resultado das duas transies
para o smbolo 0 (q
0
, q
2
=q
0
, q
2
) e aplicamos o operador E a este conjunto (o
operador retorna o conjunto, mais os estados que podem ser alcanados utilizando uni-
camente transies com a palavra vazia), sendo o resultado E(q
0
, q
2
) = q
0
, q
1
, q
2
.
Portanto, quando consideramos o estado q
/
1,2
e o smbolo 0, o resultado da transio
ser o estado q
/
0,1,2
. Da mesma forma, se consideramos o estado q
/
1,2
e o smbolo 1, o
resultado da transio ser o estado q
/
1,2
. Procedendo desta forma para todos os restan-
tes estados de Q
/
, obtemos as regras de transio. Portanto um AFD que reconhece a
11
Captulo 2. Autmatos nitos
Figura 2.4: Autmato nito determinstico que reconhece a mesma linguagem que o
autmato nito no-determinstico da Fig. 2.2.
mesma linguagem que o AFND da Fig. 2.3 ser o AFD representado na Fig. 2.4. pos-
svel eliminar estados redundantes, que nunca podem ser alcanados a partir do estado
inicial e que portanto nunca aparecem numa computao (por exemplo q
/
0,2
), e isso no
altera o resultado do Teorema 2.2.6.
2.3 Linguagens regulares
Vimos na seco anterior que a classe de linguagens reconhecidas por AFDs e AFNDs
coincide. Por isso podemos apresentar a seguinte denio.
Denio 2.3.1. Uma linguagem L diz-se regular se reconhecida por algum autmato
nito.
Vamos agora mostrar que a classe das linguagens regulares fechada para as opera-
es de unio, concatenao e operador de fecho.
Teorema 2.3.2. A classe de linguagens regulares fechada para o operador de unio.
Por outras palavras, se A e B so linguagens regulares, tambm o ser AB.
Demonstrao. Sejam M
1
= (Q
1
, ,
1
, q
1
, F
1
) e M
2
= (Q
2
, ,
2
, q
2
, F
2
) AFNDs que
reconhecem A e B, respetivamente. Ento construmos um AFND M = (Q, , , q
0
, F)
que reconhece AB da seguinte forma.
12
Linguagens Formais e Autmatos - Daniel Graa
1. Q = Q
1
Q
2
q
0
, onde q
0
um estado que no pertence a Q
1
nem a Q
2
(acrescenta-se um novo estado inicial).
2. F = F
1
F
2
(os estados nais so aqueles que j o eram antes).
3. denido da seguinte forma: para todo o q Q e todo o a ,
(q, a) =
1
(q, a) se q Q
1
2
(q, a) se q Q
2
se q = q
0
e a ,=
q
1
, q
2
se q = q
0
e a =
(do novo estado inicial fazem-se transies com a palavra para os antigos esta-
dos iniciais de M
1
e M
2
, mantendo todas as outras transies de M
1
e M
2
).
Por exemplo, um AFND que reconhece a unio das linguagens reconhecidas pelos
autmatos nitos das Fig. 2.2 e 2.3 o dado na Fig. 2.5.
Figura 2.5: Autmato nito no-determinstico que reconhece a unio das linguagens
reconhecidas pelos autmatos das Fig. 2.2 e 2.3.
Teorema 2.3.3. A classe de linguagens regulares fechada para o operador de con-
catenao. Por outras palavras, se A e B so linguagens regulares, tambm o ser
A B.
Demonstrao. Sejam M
1
= (Q
1
, ,
1
, q
1
, F
1
) e M
2
= (Q
2
, ,
2
, q
2
, F
2
) AFNDs que
reconhecem A e B, respetivamente. Ento construmos um AFND M = (Q, , , q
0
, F)
que reconhece A B da seguinte forma:
13
Captulo 2. Autmatos nitos
1. Q = Q
1
Q
2
.
2. q
0
= q
1
(o estado inicial do novo autmato o estado inicial de M
1
).
3. F = F
2
(os estados nais do novo autmato so os estados nais de M
2
).
4. denido da seguinte forma: para todo o q Q e todo o a ,
(q, a) =
1
(q, a) se q Q
1
e q / F
1
1
(q, a) se q F
1
e a ,=
1
(q, a) q
2
se q F
1
e a =
2
(q, a) q Q
2
(mantm-se as transies, acrescentando transies com a palavra dos antigos
estados nais de M
1
para o antigo estado inicial de M
2
).
Por exemplo, se L
1
e L
2
forem as linguagens reconhecidas pelos AFNDs das Fig.
2.2 e 2.3, respetivamente, ento o AFND da Fig. 2.6 reconhece L
1
L
2
.
Figura 2.6: Este autmato nito reconhece L
1
L
2
, onde L
1
e L
2
so as linguagens
reconhecidas pelos autmatos nitos das Fig. 2.2 e 2.3, respetivamente.
Teorema 2.3.4. A classe de linguagens regulares fechada para o operador de fecho.
Por outras palavras, se A uma linguagem regular, tambm o ser A
.
Demonstrao. Seja N = (Q
1
, ,
1
, q
1
, F
1
) um AFND que reconhece A. Vamos cons-
truir um AFND M = (Q, , , q
0
, F) que reconhece A
da seguinte forma:
1. Q=q
0
Q
1
. O estado inicial q
0
novo e deve satisfazer q
0
/ Q
1
(acrescenta-se
um novo estado inicial).
14
Linguagens Formais e Autmatos - Daniel Graa
2. F =q
0
F
1
(os antigos estados nais mantm-se nais, e o novo estado inicial
tambm nal).
3. denido da seguinte forma: para todo o q Q e todo o a ,
(q, a) =
1
(q, a) se q Q
1
e q / F
1
1
(q, a) se q F
1
e a ,=
1
(q, a) q
0
se q F
1
e a =
q
1
q = q
0
e a =
q = q
0
e a ,=
(fazem-se transies com a palavra dos estados nais de N para o novo estado
inicial, e faz-se uma transio com a palavra deste estado para o antigo estado
inicial).
Por exemplo, se L
1
for a linguagem reconhecida pelo AFND da Fig. 2.2, ento o
AFND da Fig. 2.7 reconhece L
1
(NOTA: importante adicionar um novo estado inicial.
No basta tornar o estado inicial anterior num estado nal, porque h casos em que este
procedimento falha).
Figura 2.7: Autmato nito que reconhece L
1
, onde L
1
a linguagem reconhecida pelo
autmato nito da Fig. 2.2.
2.4 Expresses regulares
Em certas aplicaes informticas, pretende-se procurar expresses que satisfaam de-
terminado formato. Por exemplo, no ambiente MS-DOS, poderamos invocar o co-
mando
15
Captulo 2. Autmatos nitos
dir f
*
.
*
para procurar todos os cheiros no diretrio corrente que comecem pela letra f (um
comando similar para sistemas Unix seria o ls). Outra aplicao ser procurar determi-
nada palavra num cheiro de texto, etc. Isso pode ser modelado pela noo de expresso
regular que passamos a introduzir.
Denio 2.4.1. Uma expresso regular sobre um alfabeto uma expresso qual
associamos uma linguagem sobre . Uma expresso regular pode somente ser obtida
pelas seguintes regras:
1. Se a , ento a uma expresso regular associada linguagem a,
2. e so expresses regulares associadas s linguagens e , respetivamente,
3. Se R
1
e R
2
so expresses regulares associadas s linguagens L
1
e L
2
, respetiva-
mente, ento tambmso expresses regulares (R
1
R
2
), (R
1
R
2
) e (R
1
), estando
associadas s linguagens L
1
L
2
, L
1
L
2
e L
1
, respetivamente.
Por exemplo, o Unix (Linux) tem includas funcionalidades que lhe permitem tra-
balhar diretamente com expresses regulares. Mais detalhes podem ser encontrados em
[HMU06]. Na prtica, e para simplicar a notao, vamos utilizar as seguintes conven-
es quando escrevermos uma expresso regular: (i) sempre que estamos a concatenar
duas expresses regulares, omitimos o smbolo ; (ii) o operador de fecho tem prece-
dncia sobre os restantes operadores; (iii) o operador de concatenao tem precedncia
sobre o operador de unio. Utilizando estas precedncias, podemos eliminar muitos dos
parntesis. Por exemplo, tomando = 0, 1, a expresso 001
0 01 corresponde
expresso regular (0 0 (1
0 01 dada por w 0, 1
[
w = 01 ou w = 001
k
0 para algum k N.
Outra conveno que ser usada frequentemente nos exerccios prticos utilizar a
expresso a, b para designar a b. Por exemplo a expresso 00, 1
corresponde
expresso regular 0(01)
.
Vamos agora mostrar que o poder descritivo das expresses regulares equivalente
ao dos autmatos nitos.
Teorema 2.4.2. Uma linguagem regular se e s se est associada a alguma expresso
regular.
Repare-se que o teorema tem um se e s se pelo que estamos a lidar com uma
equivalncia. Vamos mostrar as duas implicaes em dois lemas distintos.
Lema 2.4.3. Se uma linguagem est associada a uma expresso regular, ento ela
regular.
16
Linguagens Formais e Autmatos - Daniel Graa
Figura 2.8: Um autmato nito que reconhece a linguagem a.
Demonstrao. Se a expresso regular for a para certo a , ento o AFND represen-
tado na Fig. 2.8 reconhece a.
Se a expresso regular for , ento o AFND representado na Fig. 2.9 reconhece .
Para o caso de , qualquer AFD sem estados nais reconhece . Finalmente, o caso da
unio, concatenao e operador de fecho j foram todos tratados na seco anterior.
Figura 2.9: Um autmato nito que reconhece a linguagem .
Por exemplo, a linguagem associada expresso regular (00)
10 reconhecida
pelo AFND da Fig. 2.10 (podiam-se ter utilizado as construes anteriores para a con-
catenao e fecho, mas aqui procedeu-se a algumas simplicaes para o AFND no
car muito complexo).
Figura 2.10: Autmato nito que reconhece a linguagem associada expresso regular
(00)
10.
17
Captulo 2. Autmatos nitos
Lema 2.4.4. Se uma linguagem regular, ento ela est associada a alguma expresso
regular.
Demonstrao. A demonstrao vai ser feita com recurso a autmato nitos generali-
zados (AFG). Basicamente um AFG um AFND em que cada transio pode ter no s
um smbolo de ou , mas sim qualquer expresso regular sobre . De resto, o aut-
mato comporta-se como usualmente, exceto que cada transio pode ler logo um grupo
de smbolos do input. Uma descrio formal pode ser encontrada em [Sip05]. Para alm
da caracterstica essencial de cada transio poder admitir expresses regulares, vamos
assumir, sem perda de generalidade, as seguintes condies:
Um AFG tem s um estado nal, do qual no partem transies para outros es-
tados (se o autmato original no satisfazer esta condio, pode-se convert-lo
noutro equivalente adicionando um novo estado q
f
, que ser o nico estado nal,
e transies com a palavra vazia que vo dos antigos estados nais para q
f
).
O AFG tem um estado inicial que no recebe transies de nenhum outro estado
(se o autmato original no satisfazer esta condio, pode-se convert-lo noutro
equivalente adicionando um novo estado inicial q
i
, e uma transio com a palavra
vazia que vai de q
i
para o estado inicial antigo).
Entre dois estados, excetuando os casos mencionados acima, existe sempre uma
e uma s transio (supe-se que a transio de um estado para ele prprio com
a palavra existe sempre, embora no seja representada nos diagramas. Se no
existir nenhuma transio entre dois estados distintos, cria-se uma nova transio
associada expresso regular , que no vamos representar mais frente para
simplicar os diagramas. Se houver mais do que uma transio, por exemplo, se
existirem duas transies do estado q
i
para o estado q
j
, uma associada ao smbolo
0 e outra associada a , substituir essas transies por uma s que tem a unio
das expresses regulares associadas s transies anteriores. No exemplo ante-
rior, passaria a existir uma s transio do estado q
i
para o estado q
j
, que estaria
associada expresso regular 0).
O processo para obter uma expresso regular associada linguagem reconhecida
por um AFND ser o seguinte: (i) converter o AFND para um AFG com k estados
U
k
(k 2, pois ter de ter um estado inicial e um estado nal) utilizando os passos
anteriores (ii) utilizar um processo (que ser introduzido de seguida) que, para k > 2,
permite determinar um AFG U
k1
, equivalente a U
k
, mas que tem s k 1 estados.
Repetindo recursivamente o passo (ii), obtemos um sequncia de AFGs equivalentes
U
k
, U
k1
, . . . U
2
. Quando obtivermos o AFG U
2
, que s ter o estado inicial e o estado
nal, e uma nica transio entre estes estados, a expresso regular associada ao AFND
original ser a expresso regular associada a esta transio de U
2
.
Falta s determinar o processo que permite converter U
k
em U
k1
para k > 2, e
mostrar que tem as propriedades desejadas.
18
Linguagens Formais e Autmatos - Daniel Graa
Como U
k
tem k > 2 estados, h pelo menos um estado que no inicial nem nal.
Seja q
r
um desses estados, que vamos remover para obter U
k1
. Mas para fazer isso
vamos ter de reparar as transies para que os AFG se mantenham equivalentes. Su-
ponhamos que em U
k
, o estado q
i
vai para o estado q
r
atravs da expresso regular R
1
,
q
r
vai para ele prprio atravs da expresso R
2
, q
r
vai para q
j
atravs da expresso R
3
e q
i
vai para q
j
atravs da expresso R
4
(ver Fig. 2.11). Ento a transio do estado q
i
para o estado q
j
no AFG U
k1
estar associada expresso (R
1
)(R
2
)
(R
3
) R
4
.
Figura 2.11: Suprimindo um estado na demonstrao do Lema 2.4.4.
fcil ver que se uma palavra w aceite por U
k1
, ela tambm ser aceite por U
k
.
Por outro lado, se w aceite por U
k
, ter de existir uma sequncia de estados
q
inicial
q
i
1
q
i
2
. . . q
f inal
associada a este input. Se esta sequncia de estados no inclui q
r
, ento bvio que w
tambm aceite por U
k1
. Se inclui o estado q
r
, existe uma primeira ocorrncia deste
estado na sequncia, sendo o estado imediatamente anterior q
i
, e uma ltima ocorrncia,
sendo o estado imediatamente seguinte q
j
. A expresso regular na transio de q
i
para
q
j
em U
k1
descreve todas as palavras que levam q
i
para q
j
em U
k
. Portanto w ser
tambm aceite por U
k1
.
A demonstrao anterior construtiva: dado um AFND, permite-nos obter uma ex-
presso regular associada linguagem reconhecida por este AFND. Por exemplo, con-
sideremos o AFND da Fig. 2.12. Utilizando a construo do lema anterior, conclumos
que uma expresso regular associada linguagem reconhecida por este AFND
(abaaa
b)
(aaa
).
O processo que permite mostrar isso encontra-se esquematizado nas Fig. 2.13, 2.14,
2.15, e 2.16.
Resumindo, as linguagens regulares admitem duas formas distintas, mas equivalen-
tes, de serem caracterizadas: uma atravs de mquinas (autmatos nitos), e outra mais
descritiva (expresses regulares).
19
Captulo 2. Autmatos nitos
Figura 2.12: Exemplo de um AFND.
Figura 2.13: Obteno da expresso regular associada ao AFND da Fig. 2.12: passo 1.
20
Linguagens Formais e Autmatos - Daniel Graa
Figura 2.14: Obteno da expresso regular associada ao AFND da Fig. 2.12: passo 2.
Figura 2.15: Obteno da expresso regular associada ao AFND da Fig. 2.12: passo 3.
A expresso E corresponde palavra vazia .
21
Captulo 2. Autmatos nitos
Figura 2.16: Obteno da expresso regular associada ao AFND da Fig. 2.12: passo 4.
A expresso E corresponde palavra vazia .
2.5 Linguagens no-regulares
Em geral, para compreender quais as capacidades de um sistema, temos de ser capazes
de identicar as suas limitaes. Nesta seco iremos apresentar um mtodo que, em
certos casos, nos permite dizer que uma dada linguagem no regular. Por exemplo, a
linguagem
L =0
k
1
k
0, 1
[k N (2.2)
parece ser no-regular, porque parece que necessitamos de ter acesso a uma quantidade
ilimitada de memria para registar o nmero de 0s que j apareceram durante a leitura
do input, para depois compar-los como nmero de 1s que ho de aparecer. No entanto,
este argumento no suciente para mostrar que L no regular, pois existe sempre a
possibilidade de algum inventar um mtodo engenhoso que permita reconhecer L.
Podemos, no entanto, mostrar que L no regular atravs do seguinte resultado.
Teorema 2.5.1 (Lema da bombagem). Se A uma linguagem regular, ento existe um
nmero p (o comprimento da bombagem) com a propriedade que se w uma palavra
em A com comprimento maior ou igual a p, ento w pode ser escrita como w = xyz,
onde x, y, z so palavras e:
1. Para cada i N, xy
i
z A,
2. [y[ 1,
3. [xy[ p.
Demonstrao. Sejam M = (Q, , , q
0
, F) um AFD que reconhece a linguagem A e p o
nmero de estados de M. Seja ainda w = w
1
. . . w
n
uma palavra de A com comprimento
22
Linguagens Formais e Autmatos - Daniel Graa
n p. Seja r
1
, . . . , r
n+1
a sequncia de estados que M segue para aceitar w. Esta sequn-
cia tem n +1 p +1 estados. Como s existem p estados, ter de haver dois estados
repetidos na sequncia r
1
, . . . , r
n+1
. Suponhamos ento que r
j
= r
k
, para j < k p+1.
Se tomarmos x = w
1
. . . w
j1
, y = w
j
. . . w
k1
, e z = w
k
. . . w
n
, no difcil ver que as 3
condies do teorema so satisfeitas.
Em geral, para mostrar que uma dada linguagem L no regular, utilizamos uma
demonstrao por absurdo: supomos que L regular, pelo que o Lema da bombagem
deveria ser vlido. Depois mostramos que uma das condies do Lema da bombagem
no se verica, pelo que temos um absurdo, o que implica que L no seja regular.
Por exemplo, vamos mostrar que a linguagem denida pela equao (2.2) no
regular. Suponhamos, por absurdo, que a linguagem L regular. Ento existe um
comprimento da bombagem p que satisfaz as condies do Lema da bombagem (no
sabemos o valor desse p: pode ser 2, 7, ou mesmo 1000103. Por isso designamo-lo
simplesmente por p). Em particular, a palavra
w = 0
p
1
p
= 0. . . 0
p vezes
1. . . 1
p vezes
pertence a L e tem comprimento [w[ = 2p p ( importante fazer aparecer o p na
expresso de w para garantir que tenha comprimento p), pelo que se lhe aplica o
Lema da bombagem. Ento podemos decompor w em w= xyz, onde x, y, z 0, 1
so
palavras que satisfazem as condies 1, 2 e 3 do Lema da bombagem. Pela condio 3,
[xy[ p. Mas como xy constitui o incio da palavra w, e como os primeiros p smbolos
desta palavra so 0s, s pode ser
xy = 0
k
= 0. . . 0
k vezes
com k p. Em particular, isso implica que y s pode ser constitudo por 0s, isto
y = 0
j
= 0. . . 0
j vezes
com j k. Por outro lado, pela condio 2 do Lema da bombagem,
[y[ 1, pelo que j 1. Isto implica que
xy
2
z = 0
kj
x
0
j
y
0
j
y
0
pk
1
p
z
= 0
p+j
1
p
.
Como p + j > p, conclumos que xy
2
z / L. Mas isto absurdo, pois se L regular,
ter de satisfazer o Lema da bombagem e, em particular, a condio 1 que implica que
xy
2
z L. Ento a nossa hiptese (L regular) ter de ser falsa, isto , L no uma
linguagem regular.
Apesar de nas aulas utilizarmos o Lema da bombagem para mostrar que uma lingua-
gem no regular, chama-se a ateno que h linguagens no-regulares (ver Exerccio
33 das folhas prticas) que satisfazem o Lema da bombagem. Por outras palavras, se
uma linguagem no satisfazer as condies do Lema da bombagem, de certeza que no
regular, mas se as satisfazer, pode ou no ser uma linguagem regular (nada se pode
concluir neste caso).
23
Captulo 2. Autmatos nitos
24
Captulo 3
Linguagens livres de contexto
Vimos no captulo anterior que nem todas as linguagens so reconhecidas por autmatos
nitos. Um exemplo a linguagem introduzida em (2.2). Por este motivo precisamos
de modelos computacionais mais poderosos que permitam, ao contrrio dos autmatos
nitos, utilizar uma quantidade ilimitada de memria. Uma aplicao deste tipo de
linguagem , por exemplo, na compilao de linguagens de programao.
3.1 Autmatos de pilha
No captulo anterior, introduzimos um tipo de mquina, com memria limitada, que
reconhece as linguagens regulares: o autmato nito. Em geral, um autmato nito
funciona segundo a descrio esquemtica apresentada na Fig. 3.1. Existe uma estrutura
de controlo, que representa os estados e as funes de transio. Existe um input, e o
autmato vai lendo o input da esquerda para a direita, uma casa de cada vez, atualizando
a estrutura de controlo.
Figura 3.1: Esquema de um autmato nito.
Agora vamos estender os autmatos nitos, permitindo-lhe acesso a uma quantidade
ilimitada de memria atravs de uma pilha (i.e. atravs de uma memria de tipo LIFO:
last in, rst out), originando os chamados autmatos de pilha (AP). Este modelo funci-
ona como um AFND, com a diferena de incorporar uma pilha, tal como esquematizado
na Fig 3.2.
Agora a regra de transio no depende apenas do smbolo atualmente lido no input
e do estado atual, mas tambm do smbolo lido no topo da pilha. Esta regra vai alterar
25
Captulo 3. Linguagens livres de contexto
Figura 3.2: Esquema de um autmato de pilha.
no s o estado, como j acontecia nos autmatos nitos, mas tambm o smbolo que
est no topo da pilha. Os AP tambm podem ser descritos atravs de diagramas. Um
exemplo dado na Fig. 3.3.
Figura 3.3: Exemplo de um autmato de pilha.
As transies so representadas por expresses do tipo a, b; c ou, equivalentemente,
do tipo a, b c (que , na minha opinio, mais clara, embora a notao com o ponto
e vrgula seja a utilizada pelo software JFLAP). O smbolo a corresponde ao smbolo
atualmente lido no input, o smbolo b corresponde ao smbolo atualmente lido na pilha
(est no topo da pilha). Osmbolo c corresponde ao novo smbolo a escrever na pilha
e que substitui b. Por exemplo, a transio mais esquerda do AP da Fig. 3.3 diz que
quando se est a ler no input e no topo da pilha, esto o do topo da pilha deve ser
mudado para o smbolo $. Repare-se que estamos a permitir no-determinismo, assim
como a utilizao da palavra vazia , tal como se fez no caso dos AFND. Podemos ter
vrias computaes, dependendo das vrias possibilidades que as transies oferecem e
das vrias possibilidades de incorporar no input e na pilha.
Na realidade, o contedo da pilha pode ser considerado como uma palavra s. Inici-
almente a palavra vazia (a pilha est vazia), mas cada vez que acrescentamos um novo
smbolo na pilha, este smbolo concatenado esquerda da palavra s. Logo o smbolo
do topo da pilha (que est atualmente a ser lido) o smbolo mais esquerda de s. Por
26
Linguagens Formais e Autmatos - Daniel Graa
exemplo, o contedo da pilha do AP da Fig 3.2 s = aba. . .. Como podemos sempre
acrescentar palavras vazias vontade e, no fundo, como o que conta para as compu-
taes o topo da pilha, vamos ter de considerar as computaes referentes palavra
aba. . . (ou seja, o topo da pilha a) e as computaes referentes palavra aba. . . (ou
seja, o topo da pilha ). A computao funciona como nos AFND.
Vamos tomar como exemplo o AP da Fig. 3.3 e o input v = 1100. Inicialmente a
pilha est vazia pelo que s = . Para comearmos uma computao do estado inicial,
preciso que o smbolo lido no input seja . Ento reescrevemos o input de forma
equivalente como v = 1100. Lemos o do input, o do topo da pilha, e a regra
de transio diz-nos que devemos transitar para o estado q
1
, substituindo o do topo
da pilha por $ (esta transio tipicamente efetuada para marcar o m da pilha com
um smbolo especial, que tomamos como sendo $), obtendo s = $. Depois lemos o
primeiro 1 do input (poderamos tambm ler um para transitar para o estado q
2
. Mas
quando fssemos ler o 1 seguinte do input e temos de ler todo o input a computao
morria porque no existe transio denida de q
2
para o smbolo 1 pelo que este
ramo da computao no interessa). S temos transies a partir do estado q
1
se o topo
da pilha tiver um . Mas s = $ = $, pelo que podemos tomar a pilha como sendo
$. Assim transitamos novamente para o estado q
1
e o smbolo do topo da pilha foi
substitudo por um 1, i.e. temos agora s = 1$. Por outras palavras, acrescentamos um 1
pilha (zemos uma operao push). Lendo o 1 seguinte do input, de forma semelhante
ao caso anterior, vamos continuar no estado q
1
e a pilha ter o contedo s = 11$.
Agora j no temos nenhum 1 no input. A nica forma de continuar a computao
utilizar as palavras vazias no input e na pilha, ou seja tomar v =1100 e s =11$. Com
isto transitamos para o estado q
2
, e a pilha continua a ter o contedo s = 11$ = 11$.
Agora temos duas possibilidades de transio. Como o smbolo no topo da pilha no
$, a nica possibilidade de transio ler um 0 do input e um 1 da pilha. Este 1 da pilha
transformado na palavra vazia , pelo que s = 1$ = 1$, ou seja extraiu-se o smbolo
1 do topo da pilha (fez-se uma operao de tipo pop). Em geral, uma transio do tipo
a, b faz uma operao de tipo push na pilha e uma transio do tipo a, b faz
uma operao de tipo pop na pilha ver Fig. 3.4 e 3.5.
f
g
h
f
g
h
a,b
=
b
f
g
h
Figura 3.4: Efetuando uma operao push numa pilha atravs de uma transio do tipo
a, b.
Em seguida l-se o ltimo 1 do input, obtendo-se s = $ = $. A computao para
a palavra v = 1100 acaba aqui, no estado q
2
. Como no acaba num estado nal, esta
computao no aceita v. Mas ainda podemos continuar a computao, para a seguinte
27
Captulo 3. Linguagens livres de contexto
b
f
g
h
a,b
=
f
g
h
f
g
h
Figura 3.5: Efetuando uma operao pop numa pilha atravs de uma transio do tipo
a, b .
variante de v = 1100. Neste caso l-se o ltimo do input e o $ da pilha (garante
que a pilha est vazia) e transita-se para o estado q
3
. Como acabaram todos os smbolos
para esta variante do input, e o estado atingido nal, conclui-se que v aceite, isto ,
aceitamos a palavra 0011.
Da mesma forma se conclui que as palavras , 10, 111000, 1
k
0
k
so aceites e, por
exemplo, as palavras 0, 1, 01,0011,11000,110 so rejeitadas pelo AP da Fig. 3.3. Assim
podemos associar a este AP M uma linguagem, a constituda pelas palavras aceites por
M:
L(M) =0
k
1
k
0, 1
[k N. (3.1)
Note-se que esta linguagem no regular (j foi visto na Seco 2.5). Formalmente
um AP pode ser denido da seguinte forma.
Denio 3.1.1. Um autmato de pilha um 6-tuplo (Q, , , , q
0
, F) onde:
1. Q um conjunto nito (de estados),
2. um alfabeto (de entrada),
3. um alfabeto (da pilha),
4. : Q() () P(Q()) a funo de transio,
5. q
0
Q o estado inicial,
6. F Q o conjunto dos estados nais.
Considere-se o autmato de pilha M = (Q, , , , q
0
, F). Uma palavra w
aceite pelo autmato de pilha M se w pode ser escrita como w = w
1
. . . w
n
, onde cada
w
i
, e se existemsequncias de estados r
0
, r
1
, . . . , r
n
Qe de palavras s
0
, s
1
, . . . , s
n
[M aceita w.
Denio 3.1.2. Uma linguagem livre de contexto se a linguagem reconhecida por
algum autmato de pilha.
Teorema 3.1.3. Toda a linguagem regular livre de contexto.
Demonstrao. Se a linguagem L regular, ela reconhecida por um AFD M. Pe-
gando em cada regra de transio de M, do tipo (q, a), basta altera-la para
/
(q, a, ) =
((q, a), ) para obter um AP M
/
que reconhece a mesma linguagem L. Na prtica
isso equivalente a mudar o smbolo a em cima de uma seta de transio num AFD (ou
AFND) para a, para obter o AP correspondente. No fundo, este AP no usa a
pilha, pelo que se comporta como um AFND, reconhecendo a mesma linguagem que
M.
Por exemplo, utilizando a construo da demonstrao do teorema anterior, conclu-
mos que a linguagem reconhecida pelo AFND da Fig. 2.2 reconhecida pelo AP da Fig.
3.6.
Figura 3.6: Um exemplo de autmato de pilha que reconhece a mesma linguagem que
o autmato nito da Fig 2.2.
conclumos tambm que a classe das linguagens livres de contexto inclui estrita-
mente a classe das linguagens regulares, pois a linguagem dada por (3.1) livre de
contexto, mas no regular.
29
Captulo 3. Linguagens livres de contexto
3.2 Gramticas livres de contexto
No caso das linguagens regulares, demos duas caracterizaes equivalentes mas distin-
tas para esta classe, uma atravs de mquinas e outra atravs de expresses. Vamos
fazer a mesma coisa para as linguagens livres de contexto. J vimos como podem ser
caracterizadas atravs de mquinas (utilizando os autmatos de pilha), e agora vamos
ver como podem ser descritas de forma mais algbrica, atravs das gramticas livres de
contexto.
Antes de darmos a denio formal de gramtica livre de contexto, vamos ver um
exemplo de gramtica livre de contexto, que designaremos de G
1
:
A 0A1
A B
B #
G
1
consiste num conjunto de regras de substituio (neste caso, 3 regras). Cada re-
gra tem um smbolo que aparece esquerda da seta, designado de varivel (G
1
tem por
variveis A e B), e direita da seta existe uma palavra que constituda por variveis,
e por outro tipo de smbolos, os terminais (em G
1
os terminais so os smbolos 0, 1, #).
Uma das variveis designada como sendo a varivel inicial (nesta cadeira tomaremos
a conveno de ser a varivel que aparece esquerda da seta da primeira regra. No caso
da gramtica G
1
ser a varivel A). Depois vamos gerando palavras comeando com a
varivel inicial, e utilizando regras de G
1
para ir expandindo, passo a passo, cada vari-
vel, at que o resultado s contenha terminais. Assim possvel gerar palavras sobre o
alfabeto dos terminais. Por exemplo, a palavra 0#1 pode ser gerada pela gramtica G
1
,
j que
A 0A1 0B1 0#1.
Da mesma forma, a palavra 000#111 tambm pode ser gerada pela gramtica G
1
, pois
A 0A1 00A11 000A111 000B111 000#111.
Em geral, j que s nos interessa o resultado nal, e para no descrever todos os passos
intermdios, iremos escrever simplesmente A
000#111 (i.e. 000#111 pode ser obtido
de A aplicando regras de G
1
). fcil ver que a gramtica G
1
gera exatamente todas as
palavras com o formato 0
k
#1
k
, onde k N. Portanto, podemos denir a linguagem da
gramtica livre de contexto G
1
como sendo
L(G
1
) =0
k
#1
k
0, 1, #
[k N.
Note-se que, na denio de G
1
, h duas regras que tm a varivel A. Para simplicar a
notao, iremos fundir as duas regras numa s, separando as palavras direita das setas
pelo smbolo [. Por outras palavras, iremos utilizar a seguinte descrio equivalente
30
Linguagens Formais e Autmatos - Daniel Graa
para G
1
:
A 0A1 [ B
B #.
Vamos agora denir formalmente os conceitos que acabamos de introduzir.
Denio 3.2.1. Uma gramtica livre de contexto um 4-tuplo (V, , R, S ), onde:
1. V um conjunto nito (de variveis),
2. um conjunto nito, que no contm elementos de V (conjunto dos terminais),
3. R V (V )
[S
w.
Por exemplo, a gramtica G = (S , 0, 1, S 0S 1, S , S ), onde as regras
podem ser escritas como
S 0S 1 [ ,
origina a linguagem L(G) =0
k
1
k
[k N. A gramtica dada pela regra
S S
no origina nenhuma palavra, pelo que a linguagem desta gramtica livre de contexto
.
31
Captulo 3. Linguagens livres de contexto
s vezes, dada uma gramtica G, possvel ter duas derivaes distintas de uma
palavra a partir do smbolo inicial. Por exemplo, a gramtica denida com as seguintes
regras:
EXPR) EXPR) +EXPR)[ EXPR) EXPR)[ EXPR)[a
permite gerar a palavra a +a a atravs de duas derivaes. Neste caso a gramtica
diz-se ambgua.
Denio 3.2.3. Uma palavra w diz-se ambgua na gramtica livre de contexto G se
existem duas derivaes distintas da palavra a partir do smbolo inicial. Neste caso
diz-se tambm que a gramtica G ambgua.
Muitas vezes possvel transformar uma gramtica ambgua noutra no-ambgua e
que gera a mesma linguagem. No entanto, este procedimento nem sempre possvel.
Tal como no captulo anterior, temos um resultado que relaciona linguagens de gra-
mticas livres de contexto com linguagens livres de contexto.
Teorema 3.2.4. Uma linguagem livre de contexto se e s se a linguagem de alguma
gramtica livre de contexto.
A demonstrao deste resultado vai ser dividida em duas partes.
Lema 3.2.5. Se uma linguagem a linguagem de uma gramtica livre de contexto,
ento ela reconhecida por um autmato de pilha.
Demonstrao. Aqui apenas iremos apresentar um esboo da demonstrao. Os deta-
lhes formais podem ser encontrados em [Sip05], por exemplo.
Seja L(G) uma linguagem livre de contexto gerada pela gramtica G. Vamos construir
um autmato de pilha que aceita uma palavra w se e s se w L(G). A descrio
informal desse autmato dada pelos seguintes passos:
1. Meter o smbolo $ na pilha e depois a varivel inicial de G.
2. Repetir os seguintes passos:
(a) Se o topo da pilha um smbolo de varivel A, de forma no-determinstica
selecionar umas das regras de G de expanso para A e substituir A na pilha
pelos correspondentes smbolos da regra.
(b) Se o topo da pilha um terminal a, ler o smbolo seguinte do input e
compar-lo com a. Se so iguais, repetir a regra 2, se so diferentes, re-
jeitar (neste ramo de computao no-determinstica).
(c) Se o topo da pilha o smbolo $, ir para um estado nal [ Oinput ser aceite
apenas se foi completamente lido].
32
Linguagens Formais e Autmatos - Daniel Graa
Lema 3.2.6. Se uma linguagem reconhecida por um autmato de pilha, ento ela
livre de contexto.
Demonstrao. Seja P = (Q, , , , q
0
, F) um autmato de pilha. Queremos construir
uma gramtica livre de contexto G tal que w aceite por P se e s se w L(G). Antes
de construirmos G vamos assumir, sem perda de generalidade, que (i) P tem um nico
estado nal q
f inal
(ver o exerccio 50), (ii) P esvazia a pilha antes de aceitar uma palavra
e (iii) cada transio adiciona ou retira um smbolo no-nulo da pilha (i.e. efetua uma
operao push ou pop. Uma transio que substitua um smbolo por outro na pilha pode
sempre ser decomposta em duas transies deste tipo efetuadas sequencialmente). A
nossa gramtica G ter a seguinte propriedade: para quaisquer estados p, q de P, existe
uma varivel A
pq
que gera todas as palavras que levam o estado p com a pilha vazia para
o estado q com a pilha vazia. Neste caso, A
q
0
q
f inal
vai gerar todas as palavras aceites por
P.
A gramtica G constituda pelas variveis A
pq
[p, q Q e a varivel inicial obvia-
mente A
q
0
q
f inal
. As regras de transio so:
Para todos os p, q, r, s Q, t e a, b , se (r, t) (p, a, ) e (q, ) (s, b, t),
ento introduzir a regra A
pq
aA
rs
b em G.
Para todos os p, q, r Q, introduzir a regra A
pq
A
pr
A
rq
em G.
Para todo o p, introduzir a regra A
pp
em G.
Esta gramtica tem as propriedades desejadas, como se pode mostrar por induo (a
estrutura onde se aplica a induo depende do caso que estamos a considerar):
(1) (Demonstrao por induo no nmero de passos da derivao de w a partir de A
pq
)
Queremos mostrar que se A
pq
gera a palavra w, ento w leva o estado p com a pilha
vazia para o estado q com a pilha vazia. Ocaso base trivial, j que consiste numa nica
aplicao de uma regra de G para obter w. Logo a regra em causa s pode ser do tipo
A
pp
, donde p = q, e bvio que a palavra leva o estado p com a pilha vazia
para o estado p com a pilha vazia. Suponhamos agora que o resultado verdadeiro para
palavras geradas por k aplicaes de regras de G. Suponhamos que A
pq
w com
k +1 aplicaes de regras de G. Ento a primeira regra utilizada nessa derivao ser
A
pq
aA
rs
b ou A
pq
A
pr
A
rq
.
No primeiro caso teremos w = ayb, A
rs
y, A
rq
y, donde A
pq
ayb = w.
No caso (b), seja r um estado intermdio em que a pilha est vazia. Ento possvel
ir do estado p com a pilha vazia para o estado r com a pilha vazia, e da para o estado
q com a pilha vazia, sendo estas duas computaes feitas em k passos. Por hiptese
induo, A
pr
x, A
rq
w.
3.3 Linguagens que no so livres de contexto
Embora a classe das linguagens livres de contexto seja mais extensa do que a classe das
linguagens regulares, existem linguagens no livres de contexto. Podemos mostrar isso,
por exemplo, atravs do seguinte resultado.
Teorema 3.3.1 (Lema da bombagem para linguagens livres de contexto). Se A uma
linguagem livre de contexto, ento existe um nmero p (o comprimento da bombagem)
com a propriedade que se w uma palavra em A com comprimento maior ou igual a p,
ento w pode ser escrita como w = uvxyz, onde u, v, x, y, z so palavras e:
1. Para cada i N, uv
i
xy
i
z A,
2. [vy[ 1,
34
Linguagens Formais e Autmatos - Daniel Graa
Figura 3.7: rvores de derivao.
3. [vxy[ p.
Demonstrao. Seja G uma gramtica livre de contexto que gera a linguagem A e seja
b o nmero mximo de smbolos no lado direito de uma regra. Podemos supor, sem
perda de generalidade, que b 2 (se houver uma regra A B, ela pode ser substituda
por A B[C, C C[B).
Dada essa gramtica, podemos fazer uma rvore de derivaes a partir do smbolo ini-
cial S , e fcil vericar que cada vrtice no pode ter mais de b lhos. Portanto, no
nvel 1 da rvore temos, no mximo, b folhas, no nvel 2, b
2
folhas, e no nvel k, b
k
folhas. Logo, se a rvore que gera uma palavra tem profundidade k, ento a palavra
no pode ter comprimento superior a b
k
. Seja [V[ o nmero de variveis de G, e tome-se
p = b
[V[+2
. Portanto qualquer rvore que gera uma palavra de comprimento p ter
profundidade [V[ +2.
Seja w uma palavra de comprimento p. Vamos utilizar o princpio do pombal
1
para
mostrar que w satisfaz as propriedades indicadas no teorema. Seja A uma rvore de
derivao da palavra w, tal que nenhuma outra rvore de derivao de w tenha menos
vrtices do que A. Esta rvore ter profundidade [V[ +2. Ento haver um caminho
descendente de comprimento [V[ +2 em que aparecem pelo menos [V[ +1 variveis
(a ltima folha um smbolo e no uma varivel). Pelo princpio do pombal, nessa
sequncia de smbolos haver um smbolo R repetido, com duas ocorrncias nos lti-
mos [V[ +1 vrtices que aparecem no caminho mencionado acima.
Dividimos a palavra w de acordo com a Fig. 3.7. Cada ocorrncia de R tem uma subr-
vore debaixo dela. Na ocorrncia de cima de R, a subrvore gera a palavra vxy, enquanto
que a subrvore da ocorrncia em baixo de R gera x. Como ambas as rvores so ge-
radas pela mesma varivel, podemos substituir uma subrvore pela outra: substituindo
1
Este princpio arma que se n pombos devem ser metidos em m pombais, com n > m, ento h de
certeza um pombal com mais de um pombo.
35
Captulo 3. Linguagens livres de contexto
a rvore maior pela menor, obtemos uxz. Substituindo a rvore menor pela maior, de
forma iterada, podemos gerar a palavra uv
i
xy
i
z para i 2. Isto mostra o ponto 1 do
teorema.
Para obter a condio 2, temos de garantir que v e y no so ambas . Se, por
absurdo, v = y = , ento w = uxz e podemos substituir a subrvore da ocorrncia de
cima de R pela subrvore da ocorrncia de baixo de R. Esta rvore continua a gerar
w, mas tem menos vrtices do que A, o que absurdo (A uma rvore mnima de
derivao de w).
Para a condio 3, como as ocorrncias que consideramos de R se situamnos ltimos
[V[ +1 vrtices, ento a subrvore de R que gera vxy tem profundidade [V[ +2, e s
pode gerar uma palavra de comprimento b
[V[+2
= p.
Vamos agora dar um exemplo de como aplicar o Lema da bombagem (para lingua-
gens livres de contexto), para mostrar que uma linguagem no livre de contexto. O
procedimento semelhante ao das linguagens regulares, mas agora h mais casos a tra-
tar porque, para as linguagens livres de contexto, as condies do Lema da bombagem
so um pouco mais complexas.
Seja
L =0
k
1
k
0
k
0, 1
[k N. (3.2)
Vamos mostrar que esta linguagem no livre de contexto. Suponhamos, por absurdo,
que a linguagem L livre de contexto. Ento existe um comprimento da bombagem p
que satisfaz as condies do Lema da bombagem. Em particular, a palavra
w = 0
p
1
p
0
p
= 0. . . 0
p vezes
1. . . 1
p vezes
0. . . 0
p vezes
pertence a L e tem comprimento [w[ = 3p p ( importante fazer aparecer o p na
expresso de w para garantir que w tenha pelo menos p smbolos), pelo que se lhe aplica
o Lema da bombagem. Ento podemos decompor w em w = uvxyz, onde u, v, x, y, z
0, 1
[k N,
que vimos no ser livre de contexto na Seco 3.3. Portanto as mquinas de Turing
40
Linguagens Formais e Autmatos - Daniel Graa
Figura 4.2: Um exemplo de mquina de Turing.
41
Captulo 4. Teoria da Computabilidade
Figura 4.3: Os primeiros 5 passos da computao da mquina de Turing da Fig. 4.2 com
input 001100.
42
Linguagens Formais e Autmatos - Daniel Graa
Figura 4.4: Uma mquina de Turing cuja computao no para para o input w = 00.
conseguem reconhecer linguagens que so no regulares, nem livres de contexto. Como
funciona a MT? Ela aceita imediatamente a palavra vazia . Se o input comea por
um 1, ele imediatamente rejeitado. Se comea com um 0, marcamo-lo com um X e
procuramos o 1 seguinte direita. Se no existir, a palavra rejeitada. Se houver um
1, marcamo-lo com um Y. Agora procuramos um zero direita desse 1. Se no existir,
o input rejeitado. Se existir, marcamos o 0 com um Z. Agora voltamos para o incio
da palavra (mais corretamente at ao primeiro X j marcado no interessa voltar mais
para trs do que isto) e repetimos este processo at esgotar os zeros do primeiro bloco
de 0s ( quando transitamos de q
0
para q
5
). A vamos percorrendo a palavra, garantindo
que j no h 0s e 1s, isto que s h Ys e Zs, at chegar ao smbolo branco. Neste
momento sabemos que podemos aceitar o input. Se um input no deve ser aceite, ento
h sempre um ponto onde j no h possvel efetuar mais transies com este input,
pelo que ele rejeitado.
Note-se que esta MT para sempre, aceitando ou rejeitando o input (diz-se que reco-
nhece a linguagem L), mas pode acontecer que para certos inputs uma MT no pare. Por
exemplo, a MT da Fig. 4.4 no para para o input w = 00 (a cabea de leitura desloca-se
indenidamente para a esquerda).
Vamos agora denir formalmente estes conceitos.
Denio 4.1.1. Uma mquina de Turing um 7-tuplo (Q, , , , q
0
, B, F) onde:
1. Q um conjunto nito (de estados),
2. um alfabeto (dos inputs),
3. um alfabeto (da ta), contendo o smbolo especial B (o smbolo branco), e
satisfazendo ,
4. : Q QD, E, P a funo de transio,
5. q
0
Q o estado inicial,
6. F o conjunto dos estados nais.
No ponto 4 da denio anterior D, E, P designam movimentos da cabea de leitura:
uma clula para a direita (D), uma clula para a esquerda (E), ou ento ca parada (P).
43
Captulo 4. Teoria da Computabilidade
Em cada momento da computao apenas um nmero nito de clulas no ter o
smbolo B. Portanto, assumindo que a cabea de leitura est a ler uma certa clula,
o contedo da ta a partir da primeira clula mais esquerda que no contm um B
at clula que a cabea de leitura est a ler, exclusive, pode ser escrito como uma
palavra v
. Ento se q
i
for o estado atual da MT,
o triplo (v, q
i
, w) determina completamente o estado atual da computao: conhecendo
apenas esta informao podemos continuar a computao sem quaisquer problemas. A
estes triplos d-se o nome de conguraes. Por exemplo, no 3
o
passo da computao
indicada na Fig. 4.3, a congurao correspondente dada por (X0, q
1
, 1100).
Repare-se que a uma dada congurao segue-se outra congurao e por a fora,
bastando para isso ir seguindo as regras de transio da mquina de Turing, at chegar
a uma congurao (u, q, w) em que q um estado nal, a que se chama uma congu-
rao aceitadora, ou at chegar a uma congurao a que no se lhe segue nenhuma
outra congurao (a computao morre neste momento), chamada congurao re-
jeitadora. Uma congurao de paragem uma congurao que ou aceitadora, ou
rejeitadora.
Em particular, no incio da computao, a congurao ser do tipo (, q
0
, w), onde
w o input da MT. Este tipo de congurao chamado de congurao inicial.
Denio 4.1.2. Uma mquina de Turing aceita a palavra w
[M aceita w.
Denio 4.1.3. Uma linguagem diz-se recursivamente enumervel (r.e.) se a lingua-
gem de alguma mquina de Turing.
Por exemplo, as linguagens das MT das Fig. 4.2 e 4.4 so, respetivamente, 0
k
1
k
0
k
0, 1
[k N e .
Repare-se que, no caso anterior, quando um input no aceite podem acontecer duas
coisas: (i) o input rejeitado; (ii) a MT nunca chega a parar. Como normalmente nos
d jeito que a MT pare ao m de algum tempo, introduzimos a seguinte denio.
44
Linguagens Formais e Autmatos - Daniel Graa
Denio 4.1.4. Uma linguagem L diz-se recursiva se a linguagem de alguma m-
quina de Turing M, com a propriedade adicional que para qualquer w
, a compu-
tao de M com input w tem sempre de acabar numa congurao de paragem. Neste
caso dizemos tambm que M decide L, ou ainda que M reconhece L.
Por exemplo, a MT da Fig. 4.2 decide a linguagem 0
k
1
k
0
k
0, 1
[k N da
Equao (3.2) mas, apesar de ser a linguagem da MT da Fig. 4.4, essa MT no decide
, porque h inputs (por exemplo, o input 0) que nunca chegam a uma congurao de
paragem (por outras palavras, utilizando tempo nito e apenas a computao da MT,
no conseguimos dizer se o input pertence ou no linguagem).
Note-se que toda a linguagem recursiva obviamente r.e., mas como teremos oca-
sio de ver mais frente, o resultado recproco no verdadeiro. O seguinte teorema
permite relacionar linguagens recursivas e recursivamente enumerveis com as classes
de linguagens introduzidas nos captulos anteriores.
Teorema 4.1.5. Toda a linguagem livre de contexto tambm recursiva.
Demonstrao. Se L uma linguagem livre de contexto, ento est associada a uma
gramtica livre de contexto G, com varivel inicial S . A ideia obter todas as possveis
derivaes a partir de S . No entanto, a demonstrao formal no ser dada nas aulas
(h o problema de alguns ramos de computao poderem levar tempo innito, e isto
implica que a demonstrao seja um pouco mais complicada do que parece primeira
vista), mas pode ser encontrada em [Sip05].
Note-se que a classe das linguagens livres de contexto est estritamente includa na
classe das linguagens recursivas, j que a linguagem da Equao (3.2) recursiva, mas
no livre de contexto.
s vezes teremos necessidade de computar uma funo f :
como
sendo uma funo que dada uma palavra 0
k
0
retorna f (0
k
) = 0
2k
, i.e. f duplica o
tamanho do input. Esta funo computada pela MT da Fig. 4.5, se utilizarmos a noo
de computao indicada abaixo.
Denio 4.1.6. Uma funo f :
, o seguinte acontece:
1. Se f (w) est denido, ento inicialmente a cabea de leitura est a ler o smbolo
mais esquerda do input. Para alm do input, a ta s tem brancos. Depois
a computao iniciada, e continua at chegar a uma congurao aceitadora.
Neste instante a ta conter somente o resultado f (w) (o resto da ta s ter
smbolos brancos), estando a cabea de leitura a ler o smbolo mais esquerda de
f (w).
45
Captulo 4. Teoria da Computabilidade
Figura 4.5: Mquina de Turing que duplica o tamanho do input, quando este consti-
tudo s por 0s.
46
Linguagens Formais e Autmatos - Daniel Graa
2. Se f (w) no est denido, ento a computao com input w nunca chegar a uma
congurao aceitadora.
Note-se que a partir do momento em que computamos funes sobre
, podemos
computar funes sobre outros domnios. Por exemplo, consideremos a funo f : N
N tal que g(k) = 2k. Se tomarmos como alfabeto = 0, ento podemos representar
o nmero k por 0
k
em
[k 10
3k
0
[k 1.
Por exemplo, 0 / L, 00000 / L, mas 00 L, 000 L.
50
Linguagens Formais e Autmatos - Daniel Graa
Figura 4.10: Uma mquina de Turing no-determinstica.
Outro exemplo de MTND dado na Fig. 4.10. Tem 3 estados onde h duas tran-
sies possveis com o mesmo smbolo (estados q
1
, q
2
, q
3
). Este AFND reconhece a
linguagem 0, 1, 01, 10. Formalmente, uma MTND denida da seguinte forma.
Denio 4.2.1. Uma mquina de Turing no-determinstica um7-tuplo (Q, , , , q
0
,
B, F) denido como no caso da mquina de Turing, com a exceo que : Q
P(QD, E, P). Repare-se que agora a uma congurao podem-se seguir vrias
conguraes. Uma palavra w
(q
2
, B, D) se o cdigo 1
(q
3
, B, D) se o cdigo 2
(q
2
, B) =
(q
4
, 0, D) se o cdigo 1
(q
5
, 0, D) se o cdigo 2
(q
3
, 1) =
(q
7
, 1, D) se o cdigo 1
(q
9
, 1, D) se o cdigo 2.
Consideremos o input 00. Comeamos no estado q
0
e depois vamos para o estado
q
1
. Daqui vamos querer fazer nova transio, mas temos duas possibilidades. Vamos
ter de registar essas possibilidades na ta 3. A ta 3 est inicialmente vazia, pelo que
escrevemos um 1, e depois deslocamos a cabea desta ta uma clula para a direita,
indo para o estado q
2
. Temos novamente uma transio no-determinstica no estado
q
2
, pois estamos a ler um B. Escrevemos novamente um 1 na ta 3 e continuamos
com a computao (a ta 3 tem o contedo 11), chegando ao estado q
4
que rejeita
esta computao. Agora vamos experimentar outro caminho de computao. Para isso,
vamos para o passo 4 da simulao, alterando o contedo da ta 3 para 12, e metendo
a cabea de leitura sobre o 1. Repetimos a computao com o input 00: comeamos
em q
0
, vamos para q
1
, e como estamos a ler um 1 na ta 3, vamos para o estado q
2
,
movendo a cabea desta ta uma clula para a direita. Depois temos nova transio
no-determinstica. Como estamos a ler um 2 na 2
a
ta, vamos agora para o estado q
5
que tambm rejeita o input. Fazemos novamente o passo 4 (experimentar outro caminho
de computao). Como j no h mais smbolos para alm do 2 em 1, 2, devemos
apagar o 2 de 12 (o contedo da ta 3 passa a ser 1) e aplicamos novamente o passo
4, cando o contedo da ta 3 2. Repete-se a computao, passando pelos estados q
0
,
q
1
, q
3
e a computao morre nesse momento. Repete-se novamente o passo 4, apagando
53
Captulo 4. Teoria da Computabilidade
o 2. Neste momento a 3
a
ta ca vazia (j no h novas possibilidades de caminhos
de computao), e o input rejeitado.
Iremos frequentemente codicar objetos matemticos em palavras de um dado alfa-
beto. Por exemplo, consideremos o grafo (no-orientado) G da Fig. 4.11 e o alfabeto
=0, 1. Ento o grafo pode ser codicado na seguinte palavra de
:
G) = 0000
vrtices
11 0100
1
a
aresta
11010000
2
a
aresta
11001000
3
a
aresta
.
O primeiro bloco de zeros d-nos o nmero de vrtices do grafo (ou seja, 4). Depois
escrevemos 11 para dizer que vem uma aresta. Como de seguida vem um 0, separado
por um 1 de dois 0s, isso quer dizer que o vrtice 1 est ligado ao vrtice 2 por uma
aresta. De seguida vm mais dois 1s para assinalar outra aresta: a que vai do vrtice 1
ao vrtice 4. Finalmente vem a aresta que vai do vrtice 2 ao vrtice 3. Da mesma forma
podemos codicar qualquer grafo G numa palavra de 0, 1
(
000
1
101
,
001
2
. . . 010
3
110
)
110
)
.
54
Linguagens Formais e Autmatos - Daniel Graa
Figura 4.11: Exemplo de grafo.
Como uma MT M pode ser descrita de forma textual utilizando a notao da Denio
4.1.1, podemos tambm codic-la de forma semelhante numa palavra M) de 0, 1
.
Em geral, qualquer objeto nito (um nmero, grafo, MT, um texto em portugus, etc.)
pode ser codicado numa palavra de 0, 1
aceita se M, w) H
paragem
rejeita se M, w) , H
paragem
.
Por outras palavras,
N(M, w)) =
[k N,
conclumos que L
1
TI ME(n
2
).
De forma semelhante, conclumos que a MT da Fig. 4.8 decide a linguagem L
2
=
0
k
1
k
0, 1
em que [w[ = n, cada ramo de computao necessita de tempo O(n) para ser
concludo. Logo L
3
=0
2k
0
[k 10
3k
0
[k 1
0
3k
0
[k 1 TI ME(2
O(n)
), isto , L
3
pode ser reconhecida por uma MT em
tempo 2
O(n)
.
O seguinte teorema mostra que adicionar vrias tas a uma MT apenas permite, no
mximo, um ganho quadrtico no tempo de execuo relativamente a uma MT com uma
s ta.
Teorema 5.1.5. Seja f : N N uma funo satisfazendo f (n) n para todo o n N.
Se uma linguagem L decidida em tempo f (n) por uma mquina de Turing com k tas,
ento L decidida em tempo O( f
2
(n)) por uma mquina de Turing com uma s ta.
Demonstrao. Antes de comear a demonstrao, consideremos um exemplo. Supo-
nhamos que temos uma MT com 3 tas, cujo contedo das tas num dado momento
. . . BB010
110BB. . .
. . . BBB
BB. . .
. . . BB111
11BB. . .
(o tringulo indicada o que a cabea de leitura est a ler). Ento o contedo da primeira
ta pode ser codicado como 010110 (os smbolos esquerda do so os smbolos
no-brancos esquerda da cabea de leitura, a palavra 0110 o que est na posio
da cabea de leitura, inclusive, at sua direita, no se contando a poro innita de
brancos que se lhe segue). Ento o contedo das 3 tas, assim como a posio das
respetivas cabeas de leitura, pode ser registado numa nica palavra
#010110##11111#.
Utilizando um procedimento semelhante, para uma MT M com k tas, podemos registar
o contedo das k tas, assim como a posio das respetivas cabeas de leitura, utilizando
uma nica ta. Assim podemos criar uma MT M
1
, com uma nica ta, que simula M.
A MT simula M passo a passo da seguinte forma:
1. L o contedo da sua ta para determinar quais os smbolos lidos nas k tas de
M
1
;
2. Com base nesses smbolos e no estado atual, atualiza o estado e o contedo das k
tas (ou melhor dizendo, a sua codicao numa nica ta).
61
Captulo 5. Complexidade computacional
Note-se que s vezes vamos ter de empurrar (fazer um shift) quando efetuamos os
movimentos virtuais das cabeas das tas de M. Por exemplo, se na congurao
#010110#. . . #
o prximo passo ser manter o smbolo 0 atualmente lido na ta 1 e deslocar a cabea
de leitura uma casa para a direita, o contedo virtual das 3 tas ser codicado como
#B010110#. . . #.
Por outras palavras, zemos um shift no contedo da ta de M
1
.
Vamos agora ver quanto tempo se demora a simular M com a mquina M
1
para um
input de tamanho n. Como M utiliza tempo f (n) n, cada uma das tas de M nunca vai
ter mais de f (n) smbolos (mais precisamente O( f (n))). Logo a descrio das k tas de
M na nica ta de M
1
precisa de k O( f (n)) = O( f (n)) smbolos.
A simulao de um passo de M pela MT M
1
necessita de 2O( f (n)) passos (ler a
ta e voltar atrs passo 1 indicado atrs) + k O( f (n)) (para atualizar o contedo da
ta. Pode haver at k shifts, necessitando cada um deles de tempo O( f (n)) para ser
executado). Resumindo, cada passo de M pode ser executado em tempo O( f (n)) por
M
1
.
Mas, com input de tamanho n, M utiliza no mximo O( f (n)) passos de computao.
Logo M
1
necessita, no total da simulao, de tempo O( f (n)) O( f (n)) = O( f
2
(n)).
Por exemplo, j sabemos que a MT da Fig. 4.8, que utiliza duas tas, decide a lingua-
gem L
2
=0
k
1
k
0, 1
[k N P
L
2
=0
k
1
k
0, 1
[k 1 P
L
3
=0
2k
0
[k 10
3k
0
[k 1 NP
L
4
=0, 1, 01, 10 NP
pois L
1
pode ser decidida em tempo O(n
2
) pela MT da Fig. 4.2, L
2
pode ser decidida em
tempo O(n) pela MT da Fig. 4.8, L
3
pode ser decidida em tempo O(n) pela MTND da
Fig. 4.9, e L
4
pode ser decidida em tempo O(1) pela MTND da Fig. 4.10. A experincia
mostra que os problemas que podem ser resolvidos em tempo razovel so aqueles que
esto em P. claro que pode dizer que um problema que necessita de tempo n
1000000
para ser resolvido no resolvel na prtica, mas normalmente os problemas teis em
P podem ser resolvidos em tempo com expoentes baixos, tipicamente n ou n
2
.
Que relaes existem entre estas classes? Sabe-se que
P NP EXPTI ME.
A relao P NP bvia, e a incluso NP EXPTI ME vem do Teorema 5.1.4
(note-se que O(2
cn
k
) O(2
n
k+1
)). Sabe-se ainda que P ,= EXPTI ME, mas no se
conhece mais nenhuma relao entre estas 3 classes. Por exemplo, no se sabe se
NP = EXPTI ME ou no, nem se P = NP ou no.
Quando estivermos a tentar determinar a complexidade de algoritmos que envolvam
clculos aritmticos, utilizaremos as seguintes hipteses:
Adio: dados dois inputs de tamanho n, a sua adio pode ser calculada em
tempo O(n).
Multiplicao, diviso inteira (div), resto da diviso inteira (mod): dados dois
inputs de tamanho n, estas operaes podem ser calculadas em tempo O(n
2
).
(assumimos que os nmeros so escritos em notao unria, ou em base d 2. Os
tempos das operaes podem ser obtidos em qualquer livro de Anlise Numrica, ou
inspecionado o tempo necessrio para executar os clculos mo). Existem formas
alternativas de caracterizar NP. Uma delas utilizando vericadores. Suponhamos que
temos uma linguagem L em NP, reconhecida em tempo O(n
k
) por uma MTND N
1
. Pre-
sentemente a teoria apenas garante existir uma MT determinstica que reconhece L em
tempo 2
O(n
k
)
. No entanto, se algum nos disser que w L, e alm do mais nos fornecer
63
Captulo 5. Complexidade computacional
o caminho c de uma computao aceitadora (na demonstrao do Teorema 4.2.2, este c
a palavra da ta 3 que leva a uma congurao aceitadora. Por exemplo, na MTND da
Fig. 4.10 ver comentrio a seguir demonstrao do Teorema 4.2.2 a palavra c = 12
d-nos o caminho de uma computao que aceita o input 0), conseguimos vericar a
veracidade dessa informao com uma MT determinstica em tempo polinomial. Esta
informao adicional c costuma ser designada de certicado, pois permite-nos certicar
que o input aceite, com uma MT determinstica, em tempo polinomial. Esta a ideia
base dos certicados de segurana: no podem ser criados em tempo polinomial por
um utilizador qualquer, i.e. no se pode determinar em tempo polinomial um caminho
aceitador com uma MT determinstica, mas pode-se vericar essa informao (cami-
nho) em tempo polinomial, garantindo a segurana do comrcio eletrnico (desde que
as premissas indicadas atrs sejam satisfeitas).
Na prtica, esta descrio de NP com certicados mais til do que considerar
MTNDs.
Teorema 5.2.2. L NP se e s se existe uma mquina de Turing M cujo tempo de
execuo polinomial (em w) tal que
L =w
. (5.1)
Demonstrao. Demonstrao da direo =do se e s se. Se L NP, ento existe
uma MTND N que aceita L. Podemos criar uma MT M que recebe como input w, c),
que basicamente simula N, com input w, para o caminho de computao indicado por
c (ver a demonstrao do Teorema 4.2.2 e os comentrios que se lhe seguem). Se esse
caminho aceitar, M aceita w, c), caso contrrio rejeita w, c). Ora w L sse existe
uma computao de N que aceita w sse M aceita w, c) para algum c
. Por outras
palavras (5.1) satisfeita.
Para mostrar a implicao inversa, suponhamos que (5.1) satisfeita. Suponhamos
ainda que M corre em tempo n
k
, onde n = [w[. Ento M nunca vai ler mais do que n
k
smbolos de c. Ento podemos criar uma MTND N
1
que faz o seguinte (com input w):
1. Criar no-deterministicamente uma palavra c
de comprimento n
k
(tempo n
k
).
2. Correr M com input w, c) (tempo n
k
).
3. Se M aceitar w, c), aceitar w, caso contrrio rejeitar (tempo 1).
Oque isso de criar no-deterministicamente uma palavra c
? Suponhamos, por
exemplo, que =0, 1. Ento podemos criar no-deterministicamente uma palavra de
comprimento 3 em
de comprimento n
k
demora tempo n
k
.
64
Linguagens Formais e Autmatos - Daniel Graa
Figura 5.1: Exemplo de mquina de Turing no-determinstica que gera nmeros no-
deterministicamente.
Portanto N
1
corre em tempo O(n
k
) e w aceite por N
1
sse existe um caminho de
computao aceitador sse existe um c
de comprimento n
k
tal que M aceita w, c)
sse w L. Logo, N
1
reconhece L, donde L NP.
Por outras palavras, a classe NP a classe dos problemas em que, dada uma solu-
o, fcil verica-la, mas muito difcil determina-la, exceto se o problema tambm
pertence a P.
Existem muitos outros exemplos onde o certicado parece ser fundamental, por e-
xemplo em problemas envolvendo redes (grafos). Obviamente, quando considerarmos
problemas com grafos, o input no ser um grafo G, mas a sua codicao G) utili-
zando, por exemplo, as codicaes dadas no nal da Seco 4.2. Note-se que se G tem
n vrtices, ento para as codicaes indicadas atrs, tem-se n [G)[. Alm do mais,
existe um j N tal que [G)[ n
j
. Portanto, se o nosso input for um grafo G com n
vrtices, e se mostrarmos que existe um algoritmo que executado em tempo polino-
mial em n, esse algoritmo tambm ser executado em tempo polinomial relativamente
ao tamanho do input G). Assim, para mostrar que um problema com grafos pertence
a P (ou NP), basta mostrar que existe uma MT (MTND) que resolve o dado problema
em tempo O(n
k
), onde n o nmero de vrtices do grafo G dado como input (em vez
de mostrar que o tempo O([G)[
k
), j que o input w =G)).
Considere, por exemplo, o seguinte problema:
L
2
=G) onde G um grafo no-orientado [ existe um caminho que passa (5.2)
exatamente uma vez por cada vrtice de G.
A seguinte MT determinstica permite decidir L
2
(supomos que G tem n vrtices):
1. De entre os n vrtices de G, 1, . . . , n, selecionar uma sequncia de n vrtices dis-
tintos i
1
, . . . , i
n
.
2. Testar se i
1
. . . i
n
um caminho em G. Por outras palavras, testar se
(i
1
, i
2
), . . . (i
n1
, i
n
) so arestas de G (pode-se ver se a aresta (i
1
, i
2
) pertence a G
scannado o input G). Cada teste destes demora O([G)[) = O(n
j
) passos). Se
sim, aceitar, se no voltar ao passo 1 com outra sequncia de vrtices no testada
(se no restarem mais possibilidades, rejeitar).
Aexecuo da rotina para cada possvel sequncia de vrtices demora tempo O(n
j+1
)
(temos n arestas a testar, demorando cada uma delas O(n
j
) passos a testar). Mas h n!
65
Captulo 5. Complexidade computacional
possibilidades de escolhas para os vrtices no passo 1, pelo que esta MT no executada
em tempo polinomial, mas somente em tempo exponencial. Logo L
2
EXPTI ME. No
entanto, se utilizarmos uma MTND, o tempo de computao passa a ser polinomial.
Para isso basta utilizar o seguinte algoritmo:
1. De entre os n vrtices de G, 1, . . . , n, selecionar no-deterministicamente uma
sequncia de n vrtices distintos i
1
, . . . , i
n
.
2. Testar se i
1
. . . i
n
um caminho em G. Se sim, aceitar, se no rejeitar.
Esta MTND tambm tem n! caminhos de computao (uma para cada possvel ca-
minho de G), mas cada caminho pode ser executado em tempo O(n
j+1
). Logo o tempo
de execuo da MTND O(n
j+1
), donde L
2
NP.
Outra forma de mostrar que L
2
NP utilizar certicados: dado um grafo G e um
certicado (soluo) c, a seguinte MT permite vericar em tempo polinomial se G L
2
(i.e. permite vericar em tempo polinomial a soluo):
1. Dado o input G, c), testar se c codica uma sequncia i
1
, . . . , i
n
de n vrtices de
G.
2. Testar se i
1
. . . i
n
um caminho em G.
3. Se ambos os testes deram uma resposta armativa, aceitar G, c), caso contrrio,
rejeit-lo.
Como j dissemos, o certicado basicamente a codicao do caminho aceitador
(i.e. da soluo) que mostra que G L
2
. Outra forma de o ver, e que normalmente uti-
lizada na prtica (foi utilizado no exemplo em cima) assumir que se c um certicado,
ento codica uma pea de informao que garante que o input pertence linguagem.
No exemplo anterior, a propriedade que G tem de ter para pertencer a L
2
que exista um
caminho com n vrtices distintos em G. Ento para demonstrar que G L
2
basta exibir
esse caminho, ou seja, natural que o certicado seja a codicao desse caminho. Essa
ideia utilizada nas aulas prticas (para pensar no que o certicado basta pensar na
seguinte pergunta: qual a pea de informao que eu tenho de exibir para garantir que
o input pertena linguagem?. Em geral, o certicado no ser nada mais do que uma
codicao dessa pea de informao).
5.3 Problemas NP-completos
Em 1971 Stephen Cook introduziu a noo de problema NP-completo como ferramenta
para abordar o problema P = NP? Esta noo importante no s pela contribuio
que poder ter na resoluo do problema P = NP?, mas tambm porque permite
concluir que certos problemas em NP so especialmente difceis. Antes de introduzir
esta noo, precisamos de algumas denies.
66
Linguagens Formais e Autmatos - Daniel Graa
Figura 5.2: Redutibilidade de linguagens.
Denio 5.3.1. Uma funo f :
dada por f (0
n
) = 0
2n
pode ser calculada em
tempo O(n
2
) pela MT da Fig. 4.5, donde f computvel em tempo polinomial.
Denio 5.3.2. Uma linguagem A redutvel em tempo polinomial a uma linguagem
B, escrito como A
P
B, se existe uma funo f :
,
w A se e s se f (w) B.
Por outras palavras, existe um subrotina que permite converter, em tempo polino-
mial, o problema x A? para o problema x B?, como sugere a Fig. 5.2. Assim,
se for fcil decidir a linguagem B, tambm ser fcil decidir A, utilizando a subrotina
de converso. Por exemplo, considere-se a linguagem
HAMPATH =G, s, t) onde G um grafo e s, t so vrtices[existe um (5.3)
caminhohamiltoniano de s a t,
onde um caminho hamiltoniano um caminho que passa exatamente uma vez por
cada vrtice de G. Ento, dada a linguagem L
2
denida pela Equao (5.2), tem-se
HAMPATH
P
L
2
. Para mostrar isso, temos de denir a funo f que faz a reduo
polinomial. O que fazemos dado o grafo G, construir um novo grafo G
/
da seguinte
forma: G
/
uma cpia de G, em que se adicionaram dois novos vrtices v
1
, v
2
, e duas
novas arestas (v
1
, s), (v
2
, t). Ento a nica forma de existir um caminho que passa por
todos os vrtices de G
/
uma nica vez ter um caminho v
1
s . . . t v
2
onde
s . . . t um caminho hamiltoniano (repare que se v
1
no surgir num extremo do
caminho, ele aparece no meio da sequncia de vrtices. Ento teremos . . . s v
1