Você está na página 1de 75

UNIVERSIDADE DO ALGARVE

FACULDADE DE CINCIAS E TECNOLOGIA


Apontamentos
para
Linguagens Formais e Autmatos
Curso de Informtica (2
o
ano)
Daniel Graa
Ano lectivo 2010/11
Contedo
1 Introduo 1
1.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Alfabetos e linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Autmatos nitos 5
2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 O modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Linguagens regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Expresses regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Linguagens no-regulares . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 Linguagens livres de contexto 25
3.1 Autmatos de pilha . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Gramticas livres de contexto . . . . . . . . . . . . . . . . . . . . . . . 29
3.3 Linguagens que no so livres de contexto . . . . . . . . . . . . . . . . 34
4 Teoria da Computabilidade 39
4.1 Mquinas de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2 Tese de Church-Turing . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3 O problema da paragem . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Complexidade computacional 59
5.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2 As classes P e NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
i
Captulo 1
Introduo
1.1 Motivao
O hardware informtico tem evoludo de forma espantosa, tendo seguido nas ltimas 4
dcadas a Lei de Moore:
O poder de computao de um chip duplica a cada 18 meses
Por outras palavras, o poder de computao tem crescido de forma exponencial. Na
realidade esta lei no tem sido s vlida para a velocidade de processamento de um
CPU, mas tambm para outros dispositivos digitais: a memria, o nmero de pxeis das
CCDs das cmaras digitais, etc.
Este desenvolvimento tambm se reectiu no software, com novas metodologias e
linguagens de programao a progredir de forma muito acentuada, no sendo difcil que
um engenheiro informtico que rapidamente desactualizado.
Torna-se portanto importante desenvolver um conjunto de conhecimentos bsicos
sobre o que computao, mas que sejam independentes do tipo de computador utili-
zado, ou da linguagem de programao (se C ou Prolog, etc.). sobre estas questes
que a teoria da computao se debrua.
A teoria da computao importante para um informtico para lhe dar mais matu-
ridade intelectual. Por exemplo, permite compreender se novas solues tecnolgicas
constituem pequenos melhoramentos (como o aumento do nmero de transstores no
CPU), ou se pelo contrrio estas constituem autnticas revolues (como promete ser o
possvel desenvolvimento de computadores qunticos). Por exemplo, o primeiro vrus
informtico surgiu na dcada de 1970. No entanto a sua existncia (e a forma de os
conceber) conhecida desde a dcada de 1930, 40 anos antes desse evento, e mesmo
antes da utilizao generalizada de computadores. Portanto a apario de vrus no foi
surpresa para aquelas pessoas que tinham conhecimentos de teoria da computao (
bem possvel que tenha sido uma dessas pessoas a programar os primeiros vrus).
Outra caracterstica importante da teoria da computao que nos permite compre-
ender melhor os limites da Informtica. Assim como um cirurgio no bom cirurgio
1
Captulo 1. Introduo
se no conhece os limites das tcnicas cirrgicas que aplica, o mesmo se poder dizer
de um informtico que no conhece os limites da programao.
H problemas que se sabem serem impossveis de resolver por meio de um com-
putador, mesmo que se pudesse esperar trilies de anos, e h outros que embora sejam
resolveis teoricamente, no o so na prtica porque exigem demasiado tempo ou me-
mria. A teoria da computao investiga e fornece resultados sobre estes problemas.
Do que que isso lhe serve? Imagine, por exemplo, que o seu patro lhe pede um
programa para realizar uma determinada tarefa. Voc tenta, mas no consegue. Voc
pode sempre dizer ao seu patro que s conseguiu um algoritmo que leva dias ou meses
a resolver o problema dele, e mais nada, deixando-o a pensar que voc um informtico
de segunda e que fez mal em t-lo contratado. Ou ento pode explicar que no possvel
desenvolver algoritmos ecazes para resolver este tipo de problemas e convenc-lo que,
em vez de despedi-lo, o melhor ser tentar apostar numa heurstica (um programa que
d uma resposta aproximada, em vez de exacta), ou ento outra abordagem.
1.2 Alfabetos e linguagens
Denio 1.2.1. Um alfabeto um conjunto nito e no-vazio de smbolos.
Em geral iremos utilizar letras gregas maisculas para designar alfabetos. Por exem-
plo, podemos considerar =0, 1 como sendo o alfabeto binrio, ou ainda o alfabeto
=$, , a. No, entanto, e seguindo a notao usual na literatura, quando se conside-
rar um s alfabeto, ele ser representado pela letra sigma maisculo: .
Denio 1.2.2. Uma palavra sobre um alfabeto uma sequncia nita de smbolos
de . O comprimento de uma palavra w sobre o nmero de smbolos presentes em
w, denotado por [w[. Em particular a palavra vazia, denotada de , a palavra com zero
ocorrncias de smbolos.
Por exemplo, 010010 uma palavra sobre o alfabeto binrio
1
=0, 1 e da mesma
forma abracadabra uma palavra sobre o alfabeto
2
=a, b, . . . , z, com comprimen-
tos 6 e 11, respectivamente. Estritamente falando, a denio de comprimento da pa-
lavra w incorrecta, pois estamos a falar no nmero de ocorrncias de smbolos de ,
e no simplesmente no nmero de smbolos de w (por exemplo, abracadabra s tem 5
smbolos: a, b, c, d, r, mas h 11 ocorrncias de smbolos de
2
nesta palavra). Mas esta
uma notao normalmente utilizada que iremos manter. O conjunto das palavras de
comprimento k sobre dado por

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

, o conjunto denido 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 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

[w tem o mesmo nmero de ocorrncias de 0s do que


1s. No entanto, L =a, b, c j no uma linguagem sobre .
Denio 1.2.6. Sejam A e B linguagens sobre o alfabeto . Denimos as seguintes
operaes cujo resultado so tambm linguagens sobre .
Unio: AB =x

[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

o conjunto de todas as palavras que podem ser obtidas


concatenando palavras de A tantas vezes quantas quisermos.
Por exemplo, tomando A =10, 11, B =0, 111, tem-se
AB =0, 10, 11, 111
A B =100, 10111, 110, 11111
A

=, 10, 11, 1010, 1011, 1110, 1111, 101010, 101011, . . .


(concatenando zero palavras de A, obtm-se s a palavra vazia. Concatenando uma
palavra de A, obtm-se as palavras 10 e 11. Concatenando duas palavras de A, obtm-se
1010, 1011, 1110, 1111. Concatenando trs palavras de A, obtm-se . . . ).
Se estiver denida uma ordem sobre , podemos denir a ordem lexicogrca em

como sendo a mesma ordem que utilizada num dicionrio, excepto 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

se [u[ < [v[, ou se [u[ =[v[ ento existe k


tal que u
i
= v
i
para i = 1, . . . , k 1 e u
k
< v
k
.
4
Captulo 2
Autmatos nitos
2.1 Introduo
Uma questo essencial da Teoria da Computao : o que um computador? Parece
uma pergunta trivial, mas um computador uma mquina muito complexa, e no f-
cil inferir sobre as suas capacidades e limitaes. Por essa razo utilizamos modelos
idealizados destas mquinas, retendo apenas as caractersticas essenciais do seu funcio-
namento, obtendo assim resultados que so vlidos para qualquer tipo de computador.
Nesta cadeira vamos estudar 3 modelos de computao, cada um com mais poder
computacional do que o anterior. Grosso modo, os 3 modelos que vamos estudar so
constitudos por dois elementos: uma memria; uma estrutura de controlo que pode
aceder ao input e memria, e que executa instrues pr-determinadas (o programa).
Na prtica, esta estrutura de controlo corresponde ao microprocessador num compu-
tador. Os trs modelos utilizam o mesmo tipo de estrutura de controlo, e a diferena
fundamental (mesmo que o no parea primeira vista) no tipo de memria utilizado.
Os trs modelos so, por ordem crescente de capacidades computacionais: aut-
matos nitos (memria limitada), autmatos de pilha (memria ilimitada, mas do tipo
LIFO: last in, rst out), e mquinas de Turing (memria ilimitada de acesso aleatrio).
2.2 O modelo
Os autmatos nitos consistem na idealizao de um computador que tem acesso apenas
a uma quantidade limitada de memria. Na prtica, computadores desse gnero podem
ser utilizados para controlar um elevador, as portas automticas de um supermercado,
o dispositivo de injeco de um motor de combusto interna, etc. (a quantidade de
memria xa e no possvel em geral aument-la). Normalmente iremos representar
autmatos nitos por meio de diagramas, por ser mais fcil compreend-los desta forma.
Um exemplo, de autmato nito determinstico (AFD) pode ser encontrado na Fig. 2.1.
Um AFD constitudo por vrios estados, representados pelas bolas amarelas. Tem
5
Captulo 2. Autmatos nitos
Figura 2.1: Um exemplo de autmato nito determinstico.
sempre um estado inicial, identicado pelo tringulo sua esquerda, que no caso deste
autmato o estado q
0
. Poder ter 0, 1, ou mais estados nais, que so identicados
atravs de um crculo dentro do estado. No caso do AFD da Fig. 2.1 existe um s
estado nal, o estado q
3
. Associado a um AFD est sempre um alfabeto . No caso do
exemplo, o alfabeto =0, 1. Dado um estado, ter de haver sempre uma transio
para outro estado (possivelmente ele prprio) associada a cada elemento de . No nosso
exemplo, dado um estado, ter de existir sempre uma transio (representada por uma
seta) associada ao elemento 0 e outra associada ao elemento 1. Todas as possveis
transies tm de estar denidas num AFD.
Um input para um AFD uma palavra em

que ser aceite ou rejeitada pelo AFD.


Vamos ver com um exemplo, como que um AFD trabalha. Consideremos o AFD da
Fig. 2.1 com o input w=0110. Inicialmente a computao comea no estado inicial, q
0
.
O AFD l o primeiro smbolo de w, que um 0. As regras de transio determinam que
do estado q
0
com um 0, nos mantemos no estado q
0
. Depois lemos o smbolo seguinte
do input, que um 1. Ento passamos para o estado q
1
. Lendo o smbolo seguinte de
v, um 1, transitamos para o estado q
2
. Finalmente lemos o ltimo smbolo de w, e a
respectiva regra de transio diz para nos mantermos no estado q
2
. Neste momento a
computao acabou. A palavra w ser aceite se a computao acabou num estado nal,
e ser rejeitada caso contrrio. Como q
2
no estado nal, a palavra w rejeitada. Se
tomssemos como input v = 1011, esta palavra j ser aceite. No difcil vericar que
este AFD aceita todas as palavras binrias que contenham pelo menos trs 1s, e rejeita
todas as restantes.
Esta descrio por meio de diagramas a que ser normalmente utilizada nos exer-
ccios. A memria de que falamos na Seco 2.1 est implicitamente codicada nos
estados. Por exemplo, no AFD da Fig. 2.1, o estado q
0
memoriza o facto de que no
apareceu nenhum 1 no input at ao presente momento, o estado q
1
memoriza o facto
que j apareceu exactamente um 1, e o estado q
3
que j apareceram trs ou mais 1s no
input.
Formalmente, um AFD pode ser descrito da seguinte forma.
Denio 2.2.1. Um autmato nito determinstico um 5-tuplo (Q, , , q
0
, F), onde
1. Q um conjunto nito, o conjunto dos estados;
2. um alfabeto;
6
Linguagens Formais e Autmatos - Daniel Graa
3. : Q Q a funo de transio;
4. q
0
Q o estado inicial;
5. F Q o conjunto dos estados nais.
Utilizando esta notao, um AFD funciona da seguinte forma. Dada uma palavra
w = w
1
. . . w
k
sobre , comeamos no estado inicial q
0
e vamos ver que novo estado d
a funo de transio para este estado e para o smbolo w
1
. Se (q
0
, w
1
) = r
1
, deste
novo estado r
1
, vamos ler o smbolo seguinte w
2
da palavra w, obtendo o novo estado
r
2
= (r
1
, w
2
). Repetimos este processo at chegar ao ltimo smbolo de w. A o novo
estado ser r
k
= (r
k1
, w
k
) e o AFD pra. Se r
k
um estado nal, ento o AFD aceitou
w, caso contrrio rejeitou a palavra. Formalmente:
Denio 2.2.2. Sejam M = (Q, , , q
0
, F) um autmato nito determinstico e w =
w
1
. . . w
k
uma palavra sobre . Ento M aceita w se existe uma sequncia de estados
r
0
, r
1
, . . . , r
k
tal que:
1. r
0
= q
0
;
2. (r
i
, w
i+1
) = r
i+1
para i = 0, . . . , k 1;
3. r
k
F.
Denio 2.2.3. Dizemos que o autmato nito M reconhece a linguagem L se L =
w[M aceita w.
Por exemplo, a linguagem associada ao AFD da Fig. 2.1
L =w 0, 1

[ w contm pelos menos trs ocorrncias de 1s.


Note-se que, em AFDs, cada passo da computao determinstico: dado o estado
actual e o prximo smbolo a ser lido, sabemos exactamente qual ser o prximo es-
tado. No entanto, muitas vezes ser til permitir no-determinismo. Numa mquina
no-determinstica, dado um estado actual e um smbolo, podero existir vrias esco-
lhas para o prximo estado (a palavra vrias inclui o caso em que s h uma ou ne-
nhuma escolha). Um exemplo, de autmato nito no-determinstico (AFND) dado
na Fig. 2.2. Como se pode ver, h estados que admitem mais do que uma transio
para um dado smbolo (por exemplo, o estado q
1
admite transies para os estados q
1
e q
2
com o smbolo 1), e h estados que no admitem transies para certos smbolos
(por exemplo, o estado q
0
no admite transies para o smbolo 1). Esta a caracte-
rstica fundamental do no-determinismo: a possibilidade de vrias transies para um
dado estado e smbolo. Como o no-determinismo uma generalizao do comporta-
mento determinstico, conclumos que todo o autmato nito determinstico tambm
no-determinstico.
7
Captulo 2. Autmatos nitos
Figura 2.2: Um exemplo de autmato nito no-determinstico.
Quando h mais do que uma possibilidade de transio para um dado estado e sm-
bolo, h tambm mais do que uma possibilidade de computao. Por exemplo, no au-
tmato da Fig. 2.2, se tomarmos como input a palavra v = 01, h duas computaes
possveis: q
0
0
q
1
1
q
1
e q
0
0
q
1
1
q
2
. Para uma palavra ser aceite por um
AFND, preciso que exista pelo menos uma computao que acabe num estado nal.
A computao no pode acabar a meio do input (por exemplo, no autmato da Fig. 2.2,
a palavra 00 rejeitada, j que temos q
0
0
q
1
, mas de q
1
j no podemos fazer nada
com o 0 seguinte do input a computao morre a meio do input, pelo que no con-
siderada). No exemplo anterior, a palavra v aceite pelo AFND porque as duas compu-
taes acabam ambas num estado nal (mas bastava uma das computaes acabar num
estado nal para a palavra ser aceite). No entanto, a palavra 1 j no aceite (no existe
nenhuma computao associada a esta palavra e, em particular, no existir nenhuma
computao que acabe num estado nal), mas a palavra 010 j aceite (h duas com-
putaes associadas a esta palavra: q
0
0
q
1
1
q
2
0
q
0
e q
0
0
q
1
1
q
2
0
q
2
.
Como a ltima computao acaba num estado nal, a palavra aceite).
Na denio de um autmato nito no-determinstico, iremos tambm introduzir
mais uma caracterstica que comum na literatura, e que se pode mostrar no alterar a
capacidade computacional deste modelo: a possibilidade de ter transies com a palavra
vazia . Um exemplo, dado na Fig. 2.3, que basicamente o AFND da Fig. 2.2, com
mais uma transio que utiliza a palavra vazia.
Normalmente, dada uma palavra em

, a palavra vazia no aparece l directamente.


Por exemplo, se = 0, 1, qualquer palavra em

s ter 0s e 1s. No entanto, a


palavra vazia pode ser sempre acrescentada vontade, porque no altera a palavra.
Por exemplo, 010 = 010 = 010 = 010 = 010 = . . .. Portanto, se quisermos
ver se 010 aceite por um AFND que tem uma transio com a palavra vazia, temos de
considerar, para alm da palavra 010, todos os seus desdobramentos que contenham
a palavra vazia, e depois computamos como se fosse um smbolo igual aos outros.
8
Linguagens Formais e Autmatos - Daniel Graa
Figura 2.3: Um exemplo de autmato nito no-determinstico com transio utilizando
a palavra vazia .
Por exemplo, para o desdobramento 010 e para o AFND da Fig. 2.3 s temos uma
computao: q
0
0
q
1
1
q
2
0
q
0

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

. Essa palavra reconhecida se existe pelo menos um caminho


de computao que acaba num estado nal.
Denio 2.2.5. Seja M = (Q, , , q
0
, F) um autmato nito no-determinstico e w
uma palavra sobre . Ento M aceita w se w pode ser escrita como w = w
1
. . . w
k

e se existe uma sequncia de estados r
0
, r
1
, . . . , r
k
tal que:
1. r
0
= q
0
;
9
Captulo 2. Autmatos nitos
2. r
i+1
(r
i
, w
i+1
) para i = 0, . . . , k 1;
3. r
k
F.
Da mesma forma, podemos dizer que M reconhece a linguagem L se L = w[M
aceita w. Obviamente que todo o AFD tambm um AFND. Apesar de poder parecer
primeira vista que AFNDs tm mais poder computacional do que os AFDs, tal no
verdade, como mostra o seguinte teorema.
Teorema 2.2.6. Seja L a linguagem reconhecida por um autmato nito no-determi-
nstico. Ento existe um autmato nito determinstico que reconhece a mesma lingua-
gem L.
Demonstrao. Seja N = (Q, , , q
0
, F) um AFND que reconhece L. Queremos cons-
truir um AFD M que reconhece L. Primeiro assumimos que no existem transies
utilizando a palavra vazia . Vamos construir M = (Q
/
, ,
/
, q
/
0
, F
/
) da seguinte forma:
1. Q
/
=P(Q).
2. Para cada R Q
/
e a , toma-se

/
(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 est associado a ne-


nhum estado e portanto no est associado a nenhum estado nal. Logo 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 objectivo. 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, respectivamente. 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 coma palavra para os antigos estados
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, respectivamente. 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, respectivamente, 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, respectivamente.
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 directrio 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 , respectivamente,
3. Se R
1
e R
2
so expresses regulares associadas s linguagens L
1
e L
2
, respec-
tivamente, ento tambm so 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
, respectivamente.
Por exemplo, o Unix (Linux) tem includas funcionalidades que lhe permitem traba-
lhar directamente 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) (0 1) (a ordem pela qual a concatenao feita


no importa). Palavras que esto associadas a esta expresso regular so, por exemplo,
01, 000, 0010, 00110. A linguagem associada a 001

0 01 dada por w 0, 1

[
w = 01 ou w = 001
k
0 para algum k N.
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.
Demonstrao. Se a expresso regular for a para certo a , ento o AFND represen-
tado na Fig. 2.8 reconhece a.
16
Linguagens Formais e Autmatos - Daniel Graa
Figura 2.8: Um autmato nito que reconhece a linguagem a.
Figura 2.9: Um autmato nito que reconhece a linguagem .
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.
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.
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
17
Captulo 2. Autmatos nitos
s um smbolo de ou , mas sim qualquer expresso regular sobre . De resto, o aut-
mato comporta-se como usualmente, excepto 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, exceptuando 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. 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 anterior, 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.
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
18
Linguagens Formais e Autmatos - Daniel Graa
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).
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
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.
A expresso E corresponde palavra vazia .
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 .
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 lei-
tura do input, para depois compar-los com o 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 reconhe-
cer 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
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.
22
Linguagens Formais e Autmatos - Daniel Graa
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
29 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 estru-
tura 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, actuali-
zando 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 actualmente lido no input
e do estado actual, 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 ac-
tualmente lido no input, o smbolo b corresponde ao smbolo actualmente lido na pilha
(est no topo da pilha). O smbolo 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
(no acontece no caso do AP da Fig. 3.3, mas pode haver vrias transies para os mes-
mos smbolos, tal como acontecia num AFND) 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
26
Linguagens Formais e Autmatos - Daniel Graa
smbolo na pilha, este smbolo concatenado esquerda da palavra s. Logo o smbolo
do topo da pilha (que est actualmente a ser lido) o smbolo mais esquerda de s. Por
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 efectuada 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 do input e temos de ler todo o input a computao morria 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: Efectuando 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
27
Captulo 3. Linguagens livres de contexto
b
f
g
h
a,b
=

f
g
h

f
g
h
Figura 3.5: Efectuando uma operao pop numa pilha atravs de uma transio do tipo
a, b .
computao no aceita v. Mas ainda podemos continuar a computao, para a seguinte
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

tais que as seguintes trs condies so satisfeitas:


1. r
0
= q
0
e s
0
= (a computao comea com o estado inicial e a pilha vazia);
28
Linguagens Formais e Autmatos - Daniel Graa
2. Para i = 1, . . . , n, tem-se (r
i
, b) (r
i1
, w
i
, a), onde s
i1
= at e s
i
= bt para certos
a, b e t

(a sequncia de estados e de contedos da pilha uma


possvel computao de M);
3. r
n
F (o ltimo estado nal).
Os dois primeiros passos correspondem a uma computao do AP M (esta compu-
tao pode ou no acabar num estado nal). A linguagem reconhecida por um autmato
de pilha M ser obviamente a linguagem
L(M) =w

[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.
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.
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 #
29
Captulo 3. Linguagens livres de contexto
Figura 3.6: Um exemplo de autmato de pilha que reconhece a mesma linguagem que
o autmato nito da Fig 2.2.
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 exactamente 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
30
Linguagens Formais e Autmatos - Daniel Graa
pelo smbolo [. Por outras palavras, iremos utilizar a seguinte descrio equivalente
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 )

o conjunto das regras,


4. S (a varivel inicial) um elemento de V.
Para simplicar a notao e aproxim-la da que j introduzimos informalmente, se
A V, u (V )

, e (A, u) R, ento escrevemos esta regra como A u. Novamente,


se houver duas regras A u e A v que comecem com A, ento escrevemos
A u [ v.
Se x, y, u (V )

, A V, e A u uma regra da gramtica, dizemos que xAy origina


xuy, e escrevemos xAy xuy. Escrevemos u

v se u = v ou se existe uma sequncia
u
1
, u
2
, . . . , u
k
tal que
u u
1
u
2
. . . u
k
v.
A esta sequncia chamamos derivao de v a partir de u. A linguagem gerada por uma
gramtica livre de contexto o conjunto de todas as palavras que podem ser derivadas a
partir do smbolo inicial.
Denio 3.2.2. A linguagem de uma gramtica livre de contexto G = (V, , R, S ) o
conjunto
L(G) =w

[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
seleccionar 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 [O input 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 46), (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. efectua uma
operao push ou pop. Uma transio que substitua um smbolo por outro na pilha pode
sempre ser decomposta em duas transies deste tipo efectuadas 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 x 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. O caso 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 e y pode ser derivado de A


rs
com k apli-
caes de regras de G. Aplica-se portanto a hiptese de induo a y, pelo que P pode
ir com a pilha vazia de r para s (partindo do estado p, com o smbolo a vamos para o
estado r e metemos t na pilha. Fazemos a computao de r a s utilizando y e, depois
de acabar essa computao, s temos t na pilha. Lendo um b no input e o t da pilha,
podemos apagar o t da pilha e ir para o estado q). Alm do mais, como A
pq
aA
rs
b,
tem-se que (r, t) (p, a, ) e (q, ) (s, b, t), pelo que P pode ir com a pilha vazia de
33
Captulo 3. Linguagens livres de contexto
p para q.
No segundo caso teremos w = yz e A
pr

y, A
rq

z com k aplicaes de regras de


G. Pela hiptese de induo, P pode ir de p para r com a pilha vazia (lendo a poro
y do input), e da para q com a pilha vazia (lendo a poro z do input), o que mostra o
resultado.
(2) Queremos mostrar que se w leva o estado p com a pilha vazia para o estado q com
a pilha vazia, ento w pode ser gerado a partir de A
pq
. A induo feita no nmero
de passos da computao de P. O caso base (n = 0) trivial, j que se comeamos
no estado p, camos no estado p. A nica palavra que consegue fazer isso , que
pode ser gerada pela regra A
pp
. Suponhamos agora que o resultado vlido para
computaes de comprimento k passos. Seja w uma palavra que leva o estado p com
a pilha vazia para o estado q com a pilha vazia em k +1 passos. H dois casos a ter
em conta na computao de p para q com a pilha vazia: (a) No estado p inserido um
smbolo t na pilha que ca l at ser removido na transio nal que leva ao estado q;
(b) a propriedade anterior no se verica, i.e. a pilha ca vazia numa posio intermdia
da computao.
No caso (a) sejam a e b os smbolos do input lidos no primeiro passo e ltimo pas-
sos, respectivamente, r o estado depois do primeiro passo, e s o estado antes do ltimo
passo. Ento (r, t) (p, a, ), (q, ) (s, b, t) e, pela denio de G, A
pq
aA
rs
b. Se
w = ayb, ento y leva o estado r com a pilha vazia (ou com t) para o estado s com a
pilha vazia (ou com t, respectivamente) em k 1 passos. Logo aplica-se a hiptese de
induo e A
rs

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

y, com w = xy. Mas ento a regra A


pq
A
pr
A
rq
, vlida para
este caso, d-nos A
pq

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 casas, com n >m, ento h de certeza
uma casa 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.
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

so palavras que satisfazem as condies 1, 2 e 3 do Lema da bombagem. Pela


condio 3, [vxy[ p. Vamos considerar dois casos:
1. A palavra vxy comea no primeiro bloco de 0s da palavra w. Como vxy tem, no
mximo, p smbolos, s pode ser vxy = 0. . . 0 = 0
k
ou vxy = 0. . . 01. . . 1 = 0
k
1
j
com j, k 1. Pela condio 2, [vy[ 1. Logo v e y no podemser simultaneamente
a palavra vazia . Suponhamos, semperda de generalidade, que v = (se for v =,
ento ter de ser y = , e um raciocnio semelhante aplica-se a y). Como v uma
subpalavra (prexo) de vxy, ter de ser v = 0
l
ou v = 0
l
1
i
, com l, i 1. Mas ento
uv
2
xy
2
z = uvvxyyz
ter uma palavra com pelo menos p+l zeros, seguido de, possivelmente um bloco
com 1s e 0s, seguindo-lhe um bloco de p 1s, seguido de um bloco de p 0s.
Logo uv
2
xy
2
z / L. Mas isto entra em contradio com a condio 1 do Lema da
bombagem.
36
Linguagens Formais e Autmatos - Daniel Graa
2. A palavra vxy no comea no primeiro bloco de 0s da palavra w. Ento vxy
comea no bloco de 1s, ou no segundo bloco de 0s. Logo s pode ser vxy =
1. . . 1 = 1
k
, vxy = 1. . . 10. . . 0 = 1
k
0
j
ou vxy = 0. . . 0 = 0
j
com j +k 1. Pela
condio 2, [vy[ 1. Logo v e y no podem ser simultaneamente a palavra vazia
. Suponhamos, sem perda de generalidade, que v = (se for v = , ento ter de
ser y = , e um raciocnio semelhante aplica-se a y). Como v uma subpalavra
(prexo) de vxy, ter de ser v = 1
l
, v = 1
l
0
i
, ou v = 0
i
, com l +i 1. Mas ento
uv
2
xy
2
z = uvvxyyz
comear com um bloco de p 0s, seguido de um bloco de p 1s, seguido de uma
palavra com pelo menos p +l 1s e p +i 0s, onde i +l 1. Logo uv
2
xy
2
z / L,
mas isto entra em contradio com a condio 1 do Lema da bombagem.
Como em ambos os casos chegamos a um absurdo, conclumos que a linguagem L
no livre de contexto.
Apesar de nas aulas utilizarmos o Lema da bombagem para mostrar que uma lingua-
gem no livre de contexto, novamente, h linguagens no-livres de contexto (ver Exer-
ccio 54 das folhas prticas) que satisfazem o Lema da bombagem. Por outras palavras,
se uma linguagem no satisfazer as condies do Lema da bombagem (para linguagens
livres de contexto), de certeza que no livre de contexto, mas se as satisfazer, nada se
pode concluir.
37
Captulo 3. Linguagens livres de contexto
38
Captulo 4
Teoria da Computabilidade
At agora abordamos dois modelos de computao, autmatos nitos e autmatos de
pilha, que apesar de teis, no so sucientemente poderosos para capturar o poder
computacional de um computador. Isso ser feito atravs de um modelo computacional,
a mquina de Turing, que iremos estudar neste captulo.
Anteriormente, como vimos, os autmatos nitos so modelos com uma quanti-
dade de memria nita, enquanto que um autmato de pilha consegue aceder a uma
quantidade innita de memria, atravs de uma pilha. O problema que se queremos
aceder um smbolo que est no fundo da pilha, vamos ter de fazer vrias operao pop,
perdendo toda a informao que est em cima desse smbolo. Isso j no acontece se
utilizarmos uma memria de acesso aleatrio, e por esta razo que mquinas de Tu-
ring so um modelo mais poderoso do que autmatos de pilha. No entanto, quando
denirmos mquinas de Turing, no vamos utilizar uma memria de acesso aleatrio,
mas sim uma ta onde podem ser lidos e escritos smbolos. No entanto, este modelo
tem o mesmo poder computacional do que outros modelos que utilizam memrias de
acesso aleatrio (por exemplo, equivalente s Random Access Machines, etc. ver
Seco 4.2).
As linguagens aceites por mquinas de Turing so designadas de linguagens recur-
sivamente enumerveis. Adicionando mais um requerimento, obtemos a classe das lin-
guagens recursivas. Tal como no caso das linguagens regulares e das linguagens livres
de contexto, as linguagens recursivamente enumerveis e as recursivas admitem carac-
terizaes de carcter mais algbrico (atravs de funes recursivas, do clculo lambda,
etc.), mas que no sero abordadas nesta cadeira.
4.1 Mquinas de Turing
As mquinas de Turing so um modelo computacional introduzido em 1936 por Alan
Turing. um modelo terico que nos permite concluir resultados realistas sobre com-
putadores, especialmente acerca das suas limitaes.
Uma mquina de Turing constituda por vrios elementos. Tem uma ta innita,
39
Captulo 4. Teoria da Computabilidade
B B B B a
1 a
k a
n
q
Figura 4.1: Uma mquina de Turing.
dividida em clulas que contm smbolos de um alfabeto, e que utilizada como mem-
ria (ver Fig. 4.1). Existe tambm uma cabea de leitura que s pode ler uma clula de
cada vez e que est ligada a uma estrutura de controlo que se encontra num determinado
estado, de entre n possveis (na gura esse estado q). Em cada momento a cabea de
leitura l o smbolo da clula onde est posicionada. Dependendo apenas desse smbolo
e do estado actual, a mquina faz os seguintes trs passos simultaneamente: (i) actualiza
o estado actual; (ii) altera (ou no) o contedo da clula que est a ler; (iii) mantm a
cabea de leitura no mesmo stio ou, em alternativa, move-a uma clula para a direita
ou uma clula para a esquerda.
Como que uma mquina de Turing (MT) aceita uma palavra w? Se w = w
1
. . . w
n
,
ento inicialmente os smbolos w
1
, . . . , w
n
esto escritos de forma consecutiva emclulas
adjacentes, e supomos que as restantes clulas contm um smbolo especial, o branco
(B na gura). A cabea de leitura colocada sobre a clula que contm w
1
(i.e. sobre o
smbolo mais esquerda do input) e o estado o chamado estado inicial. A partir deste
momento podemos comear a computao, que vai sendo executada passo-a-passo at
atingir um estado nal (caso em que o input w aceite), ou que no haja nenhuma
transio denida (caso em que o input w rejeitado). Pode acontecer que um input no
seja aceite nem rejeitado, i.e. a computao pode continuar indenidamente.
As MT podem ser denidas gracamente de modo semelhante aos autmatos nitos
e aos autmatos de pilha. Um exemplo dado na Fig. 4.2.
Nesta gura (obtida com recurso ao software JFLAP), a seguinte notao utilizada:
(i) o smbolo o smbolo branco (ou seja = B); (ii) uma transio tem uma etiqueta
do tipo a; b, M, onde a o smbolo actualmente lido pela cabea de leitura, b o smbolo
a escrever na clula que contm o a, e M o movimento que a cabea de leitura vai
efectuar (na notao do JFLAP: L left, R right, S stay). Nos diagramas das
aulas tambm vamos utilizar etiquetas do tipo a b, M. Por exemplo, na transio que
vai de q
0
a q
1
, deve-se ler como: se no estado q
0
e com a cabea de leitura a ler o
smbolo 0, ento substituir esse 0 por um X, mover a cabea de leitura uma clula para
a direita, e mudar o estado para q
1
.
O diagrama da Fig. 4.3 (obtida tambm com recurso ao software JFLAP) mostra os
primeiros 5 passos de computao da MT da Fig. 4.2 com input 001100. O que faz esta
MT? Ela aceita exactamente a linguagem
L =0
k
1
k
0
k
0, 1

[k N, (4.1)
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 pra 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 correctamente 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 tem 0s e 1s, isto que s tem 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 efectuar mais transies com este input,
pelo que ele rejeitado.
Note-se que esta MT pra 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 pra 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

. Da mesma forma, o contedo da ta comeando a partir da clula lida pela


cabea de leitura, inclusive, at clula mais direita que no contm o smbolo B,
pode ser codicado noutra palavra w

. Ento se q
i
for o estado actual da MT, o
triplo (v, q
i
, w) determina completamente o estado actual 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

se existe uma sequn-


cia de conguraes C
1
, . . . , C
k
tal que:
1. C
1
a congurao inicial de M para a palavra w,
2. A regra de transio de M determina que a cada congurao C
i
se siga a con-
gurao C
i+1
,
3. C
k
uma congurao aceitadora.
A linguagem de M (ou linguagem aceite por M) a classe
L(M) =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, respectivamente, 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 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 (4.1) recursiva, mas
no livre de contexto.
s vezes teremos necessidade de computar uma funo f :

com uma MT.


Por outras palavras, dada uma palavra inicial w

, queremos calcular a partir desse


input uma nova palavra f (w)

. Por exemplo, tomemos f : 0

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 :

computada por uma mquina de Turing M


se, para cada input w

, 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

. Por exemplo, podemos representar o nmero 3 pela palavra


000

. Utilizando esta representao dos nmeros naturais (representao unria:


utilizamos um alfabeto com apenas um smbolo), conclumos que a MT da Fig. 4.5
computa g. Poderamos tambm ter utilizado a representao binria, por exemplo,
tomando = 0, 1. A o nmero 3 seria representado por 11, e teramos de ter uma
MT que desse o resultado 110 para calcular a funo g, nesta representao.
Tambm possvel calcular funes com vrios argumentos: basta codica-los to-
dos na mesma palavra, utilizando um smbolo especial para separar diferentes argu-
mentos. Por exemplo, se queremos calcular a funo soma S : N
2
N dada por
S (x, y) = x +y, podamos representar cada argumento em binrio, separando-os pelo
smbolo #, retornando o resultado em binrio. Assim, uma MT que calculasse a fun-
o S com esta representao, com o input 11#101, deveria retornar o valor 1000 (pois
3+5=8).
4.2 Tese de Church-Turing
Uma pergunta que um engenheiro informtico se pode pr a seguinte:
Dado um determinado problema, ser que existe um algoritmo (programa)
que o resolve?
A histria, alis, comea em 1900. Por ocasio da mudana do novo sculo, um dos
mais famosos matemticos da altura, David Hilbert, apresentou no Congresso Interna-
cional da Matemtica, em Paris, uma lista de 23 problemas matemticos em aberto que
ele julgava serem problemas fundamentais. O dcimo problema consistia em saber se
existia um algoritmo para resolver determinada questo. Na altura pensava-se que no
existia nenhum algoritmo nessas condies, mas a grande questo era como provar essa
conjectura.
Se pensarmos um pouco no assunto, vericamos que o principal problema que no
temos uma denio precisa para a noo de algoritmo. Esta noo sobretudo intui-
tiva: sabemos identicar um quando o vemos, mas no sabemos deni-lo exactamente.
como tentar identicar um(a) mulher/homem bonita(o).
O que vrios investigadores zeram, sobretudo durante a dcada de 1930, foi for-
malizar o conceito de algoritmo. Vrios cientistas levaram a cabo esta tarefa, obtendo
modelos mais ou menos abstractos, que no convenceram toda a comunidade cientica.
47
Captulo 4. Teoria da Computabilidade
Mas, em 1936, com a sua mquina to simples e convincente, Turing conseguiu impor
o seu modelo.
De certo modo, o que Turing tentou capturar foi a essncia do que um ser humano
executando um algoritmo (na altura no haviam computadores). Um ser humano apenas
precisa de papel e lpis para executar um algoritmo. A ta modela o papel. Os smbo-
los modelam o que escrito no papel. Ento um ser humano executando um algoritmo
estar em certo momento num estado mental (por exemplo, e vai mais um), e de-
pendendo desse estado mental, e da poro que est actualmente a ler do papel, poder
querer alterar o que l escreveu, ou mudar a sua ateno para o texto que est direita,
ou esquerda.
Para almda sua simplicidade e naturalidade, uma das razes que possibilitou a acei-
tao generalizada da mquina de Turing como o modelo de computao que captura
a essncia de algoritmo, foram diversos resultados que mostraram que todos os outros
modelos apresentados anteriormente eram equivalentes mquina de Turing. Isso est
reectido na seguinte armao, que hoje consensualmente aceite na comunidade ci-
entca:
Tese de Church-Turing: Um problema pode ser resolvido atravs de um
algoritmo se e s se pode ser resolvido atravs de uma mquina de Turing.
Note-se que esta armao no se pode provar, da o nome de tese porque, como
j vimos, a noo de algoritmo informal. O que esta tese vem fazer dar um sen-
tido preciso noo de algoritmo. Nesta cadeira iremos sempre assumir que a tese de
Church-Turing vlida.
Por esta razo, a no ser que seja pedida uma descrio formal de uma MT (caso em
que se deve utilizar um diagrama ou a Denio 4.1.1), iremos muitas vezes descrever
uma MT atravs de um algoritmo que especique os seus passos, sem entrar em detalhes
de estados, etc. No entanto, a descrio deve ser sucientemente precisa para no deixar
dvidas a quem estiver a ler a descrio. No vale dizer Com o input, fazer os clculos,
e retornar o resultado! (ver Fig. 4.6)
Por exemplo, para a MT da Fig. 4.5, podamos dar o seguinte algoritmo:
1. Se o smbolo lido for B, aceitar o input sem mover a cabea ou alterar o smbolo
(o input e o output ser ento tambm ).
2. Se o smbolo lido for um 0, marc-lo com um X e mover a cabea para a direita
at encontrar um B.
3. Substituir o B por um X e mover a cabea para a esquerda at encontrar um B.
4. Mover a cabea para a direita at encontrar um 0 ou um B. Se encontrar um 0, ir
para o passo 2.
5. Mover a cabea para a esquerda, substituindo os Xs por 0s, at encontrar um B.
48
Linguagens Formais e Autmatos - Daniel Graa
Figura 4.6: Exemplo de como no especicar um algoritmo.
6. Mover a cabea uma clula para a direita e aceitar.
A tese de Church-Turing tambm implica que o poder computacional de uma MT
com vrias tas, ou com tas n-dimensionais, ou que possa ler a ta de forma no
sequencial, etc., igual ao do modelo apresentado na Denio 4.1.1.
s vezes, por ser mais prtico, vamos utilizar MT com 2 ou mais tas. O esquema
geral de uma MT com duas tas dado na Fig. 4.7, e um exemplo concreto dado na
Fig. 4.8. O que se passa em cada ta separado pelo smbolo [. Por exemplo, na Fig.
4.7, a transio do estado q
0
para ele prprio deve-se ler: se no estado q
0
, se a cabea
de leitura da 1
a
ta est a ler um 0 e se a cabea de leitura da 2
a
ta est a ler um B,
Figura 4.7: Esquema de uma mquina de Turing com duas tas.
49
Captulo 4. Teoria da Computabilidade
Figura 4.8: Uma mquina de Turing com duas tas.
Figura 4.9: Uma mquina de Turing no-determinstica.
ento: manter-se no estado q
0
, substituir o 0 por um B na 1
a
ta, substituir o B por um 1
na 2
a
ta, mover as cabeas de leitura da 1
a
e 2
a
ta uma clula para a direita. Esta MT
reconhece a linguagem 0
k
1
k
0, 1

[k 1 da seguinte forma: por cada 0 do input


na 1
a
ta, escreve um 1 na 2
a
ta. Assim vo haver tantos 1s na 2
a
ta como 0s no
incio do input. Quando nalmente aparecer 1s na 1
a
ta, vamos ver se existem tantos
quantos os da segunda ta, rejeitando o input se isso no acontecer ou aparecer 0s pelo
meio.
Iremos agora analisar outra variante da MT que muitas vezes til. Basicamente
permite no-determinismo: em cada passo da computao, pode-se ter vrios resultados
possveis. A denio semelhante dos autmatos nitos no-determinsticos: pode
haver vrias transies com o mesmo smbolo. Uma diferena que no vamos permitir
transies com a palavra vazia. Um exemplo de MT no-determinstica (MTND)
dado na Fig. 4.9 (note-se que do estado q
0
h 2 transies possveis quando se est a
ler o smbolo 0 com a cabea de leitura). Esta mquina reconhece a linguagem L =
0
2k
0

[k 10
3k
0

[k 1. O ramo de cima aceita as palavras de 0


2k

[k 1, enquanto que o ramo de baixo aceita as palavras de 0


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 excepo que : Q
P(QD, E, P). Repare-se que agora a uma congurao podem-se seguir vrias
conguraes. Uma palavra w

aceite se existe uma sequncia de conguraes


C
1
, . . . , C
k
, tal que C
1
a congurao inicial para w, C
i+1
uma das possveis congu-
raes que se segue a C
i
, e C
k
uma congurao aceitadora.
Obviamente que toda a MT tambm no-determinstica. A relao recproca deve-
ria ser verdadeira pela tese de Church-Turing, e isso que o resultado seguinte mostra.
Teorema 4.2.2. Se L(M) a linguagem aceite (reconhecida) por uma mquina de Tu-
ring no-determinstica M, ento existe uma mquina de Turing que tambm aceita
(reconhece) L(M).
Demonstrao. Por convenincia iremos utilizar uma MT com 3 tas, que j sabemos
ser equivalente a uma MT standard com apenas uma ta. A ideia manter uma cpia
do input na 1
a
ta, utilizar a ta 2 para simular uma (de entre as vrias possibilidades
de caminhos de computao) computao de M, e a ta 3 utilizada para manter um
registo de todos os caminhos de computao explorados at agora. Inicialmente copia-
se o input da ta 1 para a ta 2, e testa-se um caminho de computao na ta 2. Se
esse caminho aceita, aceitamos o input, caso contrrio, reiniciamos a computao com
um novo caminho de computao e vamos repetindo o processo at que no reste mais
nenhum caminho de computao por explorar.
51
Captulo 4. Teoria da Computabilidade
Vamos dar os detalhes para o caso em que uma linguagem L reconhecida por uma
MTND M.
Dada a funo de transio de M, , ter de existir um nmero k tal que, para cada
(q, s) Q, existem no mximo k escolhas para a prxima aco a realizar. Por-
tanto em cada transio no-determinstica, podemos registar um nmero em 1, . . . , k
para saber qual a aco que foi tomada. O que a nossa MT vai fazer registar esses
nmeros na 3
a
ta e testar todas as possibilidades em 1, . . . , k i.e. vai testar todas as
possveis transies, uma de cada vez, de forma a simular todas as possveis computa-
es de M (que acabam sempre e so em nmero nito, pois estamos a reconhecer uma
linguagem). Vamos agora descrever a MT procurada:
1. Inicialmente a ta 1 contm o input w e as tas 2 e 3 esto vazias.
2. Copiar o contedo da ta 1 para a ta 2.
3. Utilizar a ta dois para simular a mquina M com input w. Cada vez que temos
de efectuar uma nova transio no-determinstica, lemos o contedo actual da
ta 3 e fazemos a transio de acordo com o smbolo de 1, , k que estiver
l escrito. Se o smbolo lido for um B, escrevemos um 1 por cima e fazemos a
transio respectiva. Em ambos os casos, deslocamos a cabea de leitura da ta 3
uma clula para a direita. Se chegarmos a uma congurao aceitadora, aceitar o
input. Se chegarmos a uma congurao rejeitadora, ir para o passo 4.
4. Se a ta 3 est vazia, rejeitar o input. Se a ta 3 tem a palavra s = s
1
. . . s
j
= ,
escrita no alfabeto 1, . . . , k, substituir s
j
pelo smbolo seguinte da ordenao
dos smbolos, metendo a cabea de leitura no smbolo s
1
do s actualizado. Se no
houver smbolo seguinte, apagar s
j
e repetir o passo 4.
Para o caso das linguagens aceites por M, a situao mais complicada, pois pode
haver ramos em que a computao nunca acabe, o que nos pode impedir de chegar a
um ramo cuja computao aceite. Mas isso pode ser conseguido utilizando mais uma
4
a
ta que mantm um registo de um contador de passos. Sempre que a computao
ultrapassar o valor denido pelo contador, acabamos com essa computao (como se
ela rejeitasse), e passamos para a computao seguinte. O algoritmo o seguinte:
1. Inicialmente a ta 1 contm o input w e as tas 2 e 3 esto vazias. A ta 4 contm
o valor i = 1
2. While i > 0 do
(a) Copiar o contedo da ta 1 para a ta 2.
(b) Utilizar a ta dois para simular a mquina M com input w. Cada vez que
temos de efectuar uma nova transio no-determinstica, lemos o contedo
actual da ta 3 e fazemos a transio de acordo com o smbolo de 1, , k
52
Linguagens Formais e Autmatos - Daniel Graa
que estiver l escrito. Se o smbolo lido for um B, escrevemos um 1 por
cima e fazemos a transio respectiva. Em ambos os casos, deslocamos a
cabea de leitura da ta 3 uma clula para a direita. Se chegarmos a uma
congurao aceitadora, aceitar o input. Se chegarmos a uma congurao
rejeitadora, ou a computao necessitar mais do que i passos, ir para o passo
d).
(c) Se a ta 3 est vazia, ir para o passo d). Se a ta 3 tem a palavra s =
s
1
. . . s
j
= , escrita no alfabeto 1, . . . , k, substituir s
j
pelo smbolo seguinte
da ordenao dos smbolos, metendo a cabea de leitura no smbolo s
1
do s
actualizado. Se no houver smbolo seguinte, apagar s
j
e repetir o passo 4.
(d) Incrementar o valor de i.
Vamos dar umexemplo de como esta demonstrao funciona na prtica (caso emque
se reconhece uma linguagem). Consideremos a MT da Fig. 4.10. Temos transies no-
determinsticas partindo de q
1
, q
2
, q
3
, que usam duas escolhas possveis. Codiquemos
essas escolhas nos nmeros binrios 1 e 2 da seguinte forma:
(q
1
, B) =

(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 objectos matemticos em palavras de um dado al-
fabeto. 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

. Note-se (ser importante


para a prxima seco), que se G tem k vrtices, ento a descrio de cada aresta utiliza,
no mximo, 2k +3 smbolos (dois 1s para marcar o incio da aresta, i k zeros para
marcar o primeiro vrtice da aresta, mais um zero, e j k zeros para marcar o segundo
vrtice). Como no h mais do que k
2
arestas no grafo G, no mximo a descrio do
grafo necessitar de k
2
(2k +3) +k smbolos de 0, 1, i.e. a descrio do grafo tem um
tamanho que polinomial no nmero de vrtices.
Outra forma de descrever G no alfabeto = 0, 1 seria represent-lo numa forma
mais matemtica, por exemplo G = (1, 2, 3, 4, (1, 2), (1, 4), (2, 3)), e depois codicar
cada smbolo de G em binrio para escrever G em binrio segundo essa codicao.
Por exemplo, precisamos dos smbolos 1,2,3,4 para codicar os vrtices de um grafo
(mais em geral, precisaramos dos smbolos 0,1,2,. . . ,9, mas podemos sempre supor
que o vrtice escrito em numerao de base 4), e ainda dos caracteres (, , e ).
Necessitamos de codicar 7 smbolos em binrio, e para isso precisamos de 3 bits por
smbolo. Portanto, fazendo as associaes
1 000
2 001
3 010
4 011
( 100
, 101
) 110
a codicao do grafo G = (1, 2, 3, 4, (1, 2), (1, 4), (2, 3)) neste esquema seria
'G` = 100

(
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 objecto nito (um nmero, grafo, MT, um texto em portugus, etc.)
pode ser codicado numa palavra de 0, 1

, desde que se utilize um procedimento


adequado (i.e. deve ser possvel codicar G em 'G` atravs de um procedimento algo-
rtmico, e 'G` deve conter informao suciente para caracterizar sem ambiguidade G).
Da mesma forma podemos codicar uma MT M e o seu input w na palavra 'M, w`.
4.3 O problema da paragem
Dissemos que a MT era a idealizao do que efectuado por um computador. Mas, do
que vimos at agora, para cada algoritmo diferente, temos de mudar o hardware da MT
(i.e. estados e transies), enquanto que na prtica o hardware mantm-se, e apenas se
troca de programa. No haver aqui um problema? No porque no difcil conceber
uma MT U que recebe como input 'M, w`, onde 'M, w` designa a descrio da MT M
e da palavra w numa palavra do alfabeto de U. Com base nessa descrio, U simula M
com o input w, para quaisquer M, w, de forma semelhante ao que um interpretador de
C/C++ ou Java faz. A esta mquina d-se o nome de mquina de Turing universal.
Agora vamos voltar a nossa ateno para um problema prtico que pode aparecer.
Normalmente os ambientes de programao trazem embutidos ferramentas que permi-
tem detectar facilmente erros de sintaxe, como por exemplo um comando for que
foi erroneamente escrito como fro. Mas os erros que do mais dores de cabea
aos programadores so os erros de semntica: o programa funciona e sintcticamente
correcto, mas no faz o que pretendido. Um caso particular quando o programa
encrava porque entrou numa computao innita.
Uma pergunta que natural fazer porque que ningum desenvolveu um software
que permita dizer antecipadamente se dado um programa em C/C++, por exemplo, se
este vai ou no entrar num ciclo innito de computao? A razo simples e uma
consequncia da teoria da computao: tal software no existe!
Como mostrar isso? O problema que queremos tratar, traduzido na linguagem de
55
Captulo 4. Teoria da Computabilidade
teoria da computao, ser: dada a linguagem
H
paragem
='M, w`[ a mquina de Turing M pra para o input w (4.2)
ser que ela recursiva? Se sim o software mencionado acima existe, caso contrrio o
software no existe. Apesar desta linguagem ser recursivamente enumervel, ela no
recursiva, como mostra o seguinte teorema.
Teorema 4.3.1 (O problema da paragem indecidvel). A linguagem denida por
(4.2) recursivamente enumervel, mas no recursiva.
Demonstrao. Primeiro vamos mostrar que a linguagem H
paragem
recursivamente
enumervel. A MT U descrita pelo seguinte algoritmo aceita H
paragem
:
Com input 'M, w` :
1. Simular M com input w.
2. Se M pra, ento aceitar o input 'M, w`.
Note-se que se M pra com input w, fa-lo- em tempo nito, e logo a MT U vai
aceitar 'M, w` em tempo nito. Se M no pra com input w, ento U no pra com
input 'M, w`. Logo U aceita H
paragem
, e portanto H
paragem
recursivamente enumervel.
Vamos mostrar que H
paragem
no recursiva, utilizando uma tcnica conhecida como
diagonalizao.
Por absurdo, suponhamos que a linguagem (4.2) recursiva. Ento h-de existir
uma MT N tal que
N('M, w`) =

aceita se 'M, w` H
paragem
rejeita se 'M, w` H
paragem
.
Por outras palavras,
N('M, w`) =

aceita se M pra com input w


rejeita se M no pra com input w.
Agora construmos outra MT P, que utiliza N como subrotina da seguinte forma:
P('M`) =

aceita 'M` se N rejeita 'M, 'M``


entra num ciclo innito se N aceita 'M, 'M``
o que tambm pode ser lido como
P('M`) =

aceita 'M` se M no pra com input 'M`


entra num ciclo innito se M pra com input 'M`.
Ento temos
P('P`) =

aceita 'P` se P no pra com input 'P`


entra num ciclo innito se P pra com input 'P`
o que absurdo. Portanto a linguagem (4.2) no pode ser recursiva.
56
Linguagens Formais e Autmatos - Daniel Graa
Uma vez mostrada que esta linguagem indecidvel, possvel mostrar que muitas
outras tambm o so, atravs de uma tcnica chamada redutibilidade, que no entanto
no teremos tempo de abordar (ver mais detalhes em [Sip05], [HMU06]).
Para nalizar este captulo, e a ttulo de curiosidade, enunciamos o teorema que mos-
tra a existncia de vrus informticos de que falamos na Seco 1.1. Uma demonstrao
construtiva pode ser encontrada em [Sip05], cujo contedo fornece pistas sucientes
para criar programas que se auto-replicam, embora chame desde j a ateno que este
conhecimento dado apenas a titulo pedaggico e no deve ser utilizado em aplicaes
que possam prejudicar outras pessoas ou com carcter criminoso.
Teorema 4.3.2 (do vrus). Existe uma mquina de Turing M que, em qualquer input w,
termina sempre a computao e no nal tem na sua ta a sua prpria descrio 'M`.
57
Captulo 4. Teoria da Computabilidade
58
Captulo 5
Complexidade computacional
5.1 Introduo
No captulo anterior vimos que h problemas, como o problema da paragem, que no
podem ser resolvidos (decididos) por meio de algoritmos. Ento podemos classicar
os problemas computacionais como sendo decidveis ou indecidveis. Um problema
decidvel se pode ser resolvido por um algoritmo. No entanto, a experincia diz-nos
que a separao decidvel versus indecidvel no sucientemente na para capturar a
classe dos problemas que se conseguem resolver na prtica.
que embora certos problemas sejamteoricamente resolveis atravs de algoritmos,
no o so na prtica porque o algoritmo que os resolve poder demorar bilies de anos
a correr. Por isso temos necessidade de dividir a classe dos problemas decidveis em
subclasses, de acordo com a quantidade de recursos utilizados, que pode ser tempo de
computao, memria utilizada, ou outros. Neste captulo vamos apenas cingir-nos a
limitaes no tempo de execuo.
Em geral, medir o tempo de execuo de um algortimo pode dar origem a uma
expresso complexa. De forma a no nos perdermos nos detalhes, estaremos apenas in-
teressados na ordem de grandeza dos tempos utilizados. Por exemplo, se um algoritmo
pode ser executado em 5n
2
+7n +2 passos para um input de tamanho n ( natural
que a computao demore mais tempo para inputs maiores, no signicando isso que o
algoritmo seja menos eciente), diremos simplesmente que o algoritmo demora tempo
da ordem de n
2
, pois o grosso do incremento do tempo de computao vem da potn-
cia n
2
, dizendo-se que o algoritmo necessita de tempo O(n
2
). Vamos agora introduzir
formalmente estas noes.
Denio 5.1.1. Sejam f , g : NN duas funes. Dizemos que g um limite superior
(assimpttico) para f , e escreve-se f O(g), se existem inteiros c, n
0
tais que para todo
o inteiro n n
0
se tem
f (n) cg(n).
Por exemplo, n O(n), n
2
O(n
4
), 5n O(n), mas n
2
/ O(n). Existe outra noo
59
Captulo 5. Complexidade computacional
semelhante, que utilizada mais raramente:
Denio 5.1.2. Sejam f , g : N N duas funes. Diz-se que f o(g) se
lim
n
f (n)
g(n)
= 0.
Por exemplo, n / o(n), n
2
o(n
4
), 5n / o(n), e n
2
/ o(n). Emparticular, se f o(g),
ento f O(g), mas o resultado recproco no verdadeiro, como mostram os exemplos
anteriores. Vamos agora introduzir uma denio que ser bastante importante no que
se segue.
Denio 5.1.3. Seja M uma mquina de Turing que pra em todos os inputs. O tempo
de execuo de M uma funo f : N N, onde f (n) o maior nmero de passos
que M utiliza para concluir uma computao com um input de tamanho n. Denimos
tambm a seguinte classe
TI ME( f ) =L[L uma linguagem decidida em tempo O( f ) por alguma MT.
Por exemplo, a MT da Fig. 4.2 tem tempo de execuo O(n
2
). De facto, dado um
input w = 0
k
1
k
0
k
com comprimento n(= 3k), a MT marca um zero do 1
o
bloco de
zeros, e depois vai para direita at ao nal do input, marcando um 1 e um 0 do ltimo
bloco de 0s no caminho. Depois volta para trs at ao 1
o
bloco de zeros. Esta passagem
demora tempo 2n, ou seja demora tempo O(n). No mximo vo haver k n passagens
destas (uma por cada 0 do primeiro bloco de 0s), pelo que o tempo total de computao
limitado por n O(n) = O(n
2
). Se o input no do tipo 0
k
1
k
0
k
, i.e. se o input
rejeitado, a computao acaba prematuramente, pelo que o tempo de execuo continua
a ser O(n
2
). Como esta mquina decide a linguagem L
1
= 0
k
1
k
0
k
0, 1

[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

[k 1 em tempo O(n), e que L


2
TI ME(n).
Da mesma forma que denimos o tempo de execuo para uma MT, podemos tam-
bm faz-lo para uma MTND.
Denio 5.1.4. Seja M uma mquina de Turing no-determinstica que pra em todos
os ramos de computao para qualquer input. O tempo de execuo de M uma funo
f : NN, onde f (n) o maior nmero de passos que M utiliza para concluir um ramo
de computao para um input de tamanho n. Denimos tambm a seguinte classe:
NTI ME( f ) =L[L uma linguagem decidida em tempo O( f ) por alguma MTND.
Por exemplo, a MTND da Fig. 4.9 tem tempo de execuo O(n) j que, com input
w 0

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 NTI ME(n). O tempo


de execuo da MTND da Fig. 4.10 O(1), j que todo o input pode ser decidido em
tempo constante (no mximo em 5 passos).
60
Linguagens Formais e Autmatos - Daniel Graa
Teorema 5.1.5. Seja f : N N uma funo satisfazendo f (n) n para todo o n N.
Ento NTI ME( f ) TI ME(2
O( f )
).
Demonstrao. Basta seguir a demonstrao do Teorema 4.2.2. Tomemos um input
de comprimento n. Como as palavras da 3
a
ta que registam as possibilidades de mo-
vimentos no-determinsticos no podem ter um comprimento superior ao nmero de
passos de computao, estas palavras podem ir de
1 a kk. . . k

O( f (n)) vezes
Ou seja, temos k
O( f (n))
=2
O( f (n))
possveis simulaes a efectuar, cada uma levando
tempo O( f (n)). O nmero total de simulaes determinsticas ser ento O( f (n))
2
O( f (n))
. Mas como f (n) n, isto tempo 2
O( f (n))
.
Por outra palavras, uma MT consegue sempre simular uma MTND, mas utilizando
uma simulao que tem um custo exponencial em tempo. Por exemplo, como a MTND
da Fig. 4.9 tem tempo de execuo O(n), conclumos que L
3
= 0
2k
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.6. 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
respectivas cabeas de leitura, pode ser registado numa nica palavra
#010110##11111#.
61
Captulo 5. Complexidade computacional
Utilizando um procedimento semelhante, para uma MT M com k tas, podemos re-
gistar o contedo das k tas, assim como a posio das respectivas 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 actual, actualiza o estado e o contedo das
k tas (ou melhor dizendo, a sua codicao numa nica ta).
Note-se que s vezes vamos ter de empurrar (fazer um shift) quando efectuamos
os movimentos virtuais das cabeas das tas de M. Por exemplo, se na congurao
#010110#. . . #
o prximo passo ser manter o smbolo 0 actualmente 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 actualizar 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 1 em tempo O(n). Ento o teorema anterior permite-nos


concluir que a linguagem L
2
pode ser decidida por uma MT com uma s ta em tempo
O(n
2
).
5.2 As classes P e NP
A partir das denies da seco anterior, podemos denir algumas classes de comple-
xidade.
62
Linguagens Formais e Autmatos - Daniel Graa
Denio 5.2.1. Denimos as seguintes classes
P =

kN
TI ME(n
k
)
NP =

kN
NTI ME(n
k
)
EXPTI ME =

kN
TI ME(2
n
k
)
Por outras palavras, a classe P (NP, respectivamente) a classe das linguagens
decididas por uma MT (MTND, respectivamente) em tempo polinomial. A classe
EXPTI ME a classe das linguagens decididas por uma MT em tempo exponencial.
Note-se que, na denio de P ou de EXPTI ME, no importa se utilizamos uma MT
com uma s ta, ou com vrias, devido ao Teorema 5.1.6.
Como exemplos,
L
1
=0
k
1
k
0
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.5
(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
).
63
Captulo 5. Complexidade computacional
(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
inspeccionado 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
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 electrnico (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

[M aceita 'w, c`, para algum c

. (5.1)
Demonstrao. Demonstrao da direco =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).
64
Linguagens Formais e Autmatos - Daniel Graa
Figura 5.1: Exemplo de mquina de Turing no-determinstica que gera nmeros no-
deterministicamente.
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

atravs da MTND da Fig. 5.1


Por outras palavras, por cada caminho de computao dessa MTND, gerada uma
palavra de 0, 1

com comprimentos 3 e vice-versa. Portanto existe um caminho de


computao que escreve 000 na ta, outro que escreve 010, outro que escreve 101, etc.
Note-se que cada caminho necessita s de 3 passos. Emgeral, criar no-deterministicamente
palavras de

de comprimento n
k
demora tempo n
k
.
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 soluo,
fcil verica-la, mas muito difcil determina-la, excepto 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)
exactamente 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, seleccionar uma sequncia de n vrtices
distintos i
1
, . . . , i
n
.
65
Captulo 5. Complexidade computacional
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!
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, seleccionar 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).
66
Linguagens Formais e Autmatos - Daniel Graa
Figura 5.2: Redutibilidade de linguagens.
Relativamente ao problema P = NP? houve, nos anos 70, uma importante contri-
buio que se espera ajudar na resoluo deste problema, e que passamos a descrever
pelas implicaes que tem na prtica.
Denio 5.2.3. Uma funo f :

diz-se computvel em tempo polinomial se


existe uma mquina de Turing que computa f em tempo polinomial.
Por exemplo, a funo f : 0

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.2.4. Uma linguagem A redutvel em tempo polinomial a uma linguagem
B, escrito como A
P
B, se existe uma funo f :

computvel em tempo poli-


nomial, tal que para todo o w

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

s . . . i.e. s aparece 2 vezes no caminho, o que no pode ser. Um raciocnio idntico


aplica-se a v
2
). Assim, 'G, s, t` HAMPATH se e s se 'G
/
` L
2
. Portanto, denindo
67
Captulo 5. Complexidade computacional
f ('G, s, t`) = 'G
/
`, fcil ver que f pode ser computado em tempo polinomial (basta
acrescentar 2 vrtices e duas arestas na descrio de G, apagando os vrtices s, t na
descrio 'G, s, t`) e que
'G, s, t` HAMPATH se e s se f ('G, s, t`) L
2
.
Por outras palavras, HAMPATH
P
L
2
. Podemos interpretar esta relao da seguinte
forma: se temos um algoritmo para decidir L
2
, ento podemos adaptar este algoritmo,
utilizando pouco mais esforo computacional, para decidir HAMPATH. Vamos agora
ver vrias consequncias da redutibilidade em tempo polinomial.
Teorema 5.2.5. Se A
P
B e B P, ento A P.
Demonstrao. Seja M a MT que decide B em tempo polinomial e seja a f a reduo
polinomial de A para B. Ento o seguinte algoritmo decide A em tempo polinomial:
1. Para um input w calcule f (w);
2. De seguida utilize f (w) como input para B. Se Baceita f (w), aceitar w, caso contrrio
rejeitar w.
Denio 5.2.6. Uma linguagem B NP-completa se satisfaz as seguintes denies:
1. B NP;
2. Todo o A NP redutvel em tempo polinomial para B.
Teorema 5.2.7. Se B NP-completo e B P, ento P = NP.
Demonstrao. Imediata a partir do Teorema 5.2.5.
Isto mostra que se conseguirmos arranjar um algoritmo que resolva um problema
NP-completo em tempo polinomial, ento mostramos que P = NP. Como normal-
mente conjecturado que P = NP, esse resultado pode ser visto de outra forma: os pro-
blemas de tipo NP-completo so os mais difceis da classe NP, e se nos depararmos
com um, muito possvel que no exista um algoritmo que o resolva em tempo til
(polinomial) pelo que, na prtica, teremos de recorrer a heursticas ou algoritmos proba-
bilsticos. Mas como identicar problemas NP-completos? Os seguintes dois teoremas
do-nos informaes valiosas.
Teorema 5.2.8. Seja U o conjunto das frmulas booleanas em forma normal conjun-
tiva. Ento a seguinte linguagem NP-completa
S AT ='` onde U [ satisfazvel.
A linguagem S AT foi a primeira linguagem que se demonstrou ser NP-completa. A
partir deste conhecimento, torna-se muito mais fcil mostrar que outras linguagens so
NP-completas, atravs do seguinte teorema.
68
Linguagens Formais e Autmatos - Daniel Graa
Teorema 5.2.9. Se B NP-completo e B
P
C, onde C NP, ento C NP-completo.
Demonstrao. Seja A NP. Como B NP-completo, A
P
B. Mas como B
P
C,
conclui-se que A
P
C. Alm do mais C NP, donde C ser NP-completo.
Em particular, utilizando o teorema anterior em conjugao com a linguagem S AT,
possvel mostrar que a linguagem HAMPATH denida pela Equao (5.3) NP-
completa (ver, por exemplo, [Sip05]).
Vimos tambm que a linguagem L
2
da Equao (5.2) tem as seguintes proprieda-
des: L
2
NP e HAMPATH
P
L
2
, pelo que podemos concluir, utilizando o teorema
anterior, que L
2
tambm NP-completa. Utilizando este procedimento podemos provar
que muitas linguagens so NP-completas. Por exemplo, o livro [GJ79] tem mais de 300
linguagens NP-completas.
Finalmente introduzimos uma denio que utilizada vrias vezes em aplicaes.
Denio 5.2.10. Uma linguagem L diz-se NP-difcil (NP-hard em ingls) se todo o
A NP redutvel em tempo polinomial para L (a diferena em relao a linguagens
NP-completas que no tem necessariamente de ser L NP).
Em particular, toda a linguagem NP-completa NP-difcil. Na Fig. 5.3 apre-
sentado um diagrama que relaciona as principais classes de linguagens estudadas nesta
cadeira. H dois resultados que no foram provados nestes apontamentos, mas que se
vericam: classe das linguagens livres de contexto P (ver [Sip05] para uma demons-
trao); classe das linguagens r.e. classe de todas as linguagens (pois o complemento
da linguagem H
paragem
dene uma linguagem que no r.e. ver exerccio 78 das fo-
lhas terico-prticas). A fronteira entre P e NP est a tracejado, uma vez que no se
sabe se P = NP.
69
Captulo 5. Complexidade computacional
P
Linguagens
regulares
Linguagens livres
de contexto
NP
Linguagens
NP-completas
Linguagens
NP-completas
Linguagens recursivas
Linguagem ao
problema aa
paragem
Linguagens recursivamente
enumeraveis
Classe de
todas as
linguagens
Figura 5.3: Relao entre as principais linguagens estudadas nesta cadeira.
70
Bibliograa
[GJ79] M. R. Garey and D. S. Johnson. Computers and Intractability: a Guide to
the Theory of NP-Completeness. W. H. Freeman & Co., 1979.
[HMU06] J. E. Hopcroft, R. Motwani, and J. D. Ullman. Introduction to Automata
Theory, Languages, and Computation. Addison-Wesley, 3rd edition, 2006.
[Sip05] M. Sipser. Introduction to the Theory of Computation. Course Technology,
2nd edition, 2005.
71