Anda di halaman 1dari 331

LICENCIATURA EM ENGENHARIA INFORMTICA

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 2011
TEORIA DA COMPUTAO




ndice Geral


Captulo 1. Introduo e definies bsicas 1
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
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
1

CAPTULO 1

INTRODUO E DEFINIES BSICAS





1.1. Introduo 3
1.2. Linguagens formais 3
1.2.1. Alfabetos, cadeias e operaes sobre cadeias 5
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













Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
2

Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
3

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.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
4

1.2.1 Alfabeto, cadeias e operaes sobre cadeias
Um alfabeto composto por um conjunto no vazio de smbolos, usualmente representada
pela letra grega E (sigma), de smbolo.
E={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:
E = {a,b}, alfabeto composto pelas duas letras a e b.
E = {0,1}, alfabeto binrio composto pelos valores binrios 0 e 1.
E = {(,),[,] } , alfabeto dos parnteses
E = {0,1,2,3,4,5,6,7,8, 9 }, alfabeto dos algarismos rabes
E ={a,b,c, ..., z}, o alfabeto romano minsculo
E ={conjunto de todos as caracteres ASCII}, o alfabeto ASCII.
E = {copos, facas, garfos, pratos, colheres, tachos}, o alfabeto dos
instrumentos de cozinha
E = {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.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
5
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 E = {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= a
1
a
2
a
3
....a
n
v= b
1
b
2
b
3
b
n

a concatenao direita de v com w , wv, ser
wv=a
1
a
2
a
3
a
n
b
1
b
2
b
3
b
n

e a concatenao esquerda, vw
vw=b
1
b
2
b
3
b
n
a
1
a
2
a
3
a
n

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,
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
6
w
R
=a
n
...a
3
a
2
a
1

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 denota-
se por (alguns autores denotam por c) . 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 = w
R
. 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:
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
7
{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, w
n
, uma cadeia obtida pela concatenao n vezes da
cadeia w consigo prpria. Assim por exemplo
w
2
= ww
w
3
= www,
etc.
fcil de ver que
w
1
=w
Quanto a w
0
, 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
w
0
={}
para todo e qualquer w.
O sinal de potncia tambm se usa para exprimir a concatenao de um carcter
consigo prprio. Por exemplo
a
3
=aaa,
1
2
0
4
=110000,
a
n
b
m
=aaabbb.
Tambm se define potncia de um alfabeto, E
n
, como o conjunto das cadeias desse
alfabeto de comprimento n. Assim se E={0,1},
E
0
={}, cadeia vazia
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
8
E
1
={0,1} , cadeias com um carcter
E
2
={00,01,10,11}, cadeias com dois caracteres
E
3
={000, 001, 0010, , 111} cadeias com trs caracteres
etc.
(note-se que enquanto E um conjunto de caracteres (smbolos), E
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 E
*
o
fecho estrela do alfabeto (star-closure). Assim E
*
conjunto de todas as cadeias que se
podem obter pela concatenao de zero ou mais smbolos de E. Contm sempre a cadeia nula
. simplesmente o conjunto de todas as cadeias possveis no alfabeto E, e uma forma
simples e elegante de denotar esse conjunto infinito.
Se excluirmos a cadeia vazia do fecho estrela, obtemos o fecho estrela positivo, E
+
E
+
=E
*
-{}
fcil de ver, pela definio, que quer E
*
quer E
+
so sempre conjuntos infinitos,
mesmo quando o alfabeto E finito.
Chegamos agora finalmente definio de linguagem, um dos conceitos chave da
computao:
Definio 1.2.1. Linguagem : dado um alfabeto qualquer E, linguagem L qualquer
subconjunto de E
*
.
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
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
9
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 E ={a,b}.
Nele E*={,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 L
1
={a, ab, abb} uma linguagem em E. uma linguagem finita.
(ii) O conjunto L
2
={a
n
b
n
: n>0} uma linguagem em E. uma linguagem infinita.
As cadeias ab, aabb, aaabb, pertencem a L
2
porque se podem escrever na forma
respectivamente a
1
b
1
, a
2
b
2
, a
3
b
3
. Como veremos a gramtica da linguagem define as regras da
formao das cadeias.
J as cadeias aba, abb, aaababbab, no pertencem a L
2
(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 E={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.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
10
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 L
1
e L
2,
poderemos fazer com elas as
seguintes operaes:
Unio: todas as cadeias que pertencem ou a uma ou a outra,
L
1
L
2
= {w: weL
1
ou weL
2
},
Interseco: todas as cadeias que pertencem simultaneamente a uma e a outra,
L
1
L
2
= {w: weL
1
e weL
2
},
Diferena de duas linguagens: todas as cadeias que pertencem a uma e no pertencem
outra,
L
1
- L
2
= {w: weL
1
e weL
2
},
L
2
L
1
= {w: weL
1
e weL
2
}.
Complemento de uma linguagem: todas as cadeias possveis no alfabeto respectivo
(isto , E
*
) menos as cadeias da linguagem complementada,
Compl(L) =L =E* - 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 L
R

L
R
= {w
R
: weL}.
Concatenao de duas linguagens: todas as cadeias em que uma parte (prefixo)
pertence primeira linguagem e a parte restante (sufixo), segunda
L
1
L
2
={uv: ueL
1
, veL
2
},.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
11
Dada a concatenao de L
1
e L
2
ser que L
1
_ L
1
L
2,
para quaisquer L
1
e L
2
em
quaisquer alfabetos E
1
e E
2
?
Tal ser possvel se e s se e L
2
. Vejamos as vrias situaes possveis.
(i) No caso em que os dois alfabetos so disjuntos, se no pertence a L
2
, ento a
concatenao de uma qualquer cadeia de L
1
com uma qualquer cadeia de L
2
resulta numa
cadeia que no pertence a L
1
e por isso nenhuma cadeia de L
1
neste caso pertence
concatenao.
(ii) no caso particular em que as duas linguagens partilham o mesmo alfabeto, ao
concatenarmos a menor cadeia de L
1
com a menor cadeia de L
2
, obtm-se uma cadeia maior
do que a primeira, e portanto no possvel obter em L
1
L
2
a menor cadeia de L
1
. Pelo menos
essa no pertence a L
1
L
2
e por isso o mesmo sucede a L
1
(esta s pertence concatenao se
todas as suas cadeias pertencerem). No caso extremo em que L
1
=L
2
, verifica-se a mesma
situao.
Mutatis mutandis da anterior L
2
_ L
1
L
2
se e s se e L
1

Distributividade da concatenao em ordem unio
Considerem-se, a ttulo de exemplo, as linguagens
L
1
={a, ab, b},
L
2
={0, 01}
L
3
={11, 111, 1111}
Ento
L
2
L
3
={0,01,11,111,1111} e
L
1
. (L
2
L
3
) ={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)}
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
12
= {a,ab,b}.{0,01} {a,ab,b}{11, 111, 1111}=.{L
1
L
2
L
1
L
3
Este resultado pode-se generalizar: a concatenao distributiva em relao unio.
L
1
. (L
2
L
3
)= L
1
L
2
L
1
L
3
.
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
L
2
L
3
={0, 01}.{11, 111, 1111}={011,0111,01111,0111,01111,011111}
L
1
(L
2
L
3
)={a, ab, b}{011,0111,01111,0111,01111,011111}=
={a, ab, b, 011,0111,01111,0111,01111,011111}
Por outro lado,
( L
1
L
2
) = L
1
={a, ab, b}{0, 01}= {a, ab, b, 0, 01}
(L
1
L
3
) = {a, ab, b} {11, 111, 1111}= {a, ab, b, 11, 111, 1111}
Concatenando estas duas,
( L
1
L
2
). (L
1
L
3
) = {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 L
1
(L
2
L
3
).
Logo
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
13
L
1
(L
2
L
3
) = ( L
1
L
2
) (L
1
L
3
)
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 C = C
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 L
0
.

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,
L
0
={}
L
1
=L
L
2
=LL
...
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
14
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* = L
0
L
1
L
2
L
3
......
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
L
0
={} - todas as cadeias com zero caracteres
L
1
={0,1} - todas as cadeias de 0s e 1s com um carcter
L
2
={0, 1}.{0, 1}={00,01,10,11} - todas as cadeias de 0s e1s com dois caracteres
L
3
={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
L
4
={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 ?
L
0
={} - pelas razes anteriores
L
1
={0,11}
L
2
={0, 11}.{0, 11}={00,011,110,1111}
L
3
={0, 11}.{0, 11}.{0,11}={00,011,110,1111}.{0,11}=
={000,0011,0110,01111,1100,11011,11110,111111}
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
15
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 L
6
possvel: 0011 pertence a L
3
, e 0110
pertence tambm a L
3
.
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
+
: L
1
L
2
L
3
...... = L
*
- {}
Exemplo: Seja
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
16
L={a
n
b
n
, n>1}
Logo:
L={ab, aabb, aaabbb, aaaabbbb, ....}
L
2
= LL={ab, aabb, aaabbb, aaaabbbb, ...
abab, abaabb, abaaabbb, abaaaabbbb, ...
aabbab, aabbaabb, aabbaaabbb, aabbaaaabbbb, ...
........... }
Procurando uma forma compacta para L
2
, pode-se escrever
L
2
= {a
n
b
n
a
m
b
m
, n>1, m>1}, n e m so independentes.
A reversa de L fcil de calcular: basta revertermos a expresso que a define:
L
R
={b
n
a
n
, n>1}
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.



Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
17
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) (produes 4,5,6)
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
18
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
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
19
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,
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
20
S e 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.





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
Linguagens Gramticas
G
4
G
1
G
2
G
3
L
1
L
2
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
21
x e (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 e (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
e a regra de produo x y,
____________
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 ser variveis e/ou smbolos terminais, 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
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
22
geram qualquer cadeia no alfabeto E={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 w
1
e uma final w
n
poderemos passar por um
grande nmero de formas sentencias intermdias, w
1
, w
2
, , ou seja,
w
1
w
2
w
n

Diz-se que w
1
produz w
n
ou, em escrita mais compacta (mais prtica), usando (*)
para significar uma sequncia de produes simples,
w
1

-
w
n

(* ) exprime o facto de que para derivar w
n
a partir de w
1
so necessrios um nmero no
especificado de passos (incluindo eventualmente zero passos, como em w
1

-
w
1
).
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) = {weT*: S
-
w}
Se uma dada cadeia pertence linguagem, we L(G), ento a sequncia
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
23
S w
1
w
2
... w
n
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, w
1
, w
2
, ..., w
n
.
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
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
24
...
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 = a
n
b
n

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) = {a
n
b
n
, n>0}
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 P
2
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
w
n
= a
n
Sb
n

Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
25
- 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
w
k
= a
k
Sb
k

-passo indutivo: em consequncia verdade para k+1 ou seja
w
k+1
= a
k+1
Sb
k+1
Prova do passo indutivo (nesta prova h-de entrar a hiptese indutiva):
Partindo de w
k
e por aplicao de P
1
obtm-se w
k+1

w
k+1
aw
k
b
mas substituindo a hiptese indutiva nesta produo,
w
k+1
a(a
k
Sb
k
)b
Manipulando a expresso
w
k+1
(aa
k
)S(b
k
b)
ou ainda por definio de concatenao (potncia) de caracteres,
w
k+1
a
k+1
Sb
k+1

Falta finalmente provar que aplicando P
2
a qualquer forma sentencial na forma w
n
= a
n
Sb
n
,
n1, se obtm uma sentena na forma a
n
b
n
.
a
n
Sb
n
a
n
b
n
o que verdade.
E a demonstrao est feita, quod erat demonstrandum (o que era preciso demonstrar)
q.e.d.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
26
Exemplo 1.3.3:
Encontrar uma gramtica que gere a linguagem
L={a
n+1
b
n
, n>0}
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: S
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. a
3
b, 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: A
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
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
27
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 we L pode ser derivada a partir de S usando as produes P da
gramtica
(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 ,
G
1
e G
2
so gramticas equivalentes se L(G
1
)=L(G
2
)
Na Fig. 1.3.1 as gramticas G
2,
G
3
e G
4
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 E
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.
e PAL
2. Qualquer carcter isolado simtrico, logo um palndromo
Para todo o aeE, ae PAL,
3. Se tivermos uma cadeia simtrica e lhe adicionarmos o mesmo carcter no princpio e no
fim, resulta uma cadeia simtrica,.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
28
Para toda a cadeia w e PAL , e todo o aeE, awa e 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
Seja o alfabeto E = { a, b }
Aplicando aquelas 3 regras,
1. e PAL
2. ae PAL, b e PAL
3. Para qualquer wePAL, awa e PAL
bwb e PAL
Qualquer cadeia pertence a PAL se e s se for gerada pelas regras 1, 2 e 3.
Por exemplo:
b e PAL , regra 2
aba e PAL, regra 3
babab e PAL regra 3
abababa e 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 (regra 1)
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
29
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.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
30
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, A-
aberto.

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




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,




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.
F A
F A
Press
Press
F A
Press
Press
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
31
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.


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.


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.


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.
1 2 3 4
p a i
p pa pai
p a i
p pa
pai
p a i
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
32
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.





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
Sensor
Fronta
Sensor
Rectag
F A
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
33
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
0 0 00 a
0 1 01 b
1 0 10 c
1 1 11 d
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.




A A A F A
F A F F F
d
11
c
10
b
01
a
00
Entrada
Estado
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
34
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.




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




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 destes 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
A
F
b,d,a
c
a
b,c,d
A/1
F/0
b,d,a
c
a
b,c,d
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
35
- 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.







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, c
k
, e o mecanismo de entrada est a ler um smbolo s
k
no ficheiro de


Unidade de Controlo

q
k

Ficheiro de entrada
M
e
m

r
i
a
S
k

m
k

y
k Ficheiro de sada
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
36
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, m
k
. 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,
q
k+1
= f(q
k
, s
k
, m
k
)
Entre dois instantes de tempo sucessivos pode produzir-se uma sada ou pode alterar-
se 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 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
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
37
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,
1 2
...
n
h a a a = + + +
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.
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
38
Este tipo de computao parece nada ter a 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 E={1} a linguagem composta por cadeias de 1s que tm um
comprimento igual a um nmero primo:
L ={1
n
, n primo},
em que como sabemos 1
n
= 1111 , n vezes
Isto
L={11, 111, 11111, 1111111, }
Agora temos o problema de reconhecimento de linguagens
- a cadeia 1
n
pertence linguagem L ?
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
39
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 se pode reduzir
a uma instncia de qualquer um dos outros dois.







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
Reconhecimento
de Linguagens
Transduo de
cadeias
Clculo de
funes f(n)
Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
40
n 1 2 3 4 5 6
f(n) 2 3 5 7 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:




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
101#1
101#10
101#11
101#100
101#101
101#110
101#111

Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
41
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 E={a,b}, se a = 01 e b = 10, ento o palndromo aba resulta no
nmero natural 011001=25
10
.
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 o cdigo de um palndromo
( )
0, se no o
n
n
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.




Teoria da Computao Captulo 1 Introduo e Definies Bsicas
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
42
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 .
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
43


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


Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
44

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
45
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 E = {a, b} e usando a notao de conjuntos poderemos
definir as linguagens L
1
= { a
n
b
m
| n,m >= 0 }a que pertencem as cadeias : ,aabbbbb, aaaa,
bbbb, ou a linguagem L
2
= { a
n
b
n
| n >= 0 } a que pertencem as cadeias: ,ab,aabb,
aaabbb, aaaabbbb, ou ainda L
3
= {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.

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
46
Teremos assim a Figura 2.1.1.






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.
Linguagens L
Gramticas G
Geram as cadeias de L
Autmatos
Reconhecem as cadeias
de L
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
47
Por exemplo o grafo seguinte representa um aceitador determinstico. O seu alfabeto
E={0,1}.




Figura 2.2.1 Grafo de um aceitador determinstico.
Vejamos como funciona.
O autmato est no estado inicial, q
0
, 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 q
0
e lendo 1, transita para q
1
. Estando em q
1
e lendo 1, transita para q
1
, isto , fica
onde est. Lendo agora 0, estando em q
1
, transita para q
2
. Lendo depois 0 transita para q
1
e a
fica, porque no h mais nada para ler.
O estado q
1
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 q
0
e aparece um 1, vai para o aceitador; se estiver em q
1
e aparece um 1, mantm-se no
aceitador. Se estiver em q
2
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.
q
0
q
1

q
2
0
1
1
0
0
1
Incio
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
48
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, como
acontece no estado q
2
. Pode-se simplificar o grafo colocando apenas uma aresta com duas
etiquetas, com o na figura seguinte.




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.


q
0
q
1

q
2
0
1
1
0
0,1
Incio
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
49
Definio 2.2.1 Aceitador determinstico
Um aceitador determinstico (usaremos o acrnimo dfa-, de deterministic finite
accepter) definido pelo quinteto
M=(Q,E, o, q
0
, F )
em que : Q: o conjunto finito de estados internos
E: alfabeto de entrada (conjunto finito de caracteres)
o : QxE Q a funo total chamada funo de transio
q
0
eQ 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 QxE.
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.



Figura 2.2.3 Grafo do interruptor do Cap. 1.
Aplicando-lhe a definio 2.1 v-se que
F A
P
P

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
50
Q, conjunto de estados internos: {F, A}
E , alfabeto de entrada: {P}
o , funo de transio: F P A; A P F
q
0
, o estado inicial: F
F, o estado final: {A}
Exemplo 2.2.3.
Seja o autmato da Fig. 2.2.4.



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}
E , alfabeto de entrada: {a,b}
o , funo de transio: 1 a 2; 1 b 4, 2 b 3, etc.
q
0
, o estado inicial: 1
F, o estado final: {3}
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.
1 2 3
4
a
b
b
a
a
b
b a
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
51

Tabela 2.2.1. Tabela de transies do DFA da Fig. 2.2.3.
Se estado
actual
e a entrada
actual
o estado
seguinte ser
1 a 2
1 b 4
2 a 4
2 b 3
3 a 3
3 b 4
4 a 4
4 b 4

Qual ser a linguagem aceite por este autmato ? aba
n
, n > 0
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.


Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
52






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.


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 (ns)
representam os estados e as arestas
orientadas tm como etiquetas os
caracteres lidos na cadeia de entrada. H
trs tipos de vrtices, indicados na Tabela
2.2.2., ao lado
Smbolo Significado


Estado normal


Estado inicial


Estado
aceitador (ou
final)
Aresta

cadeia de entrada a a b b a b
q
0

q
1

q
2

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

carcter de entrada
estado actual
[*] carcter
q
0
q
f

q
i

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
53
Exemplo 2.2.4




Figura 2.2.7 DFA do exemplo 2.2.4.
Temos um autmato com trs estados, um de cada tipo. O alfabeto do autmato E=
{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, E, ,q
0
,F) com
Q = {q
0
,q
1
,q
2
}, E = {0,1}, F = {q
2
} e o definida pela Tabela 2.2.4.
Tabela 2.2.3. Funo de transio do exemplo 2.2.4.




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,

incio
0
1
q
2

0
0
1
q
1

q
0

1
Estados
Entradas

0
1
q
0

q
1

q
2

q
1

q
0

q
2

q
0
q
1

q
0

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
54
-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 q
1
com um 0, ou seja, com (****)0.
Chega-se a q
1
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



Fig. 2.2.8.
Exemplo 2.2.6


Fig. 2.2.9.
Exemplo 2.2.7
Incio
q
0
q
1
0 0 1
1
Incio
q
0
q
1
0 1
1
0
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
55



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 = ({q
0
, q
1
, q
2
}, {a,b}, o, q
0
, {q
2
}) cuja funo de transio a seguinte:
o (q
0
, a) = q
1
Tabela de transies
o (q
0
, b) = q
2
o (q
1
, a) = q
0
o (q
1
, b) = q
2
o (q
2
, a) = q
2
o (q
2
, b) = q
2
Nas transies aparecem trs estados q
1
, q
2
e q
3
. O grafo do autmato
desenha-se graficando as transies, depois de se desenharem os seus trs estados. Obtm-
se assim a Fig. 2.2.11.


Fig. 2 .2.11


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

q
1

b
b
q
2
q
2

q
0
q
1
q
2
1 0
0 0,1 1
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
56
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
q
2
. Se estiver em q
1
e aparece um b, transita para q
2
; e se estiver em q
2
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.


Fig. 2.2.12. Grafo equivalente ao
da Fig. 2.2.11.




Funo de transio estendida a cadeias de caracteres, o*
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 o escreve-se o*,
em que o asterisco quer dizer aps um certo nmero de transies.
A funo de transio estendida assim definida por
o*: Q E* Q
a
a,b
b
q
2
q
2

q
0

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
57
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
o(q
0
, a) = q
1
e o(q
1
, b) = q
2
ento o*(q
0
, ab)=q
2

Representando por grafos, teremos a Fig. 2.2.13.




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) o*(q,)= q
(ii) o*(q,wa)=o (o* (q, w), a)
para todo o qe Q, weE*, aeE.
Para o exemplo anterior teremos :
o
*
(q
0
, ab)=o (o* (q
0
, a), b)
o*(q
0
, a)=o* (q
0
, a)=o (o*(q
0
, ), a)=o (q
0
, a)=q
1

o*(q
0
, ab)=o ( q
1
, b)=q
2

q
0
q
1
q
2
a b
o
o
a) Funo de transio
q
0
q
2
ab
o*
b) Funo de transio estendida
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
58
Definio 2.2.2b.Linguagens de um DFA (definio formal)
A linguagem L aceite (ou reconhecida) por um DFA M =(Q, E, o, q
0
, F) o conjunto de todas
as cadeias em E aceites por M, i.e.,
L(M) = {weE* : o*(q
0,
w)eF }
A funo de transio o e o* 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 E*, 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)) = {weE* : o*(q
0,
w)eF }
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.






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

a,b
q
1

a,b
a
b
q
0

q
1

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
59
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 E ={0,1}, aceite todas as cadeias com um nmero
mpar de 1s.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
60
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: o (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 o (P,0)=P. Temos ento, para j,
I
P
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
61




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 o (I,1)=P. Pela
mesma razo de cima, o (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



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.


.
P
I
1
0
P
I
1
0
1
0
I P
1
0
1
0
Figura 2.3.4. Autmato de
um nmero par de 1s.
Notem-se as semelhanas e
diferenas relativamente ao
anterior
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
62
Fica o leitor desafiado a verificar que os autmatos seguintes aceitam, ainda no alfabeto
E ={0,1}, as cadeias com um nmero mpar de zeros e um nmero par de zeros.





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 E={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.
I P
0
1
0
1
P
I
0
1
0
1
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
63
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.




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.





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



II
PP PI
IP
II
PP PI
IP
1
0
II
PP PI
IP
1
0
0
1
Figura 2.3.7. Transies a partir
de PP
Figura 2.3.8. Transies a partir
de PI
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
64


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.






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







E juntando as duas condies, mpar-mpar ou mpar-par, obtm-se o autmato com dois
estados finais:
II
PP PI
IP
1
0
0
1
0
0
1
1
IP
PP PI
II
1
0
0
1
0
0
1
1
Figura 2.3.9. Grafo completo do
exemplo 2.3.2.
Figura 2.3.10. Grafo completo
do exemplo 2.3.3.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
65







Exemplo 2.2.3. Contagem de sequncias (corridas) de caracteres.
Desenhe-se um DFA que em E ={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.
IP
PP PI
1
0
0
1
0
0
1
1
II
0 1 2
a a a
3
Figura 2.3.11. Grafo do DFA
aceitador de II ou de IP
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
66
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.




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.





Figura 2.3.14. DFA que conta corridas de 3 ou mais as.
0 1 2
a a a
3
b
a,b
0 1 2
a a a
3
b
a,b
b
b
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
67
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.




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.
0
1 2
b
b
b
4
a
a,b
a
a
3
b
a
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
68







Agora vamos corrida de as e quando aparece l um b transita-se para o estado
correspondente a um b, ou seja, 1b.





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





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
a,b
0
1a 2a
a a
3a
1b 2b
b
b b
3b
a
a,b
0
1a 2a
a a
3a
1b 2b
b
b b
3b
a
a,b
b
b
a,b
0
1a 2a
a a
3a
1b 2b
b
b b
3b
a
a b
b
b
a b
a
a
Figura 2.3.16. A caminho
da soluo do exemplo
2.3.4
Figura 2.3.17. A caminho
da soluo do exemplo
2.3.4
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
69
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




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.



Figura 2.3.20. DFA que reconhece a sub-cadeia 001.
Ini 0 00
1
0 0
1
Ini 0 00
001
1
0 0 1
1
0, 1
Figura 2.3.19.Incio da resoluo do
exemplo 2.2.4.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
70
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 0 1 2 3 4 5 6 7 8 9 10

M

d
u
l
o
2 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0
6 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4
7 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3
10 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
12 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 5 6 7 8 9 10

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, E ={0, 1}, ou seja, teremos a Tabela 2.3.2.
Tabela 2.3.2 Contagem em mdulo 2
N 0 1 2 3 4 5 6 7 8 9 10
Cdigo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 10010
Mod2 0 1 0 1 0 1 0 1 0 1 0

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
71
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.



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.




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.
0
1
0
1
0
1
0
1
1
0
Figura 2.3.21. Incio da
construo do DFA contador em
mdulo 2
Figura 2.3.22. Continuao da
construo do DFA contador em
mdulo 2
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
72



Figura 2.3.23. DFA da linguagem L(M)={we{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.





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.

0
0
1
1
0
1
0 1
2
3
0
1
0 1
Figura 2.3.24. Construo do
DFA contador em mdulo 4.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
73






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
2
3
0
1
0
1
1
0
0
1
0
1
2
3
4
5
6
0
0
1
1
0
1
Figura 2.3.25. DFA contador em mdulo 4.
Figura 2.3.26. Construo do
DFA contador em mdulo 7.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
74
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.






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.






Testemos o DFA para :
1110101 =64+32+16+4+1=117 117mod7=5; d certo.
0
1
2
3
4
5
6
0
0
1
1
0
1
0
1
0
1
0
1 0 1
0
1
2
3
4
5
6
0
0
1
1
0
1
0
1
0
1
0
1
Figura 2.3.27. Continuao da
construo do DFA contador
em mdulo 7.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
75
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 E={a,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.
1
a
a,b
b
0
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
76
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 E = {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 e L(M)
10101000, 111100010 e 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 existe, 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.

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
77




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, E, o, q
0
, F)
em que a funo de transio o definida por
o : Q (E{}) 2
Q

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 o a potncia 2
Q
do conjunto Q, e no Q, precisamente porque o
resultado de o pode ser no limite um qualquer subconjunto de Q. A potncia 2
Q
de um
conjunto composta por todos os seus subconjuntos possveis, incluindo o vazio.
2- O conjunto o (q
i
, a) pode ser vazio, significando que no h qualquer transio nesta
situao. No grafo no h uma aresta partindo de q
i
com o smbolo a. No obrigatrio que
exista uma aresta a partir de q
i
para cada um dos smbolos do alfabeto.
a
a
Figura 2.5.1 Parte de um
autmato finito com dois
caminhos alternativos para
a mesma leitura na entrada.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
78
3- tambm pode ser argumento de o, 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 o(q
1
, a) = {q
2
, q
3
} s pode existir num NFA,
dado que h dois caminhos alternativos: de q
1
lendo a ou se transita para q
2
ou se transita para
q
3
. Com um grafo ser







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 q
i
depois de ler o prefixo aba da cadeia ababb.


Lendo agora o carcter b o autmato transita par o estado q
j
.
a
a
q
1
q
2

q
3

q
i
q
j
b
Figura 2.5.2. Grafo da transio
o(q
1
, a) = {q
2
, q
3
}
Figura 2.5.3. Grafo (NFA) da transio
o(q
i
, b) = q
j

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
79
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 q
i
para ele mesmo.
O mesmo ir depois acontecer em q
j
. Por isso o grafo completo ter a forma da Fig.
2.5.4.



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 q
1
, da figura seguinte, e se lhe apresenta de seguida o carcter b. O NFA
tem dois caminhos alternativos: ou consome b e vai para q
2
, ou no consome b (consome
que est implcito na cadeia aabab, aabab) e vai para q
3
.




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.
q
i
q
j
b

q
1
b
q
2
q
3

aabab
aabab
aabab
Figura 2.5.4. Grafo (NFA) da transio
o(q
i
, b) = q
j
, com explicitao (em relao
ao da Fig. 2.5.3) das transies com .
Figura 2.5.5.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
80
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).










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 pelo 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
aceita ou rejeita
Computao
determinstica
aceita
Computao no
determinstica
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
81
no estado consequente da escolha feita e na sua entrada esto os 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 o*
Tal como no caso do DFA, tambm num NFA se pode introduzir o conceito de funo de
transio estendida o*. Ela resulta da leitura de uma cadeia w que o seu segundo argumento
(em vez de um carcter),
o* (q
i
, w) = Q
j
sendo Q
j
o conjunto de todos os estados possveis do autmato que podem ser alcanados a
partir de q
i
e pela leitura de w. Isto o* (q
i
, w) contm o estado q
j
se e s se existir um
caminho no grafo de transies desde q
i
at q
j
com etiqueta w, para todos os q
i
, q
j
eQ e
weE*, como na Fig. 2.5.7.


Definio 2.5.2. Linguagem aceite por um NFA
A linguagem L aceite pelo NFA M = (Q, E, o, q
0
, F) definida como o conjunto de todas as
cadeias w que levem o autmato a um estado final aceitador, ou seja,
L(M) = {weE* : o*(q
0
, w) F = C}
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:
q
i
q
j
w
Figura 2.5.7.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
82
- de q
1
partem duas arestas etiquetadas por 0
- de q
0
parte uma aresta etiquetada por
- de q
2
no definida qualquer transio, o (q
2
, 0) = C
- existe sempre a transio o (q
i
, ) = { q
i
}, para todo o i, mesmo se no desenhada.




Figura 2.5.8. Um aceitador no-determinstico
Se escrevermos todas as transies possveis, teremos:
o (q
0
, 1) = {q
1
}
o (q
0
, 0) = C
o (q
1
, 0) = {q
0
, q
2
}
o (q
1
, 1) = {q
2
}
o (q
1
, ) = {q
1
}
o (q
0
, ) = { q
0
, q
2
}
o (q
2
, 0) = C
o (q
2
, 1) = C
o (q
2
, ) = {q
2
}
O autmato aceita:
10, porque dos dois estados alcanados um final.
q
1

q
2

q
0

0
1
0, 1

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
83
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 q
2
. Como no est definida a transio o (q
2
, 0), obtm-se uma
configurao morta (dead configuration), em que se transita para o estado vazio, C. Mais
formalmente
o * (q
0
, 110)=C.
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 E={a}. Ele no-determinstico
porque (i) no estado inicial h mais do que uma escolha possvel com o carcter a e (ii) no
esto definidas todas as transies possveis.






Figura 2.5.9. Exemplo 2.5.2
Qual a linguagem aceite pelo autmato?
q
1
q
3

q
5
a
a
a a
a
a
q
2
q
0
q
4
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
84
Pela parte de cima aceita a cadeia aaa e s essa.
Pela parte de baixo aceita aa, aaaa, aaaaaa, , a
2n
, n1
O conjunto das duas, ou seja a unio das duas, d a linguagem aceite pelo autmato
L(M) = {a
3
} {a
2n
: n>1}
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 {a
3
}{a
2n
: 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.

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
85
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 M
1
e M
2
so equivalentes se
L(M
1
) = L(M
2
)
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 Q
w
de estados possveis
Q
w
={q
i
, q
j
, ..., q
k
}.
Em contrapartida depois de um DFA ler a mesma cadeia tem que estar num estado bem
definido, q
w
.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
86
Como encontrar uma correspondncia entre estas duas situaes?
Pode-se conceber um truque simples: cria-se um estado no DFA equivalente ao conjunto
Q
w
, isto , etiqueta-se, no DFA, um estado por Q
w
. 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 2
6
=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 E={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).
Ser ento:


Figura 2.6.1. Primeira parte do exemplo 2.6.1

1,0
0
0
0
0,1
q
0



q
f

q
1

q
2

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
87
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 q
0
at ao nono carcter e depois
transita sucessivamente para q
1
, q
2
e q
f,
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 q
1
, ele acaba
por morrer porque lhe aparece um 1 em q
1
ou em q
2
e no est a definida qualquer transio
com 1.
Se o autmato no tivesse a possibilidade de ficar em q
0
com 0, avanaria sempre para
q
1
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 q
1
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 q
0
, 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



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




1
1
1
0,1



q
f

q
0

q
1
q
2

1
0,1

1,0
0
0
0
0,1
q
0



q
3

q
1

q
2

1
1
1

q
4
q
5

1

Figura 2.6.3. Exemplo 2.6.1.
completo
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
88
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
o
N
0 1
q
0
q
0
, q
1
q
0
, q
4

q
1
q
2
-
q
2
q
3
-
q
3
q
3
q
3

q
4
- q
5

q
5
- q
3


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 co-
alcanveis pela mesma transio componham um estado do DFA alcanvel por essa mesma
transio, como na Fig. 2.6.4.



a) no NFA b) no DFA equivalente
Figura 2.6.4. Pormenor do clculo do DFA equivalente: dois estados q
2
e q
3
do NFA co-
alcanveis pela transio a produzem um s estado q
23
no DFA equivalente.
a
a
q
1
q
2

q
3

a
q
1
q
23
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
89
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 q
0
com 0, pode-se ir ou para q
0
ou para q
1
, ou seja para o conjunto {q
0
,
q
1
} Crie-se um estado equivalente a este conjunto. Vamos chamar-lhe q
01
para sabermos a que
corresponde.
De q
0
com 1, pode-se ir ou para q
0
ou para q
4
, ou seja para o conjunto {q
0
, q
4
} Crie-se de
igual modo um estado equivalente a este conjunto, q
04
.
Estes estados q
01
e q
04
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.
o 0 1
q
0
{q
0
, q
1
} = q
01
{q
0
, q
4
}= q
04

q
01

q
04


Agora temos que imaginar o seguinte: se o DFA est em q
01
e aparece 0, o que se
passar?
Sabemos que q
01
corresponde do conjunto {q
0
, q
1
} do NFA. E portanto aquela pergunta
equivalente a: se o NFA est ou em q
0
ou em q
1
e aparece um 0, o que se passar?
Se est em q
0
pode ir para q
0
ou para q
1
. Se est em q
1
pode ir para q
2
. Portanto estando
em {q
0
, q
1
} pode ir para {q
0
, q
1
, q
2
}. Crie-se por isso no DFA o estado q
012
.
E se o DFA est em q
01
e aparece 1, o que se passar? Fazendo uma anlise semelhante
conclui-se que estar em q
04
. Neste caso h uma nuance que convm realar: se est em q
1
,
com 1 vai para o vazio, C. Mas {C, q
0
, q
4
}={q
0
, q
4
}.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
90
Nesta segunda etapa surgiu o novo estado do DFA, q
012
, que deve ser colocado na
primeira coluna. q
04
j l estava.
Tabela 2.6.3. Mais transies do DFA equivalente
o 0 1
q
0
{q
0
, q
1
} = q
01
{q
0
, q
4
}= q
04

q
01
{q
0
, q
1
, q
2
}= q
012
{C, q
0
, q
4
}=q
04

q
04

q
012


E agora continua-se a anlise. De q
04
com 0 para onde se vai? E com 1? E de q
012
?
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
o 0 1
q
0
{q
0
, q
1
} = q
01
{q
0
, q
4
}= q
04

q
01
{q
0
, q
1
, q
2
}= q
012
{C, q
0
, q
4
}= q
04

q
04
q
01
q
045

q
012
q
0123
q
04

q
045
q
01
q
0345

q
0123
q
0123
q
034

q
0345
q
013
q
0345

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
91
q
013
q
0123
q
034

q
034
q
013
q
0345


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 q
3
do NFA, ou seja, q
0123
, q
0345
, q
013
, q
034.
A partir da tabela de transies desenha-se o grafo do DFA:





Figura 2.6.4. Autmato determinstico equivalente com vrios estados finais
0
1


0
0 0
1
1
0
1
1
0
0
q
01

q
0

q
012

q
0123

q
04

q
045

1
q
034

q
0345

1
q
013

0
1
0
1
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
92
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.





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.




Figura 2.6.6. Exerccio 2.6.1
Exemplo 2.6.2.
Desenhar o DFA que aceita em E={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.
1
F
0
0
0
1
1
0,1
1
1
0
0
0 00

1
11
0
0, 1
0, 1
0
1
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
93
O NFA est no estado inicial at que lhe palpita que vm a os dois ltimos caracteres e
que eles sero 10. Logo,


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
actual
0 1
0 0 01
01 03 01
03 0C=0 0C=0

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



Figura 2.6.8. O DFA equivalente ao NFA da Fig. 2.6.7.
Exemplo 2.6.3.
Desenhar o DFA que aceita em E={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
0 1
3
0,1
1
0

0
1
0
01 0
1
0,1
03
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
94
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.



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 1
0 0 01
01 02 012
02 03 013
012 023 0123
03 0C 0C
013 02C 012C
023 03C 013C
0123 023C 0123C

O DFA ter 9 estados e est desenhado na Fig.2.6.10.
Todos os estados que contenham 3 na sua etiqueta sero aceitadores.
0 1 2
3
0,1
1
0, 1 0, 1
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
95







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 q
2345
.



Figura 2.6.11. NFA com transies-.
0
01 02
03
012
013
023
0
1
0
1
0
1
0
0123
1
0, 1
0
1
0
1
0
1
1
2
3
4
a
a

a
b
b
5

Figura 2.6.10. DFA equivalente


ao NFA da Fig. 2.6.3.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
96
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.





Figura 2.6.12. Exemplo 2.6.4.



Tabela 2.6.6. Transies da Fig. 2.6.12.
Estado a b
136 245C 4C
245 2C 45C
4 C 46
2C 2C C
45 C 46C
46 C 46C
C C C

1
2
3
4
a
a

a
b
b
5

6
b

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
97
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.


Figura 2.7.1.
Ele tem um equivalente com um s estado:


Figura 2.7.2. Autmato equivalente ao da Fig. 2.7.1

Exemplo 2.7.2.
No autmato DFA seguinte h estados a mais.
a, b
a, b
q
0

q
1

a, b
q
0

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
98




Figura 2.7.3. Exemplo 2.7.2.
Se se chega a q
3
com b quer seja a partir de q
1
quer seja a partir de q
2
, coloca-se a
possibilidade de fundir q
1
com q
2
no estado q
12
.




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.





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 q
34
.
q
0

q
4

b
q
2

a
b
a, b
q
1

a
b a, b
q
3

a
q
0

q
3

b q
12

a
a, b b
a
a
q
0

q
3

b q
2

a
b
b
q
1
a
b
a
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
99




Figura 2.7.6. Simpificao do DFA da Fig. 2.7.5.
Em segundo lugar chega-se a q
34
com b, quer de q
1
, quer de q
2
. Por outro lado de q
1
com
a vai-se para q
2
e de q
2
com a vai-se para q
2
. Se fundirmos q
1
e q
2
em q
12
, mantendo essas
transies, o DFA resultante, Fig. 2.7.7 com apenas 3 estados, equivalente ao inicial.



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,
o* (p,w) eF o* (q,w)eF, para todas as cadeias w e E*.
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:
o* (p,x) eF o* (q,x)eF, para todas as cadeias x e E*.
q
0

q
34

b
q
2

a
b
a, b
q
1

a
b
a
q
0

q
34

a, b
q
12

a
a, b b
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
100
Num grafo teremos a seguinte situao:




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,
o* (p,w) eF o* (q,w )eF
ou tal que de p se chegue a um no aceitador e de q a um aceitador,
o* (p,w) eF o* (q,w )eF
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,
v q
p
u
w
w
v q
p
u
x
x
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
101
- 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, peF, e se q no
aceitador, qeF, 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.



Figura 2.7.9. Transies de p e de q com a.
Se houver pelo menos um carcter aeE tal que o par (p
a
, q
a
) 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 Q
1
={q
i
,q
j
,, q
k
},
Q
2
={q
l
,q
m
,, q
n
} , , Q
x
={q
o
,q
p
,, qr} tais que
p
q
p
a
q
a
a
a
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
102
- 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,E,o,q
0
,F) calcula-se o equivalente
0
( , , , , ) M Q q F o
. . . . .
= E por:
1 Para cada um dos conjuntos indistinguveis Q
1
, Q
2
, Q
x
cria-se um estado
equivalente etiquetado apropriadamente (a sua etiqueta o conjunto das etiquetas dos estados
do subconjunto, por exemplo para Q
1
ser o estado equivalente q
ijk
.)
2 No autmato original M considera-se a transio o(q
r
, a)=q
p
do estado q
r
para o estado
q
p
. Procuram-se os dois subconjuntos a que pertencem q
r
e q
p
. Traa-se a transio a entre os
estados equivalentes a esses subconjuntos. Isto , se q
r
e Q
1
={q
i
,q
j
,, q
k
}, e q
p
e
Q
2
={q
l
,q
m
,, q
n
} ento desenhar no grafo a transio
... ...
( , )
ij k lm n
q a q o
.
=
3 O estado inicial de
0
, M q
. .
, 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.



Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
103






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 par 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
a 1 2 3 4 5 6 7
1 2,2 2,4 2,6 2,4 2,6 2,4 2,6
2 4,2 4,4 4,6 4,4 4,6 4,4 4,6
3 6,2 6,4 6,6 6,4 6,6 6,4 6,6
4 4,2 4,4 4,6 4,4 4,6 4,4 4,6
5 6,2 6,4 6,6 6,4 6,6 6,4 6,6
6 4,2 4,4 4,6 4,4 4,6 4,4 4,6
7 6,2 6,4 6,6 6,4 6,6 6,4 6,6

b 1 2 3 4 5 6 7
1 3,3 3,5 3,7 3,5 3,7 3,5 3,7
2 5,3 5,5 5,7 5,5 5,7 5,5 5,7
3 7,3 7,5 7,7 7,5 7,7 7,5 7,7
4 5,3 5,5 5,7 5,5 5,7 5,5 5,7
5 7,3 7,5 7,7 7,5 7,7 7,5 7,7
6 5,3 5,5 5,7 5,5 5,7 5,5 5,7
7 7,3 7,5 7,7 7,5 7,7 7,5 7,7
1
6
b
3
a
b
2
a
b
a
5
b
4
a
a
b
7
a
a
b
b
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
104
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 2 3 4 5 6 7
1 0 0 1 0 1 0 1
2 0 0 1 0 1 0 1
3 1 1 0 1 0 1 0
4 0 0 1 0 1 0 1
5 1 1 0 1 0 1 0
6 0 0 1 0 1 0 1
7 1 1 0 1 0 1 0
Agora particiona-se o conjunto dos estados em subconjuntos que obedeam s trs
condies acima enunciadas. No uma tarefa fcil.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
105
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.



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
6
357
b
b
a
b a
a
124
1 2 3
4 5
7
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
106
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 E-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 .




1 2 3 4
6
E
c
h a
5
v e
1 2 3 4
6
E-c
c
h a
5
v e
E-h
E-a
E-a
E-e
E-v
E-c
c
Figura 2.8.2. DFA
equivalente ao NFA
da Fig. 2.8.1.

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
107
Exerccio 2.8.1
O seguinte NFA encontra num texto as palavras doce e mel. Desenhar o o DFA equivalente. E
= { a, b, c, ...., z}.




Desenhar o DFA equivalente.
Exerccio 2.8.2.
Desenhar o DFA que aceita as palavras amarga e carta. E = { 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 Moore. Ambos se podem
enquadrar no esquema geral que vimos no Cap. 1 e aqui se reproduz na Fig. 2.9.1








Unidade de Controlo

q
k

Ficheiro de entrada
M
e
m

r
i
a
S
Ficheiro de sada
0

1 2 3
5 6
4
7
E
d
c e
m
e l
o
Figura 2.9.1. Esquema
geral da um autmato
finito
Figura 2.8.3 NFA para
o exemplo 2.8.1.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
108
2.9.1 Mquinas de Mealy
Numa mquina de Mealy a sada depende do estado interno do autmato actual e da entrada
actual
y
k
= f (s
k
, q
k
)
Definio 2.9.1 Mquina de Mealy.
Uma Mquina de Mealy definida pelo sexteto (agora h mais um msico )
M = (Q ,E ,A, o , , q
0
)
em que
Q o conjunto finito de estados internos,
E o alfabeto de entrada (conjunto finito de caracteres),
A o alfabeto de sada (conjunto finito de caracteres),
o : Q xE Q a funo de transio de estado,
: Q xE A a funo de sada,
q
0
e 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:


Figura 2.9.2 Notao da Mquina de Mealy
Que tem a seguinte interpretao: estando a mquina no estado q
i
e lendo 1 na entrada,
q
i
q
j

Entrada/Sada
1/0
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
109
- transita para o estado q
j

- envia 0 para a sada.
Exemplo 2.9.1
Considere-se a mquina de Mealy da Fig.2.9.3





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.





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
y
k
= f (q
k
)
q
0

q
1

0/
q
2

1/
0/0
0/1
1/0
1/1
Figura 2..9.4. Esquema geral de uma mquina de Mealy.
( em http://www2.ele.ufes.br/~ailson/digital2/cld/chapter8/chapter08.doc4.html)
Se lhe dermos a ler a cadeia 10111 ela faz:
- l 1 e escreve na sada transitando
para o estado q
1
,
- l 0, escreve 1, passando a q
2

- l 1, escreve 0, passa a q
1
,
- l 1, escreve 1, mantm-se em q
1
,
- l 1, escreve 1, mantm-se em q
1


No fim da leitura est em q
1
e escreveu na
sada 1011.
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
110
isto , no dependem da entrada actual.
Definio 2.9.2. Mquina de Moore.
Uma Mquina de Moore definida pelo sexteto
M = (Q ,E ,A, o , , q
0
)
Sendo
Q o conjunto finito de estados internos,
E o alfabeto de entrada (conjunto finito de caracteres),
A o alfabeto de sada (conjunto finito de caracteres),
o : Q xE Q a funo de transio de estado,
: Q A a funo de sada,
q
0
e Q o estado inicial.
No seu grafo usa-se a notao



Figura 2.9.5.Notao das Mquinas de Moore.
significando que quando entra no estado q
i
escreve 1 na sada, depois com 1 na entrada
transita para q
j
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.

q
i
/1
Estado/Sada
q
j
/0
Entrada
1
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
111






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

0/
0
1
0
1/
2/
3/1
4/1
5/0
6/0
1
1
0
1
0
0
1
0
0
1
1
D-se-lhe 1110101, estando no estado 0

- 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

Portanto escreveu 111010.
Figura 2.9.6
Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
112
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

Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
113



Teoria da Computao Captulo 2 . Autmatos Finitos
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
114

Livre: This work is licensed under a Creative Commons Attribution-NonCommercial-
ShareAlike 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.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 115

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






Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 116
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 117
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 E, uma expresso regular desenvolvida a partir de
- os smbolos do alfabeto
- os operadores de
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 118
unio : ou +
concatenao:
fecho-estrela : *
- de parnteses
Exemplo 3.2.1.
Consideremos o alfabeto E={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 E = {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 a
n
b
m
, n,m> 0 ou seja
, a,b, aab, aabb, abb, bbb, aabbbb,...
Finalmente, ainda no mesmo alfabeto, a linguagem (c+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.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 119
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 E um dado alfabeto. Ento:
1. As expresses regulares primitivas so compostas por zero ou um carcter:
C, e ae E (para aeE ) so todas expresses regulares primitivas
2. Recurso: indica como se obtm expresses regulares a partir umas das outras:
Se r
1
e r
2
so expresses regulares, tambm o sero
2.1 r
1
+r
2
, (soma de duas expresses regulares)
2.2 r
1
r
2
, (concatenao de duas expresses regulares)
2.3 r
1
* , r
2
* (fecho-estrela de uma expresso regular)
2.4 (r
1
), (r
2
) (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 E={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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 120
(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 E = {a,b,c}, ser (a+bc)*(c+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,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+C) uma er, dos itens 2.1 e 2.4 da definio,
(a+bc)*(c+C) uma er do item 2.2 da definio. q.e.d
E (a + c + ) expresso regular ?
a , c so er primitivas
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 121
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.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 122
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=C uma expresso regular , o conjunto vazio
2. r= uma expresso regular, o conjunto {} com um elemento
3. Para todo o aeE, r=a uma expresso regular denotando {a}
Se r
1
e r
2
so expresses regulares, ento
4. L(r
1
+r
2
) = L(r
1
) L(r
2
) , unio de duas linguagens
5. L(r
1
r
2
) = L(r
1
) L(r
2
) , concatenao de L(r
1
) com L(r
2
)
6. L((r
1
)) = L(r
1
)
7. L(r
1
*) = (L(r
1
))*

As regras 4 a 7 usam-se para reduzir recursivamente uma linguagem L a expresses mais
simples.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 123
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 E={x}.
A linguagem de xx
*
ser L(xx*) ={x, xx, xxx,...}= L(x
+
).
ii) E L(x(xx)*) ={x, xxx, xxxxx,..} =L(x
mpar
).
Em E = { 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) = { c } (regra 4 e regra 3)
Em E = {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,..}
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 124
v) Em E = {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 E = {0,1}.Encontrar uma expresso regular para as linguagens:
i) L(r) = {we E* : w tem pelo menos um par de zeros consecutivos }
ii) L (r) = {we E* : 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,
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 125
r
1
= (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. Note-
se 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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 126
r
2
= (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 r
3

r
3
= (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 r
1
e r
2
ou r
1
e

r
3
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.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 127
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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 128
(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, C , a identidade para a unio porque
C + L = L + C = 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
C L = LC = C
Para a unio no existe anulador. E para a interseco?

Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 129
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) C * =
(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 a
0
b*, depois a
*
b
0
para os as, novamente a
0
b* 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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 130
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, se 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.2.2)
i) NFA aceitador de L
1
=C :
r=C
q
0
q
1

Figura 3.4.1. Aceitador do conjunto vazio
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 131
No havendo possibilidade de alcanar o estado aceitador, e linguagem o vazio.
ii) NFA aceitador de L
2
={}
r=
iii) NFA aceitador de L
3
={a}
r=a

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




Figura 3.4.4 Um antmato M genrico
com o estado inicial q
0
e o estado final q
F
. Note-se que qualquer NFA pode ser representado
com um s estado final.
3 Suponhamos agora que temos dois NFAs M(r
1
) e M(r
2
) que aceitam as linguagens
L(r
1
) e L(r
2
) definidas pelas expresses regulares r
1
e r
2
. Construam-se os NFA para a
segunda parte da Definio 3.2.2 do modo seguinte:
iv) L(r
1
+r
2
)




M (r)
q
0
q
f


q
0

q
1

Figura 3.4.2. Aceitador de
a
q
0

q
1

Figura 3.4.3. Aceitador de a


M (r
1
)
q
0
q
f
M (r
2
)
Figura 3.4.5. Autmato da soma de expresse regulares
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 132
O NFA aceita a unio das linguagens, L
1
pela parte de cima e L
2
pela de baixo.
v) L(r
1
r
2
)




O NFA aceita uma cadeia que resulte da concatenao de uma cadeia de L
1
(que leva o
autmato ao estado aceitador de M(r
1
)) com uma cadeia de L
2
que leva depois a q
f
.
vi) L(r
1
*)






Este NFA j no to evidente. Repare-se que
r
1
*
=+r
1
+r
1
r
1
+r
1
r
1
r
1
+
O vai pela parte de baixo do NFA directamente para o aceitador, portanto est includo
na linguagem do NFA.
O r
1
vai atravs da mquina desde q
0
at q
f
.
J r
1
r
1
parte de q
0
, vai at q
f
e volta para q
0
pela parte de cima, com .
As outras potncias de r
1
do tantas voltas quantas as necessrias at ao estado final.
M (r
1
)
q q
f
M (r
2
)

Figura 3.4.6. Autmato da concatenao de duas expresses regulares
M (r
1
)
q

q
f


Figura 3.4.7. Autmato do fecho-estrela de uma expresso regular.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 133
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-se-
lhe a regra do fecho estrela.





Agora pode-se demonstrar que este NFA equivalente a


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




1
q
0

Figura 3.4.10. Autmato
equivalente de 1*
1
q
0

0
0,1
DFA
Figura 3.4.11. DFA de 1*
Figura 3.4.8 Autmato NFA de 1*

q
f
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 134
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 q
0
, 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 o*. 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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 135
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, q
i
, q
j
, ... }, 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 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.






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 q
i
at q
i
, um ciclo fechado, vai-se com a at q, com um nmero qualquer de es, ou
e
c
d
a b
q
i

q q
j

Figura 3.4.12. Grafo genrico de trs estados. O do
meio pode ser eliminado.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 136
seja e*, mantm-se em q

e depois com d regressa a q; concatenando d ae*d. Para ir de q
i
at
q
j
passa-se em q e a pode ler-se um nmero arbitrrio de es, seguindo depois para q
j
com b.
E de modo anlogo para as outras transies. Resumindo,
q
i
q
i
: ae*d
q
i
q
j
: ae*b

q
j
q
j
: ce*d
q
j
q
i
: ce*b

Obtm-se assim o grafo de transio generalizado sem o estado q, Fig. 3.4.13.







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 (q
i
, q
j
) 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.
ce*b
ce*d ae*d
ae*b
q
i

q
j

Figura 3.4.13. Grafo resultante da eliminao do
estado intermdio da Fig. 3.4.12.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 137
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 q
0
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 r
1
, r
2
, r
3
, r
4
so expresses regulares.








A expresso regular que denota a linguagem aceite pelo grafo
r=r
1
*r
2
(r
4
+ r
3
r
1
*r
2
)*
De facto, para se ir de q
0
a q
f
, pode-se ir por r
1
(um nmero arbitrrio de vezes),
seguido de r
2
,
r
4
r
1
r
3
r
2
q
0
q
f
Figura 3.4.14, Qualquer NFA pode ser reduzido a
esta forma.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 138
- seguido de r
4
ou, voltando para trs, de r
3
seguido de r
1
* seguido de r
2
, e esta
volta um nmero arbitrrio de vezes.
No caso de se obter um grafo em que o estado inicial tambm estado final,







a expresso regular
r=(r
1
*
+ (r
2
r
4
*r
3
))*
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.





r
2
r
4
r
1
r
3
q
f
Figura 3.4 15. Caso em que o estado inicial aceitador.
1
0
0
0
1
A
B
C
1
Figura 3.4.16. Exemplo 3.4.2.1
1
0
0
0
1
A
B
C
1
q

Figura 3.4.17. Introduo de um
estado inicial na Fig. 3.4.16
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 139
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




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






Aplicando agora o resultado geral obtm-se a expresso regular do autmato inicial,
r=(r
4
+ C)* =r
4
*= r
4

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,
r
4
= ( 0 + 11*0(11*0)*0 )*
r
4
A
q
0

0
0
11*0
A
11*0
B q

Figura 3.4.17. Eliminao do estado C.
Figura 3.4.18. Eliminao do estado B
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 140
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 e V, variveis do conjunto das variveis
xe 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
G
1
= ({S}, {a,b}, S, P
1
) , linear direita
P
1
: S abA
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 141
P
2
: S a
Tambm se pode escrever em forma mais compacta por
P

: S abA|a
Como derivar ababa de G
1
?
S abS ababS ababa
Aplicando P
1
sucessivamente duas vezes e depois P
2
para terminar.
De cada vez que se aplica P
1
introduz-se ab. Aplicando duas vezes, fica (ab)
2
S depois
para eliminar S tem que se aplicar P
2
resultando em (ab)
2
a. Aplicando trs vezes P
1
fica
(ab)
3
S e depois P
2
termina a derivao em (ab)
3
a.
Generalizando conclui-se que a gramtica G
1
produz a linguagem (regular) definida pela
expresso regular
r=(ab)*a
Exemplo 3.5.1.2
G
2
=({S,A,B}, {a,b}, S, P
2
} , linear esquerda
P
1
S Aab
P
2
A Aab | B
P
3
B a
Como derivar aababab de G
2
?
S Aab Aabab Aababab Bababab aababab
Aplicando P
2
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.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 142
G
3
=({S,A,B}, {a,b}, S, P }
P
1
S A
P
2
A aB
P
3
A
P
4
B Ab
Esta tem produes lineares direita (P
2
) e outras lineares esquerda (P
4
) (P
1
e P
3
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.
G
4
=({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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 143
Um NFA pode imitar esta produo se tiver um estado D e um estado E e entre os dois
uma aresta etiquetada por d :


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 = {V
0
, V
1
, ..., V
n
} o conjunto das variveis da gramtica
S = V
0
a varivel inicial (axioma)
P : V
0
v
1
V
i

V
i
v
2
V
j

V
n
v
l

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
V
0
v
1
V
i

v
1
v
2
V
j

E
d D
Figura 3.5.1 Produo D dE
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 144
....

*
v
1
v
2
...v
k
V
n

v
1
v
2
...v
k
v
l
= w
O NFA a ser construdo imita cada derivao consumindo um v de cada vez. V
0,
V
i
, V
j
,
..., V
n
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:
V
i
a
1
a
2
a
3
...a
m
V
j

ento o NFA ter um caminho ligando V
i
a V
j
, ou seja o (V
i
, V
j
) existe e ser definida por
o*(V
i
, a
1
a
2
a
3
...a
m
) = V
j




Para uma produo
V
i
a
1
a
2
a
3
...a
m

a funo de transio generalizada ser o estado final V
f
.

o*(V
i
, a
1
a
2
a
3
...a
m
) = V
f



V
i
a
1
a
m
V
j
a
2
Figura 3.5.2. Produo V
i
a
1
a
2
a
3
...a
m
V
j

V
i
a
1
a
m
V
f
a
2
Figura 3.5.3. Produo V
i
a
1
a
2
a
3
...a
m

Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 145
Se uma cadeia weL(G) ento ela foi gerada por um conjunto de produes definidas
acima. No NFA existe, por construo, um caminho etiquetado w que vai de V
0
at V
f
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 V
0,
V
i
,... at V
f
usando
caminhos etiquetados v
1
, v
2
, ...., ou seja, w tem necessariamente a forma
w= v
1
v
2
...v
k
v
l

e por isso a derivao
V
0
v
1
V
i
v
1
v
2
V
j

*
v
1
v
2
...v
k
V
n
v
1
v
2
...v
k
v
l
= 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: S aA | aB ,
A bB | b ,
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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 146
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.







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 E, ento existe uma gramtica
linear direita G=(V,E, S,P) tal que L=L(G).
Demonstrao:
Seja M=(Q,E,o, q
0
,F) o DFA que aceita L, tal que
Q= {q
0
,q
1
,...q
n
}
E ={a
1
, a
2
, ..., a
m
}
Vamos fazer a prova do teorema construindo uma gramtica linear direita a partir do
DFA. Para isso
S a A
B
F
b
a
b
a
b
Figura 3.5.4. Autmato da gramtica do exemplo 3.5.2.1.
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 147
1 Construa-se a gramtica linear direita G = (V, E, S, P), tal que
V= {q
0
,q
1
,...q
n
} as variveis da gramtica so os estados do DFA
S = q
0

2 Para cada transio o (q
i
, a
j
) = q
k
no DFA M , introduz-se em P a produo
q
i
a
j
q
k
cria-se uma produo por cada transio entre dois estados
3 Se q
k
faz parte de F, acrescenta-se a P a produo
q
k
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 o (q
i
, a
j
) = q
k
no NFA M , introduz-se em P a produo
q
i
a
j
q
k
cria-se uma produo por cada transio entre dois estados
Se existir tambm o (q
i
, a
j
) = q
l
, introduz-se em P a produo ou seja, neste caso,
q
i
a
i
q
l
,ou seja q
i
a
j
q
k
| a
j
q
l

Para cada transio o (q
i
, ) = q
k
no NFA M, introduz-se em P a produo q
i
q
k
(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
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 148




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
o (q
0
, a)={q
1
} q
0
aq
1
o (q
1
, a)={q
2
} q
1
aq
2

o (q
2
,b)={q
2
} q
2
bq
2

o (q
2
, a)={q
f
} q
2
aq
f

q
f
e F q
f

Para gerar por exemplo a cadeia aaba usam-se as formas sentenciais
q
0
aq
1
aaq
2
aabq
2
aabaq
f
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 a a
b
q
f

q
0
q
1
q
2

Figura 3.5.5.NFA para aab*a
a a a
b
q
4

q
1
q
2
q
3

a
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 149
ab*a


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 -





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
o (q
0
, )={q
1
, q
5
} q
0
q
1
| q
5

o (q
1
, a)={q
2
} q
1
aq
2

o (q
2
,a)={q
3
, q
4
} q
2
aq
3
| aq
4

o (q
3
, a)={q
4
} q
3
aq
4

o (q
3
, b)={q
3
} q
3
bq
3


q
4
q
f

o (q
5
, a)={q
6
} q
5
aq
6

o (q
6
, b)={q
6
} q
6
bq
6

o (q
6
,a)={q
7
} q
6
aq
7

o (q
7
, )={q
f
} q
7
q
f

q
f
e F q
f

o (q
4
, )={q
f
}
a
a
b
q
7

q
5
q
6

Figura 3.5.6. Resoluo por partes do exemplo 3.5.3.2
a a a
b
q
4

q
1
q
2
q
3

a
a
b
q
7

q
5
q
6

q

q
f

a
Figura 3.5.7. NFA resultante para o exemplo 3.5.3.2
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 150
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.


Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 151









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)




Expresses regulares (ER)
DFA ou NFA
Gramticas regulares (GR)
Teorema
3.1
Teorema
3.2
Teorema
3.3
Teorema
3.4
Teoria da Computao Cap. 3 Expresses regulares, linguagens e gramticas

LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 152
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.
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 153


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







Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 154

Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 155
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.





4.2.1. Fecho em relao a operaes de conjuntos
Algumas conhecidas operaes sobre conjuntos quando aplicadas a linguagens regulares
produzem linguagens regulares.
Figura 4.1.1. Fecho de um conjunto em relao a
uma operao entre os seus elementos.
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 156
Teorema 4.1. Se L
1
e L
2
so linguagens regulares, ento tambm o so
(i) L
1
L
2
, propriedade de fecho em relao unio
(ii) L
1
L
2
, propriedade de fecho em relao interseco
(iii) L
1
L
2
, propriedade de fecho em relao concatenao,
(iv) Compl(L
1
), Compl (L
2
), fecho em relao complementao
(v) L
1
*, L
2
*, fecho em relao ao fecho-estrela
(vi) L
1
L
2
=L
1
Compl(L
2
), fecho em relao diferena
Demonstrao:
A demonstrao destas propriedades faz-se recorrendo ao que estudmos nos captulos
anteriores.
(i) (iii) (v):
Vimos que se L
1
e L
2
so regulares, existem expresses regulares r
1
e r
2
que lhes
correspondem, isto L
1
= L
1
(r
1
), L
2
= L
2
(r
2
).
Vimos tambm que por definio de expresses regulares, r
1
+r
2
, r
1
r
2
, r
1
* , r
2
* so
expresses regulares denotando respectivamente as linguagens L
1
L
2
, L
1
L
2
, L
1
*, L
2
*
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, E, o, q
0
, F) o DFA que aceita L
1
. 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 M
c
.
Ento o DFA M
c
= (Q, E, o, q
0
, Q - F) aceita Compl(L
1
).
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 157
De facto, num DFA a funo de transio generalizada o* uma funo total, isto , ela
definida para todas as cadeias de E
*
. Portanto, dada uma cadeia w e o estado inicial q
0
, o*(q
0
,
w) existe, e ou um estado final (pertence e F, caso em que weL
1
) ou um estado no
aceitador e portanto pertencente a Q-F e neste caso we Compl(L
1
). Havendo um DFA que
aceita Compl(L
1
), 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 L
1
e L
2
, respectivamente M
1
e M
2
.
Sejam M
1
= (Q, E, o
1
, q
0
, F
1
) e M
2
= (P, E, o
2
, p
0
, F
2
) os DFA de L
1
e L
2
.
Vamos construir o DFA interseco destes dois e chamemos-lhe M
12
: ele aceitar uma
cadeia se e s se essa cadeia for aceite por M
1
e por M
2
. Tomamos um carcter do alfabeto
(que o mesmo nas duas linguagens) e seguimo-lo num e noutro autmato. Se ele est num
estado q
i
de M
1
e num estado p
j
de M
2
, criamos um estado q
ij
em M
12
. Se ele transita em M
1

para q
k
e em M
2
para p
l
, cria-se o estado q
kl
em M
12
. Assim os estados de M
12
correspondem a
pares de estados de (Q, P).
Suponhamos o alfabeto E={a,b} e o carcter a. A Fig. 4.2.1 ilustra a demonstrao.







De seguida v-se para onde se transita com b, em q
i
de M
1
e p
j
de M
2
, e cria-se em M
12
o
estado respectivo.
q
i
q
k
a

p
j
p
l
a

(q
i
, p
j
)
a

(q
k
, p
l
)
q
ij
q
kl

Ento em M
12

Em M
2

Em M
1

Figura 4.2.1 Autmato da interseco de duas linguagens
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 158
O conjunto dos estados de M
12
um subconjunto do produto cartesiano dos estados de M
1

com os de M
2
, QxP, composto por pares (q
i
, p
j
), com q
i
eQ
j
e p
j
eP.
A funo de transio do DFA M
12
, o , obtm-se sabendo que M
12
est no estado (q
i
, p
j
)
sempre que M
1
est no estado q
i
e M
2
est no esto q
j
, ou seja,
o ((q
i
, p
j
), a)= (q
k
, p
l
)
Sempre que
o
1
(q
i
, a)= q
k

e
o
2
(p
j
, a)= p
l

E quais sero os estados aceitadores em M
12
?
Queremos obter o DFA que aceita a interseco das linguagens L
1
e L
2
, isto , as cadeias
que levam M
1
a um estado aceitador e ao mesmo tempo M
2
tambm a um estado aceitador.
Para que isso acontea, fazemos aceitadores em M
12
os estados compostos por estados
aceitadores, isto , os estados (q
i
, p
j
) tais que q
i
aceitador em M
1
(q
i
eF
1
) e p
j
aceitador em
M
2
(p
j
eF
2
).
Deste modo o DFA M
12
aceita todas as cadeias, e s essas, weL
1
L
2
.
Alternativamente a esta demonstrao construtiva, e usando os nossos conhecimentos de
lgica, poderemos usar a Lei de DeMorgan
1 2
1 2
L L L L =
Se L
1
regular, tambm o o seu complemento. Se L
2
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
2
1 2 1
L L L L =
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 159
Sendo L
2
regular, tambm o o seu complemento. Sendo L
1
regular, a interseco com
outra regular d uma regular, como acabmos de provar. Logo a diferena regular (sendo L
1

e L
2
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 L
R

Logo o NFA da reversa existe, porque acabmos de o construir, e por isso L
R
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).

Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 160







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

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.



O NFA obtido aceita a linguagem que resulta da original depois do homomorfismo h, que
por isso mesmo uma linguagem regular.
a
b
c
01
11
101
E
1
E*
2
h
h
h
Figura 4.2.2. Ilustrao do homomorfismo
1 2
c
1 2
1 0 1
Figura 4.2.3. O autmato de um homomorfismo
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 161
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 L
1
e L
2
no mesmo alfabeto. Tomemos agora todas as cadeias
de L
1
que se podem decompor em duas partes: um sufixo y e um prefixo x, tal que o sufixo y
constitui uma cadeia de L
2
.




O conjunto dos prefixos x compe a linguagem quociente de L
1
por L
2
direita. Isto ,
L
1
/L
2
={x: xyeL
1
para algum y eL
2
}
Teorema 4.4. Se L
1
e L
2
so linguagens regulares, ento L
1
/L
2
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
x y
L
1

L
2
L
1
/L
2

Figura 4.2.4. Quociente direita
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 162
(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 e dada
uma qualquer cadeia weE*, 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
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 163
Como verificar se duas linguagens so ou no iguais?
Teorema 4.7. Dadas duas linguagens regulares L
1
e L
2
numa forma padro, existe um
algoritmo para determinar se L
1
=L
2
.
Demonstrao construtiva:
Constri-se o DFA para a unio das diferenas das linguagens
L = (L
1
- L
2
) (L
2
L
1
)
e testa-se a se a linguagem resultante vazia. Se sim, as linguagens so iguais, se no, so
diferentes. De facto se L
1
=L
2
ento

L
1
- L
2
=C e L
2
L
1
=C e C C =C. Por outro lado se
L no vazia, ento ou L
1
- L
2
ou

L
2
L
1
no-vazia e por isso L
1
L
2
.

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.
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 164

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 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 b
x y 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 y
2
z
e abaaab

1
2
3
4
a
b
a
b
Figura 4.4.2. Exemplo 4.4.1
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 165
Tabela 4.4.3
ab aaa b
x y
3
z
E assim sucessivamente, qualquer cadeia aceite se pode decompor em trs partes xy
i
z como
na Tabela 4.4.4 seguinte:
Tabela 4.4.4
i w=xy
i
z
0 abb
1 abab
2 abaab
3 abaaab
4 abaaaab

Podem-se desenhar os caminhos correspondentes, como na figura 4.4.3: partindo de q
0
,
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
a
q
0
m
a b
b
q
k
e F

Figura 4.4.3. A decomposio para o exemplo
1. Nesta decomposio x=ab, z=b.
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 166
e
|y| = 1
Se bombearmos y obtemos
w
i
=xy
i
z
a cadeia w
i
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 s 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.





Se olharmos atentamente para o NFA verificamos que o nico ciclo existente 4-5-6. Ser
a que se faz a bombagem. Bombeia-se baa 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
1 2 3 4
5
6
7 8
a b b b b
b a
a
Figura 4.4.4. Autmato de L=abb(baa)*bb
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 167
|xy|=abbbaa = 6 s m
e
|y| = 3
Se bombearmos y obtemos
w
i
=xy
i
z
a cadeia w
i
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,





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)
2
bb
Tabela 4.4.6
x y z
a abb bbb
a abb bbbaabb
a abb bbbaabaabb
a abb
temos que x e y so bem definidos mas z pode ter muitas composies.
1 2 3 4
5
6
7 8
a b b b b
b a
a
5
6
a
b
b
Figura 4.4.5. Autmato de L=a(abb)*bb(baa)*bb
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 168
- escolhendo o 2 ciclo, ser xyz= abb(baa)bb ou a(abb)bb(baa)bb ou
Tabela 4.4.7
x y z
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| s 11
e
|y| 1
Se bombearmos y obtemos
w
i
=xy
i
z
a cadeia w
i
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.

Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 169
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 weL com |w| > m se pode decompor em
w=xyz
com
|xy| s m
e
|y| > 1
tal que
w
i
=xy
i
z
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 = {aa
p
ab
q
a
q
, p>0, q>1}
Existe um m = 5 tal que para toda a cadeia |w|> 5 possvel encontrar uma decomposio
w=xyz tal que |xy|s4, |y|>1, e a cadeia w
i
=xy
i
z pertence linguagem para todo o i > 0.
Demonstrao:
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 170
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=xy
i
z
0 aaba
1 aaba
2 aaaba
3 aaaaba
4 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 a
q
b
q
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.
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 171


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:

Linguagens
que verificam
o Lema da
Bombagem
Linguagens
regulares
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 172
Tabela 4.4.9.
O Lema pela afirmativa O Lema pela negativa
- existe um m tal que para

- para qualquer valor de m sou capaz de
encontrar
- qualquer cadeia |w| > m pertencente a L
existe
- (pelo menos) uma cadeia |w| > m
pertencente a L em que
- uma decomposio xyz que produz, pela
bombagem de y, |xy|sm
- qualquer decomposio xyz produz, pela
bombagem de y, |xy|sm
- todas cadeias pertencentes a L

i > 0, xy
i
z e L

- (pelo menos) uma cadeia que no pertence
linguagem
- i > 0, xy
i
z e L

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|sm
Indica um i que bombeie para fora
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 173
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={a
n
b
n
} 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|s m bombeia para fora da linguagem.
Se me do um m=10, por exemplo, eu apresento a cadeia a
10
b
10
. A decomposio xy tem
que ser tal que todos elementos de y so as, pelo facto de |xy|s 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 a
20
b
20
e acontece coisa semelhante.
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 174
E para um m qualquer eu escolho a cadeia a
m
b
m
. Qualquer decomposio xyz bombeia para
fora da linguagem.
Exemplo 4.4.6.
Seja o alfabeto E={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= {0
i
2
, i
eN}.
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 n
2
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 n
2
>n , h pelo menos dois estados iguais desde o
incial q
0
at ao final aceitador q
n2
. Sejam eles q
i

e q
j
, definindo-se i-j= p s 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 ( n
2
+p) zeros. Ser este um quadrado perfeito ? Se for bem
faz o autmato em a aceitar. Mas se no for ela no pertence linguagem.






Depois de n
2
, o prximo quadrado perfeito (n+1)
2
=n
2
+2n+1. Ora n
2
+p < n
2
+2n+1 porque
p s n e por isso n
2
+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.
q
0
q
i
= q
j
q
n2
e F
Anel de
comprimento p
Figura 4.4.7.Ilustrao do exemplo 4.4.6
Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 175
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 m
2
. Fazendo agora uma decomposio xyz, tal que |xy|sm, 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 m
2
+m. Ora m
2
+m no um quadrado
perfeito; se fosse m
2
+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
Seja a linguagem dos nmeros primos de zeros L= {0
p
, 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 q
i
=q
j
. Fazendo agora j-
i=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.

Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 176
Exerccio 4.4.1.
Provar que a linguagem L={ww, weE , E } 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.


Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 177
Outros exemplos

0
n
1
m
, n>m
Para qualquer m que me ds apresento a cadeia 0
m+1
1
m
, 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 destruindo-
se 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 y
0
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.






Teoria da Computao Cap. 4 Propriedades das linguagens regulares
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho 178

Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
179


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


Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
180


Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
181
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.




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.
Linguagens livres de contexto
Linguagens
regulares
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
182
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
A x
em que AeV e xe(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.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
183
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) ={ww
R
: we {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)
n
bba(ba)
n
: n> 0 }.
Exemplo 5.2.3.
Mostrar que a linguagem L = {a
n
b
m
: 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
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
184
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 AS
1
,
S
1
aS
1
b | ,
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: introduzem-
se tantos as como bs e depois introduzem-se direita um ou mias bs. Teremos as produes
S S
1
B,
S
1
aS
1
b | ,
B Bb | b.
Para o caso n = m, juntam-se os dois conjuntos de produes, obtendo-se:
S AS
1
| S
1
B,
S
1
aS
1
b | ,
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.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
185
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 e {a,b}* : n
a
(w) = n
b
(w) e n
a
(v) > n
b
(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 e {a,b}* : n
a
(w) = n
b
(w) e n
a
(u) n
b
(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) (( ))
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
186
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 E={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
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
187
6. V y
7. V z
Como se poder gerar x+(y-z) ?
E E + 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. A
4. B Bb
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
188
5. B
Exemplo de derivao (o nmero da produo aplicada est indicado sobre a seta):
S
1
AB
2
aaAB
3
aaB
4
aaBb
5
aab
S
1
AB
4
ABb
2
aaABb
5
aaAb
3
aab
A linguagem correspondente L(G) = {a
2n
b
m
: n>0, 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
S
1
aSb
2
abSab
3
abab
e a produo 2-1-3
S
2
bSa
1
baSba
3
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.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
189
Exemplo 5.2.7
Seja a gramtica com as produes
S aAB,
A bBb,
B A |
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
B c

Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
190






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 e V, e se os seus filhos so etiquetados (da
esquerda para a direita) a
1
, a
2
,..., a
n
ento P deve conter a produo da forma
S
a b B c A

c
vrtice raiz
5 filhos da
raiz
folha
vrtice interior
Figura 5.2.1. Uma rvore de derivao.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
191
A a
1
a
2
..., a
n

em que a
i
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,
B A |
A rvore de derivao parcial da Fig. 5.2.2 corresponde a
S aAB abBbB

Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
192





A rvore de derivao Fig. 5.2.3 corresponde derivao pela esquerda
S aAB abBbB abbA abbbBb abbbb








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

S
a B
b
A
B b
b
A
B b
b
A
B b
S
a B

Figura 5.2.2. rvore


de derivao parcial
Figura 5.2.3. rvore de derivao total
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
193






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 we 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 t
G
alguma rvore de derivao parcial de G cuja raiz est etiquetada por
S, ento o fruto de t
G
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 weL(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
b
A
B b
S
a
B

Figura 5.2.4. Outra rvore de derivao


Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
194
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 weL(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).
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
195
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
S x
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 we 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.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
196
Vejamos como se aplica a procura exaustiva, desenhando a rvore da procura.
1 volta: inicializar a produo da gramtica a partir da raiz S




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.






Nenhuma cadeia w. Podem-se desde j eliminar as folhas que comeam por b ou cujo
segunda carcter b.
S
SS
bSa aSb
Figura 5.3.1. Primeira volta do parsing de aabb.
Figura 5.3.2. Segunda volta do parsing exaustivo
S
SS

bSa aSb
SSS aSbS bSaS S aSSb aaSbb abSab ab
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
197
3 volta: prossegue-se a partir de cada vrtice da 2volta, com produes pela esquerda.











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.
SaSbaaSbbaabb
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.
Figura 5.3.3. Terceira e ltima volta do parsing de aabb
S
SS

bSa aSb
SSS aSbS bSaS S aSSb aaSbb abSab ab
SSSS aSbSS bSaSS SS
aSSbS aaSbbS abSabS abbS
aSSSb aaSbSb abSaSb aSb
aaSSbb aaaSbbb aabSabb aabb
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
198
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:
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
199
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 we {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
A B
em que A, B e V. Ento o parsing exaustivo pode ser feito por um algoritmo que, para
qualquer we E*, 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 ?
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
200
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.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
201
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 AeV, aeT, xeV*, 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. Pode-
se 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
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
202
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).
E E + E
E E - E
E (E)
E V
V x
V z
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.






Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
203













5.3.2. Ambiguidade nas gramticas e nas linguagens
Vimos que dada uma cadeia weL(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
A derivao da cadeia x+(y-z) ser

E E + E
V + E
x + E
x + (E)
x + (E - E)
x + (V - E)
x + (y - E)
x + (y - V)
x + (y - z)
E
E +
E
V
( E )
x E - E
V
V
y
z
Figura 5.3.4. rvore de derivao do exemplo 5.3.4.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
204
Uma gramtica livre de contexto ambgua se existir alguma cadeia w e 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
a S
b
a S
b

S
a S
b
a S
b

S
S

S
a S
b
a S
b

S
S

Figura 5.3.5. rvores de derivao do exemplo 5.3.5


Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
205
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







Vejamos ainda outro exemplo (Linz, 142, Hopcroft 172).
S
A
S
B
B b
a
b
S
A S
a b
b
Figura 5.3.6. Exemplo 5.3.6.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
206
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. E I
P2. E E + E
P3 E E * 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









E
E +
E
I
a
E * E
I
b
I
c
E
E *
E
I
c
E + E
I
a
I
b
Figura 5.3.7. rvores das expresses aritmticas
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
207
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 a este
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 por convenincia mais duas variveis T e F, fazendo
V={E, T, F, I},
e faam-se as produes
P1. E T
P2. T F
P3. FI
P3. E E + 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.
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
208










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|, obtendo-
se 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.

E
E +
T
T
F
T * F
F
I
I
c
I
a b
Figura 5.3.8.rvore de derivao refeita
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
209
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 = {a
n
b
n
c
m
d
m
, n> 1, m> 1) {a
n
b
m
c
m
d
n
, n> 1, m>1}
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 a
n
b
n
c
m
d
m

S AB
A aAb | ab
B cBd | cd
ii) Para a
n
b
m
c
m
d
n

S C
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
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
210
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):











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
a b c d
a b c d
S
A B
A B
a d
a d
b c
b c
S
C
C
D
D
Figura 5.3.9
Figura 5.3.10
Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
211
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 BNF
1
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.









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

Teoria da Computao Cap.5 Linguagens Livres de Contexto
LEI/DEI/FCTUC/2011/@ADC Documento de trabalho
212

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
213


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


Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
214

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
215
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.

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
216
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 S
0
ao conjunto de variveis V, fazendo S
0
a varivel inicial
(em vez de S).
Adicione-se tambm a P uma nova produo
S
0

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 obtm-
se 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.


Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
217
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 x
1
Bx
2
.
sendo A e B variveis distintas.
Seja
B y
1
| y
2
| ... | y
n
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
- eliminando a produo A x
1
Bx
2

- adicionando a produo A x
1
y
1
x
2
| x
1
y
2
x
2
| ... | x
1
y
n
x
2
|
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|
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
218
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 e V diz-se til se e s se
existir pelo menos um we L(G) tal que
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
219
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
S A
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
A a
B b
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
220
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
A a
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
S b
Exemplo 6.2.3.2
Seja a gramtica G = (V, T, S, P), em E = {a, b}, sendo V = {S, A, B, C} e
P: S aS | A | C
A a
B aa
C aCb
reduz-se simplesmente a
S aS | A
A a
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 V
1
conjunto das variveis teis. Inicialmente est vazio,C , e vai-se enchendo em voltas
sucessivas.
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
221
1. V
1
= C, inicializao
2. Se A x
1
x
2
x
3
...x
m
com x
i
e V
1
T, colocar A em V
1.

Na 1 volta s entram em V
1
variveis que tenham do lado direito apenas smbolos
terminais. De facto neste instante V
1
est vazia e portanto V
1
T=T.
Na 2 volta e seguintes entram as que tenham do lado direito smbolos terminais
e/ou variveis j includas em V
1
nas voltas anteriores.
At que no se possam meter mais variveis em V
1
.
Depois de completado este processo, todas as variveis que possam gerar cadeias
terminais esto em V
1
. Por outro V
1
s contm variveis teis. Ver uma
demonstrao mais formal em Linz, p. 155.
3. As produes P
1
da gramtica intermdia so todas as produes da gramtica
original cujos smbolos esto todos em V
1
T (i.e., todas as suas variveis esto
em V
1
). Se houver uma varivel que no esteja em V
1
, 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
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
222
Seja a gramtica com as produes
S aS | A|C
Aa
BaaD
CaCD
DbD|
Construo da gramtica intermdia cujas variveis so todas teis:
1.- V
1
=C,
2. 1 volta
- colocar A em V
1
porque Aa
- colocar D em V
1
porque D V
1
={A, D}
2 volta
- como S A, S vai para V
1
- como B aaD, B vai para V
1
V
1
={S, A, B, D}
3volta
-no h mais variveis para introduzir em B
3. Gramtica intermdia G
1
: produes de P
1
so as produes originais cujos smbolos esto
todos em V
1
T (ou seja, todas as suas variveis esto em V
1
)
S aS | A
A a
B aaD
D bD|
Na segunda parte obtm-se a gramtica G final a partir da gramtica intermdia G
1
. 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.
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
223


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)={a
n
, 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
B
D
S A
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
224
A aA|
gera a linguagem das cadeias de as, a
n
, 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 V
N
das variveis anulveis, que est inicialmente vazio.
1. Para todo o A tal que existe A , incluir A em V
N
.
Estas so as variveis anulveis directamente, em um passo.
2. Para todo o B tal que existe a produo
B A
1
A
2
.... A
n
com A
1
, A
2
, ..., A
n
pertencentes todas a V
N
., incluir B em V
N
.
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 V
N

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
225
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 x
1
x
2
...x
m
, m > 1, x
i
e V T
tendo do lado direito caracteres terminais e/ou vrias variveis, podendo algumas
ser anulveis.
2. Colocar em P
- esta produo A x
1
x
2
...x
m
, m > 1, x
i
e V T
- as que resultam desta pela substituio das suas variveis anulveis por em
todas as combinaes possveis : se x
i
e x
j
so anulveis, cria-se
(i) uma produo em que x
i
substituda por ,
(ii)outra em que x
j
substituda por , e
(iii) ainda outra em que x
i
e

x
j
so ambas substitudas por .
- se todas as x
i
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 |
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
226
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, fazendo A=
S , fazendo A= e B=, mas este caso no se retm.
A aAA multiplica-se em
A aAA
A aA
A a
B bBB multiplica-se em
B bBB
B bB
B b
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 ?
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
227
Se e L (G), consideramos em primeiro lugar a mesma linguagem mas sem a que
chamamos L-{}. Poderemos afirmar agora que existe uma gramtica CFG G
1
sem
produes- tal que L(G
1
) = L(G) {}. Depois, e como vimos anteriormente, introduz-se
uma nova produo
S
0
S|
Naturalmente que para incluir esta possibilidade se introduziu uma varivel anulvel S
0
, o
novo axioma.
Exemplo 6.2.4.2
Seja a gramtica com as produes
S aAbBc
A BC
B bB|b|
C D|
D c
Obteno do conjunto das variveis anulveis:
1 B
C donde V
N
={B, C}
2 A BC donde V
N
={A, B, C}

Agora V
N
={A, B, C}
3 No h mais

S aAbBc resulta em S aAbBc
S abBc (anula A)
S aAbc (anula B)
S abc (anula A e B)
A BC resulta em A BC
A C (anula B)
A B (anula A)
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
228

B bB resulta em B bB
B b (anula B)
C D resulta em C D
D c resulta em D c
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
A B
em que A, B e 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 par (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):

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
229
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 y
1
| y
2
| ...| y
n
em P
adicionar a P
A y
1
| y
2
| ...|y
n

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
230
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
S A B
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
231
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
S
*
B
B bb S bb
A
*
B
B bb A bb
B
*
A
A a | bc B a | bc
S
*
A
A a | bc S a | bc
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 E={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:
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
232
-directos (E,T), (T,F), (F,I)
- indirectos (E,F), (E,I), (F,I)

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
F a | 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-
E
T
F
I
Fig. 6.2.5.1
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
233
- 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
A a
em que A, B, C pertencem a V e aeT.
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
234
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
B b
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 e 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 B
a
. Esta varivel ter uma s
produo B
a
a. Usa-se B
a
em vez de a nas produes de corpo maior ou igual a 2.
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
235
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 B
a
, B
b
, B
c
para a, b, c , ficando
S ABB
a

A B
a
B
a
B
b
B AB
c

B
a
a
B
b
b
B
c
c
2 passo
Partem-se as produes A C
1
C
2
....C
n,
n > 3, num conjunto de produes com duas variveis
no lado direito. Para isso introduzem-se novas variveis D
1
, D
2
,..., D
n-2
. A produo original
substituda pelas n-1 produes
A C
1
D
1
D
1
C
2
D
2
..
D
n-2
C
n-1
D
n
Ainda no mesmo exemplo, introduzem-se as variveis D
1
(para a primeira produo) e D
2

(para a segunda produo). A forma normal de Chomsky ser finalmente,
S AD
1
D
1
BB
a

A B
a
D
2

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
236
D
2
B
a
B
b
B AB
c

B
a
a
B
b
b
B
c
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:
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)
E T
F I
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
237
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) E a | b | c | Ia | Ib | Ic | I0 | I1
(T, T) T T*F
(T, F) T (E)
(T, I) T a | b | c | Ia | Ib | Ic | I0 | I1
(F, F) F (E)
(F, I) F a | b | c | Ia | Ib | Ic | I0 | I1
(I, I) I a | 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
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
238
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
E a | b | c | Ia | Ib | Ic | I0 | I1 E a | b | c | IA | IB | IC | IZ | IU
T T*F T TMF
T (E) T LER
T a | b | c |Ia | Ib | Ic | I0 | I1 T a | 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
I a | b | c | Ia | Ib | Ic | I0 | I1 I a | b | c | IA | IB | IC | IZ | IU

A a
B b
C c
Z 0
U 1
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
239
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 EX
1
X
1
PT
obtendo-se assim duas produes na FN de Chomsky.
As novas produes so as da tabela seguinte.
Produes actuais Novas produes: FN Chomsky
E EPT E EX
1
X
1
PT
E TMF E TX
2
X
2
MF
E LER E LX
3
X
3
ER
E a | b | c | IA | IB | IC | IZ | IU E a | b | c | IA | IB | IC | IZ | IU
T TMF T TX
2
T LER T LX
3

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
240
T a | b | c | IA | IB | IC | IZ | IU T a | b | c | IA | IB | IC | IZ | IU
F LER F LX
3

F a | b | c | IA | IB | IC | IZ | IU F a | b | c | IA | IB | IC | IZ | IU
I a | b | c | IA | IB | IC | IZ | IU I a | b | c | IA | IB | IC | IZ | IU
A a
B b
C c
Z 0
U 1
P +
M *
L (
R )
A a
B b
C c
Z 0
U 1
P +
M *
L (
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 e T e x e V* ( por exemplo aB, aBC, aBCD, ).
As gramticas de (Sheila) Greibach tm propriedades interessantes:
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
241
- 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
B b
- 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 e 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 FNG.
S 0SA | 1SA |0 | 1|
A 0
B 1
Este exemplo simples porque todas a produes iniciais se iniciam com um carcter final (0
ou 1). No entanto, quando assim no acontece, o processo torna-se bem mais complicado.
Existe um algoritmo

Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
242
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,
Z
a
a Z
b
b
substituindo nas produes anteriores resulta na soluo:
S aZ
a
ABZ
b
| bAZ
a
BZ
b
| a
A aZ
a
A | bAZ
b
B bAZ
b

Z
a
a
Z
b
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.
Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
243
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 usa-
se 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.





Teoria da Computao Cap. 6 Simplificao de Gramticas e Formas Normais
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
244

Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
245



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



Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
246


Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
247
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= {a
n
b
n
: 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 e E* tal que
v=ww
R
, w e E*}, 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.


Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
248






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 o tem trs argumentos de entrada e dois argumentos de sada, como na Fig. 7.2.2.



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

estado seguinte
escreve na pilha
o
carcter de entrada
estado actual
smbolo no topo da
cadeia de entrada a a b b a b
q
0

q
1

q
2

CONTROLO
P
i
l
h
a
a
b
c
0
1
#
cadeia de entrada a a b b a b
a
b
c
0
1
#
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
249





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.


Livres de contexto
determinsticas
Regulares
Livres de contexto
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
250
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)
definido por um septeto
M = (Q, E, I, o, q
0
, z
0
, F)
em que
Q : conjunto finito de estados internos da unidade de controlo
E : (sigma) o alfabeto de entrada
I : (gama) conjunto finito de smbolos chamado alfabeto da pilha
o : Q (E {}) I subconjuntos finitos de Q I* , a funo de transio, ver a
figura 7.2.2.
q
0
e Q : estado inicial da unidade de controlo
z
0
e I : 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, E (sigma), e o
da pilha, I (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, e o aceitador pra.
O contradomnio de o deve ser um conjunto finito porque QI* 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).
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
251
abc escrita de cima
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 I. Normalmente usa-se
para smbolo inicial da pilha o carcter especial # (cardinal).
Uma movida do autmato tem a seguinte sintaxe, sendo o a funo de transio.:
o (q
0
, a, 0) = { (q
1
, 10) }
Sendo
q
0
: estado actual
a : carcter lido entrada
0 : smbolo no topo da pilha
q
1
: 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





a
b
c
Transies Operaes sobre a a pilha Significado
1. o(q
0
, a, #) = { (q
1
, 0#) } push acrescenta 0
2. o(q
0
, b, 1) = { (q
1
, ) } pop apaga 1
3. o(q
1
, b, 0) = { (q
1
, 1) } substituio substitui 0 por 1
4. o(q
0
, b, 1) = { (q
1
, 1) } nenhuma no altera
5. o(q
1
, , 0) = { (q
2
, ) } pop apaga 0
6. o(q
1
, , 0) = { (q
2
, 10) } push acrescenta 1
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
252
Exemplo 7.3.1.
Considere-se a transio num NPDA definida por
o (q
1
, a, b) = {(q
2
, cd), (q
3
, )}
Quando o autmato est no estado q
1
, 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 q
2
- 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 q
3
- 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 = {q
0
, q
1
, q
2
, q
3
,}
E = {a, b}
I = {#, 0, 1}
z
0
=#
F= {q
3
}
e
o (q
0
, a, # ) = {(q
1
, 1#), (q
3
, )},
o (q
0
, , # ) = {(q
3
,)},
o (q
1
, a, 1 ) = {(q
1
, 11)},
o (q
1
, b, 1 ) = {(q
2
, )},
o (q
2
, b, 1 ) = {(q
2
, )},
o (q
2
, , # ) = {(q
3
, )}.
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
253
Note-se que o 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 o no est
definido, nunca mais de l sai, estando por isso morto.
H duas transies neste exemplo que merecem uma anlise mais detalhada:
1 : o (q
1
, a, 1 ) = {(q
1
, 11)}
- se no estado q
1
l um a, tendo um 1 no topo da pilha, mantm-se em q
1
e
acrescenta um 1 pilha, ou seja, push 1.
- por cada a que aparece acrescenta um 1 pilha, enquanto existirem 1s na
pilha.
2 : o (q
2
, b, 1 ) = {(q
2
, )}
- se no estado q
2
l um b, tendo 1 no topo da pilha, passa ao estado q
2


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 q
1
ao estado q
2
acontece quando aparece o primeiro b.
Que faz ento o autmato? Quando atinge q
3
?
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 q
3
. O estado q
3
alcanado, por este modo, quando o
NPDA l uma cadeia de L = {a
n
b
n
: n > 0}.
Note-se que aps a leitura do primeiro a o autmato pode passar directamente ao estado
final q
3
, devido a
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
254
o (q
0
, a, # ) = {(q
1
, 1#), (q
3
, )}
e por aqui aceita a linguagem L={a}.
O estado q
3
assim alcanado quando o NPDA l uma cadeia de L = {a
n
b
n
: 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 (q
3
, ), a linguagem aceite
pelo autmato ser simplesmente L = {a
n
b
n
: 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 q
2
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
(q
1
, aw, bx) | (q
2
, w, yx)
s possvel se existir a transio
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
255
o (q
1
, a, b) = {(q
2
, 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, E, I, o, q
0
, z
0,
F) um autmato de pilha no determinstico.
A linguagem aceite por M
L (M) = {weE* : (q
0
, w, z
0
)
-
, M
(p,, u), pe F, u e I*}
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 , E , I , o , q
0
, z
0
, F )
aceita a linguagem L (M) por pilha vazia se
L (M) = { we E * : (q
0
, w , z
0
)
M
( q , ,), para algum qe 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
-
,
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
256
vazia, e vice-versa. Ver em Hopcroft e Coll. (p. 230-236).
Exemplo 7.3.2.1.
Qual o NPDA que aceita
L = {w e {a, b}* : n
a
(w)=n
b
(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:
o (q
0
, , #) = {(q
f
, #)}, aceita a cadeia vazia, n
a
(w)=n
b
(w)=0
o (q
0
, a, #) = {(q
0
, 0#)}, um a inicial acrescenta 0
o (q
0
, b, #) = {(q
0
, 1#)}, um b inicial acrescenta 1
o (q
0
, a, 0) = {(q
0
, 00)}, um a acrescenta 0
o (q
0
, b, 0) = {(q
0
, )}, um b apaga 0
o (q
0
, a, 1) = {(q
0
, )}, um a apaga 1
o (q
0
, b, 1) = {(q
0
, 11)}. um b acrescenta 1.
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
257
A transio- introduz indeterminismo no autmato. Quando aparece um a entrada, pode
acontecer uma de duas coisas:
- o autmato transita para o estado q
f
sem consumir o a da entrada
(transio - )
- o autmato consome o carcter de entrada, a, escreve 0 na pilha e
mantm-se em q
0

O NPDA formalmente definido pelo septeto
M = ({q
0
, q
f
}, {a,b}, {#, 0, 1}, o, q
0
, #, {q
f
}).
Por exemplo a cadeia abbabbaa produz as seguintes movidas:
(q
0
, abbabbaa, #) | (q
0
, abbabba, 0#) | (q
0
, abbabb, 00#) | (q
0
, abbab, 0#)
| (q
0
, abba, #) | (q
0
, abb, 0#) | (q
0
, ab, #) | (q
0
, a, 1#) |
| (q
0
, , #) | (q
f
, #)
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



Figura 7.3.2.1. Notao JFLAP.
a, 1 ; 01
q
0

q
1
0
1
Pilha aps
movida
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
258
Com o significado seguinte:
Estando o autmato no estado q
0
, se l a e se a pilha estiver com 1 no topo, o autmato
- passa ao estado q
1
,
- 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



Figura 7.3.2.2. Notao DEM
Com o significado: estando o autmato no estado q
0
, se l a e se a pilha estiver com 1 no
topo, o autmato
- passa ao estado q
1
,
- 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 e {a, b}* : n
a
(w)=n
b
(w)}, com notao do JFALP, ser





Figura 7.3.2.3 Grafo do NPDA do exemplo 7.3.2.1
q
0
q
f

, # ; #
a, # ; 0#
b, # ; 1#
a, 0 ; 00
b, 0;
a, 1 ;
b, 1 ; 11
1
2
3
4
5
6
7
a, 1 ; 01
q
0

q
1
1
0
Pilha aps
movida
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
259
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 = { ww
R
: w e {a, b}
+
}
O smbolos so inseridos na pilha pela ordem inversa por que so apagados.
Descrio informal (Hopcroft, 221):
1. Inicia-se no estado q
0
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 q
0
, 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 q
1
.
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 q
0

continuando a ler entradas e a coloc-las na pilha.
3. Depois de transitar para o estado q
1
, 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
w
R
. 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 w
R
.
Aceita-se a entrada que foi lida at este ponto, criando para isso um estado q
2
.
Em termos das transies, poderemos dividi-las em vrias partes:
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
260
1 parte para fazer o push de w
o (q
0
,, a, a) = {(q
0
, aa)},
o (q
0
,,b, a) = {(q
0
, ba)},
o (q
0
,,a, b) = {(q
0
, ab)},
o (q
0
,,b, b) = {(q
0
, bb)},
o (q
0
,,a, #) = {(q
0
, a#)},
o (q
0
,,b, #) = {(q
0
, b)}.
2 parte palpitar o meio da cadeia
o (q
0
, , a) = {(q
1
, a)},
o (q
0
, , b) = {(q
1
, b)}.
3 parte para comparar w
R
com o contedo da pilha
o (q
1
, a, a) = {(q
1
, )},
o (q
1
, b, b) = {(q
1
, )},
4 parte para fazer a aceitao
o (q
1
, , #) = {(q
2
, #)},
Por exemplo a cadeia ababbaba, em que w=abab, pode ser aceite pelas seguintes transies
(q
0
, ababbaba, #) | (q
0
, ababbab, a#) | (q
0
, ababba, ba#) | (q
0
, ababb, aba#)
| (q
0
, abab, baba#) | (q
1
, abab, baba#) | (q
1
, abab, baba#)
| (q
1
, aba, aba#) | (q
1
, ab, ba#) | (q
1
, a, a#) | (q
1
, , #)
| (q
2
, #)
e portanto aceite. O grafo do autmato ser o da Fig. 7.3.2.4.





Figura 7.3.2.4. NPDA do exemplo 7.3.2.2.
q
0

q
f

, a ; a
a, # ; a#
b, # ; b#
b,a; ba
a, b; ab
b, b1 ; bb
q
1

, b ; b
, # ; #
a, a ;
b, b;
a,a ; aa
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
261
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, ae T, xe 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




Figura 7.4.1 Simulao de uma produo no NPDA

A ax
a


A
#
a
x
#
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
262
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
3 B b
que gera a linguagem
L (G) = { a
n
b
n
: 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 q
0
, o de derivaes, q
1
e o aceitador q
f.
O alfabeto da pilha I = {#, S, A, B } e E = {a, b}.
1 Introduzir o smbolo inicial na pilha:
o (q
0
, , #) = { (q
1
, S#)}
2 Simular
S aA o (q
1
, a, S) = { (q
1
, A)}
3 Simular
S aB o (q
1
, a, S) = { (q
1
, B)}
4 Simular
A aAB o (q
1
, a, A) = { (q
1
, AB)}
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
263
5 Simular
A aBB o (q
1
, a, A) = { (q
1
, BB)}
6 Simular
B b o (q
1
, b, B) = { (q
1
, )}
7 Aceitar a cadeia quando aparece # no topo da pilha: muda para o estado aceitador
o (q
1
, , #) = { (q
f
, #)}
Note-se o carcter no determinstico no autmato (vrias escolhas de movidas possveis
para uma da configurao).




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 Movida Grafo
Carregar S o (q
0
, , #) = { (q
1
, S#)}
S aA o (q
1
, a, S) = { (q
1
, A)}
S aB o (q
1
, a, S) = { (q
1
, B)}
A aAB

o (q
1
, a, A) = { (q
1
, AB)}
A aBB o (q
1
, a, A) = { (q
1
, BB)}
B b o (q
1
, b, B) = { (q
1
, )}
aceitar a cadeia
o (q
1
, , #) = { (q
f
, #)}

q
1
q
f

, # ; #
a, A ; AB
q
0

, # ; #S
a, S ; B
a, S ; A
a, A ; BB a, B ;
q
1
q
0

, # ; S#
q
1

a, S ; A
a, S ; B
q
1

a, A ; AB
q
1

a, A ; BB
q
1

b, B ;
q
1

q
f
q
0

, # ; #
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
264
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 {q
0
, q
1
, q
2
} sendo q
2
=q
f
.
1 colocar o smbolo inicial S na pilha:
o (q
0
, , #) = { (q
1
, S#)}.
2 simular a produo S aSA,
removendo S da pilha e colocando l AS
lendo a entrada
o (q
1
, a, S) = { (q
1
, SA), (q
1
, )}
simular a produo S a, de modo anlogo, substituindo S por , e da (q
1
, ).
3 simular a produo A bB : o (q
1
, b, A) = { (q
1
, B)}.
4 simular a produo B b : o (q
1
, b, B) = { (q
1
, )}.
5 completar a derivao quando aparece # no topo da pilha: o (q
1
, , #) = { (q
f
, #)}.





Figura 7.4.3. O NPDA do exemplo 7.4.1 (notao JFLAP).
q
1
q
f

, # ; #
b, A ; B
q
0

, # ; S#
a, S ; SA
a, S ;
b, B ;
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
265
Qual a linguagem do NPDA ? L (G) = { a
n
b
2(n-1)
: n > 1}.
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 q
0
pode ser eliminado, ficando o autmato no-determinstico.
- passa a ser aceite





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:
o (q
0
, , #) = { (q
0
,S$)}
E agora comea-se com a gramtica de Greibach.




Figura 7.4.5. NPDA com dois estados para uma linguagem sem .
q
1

q
f

, # ; #
a, A ; BA
, # ; #S
a, S ; B
a, S ; A
a, A ; BB
a, B ;
(Notao DEM)
q
1

q
f

, $ ; #
a, A ; BA
, # ; $S
a, S ; B
a, S ; A
a, A ; BB
a, B ;
(Notao DEM)
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
266
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.
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
267

Definio 7.5.1. Autmato de pilha determinstico.
Um autmato de pilha M = (Q, E, I,o, q
0
, z
0
, 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 e Q, ae E {} a b e I,
1. o (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 o (q, , b) no vazia, ento o (q, c, b) deve ser vazio para todo o c e E:
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 = { a
n

b
n
: n> 1 }
Vejamos se ela livre de contexto determinstica.

O PDA M = ({q
0
, q
1
, q
2
}, {a, b}, {#,1}, o, q
0
, #, {q
f
}) com

o (q
0
, a, # ) = {(q
1
, 1#)} (inicia a contagem dos as)
o (q
1
, a, 1 ) = {(q
1
, 11)}, (conta os as )
o (q
1
, b, 1 ) = {(q
2
, )}, (detecta o primeiro b)
o (q
2
, b, 1 ) = {(q
2
, )}, (conta os bs)
o (q
2
, , # ) = {(q
f
, )} ( aceita se n as = n bs)
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
268
aceita aquela linguagem. Logo ela determinstica (e livre de contexto, como j se sabe).



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.



Figura 7.5.2. PDA que aceita a cadeia vazia.
ou ainda a Figura 7.5.3.




Figura 7.5.3. PDA equivalente ao da Figura anterior, com um s estado aceitador: chegando a
q
2
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:
q
1

q
f

b, 1 ;
q
0

a, # ;1#
b ,1 ;
, # ;
q
2

a, 1 ; 11
q
1

q
f

b, 1 ;
q
0

a, # ; 1#
b ,1 ;
, # ;
q
2

a, 1 ; 11

q
1
q
f

b, 1 ;
a, # ;1#
b ,1 ;
, # ;
q
2

a, 1 ; 11
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
269
- 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 o 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 -
o uma funo total o no necessariamente uma funo total
h equivalncia entre os determinsticos e
os no determinsticos
no h equivalncia entre os
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.

Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
270




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.




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.


q
1

q
f

a, # ; #
a, # ; #
q
0

b, # ; #
b ,# ;#
a, # ; #
b, #;#
q
1

q
f

a
a
q
0

b
b
a
b
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
271
Exemplo 7.6.1.
Desenhar o grafo do NPDA da linguagem L = {a
n
b
m
: 0 s n s m , m > 2 } (Taylor, 541). Este
problema um exemplo implementado no Deus Ex Mquina ficheiro Example 10.3.2 na
directoria dos Pushdown Automata.




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.



q
1
q
f

b, # ; #
a, 0 ; 00
a,#; #0
q
0

b, # ; #
b, 0 ;
b, 0 ;
b, # ; #
Teoria da Computao Cap.7 Autmatos de Pilha
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
272

Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
273



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 298


Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
274


Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
275
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 e L com |w| > m se pode decompor em
w = uvxyz
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
276
com
|vxy| s m
e
|vy| > 1
tal que bombeando os segmentos v e y se obtm cadeias de L, ou seja,
uv
i
xy
i
z e L
para todo o i = 0, 1, 2, ....
Graficamente pode ilustrar-se pela figura seguinte. Note-se que |vxy| sm |v| s m e |y| s m.

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.
u
v
y
z x
w = u v x y z
u v
i
x y
i
z bombagem :
|v x y| s m |x| > 0
|u| > 0, |z| > 0, arbitrrios
Ou v ou y no vazia (uma delas pode s-lo)
O mesmo
nmer o
de vol t as
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
277
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 e L, o comprimento da sua derivao (nmero de produes necessrias para a
obter) ser por isso de pelo menos n =| w |/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



w
k k k k k k k
2 1 3 4 5 6 n
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
278







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 e 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 = uv
2
xy
2
z e L .

S
u z
A
v
y A
x
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
279










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
uv
i
xy
i
z e 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|sm , 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.
S
u z A
v
y
A
x
A
v
y
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
280
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|s m
- qualquer decomposio uvxyz produz, pela
bombagem de v e y, |vxy|s m
- todas cadeias pertencentes a L
i > 0, uv
i
xy
i
z e L
- (pelo menos) uma cadeia que no pertence
linguagem
- i > 0, uv
i
xy
i
z e L

Exemplo 8.2.1.1.
Seja L={a
n
b
2n
c
n
, 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.

Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
281











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| s m
Indica um i que bombeie para fora
a a a a a a a b b b b b b b b b b b b b b c c c c c c c
Figura 8.2.1.5 necessrio tentar todas as localizaes possveis, ao longo da cadeia de teste,
das partes bombeadas.
m as 2m bs m cs
v x y
bombeia c
bombeia as
v x y
v x y
v x y
v x y
bombeia as e bs
bombeia bs
bombeia bs e cs
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
282
Exemplo 8.2.1.2
L= {a
n
b
p
c
q
, 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 Jogador 2
Define a linguagem:
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
aaaaaabbbbbcccccc
no pertence a L (p<q)


Perde, em qualquer decomposio com
|vxy|s 6
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
aaaaaaaabbbbbbcccccccc
no pertence a L (p<q)
Perde, em qualquer decomposio com
|vxy|s 8
Para outros valores de m, seguindo a mesma estratgia, chega-se mesma concluso: no
existe um m que verifique o Lema.
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
283
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 = {a
n
b
n
c
p
d
p
e
p
, n > 2, p > 1}, em E= {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.

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.
Linguagens que verificam o
Lema Livre de Contexto
Linguagens
Livres de
Contexto
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
284
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 e L, com |w| > m, se pode decompor em
w = uvxyz
com
|uvyz| s m
|vy| > 1
de modo que bombeando simultaneamente v e y se obtm
uv
i
xy
i
z e 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.


Figura 8.2.2.1 Lema de bombagem para linguagens lineares.
u
v
y
z x
w = u v x y z
|u v y z| s m
x > 0
|u v | s m |y z| sm
|vy| > 1
|y z| s m
|u v | s m
O mesmo
nmer o
de vol t as
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
285
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.







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| s m (mesmo que o m tenha que ser grande, limitado).
Da figura poderemos escrever a sequncia de derivaes
S
u z A
v y A
x
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
286
S
*
uAz
*
uvAyz
*
uvxyz uvxyz e 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











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 = uv
2
xy
2
z e L .
Continuando o processo, conclui-se que uv
i
xy
i
z e L, para qualquer i.
S
u z A
v y
A
x
A
v y
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
287
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={a
n
b
2n
c
p
d
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 Jogador 2
Define a linguagem: a
n
b
2n
c
p
d
p
,
Escolhe um m: 5
Indica uma cadeia:
aaaaabbbbbbbbbbcccccddddd
estratgia: m as, 2m bs, m cs, m ds

Decomposio: |uvyz|s5
uvxyz= |aa|a|aabbbbbbbbbbcccccddd|d|d|
Indica um i que bombeie para fora: i = 0
aaaabbbbbbbbbbcccccdddd
no pertence a L
Perde, em qualquer decomposio com
|uvyz|s 5
Escolhe outro m: 2
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
288
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
aaabbbbccddd
no pertence a L
Perde, em qualquer decomposio com
|uvyz|s 2
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








Figura 8.3.1. Relao entre os trs lemas e as trs famlias de linguagens em causa.
Regulares
LemaReg
Lineares
LemaLin
Livres de Contexto
LemaLC
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
289
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 ?
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
290
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 G
1
e G
2
seguintes, a que correspondem as
linguagens L
1
e L
2
:

G
1
=(V
1
, T
1
, S
1
, P
1
}
S
1
aS
1
| bA
A bB
B aC
C bbC | c
G
2
=(V
2
, T
2
, S
2
, P
2
}
S
2
0S
1
| 01L
L 1M
M 00N
P 11P | 1
Se quisermos a linguagem
L
3
=L
1
L
2

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 G
1
ou a inicializao de G
2
. Teremos assim a gramtica G
3

G
3
=(V
3
, T
3
, S
3
, P
3
}
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
291
S
3
S
1
| S
2

S
1
aS
1
| bA
S
2
0S
1
| 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
L
1
e L
2
so bem diferentes mas isso no tira qualquer coerncia gramtica G
3
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 L
1
L
2
cria-se de modo anlogo uma
gramtica G
4
do modo seguinte
G
4
=(V
4
, T
4
, S
4
, P
4
}
S
4
S
1
S
2

S
1
aS
1
| bAA
S
2
0S
2
| 01L
A bBB
B aC
C bbC | c
L 1MP
M 00N
P 11P | 1
Verifique o leitor que G
4
nunca coloca letras depois de nmeros.
c) Prova do fecho estrela e do fecho-positivo
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
292
O fecho estrela L
1
*
resulta da concatenao de sucessivas potncias de L
1
. Ora tal pode fazer-
se criando uma gramtica G
5
que tenha um ciclo em torno de S
1
, que possa ser feito um
nmero qualquer de vezes, incluindo zero vezes:
G
5
=(V
5
, T
5
, S
5
, P
5
}
S
5
S
1
S
5
| (ciclo em torno de S
1
)
S
1
aS
1
| bAA
A bBB
B aC
C bbC | c
Se eliminarmos na produo S
5
elimina-se o carcter vazio, ou seja, teremos L
1
+
.
d) prova em relao aos homomorfismos: ver Hopcroft , p.285
e) prova em relao reverso
Queremos provar que se L uma CFL, tambm o L
R

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 P
R
A abCBAab
obteremos a gramtica G
R
que gera L
R
G
R
= ( V, T, S, P R )
L
R
= L (G
R
)
Assim sendo L
R
livre de contexto (porqu?).
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
293
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={0
n
1
n
2
n
, n1}
uma linguagem no livre de contexto ( dependente de contexto).
Considerem-se agora as duas linguagens L
1
e L
2
da tabela onde tambm esto as produes de
uma sua gramtica, que so livres de contexto.
Tabela Exemplo 8.3.1.2
L
1
={0
n
1
n
2
i
, n1, i1} L
2
={0
i
1
n
2
n
, n1, i1} L
1
L
2
={0
n
1
n
2
n
, n1}
Produes:
SAB
A0A1|01 (gera 0
n
1
n
)
B2B|2 (gera 2
i
)
Produes:
SAB
A0|0 (gera 0
i
)
B1B2|12 (gera 1
n
2
n
)
Produes
???
A interseco das duas linguagens d de facto L. Por um lado em L
1
o nmero de 0s iguala o
nmero de 1s. Por outro lado em L
2
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 L
1
e L
2
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.
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
294
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 .
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
295
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,

possvel gerar um nmero infinito de cadeias:


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 ,
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.
S uAv uxAyv uxxAyv ...
*

ux
n
A y
n
v
*

ux
n
zy
n
v
*
uzv A xAy
*

S
C
B
A
Grafo de dependncias
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
296

S bAAa
A bBB
B aC
C c




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 E * ?
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.





S
C
B
A
Grafo de dependncias
Teoria da Computao Cap. 8 Propriedades das Linguagens Livres de Contexto
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
297
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.
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
299



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





Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
300
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
301
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 a
n
b
n
c
n
. 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
Um modelo abstracto de computao
Problemas resolveis e
irresolveis
Figura 9.1.1. Importncia da Mquina
de Turing. At hoje no foi ainda
inventado um computador capaz de
resolver um problema que a MT no
possa resolver. Este facto mantm ainda
vlida a tese de Church-Turing
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
302
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.







Figura 9.2.1 Componentes da Mquina de Turing
Definio 9.2.1.
Uma mquina de Turing M definida pelo septeto
M = (Q, E, I, o, q
0
, , F)
em que
Q o conjunto de estados internos da unidade de controlo
E o alfabeto de entrada
UNIDADE
DE
CONTROLO
FITA
R/W

Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
303
I o conjunto finito alfabeto da fita
o a funo de transio
q
0
o estado inicial
e I o carcter branco, smbolo especial de I
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
E = I - {}
A funo de transio em geral uma funo parcial em QI
o : QI QI {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:



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
E = { a, b }
I= { a, b, }
o: ( Q I ) ( Q I { L, R } )
e a transio
o ( q
0
, a ) = ( q
1
, b, R )
Esta transio ilustrada na figura seguinte.
estado actual unidade de
controlo

carcter de fita a ser lido no
momento
q, prximo estado da unidade de controlo

escrever na fita um novo smbolo em
substituio do presente

fazer uma movida para a direita ou para a
esquerda
R/
o
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
304





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 de 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 q
0
) com alguma coisa j escrita na fita.
Executa depois uma sequncia de operaes, uma computao, definidas pela funo o.
Como o uma funo parcial, pode chegar a uma configurao para a qual no est
definida 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 = {q
0
, q
1
}
E = {a, b}
I = {a, b, }
F = {q
1
}
a b c
q
0

b b c
q
1

Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
305
e
o (q
0
, a) = (q
0
, b, R)
o (q
0
, b) = (q
0
, a, R)
o (q
0
, ) = (q
0
, , R)














Figura 9.2.4. Movidas do exemplo 9.2.2
No fim obtm-se o seguinte contedo da fita

Se para a mesma mquina a funo de transio for
o (q
0
, a) = (q
0
, a, R)
b b a a a b
a
q
3

b b b a
q
0
b a b b b a
q
0
o (q
0
, a) = (q
0
, b, R)
b b b b b a
q
0
b b a b b a
q
0
o (q
0
, b) = (q
0
, a, R)
b b a a b a
q
0
b b a a a a
q
0
o (q
0
, b) = (q
0
, a, R)
b b a a a b
q
0

b b a a a b
q
0

o (q
0
, ) = (q
0
, , R)
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
306
o (q
0
, b) = (q
1
, b, R)
o (q
0
, ) = (q
0
, , R)
o (q
1
, a) = (q
0
, b, L)
o (q
1
, b) = (q
0
, b, L)
o (q
1
, ) = (q
0
, , L)
obtm-se um funcionamento em ciclo infinito, como se pode ver para a cadeia aabbba:










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 o 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
a a b b b a
q
0
q
0
q
0
o (q
0
, a) = (q
0
, a, R)
a a b b b a
q
0
q
1
o (q
0
, b) = (q
1
, b, R)
o (q
1
, b) = (q
0
, b, L)
a a b b b a
q
1
q
0
a a b b b a
q
0
q
1
o (q
0
, b) = (q
1
, b, R)
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
307
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
x
1
qx
2
ou
a
1
a
2
...a
k-1
qa
k
a
k+1
...a
n
correspondente figura seguinte. A cabea aponta para a clula que contm o smbolo que
segue q, i.e., a
k
.




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
a
1
a
2

a
k
.

a
n
q

x
1
x
2
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
308
configurao (k) | configurao (k+1)
Por exemplo para a transio
o (q
1
, c) = (q
2
, e, R)
em termos de configuraes escreve-se, admitindo que na fita temos por exemplo abcd e que
a cabea aponta para c,
abq
1
cd | abeq
2
d






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, E, I, o, q
0
, , F) uma MT.
Ento qualquer cadeia a
1
a
2
.....a
k-1
q
1
a
k
a
k+1
...a
n
com a
i
e I e q
1
e Q, uma descrio
instantnea de M.
possvel uma movida
a
1
a
2
.....a
k-1
q
1
a
k
a
k+1
...a
n
| a
1
a
2
.....a
k-1
bq
2
a
k+1
...a
n

se e s se existir a transio
configurao (k) | configurao (k+1)
a b c d
q
1
a b e d
q
2
o (q
1
, c) = (q
2
, e, R) abq
1
cd | abeq
2
d
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
309
o (q
1
, a
k
) = (q
2
, b, R)
possvel uma movida
a
1
a
2
.....a
k-1
q
1
a
k
a
k+1
...a
n
| a
1
a
2
.....q
2
a
k-1
ba
k+1
...a
n

se e s se existir a transio
o (q
1
, a
k
) = (q
2
, b, L)
Diz-se que M parou partindo de alguma configurao inicial x
1
q
i
x
2
se
x
1
q
i
x
2

-
,y
1
q
j
ay
2
para algum q
j
e algum a, para os quais o (q
j
, 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
x
1
qx
2

-
,
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 o: ( Q I ) ( Q I { L, R } ) i.e. o (q
0
, b) = (q
1
, b, R)
DEM e Taylor o : ( Q I ) (I {L, R }) Q i.e. o (q
0
, ) = (R, q)
So necessrias, no DEM, mais instrues para a mesma funcionalidade : primeiro escreve,
e depois desloca-se. Usaremos preferencialmente a do JFLAP.
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
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
310
- pra lendo o carcter a.






Figura 9.3.1a Movidas e grafo no JFLAP da MT do Exemplo 9.3.1
No DEM teremos um grafo diferente:












a
q
1
a b
q
f

q
0
q
0
q
1

; a, R
q
1

q
f

; b, L
; b, L
q
0
q
1

; a, R
q
f

a
q
2
a b
q
3
a b
q
f

q
0
a
q
1
DEM
q
0

q
1

: a
q
2

q
3

a : R
: b
q
f

b : L
Figura 9.3.1b.
Movidas e
grafo no DEM
do exemplo
9.3.1
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
311
Exemplo 9.3.2.
Para uma MT com a fita inicial vazia

que faz a MT da Figura seguinte ?



Figura 9.3 2a. MT do exemplo 9.3.2, no JFLAP.





Figura 9.3.2b. MT do exemplo 9.3.2 no DEM
Estando no estado inicial q
0
lendo branco, escreve a, passa ao estado q
1
e vai para a direita,
ficando assim a apontar para branco. Estando em q
2
apontando para branco, escreve b , passa
a q
0
desloca-se para a esquerda. Agora est em q
0
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:

q
0
q
1
q
2
q
3

: a a : R : b
b : R
q
0
q
1

; a, R
; b, R
JFLAP
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
312
- 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 q
0
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, E, I, o, q
0
, , F) uma MT. Ento a linguagem aceite por M
L(M) = { w e E
+
: q
0
w
-
,x
1
q
f
x
2
para algum q
f
e F e x
1
, x
2
e I* }
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 E = {0, 1} e nele a linguagem L= L(00*), composta por todas as cadeias
com um ou mais zeros (sem 1s).
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
313
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
o (q
0
, 0) = (q
0
, 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 q
0
, 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, q
f
:
o (q
0
, ) = (q
f
, , 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: o: ( Q I ) ( Q I { L, R } ) i.e. o (q
0
, b) = (q
1
, b, R)
Taylor: o : ( Q I ) (I {L, R }) Q i.e. o (q
0
, ) = (R, q)
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
314
O que obriga criao de um estado adicional no DEM.
Por isso o diagrama de estados seguindo Linz e o JFLAP ser




Figura 9.4.1. Grafo JFLAP da MT do exemplo 9.4.1.
Seguindo Taylor e o DEM teremos que criar mais estados:
o (q
0
, 0) = (q
1
, 0)
o (q
1
, 0) = (q
1
, R)
o (q
1
, ) = (q
f
, )
Figura 9.4.2. Grafo DEM da MT do exemplo 9.4.1
Note-se que o uma funo parcial. No definida por exemplo o (q
0
, 1). Se aparece um
1, no estado q
0
, a MT pra (halt) para sempre, indicando que w no aceite, a menos que q
0

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 q
0
e por isso cria-se um outro
estado q
f
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 n
a
=n
b

Seja o alfabeto E={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.
q
0
q
f

: : R
0 : 0 : R
q
0

q
1
1
q
f

0 : 0
0 : R
:
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
315
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 **a*a*bb ****a**b ********
bbabaa *b*baa ***b*a ******
aabbbabb *a*bbabb ****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 E = {a, b}, I = {a, b, }, F = {q
f
}, Q = {q
0
, q
1,
q
f
}

o (q
0
, ) = (q
0
, , R),
o (q
0
, b) = (q
1
, b, R),
o (q
1
, a) = (q
1
, a, R),
o (q
1
,b) = (q
1
, b, R),
o (q
1
, ) = (q
f
, , R).
Que linguagem aceita ?
Analisando as transies, verifica-se que em q
0
com b passa a q
1
(e em q
0
com a pra). Em q
1

l as e bs por qualquer ordem e em qualquer nmero, avanando at ao fim da cadeia. Por
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
316
isso a linguagem aceita pela MT L= L[b(a+b)*], todas as cadeias que se iniciam por b em
{a,b}.

















Exemplo 9.4.4
Construir no JFLAP uma MT que aceite a linguagem L = { a
n
b
m
: 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.
a : *
q
0

q
1


q
2

q
4

q
5

q
6

q
7


* : R
* : R
* : R
a : R
b : *
: R
* : L
a : L
b : L
: L
* : R

b : R
* : R
: L
* :
: R
b : *
a : *,R
q
0

q
1

q
2

q
3

q
4

q
5

q
f

* : *, R
* : *, R
a : a, R
b : *, L
: , R
* : *, L
a :a, L
b :b, L
:

,L
a : *, L
b : b, R
* :*, R
: , L
* : , L
: ,L
JFLAP
DEM
Figura 9.4.3. MT
do exemplo 9.4.2.
n
a
=n
b
no JFLAP e
no DEM.
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
317
- 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 = { a
n
b
n
a
n
b
n
: 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.
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
318








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 = { a
n
b
2n
: 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).
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
319
Exemplo 9.4.7 Para L = { a
n
b
m
a
n+m
: n > 0, m>1 } 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
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
320

w= f (w),
e portanto com sada

w , desde que se verifique que partindo de w no estado inicial aps a


computao de f chega a um estado final q
f

q
0
w
-
,
M
q
f

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, E, I, o, q
0
, , F) tal que
q
0
w
-
,
M
q
f
f (w), q
f
e F
para toda a we 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 Turing-
computveis. 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 adio
1 1 1 1 1 0 1 1 1 1
x=5 x=4
Figura 9.5.1.
Preparao
da fita para a
adio
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
321
e que no fim da computao o resultado deve ser apresentado em unrio (como uma sequncia
de 1s)


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.



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
1 1 1 1 1 1 1 1 1 0
x+ y =9
1 1
q
0
1 1 1 1
q
f

Figura 9.5.3
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
322
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


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 ?



Escreve sucessivamente abababababab.......

q
0
q
1

: a
a : R
q
0
q
1
q
2
q
3

: a a : R : b
b : R
Figura 9.5.4
Figura 9.5.5
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
323
Exemplo 9.5.6.
Construa uma MT que decida a linguagem em E={a,b} composta por todas as cadeias que
contenham a subcadeia baa (isto , que diga se sim ou no uma cadeia pertence linguagem).

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.6
Figura 9.5.7
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
324
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}.

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

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.




f (x, y)
Somadora
Apagadora
Comparadora
x >
x < y
x, y
f (x, y) =
x + y , se x > y
0, se x< y
Figura 9.5.8. MT
que conta os as
em cadeias de
{m,a,r,g,a,r,i,d,a}
Figura 9.6.1.
Implementao
da funo do
exemplo 9.6.1.
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
325
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 e D na sua fita
- pra (halt) com uma resposta correcta para f (d) e R na sua fita. Requer-se que
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
326
q
0
d
-
,
M
q
f
f (d), q
f
e F
para todo o d e 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=w
R
, odd palindromes
Ex2-6-2 nondeterm accepter a**(2n)+a**(3n), n>0
Ex2-6-3 nondeterm accepter a**(n**2) n>0
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
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
327
N^n n
n
, 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 n
3

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
Teoria da Computao Cap. 9 Mquinas de Turing
LEI/DEIFCTUC/2011/@ADC Documento de trabalho
328
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.

Anda mungkin juga menyukai