Sunteți pe pagina 1din 331

LICENCIATURA EM ENGENHARIA INFORMTICA

TEORIA DA COMPUTAO

Antnio Dourado Pereira Correia

Advertncia. Este documento um texto de trabalho para apoio ao estudo da cadeira de Teoria da Computao.
No inclui toda a matria leccionada na disciplina e naturalmente no dispensa a consulta da bibliografia
complementar. O autor agradece qualquer comentrio ou sugesto que o tolerante e paciente leitor entenda por
bem fazer.

Departamento de Engenharia Informtica


Faculdade de Cincias e Tecnologia
Universidade de Coimbra
Setembro 2009

ndice Geral

Captulo 1. Introduo e definies bsicas

Captulo 2. Autmatos finitos

43

Captulo 3. Expresses regulares, linguagens regulares


e gramticas regulares

115

Captulo 4. Propriedades das linguagens regulares

153

Captulo 5. Linguagens livres de contexto

179

Captulo 6. Simplificao de gramticas e formas normais

213

Captulo 7. Autmatos de Pilha

245

Captulo 8. Propriedades das linguagens livres de contexto

273

Captulo 9. Mquinas de Touring

299

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

CAPTULO 1

INTRODUO E DEFINIES BSICAS

1.1. Introduo

1.2. Linguagens formais

1.2.1. Alfabetos, cadeias e operaes sobre cadeias

1.2.2 .Operaes de conjuntos sobre linguagens

10

1.3 Gramticas

17

1.4 Autmatos

30

1.5. Os trs paradigmas da computao

37

Bibliografia

42

Anexo

42

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Captulo 1 Introduo e Definies Bsicas

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

1.1. Introduo
As cincias da computao, numa interpretao genrica, tm a ver com todos os aspectos
relacionados com os computadores e o seu funcionamento. H no entanto trs temas centrais
que so delas estruturantes: autmatos, computabilidade, complexidade. As trs visam dar
resposta questo primeira - quais so as capacidades e as limitaes fundamentais dos
computadores? O que se pode computar? Estas que tm ocupado intensamente os cientistas da
computao desde os anos 30 do sculo passado, quando a noo e o significado de
computao surgiu no panorama cientfico.
Nesta disciplina iremos abordar aqueles trs temas. Comearemos pelos autmatos e
veremos depois os elementos introdutrios fundamentais da computabilidade e da
complexidade.
A teoria dos autmatos compe o edifcio formal que sustenta solidamente todo o
desenvolvimento de processadores de texto, de compiladores e de hardware. Suporta tambm
(atravs das gramticas associadas aos autmatos) todo o desenvolvimento das linguagens de
programao. Assim linguagens, gramticas e autmatos so, com veremos, as trs faces de
um mesmo prisma. Vejamos formalmente em que consistem.

1.2.Linguagens formais
Tal como as linguagens humanas, as linguagens formais (assim chamadas por serem definidas
por um conjunto de formalismos matemticos abstractos) so faladas por autmatos, isto ,
um autmato compreende, e sabe interpretar uma dada linguagem, de uma forma que veremos
posteriormente. alis interessante constatar que os estudiosos das linguagens humanas (os
linguistas) deram uma contribuio muito importante para o desenvolvimento da teoria das
linguagens formais. Por exemplo Chomsky, de que falaremos no Captulo 6, um linguista.
Uma linguagem exprime-se atravs de smbolos de uma certa forma (tal como as
linguagens humanas ao longo da histria usaram smbolos diversos, desde os hieroglficos at
aos caracteres latinos, passando pelos chineses, pelos gregos e pelos rabes). Poderemos
definir formalmente esta realidade.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

1.2.1 Alfabeto, cadeias e operaes sobre cadeias


Um alfabeto composto por um conjunto no vazio de smbolos, usualmente representada
pela letra grega (sigma), de smbolo.
={smbolos}, conjunto no vazio de smbolos (letras, algarismos,...)
Os smbolos de um alfabeto podem ser de qualquer natureza e assumir um aspecto
arbitrrio. Qualquer alfabeto um conjunto, e esta a nica caracterstica comum. A prpria
palavra alfabeto composta pela concatenao do primeiro e segundo smbolos grego, o alfa e
o beta.
Exemplos de alfabetos:
= {a,b}, alfabeto composto pelas duas letras a e b.
= {0,1}, alfabeto binrio composto pelos valores binrios 0 e 1.
= {(,),[,] } , alfabeto dos parnteses
= {0,1,2,3,4,5,6,7,8, 9 }, alfabeto dos algarismos rabes
={a,b,c, ..., z}, o alfabeto romano minsculo
={conjunto de todos as caracteres ASCII}, o alfabeto ASCII.
= {copos, facas, garfos, pratos, colheres, tachos}, o alfabeto dos
instrumentos de cozinha
= {ma, pra, ameixa, banana, }, o alfabeto dos frutos.
Qualquer objecto pode pertencer a um alfabeto. Por isso um alfabeto pode ser um
conjunto de qualquer espcie de coisas.
Por razes de simplicidade usam-se normalmente apenas letras, algarismos e outros
caracteres comuns como #, $, &, etc.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Juntando-se vrios caracteres de um alfabeto obtm-se uma cadeia (string, em ingls),


w, formalmente definida como uma sequncias finitas de smbolos do alfabeto.
Exemplo 1.2.1
w= a, w=ab, w=abbaba, cadeias no alfabeto = {a,b}
Exemplo 1.2.2
w =1,w=2, w=23, w=5674, cadeias de algarismos rabes.
Por vezes uma cadeia tambm se chama palavra. De facto nas linguagens humanas as
palavras so cadeias de caracteres seguindo uma certa regra de formao a ortografia.
Alguns autores de lngua inglesa (por exemplo Linz) usam o termo phrase frase) como
sinnimo de cadeia. De facto uma cadeia gerada aplicando as regras (produes) de uma gramtica,
tal como uma frase de uma linguagem humana se constri usando as regras da respectiva gramtica.
Nesse sentido as palavras so os elementos atmicos da linguagem humana que correspondem aos
smbolos de um alfabeto de uma linguagem formal. Para evitar confuses usaremos preferencialmente
o termo cadeia.

Fazendo a concatenao de duas cadeias w e v obtm-se uma terceira cadeia que por
isso se chama a concatenao de w e v.
Pode-se obter fazendo a concatenao direita (v direita de w), por exemplo sendo
w= a1a2a3 ....an

v= b1b2b3bn

a concatenao direita de v com w , wv, ser


wv=a1a2a3anb1b2b3bn
e a concatenao esquerda, vw
vw=b1b2b3bna1a2a3an
Os caracteres numa cadeia seguem uma certa ordem. Por vezes estamos interessados em
alterar essa ordem, obtendo-se cadeias derivadas da original. Por exemplo a cadeia reversa,
obtm-se invertendo (da direita para a esquerda) a ordenao dos caracteres. A reversa da
cadeia w acima ser, revertendo w,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

wR =an...a3a2a1
O nmero de caracteres de uma cadeia pode ser qualquer, sendo por isso umas longas
e outras curtas. Chama-se comprimento de uma cadeia, anotando-se pelo mdulo, |w|, o
nmero de posies, ou de casas, ocupadas pelos caracteres na cadeia. Por exemplo 011011
tem comprimento 6. Por vezes tambm se define comprimento como o nmero de caracteres
da cadeia, o que est certo se se inclurem as repeties nesse nmero. De outro modo a
cadeia anterior tem 2 caracteres (0 e 1) que, repetidos, ocupam 6 posies.
Se uma cadeia no tem qualquer carcter (note-se que o singular de caracteres
carcter, e no carater), ter 0 caracteres, sendo por isso vazia (um conjunto vazio), e denotase por (alguns autores denotam por ) . O seu comprimento ser nulo, ||=0, e pode
escolher-se de qualquer alfabeto.
Se concatenarmos uma cadeia vazia com outra cadeia w qualquer, obtm-se
w = w = w, w,
para todo e qualquer w, tal como a unio de um conjunto com o conjunto vazio d o
conjunto original, qualquer que ele seja.
Certas cadeias tm formas especiais. Por exemplo abcdedcba ou abcdeedcba podem
ler-se igualmente da frente para trs ou de trs para a frente. Elas tm um ponto de simetria.
Em linguagem corrente chamam-se capicuas e mais formalmente chamam-se palndromos e
so tais que w = wR. Voltaremos a falar deles.
Subcadeia de uma cadeia w qualquer cadeia composta por caracteres sucessivos de
w . Se dividirmos qualquer cadeia w em duas partes u e v, tal que w=uv, diz-se que u um
prefixo e v um sufixo de w.
Se por exemplo
w=abbab
Poderemos definir os seguintes prefixos de w:
{, a, ab, abb, abba, abbab}
e os seguintes sufixos de w:
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

{abbab, bbab, bab, ab, b, }


Note-se que cada prefixo est associado a um sufixo. O prefixo a est associado ao sufixo
bbab e o sufixo ao prefixo abbab. A ordem por que esto escritos acima reflecte essa
associao.
Potncia n de uma cadeia, wn, uma cadeia obtida pela concatenao n vezes da
cadeia w consigo prpria. Assim por exemplo
w2 = ww
w3 = www,
etc.
fcil de ver que
w1=w
Quanto a w0, ela ser a concatenao de w consigo prpria zero vezes. Se a
concatenao uma vez d a prpria cadeia, a concatenao zero vezes d nada, ou seja, a
cadeia vazia e portanto
w0={}
para todo e qualquer w.
O sinal de potncia tambm se usa para exprimir a concatenao de um carcter
consigo prprio. Por exemplo
a3=aaa,
1204=110000,
anbm=aaabbb.
Tambm se define potncia de um alfabeto, n, como o conjunto das cadeias desse
alfabeto de comprimento n. Assim se ={0,1},

0={}, cadeia vazia

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

1={0,1} , cadeias com um carcter


2={00,01,10,11}, cadeias com dois caracteres
3={000, 001, 0010, , 111} cadeias com trs caracteres
etc.
(note-se que enquanto um conjunto de caracteres (smbolos), 1 um conjunto de cadeias,
mesmo que tenham apenas um carcter).
Se definirmos o conjunto de todas as potncias possveis de um alfabeto, esse conjunto
ter todas as cadeias com zero, um, dois, , qualquer nmero de caracteres do alfabeto. Para
exprimir este facto usa-se o smbolo estrela, *, para significar qualquer, e chama-se a * o
fecho estrela do alfabeto (star-closure). Assim * conjunto de todas as cadeias que se
podem obter pela concatenao de zero ou mais smbolos de . Contm sempre a cadeia nula

. simplesmente o conjunto de todas as cadeias possveis no alfabeto , e uma forma


simples e elegante de denotar esse conjunto infinito.
Se excluirmos a cadeia vazia do fecho estrela, obtemos o fecho estrela positivo, +

+ =*-{}
fcil de ver, pela definio, que quer * quer + so sempre conjuntos infinitos,
mesmo quando o alfabeto finito.
Chegamos agora finalmente definio de linguagem, um dos conceitos chave da
computao:
Definio 1.2.1. Linguagem : dado um alfabeto qualquer , linguagem L qualquer
subconjunto de *.
Assim sendo, num alfabeto qualquer podem-se definir mltiplas linguagens. Elas tero
propriedades diferentes que lhes do caractersticas bem distintas, que estudaremos na ocasio
oportuna. Uma linguagem num alfabeto no precisa de ter todos os caracteres desse alfabeto,
pode ter apenas uma parte deles.
Define-se frase (ou sentena) como qualquer cadeia na linguagem formal L

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

A lngua portuguesa um conjunto de cadeias formadas pelas letras do nosso alfabeto


latino. Na linguagem corrente cada cadeia uma palavra e uma frase pode ter vrias palavras.
Na linguagem Java, um programa qualquer correctamente escrito um subconjunto de
todas as cadeias possveis que se podem formar com os caracteres da linguagem. O seu
alfabeto um subconjunto dos caracteres ASCII.
Seja por exemplo o alfabeto ={a,b}.
Nele *={,a,b,aa,ab,ba,bb,aaa,aab,aba,abb,baa,bab,bba,bbb, ...}, contm todas as
combinaes possveis dos smbolos do alfabeto, incluindo a cadeia vazia.
(i) O conjunto L1={a, ab, abb} uma linguagem em . uma linguagem finita.
(ii) O conjunto L2={anbn: n0} uma linguagem em . uma linguagem infinita.
As cadeias ab, aabb, aaabb, pertencem a L2 porque se podem escrever na forma
respectivamente a1b1, a2b2, a3b3. Como veremos a gramtica da linguagem define as regras da
formao das cadeias.
J as cadeias aba, abb, aaababbab, no pertencem a L2 (tente escrev-las naquela
forma de potncias ).
Por vezes define-se uma linguagem exprimindo verbalmente as suas propriedades
especficas que a distinguem de outra qualquer. Por exemplo:
- o conjunto de cadeias em ={0,1} com um nmero de 0s igual ao nmero de 1s
L={, 01, 10, 0011, 1100, 0110, 0101, 1001, }
- o conjunto dos nmeros binrios cujo correspondente decimal primo
L={10,11,101,111,1011, 1101, 10001, }
Tambm se pode constatar que , a linguagem vazia, no tem qualquer cadeia, uma
linguagem em qualquer alfabeto.
Tambm {}, a linguagem composta apenas pela carcter vazio, uma linguagem em
qualquer alfabeto.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Note-se a diferena entre e {} : a primeira no tem qualquer cadeia e a segunda


tem uma cadeia (a cadeia vazia de facto uma cadeia, mesmo que vazia).
1.2.2. Operaes de conjuntos sobre linguagens e suas propriedades
Uma linguagem , como vimos, um conjunto. Portanto aplicam-se-lhe todas as
operaes sobre conjuntos. Se tivermos duas linguagens L1 e L2, poderemos fazer com elas as
seguintes operaes:
Unio: todas as cadeias que pertencem ou a uma ou a outra,
L1L2 = {w: wL1 ou wL2},
Interseco: todas as cadeias que pertencem simultaneamente a uma e a outra,
L1L2 = {w: wL1 e wL2},
Diferena de duas linguagens: todas as cadeias que pertencem a uma e no pertencem
outra,
L1 - L2 = {w: wL1 e wL2},
L2 L1 = {w: wL1 e wL2}.
Complemento de uma linguagem: todas as cadeias possveis no alfabeto respectivo
(isto , *) menos as cadeias da linguagem complementada,
Compl(L) =L =* - L.
Reverso de uma linguagem: todas as cadeias que resultam da reverso das cadeias
originais de L constituem a linguagem reversa de L denotada por LR
LR = {wR : wL}.
Concatenao de duas linguagens: todas as cadeias em que uma parte (prefixo)
pertence primeira linguagem e a parte restante (sufixo), segunda
L1L2={uv: uL1, vL2},.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

10

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Dada a concatenao de L1 e L2 ser que L1 L1L2, para quaisquer L1 e L2 em


quaisquer alfabetos 1 e 2 ?
Tal ser possvel se e s se L2. Vejamos as vrias situaes possveis.
(i) No caso em que os dois alfabetos so disjuntos, se no pertence a L2, ento a
concatenao de uma qualquer cadeia de L1 com uma qualquer cadeia de L2 resulta numa
cadeia que no pertence a L1 e por isso nenhuma cadeia de L1 neste caso pertence
concatenao.
(ii) no caso particular em que as duas linguagens partilham o mesmo alfabeto, ao
concatenarmos a menor cadeia de L1 com a menor cadeia de L2, obtm-se uma cadeia maior
do que a primeira, e portanto no possvel obter em L1L2 a menor cadeia de L1. Pelo menos
essa no pertence a L1L2 e por isso o mesmo sucede a L1 (esta s pertence concatenao se
todas as suas cadeias pertencerem). No caso extremo em que L1=L2, verifica-se a mesma
situao.
Mutatis mutandis da anterior L2 L1L2 se e s se L1
Distributividade da concatenao em ordem unio
Considerem-se, a ttulo de exemplo, as linguagens
L1={a, ab, b},
L2={0, 01}
L3={11, 111, 1111}
Ento
L2L3={0,01,11,111,1111} e
L1 . (L2L3) ={a, ab, b}.{0,01,11,111,1111}=
={a0,a01, a11,a111,a1111,ab0,ab01,ab11,ab111,ab1111,b0,b01, b11,b111,b1111}
={( a0,a01, ab0,ab01, b0, b01), (a11,a111,a1111, ab11,ab111,ab1111, b11,b111,b1111)}

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

11

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

= {a,ab,b}.{0,01} {a,ab,b}{11, 111, 1111}=.{L1L2 L1L3


Este resultado pode-se generalizar: a concatenao distributiva em relao unio.
L1 . (L2L3)= L1L2 L1L3.
De facto se uma cadeia pertence unio de duas linguagens, ela ir entrar na
concatenao. Por outro lado, se uma cadeia no pertence unio, ela no entrar na
concatenao. Sero concatenadas todas as da unio e apenas elas.
Ser a unio distributiva em relao concatenao?
Uma propriedade definida assim genericamente tem que ser vlida para todos e
quaisquer casos. Se formos capazes de encontrar um s caso em que isso se no verifique, a
propriedade no geral e portanto a resposta no.
Considerem-se novamente as trs linguagens acima.
Faa-se
L2L3={0, 01}.{11, 111, 1111}={011,0111,01111,0111,01111,011111}
L1 (L2L3)={a, ab, b}{011,0111,01111,0111,01111,011111}=
={a, ab, b, 011,0111,01111,0111,01111,011111}
Por outro lado,
( L1L2) = L1={a, ab, b}{0, 01}= {a, ab, b, 0, 01}
(L1L3 ) = {a, ab, b} {11, 111, 1111}= {a, ab, b, 11, 111, 1111}
Concatenando estas duas,
( L1L2). (L1L3 ) = {a, ab, b, 0, 01}.{a, ab, b, 11, 111, 1111}
={aa, aab, ab, a11,a111,a1111, ...}
Ora as cadeias aa, aab, no pertencem a L1 (L2L3).
Logo
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

12

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

L1 (L2L3) ( L1L2) (L1L3 )


e conclumos que em geral a unio no distributiva sobre a concatenao.
A concatenao de uma linguagem com o conjunto vazio (linguagem vazia) resulta no
conjunto vazio (analogamente ao produto de um nmero real por zero).
L=
A concatenao de uma linguagem L qualquer com a cadeia vazia resulta na linguagem L
(analogamente ao produto de um nmero real pela unidade).
L=L
Na concatenao o conjunto vazio desempenha o papel de zero e a cadeia vazia o papel da
unidade.
Potncia de uma linguagem
Define-se a potncia n de uma linguagem a partir da concatenao da linguagem
com ela prpria (auto-concatenao) n vezes.
Se concatenarmos uma linguagem zero vezes com ela prpria , vem L0 .
Em que resulta ?
Para um qualquer nmero real, elevando-o a zero obtm-se a unidade. Ento aqui ser
natural considerar-se que a potncia zero de uma linguagem a unidade da concatenao, ou
seja, a cadeia vazia. Podemos tambm considerar que a potncia nula de uma linguagem consiste
em escolher zero cadeias dessa linguagem. Logo,
L0={}
L1=L
L2=LL
...

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

13

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Chama-se fecho-estrela (star-closure, Kleene star) de uma linguagem L* ao conjunto


de todas as cadeias que se podem obter por concatenao da linguagem com ela prpria, um
nmero arbitrrio de vezes (incluindo zero vezes), ou seja,
L* = L0L1L2L3......
Se tivermos, por exemplo, a linguagem L={0,1}, o seu fecho estrela o conjunto de
todas as cadeias de 0s e 1s, incluindo a cadeia vazia. De facto
L0={}

- todas as cadeias com zero caracteres

L1 ={0,1}

- todas as cadeias de 0s e 1s com um carcter

L2 ={0, 1}.{0, 1}={00,01,10,11}

- todas as cadeias de 0s e1s com dois caracteres

L3={0, 1}.{0, 1}.{0,1}={00,01,10,11}.{0,1}={000,001,010,011,110,111}


- todas as cadeias de 0s e 1s com trs caracteres
L4={0, 1}.{0, 1}.{0,1}.{0,1}

- todas as cadeias de 0s e 1s com quatro caracteres,

E assim sucessivamente. Unindo agora todos os subconjuntos teremos o conjunto de


todas as cadeias de 0s e 1s com zero, um, dois, trs, , qualquer nmero de caracteres, ou
seja, todas as cadeias possveis de 0s e 1s. Assim o fecho estrela desta linguagem com duas
cadeias uma linguagem infinita. Note-se que L* contm sempre , independentemente de L
o conter ou no.
Se considerarmos a linguagem L={0, 11}, o que dar o seu fecho estrela ?
L0={}

- pelas razes anteriores

L1 ={0,11}
L2 ={0, 11}.{0, 11}={00,011,110,1111}
L3={0, 11}.{0, 11}.{0,11}={00,011,110,1111}.{0,11}=
={000,0011,0110,01111,1100,11011,11110,111111}

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

14

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

E assim sucessivamente. Obtm-se todas as cadeias de 0s e 1s em que os 1s


aparecem sempre aos pares. Por exemplo a cadeia 00110110, mas no 0010110 nem 0011010.
Como se poder obter 00110110 a partir de ? De L6 possvel: 0011 pertence a L3, e 0110
pertence tambm a L3.
Ainda neste exemplo o fecho estrela da linguagem finita com apenas duas cadeias
resulta numa linguagem infinita.
H algumas linguagens que tm a concatenao aparentemente estranhas.
Se considerarmos L a linguagem que contm todas as cadeias de 0s (incluindo zero
0), ento L*=L. Tal como se for a linguagem conjunto de todas as cadeias de 1s . L infinita,
tal como o seu fecho estrela.
E o fecho estrela da linguagem vazia, * ?

0={}
1=
2=
Unindo tudo vem

*={} ={}
Quanto linguagem com o carcter vazio, L={}, o seu fecho estrela L*={}.
A linguagem e a linguagem {} so as duas nicas linguagens que tm um fecho
estrela finito.
Fecho-positivo (positive closure) de uma linguagem, L+ , o conjunto de todas as
cadeias que se podem obter por concatenao da linguagem com ela prpria uma ou mais
vezes. Se L no tem , + tambm no,
L+ : L1L2L3...... = L* - {}
Exemplo: Seja

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

15

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

L={anbn, n1}
Logo:
L={ab, aabb, aaabbb, aaaabbbb, ....}
L2= LL={ab, aabb, aaabbb, aaaabbbb, ...
abab, abaabb, abaaabbb, abaaaabbbb, ...
aabbab, aabbaabb, aabbaaabbb, aabbaaaabbbb, ...
........... }
Procurando uma forma compacta para L2, pode-se escrever
L2= {anbnambm, n1, m1}, n e m so independentes.
A reversa de L fcil de calcular: basta revertermos a expresso que a define:
LR={bnan, n1}
Se tivermos necessidade de escrever o complemento de L de uma forma sinttica,
como faz-lo? Trata-se de todas as cadeias que no obedeam regra de formao de L. Por
exemplo aab, baa, ababab, bababa, aaaa, aaaa, bbaab, bbbbaa, . Ser fcil encontrar uma
expresso compacta, em notao de conjuntos, que inclua todas as cadeias do complemento
de L ? Fica o desafio ao leitor.
E o fecho estrela L* ?
Nem sempre a notao de conjuntos a mais adequada para representar linguagens.
Por isso foram desenvolvidas representaes alternativas: as expresses regulares e as
gramticas. Estud-las-emos em captulos posteriores. Mas vejamos desde j algumas noes
bsicas de gramticas.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

16

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

1.3. Gramticas
A gramtica de uma linguagem formal tem o mesmo objectivo da de uma linguagem humana:
ela fixa, de modo que todos possamos entender, as regras de formao das palavras e das
frases. Todas as linguagens escritas tm uma gramtica. a gramtica que d sentido
linguagem: sem ela as pessoas no se entenderiam
Uma gramtica tambm uma ferramenta para estudar matematicamente linguagens,
muito poderosa, que ultrapassa as limitaes da notao de conjuntos anterior.
Vejamos um exemplo da lngua portuguesa
Exemplo 1.3.1
H vrias gramticas da lngua portuguesa, normalmente identificadas pelo nome dos seus
autores. Se usarmos a de Mateus e outros (Gramtica da Lngua Portuguesa, Mateus, M,H.M,
A. M.Brito, I. Duarte, I. H Faria, Caminho Srie Lingustica, 1989), poderemos representar
simbolicamente as regras de formao de uma frase (aqui feita para fins ilustrativos, e
portanto muito simplificadas em relao riqueza da nossa lngua):
Regra: uma frase composta por um sintagma nominal e um sintagma verbal.
Pode no ter sintagma nominal ou o sintagma verbal; mas tem que ter pelo menos um
deles.
Simbolicamente escreve-se a regra de produo
frase sintagma nominal sintagma verbal

(produo 1)

O sintagma nominal composto por um determinante e um nome (pelo menos um


deles) ou pode ser vazio:
sintagma nominal determinante nome | vazio

(produes 2 e 3)

O determinante pode ter um artigo ou um dectico, ou nada:


determinante artigo | decticos | vazio

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

(produes 4,5,6)

17

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

O sintagma verbal composto por um verbo e um sintagma nominal (pelo menos um


deles):
sintagma verbal verbo sintagma nominal

(produo 7)

Para podermos formar (produzir) frases temos que ter palavras concretas e no apenas
categorias de palavras. Elas, as palavras concretas, so os elementos terminais da gramtica.
Por exemplo:
verbo estuda | ama | compra | dorme|chove

(produes 8 a 12)

artigo o | a |um | uma|<vazio>

(produes 13 a 17)

decticos este | esse | aquele | meu | teu | seu |<vazio> (produes 18 a 24)
nome Lus | Antnia | Isabel | livro | gelado |

(produes 25 a 29)

Com as regras de produo e os elementos terminais dados, poderemos agora formar


frases.
Por exemplo para produzir a frase
a Antnia compra aquele gelado
usam-se as regras de produo na ordem adequada para o fim em vista:
frase sintagma nominal sintagma verbal

produo 1

determinante nome sintagma verbal

produo 2

determinante nome verbo sintagma nominal

produo 7

determinante nome verbo determinante nome

produo 2

determinante nome verbo dectico nome

produo 5

a nome verbo dectico nome

produo 13

a Antnia verbo dectico nome

produo 26

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

18

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

a Antnia compra dectico nome

produo 10

a Antnia compra aquele nome

produo 20

a Antnia compra aquele gelado

produo 29

Verifique o leitor se as seguintes frases obedecem gramtica dada:


(i)

O Joo foi ao cinema

(ii)

Chove

(iii)

A Isabel ama o Lus

Este exemplo mostra como uma frase (ou orao), conceito geral e complexo, pode ser
definida custa de elementos simples (decomposio da complexidade). Comea-se no
conceito mais complexo (frase), e reduz-se sucessivamente at se obterem os elementos
irredutveis com que se constri a lngua.
A generalizao deste princpio leva-nos s gramticas formais isto , gramticas das
linguagens formais, as linguagens dos computadores.
As linguagens formais so construes matemticas (conjuntos) que obedecem a
certas regras. Para que no haja equvocos, as gramticas formais devem ter uma estrutura
clara, coerente, completa. Por isso usam-se notao e conceitos matemticos precisos para a
sua definio e manipulao.
Definio 1.3.1. Gramtica.
Uma gramtica G definida por um quarteto
G=(V, T, S, P)
em que
V : variveis, conjunto no vazio finito de objectos,
T: smbolos terminais, conjunto no vazio finito de objectos,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

19

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

S V: varivel de inicializao, um smbolo especial, tambm chamado


axioma,
P : um conjunto finito de produes
As variveis no podem ser smbolos terminais e vice-versa, isto V e T so conjuntos
disjuntos. No nosso estudo so em geral caracteres.
As regras de produo constituem o cerne da gramtica, pois atravs delas que uma
cadeia de caracteres se transforma noutra cadeia de caracteres. Por isso elas definem uma
linguagem associada gramtica.
Gramticas diferentes podem produzir a mesma linguagem. Nesse caso so gramticas
equivalentes. Mais frente estudaremos tcnicas e algoritmos para transformar uma gramtica
numa outra sua equivalente.
Embora uma linguagem possa ser produzida por vrias gramticas, uma gramtica
produz uma e uma s linguagem. Teremos a relao ilustrada na figura 1.3.1.

Gramticas

Linguagens

L1

G1
G2
G3

L2
G4

Figura 1.3.1 . Vrias gramticas podem produzir a mesma linguagem. Mas uma gramtica no
pode produzir duas linguagens.
As regras de produo de uma qualquer gramtica tm sempre a forma padro
x y
que se l (a cadeia) x produz (a cadeia) y .
A cadeia produtora x tem que ter qualquer coisa, no pode ser a cadeia vazia (se assim
no fosse produzir-se-ia a partir do nada, o que no teria significado). Este facto anota-se por

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

20

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

x (V T)+
querendo-se dizer que a cadeia x pode ter variveis da gramtica e/ou smbolos terminais,
sem a cadeia vazia (por isso se escreve + e no *).
A cadeia produzida y, chamada o corpo da produo, pode conter variveis da
gramtica, e/ou smbolos terminais, podendo ser a cadeia vazia. Neste caso quer dizer que a
produo consiste simplesmente na anulao de x. Anota-se assim por
y (V T)*
sendo agora legtimo escrever ( * ) para admitir a possibilidade da cadeia vazia. De facto (V T)0
resulta na cadeia vazia.
A produo substitui, numa forma sentencial, a cadeia x pela cadeia y. Isto ,

dada uma cadeia

w = uxv
x y,

e a regra de produo

____________
por substituio de x por y em w, obtm-se a cadeia

z = uyv

Diz-se que w produz z , ou que z produzida por w e anota-se com seta larga
w z
w e z podem variveis e/ou smbolos terminsais, dependendo do caso, como veremos.
As regras de produo podem aplicar-se por qualquer ordem e tantas vezes quantas as
necessrias. Este facto permite que com um nmero finito de produes se possa obter uma
linguagem infinita. Duas produes e um smbolo inicial so suficientes para produzir uma
linguagem infinita. Por exemplo as duas produes seguintes
S aS
S

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

21

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

geram qualquer cadeia no alfabeto ={a}, incluindo a cadeia vazia. Experimente o leitor gerar
a cadeia aaa.
Ser possvel obter, com uma s produo, uma linguagem infinita? S em certas
gramticas especiais que estudaremos no Captulo 12.
Entre uma forma sentencial inicial w1 e uma final wn poderemos passar por um
grande nmero de formas sentencias intermdias, w1, w2, , ou seja,
w1 w2 wn
Diz-se que w1 produz wn ou, em escrita mais compacta (mais prtica), usando (*)
para significar uma sequncia de produes simples,

w1

wn

(* ) exprime o facto de que para derivar wn a partir de w1 so necessrios um nmero no

especificado de passos (incluindo eventualmente zero passos, como em w1

w1 ).

As regras de produo podem ser aplicadas numa ordem qualquer. Por cada ordem,
produz-se uma cadeia terminal. Ordens de derivao diferentes podem dar cadeias terminais
iguais ou diferentes, conforme a gramtica concreta.
O conjunto de todas as cadeias terminais que se podem obter por uma gramtica,
compem a linguagem gerada por essa gramtica. Exprime-se pela expresso L(G),
linguagem L da gramtica G. Em termos mais formais, dada a gramtica definida pelo
quarteto
G=(V, T, S, P)
a linguagem da gramtica (ou gerada pela gramtica) composta por todas as cadeias
terminais (sentenas, apenas com smbolos de T, ou eventualmente ) que se podem gerar a
partir de S com as produes de P, por qualquer ordem qualquer nmero de vezes, ou seja,

L(G) = {wT*: S

w}

Se uma dada cadeia pertence linguagem, w L(G), ento a sequncia


LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

22

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

S w 1 w2 ... wn w
uma derivao da cadeia w. A cadeia w deve ter apenas smbolos terminais caracteres do
alfabeto da linguagem, incluindo eventualmente .
Qualquer derivao da gramtica comea sempre por S, que por isso tambm
chamado o axioma da gramtica. Desde S at w passa-se por diversas expresses que tm
variveis da gramtica ou uma mistura de variveis e de smbolos terminais. A essas
expresses chama-se formas sentenciais da derivao: so as cadeias S, w1, w2, ..., wn .
Exemplo 1.3.2.
Seja a gramtica definida pelo quarteto
G =({S}, {a,b}, S, P)
Comparando com a definio 1, identificam-se os elementos do quarteto:
Conjunto V das variveis: S
Smbolos terminais: a,b , as cadeias terminais tero apenas estes smbolos
Varivel de inicializao: S
As produes P dadas por
P1: S aSb : partindo do smbolo inicial S, coloca-se-lhe um a antes e
um b depois.
P2: S : o smbolo S pode ser substitudo pela cadeia vazia (isto ,
por nada).
Uma derivao pode seguir o seguinte percurso:
S aSb

aplicando a

produo P1

aaSbb

produo P1

aaaSbbb

produo P1

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

23

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

...
pode-se continuar um nmero qualquer de vezes, at ao infinito. Vo-se obtendo sucessivas
formas sentenciais.
Em qualquer altura se pode aplicar a produo P2, substituindo S por , ou seja por
nada. Nessa altura obtm-se uma frase da linguagem. Assim,
ao fim da 1 produo obtm-se ab
ao fim da 2 produo obtm-se aabb
etc.,
ao fim da nsima produo obtmse aaa....abbb...b = anbn
Se aplicarmos primeiro a produo P2 obtm-se a cadeia vazia e no se pode
prosseguir.
Conclui-se assim que esta gramtica produz a linguagem composta por cadeias em que
a primeira metade s tem as e a segunda metade s tem bs, ou seja, de uma forma
matematicamente elegante, usando as noes que vimos anteriormente,
L(G) = {anbn, n0}
Este resultado to evidente que se pode dizer que no carece de demonstrao. Mas
pode-se demonstrar formalmente, usando uma das tcnicas de prova conhecidas. Como se
trata de demonstrar uma frmula para um nmero infinito de casos, o mais natural ser usar a
prova por induo, associada noo de recursividade.
O caso , correspondente a n =0 tem que ser tratado parte. Demonstra-se que ele se
obtm aplicando a produo P2 a partir de S.
Para os outros casos faamos a demonstrao por recursividade da produo P1 e
induo.
Queremos provar que qualquer que seja n 1, todas as formas sentenciais so da forma
wn = anSbn

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

24

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

- base da induo, n=1, verdade ?


sim, resultante de uma vez P1 a partir de S.
-hiptese indutiva: admitamos que verdade para n=k e para todos os anteriores, ou seja,
verdade que
wk = akSbk
-passo indutivo: em consequncia verdade para k+1 ou seja
wk+1 = ak+1Sbk+1
Prova do passo indutivo (nesta prova h-de entrar a hiptese indutiva):
Partindo de wk e por aplicao de P1 obtm-se wk+1
wk+1awkb
mas substituindo a hiptese indutiva nesta produo,
wk+1a(akSbk )b
Manipulando a expresso
wk+1 (aak)S(bkb)
ou ainda por definio de concatenao (potncia) de caracteres,
wk+1 ak+1 Sbk+1
Falta finalmente provar que aplicando P2 a qualquer forma sentencial na forma wn = anSbn,
n1, se obtm uma sentena na forma anbn.
anSbn anbn
o que verdade.
E a demonstrao est feita, quod erat demonstrandum (o que era preciso demonstrar)
q.e.d.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

25

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Exemplo 1.3.3:
Encontrar uma gramtica que gere a linguagem
L={an+1bn, n0}
Esta linguagem parecida com a do exemplo anterior, com a diferena de que
necessrio gerar um a adicional esquerda de b. Pode-se simplesmente ger-lo em primeiro
lugar, aplicar depois regras de produo como no caso anterior:
P1:

S aS

P2:

S aSb

P3:

Teramos assim a gramtica definida exactamente como a anterior:


G = ({S}, {a,b}, S, P)
Como as produes de podem aplicar por ordem arbitrria e um nmero arbitrrio de
veses, aplicando P1, P1, P2, P3, obtm-se
S aS aaS aaaSb aaab
i.e. a3b, que no faz parte da linguagem.
Para que isto no acontea, P1 s se pode aplicar uma vez. Introduz-se com esse
objectivo uma varivel adicional, A, e definem-se as produes
P1:

S aA

P2:

A aAb

P3:

em que S a varivel de inicializao. Note-se que partindo de S no se pode voltar a ele, e


por isso P1 s se aplica uma vez, sendo sempre a primeira. Poderemos agora definir a
gramtica G com o quarteto

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

26

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

G=({A}, {a,b}, S, P)
sendo P composto pelas trs produes P1, P2 e P3.
Para demonstrar que uma dada linguagem gerada por uma certa gramtica, tem que
se mostrar que:
(i) por um lado toda a cadeia w L pode ser derivada a partir de S usando as produes P da
gramtica ou seja
(ii) por outro lado qualquer cadeia gerada pela gramtica G pertence linguagem L.
Nem sempre fcil fazer as duas demonstraes, sobretudo a primeira. Ver por
exemplo em Linz, exemplo 1.13. Recorre-se frequentemente prova por induo.
Uma linguagem pode ser gerada por muitas gramticas, que por isso se dizem
equivalentes ,
G1 e G2 so gramticas equivalentes se L(G1)=L(G2)
Na Fig. 1.1 as gramticas G2, G3 e G4 so equivalentes.
Os palndromos so cadeias que tm interesse especial para o estudo de gramticas e
autmatos. Vejamos mais em detalhe como se podem definir e gerar.
Definio formal de palndromos ( PAL) sobre um alfabeto
Seja PAL a linguagem constituda por todos os palndromos (capicuas) sobre um dado
alfabeto. Pode-se definir pelas trs regras seguintes
1. O carcter vazio simtrico, logo pertence aos palndromos.

PAL
2. Qualquer carcter isolado simtrico, logo um palndromo
Para todo o a, a PAL,
3. Se tivermos uma cadeia simtrica e lhe adicionarmos o mesmo carcter no princpio e no
fim, resulta uma cadeia simtrica,.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

27

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Para toda a cadeia w PAL , e todo o a,

awa PAL

Uma cadeia s pertence a PAL se puder ser gerada por estas 3 regras. Por outro lado se
uma cadeia um palndromo, ento ela pode ser gerada por aquelas trs regras, aplicando-as
as vezes necessrias pela ordem conveniente.
Exemplo 1.3.4

= { a, b }

Seja o alfabeto

Aplicando aquelas 3 regras,


1. PAL
2. a PAL, b PAL
3. Para qualquer wPAL,

awa PAL
bwb PAL

Qualquer cadeia pertence a PAL se e s se for gerada pelas regras 1, 2 e 3.


Por exemplo:
b PAL ,

regra 2

aba PAL,

regra 3

babab PAL

regra 3

abababa PAL

regra 3

Como se poder escrever uma gramtica para esta linguagem?


Poderemos tentar imitar as trs regras: primeiro gera-se um palndromo com a regra 1 ou a 2,e
depois geram-se sucessivos palndromo, cada vez maiores, com a regra 3.
Deste modo uma gramtica para esta linguagem pode ser obtida pelas derivaes seguintes:
1 P1: S

LEI/DEI/FCTUC/2009/@ADC

(regra 1)

Documento de trabalho

28

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

2 P2: S a

(regra 2)

P3: S b

(regra 2)

3 P4: S aSa

(regra 3)

P5: S bSb

(regra 3)

Por exemplo para gerar abba teremos a sequncia de produes


S aSa abSba abba abba
Pode-se escrever as 5 produes gramtica na forma compacta, usando | para o ou lgico
S | a | b |
S aSa | bSb

1.4.Autmatos
Os autmatos finitos so modelos abstractos de muitos dispositivos de hardware e de
software. Aplicam-se nomeadamente em (Hopcroft& col)
1- software para o projecto e o teste de circuitos digitais.
2- Analisadores lexicais dos compiladores (que verificam se uma palavra, por
exemplo um identificador, est bem escrita num programa).
3- Software para busca de texto em ficheiros, na web, etc.
4- Software de verificao de sistemas que tm um nmero finito de estados
distintos, tais como protocolos de comunicao, protocolos de segurana, etc.
Muitos componentes e sistemas digitais podem estar num entre um nmero finito de
estados, e por isso a noo de estado central num autmato a eles associado. O estado
permite lembrar o passado relevante do sistema (ele chegou l aps um certo nmero de
transies, que so o seu passado). Se o nmero de estados de um sistema finito, poderemos
represent-lo com uma quantidade limitada de recursos.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

29

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Considere-se por exemplo um interruptor on-off. Se est off e se se pressiona, passa a


on. Se est on e se se pressiona, passa a off . Ele ter por isso dois estados, o on (A) e o off (F)
Desenhando, teremos os dois estados como dois vrtices de um grafo, Fig.1.3.1.

Figura 1.4.1. Os dois estados do autmato que representa o interruptor on-off. F-fechado, Aaberto.

Representando por arestas de um grafo as aces de pressionar ( Press) teremos a Fig. 1.4.2
Press

Press

Figura 1.4.2. As transies entre os estados do autmato, provocadas pelo accionamento do


interruptor.
Para se saber como se inicializou o interruptor, identifica-se o estado inicial por uma seta,
Press

Press

Figura 1.4.3. O autmato finito do interruptor.


e tem-se finalmente o desenho de um autmato finito (de dois estados) que representa o
funcionamento do interruptor, na Fig. 1.4.3.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

30

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

As etiquetas das arestas representam a aco exterior sobre o sistema (neste caso
pressionar o interruptor) e as arestas a evoluo do sistema em consequncia dessa aco, que
sempre uma transio entre dois estados (ou, como veremos, e generalizando a noo de
transio, de um estado para ele prprio).
Considere-se agora o autmato da figura 1.4.4.
p

Figura 1.4.4. Um autmato finito que transita de estado pela entrada de letras.
Inicializa-se no estado 1, recebe do exterior (l) a letra p e passa ao esto 2, depois com as
letras a e i passa sucessivamente aos estados trs e 4.
Poderamos nomear os estados de um modo mais sugestivo, tal que a sua etiqueta nos
sintetizasse o que se passou at a. Teramos por exemplo a Fig. 1.4.5.

pa

pai

Figura 1.4.5. O autmato anterior da Fig 1.4.4 com nova etiquetagem dos estados.mais
sugestiva.
Pode afirmar-se que o autmato de 4 estados capaz de reconhecer a palavra pai: se
chegou ao estado 4, ela pareceu-lhe, caso contrrio nunca chega ao estado 4. Por esta razo
diz-se que o autmato um aceitador da palavra pai. Para assinalar este facto o estado 4
desenha-se com uma dupla circunferncia, como na figura 1.4.6.
p

a
p

i
pa

pai

Figura 1.4.6. O autmato com estado final aceitador


E chama-se estado final, ou estado aceitador, conforme os autores. O primeiro
chama-se estado inicial.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

31

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Vejamos um exemplo um pouco mais complexo.


Exemplo 1.4.3
Uma porta automtica de entrada de um servio pblico, rotativa, tem geralmente dois
sensores, um frontal, e um na retaguarda, conforme esquematizado na Fig. 1.4.7.. O frontal
detecta uma pessoa que se aproxima e o da retaguarda detecta a presena de uma pessoa na
sua rea de observao.

Sensor
Fronta

Sensor
Rectag

Figura 1.4.7. Uma porta de abertura automtica, rotativa.


Quanto uma pessoa se aproxima para entrar a porta abre-se, girando sobre o seu eixo
de fixao, se no estivar ningum detrs da porta, caso contrrio haveria um acidente. H um
dispositivo electrnico, o controlador, que recebe os sinais dos dois sensores e conforme o
caso manda abrir, fechar, ou manter-se como est. O controlador ter dois estados,
correspondentes a porta aberta, A, e porta fechada, F. Tal como no exemplo anterior,
poderemos desenhar dois vrtices de um grfico para esses dois estados.

Figura 1.4.8. Os dois estado do autmato abridor da porta.


Os dois sensores enviam, cada um, informao de presena ou ausncia de pessoas,
que poderemos representar por 0 (ausncia) e 1 (presena).Teremos quatro situaes
possveis, considerando simultaneamente os dois sensores:
00 : ausncia de frente e detrs

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

32

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

01: ausncia de frente e presena detrs


10: presena de frente e ausncia detrs
11: presena de frente e presena detrs.
Em cada uma destas quatro situaes possveis o controlador tem que tomar uma
deciso: fecha, abre ou deixa ficar como est ?
Poderemos constatar que o alfabeto do autmato (o conjunto de informao externa
que ele sabe ler) composto por aquelas quatro situaes, que poderemos associar a 4
caracteres de um alfabeto, conforme a tabela
Tabela 1.4.1. Codificao do alfabeto ao autmato. PF- presena frontal, PR presena na
rectaguarda.
PF

PR

Carcter

00

01

10

11

Considerando as restries de segurana, teremos as transies possveis representadas na


tabela (de transies) seguinte:
Tabela 1.4.2. Transies entre os estados em funo dos caracteres de entrada lidos.
Entrada
Estado

a
00

b
01

c
10

d
11

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

33

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Agora fcil desenhar o grafo do autmato, com os dois ns correspondentes aos


estados e as arestas correspondentes 8 transies da tabela. Obtm-se a figura seguinte.
b,d,a

b,c,d
c

F
a

Figura 1.4.9. O autmato finito que representa o sistema de controlo de abertura da porta .
Como que o controlador fecha e abre a porta? Enviando um sinal a um actuador
mecnico. Poderemos assim considerar que o autmato tem uma sada que pode ter dois
valores: 1 para abrir, 0 para fechar. Poderemos introduzir essa informao colocando sob a
letra do estado o valor lgico correspondente da sada, como na figura seguinte

b,d,a

b,c,d
c

A/1

F/0

a
Figura 1.4.10. O autmato anterior com a representao da sada. Veremos no Cap. 2 que este
autmato se chama por isso de Mquina de Moore.
Depois deste dois exemplos muito simples, estamos em condies de definir um
autmato mais detalhadamente.
Um autmato genrico tem os seguintes componentes:
- um ficheiro de entrada, composto por uma cadeia num alfabeto
- um mecanismo para leitura do ficheiro de entrada de modo que
l a cadeia de entrada da esquerda para a direita, um carcter de cada vez,
detecta o fim da cadeia

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

34

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

- uma sada, onde a unidade de controlo pode escrever


- um dispositivo de memria temporria
composto por um nmero ilimitado de clulas, cada uma capaz de armazenar
um smbolo de um alfabeto (que pode ser diferente do alfabeto de entrada). O
autmato pode ler e alterar o contedo dos registos de memria.
- uma unidade de controlo que
pode estar num de entre um certo nmero finito de estados internos,
pode mudar de estado segundo alguma regra.
Juntando tudo teremos a Fig. 1.4.11.

Ficheiro de entrada

Sk

Unidade de Controlo
qk

Ficheiro de sada

mk

M
e
m

r
i
a

yk

Figura 1.4.11. Representao genrica de um autmato finito.


O que lhe d a caracterstica de finito to s o nmero de estados da unidade de
controlo: ele finito.
Esta figura muito geral. Um autmato concreto pode no ter memria (como os
exemplos que vimos), ou pode no ter sada (como o aceitador de pai). Mas todos tm a
unidade de controlo e a entrada.
O autmato funciona em tempo discreto, sequencialmente. Num dado instante k est
num certo estado interno, k, e o mecanismo de entrada est a ler um smbolo sk no ficheiro de
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

35

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

entrada. No prximo instante de tempo, o estado interno do autmato vai ser determinado
pelo estado actual, pelo smbolo lido entrada e pelo contedo da memria, mk. Essa
dependncia definida pela funo de transio de estado f, que depende por isso do estado
actual, da entrada actual e do contedo actual da memria, ou seja,
qk+1 = f(qk, sk, mk)
Entre dois instantes do tempo sucessivos pode produzir-se uma sada ou pode alterarse o contedo da memria.
Chama-se configurao do autmato ao conjunto composto por
- o estado interno da unidade de controlo,
- o ficheiro de entrada e
- o contedo da memria.
Chama-se um passo transio do autmato de uma configurao para a configurao
seguinte.
Todos ao autmatos que estudaremos se enquadram nesta descrio genrica. Os
diversos tipos que estudaremos distinguem-se por
i) a forma de produzir a sada , sendo
aceitadores se reconhecem ou no a cadeia de entrada; no tm sada informam pelo
estado final em que terminam a leitura da entrada
transdutores se produzem cadeias de caracteres na sada com alguma utilidade
ii) a natureza da memria temporria (o factor mais importante)sendo
autmatos finitos se no sem tm memria temporrio ou
autmatos de pilha se tm uma memria em pilha LIFO (em ingls pushdown
automata, de empurrar (a pilha) para baixo ),
mquinas de Turing se tm a memria em fita, de dimenso infinita, que pode
ser lida e alterada em qualquer ordem

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

36

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

iii) a natureza da funo de transio, dizendo-se


determinsticos se dada uma configurao, existe um e um s comportamento
futuro possvel ou
no determinsticos se dada uma configurao, o prximo passo pode ter vrias
alternativas.

1.5. Os trs paradigmas da computao


Quando falamos em computao, o que queremos dizer exactamente ?
Em primeiro lugar computao poder ser o clculo do valor numrico de uma
funo, como por exemplo da funo f(n), que calcula o n-sino nmero primo,

f (n) n simo nmero primo


trata-se de uma funo unria, ou da funo g, produto de dois nmeros,
g (n, m) n m
funo binria, de dois argumentos m e n ou ainda da funo h, soma de n nmeros,
h a1 a2 ... an
funo n-ria (de n argumentos).
Este tipo de computao mais antigo do que os computadores digitais, alis to
antigo quanto a civilizao humana, dado que desde muito cedo o homem precisou de fazer
clculos matemticos (para calcular o calendrio, por exemplo).
Na era do computador digital h outros tipos de computao. Por exemplo, poderemos
ter uma cadeia de 0s e 1s e calcular a sua paridade, ou o nmero de zeros. Ou ento
queremos saber se uma cadeia um palndromo, ou se a palavra public est bem escrita
num programa de computador em Java.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

37

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Este tipo de computao parece nada ter ver, partida, com a computao do valor de
funes. Trata-se do reconhecimento, ou classificao, de cadeias de smbolos. Como as
cadeias de smbolos formam linguagens, este tipo de computao chama-se por isso
reconhecimento de linguagens, o segundo paradigma da computao.

O problema de reconhecimento de linguagens domina a teoria da computao.


Falaremos dele repetidamente at ao final da disciplina e ele ocupa a maior parte dos livros de
teoria da computao.
Porque assim to importante?
Em primeiro lugar porque muito representativo: pode-se reduzir qualquer problema
de deciso a um problema de reconhecimento de linguagens.
Em segundo lugar porque o problema do clculo do valor de uma funo pode tambm
ser reduzido a um problema de reconhecimento de uma linguagem.
Comecemos pela verificao da primeira razo.
Considere-se o problema de deciso seguinte
- o nmero natural n primo ?

Trata-se de um problema de deciso: decidir se ou no, mas decidir de modo


fundamentado.
Construa-se no alfabeto ={1} a linguagem composta por cadeias de 1s que tm um
comprimento igual a um nmero primo:
L ={1n, n primo},
em que como sabemos 1n = 1111 , n vezes
Isto
L={11, 111, 11111, 1111111, }
Agora temos o problema de reconhecimento de linguagens
- a cadeia 1n pertence linguagem L ?

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

38

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

equivalente ao problema de deciso acima enunciado.


Alm do clculo do valor de uma funo ou do reconhecimento de uma linguagem
temos outro tipo de computao: o da transduo de cadeias, ou seja, a transformao de
uma cadeia de smbolos por exemplo revertendo-a, deslocando-a para a esquerda ou para a
direita, contando o nmero de as, etc. Temos aqui o terceiro paradigma da computao.
De entre os trs paradigmas da computao, qual o mais importante?
De facto nenhum mais importante do que o outro. Verifica-se at o princpio da
inter-redutibilidade (Fig.1.5.1): qualquer instncia de um dos trs paradigmas de pode reduzir
a uma instncia de qualquer um dos outros dois.

Clculo de
funes f(n)

Reconhecimento
de Linguagens

Transduo de
cadeias

Figura 1.5.1. Inter-redutibilidade entre os trs paradigmas da computao.

Vejamos como.
i) Qualquer caso de computao de uma funo pode ser reduzido a uma instncia do
reconhecimento de uma linguagem.
Exemplo 1.5.1. Seja a funo
f(n) = m , m o n-simo nmero primo
Tabela 1.5.1. Funo n-simo nmero primo

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

39

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

f(n)

11

13

Suponhamos que queremos calcular


f(5) = ??
Para reduzir este clculo a um problema de reconhecimento de linguagens faa-se a
construo engenhosa seguinte (inspirado em Taylor):
1 Usando a representao binria de nmeros naturais, constroem-se as cadeias que
resultam da concatenao de 101, isto 5 em binrio, com os nmeros naturais (1, 2, 3, 4, 5,
6, ), usando por exemplo # como separador:
101#1
101#10
101#11
101#100
101#101
101#110
101#111

2 Define-se agora a linguagem L associada aos nmeros primos


L ={Binrio(n)#Binrio(m)}
(no esquecer que m o n-sio nmero primo).
A computao do valor de f(5) equivalente determinao de qual a nica cadeia
daquele conjunto que pertence a L . De facto h-de l estar, naquele conjunto de cadeias,
101#1011
Assim, procurando-a, ficamos a saber que
f(5)=11
ii) Reduo de uma classificao de cadeias a uma computao numrica de uma funo

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

40

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Tomemos o caso do reconhecimento de palndromos.


Em primeiro lugar faz-se uma codificao dos smbolos do alfabeto, de modo que cada
smbolo fique associado a um e um s nmero natural em binrio.
Por exemplo, em ={a,b}, se a = 01 e b = 10, ento o palndromo aba resulta no
nmero natural 011001=2510.
Em segundo lugar constri-se a linguagem dos palndromos, L(Pal),.
L(Pal)= {a,b,aa,bb,aaa, aba,bab, bbb,
e os seus cdigos,
Cdigos= {01,10,0101,1010,010101, 011001,100110,101010, }
A funo caracterstica de L ser
1,se n o cdigo de um palndromo
0, se n no o

( n)

Agora para se saber se 25 o cdigo de um palndromo, basta calcular o valor da


funo caracterstica (25) que 1, e assim se conclui que aba um palndromo.
Claro que para cada caso necessrio desenvolver o engenho para encontrar a forma
de implementar o princpio da inter-redutibilidade. O que importa saber que sempre
possvel encontrar uma soluo.
Mas este princpio muito importante: ele permite que se use o problema da
identificao de linguagens em teoria da computao como representativo dos trs
paradigmas. Por isso o que usaremos ao longo da cadeira.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

41

Teoria da Computao

Captulo 1 Introduo e Definies Bsicas

Bibliografia

An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

Anexo 1. Tabela de nmeros primos


2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139
149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443
449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613
617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787
797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971
977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103
1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259
1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427
1429 1433 1439 1447 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553
1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697
1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867
1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011
2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153
2161 2179 2203 2207 2213 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333
2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467
2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 2621 2633 2647 2657 2659
2663 2671 2677 2683 2687 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789
2791 2797 2801 2803 2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 .

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

42

Teoria da Computao

Captulo 2 . Autmatos Finitos

CAPTULO 2
AUTMATOS FINITOS

2.1. Introduo

45

2.2.Aceitadores determinsticos

46

2.3. A arte de construir DFAs

59

2.4. Linguagens regulares

75

2.5. Autmatos finitos no-determinsticos (DFAs)

83

2.6 Equivalncia entre DFAs e NFAs

85

2.7. Reduo do nmero de estados em Autmatos Finitos

97

2.8 Aplicao dos DFAs na busca de texto

105

2.9 Autmatos transdutores

107

Mquinas de Mealy

108

Mquinas de More

109

Bibliogafia

112

Apndice: Software de autmatos finitos

112

JFLAP
Deus ex-mquina

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

43

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Captulo 2 . Autmatos Finitos

Documento de trabalho

44

Teoria da Computao

Captulo 2 . Autmatos Finitos

2.1. Introduo
No Cap.1 estudmos as noes bsicas de linguagens, gramticas e autmatos. Podem-se
definir muitas linguagens a partir de um mesmo alfabeto, conforma as regras particulares de
combinao dos caracteres do alfabeto.
Por exemplo a partir do alfabeto = {a, b} e usando a notao de conjuntos poderemos
definir as linguagens L1 = { anbm | n,m >= 0 }a que pertencem as cadeias : ,aabbbbb, aaaa,
bbbb, ou a linguagem L2 = { anbn | n >= 0 } a que pertencem as cadeias: ,ab,aabb,
aaabbb, aaaabbbb, ou ainda L3 = {a,b}* composta por qualquer cadeia de as e bs ,incluindo

.. Quantas linguagens se podem definir com este alfabeto ?


As linguagens podem ser definidas por uma gramtica, que indica como se formam as
cadeias de caracteres. Conhecidas as suas produes fcil derivar cadeias da linguagem.
Pode-se agora pr o problema ao contrrio: dada uma cadeia de caracteres, como saber se
pertence a uma dada linguagem ? Se a cadeia for pequena pode ser relativamente simples, por
inspeco visual, decidir se pertence ou no. Mas para uma cadeia grande de um gramtica
mais elaborada, no fcil decidir.
aqui que entram os autmatos finitos. Vimos no Cap. 1 um autmato aceitador da
cadeia pai. Se fosse possvel construir um autmato que aceitasse todas as cadeias de uma
dada linguagem (e s essas), ento para se saber se uma cadeia pertence a uma linguagem
bastaria d-la a ler ao autmato. Se ele parasse no estado aceitador depois de concluir a sua
leitura, a cadeia pertenceria linguagem. Caso contrrio no pertenceria.
Infelizmente no possvel desenhar um autmato para uma qualquer linguagem. H
linguagens para as quais ainda hoje no possvel decidir se uma cadeia lhe pertence ou no.
Num mesmo alfabeto pode-se definir um nmero infinito de linguagens, cada uma delas
com caractersticas prprias. Felizmente para algumas classes de linguagens possvel
construir autmatos finitos aceitadores: o caso por exemplo das linguagens regulares, cujas
propriedades veremos mais frente. Por agora basta-nos saber que possvel construir um
autmato finito aceitador para uma linguagem regular.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

45

Teoria da Computao

Captulo 2 . Autmatos Finitos

Teremos assim a Figura 2.1.1.


Linguagens L

Gramticas G
Geram as cadeias de L

Autmatos
Reconhecem as cadeias
de L

Figura 2.1.1. Relao entre linguagens, gramticas e autmatos.


Existem outras classes de linguagens, que no regulares, para as quais possvel
tambm construir autmatos aceitadores, naturalmente distintos dos das linguagens regulares.
Vemos assim que h diferentes classes de linguagens e diferentes classes correspondentes de
autmatos.
Para as linguagens regulares, as mais simples, constroem-se autmatos finitos
determinsticos, os autmatos tambm mais simples. Quando um autmato usado para
reconhecer uma linguagem, mais exacto chamar-lhe aceitador. No entanto usaremos com
frequncia o termo autmato, distinguindo-se a sua funo de aceitador dentro do contexto em
que usado. Como veremos existem autmatos que no so aceitadores, isto , no so
construdos para aceitar ou no uma linguagem, mas antes para executarem sobre as cadeias
de caracteres uma dada operao (como alis j vimos no Cap. 1).

2.2. Aceitadores determinsticos


Um aceitador determinstico define-se como uma estrutura matemtica e desenha-se como um
grafo.
Exemplo 2.2.1.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

46

Teoria da Computao

Captulo 2 . Autmatos Finitos

Por exemplo o grafo seguinte representa um aceitador determinstico. O seu alfabeto

={0,1}.
1

Incio

q0

q2

q1
0
1

Figura 2.2.1 Grafo de um aceitador determinstico.


Vejamos como funciona.
O autmato est no estado inicial, q0, e apresenta-se-lhe entrada uma cadeia de 0s e
1s, com por exemplo 1100.
Ele vai ler os caracteres da esquerda para a direita, isto 1 >1 > 0 >0. As arestas
representam as transies de estado quando o autmato l o carcter etiqueta da aresta.
Estando em q0 e lendo 1, transita para q1. Estando em q2 e lendo 1, transita para q2, isto , fica
onde est. Lendo agora 0, estando em q1, transita para q2. Lendo depois 0 transita para q3 e a
fica, porque no h mais nada para ler.
O estado q1 tem uma forma especial. Ele o estado aceitador. Se o autmato, partindo
do estado inicial, leu a cadeia 1100 e terminou no estado aceitador, ento aceita essa cadeia.
Poderemos ver outras que tambm aceita. Por exemplo 001, 0100, 1110001, etc. Se estiver
em q0 e aparece um 1, vai para o aceitador; se estiver em q1 e aparece um 1, mantm-se no
aceitador. Se estiver em q2 e aparece um 1, vai para o aceitador.
Ento conclui-se que qualquer cadeia que termine num 1 aceite pelo autmato: de facto
qualquer que seja o seu penltimo estado, o seu ltimo ser sempre o aceitador de ele ler
apenas mais um 1. Mas h cadeias de outro tipo, como por exemplo 0100, que tambm, so
aceites. Se depois do ltimo 1 aparecem dois zeros seguidos (e mais nada) ele termina
tambm no estado aceitador. Portanto o autmato aceita as cadeias que terminam num 1 ou
em 00 depois do ltimo 1.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

47

Teoria da Computao

Captulo 2 . Autmatos Finitos

Note-se que em cada estado o aceitador determinstico sabe exactamente o que deve
fazer, porque tido lhe dito: de cada estado h duas arestas definindo as duas transies
possveis, uma para cada carcter do alfabeto. Essas duas transies podem ser iguais, com
acontece no estado q2. Pode-se simplificar o grafo colocando apenas uma aresta com duas
etiquetas, com o na figura seguinte.
1

0
Incio

q0

0
1

q2

q1
0,1

Figura 2.2.2 Grafo do mesmo aceitador da Fig. 2.2.1


Se tivssemos uma alfabeto com trs caracteres (por exemplo {a,b,c}, ento de cada
estado teriam que partir sempre trs arestas explicitamente definidas (ainda que pudessem ser
iguais). Um aceitador determinstico no tem qualquer capacidade de decidir em qualquer
circunstncia, da o nome de determinstico. Consequentemente todas as transies possveis
tm que estar explicitamente definidas. A funo de transio por isso uma funo total, isto
, est explicitamente definida para todos os valores do seu domnio.
Note-se que esta definio que estamos a adoptar no seguida por todos os autores.
Alguns admitem que possam existir transies no definidas. Nestes, se aparecer entrada,
num dado estado, um carcter para o qual no esteja explicitamente definida uma transio, o
DFA morre, isto , passa a um estado no aceitador e no sai mais de l, quaisquer que sejam
os caracteres seguintes na cadeia lida (mais tarde chamaremos ratoeira a este estado).
Vimos que um autmato finito determinstico facilmente definido e descrito por um
grafo. Tem cinco partes: um conjunto de estados, um conjunto de regras para transitar entre
eles, um alfabeto de entrada que define os caracteres aceitveis entrada, um estado inicial,
um estado final. Veremos casos que tm vrios estados finais. Para definir formalmente o
autmato, usaremos todas essas cinco partes que compem um quinteto.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

48

Teoria da Computao

Captulo 2 . Autmatos Finitos

Definio 2.2.1 Aceitador determinstico


Um aceitador determinstico (usaremos o acrnimo dfa-, de

deterministic finite

accepter) definido pelo quinteto


M=(Q,, , q0, F )
em que :

Q: o conjunto finito de estados internos

: alfabeto de entrada (conjunto finito de caracteres)


: Qx Q a funo total chamada funo de transio
q0 Q o estado inicial
F Q o conjunto de estados finais ou aceitadores
Uma funo total quando definida para todos os valores possveis dos seus
argumentos; caso contrrio diz-se parcial. Ao dizer-se que a funo de transio total,
atendendo sua definio, isso quer dizer que ela tem que estar definida para todas as
combinaes possveis de um estado e um carcter do alfabeto, isto , para todos os elementos
do produto cartesiano Qx.
Exemplo 2.2.2. O interruptor do Cap. 1
Retomemos aqui o exemplo do interruptor do Cap. 1. Se definirmos a linguagem das
sequncias de Press(P) tais que o interruptor fica ligado aps a sua aplicao (partindo do
estado inicial F), teremos P, PPP, PPPPP, etc., ou seja, um nmero mpar de accionamentos
do interruptor. Agora poderemos definir o autmato como um aceitador dessa linguagem,
colocando a dupla circunferncia no estado A.
P

Figura 2.2.3 Grafo do interruptor do Cap. 1.


Aplicando-lhe a definio 2.1 v-se que
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

49

Teoria da Computao

Captulo 2 . Autmatos Finitos

Q, conjunto de estados internos: {F, A}

, alfabeto de entrada: {P}


, funo de transio: F P A; A P F
q0 , o estado inicial: F
F, o estado final: {A}
Exemplo 2.2.3.
a

Seja o autmato da Fig. 2.2.4.


a
1

b
2

b
b

Figura 2.2.4. Autmato do exemplo 2.2.3


Aplicando-lhe de igual modo a definio 2.1 v-se que:
Q, conjunto de estados internos: {1,2,3,4}

, alfabeto de entrada: {a,b}


, funo de transio: 1 a 2; 1 b 4, 2 b 3, etc.
q0 , o estado inicial: 1
F, o estado final: {4}
Neste caso a funo de transio tem muitos elementos. Usando uma tabela especifica-se
mais facilmente.
Note-se que pelo facto de a funo de transio der total, a tabela tem que ter todas as clulas
preenchidas. Neste caso para cada estado existem duas arestas possveis, uma para a e outra
para b.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

50

Teoria da Computao

Captulo 2 . Autmatos Finitos

Tabela 2.2.1. Tabela de transies do DFA da Fig. 2.2.3.


Se estado

e a entrada

o estado

actual

actual

seguinte ser

Qual ser a linguagem aceite por este autmato ?


O estado 4 tem uma caracterstica: se o autmato l chegar, nunca mais de l sai, e por
isso chama-se estado ratoeira, ou armadilha (trap) ou poo.
A figura seguinte reduz o esquema geral de um autmato que vimos no Cap. 1 ao caso
particular de um dfa.
Note-se que um dfa no tem nem dispositivo de memria nem cadeia de sada. Tem apenas
dispositivo de leitura e unidade de controlo. Conforme o contedo actual da clula lida, d-se
ou no uma transio de estado dentro da unidade de controlo.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

51

Teoria da Computao

Captulo 2 . Autmatos Finitos

cadeia de entrada

q0
q2

q1

Figura 2.2.5. O esquema de um DFA. Note-se a ausncia de qualquer dispositivo de


memria.
A transio de um estado para outro depende do estado actual (antes da transio) e do
carcter lido entrada no instante actual.

carcter de entrada
estado actual

estado seguinte,
movida,
smbolo na sada
(caso a tenha)

Figura 2.2.6. A funo de transio de um DFA.


Tabela 2.2.2
Um autmato representa-se por um
grafo

em

que

os

vrtices

Smbolo

(ns)
qi

representam os estados e as arestas


orientadas

tm

como

Significado

etiquetas

Estado normal

os

caracteres lidos na cadeia de entrada. H

q0

trs tipos de vrtices, indicados na Tabela

Estado inicial

2.2.2., ao lado
qf

[*] carcter

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

Estado
aceitador (ou
final)
Aresta

52

Teoria da Computao

Captulo 2 . Autmatos Finitos

Exemplo 2.2.4
1

q2

q1

q0

incio

1
Figura 2.2.7 DFA do exemplo 2.2.4.
Temos um autmato com trs estados, um de cada tipo. O alfabeto do autmato =
{0,1}. Lendo com ateno as etiquetas das arestas pode-se escrever a seguinte tabela de
transies. O DFA pode-se assim definir formalmente como
M= (Q, S, , ,q0,F) com
Q = {q0,q1,q2}, = {0,1}, F = {q2} e definida pela Tabela 2.2.4.
Tabela 2.2.3. Funo de transio do exemplo 2.2.4.
Entradas
0

q0

q1

q0

q1

q2

q0

q2

q1

q0

Estados

Qual ser a linguagem aceite pelo autmato? Um bom desafio para o leitor ...
No Captulo 3 estudaremos as expresses regulares, uma tcnica de especificao de
linguagens que tem uma lgebra prpria muito adequada para deduzir a definio da
linguagem a partir de um DFA qualquer. Neste momento poderemos fazer o seguinte
procedimento heurstico:
-colocamo-nos no estado aceitador e vemos como l poderemos chegar,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

53

Teoria da Computao

Captulo 2 . Autmatos Finitos

-depois andamos para trs e em cada estado vemos o mesmo. At que se consiga
visualizar mentalmente a linguagem do autmato.
Chega-se ao estado final a partir de q1 com um 0, ou seja, com (****)0.
Chega-se a q1 com um 0 depois de 1:

(***10)0. De modo que sempre que uma

cadeia termine em 100, termina no estado aceitador. Se terminar em 1000 no aceita a cadeia.
Mas aceita se terminar em 10000, 1000000, ou qualquer nmero par de zeros
precedido de 1.
Poderemos definir formalmente linguagem de um autmato finito.
Definio 2.2.2a. Linguagem de um DFA
Dado um DFA qualquer, M, a linguagem L aceite (ou reconhecida) por M o conjunto
de todas as cadeias que, comeando a ser lidas no estado inicial, fazem com que o autmato
alcance um dos estados finais depois de toda a cadeia ter sido lida. Escreve-se L(M) para
dizer que L a linguagem aceite ou reconhecida por M.
Que linguagens aceitam os seguintes autmatos ?
Exmplo 2.2.5
0

q0

Incio

q1

1
Fig. 2.2.8.
0

Exemplo 2.2.6

1
1

Incio

q0

q1
0

Fig. 2.2.9.
Exemplo 2.2.7

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

54

Teoria da Computao

Captulo 2 . Autmatos Finitos

1
1

q0

0,1
0

q1

q2

Fig. 2.2.10
Um DFA pode ser definido pela explicitao da funo de transio e, a partir dela,
facialmente se desenha o seu grafo.
Exemplo 2.2.8
Seja o DFA M = ({q0, q1, q2}, {a,b}, , q0, {q2}) cuja funo de transio a seguinte:

(q0, a) = q1

Tabela de transies

(q0, b) = q2

(q1, a) = q0

q0

q1

q2

(q1, b) = q2

q1

q0

q2

q2

q2

q2

(q2, a) = q2
(q2, b) = q2

Nas transies aparecem trs estados q1, q2 e q3. O grafo do autmato

desenha-se graficando as transies, depois de se desenharem os seus trs estados. Obtma

se assim a Fig. 2.2.11.

q0
b

q1

Fig. 2 .2.11
q2

a,b
Ser possvel simplificar este DFA, isto , encontrar um outro com menos estados que
aceite a mesma linguagem (e s a mesma) ?

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

55

Teoria da Computao

Captulo 2 . Autmatos Finitos

Veremos em captulos posteriores algoritmos para simplificar autmatos, reduzindo ao


mnimo possvel o nmero de estados. Neste momento poderemos apenas olhar com ateno
para o DFA e verificar o que ele faz. Se aparecer um b, no estado inicial, vai para o aceitador
q2. Se estiver em q1 e aparece um b, transita para q2 ; e se estiver em q2 e aparecer um b,
mantm-se a. Portanto qualquer que seja o seu estado se parecer um b na cadeia de entrada,
ele aceita-a: a sua linguagem portanto o conjunto de todas as cadeias em {a,b}* que
contenham pelo menos um b. O autmato seguinte aceita essa linguagem.
a

q0

Fig. 2.2.12. Grafo equivalente ao


da Fig. 2.2.11.

q2

a,b

Funo de transio estendida a cadeias de caracteres, *


Na definio do DFA a funo de transio definida de tal forma que ela activada por um
carcter. Se quisermos calcular a transio do DFA de uma configurao inicial para outra
configurao aps um conjunto de transies, seria interessante dispor de uma forma de
representao sucinta, compacta, que exprimisse essa transio salto resultante da leitura de
um conjunto de caracteres ou de uma cadeia completa.
Pode-se estender a noo de transio com esse objectivo. Em vez de escreve-se *,
em que o asterisco quer dizer aps um certo nmero de transies.
A funo de transio estendida assim definida por

*: Q * Q

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

56

Teoria da Computao

Captulo 2 . Autmatos Finitos

em que
- o seu segundo argumento uma cadeia em vez de um carcter, e
- o seu valor de sada d o estado do autmato depois de ler a (sub)cadeia.
Por exemplo, se tivermos num autmato tal que

(q0, a) = q1 e (q1, b) = q2 ento *(q0, ab)=q2


Representando por grafos, teremos a Fig. 2.2.13.

a
q0

b
q1

q2

ab

q0

q2

a) Funo de transio

b) Funo de transio estendida

Figura 2.2.13. Ilustrao da funo de transio estendida. Em a) grafo normal; em b) grafo


compactado usando uma transio estendida.

A funo de transio estendida pode definir-se recursivamente do modo seguinte:


(i) *(q,)= q
(ii) *(q,wa)= (* (q, w), a)
para todo o q Q, w*, a.
Para o exemplo anterior teremos :

* (q0, ab)= (* (q0, a), b)


*(q0, a)=* (q0, a)= (*(q0, ), a)= (q0, a)=q1
*(q0, ab)= ( q1, b)=q2

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

57

Teoria da Computao

Captulo 2 . Autmatos Finitos

Definio 2.2.2b.Linguagens de um DFA (definio formal)


A linguagem L aceite (ou reconhecida) por um DFA M =(Q, , , q0, F) o conjunto de todas
as cadeias em aceites por M, i.e.,
L(M) = {w* : *(q0, w)F }
A funo de transio e * so funes totais (definidas para todos os elementos do
seu domnio). Em cada passo define-se um e um s movimento, e por isso o autmato se
chama determinstico, no podendo fazer escolhas. Um autmato processa todas as cadeias
em *, aceitando-as ou no.
Quando no aceita uma cadeia, pra num estado no aceitador. O conjunto das cadeias
em que isso se verifica constitui o complemento da linguagem L(M), que se pode definir
formalmente por
Complem(L(M)) = {w* : *(q0, w)F }
Consideremos os autmatos da Fig. 2.2 14, diferentes apenas na identificao do estado
final.
O primeiro reconhece, como vimos, a linguagem das cadeias em {a,b}* que tenham pelo
menos um b. O segundo aceita, no mesmo alfabeto, as cadeias que tenham apenas as. Isto ,
a linguagem do segundo o complemento da linguagem do primeiro: se uma cadeia s tem
as no tem nenhum b, e se tem pelo menos um b no contm s as.
a

q0

q0
b

q1

q1

a,b

a,b

Figura. 2.2.14. Autmatos complementares no alfabeto {a,b}.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

58

Teoria da Computao

Captulo 2 . Autmatos Finitos

Repare-se que o estado no aceitador do primeiro autmato o estado aceitador do


segundo; e o estado aceitador do primeiro o estado no aceitador do segundo. De facto,:
- se uma cadeia aceite pelo primeiro no o pode ser pelo segundo: uma cadeia que
termine no estado aceitador do primeiro tem que terminar no estado no aceitador do
segundo;
- e se uma cadeia recusada pelo primeiro tem que ser aceite pelo segundo: se uma
cadeia termina no estado no aceitador do primeiro tem que terminar no estado aceitador do
segundo.
Para este autmato com dois estados, fcil de ver a relao entre os autmatos de
linguagens complementares.
Ser assim no geral ?
De facto . Se um autmato M aceita uma linguagem L(M), ento o complemento de L
ser reconhecida pelo autmato que se obtm de M invertendo neste a funo dos estados: os
no aceitadores passam a aceitadores e os aceitadores passam a no aceitadores.

2.3. A arte de construir DFAs


Os exemplos de autmatos que vimos at aqui parecem simples, e a sua construo (em grafo)
relativamente expedita.
Casos h em que bem mais difcil obter uma soluo simples (na medida do possvel) e
apropriada para uma dada funo.
A expertise para desenhar DFAs depende mais da arte aprendida e treinada do que de
uma teoria sofisticada.
Vejamos um exemplo:
Exemplo 2.2.9 Paridade individual
Desenhar um autmato que, no alfabeto ={0,1}, aceite todas as cadeias com um nmero
mpar de 1s.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

59

Teoria da Computao

Captulo 2 . Autmatos Finitos

Podemos comear a desenhar estados e arestas, por tentativa e erro, at que consigamos,
com mais ou menos remendos, uma soluo. Se o conseguirmos, muito provavelmente
obteremos um autmato confuso, com mais estados do que o necessrio, difcil de interpretar
por outrem.
Em vez disso, pensemos numa abordagem mais sistemtica, partindo de um algoritmo
mental para a folha de papel.
Em primeiro lugar quantos estados ter que ter o nosso autmato ? Lembremo-nos do
significado de um estado: o autmato chega l depois de um certo nmero de transies
resultantes da leitura de uma cadeia. O estado contm por isso a histria at a um certo ponto
da cadeia. Ora num problema qualquer, o que deve memorizar o autmato? Apenas a
informao mnima para ser capaz de responder ao que se lhe pede: neste caso lembrar-se da
paridade do nmero de 1s entrados at ao momento. Se for par deve estar num certo estado, se
no for deve estar noutro. O estado que corresponde a mpar deve ser aceitador porque se no
h mais nada para ler, a cadeia deve ser aceite porque entrou at ao momento um nmero
mpar de 1s. Temos ento (pelo menos) dois estados: Par (P) e mpar (I), que podemos desde
j desenhar.

Figura 2.3.1. Os estados do autmato de paridade individual


Se o DFA est em P e l 1 na entrada, o que acontece ? Se est em P, porque at ao
momento entrou um nmero par de 1s. Se agora entra mais um, passa a mpar, naturalmente.
E ento desenhe-se a transio correspondente: (P,1)=I. E se l um zero estando em P ?
Como nada lhe pedido em relao aos zeros, -lhe perfeitamente indiferente e por isso deve
manter-se em P. Logo (P,0)=P. Temos ento, para j,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

60

Teoria da Computao

Captulo 2 . Autmatos Finitos

0
1

Figura 2.3.2. Transies a partir de P


Faa-se de seguida o mesmo raciocnio par ao estado I. Ele est l porque entrou um
nmero mpar de 1s. Entrando mais um, fica um nmero par, e por isso (I,1)=P. Pela
mesma razo de cima, (I,0)=I. Todas as transies possveis esto agora identificadas. O
estado aceitador tambm. Falta apenas identificar o estado inicial, onde o DFA deve estar
antes de iniciar a leitura da cadeia, ou seja, quando entraram zero 0s e zero 1s. Ora zero
nmero par, e por isso P o estado inicial, pelo que se lhe coloca a setinha.
Conclumos assim o desenho do DFA requerido na Fig. 2.3.3
0
1

I
1

Figura 2.3.3 Autmato de paridade de 1s completo.


Simulando o seu funcionamento verifica-se que cumpre a sua misso.
E se quisssemos um DFA que aceitasse, no mesmo alfabeto, todas as cadeias com um
nmero par de 1s ? Facilmente se obtm, seguindo o mesmo algoritmo mental, o autmato da
Fig. 2.3.4.
0
1

Figura 2.3.4. Autmato de


um nmero par de 1s.
Notem-se as semelhanas e
diferenas relativamente ao
anterior

LEI/DEI/FCTUC/2009/@ADC

.
1

Documento de trabalho

61

Teoria da Computao

Captulo 2 . Autmatos Finitos

Fica o leitor desafiado a verificar que os autmatos seguintes aceitam, ainda no alfabeto
={0,1}, as cadeias com um nmero mpar de zeros e um nmero par de zeros.
1
1

0
0

I
0

a)

b)

Figura 2.3.5. Autmatos de paridade de zeros. a) mpar, b) par

Exemplo 2.3.2 Paridade de grupo


Desenhar um DFA que no alfabeto ={0,1} aceite todas as cadeias com um nmero mpar de
0s e um nmero mpar de 1s.
Temos aqui uma situao mais complicada porque a imparidade exigida
simultaneamente aos dois caracteres do alfabeto.
A primeira questo, e a decisiva: quantos estados deve ter o autmato ? Ele tem que
saber identificar a situao de paridade entre todas as situaes de paridade possveis. E quais
so ? Tendo em conta que temos que medir simultaneamente a paridade de 0s e de 1s, elas
so:
- nmero par de 0s e nmero par de 1s;
- nmero par de 0s e nmero mpar de 1s;
- nmero mpar de 0s e nmero par de 1s;
- nmero mpar de 0s e nmero mpar de 1s.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

62

Teoria da Computao

Captulo 2 . Autmatos Finitos

No havendo mais nenhuma situao relevante para o caso, conclumos que quatro
estados sero suficientes; chamem-se PP, PI, IP, II, sendo aceitador o II.

PP

PI

IP

II

Figura 2.3.6. Os estados necessrios para o exemplo 2.3.6.


Se o autmato est em PP porque leu at ao momento um nmero par de 0s e um
nmero par de 1s, se esto em PI, leu um nmero par de 0s e um nmero mpar de 1s; etc.
Calculemos agora as suas transies.
Estando em PP, at a leu um nmero par de 0s e um nmero par de 1s. Se aparece agora
um 0, fica um nmero mpar de zeros e um nmero par de 1s e por isso tem que transitar para
IP. Se pelo contrrio aparece um 1, fica um nmero mpar se 1s e um nmero par de zeros e
vai assim para PI. Podemos ento desenhar as arestas que partem de PP.
1

Figura 2.3.7. Transies a partir


de PP

PP

PI

IP

II
0

Se o DFA est em PI (par 0s mpar 1s) , se l 1 passa a PP e se l 0 passa a II.


1

PP

PI
1

Figura 2.3.8. Transies a partir


de PI
IP

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

II

63

Teoria da Computao

Captulo 2 . Autmatos Finitos

agora fcil de ver que o autmato completo representado pelo grafo seguinte. O estado
inicial (zero 0s e zero 1s) PP porque zero um nmero par.
1

PP

PI
1

0
1
IP

II

Figura 2.3.9. Grafo completo do


exemplo 2.3.2.

Exemplo 2.3.3. Desenhar o autmato aceitador da linguagem composta por todas as cadeias
com um nmero mpar de 0s e um nmero mpar de 1s.
Se quisermos o DFA que aceita as cadeias com um nmero impar de 0s e um nmero
par de 1s (IP), basta mudar o estado aceitado no autmato anterior, obtendo-se
1

PP

PI
1

0
1

Figura 2.3.10. Grafo completo


do exemplo 2.3.3.

IP

II
1

E juntando as duas condies, mpar-mpar ou mpar-par, obtm-se o autmato com dois


estados finais:

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

64

Teoria da Computao

Captulo 2 . Autmatos Finitos

PP

PI
1

0
1

Figura 2.3.11. Grafo do DFA


aceitador de II ou de IP

IP

II
1

Exemplo 2.2.3. Contagem de sequncias (corridas) de caracteres.


Desenhe-se um DFA que em ={a,b} aceite todas as cadeias que tenham corridas de trs ou
mais as. Uma corrida de trs aaa. No caso aaaa temos uma corrida de 4.Portanto
baabbaaababab, bbbbbbabababaaaaabab, pertencem linguagem, mas baabaababbabbbb,
aabbbbbaabbabbbaab, no pertencem.

A questo aqui mais complicada do que a simples paridade. O autmato tem que ser
capaz de contar uma corrida de trs as : zero, um, dois, trs. Como pode contar ? Tem que ter
memria para isso (contar tem memria implcita). A memria de um DFA s existe nos
estados, e por isso para contar at trs so precisos quatro estados a que chamaremos 0, 1, 2 e
3. O nmero do estado o nmero de as seguidos contados at a.

Figura 2.3.12. Como contar 3 as.


Sero estes quatro estados suficientes? o que vamos ver.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

65

Teoria da Computao

Captulo 2 . Autmatos Finitos

Se depois de 3 as vier um quarto, a cadeia continua aceite. De facto depois da corrida


de trs as a cadeia aceite independentemente do que acontecer a partir da, venham mais as
ou mais bs. Por isso pode-se colocar uma aresta do estado 3 para si mesmo com a ou com b.
Por outro lado, se a cadeia comea por b, bb, bbb, o autmato conta sempre zero as e
por isso existe uma aresta de 0 para 0 com b. Temos para j a Fig. 2.3.13.
a,b

Figura 2.3.13.
E o autmato j vai tomando forma.
E se aparece bab?
Interessam-nos as corridas de as. Se aparece um a temos uma corrida de um a, mas se
de seguida aparece um b ele anula a corrida, obrigando ao reincio da contagem. Quer isso
dizer que do estado 1 se volta ao estado 0 se aparecer um b na entrada.
Se aparece baab este ltimo b obriga de igual modo ao reincio da contagem. Teremos
portanto completo o grafo do autmato na Fig. 2.3.14.

a,b

b
b
Figura 2.3.14. DFA que conta corridas de 3 ou mais as.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

66

Teoria da Computao

Captulo 2 . Autmatos Finitos

Fica o leitor desafiado a encontrar uma qualquer cadeia com uma corrida de trs as que
no seja aceite por este autmato.
Se em vez de uma corrida de trs tivssemos uma corrida de quatro ou cinco, o autmato
teria uma forma semelhante, com cinco ou seis estados, respectivamente.
Se em vez de corridas de as quisssemos corridas de b, bastaria trocar os as pelos bs e
os bs pelos as nas arestas do grafo.
a,b

a
a

Figura 2.3.15. DFA aceitador das cadeias com corridas de quatro ou mais bs.
Exemplo 2.3.4.
Desenhar o autmato que aceita no mesmo alfabeto {a, b} qualquer cadeia que tenha uma
corrida de trs as ou uma corrida de trs bs.
A situao aqui complicou-se um pouco. Vejamos o problema por partes.
Para corridas de trs as, sabemos como fazer. No autmato respectivo, quando surge
um b, reinicia-se a contagem com retorno ao estado 0. Mas agora quando aparece um b duas
coisas tm que acontecer: por um lado a anulao da contagem de as e por outro lado o incio
da contagem de bs.
Para corridas de trs bs tambm sabemos como fazer. E de modo anlogo, quando
aparece um a por um lado anula-se a contagem de bs e por outro lado inicia-se a contagem de
as.
Para iniciar, cria-se um estado inicial 0. Se aparece um a, inicia-se a contagem de as, se
for um b, inicia-se a contagem de bs, como na Fig.2.3.16. Os nomes dos estados foram
alterados para os relacionar com a sua funo: chega a 2a depois de uma corrida de dois as e
chega a 2b depois de uma corrida de dois bs.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

67

Captulo 2 a,b
. Autmatos Finitos

Teoria da Computao

1a

2a

3a

a
0

a,b
b
b

1b

2b

3b

Figura 2.3.16. A caminho


da soluo do exemplo
2.3.4

Agora vamos corrida de as e quando aparece l um b transita-se para o estado


correspondente a um b, ou seja, 1b.

a,b

1a

2a

3a

a
b

a,b

Figura 2.3.17. A caminho


da soluo do exemplo
2.3.4

b
b

1b

2b

3b

Finalmente, na corrida de bs procede-se de modo semelhante quando aparece um a e obtmse o autmato da Fig. 2.3.18 que completa a resoluo do exemplo.

1a

2a

ab

3a

a
a
a

ab

b
1b

2b

3b

Figura 2.3. 18. Autmato completo do exemplo 2.3.4: aceita corridas de trs ou mais as ou
corridas de trs ou mais bs
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

68

Teoria da Computao

Captulo 2 . Autmatos Finitos

Exemplo 2.2.4 Deteco de uma sub cadeia de caracteres


Pretende-se um autmato que aceite todas as cadeias no alfabeto {0,1} que contenham a sub
cadeia 001.
Por exemplo 10010, 010010, 1010101010001111 pertencem a esta linguagem; mas
11010100 e 0101010 no pertencem.
A primeira tarefa determinar quais os estados que o autmato deve ter. Ele tem que
reconhecer 001. Pode ainda no ter encontrado nenhum dos caracteres da sequncia, ou pode
j ter encontrado um, dois ou os trs. So por isso necessrios pelo menos quatro estados.
Chamem-se Nada, 0, 00, 001. O Nada ser o estado inicial.
Iniciado, se l um 1 isso no lhe interessa e deixa-se ficar. Se l um 0, ento pode ser o
primeiro da sequncia procurada e por isso transita para o estado de j ter lido um 0; o estado
0. Se de seguida lhe aparece um outro 0, est no bom caminho e transita para o estado 00.
Mas se em vez do 0 lhe aparece um 1, ento no leu um nmero suficiente de zeros e tem que
reiniciar o escrutnio, voltando assim ao estado inicial. Estamos na Fig. 2.3.19
1
0

Ini

00

Figura 2.3.19.Incio da resoluo do


exemplo 2.2.4.

1
Estando em 00 se aparece 1 ento apareceu 001 e a cadeia deve ser desde j aceite,
independentemente do que acontecer depois, transitando por isso para o estado aceitador
001 e no saindo de l mais. Este ltimo requisito alcana-se colocando uma aresta de
001 para si mesmo, seja com 0 seja com 1.
0, 1
1

Ini

LEI/DEI/FCTUC/2009/@ADC

00

001

Figura 2.3.20. DFA que reconhece a sub-cadeia 001.

Documento de trabalho

69

Teoria da Computao

Captulo 2 . Autmatos Finitos

Contagem em mdulo n.
A contagem em mdulo n uma contagem de nmeros inteiros cclica que se inicia em zero
e volta a zero n passos frente.
Por exemplo a contagem mdulo 3 0, 1, 2, 0, 1, 2, . A tabela seguinte ilustra a
contagem em mdulo para nmeros inteiros positivos e negativos.
Tabela 2.3.1 . Contagem em mdulo.
N

Contagem dos nmeros inteiros positivos e negativos


-10

-9

-8

-7

-6

-5

-4

-3

-2

-1

o 7

10

12

10

11

10

M 2

10

d 5
u
l

Exemplo 2.2.5. Desenhar um autmato que seja capaz de contar em mdulo 2.


Sem perda de generalidade consideraremos apenas os nmeros positivos. Os nmeros a
contar so codificados em binrio, ={0, 1}, ou seja, teremos a Tabela 2.3.2.
Tabela 2.3.2 Contagem em mdulo 2
N

Cdigo 0000
Mod2

0001

0010

0011

0100

0101

0110

0111

1000

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

10

1001 10010
1

70

Teoria da Computao

Captulo 2 . Autmatos Finitos

A contagem em mdulo dois tem dois resultados possveis: 0 ou 1. Por isso o autmato
s necessita de dois estados, o 0 (para contar 0) e o 1 (para contar 1). O nmero a contar est
codificado em binrio, iniciando-se a sua leitura da esquerda para a direita: o DFA l, por
exemplo, 10101111 pela ordem 1-0-1-0-1-1-1-1. Isto quer dizer que o LSB (Least Significant
Bit) o lido mais direita, e s conhecido no fim da leitura. O DFA conta com qualquer
nmero de bits: s quando a cadeia acaba se conhece o seu tamanho.
Inicialmente est no estado 0. Se aparece um 0, mantm-se no estado 0; se aparece um 1,
conta 1 e por isso vai para o estado 1.
0
Figura 2.3.21. Incio da
construo do DFA contador em
mdulo 2

1
0

Estando no estado 1, se aparece um 0 (leu at agora 10, modulo 2 d 0), transita para o
estado 0. Se aparece um 1 (leu at agora 11=3, modulo 2 d 1) mantm-se no estado 1.

0
Figura 2.3.22. Continuao da
construo do DFA contador em
mdulo 2

1
1

Estando no estado 0 depois de ler 10: se aparece 1 (101=5, mod2(5)=1) vai para o estado
1; se aparece 0 (100=4, mod2(4)=0), mantm-se no estado 0.
Estando no estado 1 depois de ler 11: se aparece 0 (110) vai para o estado 0), se aparece
1 (111) mantm-se no estado 1.
Para que o DFA esteja completo, falta definir o estado aceitador, que depende da
linguagem especificada:
- se forem as cadeias que em mdulo 2 dem zero, o estado final ser o estado 0
- se forem as cadeias que em mdulo 2 dem um, o estado final ser o estado 1. Neste
caso teremos a Fig. 2.3.23.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

71

Teoria da Computao

Captulo 2 . Autmatos Finitos

1
1

1
0

Figura 2.3.23. DFA da linguagem L(M)={w{0,1}* : mod2(w)=1}

Exemplo 2.2.6. Desenhar o DFA capaz de contar os nmeros inteiros (no negativos)
correctamente em mdulo 4.
A contagem mdulo 4 tem quatro valores possveis: 0, 1, 2, 3. Quatro estados sero em
princpio suficientes. O nome do estado o valor da contagem que lhe corresponde. A leitura
da cadeia feita da esquerda para a direita.
No incio temos o estado inicial 0.
Aparece 0, mantm-se no estado 0; aparece 1, vai para o estado 1.
Estando no estado 1 (depois de ler 1): aparece 0 (10) vai para o estado 2, aparece 1 (11)
vai para o estado 3.
0
1
0

Figura 2.3.24. Construo do


DFA contador em mdulo 4.

Estando no estado 2 (depois de ler 10): aparece 0 ( 100) vai para o estado 0, aparece 1
(101=5, mod4(5)=1) vai para o estado 1.
Estando no estado 3 (depois de ler 11): aparece 0 (110=6, mod4(6)=2) vai para o estado
2, aparece 1 (111=7, mod4(7)=3) vai para o estado 3.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

72

Teoria da Computao

Captulo 2 . Autmatos Finitos

0
0

1
1
0

0
2

Figura 2.3.25. DFA contador em mdulo 4.

Se continuarmos veremos que o autmato no se engana. O estado final ser


determinado pela linguagem requerida. Se for por exemplo 2, ela ser composta pelas cadeias
(binrias, em que o LSB o primeiro direita) que valem 2 em mdulo 4.
curioso verificarmos esta periodicidade, quando a cadeia binria lida da direita para
a esquerda. E se fosse lida da esquerda para a direita ?

Exemplo 2.2.7. Contagem mdulo 7


Neste caso precisaremos de um autmato com 7 estados 0,1,2,3,4,5,6,7, sendo 0 o estado
inicial.
Estando em 0: se aparece 0 mantm-se em zero, se aparece 1 vai para 1.
Estando em 1 (lido 1): com 0 (10) vai para 2, com 1 (11) vai para 3.
Estando em 2 (lido 10): com 0 (100) vai para 4, com 1 (101) vai para 5.
0
1

0
1

1
1

Figura 2.3.26. Construo do


DFA contador em mdulo 7.

4
5

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

73

Teoria da Computao

Captulo 2 . Autmatos Finitos

Continuando,
Estando em 3 (lido 11): com 0 (110) vai para 6, com 1 (111) vai para 0.
Estando em 4 (lido 100): com 0 (1000=8, 8mod7=1) vai para 1, com 1 (1001=9,
9mod7=2) vai para 2.
Estando em 5 (lido 101): com 0 (1010=10, 10mod7=3) vai para 3, com 1 (1011=11,
11mod7=4) vai para 4.
0
1

1
0

3
0
1

4
0
5

Falta apenas definir o que acontece no estado 6.


Estando em 6 (lido 110): com 0 (1100=12, 12mod7=5) vai para 5, com 1 (1101=13,
13mod7=6) vai para 6.
0
1

1
0

3
0

Figura 2.3.27. Continuao da


construo do DFA contador
em mdulo 7.

1
6

4
0

Testemos o DFA para :


1110101 =64+32+16+4+1=117 117mod7=5; d certo.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

74

Teoria da Computao

Captulo 2 . Autmatos Finitos

1010101011=512+128+32+8+2+1=683, 683mod7=4; confere.


Em resumo, numa boa estratgia de projecto de um DFA:
- A primeira e decisiva operao determinar quanto estados ter o DFA e qual a funo
de cada um.
- A etiqueta que atribumos a cada estado deve exprimir a funo do estado.
- Depois colocamo-nos dentro de cada estado e imaginamo-nos a ler a cadeia de entrada
e a imitar o DFA.

2.4. Linguagens regulares


Qualquer DFA reconhece uma linguagem. Tal afirmao fcil de provar: uma linguagem
um conjunto de cadeias. Um DFA aceita sempre alguma cadeia, mesmo que seja a cadeia
nula, como o caso do autmato seguinte, em ={a,b}:
a,b
a
1

b
Figura 2.4.1. DFA aceitador da linguagem L={}, s com a cadeia vazia.
E dada uma linguagem qualquer, definida por um conjunto de cadeias, existir sempre
um DFA, autmato finito determinstico, que a reconhea ? Nem sempre.
H uma famlia de linguagens em que tal acontece sempre: as linguagens regulares.
Uma linguagem L diz-se regular se e s se existir um DFA M que a reconhea, ou seja,
L=L(M)
A famlia das linguagens regulares composta por todas as linguagens que so aceites
por algum DFA.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

75

Teoria da Computao

Captulo 2 . Autmatos Finitos

E como se pode provar que uma linguagem regular? Por prova construtiva: se formos
capazes de construir um autmato que a reconhea, ento ela regular. E se no formos
capazes? Aqui que a porca torce o rabo, pois pode ser por falta de percia nossa. Mas
tambm pode ser porque impossvel (o que acontece se a linguagem for no regular).

Exerccios de construo de DFAs.


1. Construir um DFA que aceite a linguagem L em = {0, 1} tal que
(a) L contm apenas 010 e 1.
(b) L o conjunto de todas as cadeias que terminam com 00.
(c) L o conjunto de todas as cadeias sem 1s consecutivos nem 0s consecutivos.
2. Desenhar o DFA que aceita todas as cadeias em {0,1}, com excepo das que contm 010:
0111101100 , 0000, 1011000 L(M)
10101000, 111100010 L(M)
3. Desenhar o grafo do DFA que aceite as cadeias binrias que valem 5 em mdulo 6.

2.5. Autmatos finitos no-determinsticos


Um DFA sabe sempre o que fazer: o seu caminho est completamente definido no seu grafo,
nunca h qualquer situao em que o DFA exite, por poder escolher entre dois caminhos
alternativos, ou por no saber o que fazer.
Nem todos os autmatos assim so. Poderemos imaginar uma situao em que a partir
de um estado sejam possveis zero, uma ou mais transies com o mesmo smbolo do
alfabeto, isto , em que h caminhos alternativos (para a mesma situao na entrada). Quando
isso acontece o autmato deixa de ser determinstico. Diz-se autmato no-determinstico ou
indeterminstico.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

76

Teoria da Computao

Captulo 2 . Autmatos Finitos

Figura 2.5.1 Parte de um


autmato finito com dois
caminhos alternativos para
a mesma leitura na entrada.

Havendo caminhos alternativos pode haver, entre o estado inicial e o estado aceitador,
zero, um ou vrios caminhos. Pode aceitar uma cadeia seguindo um dado caminho e no
aceitar a mesma cadeia seguindo um outro caminho alternativo.
Como definir neste caso a condio de aceitao de uma cadeia?
Do modo seguinte: uma cadeia de entrada aceite se houver para ela (pelo menos) um
caminho que leve a um estado aceitador quando ela toda lida.
Definio 2.5.1: Um aceitador no-determinstico (NFANondeterministic Finite Accepter)
definido pelo quinteto
M= (Q, , , q0, F)
em que a funo de transio definida por

: Q ({}) 2Q
Os restantes membros do quinteto definem-se do mesmo modo que no caso do DFA.
Lendo com ateno a definio constatam-se as seguintes diferenas em relao ao DFA
(definio 2.2.1):
1- O contradomnio de a potncia 2Q do conjunto Q, e no Q, precisamente porque o
resultado de pode ser no limite um qualquer subconjunto de Q. A potncia 2Q de um
conjunto composta por todos os seus subconjuntos possveis, incluindo o vazio.
2- O conjunto (qi, a) pode ser vazio, significando que no h qualquer transio nesta
situao. No grafo no h uma aresta partindo de qi com o smbolo a. No obrigatrio que
exista uma aresta a partir de qi para cada um dos smbolos do alfabeto.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

77

Teoria da Computao

Captulo 2 . Autmatos Finitos

3- tambm pode ser argumento de , ou seja, pode dar-se uma transio sem consumir
um smbolo de entrada ( o mecanismo de leitura pode ficar parado em alguns movimentos).
No grafo do NFA pode existir uma ou mais arestas com o smbolo .
Os NFAs podem representar-se por grafos tal como o DFA. Os ns so os estados e as
arestas as transies. Por exemplo, a transio (q1, a) = {q2, q3} s pode existir num NFA,
dado que h dois caminhos alternativos: de q1 lendo a ou se transita para q2 ou se transita para
q3. Com um grafo ser
a
q1

q2

a
Figura 2.5.2. Grafo da transio
(q1, a) = {q2, q3}

q3

Num NFA pode dar-se uma transio com o carcter . Este facto parece estranho na
medida em que aceitar o nada numa primeira anlise parece at contrariar a prpria noo de
aceitao. Mas veremos a utilidade deste facto.
Consequncias da possibilidade de transio com
H algumas consequncias da possibilidade de transio com o que convm aqui referir.
1 - de um qualquer estado para ele mesmo pode-se sempre transitar com .
Suponhamos que estamos no estado qi depois de ler o prefixo aba da cadeia ababb.
Figura 2.5.3. Grafo (NFA) da transio
(qi, b) = qj

qi

qj

Lendo agora o carcter b o autmato transita par o estado qj.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

78

Teoria da Computao

Captulo 2 . Autmatos Finitos

Mas repare-se que a cadeia ababb a mesma que ababb ou que ababb ou que
ababb e por a alm. Como representar esse facto no grafo? Simplesmente colocando uma
transio do estado qi para ele mesmo.
O mesmo ir depois acontecer em qj . Por isso o grafo completo ter a forma da Fig.
2.5.4.

Figura 2.5.4. Grafo (NFA) da transio


(qi, b) = qj , com explicitao (em relao
ao da Fig. 2.5.3) das transies com .

qi

qj

Em qualquer NFA existe essa caracterstica: h uma transio com de um qualquer


estado para ele mesmo. Por ser sempre verdade, geralmente no se desenha, considerando-se
que a transio est l implicitamente.
Nunca esquecer no entanto que no caso de um DFA no h transies-.
2 Quando a transio- for uma alternativa a uma transio com um outro carcter, o
autmato escolhe comer um carcter ou no. Suponhamos, por exemplo, que um NFA
chega a um estado q1, da figura seguinte, e se lhe apresenta de seguida o carcter b. O NFA
tem dois caminhos alternativos: ou consome b e vai para q2, ou no consome b (consome
que est implcito na cadeia aabab, aabab) e vai para q3.
aabab
aabab

q2

q1

Figura 2.5.5.

q3

aabab
Havendo (por vezes tantas) escolhas, como se pode saber se uma cadeia aceite pelo
DFA? Se ele escolhe um caminho e no consegue chegar ao estado final conclui-se que no
aceita a cadeia? E se ele tivesse escolhido outro, aceitaria ou no? Teria que tentar todos os
caminhos alternativos possveis. Se encontrasse um que o levasse a um estado aceitador ento
aceitaria a cadeia.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

79

Teoria da Computao

Captulo 2 . Autmatos Finitos

A diferena entre uma computao determinstica (podendo terminar ou no num estado


aceitador) e uma computao no determinstica em que existe um caminho aceitador
ilustrada pela Figura 2.5.6 (de Sipser).

Computao
determinstica

Computao no
determinstica

aceita ou rejeita

aceita

Figura 2.5.6. Uma computao determinstica cria um caminho, enquanto que uma
computao no-determinstica cria uma rvore.
Na computao determinstica nunca h escolhas. A cadeia lida ou aceite ou no,
conforme o ltimo estado seja aceitador ou no. Na computao no determinstica cria-se
uma rvore, com sucessivas ramificaes sempre que haja uma escolha possvel. Se um dos
caminhos de uma computao terminar num estado aceitador, o NFA aceita a cadeia. Caso
nenhum caminho termine num estado aceitador, a cadeia rejeitada.
Uma cadeia aceite pela NFA se houver alguma sequncia de movimentos possveis
que coloquem o autmato num estado final (aceitador) no fim da cadeia. Caso contrrio
rejeitado.
H uma outra forma de concebermos uma computao no determinstica. Sempre que
h uma escolha possvel, o NFA replica-se uma vez por cada escolha, de modo que o nmero
de configuraes vai aumentado em cada ramificao da rvore supra. Cada configurao est
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

80

Teoria da Computao

Captulo 2 . Autmatos Finitos

no estado consequente da escolha feita e na sua entrada esto aos caracteres ainda no lidos.
Se um dos autmatos replicados est numa configurao tal que no pode transitar para
qualquer estado (seja com seja com um outro carcter), e se a leitura ainda no chegou ao
fim, ento esse autmato morre. Se no fim da computao houver algum autmato
sobrevivente e se pelo menos um deles estiver num estado aceitador, a cadeia aceite.

Funo de transio estendida *


Tal como no caso do DFA, tambm num NFA se pode introduzir o conceito de funo de
transio estendida *. Ela resulta da leitura de uma cadeia w que o seu segundo argumento
(em vez de um carcter),

* (qi, w) = Qj
sendo Qj o conjunto de todos os estados possveis do autmato que podem ser alcanados a
partir de qi e pela leitura de w. Isto * (qi, w) contm o estado qj se e s se existir um
caminho no grafo de transies desde qi at qj com etiqueta w, para todos os qi, qj Q e
w*, como na Fig. 2.5.7.

Figura 2.5.7.

qi

qj

Definio 2.5.2. Linguagem aceite por um NFA


A linguagem L aceite pelo NFA M = (Q, , , q0, F) definida como o conjunto de todas as
cadeias w que levem o autmato a um estado final aceitador, ou seja,
L(M) = {w* : *(q0, w) F }
i.e., composta por todas as cadeias w para as quais existe pelo menos um caminho
etiquetado w desde o vrtice inicial at algum vrtice final.
Exemplo 2.5.1 (Linz)
O autmato da Figura 2.5.8 no determinstico porque:

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

81

Teoria da Computao

Captulo 2 . Autmatos Finitos

- de q1 partem duas arestas etiquetadas por 0


- de q0 parte uma aresta etiquetada por
- de q2 no definida qualquer transio, (q2, 0) =
- existe sempre a transio (qi, ) = { qi}, para todo o i, mesmo se no desenhada.
0
0, 1

q0

q1

q2

Figura 2.5.8. Um aceitador no-determinstico


Se escrevermos todas as transies possveis, teremos:

(q0, 1) = {q1}
(q0, 0) =
(q1, 0) = {q0, q2}
(q1, 1) = {q2}
(q1, ) = {q1}
(q0, ) = { q0, q2}
(q2, 0) =
(q2, 1) =
(q2, ) = {q2}
O autmato aceita:
10, porque dos dois estados alcanados um final.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

82

Teoria da Computao

Captulo 2 . Autmatos Finitos

1010, 101010,
No aceita : 1, 11, 01,
A sua linguagem composta palas cadeias de potncias de 10, ou seja,
L(M) = { (10)n : n 0 }
E se aparece a cadeia 110 ?
Depois de ler 11 chega a q2. Como no est definida a transio (q2, 0), obtm-se uma
configurao morta (dead configuration), em que se transita para o estado vazio, .

Mais

formalmente

* (q0, 110)=.
Como no se pode atingir um estado final processando 110, esta cadeia no aceite pelo
NFA.
Exemplo 2.5.2.: (Linz).
Considere-se o autmato da Fig. 2.5.9, com o alfabeto ={a}. Ele no-determinstico
porque (i) no estado inicial h uma escolha possvel com o carcter a e (ii) no esto definidas
todas as transies possveis.
a

q1

q3

q2

q0
a

a
q5

q4
a

Figura 2.5.9. Exemplo 2.5.2


Qual a linguagem aceite pelo autmato?

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

83

Teoria da Computao

Captulo 2 . Autmatos Finitos

Pela parte de cima aceita a cadeia aaa e s essa.


Pela parte de baixo aceita aa, aaaa, aaaaaa, , a2n, n1
O conjunto das duas, ou seja a unio das duas, d a linguagem aceite pelo autmato
L(M) = {a3} {a2n: n1}
Se o NFA pode escolher, na prtica com o se constri? Para que servem?
Os NFA so construes matemticas que no passam disso: no se pode construir um
NFA para uma aplicao prtica. Pense-se por exemplo o que aconteceria a um autmato que
controlasse uma porta automtica se ele no fosse determinstico
No entanto tm uma grande utilidade em Teoria da Computao. Usam-se como um
ferramenta matemtica muito til para
- modelizar algoritmos em que tem que se fazer escolhas (search-and-backtracking, por
exemplo)
- definir linguagens compostas por conjuntos bastante diferentes (como no exemplo
anterior {a3}{a2n : n 1}.
- descrever de forma simples e concisa linguagens complicadas. Na definio de uma
gramtica pode existir um elemento de no-determinismo, como na produo
S aSb |
em qualquer ponto pode-se escolher a primeira ou a segunda produo. Podemos assim
especificar um grande nmero de cadeias usando apenas duas regras. Se quisermos construir
um autmato equivalente (estudaremos como num captulo posterior) ser mais fcil atravs
de um NFA.
- construir DFAs complicados. Como veremos de seguida no h nenhuma diferena
essencial entre NFAs e DFAs: dado um NFA possvel encontrar um DFA equivalente. Se
quisermos construir um DFA, poderemos numa primeira etapa construir um NFA, mais fcil
de desenhar, e depois obter, pela tcnica que estudaremos, um DFA equivalente.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

84

Teoria da Computao

Captulo 2 . Autmatos Finitos

2.6. Equivalncia entre autmatos (aceitadores) finitos determinsticos e


no-determinsticos
Como vamos ver, a partir de um qualquer NFA com um dado alfabeto pode-se obter um DFA
que aceita as mesmas cadeias e rejeita as mesmas cadeias no mesmo alfabeto. Diz-se que o
DFA equivalente ao NFA. Vejamos mais formalmente a definio de equivalncia entre
autmatos.
Definio 2.6.1. Aceitadores equivalentes : dois aceitadores M1 e M2 so equivalentes se
L(M1) = L(M2)
isto , se ambos aceitam a mesma linguagem.
Existem geralmente muitos aceitadores para uma dada linguagem, e por isso qualquer
DFA ou NFA tem muitos aceitadores equivalentes.
Os DFA podem-se considerar casos especiais de NFA, em que os caminhos possveis se
reduzem sempre a um. Por isso se uma linguagem aceite por um DFA ento existe um NFA
que tambm a aceita.
E o contrrio? Se uma linguagem aceite por um NFA, existir um DFA que a aceite?
Ser que o no-determinismo eliminou esta possibilidade ?
De facto no eliminou: se uma linguagem aceite por um NFA ento existe um DFA
que tambm a aceita.
Como encontr-lo ? Como converter um NFA num DFA ? Como transformar uma
situao de multi-escolha numa escolha nica ?
Um NFA pode escolher vrios caminhos. Depois de um NFA ler uma cadeia w, no se
sabe precisamente em que estado est, mas sabe-se apenas que est num estado entre um
conjunto Qw de estados possveis
Qw={qi, qj, ..., qk }.
Em contrapartida depois de um DFA ler a mesma cadeia tem que estar num estado bem
definido, qw.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

85

Teoria da Computao

Captulo 2 . Autmatos Finitos

Como encontrar uma correspondncia entre estas duas situaes?


Pode-se conceber um truque simples: cria-se um estado no DFA equivalente ao conjunto
Qw, isto , etiqueta-se, no DFA, um estado por Qw. Se isso for possvel temos o problema
resolvido.
Mas resultar isso num autmato finito? Qual o nmero mximo de estados do DFA que
se podem obter por este processo?
Se no NFA existem no total Q estados, o nmero mximo de estados que se podem obter
no DFA igual potncia de conjuntos de Q, isto 2|Q|, e portanto finito. No caso extremo de
total indeterminismo no NFA, o nmero de estados no DFA ser 2|Q|.Se tivermos 6 estados
no NFA teremos 26=64 estados no DFA ! Como geralmente o indeterminismo apenas
parcial, o DFA equivalente tem um nmero de estados substancialmente inferior.
Vejamos um exemplo.
Exemplo 2.6.1.
Construir um DFA que aceite a linguagem L composta pelas cadeias em ={0,1} que
contenham trs 0s seguidos ou trs 1s seguidos , como por exemplo
000, 111, 10100010, 00111101000.
A procura directa deste DFA pode tornar-se numa operao bastante complicada, mesmo
para um projectista experiente. relativamente fcil desenhar um DFA para o caso de 000, ou
para o caso de 111, mas no assim para ambos os casos simultaneamente. No entanto
usando o no determinismo a soluo surge de forma bastante simples.
Primeiro, poderemos desenhar o NFA que aceita as cadeias com 000. O NFA, vendo um
zero, decide uma de duas coisas: ele no o incio de 000 (e neste caso deixa-se ficar onde
est), ele o incio de 000 (e ento transita para o estado seguinte na corrida de trs zeros).
0,1

Ser ento:
1,0
0
q1

q2

qf

q0

Figura 2.6.1. Primeira parte do exemplo 2.6.1


LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

86

Teoria da Computao

Captulo 2 . Autmatos Finitos

Este NFA aceita todas as cadeias que contenham 000, e s essas. De facto:
- se uma cadeia contm 000, h sempre um caminho aceitador para ela. Por exemplo no
caso da cadeia 1001110110001101010 deixa-se ficar em q0 at ao nono carcter e depois
transita sucessivamente para q1, q2 e qf, ficando a at ao fim da cadeia.
- se uma cadeia no contm 000 no possvel chegar ao estado aceitador. Por exemplo
para a cadeia 1100101001, se o NFA transita com algum dos zeros para o estado q1, ele acaba
por morrer porque lhe aparece um 1 em q1 ou em q2 e no est a definida qualquer transio
com 1.
Se o autmato no tivesse a possibilidade de ficar em q0 com 0, avanaria sempre para
q1 quando lesse um 0 (por exemplo em 1010001). Mas se a seguir aparece 1, ele entra numa
configurao morta, dado que no h sada de q1 com 1, e por isso terminaria a computao
no aceitando a cadeia 1010001). Ora acontece que a sequncia 000 aparece mais frente e a
cadeia deveria ser aceite. O facto de poder esperar em q0, palpitando-lhe que aquele 0 no
ainda da sequncia pretendida, evita esta situao.
Segundo, desenhamos o NFA que aceita as cadeias com 111 (e s essas). Por razes
anlogas ele ser

0,1
0,1

qf
1

q0

1
q2

q1

Figura 2.6.2. Segunda parte do exemplo 2.6.1


Agora, para termos a possibilidade das duas situaes, basta-nos juntar os dois
autmatos, a partir do estado inicial comum, obtendo-se a Fig 2.6.3. O estado final aceitador
pode tambm ser comum (embora este facto no seja obrigatrio).
0,1
1,0
0

q2

q1
0

q3

q0

1
1
q4

1
q5

Figura 2.6.3. Exemplo 2.6.1.


completo
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

87

Teoria da Computao

Captulo 2 . Autmatos Finitos

E temos o NFA procurado.


Vamos agora procurar um DFA equivalente.
Para isso construa-se a tabela de transies:
Tabela 2.6.1. Transies da Fig. 2.6.3

q0

q0, q1

q0, q4

q1

q2

q2

q3

q3

q3

q3

q4

q5

q5

q3

A primeira dificuldade deriva do facto de algumas transies terem vrios estados


alternativos de chegada, que so por isso co-alcanveis. O significado dos estados definido
pelo projectista. Assim sendo, nada nos impede de criarmos estados no DFA que
correspondam a conjuntos de estado do NFA. E ser lgico que todos os estados do NFA coalcanveis pela mesma transio componham um estado do DFA alcanvel por essa mesma
transio, como na Fig. 2.6.4.
a

q1

q2

q1

q23

a
q3

a) no NFA

b) no DFA equivalente

Figura 2.6.4. Pormenor do clculo do DFA equivalente: dois estados q2 e q3 do NFA coalcanveis pela transio a produzem um s estado q23 no DFA equivalente.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

88

Teoria da Computao

Captulo 2 . Autmatos Finitos

Para definir as transies no DFA, etiquetem-se os seus estados com ndices agrupando
os ndices dos estados do NFA co-alcanveis pelas mesmas transies.
Na Fig. 2.6.3 de q0 com 0, pode-se ir ou para q0 ou para q1, ou seja para o conjunto {q0,
q1} Crie-se um estado equivalente a este conjunto. Vamos chamar-lhe q01 para sabermos a que
corresponde.
De q0 com 1, pode-se ir ou para q0 ou para q4, ou seja para o conjunto {q0, q4} Crie-se de
igual modo um estado equivalente a este conjunto, q04.
Estes estados q01 e q04 vo integrar o DFA. Temos que saber o que se passa neles quando
aparece 1 ou 0. Para isso colocamo-los na primeira coluna da tabela de transies, como
indicado na Tabela 2.6.2..
Tabela 2.6.2. Transies do DFA equivalente.

q0

{q0, q1} = q01

{q0, q4}= q04

q01
q04

Agora temos que imaginar o seguinte: se o DFA est em q01 e aparece 0, o que se
passar?
Sabemos que q01 corresponde do conjunto {q0, q1} do NFA. E portanto aquela pergunta
equivalente a: se o NFA est ou em q0 ou em q1 e aparece um 0, o que se passar?
Se est em q0 pode ir para q0 ou para q1. Se est em q1 pode ir para q2. Portanto estando
em {q0, q1} pode ir para {q0, q1, q2}. Crie-se por isso no DFA o estado q012.
E se o DFA est em q01 e aparece 1, o que se passar? Fazendo uma anlise semelhante
conclui-se que estar em q04. Neste caso h uma nuance que convm realar: se est em q1,
com 1 vai para o vazio, . Mas {, q0, q4}={q0, q4}.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

89

Teoria da Computao

Captulo 2 . Autmatos Finitos

Nesta segunda etapa surgiu o novo estado do DFA, q012, que deve ser colocado na
primeira coluna. q04 j l estava.
Tabela 2.6.3. Mais transies do DFA equivalente

q0

{q0, q1} = q01

{q0, q4}= q04

q01

{q0, q1, q2}= q012

{, q0, q4}=

q04
q012

E agora continua-se a anlise. De q04 com 0 para onde se vai? E com 1? E de q012?
Sempre que aparece um novo estado do DFA (v-se palas etiquetas) tem que se colocar
na primeira coluna na linha seguinte ainda no ocupada.
Termina-se quando s se obtm estados do DFA que j existem na 1 coluna.
Tabela 2.6.4. Todas as transies do DFA equivalente

q0

{q0, q1} = q01

{q0, q4}= q04

q01

{q0, q1, q2}= q012

{, q0, q4}= q04

q04

q01

q045

q012

q0123

q04

q045

q01

q0345

q0123

q0123

q034

q0345

q013

q0345

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

90

Teoria da Computao

Captulo 2 . Autmatos Finitos

q013

q0123

q034

q034

q013

q0345

Resta-nos identificar o(s) estado(s) aceitador(es) para termos o DFA completamente


definido. O NFA aceita uma cadeia quando existe pelo menos uma computao que leve a um
estado final.
Um autmato, seja DFA, seja NFA, pode ter vrios estados finais aceitadores.
Os estados do DFA, deduzido do NFA, correspondem a conjuntos de estados do NFA. Se
num desses conjuntos existir um estado aceitador (no NFA) ento quer dizer que o estado
correspondente do DFA tambm ser aceitador. De facto para se chegar a esse conjunto de
estados (no NFA), leu-se uma certa cadeia. Se um dos estados do conjunto aceitador, quer
dizer que depois de lida essa cadeia se chegou a um aceitador, e portanto a cadeia aceite
pelo NFA. Para que o DFA seja equivalente, tem tambm que a aceitar, e em consequncia o
novo estado criado no DFA correspondente ao conjunto de estados do DFA tem que ser
aceitador.
Portanto, neste exemplo, sero aceitadores no DFA todos os estado que contenham o
estado q3 do NFA, ou seja, q0123, q0345, q013, q034.
A partir da tabela de transies desenha-se o grafo do DFA:
0
0

q01
0

q012

q0123

q0

q034

0
1

q045

q04

q0345
q013

1
0
1

Figura 2.6.4. Autmato determinstico equivalente com vrios estados finais

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

91

Teoria da Computao

Captulo 2 . Autmatos Finitos

Depois de o autmato entrar num dos estados aceitadores, apenas pode transitar entre
estados aceitadores e por isso todos os estados aceitadores se podem fundir num s, como no
grafo seguinte. As etiquetas dos estados foram escolhidas de modo sugestivo, indicando como
se chega ao estado (qual ou quais os ltimos caracteres lidos). Excepto para o estado final,
que poderamos etiquetar por 000 ou por 111, ou por ambas.
0
0

00
0

1
0,1

F
0

1
1

11

Figura 2.6.5. Simplificao do grafo da Fig. 2.6.4, com um s estado final


Olhando agora com ateno para o grafo do DFA poderemos ver que ele est de acordo
com as orientaes que vimos para desenhar DFAs no pargrafo 2.3. As etiquetas dos estados
na Fig. 2.6.5 reflectem esse facto.
Exerccio 2.6.1. Calcular o DFA equivalente ao NFA da Figura 2.6.6.

0, 1

0
0, 1
1
0

Figura 2.6.6. Exerccio 2.6.1


Exemplo 2.6.2.
Desenhar o DFA que aceita em ={0,1} todas as cadeias que terminam em 10.
Em primeiro lugar desenha-se um NFA, por ser mais simples. Depois procura-se o DFA
equivalente.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

92

Teoria da Computao

Captulo 2 . Autmatos Finitos

O NFA est no estado inicial at que lhe palpita que vm a os dois ltimos caracteres e
que eles sero 10. Logo,
0,1
0
0

Figura 2.6.7. Exemplo 2.6.2


Vamos agora calcular a tabela de transies do DFA equivalente:
Tabela 2.6.5.Transioes da Fig. 2.6.7
Estado

01

01

03

01

03

0=0

0=0

actual

O DFA ter 3 estados, os que se obtm na primeira coluna da Tabela 2.6.5.


0

01
1

03
0,1

Figura 2.6.8. O DFA equivalente ao NFA da Fig. 2.6.7.


Exemplo 2.6.3.
Desenhar o DFA que aceita em ={0,1} todas as cadeias em que o 3 smbolo a contar do fim
1. Por exemplo1000101 pertence, mas no 010101011.
Por muito que tenhamos treinado a nossa arte de desenhar DFAs no fcil encontrar de
imediato uma soluo. No entanto no contexto no determinstico simples: imaginemos o

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

93

Teoria da Computao

Captulo 2 . Autmatos Finitos

NFA que est a ler a cadeia, no se move at que lhe palpita que o 1 que a vem o
antepenltimo carcter da cadeia e ento avana para o estado aceitador. Teremos ento o
seguinte NFA com trs estados, Fig. 2.6.9.

0,1

0, 1
0

0, 1

Figura 2.6.9. NFA do exemplo 2.6.3


Vamos agora calcular o DFA equivalente. Comeamos pela tabela de transies, usando
a tcnica descrita acima, nomeadamente quanto etiquetagem dos estados.
Tabela 2.6.6. Transies do NFA da Fig. 2.6.9.
0

01

01

02

012

02

03

013

012

023

0123

03

013

02

012

023

03

013

0123

023

0123

O DFA ter 9 estados e est desenhado na Fig.2.6.10.


Todos os estados que contenham 3 na sua etiqueta sero aceitadores.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

94

Teoria da Computao

Captulo 2 . Autmatos Finitos


0

0, 1

01

03

02

1
0
1

Figura 2.6.10. DFA equivalente


ao NFA da Fig. 2.6.3.

012

013

1
023

0
1
0

0123
1

No seria fcil desenhar directamente no contexto determinstico Compare-se a


simplicidade do NFA com a do DFA. Este caso evidencia de forma clara a utilidade dos
NFAs.
Ser possvel reduzir o nmero de estados aceitadores na Fig. 2.6.10 ?
Caso em que o NFA tem transies-
Se um NFA tem transies-, quando calculamos o DFA equivalente temos que ter
muito cuidado para no cometermos erros.
A figura seguinte representa parte de um NFA. A partir do estado 1 com a, onde
possvel chegar ? V-se imediatamente que ao estado 2. Mas existe tambm uma transio
de 1 para 3, e depois com a transita-se para 4. Portanto partindo de 1 com um simples a, que
o mesmo que a, pode-se chegar a 4. Mais ainda, de 4 para 5 transita-se com . Portanto de 1
at 5 tambm se pode ir com a=a. Por isso a partir de 1 com a chega-se a um elemento do
conjunto {2,3,4,5} e portanto na tabela de transio do DFA equivalente temos que criar o
estado q2345.

a
a

1
b
4

3
a

Figura 2.6.11. NFA com transies-.


LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

95

Teoria da Computao

Captulo 2 . Autmatos Finitos

Ao conjunto {2,3,4,5} chama-se o fecho-a (a-closure) do estado 1. Ao conjunto {1,3}


chama-se fecho- ( -closure), sendo composto por todos os estados que se podem alcanar
de 1 com (inclui naturalmente o prprio); pode ter um nmero qualquer de estados,
dependendo do caso, usando transies, at ao nmero total de estados do autmato. Na
tabela de transies, quando calcularmos o DFA equivalente, tem que se ter muita ateno
para com o fecho- de um estado quando estamos a calcular as transies do estado com os
caracteres do alfabeto. Se houver uma transio- a partir do estado inicial no NFA, ento o
estado inicial do DFA equivalente ser o estado composto pelo inicial do NFA mais o fecho-
do estado inicial do NFA.
Exemplo 2.6.4. Seja o autmato anterior com um estado 6 aceitador e uma transio-
do estado inicial para o estado 6, Fig. 2.6.12 . Calcule-se o DFA equivalente. A primeira
tarefa ser vermos qual o estado inicial do DFA. Como se vai de 1 para 6 aceitador com ,
quer isto dizer que o NFA aceita . Ora a nica forma de o DFA tambm aceitar fazendo o
seu estado inicial aceitador. O estado 3 do NFA pode ser alcanado sem consumir caracteres,
ele faz parte do fecho- de 1. Portanto o estado inicial do DFA ser 136 e ser por ele que
iniciaremos a construo da sua tabela de transies.
a

Tabela 2.6.6. Transies da Fig. 2.6.12.


a

1
b

Estado

136

245

245

45

46

45

46

46

46

b
b
6

Figura 2.6.12. Exemplo 2.6.4.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

96

Teoria da Computao

Captulo 2 . Autmatos Finitos

O DFA equivalente ter 7 estados, dos quais dois sero aceitadores: 136 e 46. Fica ao
cuidado do leitor o seu desenho e a identificao da linguagem que ele aceita.

2.7. Reduo do nmero de estados em Autmatos Finitos


Qualquer DFA define uma nica linguagem. Mas uma linguagem no define um nico DFA.
Para uma linguagem existem muitos possveis DFAs, isto , existem muitos DFAs
equivalentes, cujo nmero de estados pode ser bem diferente. Por razes de simplicidade,
importa obter o de menor nmero de estados. Por exemplo se quisermos programar um DFA,
o espao necessrio para computar proporcional ao nmero de estados. Por razes de
eficincia deve-se reduzir o nmero de estados ao mnimo possvel.
Vejamos alguns exemplos simples.
Exemplo 2.7.1
O autmato da Fig. 2.7.1 aceita todas as cadeias no seu alfabeto, porque todos os estados so
aceitadores.
a, b
q0

q1
a, b

Figura 2.7.1.
Ele tem um equivalente com um s estado:
a, b

q0

Figura 2.7.2. Autmato equivalente ao da Fig. 2.7.1

Exemplo 2.7.2.
No autmato DFA seguinte h estados a mais.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

97

Teoria da Computao

Captulo 2 . Autmatos Finitos

a
a
a

q1

q3

q0
q2

Figura 2.7.3. Exemplo 2.7.2.


Se se chega a q3 com b quer seja a partir de q1 quer seja a partir de q2, coloca-se a
possibilidade de fundir q1 com q2 no estado q12.

a
a
q0

a, b

q12

q3

Figura 2.7.4. DFA equivalente ao da Fig. 2.7.3.


Tm que se introduzir as transies que mantenham a equivalncia com o autmato
original.
No autmato seguinte, Fig. 2.7.2 tambm se podem eliminar alguns estados.

b
q1

q3

a, b

q0
a
b

q4

q2

a, b

b
a

Figura 2.7.5
Em primeiro lugar os dois estados finais podem-se fundir num s, dado que as transies
a partir deles so reflexivas (voltam a eles): seja ele q34.
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

98

Teoria da Computao

Captulo 2 . Autmatos Finitos

q1
b

q0
a
b

a, b

q34

q2
b
a

Figura 2.7.6. Simpificao do DFA da Fig. 2.7.5.


Em segundo lugar chega-se a q34 com b, quer de q1, quer de q2. Por outro lado de q1 com
a vai-se para q2 e de q2 com a vai-se para q2. Se fundirmos q1 e q2 em q12, mantendo essas
transies, o DFA resultante, Fig. 2.7.7 com apenas 3 estados, equivalente ao inicial.

q0

a, b

q12

q34

a, b

Figura 2.7.7. DFA final no exemplo 2.7.2


Este procedimento heurstico, baseado na nossa habilidade, pode formalizar-se num
algoritmo de minimizao do nmero de estados de um DFA. Para o seu desenvolvimento
vejamos algumas definies prvias.
Estados indistinguveis
Dois estados p e q dizem-se indistinguveis se:
- se a partir de um deles se chega a um estado aceitador com uma cadeia w , tambm se
chega a um estado aceitador a partir do outro com a mesma cadeia w, formalmente,

* (p,w) F * (q,w)F, para todas as cadeias w *.


e
- se a partir de um deles se chega a um estado no aceitador com uma cadeia x, tambm
se chega a um estado no aceitador a partir do outro com a mesma cadeia x:

* (p,x) F * (q,x)F, para todas as cadeias x *.


LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

99

Teoria da Computao

Captulo 2 . Autmatos Finitos

Num grafo teremos a seguinte situao:

q
w

Figura 2.7.8. Os estados p e q so indistinguveis.


Estados distinguveis por uma cadeia
Se existir uma cadeia w tal que de p se chegue a um estado aceitador e de q a um no
aceitador,

* (p,w) F * (q,w )F
ou tal que de p se chegue a um no aceitador e de q a um aceitador,

* (p,w) F * (q,w )F
ento os estados p e q so distinguveis pela cadeia w.
Dois estados ou so distinguveis ou so indistinguveis. A indistino tem as
propriedades de uma relao de equivalncia R:
1.p R p

(reflexiva)

2. p R q q R p

(simtrica)

3. p R q e q R r p R r

(transitiva)

Para reduzir a dimenso de um DFA, procuram-se os estados indistinguveis e


combinam-se entre si. A racionalidade desta operao evidente: se so indistinguveis para
que se ho-de ter l ambos?
O algoritmo divide-se em duas etapas:
- primeiro marcam-se os estados distinguveis,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

100

Teoria da Computao

Captulo 2 . Autmatos Finitos

- segundo, fundem-se os estados indistinguveis.


Procedimento de marcao dos estados distinguveis
1- Removem-se todos os estados inacessveis (limpeza do DFA). Pode fazer-se
enumerando todos os caminhos simples no grafo (caminhos sem ciclos fechados) que partem
do estado inicial. Um estado acessvel tem que estar num desses caminhos. Se um estado no
est em qualquer caminho, quer dizer que no se pode l chegar a partir do estado inicial, e
portanto inacessvel.
2 Consideram-se todos os pares de estados (p, q). Se p aceitador, pF, e se q no
aceitador, qF, ento o par (p, q) distinguvel. De facto que maior distino poderia haver
entre dois estados? Marcam-se todos esses pares como distinguveis. Marcam-se os pares, no
os estados individualmente. Um estado individual pode pertencer a um par distinguvel e ao
mesmo tempo a um par indistinguvel.
3 Considere-se um par de estados (p, q). Calculem-se as transies a partir deles para
todos os caracteres do alfabeto, tomados um de cada vez.
p

pa

qa

Figura 2.7.9. Transies de p e de q com a.


Se houver pelo menos um carcter a tal que o par (pa, qa) resultante dessas transies
seja distinguvel, ento o par (p, q) distinguvel.
Este procedimento faz-se para todos os pares de estados (p, q) em Q.
No fim todos os pares distinguveis esto marcados como tal. Ver a demonstrao por
exemplo em Linz, Teorema 2.3 (pg. 64). Note-se que a marcao para os pares, no para os
estados individualmente.
Depois de se fazer a marcao dos estados distinguveis, particiona-se o conjunto Q dos
estados do DFA num certo nmero de subconjuntos disjuntos Q1={qi,qj,, qk},
Q2={ql,qm,, qn} , , Qx={qo,qp,, qr} tais que
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

101

Teoria da Computao

Captulo 2 . Autmatos Finitos

- qualquer estado q pertence a um e s a um deles,


- os estados do mesmo subconjunto so indistinguveis entre si,
- qualquer par de estados, tal que um dos elementos pertence a um dos subconjuntos e
o outro pertence a outro, distinguvel.
Esta partio sempre possvel.
A partir desta partio aplica-se o procedimento seguinte.

Dado o DFA M=(Q,,,q0,F) calcula-se o equivalente M


= (Q, , , q0 , F ) por:
1 Para cada um dos conjuntos indistinguveis Q1, Q2, Qx cria-se um estado
equivalente etiquetado apropriadamente (a sua etiqueta o conjunto das etiquetas dos estados
do subconjunto, por exemplo para Q1 ser o estado equivalente qijk.)
2 No autmato original M considera-se a transio (qr, a)=qp do estado qr para o estado
qp. Procuram-se os dois subconjuntos a que pertencem qr e qp. Traa-se a transio a entre os
estados equivalentes a esses subconjuntos. Isto , se qr Q1={qi,qj,, qk},

e qp

Q2={ql,qm,, qn} ento desenhar no grafo a transio

(qij ...k , a) = qlm...n

3 O estado inicial de M , q 0 , o que contm a etiqueta 0 do autmato original.

4 O conjunto dos estados aceitadores de M , F , o conjunto de todos os estados em


cuja etiqueta entra um estado aceitador do DFA original.

Exemplo 2.7.3 .Minimizar o conjunto de estados do DFA da Figura 2.7.10.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

102

Teoria da Computao

Captulo 2 . Autmatos Finitos


a
4
a
b
2

5
b

a
6

b
a

b
a

b
7

Figura 2.7.10. DFA a minimizar.

1 Marcao dos estados distinguveis


Havendo um s estado final, ele distinguvel de todos os outros. Portanto qualquer par que o
contenha distinguvel.
Vamos agora considerar a segunda etapa: ver as transies de cada para com um a e com
um b. Obteremos as duas tabelas seguintes.
Tabela 2.7.1. Transies com a

Tabela 2.7.2 Transies com b


b

2,4 2,6 2,4 2,6 2,4 2,6

3,3

3,5 3,7 3,5

3,7 3,5 3,7

4,2

4,4 4,6 4,4 4,6 4,4 4,6

5,3

5,5 5,7 5,5

5,7 5,5 5,7

6,2

6,4 6,6 6,4 6,6 6,4 6,6

7,3

7,5 7,7 7,5

7,7 7,5 7,7

4,2

4,4 4,6 4,4 4,6 4,4 4,6

5,3

5,5 5,7 5,5

5,7 5,5 5,7

6,2

6,4 6,6 6,4 6,6 6,4 6,6

7,3

7,5 7,7 7,5

7,7 7,5 7,7

4,2

4,4 4,6 4,4 4,6 4,4 4,6

5,3

5,5 5,7 5,5

5,7 5,5 5,7

6,2

6,4 6,6 6,4 6,6 6,4 6,6

7,3

7,5 7,7 7,5

7,7 7,5 7,7

2,2

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

103

Teoria da Computao

Captulo 2 . Autmatos Finitos

Da 1 etapa, nestas duas tabelas todos os pares que contenham o estado 6 devem ser
marcados como distinguveis (colorido), dado que 6 o nico aceitador, excepto o par (6,6)
que indistinguvel.
Os pares que correspondem s clulas sombreadas sero agora marcados distinguveis.
Na tabela de transies com b marcam-se todos os distinguveis com a. Basta faz-lo na
metade superior (ou inferior) da tabela. Neste caso no h nenhum..
Ser o par (1,2) distinguvel ? (1,2) com a d (2,4), (2, 4) com a d (4, 4), nenhum
distinguvel; portanto no se marca. Vai-se ver tabela de b se o par (2,4) distinguvel.

Para o par (3,4): (3,4) com a d (6,4), j marcado e portanto (3,4) marca-se como
distinguvel.
O mesmo para todos os outros pares. Obtm-se a tabela seguinte, em que 1 identifica os
distinguveis.
Tabela 2.7.3. Estados distinguveis (1)e indistinguveis (0)
1

Agora particiona-se o conjunto dos estados em subconjuntos que obedeam s trs


condies acima enunciadas. No uma tarefa fcil.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

104

Teoria da Computao

Captulo 2 . Autmatos Finitos

O estado 6 s indistinguvel de si prprio, portanto tem que ficar isolado num


subconjunto.
Para os restantes desenhe-se o grafo da propriedade indistinguvel. Os vrtices do grafo
sero os estados. Entre dois estados existir uma aresta se eles pertencerem a um par
indistinguvel, isto , se na ltima tabela a respectiva clula tiver 0. No necessrio desenhar
a aresta reflexiva (do estado para ele mesmo).

Figura 2.7.11. Partio dos estados


bem visvel a formao de dois sub-grafos conexos : {1,2,4}, {3,5,7}.
A partio {1, 2, 4} {3, 5, 7} {6} verifica as condies. O DFA mnimo ter 3 estados.
b

a
124

357

b
6
a

Figura 2.7.12. o DFA mnimo equivalente ao da Fig. 2.7.10.


As linguagens dos dois autmatos, o original e o reduzido, so equivalentes. Para um
autmato com um elevado nmero de estados, este procedimento manual de inspeco para se
identificarem os pares distinguveis no fcil. No entanto este algoritmo pode programar-se.
Ele tambm conhecido pelo algoritmo de enchimento da tabela (table- filling algorithm, por
exemplo em Hopcroft p.156).

2.8 Um aplicao dos DFA: busca de texto (text search, Hopcroft, 68)
Os autmatos finitos encontram na busca de texto uma aplicao interessante. Como sabemos
a pesquisa de cadeias de caracteres uma das operaes mais executadas na web. Dado um

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

105

Teoria da Computao

Captulo 2 . Autmatos Finitos

conjunto de palavras, que poderemos chamar palavras chave, queremos encontrar todas as
ocorrncias delas num certo texto. Os autmatos finitos no determinsticos permitem faz-lo
de um modo expedito e simples. Para uma palavra chave, por exemplo chave, desenha-se um
autmato com:
- um estado inicial que transita para si prprio com todo e qualquer carcter do alfabeto,
- uma corrida de estados aos quais se chega depois de ler sucessivamente um carcter da
palavra chave

Figura 2.8.1. NFA para busca da palavra chave.


Para se implementar o NFA, pode-se escrever um programa que simula o seu
funcionamento, calculando os estados em que est aps ler um carcter. Sempre que h uma
escolha, faz-se uma ou vrias rplicas do NFA.
no entanto mais prtico calcular o DFA equivalente e ento simul-lo. Para isso aplica-se
a tcnica padro: constri-se a tabela de transies e desenha-se o grafo depois.
Se o alfabeto for composto pelos 26 caracteres do portugus (a b c d e f g h i j k l m n o p q
r s t u v w x y z), teremos muitas etiquetas para as arestas do autmato. Para simplificar a sua
escrita poderemos usar a notao -a-e querendo dizer todos os caracteres do alfabeto menos
a e e. Esta notao aceite pelo DEM (Deus Ex-Mquina).
Assim sendo, o DFA equivalente ao NFA da Fig. 2.8.1 tem o aspecto da Fig. 2.8.2. Fica ao
cuidado do leitor verificar, construtivamente, que assim .
-c

-c

Figura 2.8.2. DFA


equivalente ao NFA
da Fig. 2.8.1.

-v
-a
c

-h

-a
-e

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

106

Teoria da Computao

Captulo 2 . Autmatos Finitos

Exerccio 2.8.1
O seguinte NFA encontra num texto as palavras doce e mel. Desenhar o o DFA equivalente.
= { a, b, c, ...., z}.

Figura 2.8.3 NFA para


o exemplo 2.8.1.

m
5

6
e

Desenhar o DFA equivalente.


Exerccio 2.8.2.
Desenhar o DFA que aceita as palavras amarga e carta. = { a, b, c, ...., z}.
2.9 Autmatos finitos transdutores
Os DFA e NFA que estudmos at aqui so aceitadores e no tm sada. Apenas lem cadeias,
reconhecendo-as ou no como pertencentes a uma dada linguagem.
H outros tipos de autmatos, como vimos j no Cap. 1, que tm um registo de sada, cujo
contedo pode variar conforme a evoluo da configurao do autmato. So os transdutores,
de que se conhecem dois tipos: as mquinas de Mealy e de More. Ambos se podem enquadrar
no esquema geral que vimos no Cap. 1 e aqui se reproduz na Fig. 2.9.1

Ficheiro de entrada
S

Figura 2.9.1. Esquema


geral da um autmato
finito

Unidade de Controlo
qk

M
e
m

r
i
a

Ficheiro de sada
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

107

Teoria da Computao

Captulo 2 . Autmatos Finitos

2.9.1 Mquinas de Mealy


Numa mquina de Mealy a sada depende do estado interno do autmato actual e da entrada
actual
yk = f (sk, qk)
Definio 2.9.1 Mquina de Mealy.
Uma Mquina de Mealy definida pelo sexteto (agora h mais um msico )
M = (Q , ,, , , q0 )
em que
Q o conjunto finito de estados internos,

o alfabeto de entrada (conjunto finito de caracteres),


o alfabeto de sada (conjunto finito de caracteres),
: Q x Q a funo de transio de estado,
: Q x a funo de sada,
q0 Q o estado inicial
Comparando com a definio de autmato aceitador verificamos que no h aqui estados
aceitadores (F), mas h em contrapartida um alfabeto de sada e uma funo de sada.
Tal como nos aceitadores, tambm um transdutor representado por um grafo. A
etiquetagem dos estados e das arestas no entanto diferente. Numa mquina de Mealy usa-se
a notao da figura seguinte:

qi

1/0
Entrada/Sada

qj

Figura 2.9.2 Notao da Mquina de Mealy


Que tem a seguinte interpretao: estando a mquina no estado qi e lendo 1 na entrada,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

108

Teoria da Computao

Captulo 2 . Autmatos Finitos

- transita para o estado qj


- envia 0 para a sada.
1/1

Exemplo 2.9.1
Considere-se a mquina de Mealy da Fig.2.9.3
q1

Se lhe dermos a ler a cadeia 10111 ela faz:


- l 1 e escreve na sada transitando
para o estado q1,
- l 0, escreve 1, passando a q2
- l 1, escreve 0, passa a q1,
- l 1, escreve 1, mantm-se em q1,
- l 1, escreve 1, mantm-se em q1

1/
0/1

1/0

q0
0/

No fim da leitura est em q1 e escreveu na


sada 1011.

q2

0/0

Figura 2.9.3. Mquina de Mealy do exemplo 2.9.1.


Isto , deslocou a cadeia para a direita uma casa (shift right).
As mquinas de Mealy podem implementar-se por circuitos lgicos, e funcionam em modo
assncrono: logo que a entrada variar pode variar a sada.

Figura 2..9.4. Esquema geral de uma mquina de Mealy.


( em http://www2.ele.ufes.br/~ailson/digital2/cld/chapter8/chapter08.doc4.html)

2.9.2. Mquinas de Moore


As mquinas de Moore distinguem-se das de Mealy pelo facto de a sua sada depender apenas
do estado actual
yk = f (qk)

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

109

Teoria da Computao

Captulo 2 . Autmatos Finitos

isto , no dependem da entrada actual.


Definio 2.9.2. Mquina de Moore.
Uma Mquina de Moore definida pelo sexteto
M = (Q , ,, , , q0 )
Sendo
Q o conjunto finito de estados internos,

o alfabeto de entrada (conjunto finito de caracteres),


o alfabeto de sada (conjunto finito de caracteres),
: Q x Q a funo de transio de estado,
: Q a funo de sada,
q0 Q o estado inicial.
No seu grafo usa-se a notao

Estado/Sada
1
qi /1

qj /0

Entrada

Figura 2.9.5.Notao das Mquinas de Moore.


significando que quando entra no estado qi escreve 1 na sada, depois com 1 na entrada
transita para qj e escreva 0 na sada.
Exemplo 2.9.2
A Mquina de Moore da Fig. 2.9.6 faz, tal como a anterior, o deslocamento direita da
entrada que se lhe fornece.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

110

Teoria da Computao

Captulo 2 . Autmatos Finitos

D-se-lhe 1110101, estando no estado 0


3/1

- l 1, passa a 1 escreve
- l 1, passa a 3, escreve 1
- l 1, mantm 3, escreve 1
- l 0, passa a 4, escreve 1
- l 1, passa a 5, escreve 0
- l 0, passa a 4, escreve 1
- l 1, passa a 5, escreve 0

0
1/

4/1
0

0/

5/0

2/

1
0

Portanto escreveu 111010.

Figura 2.9.6

6/0

A mquina de Moore escreve na sada logo aps transitar de estado. Por isso a sua
implementao por hardware faz-se com ilustrado na figura seguinte. Trata-se de uma
mquina sncrona (as mudanas na sada so sincronizadas com as mudanas de estado).

Figura 2.9.7. Esquema geral da Mquina de Moore (de


http://www2.ele.ufes.br/~ailson/digital2/cld/chapter8/chapter08.doc4.html).

Estes dois exemplos indiciam que existe equivalncia entre as mquinas de Mealy e de
Moore: dada uma mquina de Mealy possvel encontrar uma mquina de Moore que, para as
mesmas entradas, d as mesmas sadas. E vice-versa. (Ignorando a sada do estado inicial na
mquina de Moore).
A de Moore equivalente tem em geral um maior nmero de estados.
As mquinas de Mealy e de Moore so os cavalos de batalha no projecto de circuitos
lgicos complexos. Existe at software que simula estas mquinas e gera o circuito lgico a
partir do autmato desenhado com um grafo (ver por ex.
http://www.seas.upenn.edu/~ee201/foundation/foundation_impl4.html ou
http://www.xilinx.com/univ/xse42.html ).

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

111

Teoria da Computao

Captulo 2 . Autmatos Finitos

Bibliografia.
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
G. H. Mealy, A Method for Synthesizing Sequential Circuits, Bell System Tech. J. vol 34, pp.
10451079, Sept 1955.
Apndice . O software JFLAP (livre) para desenho e simulao de autmatos.
http://www.cs.duke.edu/csed/jflap

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

112

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Captulo 2 . Autmatos Finitos

Documento de trabalho

113

Teoria da Computao

Captulo 2 . Autmatos Finitos

Livre: This work is licensed under a Creative Commons Attribution-NonCommercialShareAlike 2.5 License.
Tem vrias outras funcionalidades muito teis em captulos posteriores (equivalncia de
autmatos, gramticas, etc.).
O software DEM- Deus Ex-Maquina (tambm para a simulao de autmatos) est
disponvel na pgina da cadeira.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

114

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

CAPTULO 3

EXPRESSES REGULARES, LINGUAGENS REGULARES E


GRAMTICAS REGULARES

3.1 Introduo

117

3.2 Expresses Regulares

117

3.3 Regras algbricas para expresses regulares

126

3.4 Relao entre expresses regulares e linguagens regulares

130

3.5 Gramticas regulares

140

3.6 Sntese das equivalncias

151

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

115

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Cap. 3 Expresses regulares, linguagens e gramticas

Documento de trabalho

116

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.1. Introduo
Vimos que uma linguagem regular se for aceite por um DFA ou um NFA. Poderemos assim
representar uma linguagem pelo seu autmato. Se o autmato tiver um elevado nmero de
estados, no possvel, por simples inspeco visual, ver qual a sua linguagem. Interessa por
isso uma forma mais simples de representar uma linguagem regular, que seja de utilizao
expedita, de modo anlogo ao de uma frmula qumica de uma substncia: olhando para ela
extrai-se logo uma grande quantidade de informao sobre a sua natureza.
esse o objectivo das expresses regulares: so formas simples, expeditas, com muita
informao, de representar linguagens regulares.
Mas se assim , e se a uma expresso regular corresponde sempre uma linguagem
regular, para uma expresso regular h-de haver um autmato finito que represente a mesma
linguagem, dado que toda a linguagem regular tem o seu DFA ou NFA.
H portanto uma estreita relao entre expresses regulares e linguagens regulares.
Estud-la-emos neste captulo.
J vimos que uma linguagem pode ser definida por uma gramtica. Dada uma linguagem
regular, pode interessar conhecer uma gramtica que a gere, e neste caso diz-se gramtica
regular. E sempre possvel encontr-la, com recurso aos autmatos finitos. Autmatos
finitos, gramticas regulares, expresses regulares, so trs formas de representar o mesmo
conjunto: uma certa linguagem regular. Estudaremos neste captulo a forma como essas trs
representaes se relacionam.

3.2. Expresses regulares


Uma expresso regular uma forma de descrever linguagens regulares. So expresses com
smbolos de um dado alfabeto e caracteres operadores sobre as cadeias, isto , so expresses
algbricas. Dado um alfabeto , uma expresso regular desenvolvida a partir de
-

os smbolos do alfabeto

os operadores de

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

117

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

unio : ou +

concatenao:

fecho-estrela : *

de parnteses

Exemplo 3.2.1.
Consideremos o alfabeto ={a, b, c, ..., z}.
Nele a linguagem finita L = {a} definida pela expresso regular : a
A linguagem L = {a, b, c }, definida pela expresso regular: abc ou a+b+c. O
operador unio em conjuntos corresponde ao operador adio nas expresses regulares.
Muitas linguagens so infinitas e no se podem por isso escrever por enumerao
explcita. A linguagem definida pela expresso regular (a+bc)* uma linguagem infinita
devido ao fecho-estrela. Por definio de *, teremos
L= {(a+bc)0 (a+bc)1 (a+bc)2 (a+bc)3

= {, a+b.c, (a+bc)(a+b.c), (a+bc)(a+b.c)(a+b.c), }


= {, a, bc, aa, abc, bca, bcbc, aaa, aabc, abcbc, abca, bcbcbc, }
No alfabeto = {a, b, c} a linguagem (a + b)* composta pelas cadeias cadeias , a,
b, aa, bb, ab, ba, aaa, abbaa, bbbaabab, .Qualquer cadeia que contenha s as e bs pode
ser obtida desta expresso regular. Como obter ababaa ? Fica o desafio ao leitor.
No mesmo alfabeto a linguagem a*b* composta pelas cadeias an bm , n,m 0 ou seja

, a,b, aab, aabb, abb, bbb, aabbbb,...


Finalmente, ainda no mesmo alfabeto, a linguagem (c+) contm apenas a cadeia c.
As expresses regulares so formas sintticas de exprimirmos as operaes sobre
cadeias que estudmos no Cap. 1. So como que expresses algbricas num dado alfabeto. No
entanto poderemos defini-las formalmente.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

118

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.2.1. Definio formal, recursiva, de expresso regular


Uma definio por recursividade usa como sabemos um conjunto de primitivas e uma
recurso. Assim tambm para as expresses regulares:
Definio 3.2.1. Seja um um dado alfabeto. Ento:
1. As expresses regulares primitivas so compostas por zero ou um carcter:

, e a (para a ) so todas expresses regulares primitivas


2. Recurso: indica como se obtm expresses regulares a partir umas das outras:
Se r1 e r2 so expresses regulares, tambm o sero
2.1 r1+r2,

(soma de duas expresses regulares)

2.2 r1r2,

(concatenao de duas expresses regulares)

2.3 r1* , r2*

(fecho-estrela de uma expresso regular)

2.4 (r1), (r2)

(parntese de uma expresso)

3. Uma cadeia uma expresso regular se e s se ela puder ser derivada a partir das
expresses regulares primitivas e pela aplicao de um nmero finito de vezes das
regras de 2 (princpio da recursividade)
Exemplo 3.2.2
Seja o alfabeto ={0,1}
A expresso regular seguinte define a linguagem indicada
01* = {0, 01, 011, 0111,}, 0 concatenado com um nmero arbitrrio de 1s.
Se concatenarmos toda e qualquer cadeia desta linguagem com 01 obtm-se
(01*)(01) = {001, 0101, 01101, 011101, ..}
Por outro lado

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

119

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

(0+1)* = {0, 1, 00, 01, 10, 11, ..}, i.e., toda e qualquer as cadeias com 0 e 1.
Analisemos agora a expresso regular
(0+1)*00(0+1)*
esquerda temos (0+1)*, qualquer cadeia de 0s e 1s. direita temos a mesma coisa.
Mas no centro temos o par 00. Quer dizer que esta expresso regular representa qualquer
cadeia que contenha o par 00 precedido por qualquer nmero de 0s e 1s e seguido de
qualquer nmero de 0s e 1s, ou seja,
{00, 1001, 00110, 10100, 010101000111000..},
i.e., todas as cadeias de 0 e 1 contendo 00 em qualquer posio. O par 00 tem que aparecer
uma vez, mas pode aparecer alm disso qualquer nmero de vezes.
Exemplo 3.2.3
No alfabeto = {a,b,c}, ser (a+bc)*(c+) uma expresso regular ?
Para responder temos que ver se ela se pode obter a partir das expresses regulares
primitivas por uma recurso:
Os smbolos a,b,c, so expresses regulares primitivas.
b.c uma expresso regular (er) , do item 2.2. da definio,
a+b.c uma er, do item 2.1 da definio,
(a+b.c) uma er, do item 2.4 da definio,
(a+b.c)* uma er, do item 2.3 da definio,
(c+) uma er, dos itens 2.1 e 2.4 da definio,
(a+bc)*(c+) uma er do item 2.2 da definio.

q.e.d

E (a + c + ) expresso regular ?
a , c so er primitivas

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

120

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

a+c uma er
a+c+ no er, logo (a+c+) no expresso regular.
Exemplo 3.2.4.
Seja a expresso regular (1+10)*. Que linguagem define ?
Pela definio de fecho-estrela teremos sucessivamente:
(1+10)*= (1+10)0 (1+10) (1+10)2 (1+10)3
= (1+10) (1+10) (1+10) (1+10) (1+10) (1+10)
= {,1+10, (1+10) (1+10) , (1+10) (1+10) (1+10) , }
= {,1+10, 11,110,101,1010, (11+110+101+1010)(1+10), }
= {,1+10, 11,110,101,1010, 111,1110,1101,11010, 1011,10110,10101,101010,}
Qual a caracterstica comum a todas estas cadeias?
Elas comeam todas por 1 e podem ter um nmero arbitrrio de 1s seguidos. Os 0s so
introduzidos pela parcela 10 quando esta potenciada. Mas sendo potenciada, introduz 10,
1010, 101010, , ou seja, quando introduz um zero mete sempre 1 antes, e por isso no
possvel introduzir dois zeros seguidos. O facto de ambas as parcelas da soma se iniciarem
por 1 faz com que todas as suas concatenaes possveis se iniciem por 1. Poderemos concluir
que a linguagem composta por todas as cadeias em {0,1} que se iniciam por 1 e no tm
qualquer par de zeros.
Exemplo 3.2.5
E no caso (0+1)*011 ?

A primeira parte (0+1)* produz todas as cadeias. A segunda parte, 011, concatena o
sufixo 011 a todas as cadeias da primeira parte. Portanto temos a linguagem de todas as
cadeias em {0,1} que terminam em 011.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

121

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Exemplo 3.2.6. Para 0*1*:


Teremos um nmero arbitrrio de 0s (de 0*) seguido de um nmero arbitrrio de 1s (de 1*).
Podemos resumir dizendo que a linguagem de todas as cadeias que no tm um 0 depois
de 1.
Exemplo 3.2.7. Seja agora 00*11*.
Esta obteve-se da anterior colocando um 0 obrigatrio no incio, e um 1 obrigatrio no meio.
Portanto tem pelo menos um 0 e um 1.Alm disso no aparece qualquer 0 depois de 1.A
linguagem portanto composta por todas as cadeias com pelo menos um 0 e um 1, e
nenhum 0 depois de 1.
3.2.2. Linguagem associada a uma expresso regular
Definio 3.2.2. Se r uma expresso regular, L(r) denota a linguagem associada com r.
Esta linguagem definida pelas regras seguintes:
1. r= uma expresso regular , o conjunto vazio
2. r= uma expresso regular, o conjunto {} com um elemento
3. Para todo o a, r=a uma expresso regular denotando {a}
Se r1 e r2 so expresses regulares, ento
4. L(r1+r2) = L(r1) L(r2) , unio de duas linguagens
5. L(r1r2) = L(r1) L(r2) , concatenao de L(r1) com L(r2)
6. L((r1)) = L(r1)
7. L(r1*) = (L(r1))*

As regras 4 a 7 usam-se para reduzir recursivamente uma linguagem L a expresses mais


simples.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

122

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

As regras 1 a 3 so as condies terminais para esta recurso.


Para se verificar qual a linguagem que corresponde a uma dada expresso regular,
aplicam-se aquelas regras tantas vezes quantas as necessrias.
A precedncia dos operadores a seguinte
1- fecho- estrela (*),
2- concatenao (),
3- (+) unio
Exemplos 3.2.8:
i) Seja o alfabeto ={x}.
A linguagem de xx* ser L(xx*) ={x, xx, xxx,...}= L(x+).
ii) E L(x(xx)*) ={x, xxx, xxxxx,..} =L(xmpar).
Em = { a, b, c }
iii) A linguagem de (a+c)b* ser
L((a+c)b*) = L(a+c)L(b*) (regra5)= (L(a) L(c)) (L(b))* (regra 4 e regra 7) =
= { a, c } { , b, bb, bbb, } (regra 3) =
={ a, c, ab, cb, abb, cbb, abbb,..}
iv) L(c+) = { c } (regra 4 e regra 3)
Em =

{a, b}

iv) L((a+b).(a+b).(a+b)) = L(a+b) L(a+b) L(a+b) (regra 4)


= {a,b} {a,b} {a,b} (regra 3)
= {aaa, aba, abb, baa, bba,..}

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

123

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

v) Em = {0,1} escrever a expresso regular para a linguagem das cadeias que contm
um nmero mpar de zeros, ou seja,
L ={w : w contm um nmero mpar de zeros }
Nota:
(a+b)*= (a+b)*+(a+b)*

(a unio de um conjunto consigo prprio d o prprio conjunto)

(a+b)* = (a+b)*(a+b)*

(a concatenao de qualquer cadeia de as e bs com qualquer


outra cadeia de as e bs d sempre uma cadeia de as e bs;
por outro lado =).

(a+b)* = a(a+b)*+b(a+b)*+ (a unio de todas as cadeias comeadas por a com todos as


cadeias comeadas por b e com a cadeia vazia d o conjunto
de todas as cadeias com as e bs mais .
Exerccios:
1. Qual a linguagem representada pela expresso regular:
i) (1+01+001)*(+0+00)
ii) ((0+1)(0+1))*+((0+1)(0+1)(0+1))*
2. Exemplos de linguagens complementares
Seja = {0,1}.Encontrar uma expresso regular para as linguagens:
i) L(r) = {w * : w tem pelo menos um par de zeros consecutivos }
ii) L (r) = {w * : w no tem qualquer par de zeros consecutivos }
Resoluo:
i) Uma cadeia da linguagem tem que conter 00 em algum lado. Antes ou depois do par
de zeros pode conter qualquer cadeia arbitrria. Como sabemos uma cadeia arbitrria de zeros
e uns dada por (0+1)*.
A soluo tem por isso trs partes; o par 00 precedido e sucedido por (0+1)* ou seja,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

124

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

r1 = (1+0)*00(1+0)*
Note-se que o enunciado no impede a existncia de mais pares de zeros para alm do
obrigatrio. Nunca confundir ter um par de zeros com ter um s par de zeros.
ii) Esta linguagem a complementar da anterior. No caso dos autmatos sabemos como
desenhar o autmato do complemento a partir do autmato original: basta trocarmos a misso
dos estados, passando os aceitadores a no aceitadores e os no aceitadores a aceitadores.
Com expresses regulares no h nenhuma tcnica assim expedita de encontrar o
complemento. Tem que se pensar na questo desde a base.
Se a linguagem no tem qualquer par de zeros consecutivos, quer dizer que sempre que
aprece um 0 ele deve ser seguido imediatamente por um 1, i.e., o 0 s pode aparecer na
cadeia 01
Antes ou depois de 01 pode aparecer um nmero arbitrrio de 1s, produzindo a cadeia
1....1011.....1. Portanto a linguagem contm (1...1011...1)*, ou, equivalentemente, (1*011*)*.
Note-se que ao fecharmos (fecho-estrela) a expresso estamos a replic-la um nmero
arbitrrio de vezes, permitindo assim gerar cadeias com um nmero arbitrrio de zeros. Mas
cada zero aparece acompanhado esquerda e direita por um nmero qualquer de 1s. Notese que obrigamos todas estas cadeias a terminar em 1, o que limitativo.
No esto ainda includas as cadeias que terminam em 0. Poderemos obt-las da
expresso anterior concatenando-lhe um zero no fim, obtendo-se (1*011*)*0 .
Faltam tambm as cadeias que s tm 1s; para elas basta adicionar 1*.
Finalmente juntam-se as cadeias que s tm 1s excepto o ltimo que 0, 1*0.
Teremos a unio destes subconjuntos todos, pelo operador + em expresses regulares:
(1*011*)* + (1*011*)*0 + 1* + 1*0
Este resultado responde pergunta. Por uma questo de elegncia podemos procurar
simplificar a expresso.
Pondo em evidncia os factores comuns s parcelas obtm-se a

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

125

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

r2= (1*011*)* (+0) + 1* (+0)


Pensando de outro modo, talvez mais simples, as cadeias sem zeros consecutivos so a
repetio arbitrria das subcadeias 1 e 01, isto , (1+01)*, s quais se pode ou no
adicionar um zero no fim , obtendo-se r3
r3= (1+01)*(0+)
equivalente anterior, mas ainda mais elegante.
Para uma dada linguagem existe um nmero ilimitado de expresses regulares
equivalentes. Importa no entanto obter uma que seja simples.
No existe nada na forma de r1 e r2 ou r1 e r3 que sugira que definem linguagens
complementares. Este facto indica uma das limitaes das expresses regulares.

3.3.Regras algbricas para expresses regulares


As expresses regulares so expresses algbricas sobre as quais se podem fazer algumas
operaes (unio, concatenao, fecho estrela). Essas operaes devem obedecer a um certo
nmero de regras. Podemos agrup-las em regras comutativas, regras associativas, regras
distributivas, identidades e anuladores, regras de fecho.
Duas expresses regulares so equivalentes se elas denotam a mesma linguagem.
Quando se simplifica uma expresso regular, obtm-se sucessivamente expresses regulares
equivalentes.
3.3.1 Regras comutativas e associativas
Sejam L, M e N expresses regulares.
A unio de duas expresses regulares comutativa
L+M=M+L
A demonstrao desta propriedade faz-se atendendo natureza da operao em causa.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

126

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

De facto a unio de duas linguagens o conjunto das cadeias de ambas, postas no


mesmo saco, por qualquer ordem. Podemos colocar primeiro as de L e depois as de M, ou
ao contrrio, que o conjunto resultante da unio no se altera. Portanto a unio comutativa.
A unio de linguagens associativa
(L + M) + N = L + (M + N)
Se queremos fazer a unio de trs conjuntos, poderemos unir os primeiros dois e depois
unir o resultante com o terceiro; ou podemos unir os dois ltimos, unindo depois o primeiro
com o conjunto resultante.
A concatenao de expresses regulares associativa
(LM)N = L(MN)
A concatenao de trs cadeias pode fazer-se indiferentemente de dois modos:
concatenar as duas primeiras e depois a terceira direita; ou concatenar as duas ltimas e
depois a primeira esquerda.
Mas no comutativa
LMML
A prova imediata.
3.3.2 Regras distributivas
A concatenao tem alguma analogia com o produto algbrico e a unio com a adio. A
concatenao distributiva esquerda em relao unio:

L (M + N) = LM + LN
Por exemplo aba(bba+abb)=ababba+abaabb. Atendendo ao significado de +, unio,
temos que concatenar o prefixo aba com cada uma das cadeias dentro do parntese. O
resultado a unio dessas concatenaes.
E tambm distributiva direita

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

127

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

(M + N)L = ML + NL
Prova semelhante, agora com um sufixo em vez de prefixo.
A unio no distributiva em relao concatenao nem direita nem esquerda
(MN) + L (M + L)(N + L)
L + (MN) (L + M)(L + N)
Para provar que assim , faz-se prova por contradio: supe-se que igual e procura-se
um caso em que no o seja. As propriedades tm que ser gerais, vlidas para todas as
linguagens e todas as cadeias em cada linguagem.
(ab)+c= (a+c)(b+c)
Ora (a+c)(b+c)=ab+ac+cb+cc por definio de unio e de concatenao. Mas isto
diferente de (ab)+c, o que suficiente para a prova por contradio.
3.3.3 Identidades e anuladores (zeros)
Numa certa lgebra, a identidade o elemento que operado com qualquer outro elemento d
esse elemento, tal como 1 na multiplicao numrica.
O conjunto vazio, , a identidade para a unio porque

+L=L+=L
J para a concatenao, a identidade a cadeia vazia porque

L=L=L
O anulador o elemento que operado com outro elemento d sempre o conjunto vazio.
No caso da concatenao o conjunto vazio

L = L =
Para a unio no existe anulador. E para a interseco?

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

128

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.3.4. Regras do fecho-estrela


O fecho estrela uma operao muito importante em expresses regulares quando se trata de
linguagens infinitas.
Ele goza de algumas propriedades cuja demonstrao fica ao cuidado do leitor.
(i) (L*)* = L*
(ii) L+ = LL* = L*L
(iii) L* = L+ +
(iv) * =
(v) * =
(vi) ( L+M )* = (L* M*)*
Esta ltima merece alguns comentrios, j que as restantes so mais ou menos evidentes.
Vejamos um exemplo de duas cadeias:
(a+b)* = (a*b*)*
esquerda temos qualquer cadeia com qualquer nmero de as e bs e por qualquer
ordem. Qualquer destas cadeias tambm pode ser obtida pela parte direita. Se comea por bs,
faz-se primeiro a0b*, depois a*b0 para os as, novamente a0b* para bs e assim
sucessivamente. Repare-se que o fecho externo permite faz-lo tantas vezes quantas as
necessrias.
Poderemos ver que qualquer cadeia gerada pela expresso da direita pode ser gerada
pela expresso da esquerda e vice-versa. Para uma prova mais formal ver Hopcroft p. 118.
3.3.5. Outras regras algbricas
Para provar uma regra algbrica qualquer, por exemplo
L + ML = (L + M)L

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

129

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

tem que se provar que qualquer cadeia gerada pela er da esquerda tambm gerada pela RE
da direita.
Para provar que falsa, basta dar um contra exemplo.
Para auxiliar a prova podem-se substituir os smbolos das er por caracteres de um alfabeto,
no caso por exemplo
(a+ba) = (a + b)a
que facilmente se v ser falso ( e portanto aquela propriedade falsa).

3.4. Relao entre expresses regulares e linguagens regulares


As expresses regulares so como vimos uma forma de especificar linguagens regulares.
Assim sendo para toda a linguagem regular existe uma expresso regular e, vice-versa, para
toda a expresso regular existe uma linguagem regular.
Faamos a prova em duas etapas.
3.4.1 De uma expresso regular a um NFA: expresses regulares definem linguagens
regulares
Uma linguagem regular, como vimos no Cap.2, de for aceite por um DFA ou por um NFA
(dado que estes so equivalentes a DFA).
Se pudermos construir um NFA a partir de uma expresso regular r qualquer, ento essa
expresso regular denotar uma linguagem regular L(r). De facto assim . Para o provar,
recorre-se definio recursiva de L(r) e segue-se a definio 3.1 de expresso regular.
1 Definem-se NFA para as expresses regulares primitivas ) os trs primeiros
elementos da definio 3.1)
i) NFA aceitador de L1= :
r=

LEI/DEI/FCTUC/2009/@ADC

q0

q1

Figura 3.4.1. Aceitador do conjunto vazio

Documento de trabalho

130

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

No havendo possibilidade de alcanar o estado aceitador, e linguagem o vazio.

ii) NFA aceitador de L2={}

q0

r=

q1

Figura 3.4.2. Aceitador de

iii) NFA aceitador de L3={a}

q1

q0
r=a

Figura 3.4.3. Aceitador de a

2 Admitamos que temos uma expresso regular r e que o NFA que aceira L(r)
representado pela Figura 3.4.4 genrica,

M (r)
q0

qf

Figura 3.4.4 Um antmato M genrico

com o estado inicial q0 e o estado final qF. Note-se que qualquer NFA pode ser representado
com um s estado final.
3 Suponhamos agora que temos dois NFAs M(r1) e M(r2) que aceitam as linguagens
L(r1) e L(r2) definidas pelas expresses regulares r1 e r2. Construam-se os NFA para a
segunda parte da Definio 3.2.2 do modo seguinte:
iv) L(r1+r2)

M (r1)

q0

M (r2)

Figura 3.4.5. Autmato da soma de expresse regulares

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

131

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

O NFA aceita a unio das linguagens, L1 pela parte de cima e L2 pela de baixo.
v) L(r1r2)

M (r1)
q

M (r2)

qf

Figura 3.4.6. Autmato da concatenao de duas expresses regulares

O NFA aceita uma cadeia que resulte da concatenao de uma cadeia de L1 (que leva o
autmato ao estado aceitador da de M(r1)) com uma cadeia de L2 que lava depois a qf.

vi) L(r1*)

M (r1)
q

qF

Figura 3.4.7. Autmato do fecho-estrela de uma expresso regular.

Este NFA j no to evidente. Repare-se que


r1*=+r1+r1r1+r1r1r1+
O vai pela parte de baixo do NFA directamente para o aceitador, portanto est includo
na linguagem do NFA.
O r1 vai atravs da mquina desde q0 at qf.
J r1r1 parte de q0 , vai at qf e volta para q0 pela parte de cima, com .
As outras potncias de r1 do tantas voltas quantas as necessrias at ao estado final.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

132

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Usando estas mquinas possvel construir um NFA para qualquer expresso regular.
Pode-se por isso enunciar o teorema:
Teorema 3.4.1. L(r) uma linguagem regular
Se r uma expresso regular, existe algum autmato finito no-determinstico que aceita
L(r). Logo L(r) uma linguagem regular.
Exemplo 3.4.1.1
r=1*
Sendo 1 uma expresso regular primitiva, desenha-se o seu autmato. Depois aplica-selhe a regra do fecho estrela.

Figura 3.4.8 Autmato NFA de 1*

Agora pode-se demonstrar que este NFA equivalente a


1

Figura 3.4.10. Autmato


equivalente de 1*

q0

Calculando o DFA equivalente obtm-se, em ={0,1}


0,1

1
0
DFA

q0
Figura 3.4.11. DFA de 1*

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

133

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Exemplo 3.4.1.2.
r=a+a*b
Desenham-se os NFA de a e de b, expresses regulares primitivas. A partir do de a
desenha-se o de a* que se concatena com o de b. Finalmente coloca-se um outro de a em
paralelo com o de a*b.
r=ab+(b+ab)*
Desenha-se o de a que se concatena com o de b. Desenha-se novamente o de b que se
paraleliza com o de ab. Agora aplica-se o fecho estrela ao conjunto obtido. Desenha-se depois
um outro de a e um outro de b que se concatenam, colocando-se o conjunto em paralelo com
o anterior.
3.4.2. De um NFA a uma expresso regular: expresses regulares para linguagens
regulares
A toda a linguagem regular se pode associar um NFA e portanto um grafo de transies.
Partindo do estado q0, procuram-se todos os caminhos possveis at ao estado final e as suas
etiquetas.
possvel depois encontrar uma expresso regular que gere todas essas etiquetas. Para
facilitar esta operao, usam-se os grafos de transio generalizados.
Grafos de transio generalizados so grafos de transio em que as arestas podem ser
etiquetadas por expresses regulares (e no s por caracteres). No Cap. 2 chammos-lhe *. A
etiqueta de um caminho desde o estado inicial at ao estado final a concatenao das
etiquetas das arestas do caminho, i.e., a concatenao de expresses regulares e portanto
uma expresso regular. As cadeias expressas por essa expresso regular so um subconjunto
da linguagem aceite pelo grafo de transio generalizado; a linguagem total ser a unio de
todos os subconjuntos gerados deste modo.
Temos ento o seguinte caminho pata encontrar uma expresso regular para uma dada
linguagem
NFA grafos de transio generalizados expresses regulares

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

134

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

O grafo de um NFA pode considerar-se um grafo generalizado desde que se interpretem


apropriadamente as suas etiquetas.
Uma aresta etiquetada com um nico carcter a interpreta-se como etiquetada pela
expresso regular a.
Uma aresta etiquetada por vrios caracteres a, b, ..., interpreta-se como etiquetada pela
expresso regular a + b + ....
Pode-se assim afirmar que para toda a linguagem regular existe um grafo de transio
generalizado que a aceita. Por outro lado toda a linguagem aceite por um grafo generalizado
uma linguagem regular.
A equivalncia entre grafos generalizados define-se em termos da linguagem aceite.
Consideremos o exemplo da figura 3.4.12 de um grafo generalizado com estados
Q= {q, qi, qj, ... }, em que q no nem um estado inicial nem um estado final.
Pode-se obter um grafo generalizado equivalente, com menos um estado, eliminando o
estado q.
No proceddimento tem que se assegurar que que no se altera a linguagem aceite pelo
NFA e denotada pelo conjunto das etiquetas que se podem gerar desde o estado inicial at ao
estado final.
e
c

d
q

qi

qj

Figura 3.4.12. Grafo genrico de trs estados. O do


meio pode ser eliminado.

Para que isso acontea temos que analisar com ateno as etiquetas (expresses
regulares) das arestas das transio possveis entre os estados que ho-de restar. Por exemplo
para ir de qi at qi, um ciclo fechado, vai-se com a at q, com um nmero qualquer de es, ou
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

135

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

seja e*, mantm-se em q e depois com d regressa a q; concatenando d ae*d. Para ir de qi at


qj passa-se em q e a pode ler-se um nmero arbitrrio de es, seguindo depois para qj com b.
E de modo anlogo para as outras transies. Resumindo,
qi qi : ae*d
qi qj : ae*b
qj qj : ce*d
qj qi : ce*b
Obtm-se assim o grafo de transio generalizado sem o estado q, Fig. 3.4.13.

ae*d

ce*b

ce*d

qi

qj

ae*b
Figura 3.4.13. Grafo resultante da eliminao do
estado intermdio da Fig. 3.4.12.

Note-se que no estado q entram e saem arestas para ambos os estados adjacentes e para
si prprio. No caso de alguma delas no existir, omite-se o correspondente no grafo
simplificado.
Este procedimento assegura que a linguagem aceite no alterada. Num grafo com mais
estados, mais complicado, o processo completo exige que este procedimento seja feito
sucessivamente para todos os pares (qi, qj) em Q {q} antes de se remover q (i.e., todos os
pares que estejam ligados a q). Por outro lado elimina-se um estado de cada vez, at restarem
apenas dois. As transies generalizadas permitem-nos reduzir qualquer autmato finito a um
outro com apenas dois estados.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

136

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Pode provar-se que a construo seguida produz um grafo generalizado equivalente ao


inicial.
Pode agora, e em consequncia, enunciar-se o teorema seguinte.
Teorema 3.4.2 (3.2). Seja L uma linguagem regular. Ento existe uma expresso regular r tal
que L=L(r).
Demonstrao:
Existe um NFA que aceita L, com um s estado final e tal que o estado inicial q0 no
estado final. Pode-se interpretar como um grafo de transio generalizado
Aplica-se-lhe o procedimento anterior de eliminar sucessivamente vrtices q, at que se
fique apenas com o estado inicial e o estado final, obtendo-se o grafo da Figura 3.4.14
seguinte, em que r1, r2, r3, r4 so expresses regulares.
r1

r4

r3

q0

qf

r2
Figura 3.4.14, Qualquer NFA pode ser reduzido a
esta forma.

A expresso regular que denota a linguagem aceite pelo grafo


r=r1*r2(r4 + r3r1*r2)*
De facto, para se ir de q0 a qf , pode-se ir por r1 (um nmero arbitrrio de vezes),
seguido de r2 ,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

137

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

- seguido de r4 ou, voltando para trs, de r3 seguido de r1* seguido de r2 , e esta


volta um nmero arbitrrio de vezes.
No caso de se obter um grafo em que o estado inicial tambm estado final,
r1

r4

r3

qf

r2
Figura 3.4 15. Caso em que o estado inicial aceitador.

a expresso regular
r=(r1*+ (r2r4*r3))*
Exemplo 3.4.2.1
Calcular a expresso regular do autmato da Fig. 3.4.16.
Antes de aplicar a construo subjacente ao teorema 3.2, necessrio introduzir uma
pequena alterao no autmato para que o estado inicial no seja o aceitador. Basta para isso
introduzir um estado adicional q que passa a ser o inicial e do qual se transita para A atravs
de . Resulta um NFA equivalente.

A
1

1
1
0

1
0

0
Figura 3.4.16. Exemplo 3.4.2.1

LEI/DEI/FCTUC/2009/@ADC

Figura 3.4.17. Introduo de um


estado inicial na Fig. 3.4.16

Documento de trabalho

138

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Elimine-se o estado C. O caminho de A para B, passando por C 11*0. De B para B


passando por C 11*0. De B para A passando por C no h. Teremos por isso
11*0

11*0

0
Figura 3.4.17. Eliminao do estado C.

Elimine-se agora B. Basta calcular o caminho de A para A passando por B, que


11*0(11*0)*0. Ainda de A para A temos 0 que se soma ao anterior. Logo os caminhos totais
de A para A so 0+11*0(11*0)*0 um nmero arbitrrio de vezes, ou seja (0+11*0(11*0)*0)*.
Logo teremos o autmato
r4

q0

r4 = ( 0 + 11*0(11*0)*0 )*

Figura 3.4.18. Eliminao do estado B

Alicando agora o resultado geral obtm-se a expresso regular do autmato inicial,


r=(r4 + )* =r4*= r4

3.5. Gramticas Regulares


J vimos duas maneiras de especificar linguagens regulares: autmatos finitos (DFA ou
NFA), e expresses regulares. Ambos tm as suas vantagens e inconvenientes. De uma
podemos obter a outra. As gramticas so uma terceira forma de especificao de linguagens,

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

139

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

como vimos no Cap. 1. No caso das linguagens regulares teremos gramticas regulares, uma
classe de gramticas lineares.
3.5.1. Gramticas lineares esquerda e direita
Definio 3.5.1. Gramtica regular
Uma gramtica G = (V,T,S,P) diz-se linear direita se todas as suas produes so da forma
A xB,
A x,
em que
A, B V, variveis do conjunto das variveis
x T, smbolo do conjunto dos smbolos terminais
O seu nome deriva do facto de a varivel aparecer direita do smbolo terminal, e por
isso as cadeias vo sendo produzidas da esquerda para a direita. linear por ter apenas uma
varivel, tal como uma equao A=xB, linear em B se x for uma constante.
Uma gramtica diz-se linear esquerda se todas as suas produes tm a forma
A Bx,
A x,
Uma gramtica diz-se regular se ela ou linear esquerda ou linear direita. Na parte
direita das produes aparece no mximo uma varivel e ela situa-se sempre na posio mais
direita ou sempre na posio mais esquerda do lado direito das produes.
Exemplos de gramticas regulares:
Exemplo 3.5.1.1
G1= ({S}, {a,b}, S, P1) , linear direita
P1 : S abA

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

140

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

P2 : S a
Tambm se pode escrever em forma mais compacta por
P : S abA|a
Como derivar ababa de G1 ?
S abS ababS ababa
Aplicando P1 sucessivamente duas vezes e depois P2 para terminar.
De cada vez que se aplica P1 introduz-se ab. Aplicando duas vezes, fica (ab)2S depois
para eliminar S tem que se aplicar P2 resultando em (ab)2a. Aplicando trs vezes P1 fica
(ab)3S e depois P2 termina a derivao em (ab)3a.
Generalizando conclui-se que a gramtica G1 produz a linguagem (regular) definida pela
expresso regular
r=(ab)*a
Exemplo 3.5.1.2
G2 =({S,A,B}, {a,b}, S, P2 } , linear esquerda
P1

S Aab

P2

A Aab | B

P3

Ba

Como derivar aababab de G2 ?


S Aab Aabab Aababab Bababab aababab
Aplicando P2 sucessivamente conclui-se que esta gramtica gera a linguagem regular
definida pela expresso regular r=aab(ab)*.
Exemplos de gramticas no-regulares
Exemplo 3.5.1.3.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

141

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

G3 =({S,A,B}, {a,b}, S, P }
P1

SA

P2

A aB

P3

P4

B Ab

Esta tem produes lineares direita (P2) e outras lineares esquerda (P4) (P1 e P3 tanto
so lineares esquerda como direita) por isso linear mas no regular. Uma gramtica
linear se do lado direito de cada produo aparece no mximo uma varivel, seja direita seja
esquerda. Se regular linear, mas nem todas as lineares so regulares.
Exemplo 3.5.1.4.
G4 =({S}, {a,b}, S, P }
P:

S aSSa |

no linear porque do lado direito de uma produo aparecem duas variveis (no caso duas
vezes S ).
As gramticas regulares esto associadas com linguagens regulares. Para toda a
linguagem regular existe uma gramtica regular.

3.5.2. Gramticas lineares direita geram linguagens regulares


Uma linguagem gerada por uma gramtica linear direita regular. Para o provar, constri-se
um NFA que imite as derivaes da gramtica linear direita. Se se conseguir, suficiente
para provar que a linguagem regular.
Numa gramtica linear direita, qualquer forma sentencial tem uma e uma s varivel
que o smbolo mais direita. Uma passo numa derivao resultante de uma produo resulta
em
ab...cD ab...cdE
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

142

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Um NFA pode imitar esta produo se tiver um estado D e um estado E e entre os dois
uma aresta etiquetada por d :
D

Figura 3.5.1 Produo D dE

Estando no estado D e aparecendo d transita para E. como se o autmato estivesse a


ler as cadeias geradas pela gramtica.
Os estados do autmato correspondem s variveis das formas sentenciais. A parte da
cadeia j processada foi obtida por construes semelhantes anteriores. Da o teorema 3.5.1
Teorema 3.5.1.(3.3) Uma gramtica linear direita produz uma linguagem regular
Seja G = (V,T,S,P) uma gramtica linear direita. Ento L(G) uma linguagem regular.
Para o demonstrar constri-se um NFA que imite as produes da gramtica como visto
acima.
Sejam
V = {V0, V1, ..., Vn } o conjunto das variveis da gramtica
S = V0 a varivel inicial (axioma)
P:

V0 v1Vi
Vi v2Vj

Vn vl

em que os vs so sub-cadeias de um ou mais smbolos terminais.


Se w uma cadeia em L(G), ento, necessariamente, a sua produo ser
V0 v1Vi

v1v2Vj

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

143

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

....
*

v1v2...vkVn
v1v2...vkvl = w
O NFA a ser construdo imita cada derivao consumindo um v de cada vez. V0, Vi, Vj,
..., Vn so estados do autmato, mas existem outros entre eles quando os vs so cadeias com
mais de um carcter. Alm disso preciso acrescentar o estado final.
Por exemplo se tivermos a produo:
Vi a1a2a3...amVj
ento o NFA ter um caminho ligando Vi a Vj, ou seja (Vi, Vj) existe e ser definida por

*(Vi, a1a2a3...am) = Vj
Vi

a1

a2

am

Vj

Figura 3.5.2. Produo Vi a1a2a3...amVj

Para uma produo


Vi a1a2a3...am
a funo de transio generalizada ser o estado final Vf.

*(Vi, a1a2a3...am) = Vf
Vi

a1

a2

am

Vf

Figura 3.5.3. Produo Vi a1a2a3...am

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

144

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Se uma cadeia wL(G) ento ela foi gerada por um conjunto de produes definidas
acima. No NFA existe, por construo, um caminho etiquetado w que vai de V0 at Vf ou seja,
w aceite pelo NFA.
Se uma cadeia w aceite pelo NFA, ento, pelo modo como este foi construdo, para
aceitar w o autmato tem que passar por uma sequncia de estados V0, Vi,... at Vf usando
caminhos etiquetados v1, v2, ...., ou seja, w tem necessariamente a forma
w= v1v2...vkvl
e por isso a derivao
*

V0 v1Vi v1v2Vj v1v2...vkVn v1v2...vkvl = w


possvel e em consequncia w pertence a L (G).
q.e.d.
Exemplo 3.5.2.1

Seja G = ( {S, A, B}, {a,b}, S, P )


com

P:

aA | aB ,

bB | b ,

aA | bB .

Derivao da cadeia ababab :


S aA abB abaA ababBababaA ababab
Para se construir o NFA corresondente, cria-se um estado por cada varivel mais um
estado final, resultando em 4 estados S,A,B,F. Depois as transies entre cada dois estados
extraem-se das produes: a etiqueta o smbolo terminal da produo repectiva. As
produes que permitem completar a derivao, as que tm no lado direito apenas caracteres

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

145

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

do alfabeto ou , levam necessariamente a uma estado final; no caso apenas a produo A

b. Resulta o autmato seguinte da Fig.3.5.4.

a
a

A
a

b
F

B
b
Figura 3.5.4. Autmato da gramtica do exemplo 3.5.2.1.

3.5.3. Gramticas lineares direita a partir de autmatos finitos


Para provar que toda a linguagem regular pode ser gerada por uma gramtica linear direita
(i) constri-se o DFA para a linguagem e
(ii) inverte-se a construo apresentada no teorema anterior 3.3. Os estados do DFA
transformam-se nas variveis da gramtica, e os smbolos produtores das transies so os
terminais do lado direito das produes. Teremos assim o
Teorema 3.5.2.(3.4) Se L uma linguagem regular no alfabeto , ento existe uma gramtica
linear direita G=(V,, S,P) tal que L=L(G).
Demonstrao:
Seja M=(Q,,, q0,F) o DFA que aceita L, tal que
Q= {q0 ,q1,...qn }

={a1, a2, ..., am}


Vamos fazer a prova do teorema construindo uma gramtica linear direita a partir do
DFA. Para isso

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

146

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

1 Construa-se a gramtica linear direita G = (V, , S, P), tal que


V= {q0 ,q1,...qn }

as variveis da gramtica so os estados do DFA

S = q0
2 Para cada transio (qi, aj) = qk no DFA M , introduz-se em P a produo
qi ajqk

cria-se uma produo por cada transio entre dois estados

3 Se qk faz parte de F, acrescenta-se a P a produo


qk

cria-se uma produo que permite terminar as derivaes.

A gramtica G gerada deste modo pode produzir toda e qualquer cadeia de L.


Por outro lado, se uma cadeia w pertence a L, ento ela pode ser derivada pela gramtica
G. A demonstrao mais detalhada ser vista por exemplo em Linz p. 94.
Se partirmos de um NFA, em vez de um DFA, o teorema igualmente vlido. A
construo anloga, com as pequenas diferenas; agora teremos
2 Para cada transio (qi, aj) = qk no DFA M , introduz-se em P a produo
qi ajqk

cria-se uma produo por cada transio entre dois estados

Se existir tambm (qi, aj) = ql , introduz-se em P a produo ou seja, neste caso,


qi ai ql ,ou seja qi ajqk | ajql
Para cada transio (qi, ) = qk no NFA M, introduz-se em P a produo qi qk (mais
alm chamaremos unitria a esta produo)
A nica diferena advm da escolha possvel a partir de um estado, que se reflecte em
duas produes possveis.
Exemplo 3.5.3.1
Construir a gramtica linear direita pata a linguagem L(aab*a).
Comeando por desenhar o NFA respectivo obtm-se
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

147

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

b
q0

q1

q2

qf

Figura 3.5.5.NFA para aab*a

A tabela de transies no NFA e das produes da gramtica a seguinte:


Tabela 3.5.3.1.Exemplo 3.5.3.1
Transies em M

Produes em G

(q0, a)={q1}

q0 aq1

(q1, a)={q2}

q1 aq2

(q2,b)={q2}

q2 bq2

(q2, a)={qf}

q2 aqf

qf F

qf

Para gerar por exemplo a cadeia aaba usam-se as formas sentenciais


q0 aq1 aaq2 aabq2 aabaqf aaba
Exemplo 3.5.3.2.
Construir a gramtica linear direita para a linguagem L(aab*a+aa+ab*a)
A linguagem a unio de trs:
aab*a+aa
a
q1

q2

LEI/DEI/FCTUC/2009/@ADC

b
q3

Documento de trabalho

q4

148

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

ab*a
a

q5

q6

q7

Figura 3.5.6. Resoluo por partes do exemplo 3.5.3.2

Reduz-se a um NFA com um s estado inicial e um s estado final criando um estado inicial
global e um estado final global com as necessrias transies a
q1

b
a

q2

q3

q4

q5

q6

q7

qf

Figura 3.5.7. NFA resultante para o exemplo 3.5.3.2

Poderemos construir a tabela 3.5.3.2. das transies e das produes da gramtica


equivalente:
Tabela 3.5.3.2.
Transies em M

Produes em G

(q0, )={q1, q5}

q0 q1| q5

(q1, a)={q2}

q1 aq2

(q2,a)={q3, q4}

q2 aq3| aq4

(q3, a)={q4}

q3 aq4

(q3, b)={q3}
(q4, )={qf}

q3 bq3
q4 qf

(q5, a)={q6}

q5 aq6

(q6, b)={q6}

q6 bq6

(q6,a)={q7}

q6 aq7

(q7, )={qf}

q7 qf

qf F

LEI/DEI/FCTUC/2009/@ADC

qf

Documento de trabalho

149

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

3.5.4. Equivalncia entre linguagens regulares e gramticas regulares


Nos pargrafos anteriores vimos a equivalncia entre linguagens regulares, autmatos finitos
e gramticas lineares direita. Que se passa com as gramticas lineares esquerda ?
Tal como para as gramticas lineares direita, tambm para as gramticas lineares
esquerda se pode enunciar o teorema de equivalncia:
Teorema 3.5.3 (3.5.)A linguagem L regular se e s se existir uma gramtica linear
esquerda G tal que L=L(G).
Para demonstrar este teorema recorre-se construo de uma gramtica linear
esquerda que gera a linguagem reversa de L. Assim se prova que a reversa de L regular.
Mas se a reversa de L regular, tambm o , porque a reverso preserva a propriedade de
regular. Para mais detalhes ver p. ex. em Linz p. 98.
Podemos finalmente enunciar o teorema de equivalncia entre linguagens regulares e
gramticas regulares:
Teorema 3.5.4.(3.6) Uma linguagem L regular se e s se existir uma gramtica regular G
tal que L=L(G).
Este teorema a conjugao dos dois anteriores.

3.6. Sntese das equivalncias


Vimos neste captulo que dada uma expresso regular, poderemos construir um autmato
finito NFA ou DFA, e vice-versa. Vimos tambm que dado um DFA ou um NFA podemos a
partir deles extrair uma gramtica regular; e dada uma gramtica regular poderemos construir
um autmato finito equivalente. Temos assim diversas equivalncias possveis (note-se que
qualquer relao de equivalncia uma relao transitiva). Estas equivalncias esto
esquematizadas na figura seguinte.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

150

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Expresses regulares (ER)


Teorema
3.1

Teorema
3.2

DFA ou NFA

Teorema
3.4

Teorema
3.3

Gramticas regulares (GR)

Figura 3.6.1. Vrias formas de descrever as linguagens regulares (LR)

Teorema 3.1.(3.4.1) ER NFA


Teorema 3.2 LR ER (LR DFA GTG ER)
Teorema 3.3 Gramticas lineares direita LR
( Gramticas lineares direita NFA LR )
Teorema 3.4 LR Gramticas Lineares direita
(LR DFA Gramticas lineares direita)

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

151

Teoria da Computao

Cap. 3 Expresses regulares, linguagens e gramticas

Bibliografia:
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001.
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

152

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

CAPTULO 4

PROPRIEDADES DAS LINGUAGENS REGULARES

4.1. Introduo

155

4.2.Propriedades de fecho das linguagens regulares

155

4.3 Propriedades de deciso das linguagens regulares

161

4.4 Identificao das linguagens regulares: o lema da bombagem

163

The pumping lema

176

Bibliografia

177

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

153

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Cap. 4 Propriedades das linguagens regulares

Documento de trabalho

154

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

4.1. Introduo
Nos captulos anteriores estudmos fundamentalmente o contexto regular para linguagens,
gramticas e autmatos. O esquema de equivalncias a que se chegou define um universo de
linguagens interessante e til. Importa agora conhecer mais pormenorizadamente as
propriedades dessa famlia de linguagens. Qual o seu grau de generalidade ? So fechadas em
relao a certas operaes sobre conjuntos? Uma linguagem finita ou no? Outra importante
questo como se pode saber se uma dada linguagem regular. Se conhecermos uma
propriedade geral que todas as linguagens regulares tm obrigatoriamente, e se uma dada
linguagem no a verifica, ento ela no regular. Veremos uma tal propriedade geral.

4.2. Propriedades de fecho das linguagens regulares


As propriedades de fecho das linguagens regulares sob diferentes operaes tm um interesse
terico considervel. Do uma perspectiva da natureza genrica das famlias de linguagens e
ajudam na resposta a questes prticas. Um conjunto fechado em relao a uma operao
(sobre os seus elementos) se o resultado da aplicao dessa operao a quaisquer dos seus
elementos resulta num seu elemento. A figura 4.44. seguinte ilustra esta propriedade para uma
operao unria e uma operao binria (com dois argumentos): o resultado d sempre um
elemento do mesmo conjunto.

Figura 4.1.1. Fecho de um conjunto em relao a


uma operao entre os seus elementos.
4.2.1. Fecho em relao a operaes de conjuntos

Algumas conhecidas operaes sobre conjuntos quando aplicadas a linguagens regulares


produzem linguagens regulares.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

155

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Teorema 4.1. Se L1 e L2 so linguagens regulares, ento tambm o so


(i) L1L2, propriedade de fecho em relao unio
(ii) L1L2, propriedade de fecho em relao interseco
(iii) L1L2,

propriedade de fecho em relao concatenao,

(iv) Compl(L1), Compl (L2), fecho em relao complementao


(v) L1*, L2*, fecho em relao ao fecho-estrela
(vi) L1 L2=L1 Compl(L2), fecho em relao diferena
Demonstrao:
A demonstrao destas propriedades faz-se recorrendo ao que estudmos nos captulos
anteriores.
(i) (iii) (v):
Vimos que se L1 e L2 so regulares, existem expresses regulares r1 e r2 que lhes
correspondem, isto L1= L1(r1), L2= L2(r2).
Vimos tambm que por definio de expresses regulares, r1+r2, r1r2 , r1* , r2* so
expresses regulares denotando respectivamente as linguagens L1L2, L1L2, L1*, L2*
Em consequncia o fecho em relao unio(i), concatenao (iii), ao fecho-estrela (v)
evidente e est demonstrado.
(iv)
Em relao complementao (iv), no assim to imediato, mas j o vimos no Cap. 2.
Seja M = (Q, , , q0, F) o DFA que aceita L1. Ele tem estados finais F. Se considerarmos
agora o autmato que se obtm deste invertendo a qualidade aceitador/no aceitador de cada
estado, teremos o DFA complementar Mc.
Ento o DFA

Mc = (Q, , , q0, Q - F) aceita Compl(L1).

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

156

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

De facto, num DFA a funo de transio generalizada * uma funo total, isto , ela
definida para todas as cadeias de *. Portanto, dada uma cadeia w e o estado inicial q0, *(q0,
w) existe, e ou um estado final (pertence e F, caso em que wL1 ) ou um estado no
aceitador e portanto pertencente a Q-F e neste caso w Compl(L1). Havendo um DFA que
aceita Compl(L1), ela regular e verifica-se o fecho em relao complementao.
(ii)
Em relao interseco, faz-se uma prova construtiva: constri-se um DFA especial a
partir dos DFA de L1 e L2, respectivamente M1 e M2.
Sejam M1 = (Q, , 1, q0, F1) e M2 = (P, , 2, p0, F2) os DFA de L1 e L2.
Vamos construir o DFA interseco destes dois e chamemos-lhe M12: ele aceitar uma
cadeia se e s se essa cadeia for aceite por M1 e por M2 . Tomamos um carcter do alfabeto
(que o mesmo nas duas linguagens) e seguimo-lo num e noutro autmato. Se ele est num
estado qi de M1 e num estado pj de M2, criamos um estado qij em M12. Se ele transita em M1
para qk e em M2 para pl, cria-se o estado qkl em M12. Assim os estados de M12 correspondem a
pares de estados de (Q, P).
Suponhamos o alfabeto ={a,b} e o carcter a. A Fig. 4.2.1 ilustra a demonstrao.

Em M1

Em M2

Ento em M12

qi

pj

(qi, pj)

qij

qk

pl

(qk, pl)

qkl

Figura 4.2.1 Autmato da interseco de duas linguagens

De seguida v-se para onde se transita com b, em qi de M1 e pj de M2, e cria-se em M12 o


estado respectivo.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

157

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

O conjunto dos estados de M12 um subconjunto do produto cartesiano dos estados de M1


com os de M2, QxP, composto por pares (qi, pj), com qiQj e pjP.
A funo de transio do DFA M12, , obtm-se sabendo que M12 est no estado (qi, pj)
sempre que M1 est no estado qi e M2 est no esto qj, ou seja,
((qi, pj), a)= (qk, pl)
Sempre que

1(qi,, a)= qk
e

2(pj,, a)= pl
E quais sero os estados aceitadores em M12?
Queremos obter o DFA que aceita a interseco das linguagens L1 e L2, isto , as cadeias
que levam M1 a um estado aceitador e ao mesmo tempo M2 tambm a um estado aceitador.
Para que isso acontea, fazemos aceitadores em M12 os estados compostos por estados
aceitadores, isto , os estados (qi, pj) tais que qi aceitador em M1 (qiF1) e pj aceitador em
M2 (pjF2).
Deste modo o DFA M12 aceita todas as cadeias, e s essas, wL1L2.
Alternativamente a esta demonstrao construtiva, a usando os nossos conhecimentos de
lgica, poderemos usar a Lei de DeMorgan

L1 L2 = L1 L 2
Se L1 regular, tambm o o seu complemento. Se L2 regular, tambm o o seu
complemento. Se os dois complementos so regulares, tambm o a sua unio. Se a unio
regular, tambm o o seu complemento. Logo a interseco regular.
vi) Quanto diferena, escrevamo-la de outra forma
L1 L2 = L1 L 2

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

158

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Sendo L2 regular, tambm o o seu complemento. Sendo L1 regular, a interseco com


outra regular d uma regular, como acabmos de provar. Logo a diferena regular (sendo L1
e L2 regulares, naturalmente).
H uma outra operao interessante sobre uma linguagem - a reverso-, que se opera
revertendo toda e qualquer cadeia da linguagem. Ora a reversa de uma linguagem regular
uma linguagem regular.
Teorema 4.2. A famlia das linguagens regulares fechada em relao reverso.
Para demonstrar, construirmos o DFA da linguagem e depois procuramos, a partir dele, um
DFA que aceita a linguagem reversa. Se conseguirmos, est a prova feita.
Uma cadeia reverte-se lendo-a do fim para o princpio. Tendo um NFA que aceita uma
cadeia, ele vai-a lendo, partindo do estado inicial, at chegar ao estado aceitador. Se agora
andarmos para trs, partindo do estado final aceitador, percorrendo as arestas em sentido
contrrio, chegaremos ao estado inicial depois de lermos a cadeia ao contrrio. Portanto para a
reverso, faz-se uma prova construtiva atravs dos passos seguintes:
- constri-se um NFA com um s estado final para a linguagem L.
- transforma-se o estado inicial em final e o final em inicial
- inverte-se o sentido das setas em todas as arestas do grafo do NFA.
- o NFA resultante aceita LR
Logo o NFA da reversa existe, porque acabmos de o construir, e por isso LR regular.
4.2.2. Fecho em relao a outras operaes
4.2.2.1. Homomorfismo
Um homomorfismo uma correspondncia biunvoca entre dois conjuntos. Dois elementos
so homomorfos (ou homomrficos) se so semelhantes na forma ou compostos por partes
semelhantes entre si (homo-a mesma, morfo-forma).

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

159

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

*2

h
a

01
h

11

101

h (abc) = h(a)h(b)h(c) = (01)(11)(101)=0111101


Figura 4.2.2. Ilustrao do homomorfismo

Uma cadeia no conjunto origem homomrfica de uma cadeia no conjunto de chegada. A


relao de semelhana resulta da transformao h.
Teorema 4.3. Seja h um homomorfismo. Se L uma linguagem regular, ento a sua imagem
homomrfica tambm regular. A famlia das linguagens regulares por isso fechada em
relao a qualquer homomorfismo.
Podemos imaginar uma prova construtiva deste teorema. Seguindo o exemplo, construmos
o NFA da linguagem original. Nele existem arestas com etiquetas a, b e c.
Substituamos cada aresta a por uma aresta 0 seguida de um estado seguido de uma aresta
1. Substituamos cada aresta b por uma aresta 1 seguida de um estado seguido de uma aresta 1.
E substituamos cada aresta c por uma aresta 1 seguida de um estado seguido de uma aresta 0
seguida de um estado 1.
1

c
1

1
2

Figura 4.2.3. O autmato de um homomorfismo

O NFA obtido aceita a linguagem que resulta da original depois do homomorfismo h, que
por isso mesmo uma linguagem regular.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

160

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Pode-se tambm demonstrar a partir das expresses regulares. Escreve-se uma expresso
regular da linguagem original L. Nela substituem-se os caracteres a, b, c, pelas suas imagens
homomrficas 01, 11, 101. O que resulta ainda uma expresso regular e portanto denota
uma linguagem regular. Esta a imagem homomrfica de h.

4.2.2.2 Quociente direita


Considerem-se duas linguagens L1 e L2 no mesmo alfabeto. Tomemos agora todas as cadeias
de L1 que se podem decompor em duas partes: um sufixo y e um prefixo x, tal que o sufixo y
constitui uma cadeia de L2.
L2

L1/L2
x

L1

Figura 4.2.4. Quociente direita

O conjunto dos prefixos x compe a linguagem quociente de L1 por L2 direita. Isto ,


L1/L2={x: xyL1 para algum y L2}
Teorema 4.4. Se L1 e L2 so linguagens regulares, ento L1/L2 tambm regular. A famlia
das linguagens regulares fechada em relao ao quociente direita por uma linguagem
regular.
Para demonstrar o teorema constri-se o DFA do quociente. Ver por exemplo em Linz 107.

4.3. Propriedades de deciso de linguagens regulares


H questes importantes sobre linguagens regulares s quais temos que saber responder. No
se trata naturalmente de analisar todas as cadeias de uma linguagem, tipicamente infinita, e
ver se elas tm alguma caracterstica especial. Essa resposta obtm-se analisando uma das
formas de representao estudadas: um autmato finito (determinstico ou no
determinstico), uma expresso regular ou uma gramtica regular. Uma questo diz-se
decidvel se formos capazes de lhe dar uma resposta genrica, aplicvel a todas as linguagens

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

161

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

(neste caso regulares), isto , se existir um algoritmo para ela. Veremos de seguida algumas
dessas questes fundamentais.

4.3.1. A questo da pertena


Dada uma linguagem qualquer, uma dada cadeia w pertence-lhe?
Teorema 4.5. Dada uma representao padro de qualquer linguagem regular L em e dada
uma qualquer cadeia w*, existe um algoritmo para determinar se w pertence ou no a L.
Demonstrao (construtiva):
Representa-se a linguagem por um DFA, e depois testa-se se o DFA aceita ou no w. Este
o algoritmo.

4.3.2. A questo de finitude ou infinitude de uma linguagem.


Como saber se uma linguagem finita ou infinita?
Teorema 4.6. Existe um algoritmo para verificar se uma linguagem, dada numa forma
padro, vazia, finita ou infinita.
A demonstrao construtiva:
1 Representa-se a linguagem por um grafo de transio de um DFA, o que sempre
possvel por ser regular.
2 Analisam-se os caminhos do grafo.
Se existe um caminho do estado inicial ao estado final, a linguagem no vazia.
3 Procuram-se todos os vrtices que so base de um ciclo.
Se algum desses vrtices base est num caminho do estado inicial ao estado final, a
linguagem infinita. Se no, finita.
De facto poderemos dar um nmero infinito de voltas ao ciclo, e por cada volta aceita-se
uma cadeia; logo o nmero de cadeias aceites infinito.

4.3.3. A questo da igualdade de linguagens

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

162

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Como verificar se duas linguagens so ou no iguais?


Teorema 4.7. Dadas duas linguagens regulares L1 e L2 numa forma padro, existe um
algoritmo para determinar se L1=L2.
Demonstrao construtiva:
Constri-se o DFA para a unio das diferenas das linguagens
L = (L1 - L2) (L2 L1)
e testa-se a se a linguagem resultante vazia. Se sim, as linguagens so iguais, se no, so
diferentes. De facto se L1=L2 ento L1 - L2= e L2 L1= e =. Por outro lado se
L no vazia, ento ou L1 - L2 ou L2 L1 no-vazia e por isso L1 L2.

4.4. Identificao de linguagens no regulares: lema da bombagem


A questo bsica sobre uma linguagem- ser ela regular ? a de resposta mais difcil.
Sabemos que se formos capazes de construir um NFA para ela, ela regular. E se no formos
? No ser por falta de engenho e arte? Haver um algoritmo para saber se uma linguagem
no regular? Disso trata o to estranho (numa primeira abordagem) lema da bombagem.

4.4.1. O princpio do pombal (pigeonhole)


O princpio do pombal usado pelos matemticos para se referirem seguinte situao: se
dispusermos n objectos em m caixas (gaiolas no pombal) e se n>m, ento pelo menos uma
caixa tem que conter mais do que um objecto.
A analogia com os autmatos finitos reside no facto de estes, por terem um nmero finito de
estados, terem memria limitada. Assim sendo eles no so capazes de distinguir prefixos (de
cadeias) de comprimentos arbitrrios.

Figura 4.4.1. O princpio do pombal.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

163

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Por exemplo, num grafo de transio com n vrtices, qualquer caminho de comprimento igual
ou superior a n tem que repetir algum vrtice, isto , tem que conter um ciclo. Se cada estado
for considerado uma gaiola, ele ter mais de uma passagem.
Exemplo 4.4.1. Seja L=L(aba*b)
O seu NFA fcil de desenhar (Figura 4.4.2) :
a
a

Figura 4.4.2. Exemplo 4.4.1

A cadeia abb leva o DFA do estado inicial ao final aceitador, passando uma vez em cada
estado. O caminho abaab passa duas vezes no estado 3. Qualquer caminho aceitador maior
passar mais vezes em 3. Temos aqui uma ilustrao do princpio do pombal.
Considere-se a cadeia abab de L. Poderemos decomp-la em trs partes - x, y e z- da
seguinte forma:
Tabela 4.4.1
ab a
x

b
z

Se tivermos agora a cadeia abaab tambm a poderemos decompor em trs partes mas de
modo ligeiramente diferente,
Tabela 4.4.2
ab aa b
x

y2

e abaaab

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

164

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Tabela 4.4.3
ab aaa b
x

y3

E assim sucessivamente, qualquer cadeia aceite se pode decompor em trs partes xyiz como
na Tabela 4.4.4 seguinte:
Tabela 4.4.4
i

w=xyiz

abb

a
b
m

abab
a b

abaab

abaaab

abaaaab

qk F

q0
Figura 4.4.3. A decomposio para o exemplo
1. Nesta decomposio x=ab, z=b.


Podem-se desenhar os caminhos correspondentes, como na figura 4.4.3: partindo de q0,
com o segmento ab chega-se ao ponto (estado) m; a podem-se tirar as da cartola, tantos
quantos se quiser, ou, dito de outro modo, podem-se bombear as de um poo sem fundo, at
que decidimos prosseguir, percorrendo o segmento b at ao fim. Todas as cadeias bombeadas
(isto , no caso com as bombeados) pertencem linguagem, dado que levam ao estado
aceitador
Analisemos em detalhe a decomposio xyz das cadeias desta linguagem. Ela possvel
para qualquer cadeia da linguagem de comprimento igual ou maior do que 4 (abab, abaab,
). A decomposio verifica as condies seguintes:
w=xyz
com
|xy|=aba = 3

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

165

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

e
|y| = 1
Se bombearmos y obtemos
wi=xyiz
a cadeia wi pertence a L para todo o i=0, 1, 2, ...
Se m for o comprimento da menor cadeia que contm uma vez o ciclo, neste caso m=4 e
|xy| = 3 m.
Pode-se fazer uma construo semelhante para uma qualquer linguagem regular infinita.
Como representada por um autmato finito, para ser infinita tem que ter cadeias
arbitrariamente grandes, e portanto tem que ter pelo menos um ciclo que o permita.
Exemplo 4.4.2.
Seja a linguagem L=abb(baa)*bb regular e infinita.

a
1

b
2

b
7

Figura 4.4.4. Autmato de L=abb(baa)*bb

Se olharmos atentamente para o NFA verificamos que o nico ciclo existente 4-5-6. Ser
a que se faz a bombagem. Bombeia-se bab um nmero arbitrrio de vezes. A decomposio
xyz neste caso tem y=bab. As outras partes sero x=abb, z=bb. Por outro lado a menor cadeia
que contm xy abbbaabb e portanto m= 8.
Existe assim uma decomposio que verifica as condies seguintes:
w=xyz
com
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

166

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

|xy|=abbbaa = 6 m
e
|y| = 3
Se bombearmos y obtemos
wi=xyiz
a cadeia wi pertence a L para todo o i=0, 1, 2, ...
Exemplo 4.4.3
No caso da linguagem regular L=a(abb)*bb(baa)*bb, cujo grafo do NFA o da Fig 4.4.5,

b
7

a
a

Figura 4.4.5. Autmato de L=a(abb)*bb(baa)*bb

existem dois ciclos que fazem a linguagem infinita. Se procurarmos uma decomposio xyz
das cadeias da linguagem onde possamos fazer a bombagem, encontraremos duas
possibilidades, conforme o ciclo que escolhermos:
- escolhendo o 1 ciclo, ser xyz= a(abb)bbbb ou a(abb)bbbaabb ou a(abb)bb(baa)2bb
Tabela 4.4.6
x

abb

bbb

abb

bbbaabb

abb

bbbaabaabb

abb

temos que x e y so bem definidos mas z pode ter muitas composies.


LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

167

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

- escolhendo o 2 ciclo, ser xyz= abb(baa)bb ou a(abb)bb(baa)bb ou


Tabela 4.4.7
x

abb

baa

bb

aabbbb

baa

bb

aabbabbbb

baa

bb

aabbabbabbbb baa

temos agora que y e z so bem definidos mas x pode ter muitas composies.
Para todas as cadeias da linguagem de comprimento maior do que 8 existe pelo menos um
ciclo. Para que uma cadeia contenha os dois ciclos pelo menos uma vez, ter um comprimento
de pelo menos 11. Podemos assim afirmar que para todas as cadeias maiores do que 11 existe
pelo menos uma decomposio xyz que verifica as propriedades
w=xyz
com
|xy| 11
e
|y| 1
Se bombearmos y obtemos
wi=xyiz
a cadeia wi pertence a L para todo o i=0, 1, 2, ...
Estamos agora em condies de enunciar esse to famoso quanto incompreendido lema da
bombagem para linguagens regulares.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

168

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

4.4.2. O Lema da bombagem (pumping lema)


A propriedade das linguagens regulares que acabmos de analisar formalizada pelo lema
da bombagem.
Teorema 4.8. Seja L uma linguagem regular infinita. Ento existe algum inteiro positivo m tal
que qualquer cadeia wL com |w| m se pode decompor em
w=xyz
com
|xy| m
e
|y| 1
tal que
wi=xyiz
tambm pertence a L para todo o i=0, 1, 2, ...
Quer dizer que qualquer cadeia suficientemente longa de L se pode partir em trs partes de
tal modo que um nmero arbitrrio de repeties da parte do meio produz outra cadeia de L.
Pode-se dizer por isso que a sub-cadeia do meio bombeada, e da o nome do lema.
Qual o interesse do lema ? Provar que uma linguagem regular ? Ser que s as
linguagens regulares o verificam ? O lema no diz que se aplica s a elas.
Exemplo 4.4.4.
Consideremos a linguagem L = {aapabqaq, p0, q1}
Existe um m = 5 tal que para toda a cadeia |w| 5 possvel encontrar uma decomposio
w=xyz tal que |xy|4, |y|1, e a cadeia wi=xyiz pertence linguagem para todo o i 0.
Demonstrao:

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

169

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Seja a cadeia de L aaaba. Nela podemos fazer a decomposio


xyz= |aa|a|ba| obedecendo s restries de tamanho. Bombeando agora y obtm-se
Tabela 4.4.8
i

w=xyiz

aaba

aaba

aaaba

aaaaba

aaaaaba


cadeias que pertencem todas a L.
Para cadeias de L maiores do que 5, por exemplo aaaaba, aabababa, pode-se sempre fazer
a decomposio com x=a, y=a, de tal modo que bombeando o y se obtm cadeias da
linguagem para todo o valor de i.
No entanto esta linguagem livre de contexto no regular, como veremos posteriormente.
O leitor pode tentar desenhar um autmato finito, ou escrever uma expresso regular para ela
que no conseguir faz-lo devido ao termo aqbq que tem forosamente um nmero de as
igual ao nmero de bs . Por isso as linguagens regulares so um subconjunto das linguagens
que verificam o Lema da Bombagem.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

170

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Linguagens
que verificam
o Lema da
Bombagem

Linguagens
regulares

Figura 4.4.6. As linguagens regulares verificam o Lema da Bombagem. Mas h outras, no regulares,
que tambm o verificam.

O Lema diz-nos que se a linguagem regular (proposio A) ento existe um m apropriado


(proposio B),
A B (implicao)
mas isto no nos autoriza a dizer que se existe um tal m ento a linguagem regular, isto
no verdade que
B A
O que sabemos com toda a certeza que
Se (A B) ento (noB noA)
isto , se no existe um tal m, a linguagem no regular, com toda a certeza.
O Lema usa-se precisamente com noBnoA: procura-se demonstrar com ele que uma
linguagem no regular.
Para isso temos que provar que impossvel a existncia de um m apropriado. Como fazer
a prova ? Por contradio: supe-se que existe e tenta-se reduzir ao absurdo.
Vejamos a lgica do Lema e do seu contrrio:

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

171

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Tabela 4.4.9.
O Lema pela afirmativa
- existe um m tal que para

O Lema pela negativa


- para qualquer valor de m sou capaz de
encontrar

- qualquer cadeia |w| m pertencente a L - (pelo menos) uma cadeia |w| m


existe

pertencente a L em que

- uma decomposio xyz que produz, pela - qualquer decomposio xyz produz, pela
bombagem de y, |xy|m
- todas cadeias pertencentes a L

bombagem de y, |xy|m
- (pelo menos) uma cadeia que no pertence
linguagem
i 0, xyiz L

i 0, xy z L
i

O que temos ento que provar, para uma linguagem qualquer, a fim de podermos concluir
que no regular, tudo o que se encontra na segunda coluna desta Tabela 4.4.9.
A prova pode transformar-se num jogo entre duas pessoas, tal como na Tabela 4.4.10.
Tabela 4.4.10. O jogo do lema da bombagem
Jogador 1

Jogador 2

Define a linguagem L
Escolhe um m
Indica uma cadeia de L
Define uma decomposio |xy|m
Indica um i que bombeie para fora

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

172

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

O jogador 1 tenta provar que no regular e o jogador 2 o contrrio (procurando o m).


O jogo s conclusivo se o jogador 1 ganhar, concluindo-se que a linguagem no
regular. A vitria do jogador 2 no permite qualquer concluso (trata-se de um jogo pouco
cavalheiresco ).
O jogador 1 tem que ter uma estratgia para a escolha da cadeia concreta para um qualquer
valor de m que o jogador 2 coloque sobre a mesa, e aqui reside o cerne da prova.
Para um qualquer m que o meu adversrio proponha, qual a estrutura da cadeia que devo
escolher de modo que ele fique impossibilitado de a definir uma decomposio apropriada?
Como o posso encost-lo parede?
Esta o desafio do jogador 1.
Exemplos de aplicao do Lema da Bombagem.
Exemplo 4.4.5. Provar que L={anbn} no regular
J encontrmos esta linguagem em diversas ocasies. Para que um autmato finito a
pudesse reconhecer, teria que ser capaz de memorizar o nmero de as que j entraram e
depois contar um igual nmero de bs at aceitar a cadeia. S se o autmato pudesse ter um
nmero arbitrariamente grande de estados, at ao infinito, ele ser capaz de reconhecer esta
linguagem.
Por aqui legtima a suspeita de que a linguagem no regular. Mas provemo-lo
formalmente com o lema da bombagem
Tem que se provar que: para qualquer valor de m por muito grande que este seja, existe
uma cadeia em que qualquer decomposio |xy| m bombeia para fora da linguagem.
Se me do um m=10, por exemplo, eu apresento a cadeia a10b10. A decomposio xy tem
que ser tal que todos elementos de y so as, pelo facto de |xy| 10. Logo bombeando y por
exemplo duas vezes, aumenta o nmero de as, que fica assim maior do que o nmero de bs e
por conseguinte a cadeia no pertence linguagem.
Se me do m=20, escolho a20b20 e acontece coisa semelhante.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

173

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

E para um m qualquer eu escolho a cadeia ambm. Qualquer decomposio xyz bombeia para
fora da linguagem.
Exemplo 4.4.6.
Seja o alfabeto ={0} e a linguagem composta por cadeias apenas de zeros e com um nmero
de zeros igual sequncia dos quadrados perfeitos, isto 0, 1, 4, 9, 16, , ou seja, L= {0i2, i
N}.
Vejamos outra perspectiva da prova, que no recorre directamente ao Lema da Bombagem,
mas ainda assim prova por contradio.
Admitamos que a linguagem regular. Existe por isso um NFA que a aceita. Seja n o seu
nmero (finito) de estados. Ora este NFA tem que aceitar a cadeia com n2 zeros. Mas como
tem apenas n estados, para ler esta cadeia toda tem que passar pelo menos duas vezes por um
estado, isto , tem que ter um percurso fechado, um anel, que passa pelo menos em um
estado. Assim pelo facto indiscutvel de que n2>n , h pelo menos dois estados iguais desde o
incial q0 at ao final aceitador qn2. Sejam eles qi e qj, definindo-se i-j= p n. O anel da figura
tem comprimento p. Mas se dermos duas voltas ao anel, a cadeia resultante tambm ser
aceite pela DFA. Essa cadeia ter ( n2+p) zeros. Ser este um quadrado perfeito ? Se for bem
faz o autmato em a aceitar. Mas se no for ela no pertence linguagem.

q i = qj

Anel de
comprimento p

qn2 F
q0

Figura 4.4.7.Ilustrao do exemplo 4.4.6

Depois de n2, o prximo quadrado perfeito (n+1)2=n2+2n+1. Ora n2+p < n2+2n+1 porque
p n e por isso n2+p no um quadrado perfeito e portanto no pertence linguagem.
Logo no pode existir um tal NFA, ou seja, a linguagem no pode ser regular.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

174

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Esta prova geomtrica bastante intuitiva. Se quisermos uma prova baseada no lema da
bombagem, poderemo-nos inspirar na prova grfica.
A contraprova aqui tem que procurar destruir a caracterstica essencial da linguagem: os
quadrados perfeitos dos seus zeros.
Se me ds um certo m, apresento-te a cadeia com um nmero de zeros igual ao quadrado
perfeito m2. Fazendo agora uma decomposio xyz, tal que |xy|m, bombeando y, obtm-se
sempre, qualquer que seja y, cadeias com um nmero de zeros que no um quadrado
perfeito. Isto , bombeia-se para fora (embora para algumas bombagens se possa
eventualmente fazer para dentro). De facto, o y ficar sempre nos primeiros m zeros, e ter no
mximo m zeros (nesta caso x vazia). Analise-se este caso, em que y fica com os m zeros.
Bombeando uma vez, o nmero total de zeros ser m2+m. Ora m2+m no um quadrado
perfeito; se fosse m2+2m+1 s-lo-ia porque seria (m+1)2. Isto basta para negar o Lema da
Bombagem e concluir que a linguagem no regular.
Exemplo 4.4.7
p

Seja a linguagem dos nmeros primos de zeros L= {0 , em que p um nmero primo}


Vamos ao jogo !
Ds-me um m qualquer e eu apresento-te a cadeia com p zeros, sendo p o nmero primo
igual ou imediatamente superior a m. Isto possvel porque a quantidade de nmeros primos
infinita, e portanto por muito grande que seja m posso encontrar sempre um primo superior.
Agora a decomposio xyz coloca y nos primeiros m zeros. Seja r o comprimento de y. Se
bombear y um nmero de vezes igual a p, resulta uma cadeia com p+rp zeros, ou seja p(1+r)
zeros, que no um nmero primo (porqu? Note-se que r1).
Tambm se pode fazer uma prova grfica, por contradio, admitindo que existe um DFA
com n estados que aceita a linguagem. Tomamos um nmero primo p superior a n e
conclumos que o DFA ter que conter um anel que fecha no estado qi=qj. Fazendo agora ji=r e bombeando p vezes obtm-se um nmero de zeros igual a p+rp que no primo e
portanto a cadeia bombeada no pertence linguagem.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

175

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Exerccio 4.4.1.
Provar que a linguagem L={ww, w , } no regular.
O Lema da Bombagem por alguns considerado um dos mais interessantes tpicos em
Teoria da Computao. O Professor Harry Mairson, da Universidade de Brandeis (
http://www.cs.brandeis.edu/~mairson/poems/node1.html) dedica-lhe mesmo um inspirado
poema, que aqui se reproduz com autorizao.

The Pumping Lemma

by Harry Mairson

Any regular language L has a magic number p


And any long-enough word in L has the following property:
Amongst its first p symbols is a segment you can find
Whose repetition or omission leaves x amongst its kind.

So if you find a language L which fails this acid test,


And some long word you pump becomes distinct from all the rest,
By contradiction you have shown that language L is not
A regular guy, resilient to the damage you have wrought.

But if, upon the other hand, x stays within its L,


Then either L is regular, or else you chose not well.
For w is xyz, and y cannot be null,
And y must come before p symbols have been read in full.

As mathematical postscript, an addendum to the wise:


The basic proof we outlined here does certainly generalize.
So there is a pumping lemma for all languages context-free,
Although we do not have the same for those that are r.e.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

176

Teoria da Computao

Cap. 4 Propriedades das linguagens regulares

Outros exemplos

0n1m, n>m
Para qualquer m que me ds apresento a cadeia 0m+11m, que pertence linguagem e maior
do que m. A decomposio xyz tem que ser feita de tal modo que o y composto apenas por
zeros (pelo menos um zero). Bombeando com i=0 apaga-se um 0 e ficando n=m e destruindose assim a condio n>m
Normalmente em problemas deste tipo, com um desigualdade, segue-se esta estratgia:
escolhe-se uma cadeia legtima no limite da desigualdade e depois apaga-se uma parte,
bombeando y0 de modo a destruir a desigualdade.
Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Introduction to Automata Theory, Languages and Computation, 2nd

Ed., John Hopcroft,

Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.


Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

177

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Cap. 4 Propriedades das linguagens regulares

Documento de trabalho

178

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

CAPTULO 5

LINGUAGENS LIVRES DE CONTEXTO

5.1. Introduo

181

5.2 Gramticas livres de contexto

181

5.2.1. Definio e exemplos

183

5.2.2 Derivao pela extrema direita e pela extrema esquerda

188

5.2.3.rvores de derivao (parse trees)

190

5.3. Parsing

194

5.3.1.Parsing e ambiguidade

194

5.3.2 Ambiguidade nas gramticas e nas linguagens

203

5.4. Gramticas livres de contexto e linguagens de programao

210

Biliografia

211

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

179

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Cap.5 Linguagens Livres de Contexto

Documento de trabalho

180

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

5.1. Introduo
Conclumos o captulo anterior provando que h algumas linguagens que no so regulares.
De facto h muitas linguagens no regulares, e so tantas que se podem classificar em vrias
famlias, como veremos posteriormente.
As linguagens livres de contexto constituem a famlia mais importante de linguagens, a ela
pertencendo as linguagens de programao. As linguagens regulares so um caso particular de
linguagens livres de contexto, constituindo uma sub-famlia destas.

Linguagens livres de contexto


Linguagens
regulares

Figura 5.1.1. Relao entre as linguagens regulares e as linguagens livres de contexto.


Neste captulo estudaremos as linguagens livres de contexto usando sobretudo as
gramticas (livres de contexto) e suas propriedades. Como veremos no Captulo 6 os
autmatos finitos no so capazes de reconhecer linguagens livres de contexto no-regulares
por no terem memria.

5.2. Gramticas livres de contexto


Nas gramticas lineares que estudmos anteriormente existem duas restries fundamentais:
-

na parte esquerda das produes existe apenas uma varivel

na parte direita existe apenas uma varivel na posio mais esquerda ou mais
direita.

Relaxando a segunda restrio, e permitindo que a existam diversas variveis em qualquer


posio, obtm-se as gramticas livres de contexto.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

181

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

5.2.1. Definio e exemplos


Definio 5.2.1. Gramtica livre de contexto e linguagem livre de contexto.
Uma gramtica G = ( V, T, S, P ) chamada livre de contexto se todas as produes em P tm
a forma
Ax
em que AV e x(VT)*, isto , x uma expresso qualquer composta por variveis e/ou
caracteres terminais ambos em nmero arbitrrio.
Uma linguagem livre de contexto se e s se existir uma gramtica livre de contexto tal
que L = L(G).
Note-se que toda a gramtica regular tambm livre de contexto, e portanto toda a
linguagem regular tambm livre de contexto.
O nome de livre de contexto advm do seguinte facto: a substituio de uma varivel na
parte esquerda de uma produo pode fazer-se em qualquer altura em que essa varivel
aparea numa forma sentencial. Essa substituio no depende dos smbolos do resto da
forma sentencial, ou seja, no depende do seu contexto. Esta caracterstica resulta da
existncia de uma s varivel na parte esquerda das produes. Se existissem duas como por
exemplo em
AB x
a produo s se poderia aplicar quando aparecesse o par AB ou seja, quando fosse esse o
contexto de A e de B. Esta gramtica diz-se por isso dependente do contexto.
Exemplo 5.2.1.
A gramtica G=({S}, {a,b}, S, P} com produes
S aSa
S bSb
S
livre de contexto.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

182

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Uma derivao possvel,


S aSa aaSaa aabSbaa aabbaa
Cada S introduz ou um par de as ou um par de bs, sempre no meio da forma sentencial, e
por isso no final a cadeia obtida par e simtrica em relao ao seu centro.
A linguagem desta gramtica L(G) ={wwR : w {a,b}*}, uma linguagem livre de
contexto no regular. Tente o leitor desenhar para ela um autmato finito.
Exemplo 5.2.2.
A gramtica G com produes
S abB
A aaBb
B bbAa
A
livre de contexto.
Uma derivao dela:
S abB abbbAa abbbaaBba abbbaabbAaba abbbaabbaaBbaba
abbbaabbaabbAababa abbbaabbaabbaaBbababa abbbaabbaabbaabbAabababa

abbbaabbaabbaabbaaBbabababa abbbaabbaabbaabbaabbAababababa
abbbaabbaabbaabbaabbababababa
No fcil, olhando para as produes, generalizar a forma das cadeias obtidas pela
gramtica. Fazendo uma anlise experimental, produzindo cadeias de vrios comprimentos,
ou construindo uma rvore de derivao, verifica-se que L(G)= {ab(bbaa)nbba(ba)n : n 0 }.
Exemplo 5.2.3.
Mostrar que a linguagem L = {anbm : n m } livre de contexto. Note-se que pela definio
da linguagem o nmero de as tem que ser diferente do nmero de bs.
Para isso tem que se encontrar uma gramtica livre de contexto que a produza. Para o caso
n = m viu-se no exemplo 1.3.2 do Cap. 1, obtendo-se

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

183

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

G =({S}, {a,b}, S, P)
S aSb|
Seja agora o caso n > m.
Primeiro forma-se uma cadeia com um nmero igual de as e de bs; de seguida
acrescente-se um a adicional esquerda. Para isso usam-se aquelas produes do caso n=m e
alm disso uma para introduzir um ou mais as adicionais:
S AS1,
S1 aS1b | ,
A aA | a
Note-se que a segunda produo gera um nmero igual de as e de bs. A ltima acrescenta
as esquerda. A primeira, ao criara o A logo de incio, torna possvel a ltima.
Esta gramtica no linear porque na primeira produo aparecem duas variveis no lado
direito. Mas livre de contexto porque do lado esquerdo aparece s uma varivel.
Tomemos agora o caso n < m. Aqui temos uma situao contrria anterior: introduzemse tantos as como bs e depois introduzem-se direita um ou mias bs. Teremos as produes
S S1B,
S1 aS1b | ,
B Bb | b.
Para o caso n m, juntam-se os dois conjuntos de produes, obtendo-se:
S AS1| S1B,
S1 aS1b | ,
A aA | a,
B Bb | b.
Note-se que para juntar os dois conjuntos de produes basta pr as duas primeiras
alternativas a partir de S.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

184

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Exemplo 5.2.4
Considere-se a gramtica com produes
S aSb | SS |
Trata-se de uma gramtica livre de contexto e no linear (porqu?).
Algumas cadeias geradas:
S SS SSSS aSbaSbaSbaSb abababab
S aSb aSSb aaSbSb aaaSbbaSbb aaaSSbbaaSbbb

aaaaSbaSbbbaaSbbb aaaababbbaabb.
Gera cadeias com um nmero de as igual ao nmero de bs (porqu ?) e em que o nmero
de as em qualquer prefixo de qualquer cadeia maior ou igual ao n de bs, i.e.
L = {w {a,b}* : na(w) = nb(w) e na(v) nb(v), v um prefixo qualquer de w}
e em que o nmero de bs em qualquer sufixo de qualquer cadeia maior ou igual ao n de
as, i.e.
L = {w {a,b}* : na(w) = nb(w) e na(u) nb(u), u um sufixo qualquer de w}
Substituindo a por parntese esquerda e b por parntese direita, obtm-se a linguagem
para descrever a regra dos parnteses nas linguagens de programao. Ela contm por
exemplo os casos (), (()), ((()())), ()()()(); etc. Esta situao dada pela gramtica
G=({S}, {(,)}, S, P)
com produes
S (S) | SS |
Uma derivao ser
S (S) (SS) ((S)S) (( )S) (( ))

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

185

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Neste exemplo os parnteses fazem parte do alfabeto da linguagem. J no captulo 1 vimos


que um alfabeto pode ser composto por qualquer tipo de objectos.
Exemplo 5.2.5
Palndromos em {0, 1}, (Hopcroft, 170).
A linguagem dos palndromos pode-se definir por induo:
Base da induo: , 0 e 1 so palndromos (palndromos elementares)
Induo: se w um palndromo, tambm o so 0w0 e 1w1.
Nenhuma cadeia um palndromo de 0s e 1s a menos que seja formada a partir destas
regras, que se podem traduzir pelas produes seguintes:
1. P
2. P 0
3. P 1
4. P 0P0
5. P 1P1
Exemplo 5.2.6
Seja o alfabeto ={x, y, z, +, - , ( , )}. Encontrar uma gramtica que gere todas as expresses
aritmticas possveis com este alfabeto, com por exemplo { x, y, z, x+y, x-y, x+(y-z), }.
Uma soluo possvel:
G=({E,V}, { x, y ,z, +, - , (, ), E, P)
Em que o conjunto P composto pelas seguintes 7 produes
1. E E + E
2. E E - E
3. E (E)
4. E V
5. V x

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

186

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

6. V y
7. V z
Como se poder gerar x+(y-z) ?
EE+E

(prod. 1)

V+E

(prod. 4)

x+E

(prod. 5)

x + (E)

(prod. 3)
x + (E - E) (prod. 2)
x + (V - E) (prod. 4)
x + (y - E) (prod. 6)
x + (y - V) (prod. 4)
x + (y - z) (prod. 7)
Exerccio 5.2.1.
Considere a gramtica com as produes
S 0B | 1A
A 0 | 0S | 1AA
B 1 | 1S | 0BB
Gere cinco cadeias com a gramtica. Que linguagem lhe est associada?
5.2.2. Derivao pela extrema direita e pela extrema esquerda
Nas gramticas livres de contexto no lineares aparece mais do que uma varivel na parte
direita das produes. Tem-se por isso uma escolha na ordem pela qual se substituem as
variveis. Por exemplo,
G=({A,B,S}, {a,b}, S, P} com produes
1.

S AB

2.

A aaA

3.

4.

B Bb

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

187

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

5.

Exemplo de derivao (o nmero da produo aplicada est indicado sobre a seta):


1

S AB aaAB aaB aaBb aab


1

S AB ABb aaABb aaAb aab


A linguagem correspondente L(G) = {a2nbm: n0, m 0 }
Nestas duas derivaes obtm-se o mesmo resultado, usando precisamente as mesmas
derivaes mas por ordem diferente. Ser sempre assim? Se se usam as mesmas derivaes,
ainda que por diferente ordem, introduzem-se os mesmos caracteres nas formas sentenciais e
na sentena final, mas pode acontecer de diferentes ordens de aplicao das produes
resultem em cadeias diferentes. Por exemplo as produes
1. S aSb
2. S bSa
3. S
A produo 1-2-3 d
1

S aSb abSab abab


e a produo 2-1-3
2

S bSa baSba baba


d uma cadeia diferente. Portanto a ordem das produes importa. Neste caso aplicando a
produo 1 em primeiro lugar produzem-se cadeias que comeam por a, e aplicando a 2 em
primeiro lugar cadeias que comeam por b.
Definio 5.2.2
Uma derivao diz-se pela extrema esquerda se em cada passo se substitui a varivel mais
esquerda na forma sentencial.
Se se substituiu a varivel mais direita, a derivao diz-se pela extrema direita.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

188

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Exemplo 5.2.7
Seja a gramtica com as produes
S aAB,
A bBb,
BA|
Ento
S aAB aA abBb abAb abbBbb abbbb
uma derivao pela direita e
S aAB abBbB abAbB abbBbbB abbbbB abbbb
uma derivao pela esquerda.

5.2.3.rvores de derivao (parse trees)


As rvores de derivao so uma alternativa escrita das produes, permitindo uma
visualizao grfica do processo de gerao de cadeias. Por outro lado, lidas de forma inversa,
permitem reconstruir as produes a partir da cadeia.
Um rvore de derivao uma rvore ordenada em que
-

os vrtices iniciais e intermdios so as variveis da gramtica, etiquetados pelo


lado esquerdo das produes

os filhos de um vrtice representam os lados direito correspondente ao n pai.

Por exemplo a rvore da Fig. 5.2.1corresponde s produes:


S abABc
A
Bc

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

189

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

vrtice raiz

5 filhos da
raiz

vrtice interior

folha

Figura 5.2.1. Uma rvore de derivao.

A partir da raiz aplica-se a primeira produo, dando 5 filhos, dos quais 3 so folhas e 2
so vrtices interiores (variveis). Depois do vrtice A resulta a folha c pela segunda produo
e do vrtice B a folha pela terceira produo. Na rvore nada indica a ordem de aplicao
das segunda e terceira produes.
Uma rvore de derivao inicia-se na raiz, com o smbolo inicial (em geral S), e termina
em folhas que so terminais (smbolos do alfabeto). Em cada nvel mostra como se substitui
cada varivel nas derivaes. Quando um vrtice contm um smbolo terminal, dele no parte
qualquer aresta. Apenas dos vrtices com variveis, chamados vrtices interiores (no raiz),
partem arestas.
Vejamos a definio formal.
Definio 5.2.3. rvore de derivao
Seja G = (V, T, S, P) uma gramtica livre de contexto. Uma rvore ordenada uma rvore de
derivao para a gramtica G se e s se tiver as seguintes propriedades:
1. A raiz etiquetada pelo smbolo inicial, em geral S.
2. Todas as folhas tm uma etiqueta de T {}, isto , um smbolo terminal
3. Todos os vrtices interiores (vrtices que no so folhas) tm uma etiqueta de V,
i.e., uma varivel.
4. Se um vrtice tem uma etiqueta A V, e se os seus filhos so etiquetados (da
esquerda para a direita) a1, a2,..., an ento P deve conter a produo da forma

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

190

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

A a1 a2 ..., an
em que ai pode ser um smbolo terminal ou uma varivel.
5. Uma folha etiquetada no tem irms, i.e., um vrtice com um filho no pode
ter outros filhos.
Se uma rvore verifica as propriedades 3, 4 e 5, mas a propriedade 1 no se verifica
necessariamente e a propriedade 2 substituda por
2a. Todas as folhas tm etiquetas de V T {}, i.e., uma varivel ou um smbolo
terminal,
diz-se uma rvore de derivao parcial, sendo parte de uma rvore maior. Isto , se
extrairmos de uma rvore de derivao uma sub-rvore interior, esta ser uma rvore de
derivao parcial, podendo ter variveis nas folhas. Uma rvore de derivao parcial deriva
formas sentenciais e pode no derivar cadeias terminais. Pelo contrrio uma rvore de
derivao total d sempre cadeias terminais. Uma rvore de derivao por defeito total, e
portanto no necessrio adjectiv-la.
Lendo as folhas da rvore, da esquerda para a direita, omitindo quaisquer que se
encontrem, obtm-se o fruto (yield) da rvore. O fruto a cadeia de terminais obtida quando
se percorre a rvore de cima para baixo, tomando sempre o ramo inexplorado mais
esquerda.
Exemplo 5.2.8
Seja a gramtica G=({S,A,B}, {a,b}, S, P} com produes
S aAB,
A bBb,
BA|
A rvore de derivao parcial da Fig. 5.2.2 corresponde a
S aAB abBbB

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

191

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Figura 5.2.2. rvore


de derivao parcial

A rvore de derivao Fig. 5.2.3 corresponde derivao pela esquerda


S aAB abBbB abbA abbbBb abbbb
S

A
b

Figura 5.2.3. rvore de derivao total

ou derivao pela direita


S aABaAA aAbBb aAbbabBbbbabbbb
Uma outra rvore de derivao Fig 5.2.4 corresponde a (pela esquerda)
S aAB abBbB abbB abb
ou a (pela direita)
S aAB aA abBb abb

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

192

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Figura 5.2.4. Outra rvore de derivao

Podemos ver que uma rvore de derivao est ligada a uma derivao particular e no
um esquema geral de derivaes para uma dada gramtica. Cada cadeia ter a sua rvore de
derivao prpria. Alm disso a rvore exprime uma derivao pela direita ou uma derivao
pela esquerda.
Dada uma gramtica livre de contexto G=(V, T, S, P), para toda a cadeia w L(G), existe
uma rvore de derivao de G cujo fruto w. Basta desenh-la aplicando as produes que
geraram w.
Inversamente, o fruto de qualquer rvore de derivao, desenhada de acordo com as
produes de P, pertence L(G).
Por outro lado se tG alguma rvore de derivao parcial de G cuja raiz est etiquetada por
S, ento o fruto de tG uma forma sentencial da gramtica G.
O leitor pode ver uma prova formal por induo destas afirmaes em Linz p. 132.
As rvores de derivao evidenciam as produes usadas na obteno de uma qualquer
cadeia, mas no explicitam a ordem da sua aplicao. Qualquer cadeia wL(G) tem uma
derivao pela extrema esquerda e uma derivao pela extrema direita. Este facto interessante
constata-se observando que a rvore tanto pode ser desenhada da esquerda para a direita
(produes pela esquerda) como da direita para a esquerda (produes pela direita).
As rvores de derivao, na literatura de lngua inglesa (por exemplo em Hopcroft, ou em
Sipser), so chamadas parse trees. Elas mostram como os smbolos terminais de uma cadeia
se agrupam em sub-cadeias, cada uma das quais pertence linguagem de uma das variveis
da gramtica, isto , ao conjunto das cadeias gerveis a partir de uma varivel da gramtica
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

193

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

num vrtice interior. Nos compiladores as rvores de parsing so a estrutura de dados


escolhida para representar o cdigo fonte de um programa. essa estrutura de dados assim
definida que facilita a traduo do cdigo fonte em cdigo executvel, ao permitir que sejam
usadas funes recursivas para o processo de traduo. Na disciplina de compiladores ter o
leitor oportunidade de aprofundar esta questo. A palavra derivao pode, at certo ponto, ser
usada como traduo de parsing. No entanto parsing no a derivao em si mesma mas a
sua procura e por isso mantm-se o termo parsing original, falta de melhor traduo.

5.3. Parsing
Dada uma gramtica qualquer, sabemos gerar cadeias da sua linguagem, aplicando as suas
produes. As cadeias geradas pertencem linguagem da gramtica.
Mas podemos agora considerar a questo inversa. Dada uma cadeia w, como saber se ela
pertence a uma certa linguagem L(G) ? Este o problema da pertena, que j conhecemos
das linguagens regulares.
E se a cadeia pertence linguagem, qual a sequncia de produes que a gerou? Este o
problema de parsing : encontrar uma sequncia de produes pelas quais se deriva wL(G).
O conceito de parsing, uma palavra difcil de traduzir, aplica-se no estudo das linguagens
naturais (ver por exemplo em http://nltk.sourceforge.net/doc/en/parse.html) e nas linguagens de
computador. Os compiladores quando analisam um programa escrito numa dada linguagem,
fazem precisamente isso: procuram a sequncia de produes da gramtica da linguagem que
levou ao programa concreto. Se no a encontram, indicam erro. Se a encontram, a compilao
bem sucedida.
5.3.1. Parsing e ambiguidade
O parsing uma operao delicada, que tem absorvido uma parte significativa da investigao
em computao a nvel mundial. Se imaginarmos que os programas de computador so cada
vez maiores, fazer o seu parsing em tempo til (para o compilar depois) um desafio para o
qual ainda hoje se procuram respostas melhoradas. As tcnicas de parsing baseiam-se na
teoria de grafos e seus algoritmos (por isso a teoria de grafos um dos mais importantes
temas matemticos das cincias da computao).

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

194

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Dada uma cadeia w em L(G) pode-se fazer o seu parsing por procura exaustiva,
construindo sistematicamente todas as derivaes possveis (pela esquerda, por exemplo) e
verificando se se obtm a procurada w ou no. Esta tcnica executa-se por voltas sucessivas,
at que se encontre uma resposta. Procede-se do modo seguinte.
1 volta - analisar as produes do tipo
Sx
encontrando todas as formas sentenciais e cadeias x que se podem obter de S em um passo.
Alguma w? Se sim parar
2 volta aplicar todas as produes possveis varivel mais esquerda em cada forma
sentencial x da 1 volta, obtendo-se um conjunto de formas sentenciais alcanveis em dois
passos.
Alguma w ?
3 volta aplicar todas as produes possveis varivel mais esquerda em cada forma
sentencial obtida da 2 volta, obtendo um novo conjunto de formas sentenciais alcanveis em
trs passos.
Alguma w ?
e assim sucessivamente.
Se w L(G), deve ter uma derivao de extrema esquerda de comprimento finito. Por isso
este mtodo exaustivo h-de encontrar a soluo, se ela existir.
Trata-se de um mtodo de parsing de cima-para-baixo, que pode ser visto simplesmente
como a construo da rvore de derivao para baixo a partir da raiz.
Exemplo 5.3.1
Seja a gramtica com as produes
S SS | aSb | bSa | .
Fazer o parsing da cadeia w = aabb.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

195

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Vejamos como se aplica a procura exaustiva, desenhando a rvore da procura.


1 volta: inicializar a produo da gramtica a partir da raiz S
S

SS

aSb

bSa

Figura 5.3.1. Primeira volta do parsing de aabb.

Nenhuma cadeia produzida w. Podem-se desde j eliminar as folhas de bSa (dado que w
se inicia por a) e (dado que |w|>0). Em cada etapa segue-se apenas por onde possa estar a
soluo. Caminhos que se sabe serem estreis no de prosseguem.
Note-se a diferena entre rvore de derivao (ou rvore de parsing) , que vimos atrs, e
esta rvore de procura de cadeias. Os filhos da raiz so as produes alternativas a partir de S,
e portanto as suas etiquetas so formas sentenciais ou sentenas (da a sua forma rectangular
para distinguir dos crculos da rvore de derivao). Por outro lado esta rvore de procura
bastante genrica e no afecta apenas a uma cadeia (embora se v particularizando media
que se prossegue, pelo abandono de caminhos inexequveis).
2 volta: a partir dos vrtices restantes da etapa 1, gerar todos os filhos possveis, usando
uma e uma s produo pela esquerda. Por exemplo em SS substitui-se apenas o primeiro S.
S

SSS

aSbS

bSa

aSb

SS

bSaS

aSSb

aaSbbb

abSab

ab

Figura 5.3.2. Segunda volta do parsing exaustivo

Nenhuma cadeia w. Podem-se desde j eliminar as folhas que comeam por b ou cujo
segunda carcter b.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

196

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

3 volta: prossegue-se a partir de cada vrtice da 2volta, com produes pela esquerda.
S

SSS

SSSS

aSSbS

aSbS

aSbSS

aaSbbS

bSa

aSb

SS

bSaS

bSaSS

SS

abSabS

aSSb

aaSbSb

aSSSb

abbS

aaSbb

aaSSbb

abSab

ab

abSaSb

aSb

aaaSbbb

aabSabb

aabbb

Figura 5.3.3. Terceira e ltima volta do parsing de aabb

E encontrou-se finalmente a cadeia aabb. A sua derivao est identificada. O seu parsing
est concludo. Ela foi produzida pelo caminho assinalado a tracejado.
SaSbaaSbbbaabb
Como se pode ver, o parsing exaustivo tem algumas desvantagens. Se a cadeia fosse muito
grande, a rvore de procura seria tambm muito grande. Alm disso um processo fastidioso,
parecido com os mtodos de fora bruta que consistem em experimentar todas as
alternativas possveis para um problema. Por isso um processo pouco eficiente, e nenhum
compilador o usa hoje em dia. Tem apenas um interesse didctico, ajudando-nos a perceber a
essncia do processo de parsing.

Tem alm disso um problema maior: pode nunca terminar se a cadeia no est na
linguagem (verificar neste caso o que acontece para w= abb), a menos que se introduza um
mecanismo de paragem ao fim de certo tempo.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

197

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Como evitar a no paragem do parsing?


Se admitirmos que uma cadeia, por muito grande que seja, finita em tamanho, o parsing
exaustivo acabar por parar, desde que de etapa para etapa aumente o tamanho das formas
sentenciais. Se na gramtica existirem produes do tipo
S

(reduz o tamanho da forma sentencial)

A B (mantm o tamanho da forma sentencial


esse facto no est assegurado. Portanto produes deste tipo devem ser eliminadas,
introduzindo-se assim algumas restries na forma da gramtica. Tal no acarreta problemas
adicionais dado que tais restries no diminuem significativamente o poder das gramticas
livres de contexto. No Captulo 6 estudaremos tcnicas de eliminar produes daqueles tipos
(chamadas nulas e unitrias) nas gramticas livres de contexto.
Exemplo 5.3.2.
A gramtica com produes
S SS | aSb | bSa | ab | ba
obedece restrio acima mencionada. Pode-se verificar que gera a mesma linguagem do
exemplo anterior, mas agora sem a cadeia vazia.
Uma produo possvel (de extrema esquerda):
S SS aSbS abSabS abababS abababba
Outra produo (de extrema direita) :
S SS SaSb SabSab SabbSaab Sabbabaab baabbabaab
Repare-se que as sucessivas formas sentenciais aumentam de tamanho pelo menos em uma
unidade, e portanto ao fim de n voltas elas tero pelo menos n+1 caracteres.
Considere-se o seguinte exemplo para nos apoiar na anlise.
Uma outra produo possvel pela esquerda:

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

198

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

S SS aSbS abSabS abSSabS abbSaSabS abbaSbaSabS

abbaabbaSabS abbaabbabaabS abbaabbabaabba


As formas sentenciais vo aumentando em comprimento e contm variveis e smbolos
terminais.
Outra produo
S SS SSS SSSS SSSSS SSSSSS SSSSSSS abSSSSSS abbaSSSSS

abbabaSSSS abbabaabSSS abbabaabbaSS abbabaabbabaS


abbabaabbabaab

Tambm

aqui

as

formas

sentenciais

vo

aumentando de comprimento. Inicialmente contm apenas variveis, mas a partir da 6


produo elas comeam a ser substitudas por caracteres do alfabeto (smbolos terminais) at
que a cadeia seja obtida.
Dada uma cadeia w {a,b}+, o mtodo de parsing exaustivo termina sempre em no mais
do que 2|w| voltas. Depois de (no mximo, caso extremo) |w| voltas, teremos enumerado todas
as formas sentencias com |w| caracteres. Essas formas sentenciais tm variveis e smbolos
terminais. No caso limite podem ter apenas |w| variveis e nenhum smbolo terminal. A partir
daqui necessrio substituir cada uma das variveis para se obter uma cadeia de smbolos
terminais. Na pior das hipteses, substitui-se uma varivel por um smbolo terminal de cada
vez, o que implica mais |w| voltas. Assim, na pior das hipteses, o parsing leva 2|w| voltas a
completar-se (ou o parsing encontrado ou a cadeia no pertence linguagem). Da o
teorema seguinte.
Teorema 5.3.1. Considere-se uma gramtica livre de contexto que no tem qualquer produo
da forma
A
AB
em que A, B V. Ento o parsing exaustivo pode ser feito por um algoritmo que, para
qualquer w *, ou produz o parsing de w, ou conclui que no possvel qualquer parsing
para w.
Qual o nmero mximo de formas sentenciais que se podem obter pelo parsing exaustivo ?

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

199

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

A gramtica tem um nmero de produes distintas igual a |P|.


Na 1 volta obtm-se |P| formas sentenciais.
Na 2 volta obtm-se |P||P|=|P|2 formas sentenciais, no mximo.
Na 3 volta obtm-se |P|2|P|=|P|3 formas sentenciais, no mximo.
...
Na 2|w| volta obtm-se |P|2|w| formas sentenciais, no mximo.
Somando agora ao longo de todas as voltas, obtm-se o limite superior para o nmero de
formas sentenciais que se podem obter:
F = |P| + |P|2 + |P|3 + ... + |P|2|w|
A ltima parcela evidencia que o comprimento da cadeia expoente do ltimo termo da
soma. Prova-se assim que o trabalho de busca cresce exponencialmente com o comprimento
da cadeia, podendo tornar proibitivo o custo (computacional) do mtodo.
Este um problema central em teoria da computao: encontrar mtodos de parsing que
tenham menor complexidade computacional (isto , que sejam mais rpidos). Ainda hoje um
importante tema de investigao. Repare-se que para um compilador a cadeia em causa o
programa completo. Fazer o parsing da cadeia verificar se o programa obedece s produes
da gramtica da linguagem, isto , se est bem escrito.
Pode-se demonstrar que para quaisquer gramticas livres de contexto existe um algoritmo
que faz o parsing de qualquer cadeia w num tempo proporcional a |w|3. melhor do que
crescimento exponencial, mas ainda muito ineficiente (um compilador que fosse por a,
demoraria um tempo exagerado a compilar um programa). O que ainda se busca actualmente
um algoritmo de parsing que demore um tempo linear com o comprimento da cadeia para
qualquer gramtica livre de contexto.
Felizmente para algumas gramticas especiais j se encontrou um mtodo linear. So as
chamadas gramticas simples.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

200

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Definio 5.3.2. Uma gramtica livre de contexto G = (V, T, S, P ) uma gramtica simples
ou uma s-gramtica se todas as suas produes se iniciam por um smbolo terminal seguido
de zero ou mais variveis, ou seja, se so da forma
A ax
em que AV, aT, xV*, e qualquer par (A, a) aparece no mximo uma vez em P.
Em cada produo substitui-se uma varivel por um smbolo terminal e uma combinao
de variveis. Assim aumenta-se, por cada produo, exactamente em uma unidade o nmero
de caracteres terminais em cada forma sentencial. Ao fim de |w| produes j se introduziram
|w| smbolos terminais e portanto j se encontrou a cadeia se ela pertence linguagem. Podese parar ao fim de |w| voltas e por isso o nmero de voltas cresce linearmente com |w|.
Exemplo 5.3.3.
A gramtica com as produes
S aS | bSS | c
uma s-gramtica.
Uma produo possvel ( direita):
S aS abSS abSaS abSac abcac
Para se introduzir a, b ou c na forma sentencial h apenas uma possibilidade em cada volta.
A gramtica com produes
S aS | bSS | aSS | c
no uma s-gramtica porque o par (S, a) aparece nas duas produes S aS e S aSS.
Uma produo possvel:
S aS abSS abSaSS abSaSbSS abSaSbSc abSaSbcc abSacbcc abcacbcc

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

201

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Aqui tambm o nmero de caracteres terminais aumenta em uma unidade por cada
produo. Para se introduzir a na forma sentencial h duas possibilidades (duas produes
possveis) e da o facto de o processo de parsing ser mais longo.
Muitas caractersticas de linguagens de programao podem ser descritas por s-gramticas.
Um parsing numa s-gramtica pode ser feito em |w| voltas, e por isso o seu tempo linear
com o tamanho da cadeia.
Exemplo 5.3.4
Seja a gramtica livre de contexto j encontrada no exemplo 5.2.6 (no uma s-gramtica).
EE+E
E E - E
E (E)
EV
Vx
Vz
V y
Como se pode derivar a cadeia x+(y-z)?
Desenhe-se a rvore de derivao, na Figura 5.3.4.
A cadeia x + (y - z) encontra-se lendo as folhas da rvore da esquerda para a directa. Ela o
fruto da rvore.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

202

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

A derivao da cadeia x+(y-z) ser

EE+E
V+E
x+E
x + (E)
x + (E - E)
x + (V - E)
x + (y - E)
x + (y - V)
x + (y - z)

Figura 5.3.4. rvore de derivao do exemplo 5.3.4.

5.3.2. Ambiguidade nas gramticas e nas linguagens


Vimos que dada uma cadeia wL(G), o parsing exaustivo produz uma rvore de derivao.
Relembremos que uma rvore de derivao tem uma derivao pela esquerda e uma derivao
pela direita, e portanto existem duas derivaes para a mesma cadeia associadas mesma
rvore. Situao bem distinta aquela em que existem diversas rvores de derivao para a
mesma gramtica. Neste caso h mais do que uma derivao pela esquerda e mais do que uma
derivao pela direita. Qual usar? Temos uma situao de ambiguidade na linguagem, no
sentido de que no se sabe que rvore usar.

Definio 5.3.3
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

203

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Uma gramtica livre de contexto ambgua se existir alguma cadeia w L(G) que tem pelo
menos duas rvores de derivao possveis. A ambiguidade implica a existncia de duas ou
mais derivaes de extrema esquerda ou de extrema direita.

Exemplo 5.3.5(Linz) :
Seja a gramtica com produes
S aSb | SS |
construir a rvore de parsing de aabb.
H vrias possibilidades:
i)

S aSbaaSbbaabb

ii)

S SSaSbSaaSbbSaabbSaabb

iii) S SSSaSbSaaSbbSaabbaabb
A que correspondem as rvores seguintes, Fig. 5.3.5.
S

Figura 5.3.5. rvores de derivao do exemplo 5.3.5

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

204

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

A segunda e terceira diferem apenas no facto de corresponderem a produes pela


esquerda ou pela direita.
Contrariamente s linguagens naturais, em que a ambiguidade tolerada (tendo at valor
literrio), nas linguagens de programao s pode existir uma interpretao para cada cadeia
(sentena) e por isso no pode existir ambiguidade. Poderia acontecer uma tragdia se um
compilador pudesse fazer o parsing de um programa de dois modos: resultariam dois cdigos
executveis diferentes. Se uma gramtica ambgua, ela deve por isso ser rescrita para a
libertar de toda a ambiguidade.
A ambiguidade pode estar na linguagem ela prpria.
Exemplo 5.3.6
Seja a gramtica com as produes
S AS | a | b
A SS | ab

Para gerar a cadeia abb podem-se seguir duas rvores de

derivao, Fig. 5.3.6

Figura 5.3.6. Exemplo 5.3.6.

Vejamos ainda outro exemplo (Linz, 142, Hopcroft 172).

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

205

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Vamos desenvolver a gramtica que produz cadeias do tipo (a+b)*c, a+b*c, a+b+c,
Trata-se de uma gramtica de expresses aritmticas, do tipo das usadas por linguagens de
programao), em verso muito simplificada, considerando apenas os operadores adio + e
multiplicao * . Os argumentos dos operadores so identificadores, e estes podem ser neste
exemplo a, b ou c.
Necessitamos de duas variveis nesta gramtica. A varivel E representa as expresses; o
smbolo inicial. A varivel I representa os identificadores. Teremos assim a gramtica G= {V,
T, E, P} com
V={E, I}
T={a, b, c,+, *, (, )} e as produes
P:

P1.

EI

P2.

EE+E

P3

EE*E

P4

E (E)

P567 I a | b | c
Para derivar a cadeia a+b*c podem-se seguir duas rvores de derivao, Fig. 5.3.7

Figura 5.3.7. rvores das expresses aritmticas

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

206

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Na rvore da esquerda a subcadeia b*c filha de E, gerada depois da subcadeia a+. Na da


direita a+b filha E, gerada antes de *c. Tendo em conta que a rvore de derivao define a
estrutura de dados usada pelo compilador, teramos na esquerda o cdigo correspondente a
(a)+(b*c) e na direita o cdigo correspondente a (a+b)*(c). S a primeira est certa. Temos
aqui o problema da precedncia dos operadores aritmticos. Uma gramtica assim poderia
produzir resultados errados. A gramtica ambgua e a sua ambiguidade que leva e esta
problema.
Se o leitor desenhar a rvore de derivao de a+b+c encontrar tambm duas solues
possveis, uma correspondente a a+(b+c) e outra a (a+b)+c. Neste caso no h problemas de
compilao, mas h ambiguidade na mesma.
Para levantar a ambiguidade deve-se alterar a gramtica.
Introduzam-se mais duas variveis, fazendo
V={E, T, F, I},
e faam-se as produes
P1.

ET

P2.

TF

P3.

FI

P3.

EE+T

P4

T T* F

P5

F (E)

P678 I a | b | c
Agora para derivar a mesma cadeia a+b*c teremos a rvore da Fig. 5.3.8.
O leitor pode tentar uma outra rvore de derivao desta cadeia. No a encontrar porque a
gramtica no ambgua. Note-se que este problema de saber se uma gramtica ou no
ambgua no tem ainda uma soluo geral; s para algumas gramticas, por anlise prpria, se
pode obter a resposta.
Esta gramtica produz a mesma linguagem da gramtica ambgua e nesse sentido as duas
so equivalentes. No entanto podem produzir resultados de compilao diferentes.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

207

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Figura 5.3.8.rvore de derivao refeita

Exemplo 5.3.7
Se quisermos uma gramtica no-ambgua de expresses aritmticas com identificadores mais
gerais, podendo conter as, bs, cs, 0s e 1s, mas iniciando-se sempre por uma das letras (a
linguagem dos identificadores a da expresso regular (a+b+c)(a+b+c+0+1)* ), basta
substituir na gramtica anterior as produes P678 por I a | b|c| Ia | Ib|Ic | I0|I1|, obtendose a gramtica escrita em forma compacta seguinte (Hopcroft, 172):
ET | E+T
TF | T*F
FI | (E)
I a | b | c | Ia | Ib | Ic | I0 | I1
H gramticas ambguas que se podem tornar em gramticas no ambguas por pequenas
alteraes na sua estrutura, como foi o caso deste exemplo. Nem sempre assim acontece. De
facto h linguagens que so elas mesmas ambguas e por isso no possvel encontrar para
elas uma gramtica no ambgua.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

208

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Definio 5.3.4
Se L uma linguagem livre de contexto para a qual existe uma gramtica no ambgua, ento
L diz-se no ambgua. Se toda a gramtica que gera L ambgua, neste caso a linguagem
diz-se inerentemente ambgua.
Exemplo de linguagem inerentemente ambgua (Hopcroft, 212)
L = {anbncmdm, n 1, m 1) {anbmcmdn, n 1, m1}
Esta linguagem composta por todas as cadeias a+b+c+d+ tal que
i) ou existem tantos as e bs e tantos cs e ds
ii) ou existem tantos as e ds e tantos bs e cs
Esta linguagem livre de contexto.
Uma gramtica para ela:
i) Para anbncmdm
S AB
A aAb | ab
B cBd | cd
ii) Para anbmcmdn
SC
C aCd | aDd
D bDc | bc
Juntando agora as duas partes atravs da produo S AB | C vem
S AB | C
A aAb | ab
B cBd | cd
C aCd | aDd
D bDc | bc
LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

209

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Esta gramtica ambgua. A cadeia aabbccdd pode gerar-se por duas derivaes de
extrema esquerda,
1. S AB aAbB aabbB aabbcBd aabbccdd
2. S C aCd aaDdd aabDcdd aabbcdd
cujas rvores de parsing so as seguintes Fig 5.3.9 3 5.3.10 (com folhas simplificadas):

Figura 5.3.9
Figura 5.3.10

5.4. Gramticas livres de contexto e linguagens de programao


As linguagens de programao, com por exemplo o Phyton, Java, o C, o Pascal, so definidas
por gramticas livres de contexto. Para o caso do Java existem diversas verses. A completa,
desenvolvida pela Sun Microsystems, encontra-se na Java Language Specification em,
http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html
Pode ver-se uma outra verso em http://www.lykkenborg.no/java/grammar/JLS3.html

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

210

Teoria da Computao

Cap.5 Linguagens Livres de Contexto

Encontram-se tambm verses muito simplificadas, para fins didcticos, com o a de


http://www.willamette.edu/~fruehr/231/grammar/simplest.html ou a especificao BNF1 para
uma mini Java em http://www.cambridge.org/resources/052182060X/MCIIJ2e/grammar.htm.
Para o Phyton ver uma gramtica BNF em http://docs.python.org/ref/grammar.txt.

Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Introduction to Automata Theory, Languages and Computation, 2nd

Ed., John Hopcroft,

Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.


Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

BNF significa Backus Naur Form.Para mais informao ver por exemplo http://cui.unige.ch/dbresearch/Enseignement/analyseinfo/AboutBNF.html.

LEI/DEI/FCTUC/2009/@ADC

Documento de trabalho

211

Teoria da Computao

LEI/DEI/FCTUC/2009/@ADC

Cap.5 Linguagens Livres de Contexto

Documento de trabalho

212

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

CAPTULO 6

SIMPLIFICAO DE GRAMTICAS LIVRES DE


CONTEXTO E FORMAS NORMAIS

6.1 Introduo

215

6.2 Mtodos para transformar gramticas

215

6.2.1 Eliminao do carcter

216

6.2.2 Uma regra geral para substituir produes

217

6.2.3 Eliminao das produes inteis

218

6.2.4 Remoo das produes

223

6.2.5. Remoo das produes unidade

228

6.3 Formas ou cannicas de Chomsky e de Greibach

233

6.3.1. Forma normal de Chomsky

233

6.3.2 Forma normal de Greibach

240

Bibliografia

243

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

213

Teoria da Computao

LEI/DEIFCTUC/2009/@ADC

Cap. 6 Simplificao de Gramticas e Formas Normais

Documento de trabalho

214

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

6.1. Introduo
No Cap. 5 concluiu-se que certas gramticas so melhores do que outras para efeitos de
parsing. Sabemos tambm que para uma mesma linguagem possvel definirem-se muitas
gramticas.
Poderemos por isso realar a convenincia de, dada uma gramtica livre de contexto numa
forma qualquer, encontrar uma gramtica equivalente que tenha a forma mais adequada para o
parsing. Esta questo o objecto do presente Captulo.
Veremos como eliminar as produes unitrias e as produes vazias de uma gramtica
qualquer.
H gramticas de formas especiais, apelidadas de normais no sentido que elas definem uma
norma qual qualquer gramtica livre de contexto se pode reduzir. Estudaremos as duas mais
conhecidas que tm os nomes dos seus autores: a de Chomsky e a de Greibach. Chomsky,
Professor de Lingustica no Massachusetts Institute of Technology (MIT), um reputado
linguista e cidado, estudou as linguagens humanas e a partir da elevou-se a um dos tericos
principais em gramticas formais (isto , gramticas das linguagens computacionais). Sheila
Greibach, Professora de Cincias da Computao da Universidade da Califrnia em Los
Angeles (UCLA), tambm originria da lingustica e da matemtica aplicada.
O grande objectivo das formas cannicas a obteno de gramticas adequadas para o
parsing e para a construo de autmatos de pilha para linguagens livres de contexto no
regulares (assunto do Captulo 7).

6.2. Mtodos para transformar gramticas


Para se chegar a uma forma cannica necessrio previamente limpar as gramticas de
algumas limitaes estruturais que lhes conferem caractersticas desadequadas. O carcter
vazio de evitar; as produes que no permitam um parsing eficiente, como as produes
unitrias (que no aumentam o tamanho das formas sentenciais), ou as produes lambda (que
reduzem o tamanho das formas sentenciais), ou as produes inteis (que so isso mesmo),
devem ser eliminadas.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

215

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

6.2.1. Eliminao do carcter vazio


A eliminao das produes-, ou produes vazias (ou esvaziadoras, na medida em que vo
esvaziando a forma sentencial, ) uma necessidade para que se torne possvel um mtodo
de parsing exequvel. Mas ser que a eliminao das produes- no amputa a gramtica ( e
a sua linguagem) de propriedades essenciais ? De facto uma gramtica sem produes- no
pode produzir a cadeia vazia. Qual a diferena entre uma linguagem que contenha e uma
que o no contenha? A resposta dada pela propriedade seguinte:
Seja L uma linguagem livre de contexto que contenha .
Seja G =(V, T, S, P) uma gramtica livre de contexto para L-{}, isto , L sem .
Adicione-se uma nova varivel S0 ao conjunto de variveis V, fazendo S0 a varivel inicial
(em vez de S).
Adicione-se tambm a P uma nova produo
S0 S |
Obtm-se assim uma nova gramtica. Esta nova gramtica gera a linguagem L. Por isso as
concluses que se possam tirar para a linguagem L-{} tambm se aplicam a L.
Por outro lado, dada uma qualquer gramtica livre de contexto G, h um mtodo de
obteno de uma gramtica G tal que L(G) = L(G) - {}.
Do ponto de vista prtico no h diferenas entre linguagens livres de contexto que
incluam e as que no incluam. Dada uma linguagem sem , a partir da sua gramtica obtmse uma linguagem que difere desta apenas por conter

, introduzindo aquela pequena

modificao na sua gramtica.


Por isso daqui para a frente neste captulo suporemos apenas linguagens sem , a menos
que se diga o contrrio. Se queremos passar a incluir , basta introduzir a nova produo
acima indicada.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

216

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

6.2.2. Uma regra geral de substituio de produes


Teorema 6.2.2.1.
Seja G = (V,T,S,P) uma gramtica livre de contexto.

Suponha-se que P contm uma

produo da forma
A x1Bx2.
sendo A e B variveis distintas.
Seja
B y1 | y2 | ... | yn
o conjunto de todas as produes em P que tm B como lado esquerdo. Se A produz uma
forma sentencial contendo B e se B produz diversas formas ento pode-se ir directamente de A
para estas formas, eliminando B, que deixa por isso de ser necessria.
A nova gramtica ser G= {V, T, S, P}, em que P se constri de P
A x1Bx2

eliminando a produo

adicionando a produo A x1y1x2 | x1y2x2 | ... | x1ynx2 |

Ter-se- a igualdade
L(G) = L(G)
Este teorema est demonstrado em Linz, p. 151. No entanto ele bastante intuitivo. Se de A
se vai para B e de seguida de B se pode ir para vria destinos, quer dizer que de A se pode ir
tambm para vrios destinos, indirectamente atravs de B. Mas se assim poderemos colocar
esses destinos directamente em A, eliminando B que tem um papel de mero intermedirio
Tem que se ter cuidado em no perder nenhum dos destinos originariamente possveis.
Exemplo:
S aAb
A ab|a|b|

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

217

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Substitui-se por
S aabb|aab|abb|ab
Que produz as mesmas 4 cadeias.

6.2.3. Eliminao das produes inteis


Se tivermos uma produo, numa dada gramtica, que nunca pode ser utilizada, ela intil, e
para no criar eventuais problemas importa remov-la, ficando a gramtica mais limpa.
Seja a gramtica
S aSb | | A,
A aA
Por exemplo derivando
S aSb aaSbb aabb
obtm-se uma cadeia terminal.
Mas se em vez disso utilizarmos a produo S A,
S A aA aaA aaaA ....
nunca mais possvel passar de uma forma sentencial para uma sentena (cadeia s com
smbolos terminais). Cai-se numa armadilha. Por isso aquela produo nunca se pode
utilizar, sendo intil. Neste caso ela alm de intil prejudicial dado que produz um ciclo
infinito. Vejamos mais formalmente as situaes em que uma varivel intil. Sero todas
aquelas em que a varivel no til.
Definio 6.2.3.1.
Seja G = (V, T, S, P) uma gramtica livre de contexto. A varivel A V diz-se til se e s se
existir pelo menos um w L(G) tal que

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

218

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

S xAy w
com x, y em (VT)*.
Uma varivel til se ocorrer pelo menos numa derivao, isto , se contribuir pelo menos
para a derivao de uma sentena. Caso contrrio intil. Uma produo intil se envolve
alguma varivel intil.
Uma varivel pode ser intil por duas razes:
i)

nunca pode ser alcanada a partir da varivel de incio, como por exemplo o B
em
SA
A aA |
B bA

ii)

no pode derivar uma cadeia terminal (sentena) porque cria um ciclo infinito,
com por exemplo a varivel A em
S aSb | | A,
A aA

Felizmente possvel eliminar todas as variveis e todas as produes inteis de uma


gramtica, conforme certificado pelo teorema seguinte, que afirma que para qualquer
linguagem livre de contexto existe uma gramtica sem variveis ou produes inteis.
Teorema 6.2.3.1
Seja G = (V, T, S, P) uma gramtica livre de contexto. Ento existe uma gramtica
equivalente G = (V, T, S, P) que no contm qualquer varivel ou produo intil.
Exemplo 6.2.3.1
Seja a CFG com as produes seguintes (e s essas):
S ABC | b
Aa
B b
LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

219

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

A varivel C s entra na primeira produo. Se a usarmos, nunca mais nos libertaremos de


C que por isso uma varivel intil. Eliminando-a, bem como produo que a contm, fica
S b
Aa
Mas a segunda produo nunca pode ser usada, porque de S no se chega a A ; por isso
elimina-se , reduzindo-se a gramtica final simplesmente a
Sb
Exemplo 6.2.3.2
Seja a gramtica G = (V, T, S, P), em = {a, b}, sendo V = {S, A, B, C} e
P:

S aS | A | C
Aa
B aa
C aCb

reduz-se simplesmente a
S aS | A
Aa
De facto, por inspeco visual, verifica-se que a varivel C intil (cria um ciclo infinito)
e deve ser eliminada, bem como todas as produes em que entra. A varivel B nunca
alcanvel a partir de S, e portanto tambm intil. Ficam apenas as produes que contm S
ou A.
Estes exemplos so muito simples e resolvem-se por mera inspeco visual. Em gramticas
maiores e mais complicadas necessrio um procedimento algortmico para a remoo das
produes inteis, que tem as seguintes etapas.
Etapa A - Construo de uma gramtica intermdia cujas variveis so todas teis. Seja V1
conjunto das variveis teis. Inicialmente est vazio, , e vai-se enchendo em voltas
sucessivas.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

220

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

1. V1 = , inicializao
2. Se A x1 x2 x3...xm com xi V1T, colocar A em V1.
Na 1 volta s entram em V1 variveis que tenham do lado direito apenas smbolos
terminais. De facto neste instante V1 est vazia e portanto V1T=T.
Na 2 volta e seguintes entram as que tenham do lado direito smbolos terminais
e/ou variveis j includas em V1 nas voltas anteriores.
At que no se possam meter mais variveis em V1.
Depois de completado este processo, todas as variveis que possam gerar cadeias
terminais esto em V1. Por outro V1 s contm variveis teis. Ver uma
demonstrao mais formal em Linz, p. 155.
3. As produes P1 da gramtica intermdia so todas as produes da gramtica
original cujos smbolos esto todos em V1T (i.e., todas as suas variveis esto
em V1). Se houver uma varivel que no esteja em V1, ela no produz qualquer
cadeia final, e ser portanto intil e prejudicial. Portanto todas as produes que
tm estas variveis inteis so eliminadas na etapa A.
Etapa B. A partir da gramtica intermdia obtm-se a gramtica final.
Alm das produes j eliminadas na etapa A, pode haver outras que sejam
inteis, no por serem prejudiciais, mas por serem inalcanveis.
Encontrem-se por isso todas as variveis que no podem ser alcanadas a partir de
S e eliminam-se, bem como as suas produes. Para isso usa-se o grafo de
dependncias como ferramenta auxiliar.
O grafo das dependncias tem um n para cada varivel ainda existente. Entre duas variveis
existe uma aresta se as duas esto em lados opostos da mesma produo, ou seja, se uma produz
a outra. Depois de desenhado o grafo, procuram-se os caminhos desde a varivel inicial S at
cada um das restantes variveis. Se entre S e uma varivel A no existe nenhum caminho, ento
A no alcanvel e deve ser eliminada, bem como todas as produes em que entre.
Exemplo 6.2.3.3

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

221

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Seja a gramtica com as produes


S aS | A|C
Aa
BaaD
CaCD
DbD|
Construo da gramtica intermdia cujas variveis so todas teis:
1.- V1=,
2. 1 volta
- colocar A em V1 porque Aa
- colocar D em V1 porque D

V1={A, D}

2 volta
- como S A, S vai para V1
- como B aaD, B vai para V1

V1={S, A, B, D}

3volta
-no h mais variveis para introduzir em B
3. Gramtica intermdia G1 : produes de P1 so as produes originais cujos smbolos esto
todos em V1T (ou seja, todas as suas variveis esto em V1)
S aS | A
A a
B aaD
D bD|
Na segunda parte obtm-se a gramtica G final a partir da gramtica intermdia G1. Para isso
basta encontrar todas as variveis que no so alcanveis a partir de S. Depois eliminam-se
bem como todas as suas produes. Poderemos recorrer ao grafo de dependncias.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

222

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Figura 6.2.3.1 Grafo de dependncia do exemplo 6.2.3.3


Do grafo conclui-se que s ficam as variveis S e A, dado que B e D no so alcanveis a partir
de S.
Assim a gramtica final ter apenas as produes
S aS | A
A a
E aplicando a regra de substituio ficar
S aS | a
que gera a linguagem L(G)={an, n1}.

6.2.4. Remoo das produes


J sabemos o que so produes-: qualquer produo de uma gramtica livre de contexto da
forma
A
Definio 6.2.4.1. Varivel anulvel
Qualquer varivel A para a qual possvel a derivao
*

A
chama-se anulvel (nullable). De facto ela pode-se anular (eliminar) nas formas sentenciais
em que aparecer.
Se uma gramtica gera uma linguagem que no contm , isso no obriga a que a
gramtica seja desprovida de produes-. Por exemplo
S aA
LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

223

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

A aA|
gera a linguagem das cadeias de as, an, n1. No contm , embora a sua gramtica contenha
A. Quando tal acontece possvel eliminar as produes- da gramtica.
Neste caso, fazendo
S aA|a
A aA|a
obtm-se a mesma linguagem (confirme o leitor que assim ).
Tambm para eliminar as produes- necessrio um procedimento algortmico para os
casos mais complicados. Ele fundamentado no teorema seguinte:
Teorema 6.2.4.1.
Seja G uma gramtica livre de contexto tal que no pertence a L(G). Ento existe uma
gramtica equivalente G sem produes- que gera a mesma linguagem.
Demonstrao:
A demonstrao faz-se desenvolvendo o algoritmo que permite encontrar G:
1 etapa- Encontrar o conjunto VN das variveis anulveis, que est inicialmente vazio.
1. Para todo o A tal que existe A , incluir A em VN.
Estas so as variveis anulveis directamente, em um passo.
2. Para todo o B tal que existe a produo
B A1A2 .... An
com A1, A2, ..., An pertencentes todas a VN., incluir B em VN.
Estas so as variveis anulveis indirectamente, atravs de outras, em mais de um passo.
3. Repetir o passo 2 at que no seja possvel adicionar mais variveis a VN

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

224

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Depois da primeira etapa sabemos quais so as variveis anulveis. Se duas delas


aparecerem simultaneamente na mesma produo (lado direito), podem-se anular
simultaneamente ou uma de cada vez, de modo que temos trs situaes distintas que tm que
se considerar para que a gramtica no se altere (tudo o que se podia produzir antes tem que
se continuar a poder produzir depois). Da a segunda etapa de reconstituio das possveis
produes.
2 etapa - Substituio de produes
1. Procurar as produes em P da forma
A x1x2...xm, m 1,

xi V T

tendo do lado direito caracteres terminais e/ou vrias variveis, podendo algumas
ser anulveis.
2. Colocar em P
- esta produo A x1x2...xm, m 1,

xi V T

- as que resultam desta pela substituio das suas variveis anulveis por em
todas as combinaes possveis : se xi e xj so anulveis, cria-se
(i) uma produo em que xi substituda por ,
(ii)outra em que xj substituda por , e
(iii) ainda outra em que xj e xj so ambas substitudas por .
-

se todas as xi so anulveis, a produo A no se introduz em P.

Ver tambm Hopcroft, 259.


Exemplo 6.2.4.1 (Hopcroft, 261)
Sejam as produes
S AB
A aAA |
B bBB |

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

225

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

1 etapa:
1 volta A e B so directamente anulveis.
2volta Depois S tambm o , indirectamente atravs de A e B.
Portanto todas as variveis so anulveis.
2 etapa. Consideramos uma produo de cada vez
S AB desmultiplica-se em
S AB , a produo original
S A , fazendo B=
S B,
S ,

fazendo A=
fazendo A= e B=, mas este caso no se retm.

A aAA multiplica-se em
A aAA
A aA
Aa
B bBB multiplica-se em
B bBB
B bB
Bb
De modo que teremos, concluda a segunda etapa, a gramtica
S AB | A | B
A aAA | aA | a
B bBB | bB | b
sem variveis anulveis.
Estas produes no permitem derivar a cadeia vazia. E se tivermos o caso de uma CFL
com , como fazer ?

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

226

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Se L (G), consideramos em primeiro lugar a mesma linguagem mas sem a que


chamamos L-{}. Poderemos afirmar agora que existe uma gramtica CFG G1 sem
produes- tal que L(G1) = L(G) {}. Depois, e como vimos anteriormente, introduz-se
uma nova produo
S0 S|
Naturalmente que para incluir esta possibilidade se introduziu uma varivel anulvel S0, o
novo axioma.
Exemplo 6.2.4.2
Seja a gramtica com as produes
S aAbBc
A BC
B bB|b|
C D|
Dc
Obteno do conjunto das variveis anulveis:
B

donde

VN={B, C}

A BC

donde

VN={A, B, C}
VN={A, B, C}

Agora
3

No h mais
S aAbBc resulta em

A BC resulta em

LEI/DEIFCTUC/2009/@ADC

S aAbBc
S abBc

(anula A)

S aAbc

(anula B)

S abc

(anula A e B)

A BC
AC

(anula B)

AB

(anula A)

Documento de trabalho

227

Teoria da Computao

B bB resulta em

Cap. 6 Simplificao de Gramticas e Formas Normais

B bB
Bb

(anula B)

C D resulta em

CD

D c resulta em

Dc

Chegamos assim a 11 produes para a gramtica final.

6.2.5. Remoo das produes unidade


As produes unidade no aumentam o comprimento das formas sentenciais, o que dificulta o
parsing. Por isso devem ser eliminadas, sem que a gramtica se altere.
Definio 6.2.5.1. Produo unidade
Qualquer produo de uma gramtica livre de contexto da forma
AB
em que A, B V so variveis, chama-se produo unidade. O seu nome vem do facto de
no alterar o comprimento da forma sentencial, ou seja, de multiplicar este comprimento por
1, a unidade.
Qualquer para (A, B) para o qual se possa encontrar uma sequncia de derivaes
*

A B
usando apenas produes unidade um par unidade.
Pares unidade em um passo encontram-se por inspeco visual. Mas numa gramtica com
muitas produes e um grande nmero de variveis, j no to evidente.
Neste caso para descobrir todos os pares unidade, entre as variveis de uma gramtica,
poderemos usar o seguinte algoritmo de induo (Hopcroft, p. 263):

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

228

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Base :
*

(A, A) um par unidade para todo o A em V: A A em zero passos.


Induo:
Se (A, B) um par unidade e
B C uma produo, sendo C uma varivel,
ento (A, C ) um par unidade.
Os grafos de dependncia tambm podem ajudar a identificar os pares unidade.
Identificados os pares unidade, vamos ver como os eliminaremos sem alterar a gramtica.
Tal sempre possvel, conforme afirma o teorema seguinte.
Teorema 6.2.5.1.
Seja G = (V, T, S, P ) qualquer gramtica livre de contexto sem produes-. Ento existe
uma outra gramtica livre de contexto G = (V, T, S, P) equivalente a G que no contm
qualquer produo unidade.
Demonstrao:
A demonstrao faz-se tambm aqui desenvolvendo o procedimento de eliminao dos pares
unidade (demonstrao construtiva).
1 Qualquer produo do tipo A A pode ser removida sem qualquer efeito ( evidente)
2 Colocar em P todas as produes no-unidade de P
3 Procurar todos os pares unidade
4 Para todos os pares unidade (A, B) em P tais que
B y1 | y2 | ...| yn em P
adicionar a P
A y1 | y2 | ...|yn

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

229

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

o que corresponde regra geral de substituio de produes que vimos no pargrafo 6.2.2.
Exemplo 6.2.5.1 (Linz, 160)
Remover todas as produes unitrias da gramtica cujas produes so
S Aa | B
B A | bb
A a | bc | B
1 e 2. Procurar os pares unidade
S B,

logo (S, B) par unidade

B A,

logo (B, A) par unidade

A B,

logo (A, B) par unidade

Se (S, B) e (B, A) so pares unidade (S, A)-tambm o .


O grafo de dependncia das variveis confirma esta deduo. Os seus vrtices so as variveis
que entram em pares unidade. Existe uma aresta entre dois vrtices se as respectivas variveis
fazem um par unidade. A aresta orientada segundo a produo do par unidade. No caso d
Fig. 6.2.5.1.

Figura 6.2.5.1 Grafo de dependncias das variveis de pares unidade do exemplo 6.2.5.1.
Vai-se de S a A atravs de B.
3 Adicionar a P todas as produes no unitrias de P
S Aa
B bb

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

230

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

A a | bc
4 Introduzir as derivaes que substituem os pares unidade de P com produes de P, como
na tabela
Par unidade em P

Produo em P

A criar em P

B bb

S bb

B bb

A bb

A a | bc

B a | bc

A a | bc

S a | bc

S B
A B
B A
S A

Tabela 6.2.5.1.
Tem-se finalmente a nova gramtica simplificada
S Aa |bb | a | bc |
B bb | a | bc
A a | bc | bb
Exemplo 6.2.5.2. (Hopcroft, 263)
Seja a gramtica do exemplo 5.3.7 de criao de expresses numa linguagem de programao
em que os identificadores so definidos do modo seguinte: uma letra seguida por letras ou
nmeros; as letras so a e b e os nmeros 0 e 1, ou seja, o alfabeto ={0,1,a,b} . As
operaes aritmticas usadas so a multiplicao * e a soma +. As suas produes so
ET | E+T
TF | T*F
FI | (E)
I a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1
Vrias so produes unidade. Os pares unidade so:

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

231

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

-directos (E,T), (T,F), (F,I)

T
Fig. 6.2.5.1

- indirectos (E,F), (E,I), (F,I)


F

Note-se que para alm destes pares unidade teremos ainda os da base do algoritmo de
Hopcroft. No grafo de dependncias representar-se-iam como arestas reflexivas em cada
vrtice (do vrtice para ele mesmo).
Atendendo ao grafo de dependncias, mais conveniente eliminar ao pares unidade
comeando pelo fim do grafo, neste caso pelo par (F,I), depois sucessivamente (T,F), (E,T):
(F,I) : FI resulta em F a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1
(T,F): TF resulta em T a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)
(E,T): ET resulta em E a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)|T*F
Juntando agora as produes no-unidade restantes, teremos as produes
Ea | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)|T*F | E+T
T a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)| T*F
Fa | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 | (E)
I a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1
equivalentes s originais, pois geram as mesmas expresses.
Juntando as trs operaes de simplificao que estudmos at aqui, poderemos enunciar o
teorema seguinte.
Teorema 6.2.5.2
Seja L uma linguagem livre de contexto que no contm qualquer . Ento existe uma
gramtica livre de contexto que gera L e que no contm
-

produes inteis

produes-

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

232

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

produes-unidade

Podem-se remover todas as produes indesejveis atravs da seguinte sequncia de passos:


1 - Remover as produes-
2 - Remover as produes-unidade
3 - Remover as produes inteis.
Depois destas simplificaes poderemos prosseguir no sentido de encontrar gramticas que
facilitem o parsing. As formas normais, que tm esse objectivo, requerem estas simplificaes
prvias.

6.3. Formas normais (ou cannicas) de Chomsky e de Greibach


Na famlia das gramticas livres de contexto existem muitas formas normais (i.e., que
obedecem a certas normas, so normalizadas e permitem normalizar em relao a elas
qualquer gramtica CFG). Algumas revestem-se de importncia particular e por isso as
estudaremos de imediato.
6.3.1. Forma normal de Chomsky
Na forma normal de Chomsky a parte direita de qualquer produo no pode ter mais de dois
smbolos.
Definio 6.3.1.1.
Uma gramtica livre de contexto est na forma normalizada de Chomsky se todas as
produes so da forma
A BC
ou
Aa
em que A, B, C pertencem a V e aT.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

233

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Esta gramtica ou aumenta em uma unidade em cada produo o tamanho das formas
sentenciais, ou substitui uma varivel de cada vez por um smbolo terminal. Para derivar uma
cadeia com n smbolos finais so necessrias no mximo 2n-1 produes. Olhando para as
produes v-se que esta gramtica trabalha em duas fases: primeiro cria a forma sentencial
apenas com n variveis. Para duas variveis basta uma produo, trs variveis duas
produes, etc., n variveis n-1 produes. De seguida substitui cada varivel por um smbolo
terminal, precisando de n produes para substituir as n variveis. Logo n-1+n d 2n-1.
Exemplo 6.3.1.1.
Vejamos as produes na FC Chomsky
S SB|a
Bb
Fazendo a derivao
S SB SBB SBBB SBBBB SBBBb SBBbb SBbbb Sbbbb abbbb
obtm-se uma cadeia de 5 caracteres em 9 derivaes.
Teorema 6.3.1
Qualquer gramtica livre de contexto G=(V, T, S, P} com L(G) tem uma gramtica
equivalente G = (V, T, S, P) na forma normal de Chomsky.
Pressupe-se que G no tem produes nem produes inteis nem produes unidade
nem smbolos inteis.
Demonstrao.
Este teorema demonstra-se construindo o algoritmo para transformao na forma de
Chomsky.
1 passo
Para todo o smbolo terminal a que aparece numa produo de corpo (lado direito) com
comprimento igual ou superior a 2, cria-se uma nova varivel Ba. Esta varivel ter uma s
produo Ba a. Usa-se Ba em vez de a nas produes de corpo maior ou igual a 2.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

234

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Cada produo fica com um corpo que ou um terminal simples, ou pelo menos duas
variveis e nenhum terminal.
Vejamos um exemplo para acompanhar o desenvolvimento,
Exemplo 6.3.1.2. Seja
S ABa
A aab
B Ac
Introduzem-se Ba, Bb, Bc para a, b, c , ficando
S ABBa
A BaBaBb
B ABc
Ba a
Bb b
Bc c
2 passo
Partem-se as produes A C1C2....Cn, n 3, num conjunto de produes com duas variveis
no lado direito. Para isso introduzem-se novas variveis D1, D2,..., Dn-2. A produo original
substituda pelas n-1 produes
A C1D1
D1 C2D2
..

Dn-2 Cn-1Dn
Ainda no mesmo exemplo, introduzem-se as variveis D1 (para a primeira produo) e D2
(para a segunda produo). A forma normal de Chomsky ser finalmente,
S AD1
D1 BBa
A BaD2

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

235

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

D2 BaBb
B ABc
Ba a
Bb b
Bc c
Passou-se de 3 para 8 produes. Normalmente este o custo da passagem FN de Chomsky
(FNC): um grande aumento do nmero das produes.
Exemplo 6.3.1.3.
Considere-se a gramtica no-ambgua do Exemplo 6.2.5.2.
ET | E+T
TF | T*F
FI | (E)
I a | b | c | Ia | Ib | Ic | I0 | I1
Reduzir esta gramtica FN de Chomsky.
Olhando com ateno para as produes, nota-se que existem vrias produes unidade. A sua
remoo a primeira etapa para a resoluo do problema.
Remoo das produes unidade (Hopcroft, 263)
Temos que identificar todos os pares unidade. Para isso aplica-se o algoritmo que vimos:
Base: pares unidade (E, E), (T, T), (F, F), (I, I).
Passo indutivo:
E

1.(E, E) e a produo ET d o par unidade (E,T)


2.(E, T) e a produo TF d o par unidade (E,F)
3.(E, F) e a produo FI d o par unidade (E,I )
4. (T, T) e a produo TF d o par unidade (T,F)

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

236

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

5. (T, F) e a produo FI d o par unidade (T,I)


6. (F, F) e a produo FI d o par unidade (F,I)
Encontramos assim 10 pares unidade, incluindo os da base. O grafo de dependncias tambm
evidencia esses pares unidade.
Agora aplicamos a regra de substituio para os pares unidade na tabela seguinte.
Par

Produes

(E, E)

E E+T

(E, T)

E T*F

(E, F)

E (E)

(E, I)

Ea | b | c | Ia | Ib | Ic | I0 | I1

(T, T)

T T*F

(T, F)

T (E)

(T, I)

Ta | b | c | Ia | Ib | Ic | I0 | I1

(F, F)

F (E)

(F, I)

F a | b | c | Ia | Ib | Ic | I0 | I1

(I, I)

Ia | b | c | Ia | Ib | Ic | I0 | I1

Teremos assim a gramtica sem produes unidade, composta pelas 10 produes da segunda
coluna da tabela.
Note-se que a gramtica no tem nem produes- nem produes vazias. Est por isso
pronta para ser passada FN de Chomsky.
Os smbolos terminais desta gramtica so nove, {a, b, c, 0, 1, +, * , ( , )}. Qualquer um deles
aparece no corpo de uma produo com mais de um smbolo. Por isso conveniente

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

237

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

introduzir nove variveis correspondentes aos smbolos terminais, e nove produes


adicionais nas quais essas variveis so substitudas pelo seu carcter terminal. Assim
A a

Z 0

M *

B b

U 1

L (

C c

P +

R )

Introduzindo as variveis substituindo os caracteres finais nos corpos das produes com
mais de um carcter, teremos as produes seguintes
Produes actuais

Novas produes

E E+T

E EPT

E T*F

E TMF

E (E)

E LER

Ea | b | c | Ia | Ib | Ic | I0 | I1

Ea | b | c | IA | IB | IC | IZ | IU

T T*F

T TMF

T (E)

T LER

Ta | b | c |Ia | Ib | Ic | I0 | I1

Ta | b | c |IA | IB | IC | IZ | IU

F (E)

F LER

F a | b | c | Ia | Ib | Ic | I0 | I1

F a | b | c | IA | IB | IC | IZ | IU

Ia | b | c | Ia | Ib | Ic | I0 | I1

Ia | b | c | IA | IB | IC | IZ | IU
A a
B b
C c
Z 0
U 1

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

238

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

P +
M *
L (
R )
Agora todos os corpos das produes ou tm mais de duas variveis ou tm um smbolo
terminal.
Para concluirmos a passagem forma normal de Chomsky resta resolver o problema da
existncia de mais de duas variveis em alguns corpos. Um conjunto de trs variveis , com
por exemplo EPT transforma-se num conjunto duas e mais um produo adicional:
E EPT

E EX1
X1PT

obtendo-se assim duas produes na FN de Chomsky.


As novas produes so as da tabela seguinte.
Produes actuais
E EPT

Novas produes: FN Chomsky


E EX1
X1PT

E TMF

E TX2
X2MF

E LER

E LX3
X3ER

Ea | b | c | IA | IB | IC | IZ | IU

Ea | b | c | IA | IB | IC | IZ | IU

T TMF

T TX2

T LER

T LX3

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

239

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Ta | b | c | IA | IB | IC | IZ | IU

Ta | b | c | IA | IB | IC | IZ | IU

F LER

F LX3

F a | b | c | IA | IB | IC | IZ | IU

F a | b | c | IA | IB | IC | IZ | IU

Ia | b | c | IA | IB | IC | IZ | IU

Ia | b | c | IA | IB | IC | IZ | IU

A a

A a

B b

B b

C c

C c

Z 0

Z 0

U 1

U 1

P +

P +

M *

M *

L (

L (

R )

R )

Temos um total de 50 produes na FN de Chomsky, para 16 produes partida.

6.3.2. Forma normal de Greibach


Se colocarmos restries no no nmero de smbolos da parte direita das produes, mas nas
posies relativas admissveis das variveis e dos smbolos terminais, teremos a forma
normalizada de Greibach.
Definio 6.3.2.1
Uma gramtica livre de contexto est na forma normalizada de Greibach se todas as
produes tm a forma
A ax,
em que a T e x V* ( por exemplo aB, aBC, aBCD, ).
As gramticas de (Sheila) Greibach tm propriedades interessantes:

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

240

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

- uma frase de tamanho n derivada em n passos, dado que em cada produo se introduz
exactamente um carcter terminal numa forma sentencial.
Exemplo 6.3.2.1
Seja o exemplo 6.3.1.1
S SB|a
Bb
- se aplicarmos um PDA para uma forma normal de Greibach, obtm-se um PDA sem
transies-, o que prova que sempre possvel eliminar tais transies num PDA
(estudaremos os PDA no Cap. 7, mas fica aqui a nota).
Teorema 6.3.2.1. Existncia da Forma Normal de Greibach
Para toda a gramtica livre de contexto G

tal que L(G) , existe uma gramtica

equivalente G na forma normal de Greibach.


A demonstrao deste teorema no to simples como o da FN de Chomsky. De facto no
existe um algoritmo simples para transformar qualquer gramtica numa FN Greibach.
Podem usar-se as regras de substituio de produes vistas anteriormente, como nos
exemplos de Linz 6.9, 6.10.
Exemplo 6.3.2.1
S 0S1 | 1S0 |1 | 0| na FN Greibach.
Introduzindo duas novas variveis A para 0 e B para 0, obtm-se directamente a FCG.
S 0SA | 1SA |0 | 1|
A0
B1
Este exemplo simples porque todas a produes iniciais de iniciam com um carcter final (0
ou 1). No entanto, quando assim no acontece, o processo torna-se bem mais complicado.
Existe um algoritmo

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

241

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

Hopcroft sugere (p. 271) expandir a primeira varivel de cada produo at se obter um
terminal. Vejamos um exemplo.
Exemplo 6.3.2.2 (Ex. 6.2.13 Linz)
Converter na forma normal de Greibach
S ABb | a
A aaA | B
B bAb
Para obtermos um terminal na primeira produo, substitui-se o A
S ABb|a e A aaA | B vai dar S aaBb|BBb|a
Mas agora necessrio substituir B na segunda produo
S BBb e B bAb vai dar S bAbBb
Agora o primeiro carcter em qualquer produo um smbolo terminal a ou b.
Introduzindo de seguida variveis adicionais para os caracteres terminais misturados com
variveis,
Za a

Zbb

substituindo nas produes anteriores resulta na soluo:


S aZaABZb | bAZaBZb | a
A aZaA | bAZb
B bAZb
Za a
Zb b
Se se reduzir previamente a gramtica, obtm-se simplesmente S a, que uma FN de
Greibach.
De facto A e B, na gramtica original, so variveis que no permitem obter um cadeia final,
sendo por isso variveis inteis. Fica assim apenas S a.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

242

Teoria da Computao

Cap. 6 Simplificao de Gramticas e Formas Normais

No entanto este procedimento, de procurar chegar a um carcter terminal no incio de cada


produo, no funciona quando existem ciclos recursivos esquerda que nunca atingem um
terminal, como por exemplo em A AB. necessrio neste caso curto-circuitar o processo,
criando uma produo que (i)introduz um terminal como primeiro smbolo do corpo e (ii) tem
variveis a seguir a ele para gerar todas as sequncias de variveis que poderiam ter sido
derivadas no caminho de gerao daquele terminal. possvel, para qualquer CFG, eliminar
os ciclos recursivos.
Existe um algoritmo para passar FN Greibach a partir da FN de Chomski . Este algoritmo
pode ver-se por exemplo em http://www.cs.uky.edu/~lewis/texts/theory/languages/cf-lang.pdf.
Nesta passagem reside uma das principais utilidades da FN Chomsky: fcil chegar a ela, a
partir de qualquer gramtica e depois usa-se o algoritmo para passas de Greibach. Esta usase por exemplo para o projecto de autmatos de pilha, matria a estudar no prximo captulo.

Bibliografia.
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

243

Teoria da Computao

LEI/DEIFCTUC/2009/@ADC

Cap. 6 Simplificao de Gramticas e Formas Normais

Documento de trabalho

244

Teoria da Computao

Cap.7 Autmatos de Pilha

CAPTULO 7

AUTMATOS DE PILHA

7.1 Introduo

247

7.2 O Autmato de Pilha, PDA-Push Down Automata

247

7.3 Autmatos de Pilha No-Determinsticos

249

7.4. Autmatos de pilha e linguagens livres de contexto

261

7.5. Autmatos de pilha determinsticos e linguagens livres de


contexto determinsticas

265

7.6. Gramticas para linguagens livres de contexto determinsticas

270

Bibliografia

271

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

245

Teoria da Computao

LEI/DEIFCTUC/2009/@ADC

Cap.7 Autmatos de Pilha

Documento de trabalho

246

Teoria da Computao

Cap.7 Autmatos de Pilha

7.1. Introduo
As gramticas livres de contexto so a base da construo das linguagens de programao e
so por isso muito importantes. Existir uma classe de autmatos que se possa associar a
todas as linguagens livres de contexto?
No Cap. 4 vimos que para linguagens regulares, uma subclasse das livres de contexto,
temos os autmatos finitos, determinsticos e no determinsticos, que so uma forma de
representao e especificao de linguagens. No entanto como sabemos os autmatos finitos
no conseguem representar todas as linguagens.
Sempre que uma linguagem infinita e que as suas cadeias tm uma estrutura tal que
necessrio guardar memria da parte da cadeia j lida, impossvel encontrar um autmato
finito para a linguagem. Por exemplo, nenhum autmato finito capaz de aceitar a linguagem
L= {anbn :, n 0} porque para isso necessrio uma capacidade infinita de contagem.
Tambm no caso de cadeias simtricas em relao a um ponto central, L = {v * tal que
v=wwR, w *}, se verifica o mesmo, sendo at necessrio aqui a memorizao de uma
cadeia de smbolos (e no apenas o seu nmero) por ordem inversa. Este facto sugere a
utilizao de uma pilha como memria, pilha do tipo LIFO (last in first out ) resultando numa
classe de mquinas chamadas autmatos de pilha (pushdown automata, PDA) ou
aceitadores de pilha (pushdown accepters, PDA). A pilha pode ter uma dimenso
arbitrariamente grande, at .

7.2. O autmato de pilha, PDA Push Down Automata


Retomando aqui o esquema geral de um autmato, que vimos no Cap. 2, o PDA tem uma
pilha adicional em relao ao autmato finito, como ilustrado na Fig. 7.2.1. Tal como ele tem
um registo de entrada, onde se escrevem cadeias, e uma unidade de controlo com um certo
nmero finito de estados internos. Pode ler e escrever no topo da pilha em cada instante.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

247

Teoria da Computao

Cap.7 Autmatos de Pilha

cadeia de entrada

q0
q2

q1

CONTROLO

P
i
l
h
a

0
1
#

Figura 7.2.1 Esquema do autmato de pilha.


O PDA l caracteres de entrada, estando num certo estado interno; l o smbolo que est no
momento presente no topo da pilha; em funo de tudo o que l, e em funo do seu estado
interno actual, executa uma movida do autmato para um outro estado interno, e
eventualmente escreve (ou apaga) um ou vrios smbolos no topo da pilha. Isto , a funo de
transio tem trs argumentos de entrada e dois argumentos de sada, como na Fig. 7.2.2.

carcter de entrada
estado actual
smbolo no topo da

estado seguinte
escreve na pilha

Figura 7.2.2 Funo de transio do PDA.


Como veremos posteriormente, se se permitir que este autmato seja no determinstico,
obtm-se uma classe de autmatos que aceitam exactamente as linguagens livres de contexto.
Neste caso, contrariamente ao que acontece para os autmatos finitos, e infelizmente, no h
equivalncia entre os determinsticos e os no-determinsticos.
A classe dos autmatos de pilha determinsticos define uma nova famlia de linguagens, as
linguagens determinsticas livres de contexto, muito importantes para as linguagens de
programao e que so um subconjunto das linguagens livres de contexto maior do que as
linguagens regulares (Fig. 7.2.3).

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

248

Teoria da Computao

Cap.7 Autmatos de Pilha

Livres de contexto
Livres de contexto
determinsticas

Regulares

Figura 7.2.3. Relao entre as linguagens regulares, livres de contexto determinsticas e livres
de contexto.

7.3. Autmatos de pilha no-determinsticos (NPDA)


Num autmato de pilha no determinstico, cujo acrnimo NPDA (do ingls), cada movida
da unidade de controlo

l um smbolo na cadeia de entrada,

altera o contedo da pilha atravs das operaes usuais em


pilhas.

Cada movida da unidade de controlo determinada por

smbolo de entrada actual

smbolo no topo da pilha no momento presente.

O resultado de uma movida da unidade de controlo

um novo estado da unidade de controlo

uma mudana no topo da pilha.

Poderemos conceber tambm PDAs transdutores, com um ficheiro de sada onde ele escreve.
No entanto s nos interessaremos aqui pelos PDA aceitadores.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

249

Teoria da Computao

Cap.7 Autmatos de Pilha

7.3.1. Definio formal de autmato de pilha no-determinstico


Definio 7.3.1.
Um aceitador no determinstico de pilha (NPDA- nondeterministic pushdown accepter)
definito por um septeto
M = (Q, , , , q0, z0, F)
em que
Q : conjunto finito de estados internos da unidade de controlo

: (sigma) o alfabeto de entrada


: (gama) conjunto finito de smbolos chamado alfabeto da pilha
: Q ( {}) subconjuntos finitos de Q * , a funo de transio, ver a
figura 7.2.2.
q0 Q : estado inicial da unidade de controlo
z0 : smbolo de inicializao da pilha, geralmente # (cardinal)
F Q : conjunto de estados finais (aceitadores).
Note-se que, pela definio, uma transio pode ter como carcter de entrada , sendo
neste caso uma transio-. Existem dois alfabetos num NPDA: o de entrada, (sigma), e o
da pilha, (gama), que so em geral diferentes (mas no obrigatoriamente).
Por outro lado a definio de transio exige um smbolo no topo da pilha; se a pilha
estiver vazia, as movidas sero inibidas, o aceitador pra.
O contradomnio de deve ser um conjunto finito porque Q* um conjunto infinito e
por isso tem subconjuntos finitos e infinitos. Embora o NPDA possa ter vrias escolhas
possveis para as suas movidas, elas devem ser em nmero finito de possibilidades.
De uma movida resulta a escrita de um carcter no topo da pilha. Esta escrita feita
carcter a carcter, da direita da cadeia para a esquerda (Fig.7.3.1).

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

250

Teoria da Computao

Cap.7 Autmatos de Pilha

abc escrita de cima


a

para baixo, da

pushdown

Figura 7.3.1 Escrita na pilha do NPDA


As operaes sobre a pilha so do tipo push introduzir no topo um carcter adicional,
ou do tipo pop- apagar um carcter, ou do tipo substituio de um carcter por outro
(mantendo-se o tamanho da pilha). Uma substituio feita por uma sequncia pop-push.
A inicializao da pilha pode ser feita com qualquer smbolo de . Normalmente usa-se
para smbolo inicial da pilha o carcter especial # (cardinal).
Uma movida do autmato tem a seguinte sintaxe, sendo a funo de transio.:

(q0, a, 0) = { (q1, 10) }


Sendo
q0 : estado actual
a : carcter lido entrada
0 : smbolo no topo da pilha
q1 : estado seguinte
10: escrever 1 no topo, por cima do zero; i.e, push 1.
A tabela 7.3.1 ilustra outros tipos de transies possveis.
Tabela 7.3.1 Operaes sobre a pilha no NPDA
Transies

Operaes sobre a a pilha

Significado

1. (q0, a, #) = { (q1, 0#) }

push

acrescenta 0

2. (q0, b, 1) = { (q1, ) }

pop

apaga 1

3. (q1, b, 0) = { (q1, 1) }

substituio

substitui 0 por 1

4. (q0, b, 1) = { (q1, 1) }

nenhuma

no altera

5. (q1, , 0) = { (q2, ) }

pop

apaga 0

6. (q1, , 0) = { (q2, 10) }

push

acrescenta 1

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

251

Teoria da Computao

Cap.7 Autmatos de Pilha

Exemplo 7.3.1.
Considere-se a transio num NPDA definida por

(q1, a, b) = {(q2, cd), (q3, )}


Quando o autmato est no estado q1, se aparecer um a na cadeia de entrada, estando b no
topo da pilha, ento acontecer uma de duas coisas:
i) - a unidade de controlo passa ao estado q2
- substitui b pela cadeia cd no topo da pilha (que fica assim com mais um carcter) ,
ou seja, pop b e push cd.
ii) - a unidade de controlo passa ao estado q3
- na pilha substitui b por , isto , apaga b do topo da pilha (que fica assim com
menos um carcter), ou seja, pop b.
Exemplo 7.3.2.
Seja o NPDA com
Q = {q0, q1, q2, q3,}

= {a, b}
= {#, 0, 1}
z0=#
F= {q3}
e

(q0, a, # ) = {(q1, 1#), (q3, )},


(q0, , # ) = {(q3,)},
(q1, a, 1 ) = {(q1, 11)},
(q1, b, 1 ) = {(q2, )},
(q2, b, 1 ) = {(q2, )},
(q2, , # ) = {(q3, )}.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

252

Teoria da Computao

Cap.7 Autmatos de Pilha

Note-se que no uma funo total. Para os pontos do seu domnio para os quais no se
encontra definida, assume-se que transita para o conjunto nulo representando uma
configurao morta do NPDA, isto , se o autmato cair num estado para o qual no est
definido, nunca mais de l sai, estando por isso morto.
H duas transies neste exemplo que merecem uma anlise mais detalhada:
1 : (q1, a, 1 ) = {(q1, 11)}
-

se no estado q1 l um a, tendo um 1 no topo da pilha, mantm-se em q1 e


acrescenta um 1 pilha, ou seja, push 1.

por cada a que aparece acrescenta um 1 pilha, enquanto existirem 1s na


pilha.

2 : (q2, b, 1 ) = {(q2, )}
-

se no estado q2 l um b, tendo 1 no topo da pilha, passa ao estado q2 e apaga o


1 do topo da pilha, ou seja pop 1.

por cada b que aparece nestas circunstncias, apaga um 1 da pilha, at que fique
apenas o smbolo inicial #.

A passagem do estado q1 ao estado q2 acontece quando aparece o primeiro b.


Que faz ento o autmato? Quando atinge q3 ?
Ele conta os as que vai lendo atravs dos 1s que escreve na pilha. Num certo instante tem
tantos 1s quantos os as que leu. Depois aparece um b, muda de estado e apaga um 1. Por
cada b que l depois, apaga um 1. Se o nmero de bs que leu at um certo instante igualar o
nmero de as que leu na primeira parte, apaga todos os 1s e chega ao smbolo inicial # que
est no fundo da pilha. E agora se estiver no fim da cadeia, no havendo na leitura mais do
que o , passa ao estado aceitador q3. O estado q3 alcanado, por este modo, quando o
NPDA l uma cadeia de L = {an bn : n 0}.
Note-se que aps a leitura do primeiro a o autmato pode passar directamente ao estado
final q3, devido a

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

253

Teoria da Computao

Cap.7 Autmatos de Pilha

(q0, a, # ) = {(q1, 1#), (q3, )}


e por aqui aceita a linguagem L={a}.
O estado q3 assim alcanado quando o NPDA l uma cadeia de L = {an bn : n 0}
{a}. Pode-se afirmar, por analogia com o que acontece nos DFA, que o NPDA aceita esta
linguagem. Se na primeira transio eliminarmos a possibilidade (q3, ), a linguagem aceite
pelo autmato ser simplesmente L = {an bn : n 0}.
Note-se que o NPDA muda de estado aps o aparecimento do primeiro b. Se aparecer
depois um a, o autmato passa ao estado morto porque de q2 no h uma transio com a.
Assim, deste modo simples, impe a restrio de que os bs apaream depois dos as. Se no
houvesse mudana de estado naquela altura ento os bs poderiam ser seguidos de as,
resultando numa linguagem bem diferente.
O que significa aceitar uma linguagem, num NPDA? Vejamos a noo de descrio
instantnea do aceitador.
Descrio instantnea de um NPDA
A descrio instantnea do NPDA completamente definida pelo tripleto
(q, w, u)
em que
q : o estado actual do autmato
w : a parte ainda no lida da cadeia de entrada
u : o contedo da pilha, sendo o topo o smbolo mais esquerda.
Uma movida de uma descrio para outra descrio denotada pelo smbolo |, j nosso
conhecido dos captulos anteriores.
Por exemplo
(q1, aw, bx) | (q2, w, yx)
s possvel se existir a transio

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

254

Teoria da Computao

Cap.7 Autmatos de Pilha

(q1, a, b) = {(q2, y)}

As movidas com um nmero arbitrrio de passos so denotadas por . Por outro lado a

notao |M ou M indica que as movidas se referem ao autmato especfico M.


Linguagem aceite por um NPDA
Estamos agora em condies de definir formalmente a condio de aceitao de um NPDA.
Definio 7.2. Aceitao por estado final
Seja M = (Q, , , , q0, z0, F) um autmato de pilha no determinstico.
A linguagem aceite por M

L (M) = {w* : (q0, w, z0) M (p,, u), p F, u *}


Ou seja, a linguagem aceite por M o conjunto de todas as cadeias capazes de colocarem o
autmato num estado aceitador (F o conjunto dos estados aceitadores) no final da leitura
cadeia. O contedo da pilha, u, irrelevante para esta definio de aceitao, isto , nesta
definio a pilha pode ficar com um contedo arbitrrio desde que termine num estado
aceitador, contrariamente ao que ao que acontece na definio seguinte.
Definio 7.3. Aceitao por pilha vazia
Diz-se que um NPDA aceita uma cadeia por pilha vazia se ele, depois de inicializado e depois
da leitura da cadeia, termina com a pilha vazia e num estado qualquer.
Formalmente, o NPDA
M = (Q , , , , q0 , z0 , F )
aceita a linguagem L (M) por pilha vazia se

L (M) = { w * : (q0 , w , z0)

( q , ,), para algum q Q}

Pode-se demonstrar que as duas definies so equivalentes: se existe um NPDA que aceita
uma linguagem L por um estado final, ento existe um NPDA que aceita a mesma L pela pilha

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

255

Teoria da Computao

Cap.7 Autmatos de Pilha

vazia, e vice-versa. Ver em Hopcroft e Coll. (p. 230-236).


Exemplo 7.3.2.1.
Qual o NPDA que aceita
L = {w {a, b}* : na(w)=nb(w)} ?
necessrio contar o nmero de as e bs, o que se pode fazer facilmente usando a pilha, tal
como no exemplo anterior. Mas agora a ordem dos as e bs irrelevante, e por isso
necessrio uma nova estratgia construtiva.
Uma cadeia pode iniciar-se por a ou por b. Como o nmero de as que surgiu at agora
pode ser maior ou menor do que o nmero de bs que j foram lidos, encarregando-se o futuro
de igualar os dois, necessrio contar os as e os bs com smbolos diferentes, dado que no
podemos ter aqui a representao de nmeros negativos.
Define-se um smbolo para contar o nmero de as, por exemplo o 0.
Suponhamos que a cadeia se inicia por as: sempre que aparece um a acrescenta-se um 0
pilha (push). Depois se aparece um b, apaga-se um zero da pilha (pop). Mas se vierem
seguidos tantos bs que esgotem os 0s, ento introduz-se na pilha um 1 por cada b em
excesso, isto quando no houver mais zeros, restando apenas o smbolo de inicializao da
pilha, e aparecer um b, acrescenta-se um 1 pilha (push). Agora quando o topo da pilha for
um 1 e aparecer um a, apaga-se esse 1 (pop). H aqui uma luta entre os as e os bs para ver
quem ganha. Um a ou escreve 0 ou apaga 1, um b ou escreve 1 ou apaga 0.
Teremos assim as seguintes transies:

(q0, , #) = {(qf, #)},

aceita a cadeia vazia, na(w)=nb(w)=0

(q0, a, #) = {(q0, 0#)},

um a inicial acrescenta 0

(q0, b, #) = {(q0, 1#)},

um b inicial acrescenta 1

(q0, a, 0) = {(q0, 00)},

um a acrescenta 0

(q0, b, 0) = {(q0, )},

um b apaga 0

(q0, a, 1) = {(q0, )},

um a apaga 1

(q0, b, 1) = {(q0, 11)}.

um b acrescenta 1.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

256

Teoria da Computao

Cap.7 Autmatos de Pilha

A transio- introduz indeterminismo no autmato. Quando aparece um a entrada, pode


acontecer uma de duas coisas:
- o autmato transita para o estado qf sem consumir o a da entrada
(transio - )
- o autmato consome o carcter de entrada, a, escreve 0 na pilha e
mantm-se em q0
O NPDA formalmente definido pelo septeto
M = ({q0, qf}, {a,b}, {#, 0, 1}, , q0, #, {qf}).
Por exemplo a cadeia abbabbaa produz as seguintes movidas:
(q0, abbabbaa, #) | (q0, abbabba, 0#) | (q0, abbabb, 00#) | (q0, abbab, 0#)
| (q0, abba, #) | (q0, abb, 0#) | (q0, ab, #) | (q0, a, 1#) |
| (q0, , #) | (qf, #)
e portanto aceite, por estado final.
7.3.2 Grafo de um autmato de pilha
O grafo de um NPDA tem algumas semelhanas com o de um NFA. Os ns so os estados e
as arestas representam as transies. As etiquetas das arestas tm que conter toda a
informao necessria. No h uma conveno nica de etiquetagem. Conhecem-se duas
principais:
- a notao de Linz e do JFLAP
Pilha aps
movida
a, 1 ; 01
q0

q1

0
1

Figura 7.3.2.1. Notao JFLAP.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

257

Teoria da Computao

Cap.7 Autmatos de Pilha

Com o significado seguinte:


Estando o autmato no estado q0, se l a e se a pilha estiver com 1 no topo, o autmato
- passa ao estado q1,
- faz o pop da pilha (apaga 1)
- e depois o push de 01 ( escreve 1 seguido de 0, topo esquerda, 0)
- a notao de Taylor e DEM
Pilha aps
movida
a, 1 ; 01
q0

q1

1
0

Figura 7.3.2.2. Notao DEM


Com o significado: estando o autmato no estado q0, se l a e se a pilha estiver com 1 no
topo, o autmato
- passa ao estado q1,
- faz o pop da pilha (apaga 1)
- e depois o push de 0 e 1 (escreve 0 seguido de 1, topo direita, 1)
A diferena entre as duas est apenas na ordem porque se anota a insero dos smbolos na
pilha: da direita para a esquerda, 01# (JFLAP), ou da esquerda para a direita #01 (DEM).
O grafo do NPDA, com L = {w {a, b}* : na(w)=nb(w)}, com notao do JFALP, ser
a, # ; 0#

b, # ; 1#

3
, # ; #

q0

a, 0 ; 00

4
b, 0;

qf

b, 1 ; 11

6
a, 1 ;

Figura 7.3.2.3 Grafo do NPDA do exemplo 7.3.2.1

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

258

Teoria da Computao

Cap.7 Autmatos de Pilha

O estado aceitador desenha-se com dupla circunferncia. (Ver o mesmo exemplo em


Taylor 538, com o DEM).
Exemplo 7.3.2.2
Construir um NPDA que reconhea a linguagem dos palndromos pares
L = { wwR : w {a, b}+}
O smbolos so inseridos na pilha pela ordem inversa por que so apagados.
Descrio informal (Hopcroft, 221):
1. Inicia-se no estado q0 que representa o palpite de que ainda no chegmos ao meio
da cadeia, i.e., ainda no chegmos ao fim da cadeia w que deve ser seguida pela sua
reversa.
Enquanto se estiver em q0, lem-se os smbolos e vo-se colocando na pilha, fazendo o
push de cada carcter, um de cada vez.
2. Em qualquer altura pode-se fazer o palpite de que se atingiu o meio. Nessa altura a
pilha contm w, com o carcter mais direita no topo, e o primeiro carcter no fundo.
Transita-se ento para o estado q1.
Como o autmato no determinstico, podemos fazer os dois palpites: supe-se que
se atingiu o meio de w e supe-se tambm que no, mantendo o autmato no estado q0
continuando a ler entradas e a coloc-las na pilha.
3. Depois de transitar para o estado q1, compara-se o smbolo da entrada com o smbolo
no topo da pilha. Se forem iguais, consome-se o smbolo de entrada e apaga-se o topo
da pilha (pop). Se forem diferentes, fizemos um palpite errado: w no seguido de
wR. Este ramo morre, embora outros ramos do autmato no determinstico possam
sobreviver e eventualmente atingir o estado de aceitao.
4. Se se esvaziar a pilha, leu-se de facto uma entrada w seguida pelo seu reverso wR.
Aceita-se a entrada que foi lida at este ponto, criando para isso um estado q2.
Em termos das transies, poderemos dividi-las em vrias partes:

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

259

Teoria da Computao

Cap.7 Autmatos de Pilha

1 parte para fazer o push de w

(q0,, a, a) = {(q0, aa)},


(q0,,b, a) = {(q0, ba)},
(q0,,a, b) = {(q0, ab)},
(q0,,b, b) = {(q0, bb)},
(q0,,a, #) = {(q0, a#)},
(q0,,b, #) = {(q0, b)}.
2 parte palpitar o meio da cadeia

(q0, , a) = {(q1, a)},


(q0, , b) = {(q1, b)}.
3 parte para comparar wR com o contedo da pilha

(q1, a, a) = {(q1, )},


(q1, b, b) = {(q1, )},
4 parte para fazer a aceitao

(q1, , #) = {(q2, #)},


Por exemplo a cadeia ababbaba, em que w=abab, pode ser aceite pelas seguintes transies
(q0, ababbaba, #) | (q0, ababbab, a#) | (q0, ababba, ba#) | (q0, ababb, aba#)
| (q0, abab, baba#) | (q1, abab, baba#) | (q1, abab, baba#)
| (q1, aba, aba#) | (q1, ab, ba#) | (q1, a, a#) | (q1, , #)
| (q2, #)
e portanto aceite. O grafo do autmato ser o da Fig. 7.3.2.4.
a, # ; a#

a, a ;

b, # ; b#

, a ; a
a,a ; aa

q0

q1

, # ; #

qf

, b ; b
b, b1 ; bb

b,a; ba

b, b;

a, b; ab

Figura 7.3.2.4. NPDA do exemplo 7.3.2.2.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

260

Teoria da Computao

Cap.7 Autmatos de Pilha

7.4. Autmatos de pilha e linguagens livres de contexto


A relao entre linguagens livres de contexto e NPDA anloga relao entre autmatos
finitos e linguagens regulares: para toda a linguagem livre de contexto existe um NPDA que a
aceita; se um NPDA aceita uma linguagem ento ela livre de contexto.
A prova construtiva: vamos construir um NPDA para uma CFL qualquer. Para isso
usamos a forma normalizada da Greibach , em que todas as produes so da forma
A ax, a T, x V*
por ser mais fcil e intuitivo. Repare-se que esta escolha no tira generalidade prova porque
para qualquer linguagem livre de contexto existe uma FN de Greibach, como se viu no Cap. 6.
7.4.1. NPDAs para gramticas livres de contexto
Suponhamos que a CFG est na FN de Greibach. A construo de um NPDA para esta
gramtica faz-se da seguinte forma:
- o NPDA implementa a derivao pela extrema-esquerda de qualquer cadeia.
- as variveis da parte direita da forma sentencial colocam-se na pilha.
- a parte esquerda da forma sentencial, composta pelos smbolos terminais,
idntica entrada lida.
- comea-se colocando o smbolo inicial na pilha.
- para simular A ax:
-

coloca-se A no topo da pilha

introduz-se a como smbolo de entrada

a varivel na pilha removida e substituda por x


a

A
#

A ax

Figura 7.4.1 Simulao de uma produo no NPDA

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

261

Teoria da Computao

Cap.7 Autmatos de Pilha

Exemplo 7.4.1 (Taylor 550)


Seja a CGF em forma normal de Greibach
Produo

1.1-1.2

S aA | aB

2.1.-2.2

A aAB | aBB

Bb

que gera a linguagem


L (G) = { anbn : n 1 }
Vejamos a derivao pela extrema esquerda de aaaabbbb :
S aA

(de 1.1)

aaAB

(de 2.1)

aaaABB

(de 2.1)

aaaaBBBB

(de 2.2)

aaaabBBB

(de 3.1)

aaaabbBB

(de 3.1)

aaaabbbB

(de 3.1)

aaaabbbb

(de 3.1)

Procuremos agora um NPDA que modelize esta gramtica. Vejamos se chegam trs
estados, o inicial q0 , o de derivaes, q1 e o aceitador qf.
O alfabeto da pilha = {#, S, A, B } e = {a, b}.
1 Introduzir o smbolo inicial na pilha:

(q0, , #) = { (q1, S#)}


2 Simular
S aA

(q1, a, S) = { (q1, A)}

S aB

(q1, a, S) = { (q1, B)}

A aAB

(q1, a, A) = { (q1, AB)}

3 Simular

4 Simular

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

262

Teoria da Computao

Cap.7 Autmatos de Pilha

5 Simular
A aBB

(q1, a, A) = { (q1, BB)}

Bb

(q1, b, B) = { (q1, )}

6 Simular

7 Aceitar a cadeia quando aparece # no topo da pilha: muda para o estado aceitador

(q1, , #) = { (qf, #)}


Note-se o carcter no determinstico no autmato (vrias escolhas de movidas possveis
para uma da configurao).
a, S ; B

a, S ; A

q0

, # ; #S

, # ; #

q1

a, B ;

qf

a, A ; BB
a, A ; AB

Figura 7.4.2 PDA do exemplo 7.4.1 (DEM).


Tabela 7.4.1 Resumo da simulao das derivaes da gramtica do Ex. 7.4.1
Produo
Carregar S

Movida

(q0, , #) = { (q1, S#)}

Grafo
q0

(q1, a, S) = { (q1, A)}

q1

S aB

(q1, a, S) = { (q1, B)}

q1

A aAB

(q1, a, A) = { (q1, AB)}

q1

S aA

, # ; S#

q1
a, S ; A

a, S ; B

a, A ; AB

A aBB

(q1, a, A) = { (q1, BB)}

q1
a, A ; BB

Bb

(q1, b, B) = { (q1, )}

q1
b, B ;

aceitar a cadeia

LEI/DEIFCTUC/2009/@ADC

(q1, , #) = { (qf, #)}

Documento de trabalho

q0

, # ; #

qf

263

Teoria da Computao

Cap.7 Autmatos de Pilha

Exemplo 7.4.2
Construir um NPDA que aceite a linguagem gerada pela gramtica
S aSbb | a
Antes de mais, deve transformar-se a gramtica na forma de Greibach, mudando as
produes para (neste caso simples)
S aSA | a
A bB,
B b.
O autmato correspondente ter 3 estados {q0, q1, q2} sendo q2=qf.
1 colocar o smbolo inicial S na pilha:

(q0, , #) = { (q1, S#)}.


2 simular a produo S aSA,
removendo S da pilha e colocando l AS
lendo a entrada

(q1, a, S) = { (q1, SA), (q1, )}


simular a produo S a, de modo anlogo, substituindo S por , e da (q1, ).
3 simular a produo A bB : (q1, b, A) = { (q1, B)}.
4 simular a produo B b : (q1, b, B) = { (q1, )}.
5 completar a derivao quando aparece # no topo da pilha: (q1, , #) = { (qf, #)}.

a, S ; SA

a, S ;

q0

, # ; S#

q1

b, A ; B

, # ; #

qf

b, B ;

Figura 7.4.3. O NPDA do exemplo 7.4.1 (notao JFLAP).

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

264

Teoria da Computao

Cap.7 Autmatos de Pilha

L (G) = { a n b 2(n-1) : n 1}.

Qual a linguagem do NPDA ?

Qual o nmero mnimo de estados de um NPDA, para uma linguagem definida por uma
gramtica de Greibach ?
- no exemplo obtiveram-se trs ;
-

o estado q0 pode ser eliminado, ficando o autmato no-determinstico.

passa a ser aceite


a, S ; B

a, S ; A

, # ; #

q1

, # ; #S

qf

a, A ; BB

a, B ;
a, A ; BA

(Notao DEM)

Figura 7.4.4. NPDA com dois estados equivalente ao da Fig. 7.4.2


Este resultado geral: para qualquer CFL com existe um NPDA com dois estados, sem

, com trs estados.


Se quisermos evitar a introduo do , pode-se utilizar um smbolo especial na pilha, $,
para inicializar a gramtica:

(q0, , #) = { (q0,S$)}
E agora comea-se com a gramtica de Greibach.
a, S ; B

a, S ; A

, # ; $S

q1

, $ ; #

qf

a, A ; BB

a, B ;
a, A ; BA

(Notao DEM)

Figura 7.4.5. NPDA com dois estados para uma linguagem sem .

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

265

Teoria da Computao

Cap.7 Autmatos de Pilha

Finalmente conclumos que para qualquer CFL sem existe um NPDA com dois estados.
Nesta construo reside uma das principais utilidades das gramticas de Greibach.
Teorema 7.4.1.
Para qualquer linguagem L livre de contexto, existe um NPDA M tal que L = L (M)
A demonstrao feita pela construo anterior:
- Se L uma linguagem livre de contexto , ento existe uma gramtica livre de contexto
na forma normal de Greibach para L.
-constri-se um NPDA para simular as derivaes pela extrema-esquerda dessa gramtica.
Note-se que a exigncia de que a gramtica esteja na forma de Greibach apenas para
facilitar o desenvolvimento. O teorema aplica-se a toda a gramtica livre de contexto.Ver uma
demonstrao mais detalhada em Linz, 185.

7.4.2. Gramticas livres de contexto para NPDAs


O inverso do teorema anterior tambm verdadeiro: dado um NPDA, existe para ele uma
gramtica livre de contexto.
Para o provar baste reverter o processo construtivo, de modo que a gramtica simule as
movidas do NPDA. Ver em Linz 189.
Teorema 7.4.2.
Se L = L (M) para algum NPDA M, ento L uma linguagem livre de contexto.

7.5. Autmatos de pilha determinsticos e linguagens livres de contexto


determinsticas
Se concebermos um autmato de pilha que no tenha escolhas possveis em qualquer estado,
ele ser determinstico. Chama-se, em ingls, DPDA Deterministic Push Down Accepter.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

266

Teoria da Computao

Cap.7 Autmatos de Pilha

Definio 7.5.1. Autmato de pilha determinstico.


Um autmato de pilha M = (Q, , ,, q0, z0, F) diz-se determinstico se for um autmato
obedecendo a definio 7.3.1. e alm disso se se submeter s restries seguintes, para todo o
q Q, a {} a b ,
1. (q, a, b) contm no mximo um elemento (uma s movida possvel):
dado um smbolo de entrada e um smbolo no topo da pilha, s possvel
uma movida, no mximo.
2.

se (q, , b) no vazia, ento (q, c, b) deve ser vazio para todo o c :


quando possvel uma transio- para alguma configurao, no existe
nenhuma alternativa que consuma caracteres de entrada para essa mesma
configurao (i.e par ao mesmo topo da pilha).

Definio 7.5.2. Linguagem livre de contexto determinstica.


Uma linguagem L diz-se livre de contexto determinstica se e s se existir um DPDA M
tal que L = L(M).
Exemplo 7.5.1
Consideremos a linguagem
L = { an bn : n 1 }
Vejamos se ela livre de contexto determinstica.
O PDA M = ({q0, q1, q2 }, {a, b}, {#,1}, , q0, #, {qf}) com

(q0, a, # ) = {(q1, 1#)}

(inicia a contagem dos as)

(q1, a, 1 ) = {(q1, 11)}, (conta os as )


(q1, b, 1 ) = {(q2, )},

(detecta o primeiro b)

(q2, b, 1 ) = {(q2, )},

(conta os bs)

(q2, , # ) = {(qf, )}

( aceita se n as = n bs)

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

267

Teoria da Computao

Cap.7 Autmatos de Pilha

aceita aquela linguagem. Logo ela determinstica (e livre de contexto, como j se sabe).
b ,1 ;

a, 1 ; 11

q0

b, 1 ;

a, # ;1#

q2

q1

, # ;

qf

Figura 7.5.1 O PDA determinstico do Exemplo 7.5.1 (JFLAP)


Se quisermos aceitar a cadeia vazia, L = { a n b n : n 0 }, teremos a Fig. 7.5.2.
b ,1 ;

a, 1 ; 11

q0

a, # ; 1#

q1

b, 1 ;

q2

, # ;

qf

Figura 7.5.2. PDA que aceita a cadeia vazia.


ou ainda a Figura 7.5.3.

a, # ;1#

qf

b ,1 ;

a, 1 ; 11

q1

b, 1 ;

q2

, # ;

Figura 7.5.3. PDA equivalente ao da Figura anterior, com um s estado aceitador: chegando a
q2 e lendo # na pilha, passa ao estado aceitador.
Contrariamente ao que acontece nos autmatos finitos, nos PDA no h equivalncia entre
os determinsticos e os no determinsticos.
Diferenas entre os DFA e os DPDA
Tambm os DFA no tm escolhas possveis. H no entanto algumas diferenas entre estes e
os DPDA:

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

268

Teoria da Computao

Cap.7 Autmatos de Pilha

aqui admitem-se transies- sem quebra de determinismo. Como o topo da


pilha tambm desempenha um papel importante na determinao da movida
seguinte, o carcter no topo da pilha levanta o indeterminismo da entrada .

a funo no aqui necessariamente total, podendo ser parcial, isto , pode


haver transies para o conjunto vazio, transies no definidas, e portanto
configuraes mortas.

nos DPDA a nica propriedade caracterstica do determinismo que em cada


configurao s h no mximo uma movida possvel.

A tabela 7.5.1 resume estas diferenas.


Tabela 7.5.1 Diferenas entre os DFA e os DPDA
DFA

DPDA

no admite transies -

admite transies -

uma funo total

no necessariamente uma funo total

h equivalncia entre os determinsticos e

no h equivalncia entre os

os no determinsticos

determinsticos e os no determinsticos

Semelhanas entre DFA e DPDA para linguagens regulares


As linguagens regulares so um subconjunto das linguagens livres de contexto.Toda a
linguagem livre de contexto determinstica tem um DPDA. As linguagens regulares so
determinsticas, e portanto as linguagens regulares so linguagens livres de contexto
determinsticas. Podemos assim concluir que para qualquer linguagem regular existe um
DPDA que a aceita. Quais as diferenas e semelhanas entre o DFA e o DPDA de uma
linguagem regular?
Vejamos um exemplo.
Exemplo 7.5.2 (Taylor, 556)
O DFA da Figura 7.5.4 aceita a linguagem definida pela expresso regular r = a*b.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

269

Teoria da Computao

Cap.7 Autmatos de Pilha


b

q0

qf

q1

Figura 7.5.4. DFA do Exemplo 7.5.2.


Para desenhar um DPDA equivalente, necessrio alterar as etiquetas das transies a fim
de introduzir as operaes sobre a pilha. Como a pilha no de facto necessria, em todas as
transies no se faz nada na pilha, que se inicia com # e assim se mantm at ao fim.
b ,# ;#
a, # ; #

q0

b, # ; #

a, # ; #

qf

q1

b, #;#

a, # ; #

Figura 7.5.5. DPDA equivalente ao DFA da figura anterior. A pilha no usada.


Podemos assim dizer que um DFA um DPDA sem pilha, ou com a pilha desactivada.

7.6. Gramticas para linguagens livres de contexto determinsticas


As linguagens livres de contexto determinsticas incluem todas as linguagens de programao.
Elas tm caractersticas relevantes relacionadas com a construo de compiladores eficientes,
pois pode-se fazer o seu parsing facilmente (gramticas-s, mas no s). Tm importncia
particular as gramticas LL (Left scan, Leftmost derivations) e as gramticas LR (Left scan,
Rightmost derivations), que sero objecto de estudo na disciplina de Compiladores.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

270

Teoria da Computao

Cap.7 Autmatos de Pilha

Exemplo 7.6.1.
Desenhar o grafo do NPDA da linguagem L = {anbm : 0 n m , m 2 } (Taylor, 541). Este
problema um exemplo implementado no Deus Ex Mquina ficheiro Example 10.3.2 na
directoria dos Pushdown Automata.

b, 0 ;

a, 0 ; 00

a,#; #0

b, # ; #

q0

b, 0 ;

q1

b, # ; #

b, # ; #

qf

Figura 7.6.1. NPDA do Exemplo 7.6.1 (notao DEM).

Bibliografia.
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction th the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

271

Teoria da Computao

LEI/DEIFCTUC/2009/@ADC

Cap.7 Autmatos de Pilha

Documento de trabalho

272

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

CAPTULO 8

PROPRIEDADES DAS LINGUAGENS LIVRES DE


CONTEXTO

8.1 Introduo

275

8.2 Dois lemas de bombagem

266

8.2.1 Lema de bombagem para linguagens livres de contexto

275

8.2.2 Lema de bombagem para linguagens lineares

285

8.2.3. Relao entre os trs lemas de bombagem

289

8.3. Propriedades de fecho e algoritmos de deciso


para linguagens livres de contexto

290

8.3.1. Propriedades de fecho de linguagens livres de contexto

290

8.3.2. Algumas propriedades decidveis de linguagens livres de contexto

295

8.3.3. Algumas propriedades indecidveis de CFLs

297

Bibliografia

LEI/DEIFCTUC/2009/@ADC

298

Documento de trabalho

273

Teoria da Computao

LEI/DEIFCTUC/2009/@ADC

Cap. 8 Propriedades das Linguagens Livres de Contexto

Documento de trabalho

274

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

8.1. Introduo
Tal como no Captulo 4 estudmos propriedades fundamentais das linguagens regulares,
iremos estudar neste captulo algumas propriedades das linguagens livres de contexto.
Uma questo importante a de se saber se uma dada linguagem ou no livre de contexto.
Encontraremos aqui lemas da bombagem, com algumas semelhanas com o que vimos nas
linguagens regulares, mas agora um pouco mais complicados. Eles no servem para provar
que uma linguagem livre de contexto, mas servem para provar o contrrio: que uma dada
linguagem no livre de contexto, por no possuir certas propriedades estruturais da classe.
Quando aplicamos certas operaes a CFL, importa saber se o resultado ainda uma CFL,
e isto leva-nos s propriedades de fecho.
H questes aparentemente simples sobre linguagens livres de contexto para as quais ainda
no foi possvel encontrar resposta. Veremos algumas, no quadro dos algoritmos de deciso.

8.2. Dois lemas de bombagem


Os lemas de bombagem servem para mostrar que uma linguagem no pertence a uma dada
famlia.
8.2.1 Lema de bombagem para linguagens livres de contexto
Os lemas de bombagem aplicam-se a linguagens infinitas. Qualquer gramtica tem um
nmero finito de produes e por isso, para uma linguagem infinita, h produes que tm
que ser usadas repetidas vezes na mesma derivao, criando-se assim ciclos que permitem a
gerao de um nmero infinito de cadeias de comprimento arbitrrio. Numa CFL tm que
existir ciclos com certas caractersticas, definidas pelo seguinte teorema.
Teorema 8.2.1.1
Seja L uma linguagem infinita livre de contexto.
Ento existe algum inteiro positivo m tal que toda a w L com |w| m se pode decompor em
w = uvxyz

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

275

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

com
|vxy| m
e
|vy| 1
tal que bombeando os segmentos v e y se obtm cadeias de L, ou seja,
uvixyiz L
para todo o i = 0, 1, 2, ....
Graficamente pode ilustrar-se pela figura seguinte. Note-se que |vxy| m |v| m e |y| m.

w=uvxyz
v

O mesmo
nmero
de voltas

x
u

|v x y| m

|x| 0

|u| 0, |z| 0, arbitrrios


bombagem :

u v ix y iz

Ou v ou y no vazia (uma delas pode s-lo)


Figura 8.2.1.1.Bombagem nas CFLs.
A caracterstica fundamental a igualdade das voltas nos dois ciclos. Essa igualdade
requer que o autmato que aceita a linguagem tenha a possibilidade de se lembrar do nmero
de voltas no primeiro ciclo. Podendo ser um nmero arbitrariamente grande, no pode ser um
autmato finito, como j sabemos. O PDA, com pilha infinita, tem essa possibilidade. A pilha
serve precisamente para de algum modo contar as voltas do primeiro ciclo.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

276

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Repare-se que se v ou y for vazia (uma delas pode s-lo, mantendo |vy| 1), temos o caso
de uma linguagem regular. Este facto natural: as linguagens regulares tambm so livres de
contexto e por isso este lema tambm se lhes aplica. Neste caso no necessrio contar o
nmero de voltas do ciclo, porque no h comparao a fazer, e por isso um autmato finito
(ou um PDA coma pilha desactivada) suficiente para a linguagem.
Aqui consideraremos o caso em que nem v nem y so vazias.
Vejamos uma demonstrao do lema.
Considere-se uma Linguagem L- {} , sem o carcter vazio, com uma gramtica G sem
produes unitrias e sem produes -.
O comprimento do corpo de uma produo sempre limitado; seja k esse limite. Para uma
cadeia w L, o comprimento da sua derivao (nmero de produes necessrias para a
obter) ser por isso de pelo menos n =| w |/k.
w
1
k

2
k

5
k

6
k

n
k

Figura 8.2.1.2 Uma cadeia produzida por sucessivas produes de comprimento k.


Sendo L infinita, existem derivaes arbitrariamente longas a que correspondem rvores de
derivao de altura arbitrria.
Se considerarmos uma derivao suficientemente longa e um caminho longo desde a raiz
at a uma folha, haver no seu percurso um nmero ilimitado de variveis; ora como o
nmero de variveis diferentes finito, haver necessariamente repeties de variveis, tal
como ilustrado na Fig. 8.2.1.3

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

277

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

x
Figura 8.2.1.3. Uma derivao arbitrariamente longa repete necessariamente variveis. Um
tringulo representa um conjunto de derivaes a partir da varivel central at cadeia-folha
do tringulo. No fundo cada tringulo uma sub-rvore.
Da figura poderemos escrever a sequncia de derivaes
*

S uAz uvAyz uvxyz,

uvxyz L

sendo u, v, x, y, z cadeias de smbolos terminais.


*

Quer dizer, tendo em conta que de cima se tira uAz uvAyz o que implica que
*

A vAy.
Pode-se ento desenhar uma nova rvore de uma derivao com mais um conjunto de
produes que completem um ciclo de A a A, obtendo-se a Fig.8.2.1.4.
Agora temos
*

S uAz uvAyz

uvvAyyz uvvxyyz

e portanto a cadeia uvvxyyz = uv2xy2z L .

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

278

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

v
A

x
Figura 8.2.1.4. Mais um ciclo de A a A em relao figura anterior.
Pode-se repetir o procedimento um nmero arbitrrio de vezes, i, de tal modo que
uvi xyiz L
Fica assim demonstrado que bombeando v e y o mesmo nmero de vezes se obtm cadeias
na linguagem. como se fossem duas bombas sncronas.
Este Lema aplica-se de modo anlogo ao do regular: para provar que uma linguagem no
livre de contexto. Como apresenta duas bombas funcionando sincronamente, de aplicao
mais delicada. Basicamente prova-se que para uma dada linguagem no possvel encontrar
as duas bombas sncronas satisfazendo o lema, e por isso ela no livre de contexto.
Note-se que agora a parte a bombear, vxy, pode estar em qualquer parte de w, seja no
princpio (u=), seja no meio (u e z diferentes de ), ou no fim (z=), sempre com |vxy|m , o
que implica que na prova se tenham que experimentar todas essas possibilidades.
Mas a filosofia de aplicao exactamente a mesma. Poderemos repetir aqui a Tabela
4.4.9, com a nica diferena na definio da decomposio de w em partes.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

279

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Tabela 8.2.1.1 O lema da bombagem para CFLs.


O Lema pela afirmativa

O Lema pela negativa

- existe um m tal que para

- para qualquer valor de m sou capaz de


encontrar

- para qualquer cadeia |w| m


pertencente a L existe

- (pelo menos) uma cadeia |w| m


pertencente a L em que

- uma decomposio uvxyz que produz,


pela bombagem de v e y, |vxy| m

- qualquer decomposio uvxyz produz, pela


bombagem de v e y, |vxy| m

- todas cadeias pertencentes a L

- (pelo menos) uma cadeia que no pertence


linguagem

i 0, uvixyiz L

i 0, uvixyiz L

Exemplo 8.2.1.1.
Seja L={anb2ncn, n 0}. Provar que no livre de contexto.
A caracterstica essencial da linguagem a da relao entre o nmero de as, bs e cs. Se
uma bombagem destruir essa relao, a cadeia bombeada no pertence linguagem.
Para fazer com que isso acontea, basta impossibilitar a bombagem simultnea de as, bs e
cs, dado que a bombagem de apenas as e bs, ou de apenas bs e cs, destri a relao.
Considere-se por exemplo, para um dado m, a cadeia com m as, 2m bs e m cs.Ela
maior do que m e portanto deve verificar o lema.
Verifica-se que qualquer que seja o posicionamento da bombagem obtm-se sempre
cadeias fora da linguagem. Como a subcadeia a bombear, vxy, tem que ser menor ou igual a
m, se a distncia do ltimo a ao primeiro c for maior do que m, como o caso, nunca se
podem bombear simultaneamente as, bs e cs.
Note-se que esta construo vlida para qualquer valor de m. Pode-se por isso concluir
que no existe um tal m que verifique o Lema, ficando assim provado que a linguagem no
livre de contexto.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

280

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

2m bs

m as
a

v x
bombeia as

v x

m cs
c

v x

bombeia as e bs

v x

bombeia bs

bombeia bs e cs

v x

bombeia c

Figura 8.2.1.5 necessrio tentar todas as localizaes possveis, ao longo da cadeia de teste,
das partes bombeadas.
Tambm se pode fazer a prova como um jogo entre dois parceiros, um procurando o m, o
outro procurando uma cadeia que encoste o adversrio parede. Repete-se aqui, na Tabela
8.2.1.2, a Tabela 4.4.10 agora com uma nova decomposio uvxyz.
Tabela 8.2.1.2 O jogo do lema da bombagem
Jogador 1

Jogador 2

Define a linguagem L
Escolhe um m
Indica uma cadeia de L maior do que m
Define uma decomposio |uvxyz| m
Indica um i que bombeie para fora

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

281

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Exemplo 8.2.1.2
L= {anbpcq, n> p q>0 }
Aqui temos uma desigualdade. Interessa, para um dado valor de m, escolher uma cadeia na
situao limite e depois, com a bombagem, destruir a desigualdade. Para isso conveniente
que no se possam bombear simultaneamente as, bs e cs (se se pudesse, poder-se-ia
eventualmente manter a desigualdade).
Tabela Exemplo 8.2.1.2
Jogador 1
Define a linguagem:

Jogador 2
Escolhe um m: 6

Indica uma cadeia:


aaaaaaaabbbbbbbcccccc
estratgia: m+1 as, m bs, m cs
Decomposio:
uvxyz= |aaaaaa|a|bbbb|b|bcccccc
Indica um i que bombeie para fora: i = 0
Perde, em qualquer decomposio com

aaaaaabbbbbcccccc

|vxy| 6

no pertence a L (p<q)

Escolhe outro m: 8
Indica uma cadeia:
aaaaaaaaabbbbbbbbcccccccc
(estratgia, m+1 as, m bs, m cs)
Decomposio
uvxyz = |aaaaaaaa|ab|bbbbb|b|bcccccccc|
Indica um i que bombeie para fora: i =0

Perde, em qualquer decomposio com

aaaaaaaabbbbbbcccccccc

|vxy| 8

no pertence a L (p<q)
Para outros valores de m, seguindo a mesma estratgia, chega-se mesma concluso: no
existe um m que verifique o Lema.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

282

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

A linguagem no livre de contexto, q.e.d.


H linguagens que no so livres de contexto e para as quais se verifica o Lema Livre de
Contexto. Veja-se o exemplo 8.2.1.3.
Exemplo 8.2.1.3.
Seja L = {anbncpd pep, n 2, p 1}, em = {a,b,c,d,e}
Esta linguagem no livre de contexto devido igualdade de cs, ds e es. No entanto
possvel encontrar para ela um valor de m e uma decomposio uvxyz, em qualquer cadeia
|w| m, que verifica a bombagem para dentro.
A menor cadeia da linguagem w = aabbcde.
Vejamos o que se passa com m=7.
Decompondo w=uvxyz=|a|a||b|bcde| , x=, bombeando v=a e y=b obm-se sempre cadeias
de L.
Para cadeias maiores que 7, usando sempre uma decomposio |vxy|=|a||b|, o primeiro par
ab da cadeia, obtm-se resultado igual.
Mas no se pode concluir que a linguagem seja livre de contexto. De facto ela no o
devido segunda parte dos c,d,e. Por isso verifica-se o ilustrado na Fig. 8.2.1.6.

Linguagens que verificam o


Lema Livre de Contexto
Linguagens
Livres de
Contexto

Figura 8.2.1.6. Nem todas as linguagens que verificam o Lema Livre de Contexto so livres
de contexto. Mas se uma linguagem no o verifica, ela no livre de contaxto.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

283

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

8.2.2. Um lema de bombagem para linguagens lineares


Uma linguagem livre de contexto diz-se linear se existir uma gramtica livre de contexto
linear tal que L = L(G). Sabemos que uma gramtica linear se do lado direito das produes
aparece no mximo uma varivel. Note-se que aqui uma produo pode ser linear esquerda
e outra produo linear direita e outra ainda linear ao centro.
Teorema 8.2.2.1
Seja L uma linguagem infinita linear. Ento existe algum inteiro positivo m, tal que toda a
cadeia w L, com |w| m, se pode decompor em
w = uvxyz
com
|uvyz| m
|vy| 1
de modo que bombeando simultaneamente v e y se obtm
uvixyiz L
para todo o i=0, 1, 2, ....
A figura 8.2.2.1 ilustra graficamente onde se localizam as quatro sub-cadeias. Note-se que
|uvyz| m implica que |uv| m e |yz| m.

w=uvxyz

|u v | m

O mesmo
nmero
de voltas

x
u

|y z| m

|u v y z| m

x0

|vy| 1
|u v | m

|y z| m

Figura 8.2.2.1 Lema de bombagem para linguagens lineares.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

284

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

A grande diferena entre este lema e o anterior reside em w. Neste, as sub-cadeias a serem
bombeadas (v e y) devem-se localizar dentro de m smbolos dos extremos esquerdo e direito
de w, respectivamente; a cadeia do meio, x, pode ter um tamanho arbitrrio. No lema anterior,
u e z podem ser arbitrariamente grandes. Este facto deriva da linearidade: havendo apenas
uma varivel em cada derivao, chega-se mais rapidamente a um ciclo do que no caso em
que existam muitas variveis em cada derivao.
Demonstrao:
Sendo a linguagem linear, existe alguma gramtica linear para ela, que no contenha nem
produes unitrias nem produes - ( a eliminao deste tipo de produes no altera a
linearidade da gramtica). Consideremos a figura seguinte 8.2.2.2.
S

x
Figura 8.2.2.2 rvore de derivao de uma linguagem linear.
Se a gramtica linear (contm no mximo uma s varivel no corpo de cada derivao),
as variveis s podem aparecer no caminho central S-A-A ....(efeito conjugado de produes
lineares esquerda, direita e ao centro). Havendo um nmero finito de variveis no
caminho de S at ao primeiro A, e gerando cada uma delas um nmero finito de smbolos
terminais, quer u quer z so limitados. Por razes semelhantes v e y so tambm limitados e
por isso existe um m tal que |uvyz| m (mesmo que o m tenha que ser grande, limitado).
Da figura poderemos escrever a sequncia de derivaes

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

285

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

S uAz uvAyz uvxyz

uvxyz L

sendo u, v, x, y, z cadeias de smbolos terminais. Isto implica que


*

A vAy.
Continuando a derivar a partir do ltimo A, at encontrar novamente A, pode-se desenhar
uma segunda figura incluindo a produo adicional A vAy , Fig.8.2.2.3
S

x
Figura 8.2.2.3 Mais um ciclo a partir da figura anterior.
Agora temos
*

S uAz uvAyz uvvAyyz uvvxyyz


e portanto a cadeia uvvxyyz = uv2xy2z L .
Continuando o processo, conclui-se que uvixyiz L, para qualquer i.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

286

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

As linguagens lineares so um subconjunto prprio da famlia das linguagens livres de


contexto. Por isso se pode afirmar que o lema das linguagens lineares um caso particular do
lema livre de contexto.
Essa caracterstica d-nos j alguma luz sobre a estratgia da sua utilizao: bloquear o
adversrio dando-lhe uma cadeia em que bombeando nos primeiros m caracteres e nos ltimos
m caracteres se destrua a caracterstica da linguagem em causa.
Exemplo 8.2.2.1
Prove-se que a linguagem L={anb2ncpd p, n 0, p 0} no linear.
Para um valor de m qualquer, tem que se escolher uma cadeia segundo alguma estratgia.
Aqui, trata-se de obrigar o adversrio a no conseguir bombear sem destruir a caracterstica da
linguagem: a relao entre o nmero de as e de bs e a relao entre o nmero de cs e de ds.
Sabendo ns que a zona de bombagem tem que estar prxima do incio ( distncia
mxima de m caracteres) e prxima do fim ( distncia mxima de m caracteres do fim),
suficiente apresentar uma cadeia que tenha

m as no incio, e assim bombeia as e no bombeia bs

e m ds no fim, e assim bombeia ds e no bombeia cs


Tabela Exemplo 8.2.2.1

Jogador 1
Define a linguagem: anb2nc pd p,

Jogador 2
Escolhe um m: 5

Indica uma cadeia:


aaaaabbbbbbbbbbcccccddddd
estratgia: m as, 2m bs, m cs, m ds
Decomposio: |uvyz|5
uvxyz= |aa|a|aabbbbbbbbbbcccccddd|d|d|
Indica um i que bombeie para fora: i = 0
aaaabbbbbbbbbbcccccdddd

Perde, em qualquer decomposio com


|uvyz| 5

no pertence a L
Escolhe outro m: 2

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

287

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Indica uma cadeia: aabbbbccdd


(estratgia, m+1 as, m bs, m cs)
Decomposio
uvxyz = ||a|abbbbccd|d|| , u=z)
Indica um i que bombeie para fora: i =2

Perde, em qualquer decomposio com

aaabbbbccddd

|uvyz| 2

no pertence a L
A linguagem no linear.
Ser livre de contexto no-linear ?
8.2.3. Relao entre os trs Lemas de Bombagem
Pela hierarquia das linguagens sabemos que

a famlia das linguagens lineares um subconjunto prprio das linguagens


livres de contexto

a famlia das linguagens regulares um subconjunto prprio das lineares e


portanto tambm das livres de contexto

Livres de Contexto
LemaLC

Lineares
LemaLin

Regulares
LemaReg

Figura 8.3.1. Relao entre os trs lemas e as trs famlias de linguagens em causa.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

288

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Assim sendo, quer dizer que


- uma linguagem linear deve satisfazer o Lema Livre de Contexto ? Sim
- uma linguagem regular deve satisfazer o Lema Livre de Contexto ? Sim
- uma linguagem regular deve satisfazer o Lema Linear ? Sim
De facto:
- o Lema Regular um caso particular do Lema Linear

se na decomposio uvxyz (Linear) uma entre v e y vazia (uma s


bomba) cai-se no caso Regular.

- o Lema Linear um caso particular do Lema Livre de Contexto

se uma linguagem verifica o Lema Linear, ela tambm verifica o Lema


Livre de Contexto. No entanto o valor de m no necessariamente o
mesmo para os dois lemas na mesma linguagem.

- o Lema Regular um caso particular do Lema Livre de Contexto.

Se no Livre de Contexto v for vazia, temos o caso Regular, ou se y for


vazia temos de igual modo o caso Regular.

Mas para provar que uma linguagem no pertence a uma das famlias, aplica-se o lema
dessa famlia (pela prova por contradio).
O Lema nunca se aplica para provar que sim, pertence, qualquer que seja o caso.

8.3. Propriedades de fecho e algoritmos de deciso para linguagens livres de


contexto.
8.3.1. Propriedades de fecho de linguagens livres de contexto
As propriedades de fecho referem-se a operaes de conjuntos feitas sobre as linguagens. Por
exemplo: se unirmos duas CFL, a linguagem obtida livre de contexto ou no ?
LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

289

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Teorema 8.3.1.1. A famlia das linguagens livres de contexto fechada em relao a


a) unio
b) concatenao
c) fecho-estrela e fecho-positivo
d) homomorfismos
e) reverso
Demonstrao
No caso das CFL, a prova mais fcil se usarmos as suas gramticas (relembre-se que no
caso das linguagens regulares se construam autmatos para a prova).
a) Prova em relao unio:
Exemplo 8.3.1.1Considerem-se as gramticas G1 e G2 seguintes, a que correspondem as
linguagens L1 e L2:

G2 =(V2, T2, S2, P2}

G1 =(V1, T1, S1, P1}

S2 0S1 | 01L

S1 aS1 | bA

L 1M

A bB

M 00N

B aC

P 11P | 1

C bbC | c
Se quisermos a linguagem

L3=L1L2
poderemos usar as duas gramticas para gerarem as cadeias da unio, usando ora uma ora
outra. Isto faz-se criando uma nova varivel de inicializao (um novo axioma) que deriva ou
a inicializao de G1 ou a inicializao de G2. Teremos assim a gramtica G3
G3 =(V3, T3, S3, P3}

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

290

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

S3 S1 | S2
S1 aS1 | bA
S2 0S1 | 01L
A bB
B aC
C bbC | c
L 1M
M 00N
P 11P | 1
Esta forma de especificar a unio muito prtica. Note-se que os alfabetos das linguagens
L1 e L2 so bem diferentes mas isso no tira qualquer coerncia gramtica G3 que nunca
mistura letras com nmeros numa cadeia. Este procedimento possvel para quaisquer
gramticas livres de contexto.
b) Prova da concatenao
Considerando ainda o mesmo exemplo, se quisermos L1L2 cria-se de modo anlogo uma
gramtica G4 do modo seguinte
G4 =(V4, T4, S4, P4}
S4 S1 S2
S1 aS1 | bAA
S2 0S2 | 01L
A bBB
B aC
C bbC | c
L 1MP
M 00N
P 11P | 1
Verifique o leitor que G4 nunca coloca letras depois de nmeros.
c) Prova do fecho estrela e do fecho-positivo

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

291

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

O fecho estrela L1* resulta da concatenao de sucessivas potncias de L1. Ora tal pode fazerse criando uma gramtica G5 que tenha um ciclo em torno de S1, que possa ser feito um
nmero qualquer de vezes, incluindo zero vezes:
G5 =(V5, T5, S5, P5}
S5 S1S5 | (ciclo em torno de S1)
S1 aS1 | bAA
A bBB
B aC
C bbC | c
Se eliminarmos na produo S5 elimina-se o carcter vazio, ou seja, teremos L1+.
d) prova em relao aos homomorfismos: ver Hopcroft , p.285
e) prova em relao reverso
Queremos provar que se L uma CFL, tambm o LR
Seja G a gramtica de L
G = ( V, T, S, P ), L = L (G)
Com por exemplo a produo P
A baABCba
Se construirmos uma gramtica a partir de G revertendo todos os corpos das produes de G,
no caso de P vir PR
A abCBAab
obteremos a gramtica GR que gera LR
GR = ( V, T, S, P R )
LR = L (GR)
Assim sendo LR livre de contexto (porqu?).

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

292

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Teorema 8.3.1.2. A famlia das linguagens livres de contexto no fechada em relao


f) interseco
g) complementao
h) diferena
Vejamos um exemplo de interseco que demonstra a propriedade.
Exemplo 8.3.1.2 (Hopcroft, 285)
Pela aplicao do lema da bombagem verifica-se que
L={0n1n2n, n1}
uma linguagem no livre de contexto ( dependente de contexto).
Considerem-se agora as duas linguagens L1 e L2 da tabela onde tambm esto as produes de
uma sua gramtica, que so livres de contexto.
Tabela Exemplo 8.3.1.2
L1={0n1n2i, n1, i1}

L2={0i1n2n, n1, i1}

L1L2={0n1n2n, n1}

Produes:

Produes:

Produes

SAB

SAB
n n

A0A1|01 (gera 0 1 )

A0|0 (gera 0i)

B2B|2 (gera 2i)

B1B2|12 (gera 1n2n)

???

A interseco das duas linguagens d de facto L. Por um lado em L1 o nmero de 0s iguala o


nmero de 1s. Por outro lado em L2 o nmero de 1s iguala o nmero de 0s. S pertencem
interseco das duas as cadeias em que se verifiquem simultaneamente as duas igualdades, ou
seja, em que o nmero de 0s iguale o nmero de 1s e o nmero de 2s, portanto as cadeias
de L. Ora L1 e L2 so livres de contexto e L no o .
Basta este exemplo para provar que a famlia das CFLs no fechada em relao
interseco.
A prova em relao complementao e diferena pode ver-se em Hopcroft 289.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

293

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Teorema 8.3.1.3. A famlia das linguagens livres de contexto fechada em relao


interseco regular.
Se L uma gramtica livre de contexto e R uma linguagem regular, ento
LR livre de contexto.
(propriedade de fecho em relao interseco regular).
Ver a demonstrao em Hopcroft 286.
Em consequncia, L-R uma CFL. De facto
L - R=L R
Ora se R regular, tambm o R e temos uma interseco regular.

8.3.2. Algumas propriedades decidveis de linguagens livres de contexto


Teorema 8.3.2.1 Existe um algoritmo para decidir se uma dada cadeia pertence ou no a L(G):
- 1 remover as produes unitrias e as produes-
- 2 fazer o parsing exaustivo
O parsing termina aps um nmero finito de etapas, encontrando a cadeia se ela pertence
linguagem ou no a encontrando se ela no pertence linguagem.
Teorema 8.3.2.2. Dada uma linguagem livre de contexto G= (V, T, S, P) existe um algoritmo
para decidir de L(G) ou no vazia:
- 1 remover as produes unitrias, as produes- , os smbolos e produes inteis.
- 2 Se o smbolo inicial S da gramtica G for intil, a gramtica vazia. Caso contrrio
no o .

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

294

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Teorema 8.3.2.3. Dada uma gramtica livre de contexto G= (V, T, S, P) existe um algoritmo
para decidir de L(G) ou no infinita, sendo G sem produes-, sem produes unitrias e
sem smbolos inteis.
Verifica-se se nas derivaes da gramtica h alguma varivel que se repita.
Por exemplo se numa derivao a varivel A se repetir,
*

xAy

uzv

possvel gerar um nmero infinito de cadeias:


*

uAv
*

uxAyv uxxAyv
*

uxn A yn v

...

uxn zyn v

Se nenhuma varivel se repetir, a linguagem finita.


O grafo de dependncia das variveis tambm permite decidir. Se ele contiver algum ciclo
fechado, a linguagem infinita. Caso contrrio finita.
Por exemplo o grafo de dependncia da gramtica seguinte, na figura 8.3.2.1 ,
Grafo de dependncias

S bAAa
A bBB

B aC
C bbCA | cA|c

Figura 8.3.2.2. Uma linguagem infinita.


apresenta dois ciclos, identificados na figura: C, C, C, ABC, ABC, ABC. Logo a
linguagem infinita.
J no exemplo seguinte teremos uma linguagem finita. Fica o leitor desafiado a enumerar
as suas cadeias.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

295

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Grafo de dependncias

S bAAa

A bBB
B aC
Cc
Figura 8.3.2.2. Uma linguagem finita
8.3.3. Algumas propriedades indecidveis de CFLs (Hopcroft, 302).
No existe nenhum algoritmo (no possvel resolver com um computador) algumas questes
que so aparentemente simples, com por exemplo:
a) uma dada gramtica CFG ambgua ?
b) uma dada linguagem CFL inerentemente ambgua ?
c) vazia a interseco de duas linguagens CFLs ?
d) so duas linguagens CFLs iguais ?
e) uma linguagem CFL igual a * ?
Isto no quer dizer que para uma linguagem concreta no se possa obter resposta a
qualquer daquelas questes. Quer dizer sim que no h nenhum algoritmo geral que d
resposta (em tempo til) para toda e qualquer linguagem livre de contexto.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

296

Teoria da Computao

Cap. 8 Propriedades das Linguagens Livres de Contexto

Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd

Ed., Jones and

Bartelett Computer Science, 2001.


Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd

Ed., John Hopcroft,

Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.


Elements for the Theory of Computation, Harry Lewis and Christos

Papadimitriou, 2nd

Ed., Prentice Hall, 1998.


Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

297

Teoria da Computao

Cap. 9 Mquinas de Turing

CAPTULO 9

MQUINAS DE TURING

9.1. Introduo

301

9.2. A Mquina de Turing padro

302

9.3. Diagrama de estados ou de transio da MT

309

9.4. MT como aceitador de linguagens

311

9.5. MT como transdutores

319

9.6. Combinaes de mquinas de Turing para tarefas complicadas

324

9.7. A tese de Turing

325

Bibliografia

328

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

299

Teoria da Computao

LEI/DEIFCTUC/2009/@ADC

Cap. 9 Mquinas de Turing

Documento de trabalho

300

Teoria da Computao

Cap. 9 Mquinas de Turing

9.1. Introduo
Uma pesquisa no Google em 6 de Dezembro de 2007 com turing machine deu 1.820.000
resultados. Este nmero mostra a importncia do tema.
As Mquinas de Turing (MT) estiveram no centro do desenvolvimento dos computadores e
da computao durante os ltimos 70 anos. Alain Turing (1912-1954) foi um brilhante
matemtico, em Cambridge, Inglaterra, numa poca efervescente de desenvolvimento da
lgica e da matemtica que haveria de resultar no computador digital, os anos 30 e 40 do
sculo passado. geralmente considerado como o fundador das cincias da computao.
Outros matemticos famosos, como Gdel, Bertrand Russel na Europa, Church nos EUA,
foram contemporneos de Alain Turing. Existe em Portugal um blog como seu nome,
http://turing-machine.weblog.com.pt, que merece uma visita.
Em 1940 Alan Turing procura formalizar a noo de algoritmo, identificando as operaes
fundamentais e primitivas que possam servir de base ao clculo matemtico. Depois, definiu
uma mquina abstracta capaz de executar essas operaes segundo regras bem definidas. A
MT foi assim concebida para ser um modelo de computao, formalizando um conjunto de
operaes bsicas s quais se pode reduzir qualquer computao.
Os autmatos finitos so para as linguagens regulares, os autmatos de pilha para as
linguagens livres de contexto. E as MT? Com que linguagens se relacionam?
J encontrmos linguagens que no so livres de contexto, como por exemplo anbncn. Por
isso no possvel construir um autmato de pilha que as aceite.
Ser que uma MT suficientemente poderosa para aceitar linguagens dependentes do
contexto? Todas elas? Qual o autmato mais poderoso? Quais os limites da computao?
So questes s quais as MT respondem.
Mquina de Turing
Figura 9.1.1. Importncia da Mquina
de Turing. At hoje no foi ainda
Um modelo abstracto de computao

inventado um computador capaz de


resolver um problema que a MT no
possa resolver. Este facto mantm ainda
vlida a tese de Church-Turing

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

Problemas resolveis e
irresolveis

301

Teoria da Computao

Cap. 9 Mquinas de Turing

9.2. A mquina de Turing padro


A mquina de Turing um autmato, com uma unidade de controlo e com um dispositivo
especial que funciona simultaneamente como entrada (onde l), armazenamento, e sada (onde
escreve). Esse dispositivo uma fita unidimensional que contm um nmero ilimitado de
clulas cada uma das quais pode conter um nico smbolo. Essa a sua caracterstica
distintiva em relao aos autmatos finitos (que no tm dispositivo de armazenamento) e
aos autmatos de pilha (que armazenam numa pilha ).
A fita da MT prolonga-se indefinidamente em ambos os sentidos e por isso pode conter
uma quantidade infinita de informao. Esta informao pode ser lida e alterada em qualquer
ordem e da o potencial da MT.
Associada fita est uma cabea de leitura-escrita que se pode mover sobre a fita para a
esquerda ou para a direita, podendo escrever ou ler um nico smbolo em cada movida.

UNIDADE
DE
CONTROLO

R/W

FITA
Figura 9.2.1 Componentes da Mquina de Turing

Definio 9.2.1.
Uma mquina de Turing M definida pelo septeto
M = (Q, , , , q0,

, F)

em que
Q o conjunto de estados internos da unidade de controlo

o alfabeto de entrada

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

302

Teoria da Computao

Cap. 9 Mquinas de Turing

o conjunto finito alfabeto da fita


a funo de transio
q0 o estado inicial
o carcter branco, smbolo especial de
F Q o conjunto de estados finais (aceitadores)
O alfabeto de entrada igual ao alfabeto da fita, com excepo do smbolo

(branco, um

carcter novo, no confundir com ) que no existe no alfabeto de entrada. Portanto

=-{ }
A funo de transio em geral uma funo parcial em Q

: Q Q {L, R}
em que R significa movida para a direita e L movida para a esquerda. Os dois argumentos de
entrada da funo de transio e os trs de sada so os seguintes:
q, prximo estado da unidade de controlo

estado actual unidade de


controlo

escrever na fita um novo smbolo em


substituio do presente

carcter de fita a ser lido no


momento
R/

fazer uma movida para a direita ou para a


esquerda

Figura 9.2.2 Funo de transio de uma Mquina de Turing


A movida da cabea faz-se depois da escrita do novo smbolo na fita.
Exemplo 9.2.2.1
Sejam

= { a, b }
= { a, b, }
: ( Q ) ( Q { L, R } )
e a transio

( q0, a ) = ( q1, b, R )
Esta transio ilustrada na figura seguinte.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

303

Teoria da Computao

Cap. 9 Mquinas de Turing

abc

bbc

q1

q0

Figura 9.2.3. Movida da MT do exemplo 9.2.1.


Lendo a,
-apaga-o e escreve b no seu lugar
-move a cabea de leitura uma clula para a direita, ficando a apontar para b.
Uma mquina se Turing pode ser encarada como um computador muito simples. De facto:
- tem uma unidade de processamento com memria finita (nmero finito de estados);
- tem uma segunda unidade de armazenamento de capacidade infinita;
- a funo de transio o programa do computador. uma funo parcial.
O autmato inicializado (no estado inicial q0 ) com alguma coisa j escrita na fita.
Executa depois uma sequncia de operaes, uma computao, definidas pela funo .
Como uma funo parcial, pode chegar a uma configurao para a qual no est
definita nenhuma transio. O autmato fica ento no estado parado (halt).
Nunca se definem transies a partir dos estados finais e por isso uma mquina de Turing
pra sempre que atinge um estado final.
Exemplo 9.2.2.
Seja a mquina de Turing definida por

Q = {q0, q1 }

= {a, b}
= {a, b,

F = {q1}

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

304

Teoria da Computao

Cap. 9 Mquinas de Turing

(q0, a) = (q0, b, R)
(q0, b) = (q0, a, R)
(q0, ) = (q0, , R)

q3

q0

q0

(q0, a) = (q0, b, R)
b

q0
b

q0

(q0, b) = (q0, a, R)
a

q0

q0

(q0, b) = (q0, a, R)
b

q0

q0

(q0, ) = (q0, , R)
Figura 9.2.4. Movidas do exemplo 9.2.2
No fim obtm-se o seguinte contedo da fita
b

Se para a mesma mquina a funo de transio for

(q0, a) = (q0, a, R)

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

305

Teoria da Computao

Cap. 9 Mquinas de Turing

(q0, b) = (q1, b, R)
(q0, ) = (q0, , R)
(q1, a) = (q0, b, L)
(q1, b) = (q0, b, L)
(q1, ) = (q0, , L)
obtm-se um funcionamento em ciclo infinito, como se pode ver para a cadeia aabbba:

(q0, a) = (q0, a, R)
a

q0

q0

q0

(q0, b) = (q1, b, R)

(q1, b) = (q0, b, L)
a

q0

q1

q0

q1

(q0, b) = (q1, b, R)
a

q0

q1

Figura 9.2.5 Movidas para o exemplo 9.2.2, segundo caso.


A mquina de Turing padro tem as seguintes caractersticas:
1- Uma fita ilimitada em ambas as direces, permitindo um nmero arbitrrio de
movidas esquerda e direita.
2- determinstica na medida em que define no mximo uma movida para cada
configurao, no havendo escolhas possveis.
3- No existe qualquer ficheiro de entrada especial. Pressupe-se que no instante inicial a
fita tem algum contedo especificado a introduzido pelo programador. Parte deste

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

306

Teoria da Computao

Cap. 9 Mquinas de Turing

pode ser considerado a entrada. Sempre que a mquina pare (halt), algum do contedo
da fita pode ser considerado como sada.
Como veremos posteriormente, existem outras verses de mquinas de Turing mas que se
baseiam neste modelo base, estendendo algumas caractersticas (mas no aumentando o seu
potencial limite de computao).
A configurao da mquina de Turing definida pela sua descrio instantnea composta
por trs partes:
-

estado actual da unidade de controlo

o contedo da fita

a posio da cabea de leitura/escrita.

Utiliza-se a notao seguinte para a descrever uma configurao


x1qx2
ou

a1a2...ak-1qakak+1...an
correspondente figura seguinte. A cabea aponta para a clula que contm o smbolo que
segue q, i.e., ak.
x1

a1

a2

x2

ak

an

Figura 9.2.6 Configurao de uma MT


A descrio instantnea s mostra uma parte da fita. Assume-se que a restante parte
contm apenas smbolos brancos, que so considerados irrelevantes e

por isso no

necessrio mostr-los. No entanto se a posio dos brancos for relevante, deve ser
especificada na descrio instantnea.
Para representar as movidas de uma MT utiliza-se a notao de configurao em configurao

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

307

Teoria da Computao

Cap. 9 Mquinas de Turing

configurao (k) | configurao (k+1)


Por exemplo para a transio

(q1, c) = (q2, e, R)
em termos de configuraes escreve-se, admitindo que na fita temos por exemplo abcd e que
a cabea aponta para c,
abq1cd | abeq2d
configurao (k) | configurao (k+1)

q1

q2

(q1, c) = (q2, e, R)

abq1cd | abeq2d

Figura 9.2.7. Uma movida entre duas configuraes instantneas

O smbolo indica um nmero arbitrrio de movidas. Se houver necessidade de

distinguir entre diversas MTs, usa-se M.


Definio 9.2.2 Movida
Seja M = ( Q, , , , q0,

, F) uma MT.

Ento qualquer cadeia a1a2.....ak-1q1akak+1...an com ai e q1 Q, uma descrio


instantnea de M.
possvel uma movida
a1a2.....ak-1q1akak+1...an | a1a2.....ak-1bq2 ak+1...an
se e s se existir a transio

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

308

Teoria da Computao

Cap. 9 Mquinas de Turing

(q1, ak) = (q2, b, R)


possvel uma movida
a1a2.....ak-1q1akak+1...an | a1a2.....q2ak-1bak+1...an
se e s se existir a transio

(q1, ak) = (q2, b, L)


Diz-se que M parou partindo de alguma configurao inicial x1qix2 se

x1qix2 y1qjay2
para algum qj e algum a, para os quais (qj, a) seja indefinido.
Chama-se computao sequncia das configuraes que levam a MT do estado inicial ao
estado de paragem (halt).
A situao em que a MT entra num ciclo infinito, nunca parando, nem de l podendo sair,
denota-se por

x1qx2
Esta situao, de ciclo infinito, em que a mquina nunca mais pra, muito importante na
aplicao da teoria das MT.

9.3. Diagrama de estados ou de transio da MT


A notao da funo de transio da MT diferente no JFLAP e no DEM:
JFLAP e Linz

: ( Q ) ( Q { L, R } )

i.e.

(q0, b) = (q1, b, R)

DEM e Taylor

: ( Q ) ( {L, R }) Q

i.e. (q0, ) = (R, q)

So necessrias, no DEM, mais instrues para a mesma funcionalidade : primeiro escreve,


e depois desloca-se. Usaremos preferencialmente a do JFAP.
Os diagramas de estados so uma forma alternativa escrita da funo de transio, tal
como nos outros autmatos estudados.
Exemplo 9.3.1.
Consideremos a MT, com uma fita completamente em branco, que faz o seguinte:
- inicializada lendo uma casa em branco,
- escreve os caracteres ab e

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

309

Teoria da Computao

Cap. 9 Mquinas de Turing

- pra lendo o carcter a.


q0

; a, R

q1

q0
q1

; b, L

qf

q1

q0

; a, R

; b, L

q1

qf

qf

Figura 9.3.1a Movidas e grafo no JFLAP da MT do Exemplo 9.3.1


No DEM teremos um grafo diferente:

DEM
q0
:a

q0
q1
a

a:R

q1
q2
a
:b
q2
q3
a

b
b:L
q3
qf
a

Figura 9.3.1b.
Movidas e
grafo no DEM
do exemplo
9.3.1

qf

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

310

Teoria da Computao

Cap. 9 Mquinas de Turing

Exemplo 9.3.2.
Para uma MT com a fita inicial vazia

que faz a MT da Figura seguinte ?


q0

JFLAP

; a, R

q1

; b, R

Figura 9.3 2a. MT do exemplo 9.3.2, no JFLAP.

q0

:a

q1

a:R

q2

:b

q3

b:R

Figura 9.3.2b. MT do exemplo 9.3.2 no DEM


Estando no estado inicial q0 lendo branco, escreve a, passa ao estado q1 e vai para a direita,
ficando assim a apontar para branco. Estando em q2 apontando para branco, escreve b , passa
a q0 desloca-se para a esquerda. Agora est em q0 lendo a na fita; no estando nada previsto
para este caso, faz halt e a fica para sempre.

9.4. MT como aceitador de linguagens.


Tal como nos autmatos anteriores, tambm as MT podem funcionar como aceitadores de
linguagens.
O processo de aceitao de uma linguagem pela MT o seguinte:

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

311

Teoria da Computao

Cap. 9 Mquinas de Turing

dada uma cadeia w de caracteres do alfabeto de entrada (note-se que este no inclui
, o carcter vazio), escrita na fita. A cadeia w no contm brancos,

antes de w esto brancos e depois de w brancos esto,

a MT inicializa-se no estado q0 com a cabea de leitura-escrita posicionada no


carcter mais esquerda de w,

d-se uma sequncia de movidas,

se a MT entrar num estado final e parar (halt), w aceite,

se a MT parar (halt) num estado no final, w no aceite,

se a MT no parar (entrando num crculo infinito), w no aceite.

Note-se que h estados que tm caractersticas especiais, so os estados finais aceitadores.


Definio 9.4.1. Linguagem aceite pela MT.
Seja M = ( Q, , , , q0,

, F) uma MT. Ento a linguagem aceite por M

L(M) = { w + : q0 w x1 qf x2 para algum qf F e x1, x2 * }


Se a cadeia tivesse brancos, a MT no saberia quando ela terminaria e teria que continuar a
percorrer a fita at ao infinito.
Segundo Taylor (def. 1.3. p. 76), MT aceita uma linguagem se aceita todas as palavras de L
e s essas (all and only the words in L).
Nota: a definio de Linz e de Hopcroft equvoca quanto necessidade de a MT ler toda
a cadeia de entrada antes de fazer halt. A definio de Taylor (tem que parar apontando para
um 1, com o resto da fita em branco, e 1 no pertence ao alfabeto de entrada) implica que toda
a cadeia tenha que ser lida para ser, eventualmente, aceite.
Exemplo 9.4.1
Seja o alfabeto = {0, 1} e nele a linguagem L= L(00*), composta por todas as cadeias
com um ou mais zeros (sem 1s).

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

312

Teoria da Computao

Cap. 9 Mquinas de Turing

Construir uma MT que aceite esta linguagem.


Trata-se de uma linguagem regular (porqu, caro leitor ?) e por isso no seria necessria
uma MT para a aceitar. No entanto o exemplo tem objectivos didcticos.
Soluo:
A primeira operao a fazer no projecto da MT (de qualquer MT) definir um algoritmo,
ou seja, uma estratgia de operaes elementares que levem ao fim pretendido.
Admitamos que uma cadeia de zeros est escrita na fita, com brancos e s brancos
esquerda e direita. Admitamos tambm que A MT se inicializa com a cabea de leitura
apontando para o primeiro carcter da cadeia. Estas hipteses so as normalmente aceites.
Ns queremos que a mquina varra a cadeia, da esquerda para a direita, e a aceite se s
tiver zeros e a rejeite de tiver algures algum 1. Ento pode ser assim:
1 L o primeiro zero, deixa estar e desloca-se para a direita

(q0, 0) = (q0, 0, R)
Havendo vrios zeros, ela ficou a apontar para o segundo zero. Ento esta transio d-se
novamente, porque ela se mantm no estado q0 , indo por a alm, at acabarem os zeros. Se
existisse um 1 algures no meio dos zeros a MT pararia (no est definida uma transio para
essa eventualidade).
2 Depois de ler todos os zeros h-de chegar ao primeiro branco direita da cadeia. A
pode seguir para a direita, deixando o branco tal como est. Como correu tudo bem at aqui,
j leu a cadeia toda, deve passar a um estado aceitador, qf :

(q0, ) = (qf, , R).


Para desenharmos um diagrama de estados para esta funo de transio, no JFLAP ou no
DEM, temos que ter em ateno a notao a usar . A notao de Taylor para a funo de
transio no igual de Linz:
Linz:

: ( Q ) ( Q { L, R } )

i.e.

Taylor:

: ( Q ) ( {L, R }) Q

i.e. (q0, ) = (R, q)

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

(q0, b) = (q1, b, R)

313

Teoria da Computao

Cap. 9 Mquinas de Turing

O que obriga criao de um estado adicional no DEM.


Por isso o diagrama de estados seguindo Linz e o JFLAP ser
0:0:R

:R

q0

qf

Figura 9.4.1. Grafo JFLAP da MT do exemplo 9.4.1.

Seguindo Taylor e o DEM teremos que criar mais estados:

(q0, 0) = (q1, 0)

0:R

(q1, 0) = (q1, R)
(q1, ) = (qf, )

q0

0:0
q1

qf

Figura 9.4.2. Grafo DEM da MT do exemplo 9.4.1

Note-se que uma funo parcial. No definida por exemplo (q0, 1). Se aparece um
1, no estado q0, a MT pra (halt) para sempre, indicando que w no aceite, a menos que q0
fosse um estado final. Mas a definio de estado final deve ser feita previamente resoluo
do problema: um estado final se antes dele s apareceram 0s e se j se chegou ao fim da
cadeia, i.e., se a cabea apontar para um branco. No pode ser q0 e por isso cria-se um outro
estado qf para estado final. Chega-se a ele apenas quando se leu a cadeia toda sem encontrar
qualquer 1.
As MT podem reconhecer algumas linguagens que no so livres de contexto. So
mquinas mais poderosas do que os autmatos estudados anteriormente. Voltaremos a este
assunto mais tarde.
Exemplo 9.4.2. MT aceitadora de Linguagem na=nb
Seja o alfabeto ={a,b} e a linguagem composta pelas cadeias com um nmero de as igual
ao nmero de bs, em qualquer ordem., por exemplo
ab, ba, abaaabbabbbb, bbaabababbaaa, etc.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

314

Teoria da Computao

Cap. 9 Mquinas de Turing

Desenhar o grafo de uma MT capaz de reconhecer esta linguagem


No projecto de uma MT a questo primeira e decisiva a da concepo do algoritmo a
programar: como que uma MT pode contar as e bs ?
Uma soluo possvel: a mquina apaga um a e um b de cada vez; se no fim no sobrar
nenhum carcter, porque o nmero de as era igual ao nmero de bs. Se sobrar um ou mais
as (ou bs) a cadeia no pertence linguagem.
Podemos imaginar varrimentos sucessivos da cadeia , da direita para a esquerda) de tal
modo que em cada varrimento substitui um a e um b por um* (uma forma de apagar).
Chegando ao fim da cadeia (encontra um branco) volta ao princpio, deslocando-se para a
esquerda at encontrar um branco.
Por exemplo para ababab teremos sucessivamente na fita
aaababbb

*aa*abbb

bbabaa

*b*baa

aabbbabb

*a*bbabb

**a*a*bb

****a**b

***b*a
****babb

********

******

****b**b

Programa da MT
- Carrega-se a cadeia na fita
- Desloca-se a cabea at ao primeiro carcter, que ser a ou b. Suponhamos que a.
- Apaga-se o a e substitui-se por *. Segue para a direita. A encontra a, b (ou *).
O grafo est na pgina seguinte.
Exemplo 9.4.3.
Seja a MT com = {a, b}, = {a, b,

}, F = {qf}, Q = {q0, q1, qf}

(q0, ) = (q0, , R),


(q0, b) = (q1, b, R),
(q1, a) = (q1, a, R),
(q1,b) = (q1, b, R),
(q1, ) = (qf, , R).
Que linguagem aceita ?
Analisando as transies, verifica-se que em q0 com b passa a q1 (e em q0 com a pra). Em q1
l as e bs por qualquer ordem e em qualquer nmero, avanando at ao fim da cadeia. Por

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

315

Teoria da Computao

Cap. 9 Mquinas de Turing

isso a linguagem aceita pela MT L= L[b(a+b)*], todas as cadeias que se iniciam por b em
{a,b}.
a : a, R
* : *, R

JFLAP
a : *,R

q1

* : *, R

b : *, L

* : *, L
a :a, L

: ,R

q0

q3

a : *, L

q2

b :b, L

,L
q4
:

b : b, R
* :*, R

,L

,L

*:R

*: ,L
q5

a:R
qf
q1
*:R

a:*

b:* *:L

*:R

a:L
:R

q5

q0
b:*
:L

b:L
q2

*:R

q4

q6

Figura 9.4.3. MT

:L

*:R

do exemplo 9.4.2.
na=nb no JFLAP e

:R
b:R

*:
q7

DEM

no DEM.

Exemplo 9.4.4
Construir no JFLAP uma MT que aceite a linguagem L = { an bm : n 1, m n }

Um algoritmo possvel: depois de escrita a cadeia na fita


- em cada viagem da esquerda para a direita apaga um a e um b, marcando-os com *. Vai at
ao fim e volta ao princpio.
LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

316

Teoria da Computao

Cap. 9 Mquinas de Turing

- recomea o ciclo at que ou acabem os as ou os bs. Se sobrarem as ou bs (ou exclusivo)


a cadeia aceite, terminando a computao no estado SIM. Caso contrrio termina no
estado NO.

A Figura 9.4.5 apresenta um grafo possvel.

Figura 9.4.4. Esta MT decide se uma cadeia pertence linguagem (termina em SIM) ou se
no pertence linguagem (termina em NO).
Exemplo 9.4.5. Desenhar uma MT que aceite a linguagem L = { an bn an bn : n 0 }

- procura o prximo a , marca-o, muda de estado e vai para a direita


- encontra o primeiro b, marca-o e muda de estado
- continua at ao prximo a, marca-o e muda de estado
- procura o prximo b, marca-o, muda de estado e regressa ao incio
- continua at que acabem os as e os bs
- aceita quando marcar todos e no sobrar nenhum
- no aceita de ou os as ou ao bs acabarem num dos segmentos da cadeia, sobrando nos
outros.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

317

Teoria da Computao

Cap. 9 Mquinas de Turing

Figura 9.4.5. Implementao FLAPP do exemplo 9.4.5 pelo aluno Antnio Damasceno em
2004-5.

Exemplo 9.4.6 O mesmo para o caso L = { an b2n : n 1}


- por cada a apaga dois bs, usando para isso dois estados (a forma de contar dois bs)
- repete at que acabem todos os as e bs
-se sobrar algum a ou algum b no aceita

Figura 9.4.6a. JFLAP do exemplo 9.4.6 pelo aluno Antnio Damasceno em 2004-5.
Uma outra implementao possvel

Figura 9.4.6b.
Implementao JFLAP
pelo aluno Cristvo Pires
em 2004-5 (exemplo
9.4.6).

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

318

Teoria da Computao

Cap. 9 Mquinas de Turing

Exemplo 9.4.7 Para L = { an bm an+m : n 0, m1 } temos o algoritmo


- 1 apaga n as esquerda e n cs direita; se os cs no chegarem no aceita;
- 2 apaga m bs esquerda e m cs direita; se os cs no chegarem ou se sobrarem, no
aceita.
Para apagar os n as tem que percorrer n vezes um ciclo de apagar um; por isso cria-se um
ciclo apaga um a e vai apagar um c regressa. Se os cs acabarem antes dos as no aceita.
Analogamente para apagar os bs.
Para distinguir as diversas situaes criam-se estados afectos a cada situao.

Figura 9.4.7. JFLAP do ex. 9.4.7 pelo aluno Antnio Damasceno no ano lectivo 2004-5.

9.5 TM como transdutores


As MT so um modelo abstracto de computadores digitais em geral. Ora um computador
sobretudo um transdutor: transforma uma entrada numa sada, por exemplo fazendo um
clculo. As MT podem funcionar tambm como transdutores.
A entrada para uma computao composta por todos os smbolos no brancos escritos na
fita no instante inicial.
A sada da computao o que resultar escrito na fita, depois de todas as movidas da MT.
Com estes conceitos pode-se encarar a MT M, enquanto transdutor, como implementando
uma funo f definida por

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

319

Teoria da Computao

Cap. 9 Mquinas de Turing

= f (w),
w
, desde que se verifique que partindo de w no estado inicial aps a
e portanto com sada w
computao de f chega a um estado final qf

q0w M qf
As especificaes do estado final so feitas pelo programador.
Ser que qualquer funo computvel por uma MT ?
Definio 9.5.1. Funo computvel.
Uma funo f com o domnio D diz-se Turing computvel ou simplesmente computvel
se existir alguma mquina de Turing M = ( Q, , , , q0,

, F) tal que

qf F

q0w M qf f (w),
para toda a w D.

Esta definio pressupe que a MT pra, depois de calcular f(w), apontando para o
primeiro carcter do resultado do clculo.
Todas as funes matemticas usuais, por mais complicadas que sejam, so Turingcomputveis. Esta afirmao no se pode provar, mas acredita-se que assim seja porque at
hoje ningum foi capaz de propor uma funo matemtica que no fosse computvel.
Vejamos alguns exemplos.
Exemplo 9.5.1. Adio de inteiros (representao unria) (Linz, 233
Para adicionar nmeros inteiros com uma MT, primeiro faz-se a sua representao unria, s
com 1s. Depois temos que especificar como se escrevem as duas parcelas na fita da MT.
Admitamos que as separamos por um 0, ficando brancos esquerda e direita:
Figura 9.5.1.
Preparao
da fita para a
adio

LEI/DEIFCTUC/2009/@ADC

x=5

x=4

Figura 9.5.1. Preparao da adio

Documento de trabalho

320

Teoria da Computao

Cap. 9 Mquinas de Turing

e que no fim da computao o resultado deve ser apresentado em unrio (como uma sequncia
de 1s)
x+ y =9

Figura 9.5.2. Resultado final da adio


Definido o incio e o fim, temos agora que escrever o programa da MT.
Outros exemplos:
Exemplo 9.5.2. A mquina copiadora (Linz, 234).
Vamos projectar uma MT que copie um nmero escrito em binrio na fita, escrevento a cpia
direita, deixando um branco entre os dois.
A MT inicia-se no primeiro 1 de uma cadeia de n 1s e pra no primeiro 1 de uma cadeia
ininterrupta de n 1s ,seguida por um branco, seguido por uma cadeia ininterrupta de n 1s,
com o indicado na fig. 9.5.4.
1
q0

Figura 9.5.3

qf

Este tambm o Ex. 1.3.2 de Taylor, Copying Machine.tm implementada em DEM, fita 8.tt
Exemplo 9.5.3.
Comparao de dois nmeros positivos, x e y, em representao unria, Linz 235.
Escrevem-se os nmeros na fita separados por um 0, por exemplo, comparar 4 e 6,
11110111111
Um algoritmo possvel
- apagar um 1 da primeira parte e outro 1 da segunda, at os 1s acabarem numa das partes

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

321

Teoria da Computao

Cap. 9 Mquinas de Turing

Caso 4&6
11110111111 *1110*11111**110**1111***10***111****0****11
Agora quando procura mais 1 do lado esquerdo no encontra, passa pelo zero e continua at
ao ltimo 1, o que provoca a transio para o estado x<y.
Caso 6&4
11111101111*111110*111**11110**11***11101*******110****
Agora ao apagar mais um 1 do lado esquerdo e procurar o outro 1 do lado direito, no o
encontra, chega ao branco e passa ao estado x>y.
No caso de igualdade, quando acabam os 1s em ambos os lados, passa ao estado x=y.
Fica o leitor desafiado a desenhar o respectivo grafo, usando o JFLAP.
Exemplo 9.5.4

q0

:a

q1

Figura 9.5.4

a:R
Que faz ?
1 Inicializando-se numa fita vazia, l um branco, substitui-o por um a, desloca-se para a
direita e repete estas operaes indefinidamente.
2 Percorre a fita at ao infinito sem escrever nada.
Exemplo 9.5.5. E esta ?

q0

:a

q1

a:R

q2

:b

q3
Figura 9.5.5

b:R
Escreve sucessivamente abababababab.......

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

322

Teoria da Computao

Cap. 9 Mquinas de Turing

Exemplo 9.5.6.
Construa uma MT que decida a linguagem em ={a,b} composta por todas as cadeias que
contenham a subcadeia baa (isto , que diga se sim ou no uma cadeia pertence linguagem).

Figura 9.5.6

Note-se que esta linguagem regular, e por isso tambm se pode desenhar um DFA que faz o
mesmo.
Exemplo 9.5.7
Desenhe uma MT que calcula a funo f(x)=2x, estando x em unrio.

Primeiro devemos conceber um algoritmo que resolva o problema. No existe uma nica
soluo. Uma delas poder ser

1- substituir cada 1 por um x e de seguida adicionar um y no fim da cadeia. Por exemplo para
f(111)= 111111 a fita ter sucessivamente
111 x11yxx1yyxxxyyy

2 - substituir cada x por 1 e cada y por 1


xxxyyyxxxyy1xxxy11 xxx111

xx1111 x11111111111
O grafo da MT ser o da Figura.

Figura 9.5.7

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

323

Teoria da Computao

Cap. 9 Mquinas de Turing

Exemplo 9.5.8 Desenhar uma MT que conte o nmero de aa em cadeias no alfabeto {m, a, r,
g, a, r, i, d, a}.

Figura 9.5.8. MT
que conta os as
em cadeias de
{m,a,r,g,a,r,i,d,a}

9.6. Combinaes de mquinas de Turing para tarefas complicadas


Muitas funes complicadas podem-se decompor em sequncias de funes simples
computveis (toda a anlise numrica visa esse fim). Tal conceito tambm se pode aplicar ao
nvel da Turing-computabilidade.
Pode-se projectar uma mquina de Turing composta por combinaes de mquinas de
Turing elementares a fim de realizar operaes mais complexas.
Exemplo 9.6.1 (Linz)
Seja a funo f definida por

x + y , se x y
f (x, y) =
0, se x< y

Podemos decomp-la em trs operaes: uma comparao, uma soma, a um apagamento, que
se podem implementar pelos trs blocos da Figura 9.6.1.

Somadora
x
x, y
Comparadora

Figura 9.6.1.
Implementao
da funo do
exemplo 9.6.1.
LEI/DEIFCTUC/2009/@ADC

f (x, y)
x<y

Documento de trabalho

Apagadora

324

Teoria da Computao

Cap. 9 Mquinas de Turing

Agora cada bloco pode ser executado por uma MT. A funo total resulta da combinao
das trs MTs.

9.7. A tese de Turing


Nos anos 30 do sc. XX Turing conjecturou que qualquer computao que possa ser
implementada por processos mecnicos (i.e., por uma mquina) pode tambm ser
implementada por uma mquina de Turing. Pode ser interpretado ao contrrio: uma
computao mecnica se e s se puder ser executada por uma mquina de Turing.
Alguns argumentos a favor da tese de Turing:
1- Qualquer computao que possa ser feita por qualquer computador digital existente
tambm pode ser feita por uma mquina de Turing.
2- Ningum conseguiu ainda encontrar um problema, resolvel por um qualquer
algoritmo, para o qual no possa ser escrito um programa para uma mquina de
Turing.
3- Foram propostos modelos alternativos para a computao mecnica, mas nenhum
deles mais poderoso do que a mquina de Turing.
A tese de Turing (ainda ) uma lei bsica das cincias da computao. Nesses tempos o
desenvolvimento de um algoritmo consistia fundamentalmente na escrita de um programa de
uma MT que o resolvesse. Mesmo actualmente um algoritmo pode-se definir como uma MT,
Se considerarmos uma funo qualquer, f, com um domnio D e o contradomnio R, para
um elemento d do domnio escrito na fita de uma MT, escreve-se um programa tal que
iniciando-se a MT apontando para o primeiro smbolo de d, termina uma computao depois
de escrever na fita o valor de f(d). Teremos assim a seguinte definio de algoritmo.
Definio 9.7.1. Algoritmo.
Um algoritmo para uma funo f : D R uma mquina de Turing M que,
-

dada como entrada um qualquer d D na sua fita

pra (halt) com uma resposta correcta para f (d) R na sua fita. Requer-se que

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

325

Teoria da Computao

Cap. 9 Mquinas de Turing

q0d M qf f (d),

qf F

para todo o d D.
No DEM existe uma livraria de MTs que executam diversos algoritmos. A tabela seguinte
enumera-os. Alguns deles recorrem a uma MT especial, com vrias fitas (tapes). No Captulo
10 abordaremos essas arquitecturas especiais da MT, que no entanto no alteram as suas
capacidades computacionais, apenas tornam mais fcil a programao de algoritmos.
Tabela 9.7.1 Lista de exemplos do DEM. Os exemplos esto em Taylor.
balpatent

balanced parenthesis

beaver

busy beaver function w/ 5 arguments

c-interp

C- language Compiler/Interpreter Prototype

Cnfsat

CNF- Sat (Example 8.5.1) (5 tapes)

Convert

Convert to unary

Copying

Copia cadeia de caracteres

Cvp

Circuit Value Problem (example 8.8.1)

div2mult

f(n)=n div 2 (multitape machine)

div2single

f(n)=n div 2 (single tape)

Ex12-3-1

Language Emulator (Example 12.3.1)

Ex2-2-3

Example 2.2.3 w=wR, odd palindromes

Ex2-6-2

nondeterm accepter a**(2n)+a**(3n), n0

Ex2-6-3

nondeterm accepter a**(n**2) n0

Ex2-6-5

nondeterm f(n) = cubicroot(n), se cubo perfeito, indefinida caso contrrio

Ex4.5.1

Markov algorithm simulator 4 tapes

Factoria

f(n)= n!

Fspacon

f(n) = n**2 is fully space-constructible

God

Exodus 3.13-14 I am who I am

Multiply

f(n,m)=nm the multiplication machine

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

326

Teoria da Computao

Cap. 9 Mquinas de Turing

N^n

nn, the n to n power

Nntravsa

Nearest-Neighboor Traveling Salesman Machnine/Exxample 8.10.2

Palindro

Palindromes

Recdesct

Recursive-descent Parser

Recognzr

Reconhecimento da cadeias (pares, impares, carter do meio, palindromes)

Reverse

reverse word

Reverse2

reverse word multitape

Samenumb

same numbare of as as bs single tape

Samenumb4t

same number of as and bs 4 tapes

Selctstr

select a string

Sqrt

square root (perfect square)

Exemplo 9.7.1 Desenvolver um algoritmo para calcular n3


Uma soluo possvel:
1 - Escreve-se na fita n0n0n.
2 - Copia n direita um nmero n de vezes, obtendo-se assim nxn=m.
3 - Copia depois m um nmero n de vezes, obtendo-se mxn=nxnxn.
Exemplo 9.7.2. Desenvolver as linhas gerais de um algoritmo para calcular n!
Com sabemos n!=nx(n-1)x..x2x1. Para isso na MT
- escreve-se n na fita, em unrio
- copia-se n direita
- decrementa-se n, (subrao de 1)
- multiplica-se (n-1)n = p
- decrementa-se n-1, vindo n-2
- multiplica-se (n-2)p obtendo-se um novo valor de p.
-
- at se atingir n-i=1, e nesta altura o valor de p o factorial.
Um programa para isso ter uma extenso considervel
LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

327

Teoria da Computao

Cap. 9 Mquinas de Turing

Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001.
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John

Hopcroft,

Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.


Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction th the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
http://www.turing.org.uk/turing/Turing.html (Alan Turing Home Page).
http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Turing.htm.

LEI/DEIFCTUC/2009/@ADC

Documento de trabalho

328

S-ar putea să vă placă și