Documente Academic
Documente Profesional
Documente Cultură
TEORIA DA COMPUTAO
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.
ndice Geral
43
115
153
179
213
245
273
299
Teoria da Computao
CAPTULO 1
1.1. Introduo
10
1.3 Gramticas
17
1.4 Autmatos
30
37
Bibliografia
42
Anexo
42
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
1.1. Introduo
As cincias da computao, numa interpretao genrica, tm a ver com todos os aspectos
relacionados com os computadores e o seu funcionamento. H no entanto trs temas centrais
que so delas estruturantes: autmatos, computabilidade, complexidade. As trs visam dar
resposta questo primeira - quais so as capacidades e as limitaes fundamentais dos
computadores? O que se pode computar? Estas que tm ocupado intensamente os cientistas da
computao desde os anos 30 do sculo passado, quando a noo e o significado de
computao surgiu no panorama cientfico.
Nesta disciplina iremos abordar aqueles trs temas. Comearemos pelos autmatos e
veremos depois os elementos introdutrios fundamentais da computabilidade e da
complexidade.
A teoria dos autmatos compe o edifcio formal que sustenta solidamente todo o
desenvolvimento de processadores de texto, de compiladores e de hardware. Suporta tambm
(atravs das gramticas associadas aos autmatos) todo o desenvolvimento das linguagens de
programao. Assim linguagens, gramticas e autmatos so, com veremos, as trs faces de
um mesmo prisma. Vejamos formalmente em que consistem.
1.2.Linguagens formais
Tal como as linguagens humanas, as linguagens formais (assim chamadas por serem definidas
por um conjunto de formalismos matemticos abstractos) so faladas por autmatos, isto ,
um autmato compreende, e sabe interpretar uma dada linguagem, de uma forma que veremos
posteriormente. alis interessante constatar que os estudiosos das linguagens humanas (os
linguistas) deram uma contribuio muito importante para o desenvolvimento da teoria das
linguagens formais. Por exemplo Chomsky, de que falaremos no Captulo 6, um linguista.
Uma linguagem exprime-se atravs de smbolos de uma certa forma (tal como as
linguagens humanas ao longo da histria usaram smbolos diversos, desde os hieroglficos at
aos caracteres latinos, passando pelos chineses, pelos gregos e pelos rabes). Poderemos
definir formalmente esta realidade.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
Fazendo a concatenao de duas cadeias w e v obtm-se uma terceira cadeia que por
isso se chama a concatenao de w e v.
Pode-se obter fazendo a concatenao direita (v direita de w), por exemplo sendo
w= a1a2a3 ....an
v= b1b2b3bn
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
wR =an...a3a2a1
O nmero de caracteres de uma cadeia pode ser qualquer, sendo por isso umas longas
e outras curtas. Chama-se comprimento de uma cadeia, anotando-se pelo mdulo, |w|, o
nmero de posies, ou de casas, ocupadas pelos caracteres na cadeia. Por exemplo 011011
tem comprimento 6. Por vezes tambm se define comprimento como o nmero de caracteres
da cadeia, o que est certo se se inclurem as repeties nesse nmero. De outro modo a
cadeia anterior tem 2 caracteres (0 e 1) que, repetidos, ocupam 6 posies.
Se uma cadeia no tem qualquer carcter (note-se que o singular de caracteres
carcter, e no carater), ter 0 caracteres, sendo por isso vazia (um conjunto vazio), e denotase por (alguns autores denotam por ) . O seu comprimento ser nulo, ||=0, e pode
escolher-se de qualquer alfabeto.
Se concatenarmos uma cadeia vazia com outra cadeia w qualquer, obtm-se
w = w = w, w,
para todo e qualquer w, tal como a unio de um conjunto com o conjunto vazio d o
conjunto original, qualquer que ele seja.
Certas cadeias tm formas especiais. Por exemplo abcdedcba ou abcdeedcba podem
ler-se igualmente da frente para trs ou de trs para a frente. Elas tm um ponto de simetria.
Em linguagem corrente chamam-se capicuas e mais formalmente chamam-se palndromos e
so tais que w = wR. Voltaremos a falar deles.
Subcadeia de uma cadeia w qualquer cadeia composta por caracteres sucessivos de
w . Se dividirmos qualquer cadeia w em duas partes u e v, tal que w=uv, diz-se que u um
prefixo e v um sufixo de w.
Se por exemplo
w=abbab
Poderemos definir os seguintes prefixos de w:
{, a, ab, abb, abba, abbab}
e os seguintes sufixos de w:
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
+ =*-{}
fcil de ver, pela definio, que quer * quer + so sempre conjuntos infinitos,
mesmo quando o alfabeto finito.
Chegamos agora finalmente definio de linguagem, um dos conceitos chave da
computao:
Definio 1.2.1. Linguagem : dado um alfabeto qualquer , linguagem L qualquer
subconjunto de *.
Assim sendo, num alfabeto qualquer podem-se definir mltiplas linguagens. Elas tero
propriedades diferentes que lhes do caractersticas bem distintas, que estudaremos na ocasio
oportuna. Uma linguagem num alfabeto no precisa de ter todos os caracteres desse alfabeto,
pode ter apenas uma parte deles.
Define-se frase (ou sentena) como qualquer cadeia na linguagem formal L
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
10
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
11
Teoria da Computao
Documento de trabalho
12
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
13
Teoria da Computao
L1 ={0,1}
L1 ={0,11}
L2 ={0, 11}.{0, 11}={00,011,110,1111}
L3={0, 11}.{0, 11}.{0,11}={00,011,110,1111}.{0,11}=
={000,0011,0110,01111,1100,11011,11110,111111}
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
14
Teoria da Computao
0={}
1=
2=
Unindo tudo vem
*={} ={}
Quanto linguagem com o carcter vazio, L={}, o seu fecho estrela L*={}.
A linguagem e a linguagem {} so as duas nicas linguagens que tm um fecho
estrela finito.
Fecho-positivo (positive closure) de uma linguagem, L+ , o conjunto de todas as
cadeias que se podem obter por concatenao da linguagem com ela prpria uma ou mais
vezes. Se L no tem , + tambm no,
L+ : L1L2L3...... = L* - {}
Exemplo: Seja
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
15
Teoria da Computao
L={anbn, n1}
Logo:
L={ab, aabb, aaabbb, aaaabbbb, ....}
L2= LL={ab, aabb, aaabbb, aaaabbbb, ...
abab, abaabb, abaaabbb, abaaaabbbb, ...
aabbab, aabbaabb, aabbaaabbb, aabbaaaabbbb, ...
........... }
Procurando uma forma compacta para L2, pode-se escrever
L2= {anbnambm, n1, m1}, n e m so independentes.
A reversa de L fcil de calcular: basta revertermos a expresso que a define:
LR={bnan, n1}
Se tivermos necessidade de escrever o complemento de L de uma forma sinttica,
como faz-lo? Trata-se de todas as cadeias que no obedeam regra de formao de L. Por
exemplo aab, baa, ababab, bababa, aaaa, aaaa, bbaab, bbbbaa, . Ser fcil encontrar uma
expresso compacta, em notao de conjuntos, que inclua todas as cadeias do complemento
de L ? Fica o desafio ao leitor.
E o fecho estrela L* ?
Nem sempre a notao de conjuntos a mais adequada para representar linguagens.
Por isso foram desenvolvidas representaes alternativas: as expresses regulares e as
gramticas. Estud-las-emos em captulos posteriores. Mas vejamos desde j algumas noes
bsicas de gramticas.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
16
Teoria da Computao
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)
(produes 2 e 3)
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
(produes 4,5,6)
17
Teoria da Computao
(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)
(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)
produo 1
produo 2
produo 7
produo 2
produo 5
produo 13
produo 26
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
18
Teoria da Computao
produo 10
produo 20
produo 29
(ii)
Chove
(iii)
Este exemplo mostra como uma frase (ou orao), conceito geral e complexo, pode ser
definida custa de elementos simples (decomposio da complexidade). Comea-se no
conceito mais complexo (frase), e reduz-se sucessivamente at se obterem os elementos
irredutveis com que se constri a lngua.
A generalizao deste princpio leva-nos s gramticas formais isto , gramticas das
linguagens formais, as linguagens dos computadores.
As linguagens formais so construes matemticas (conjuntos) que obedecem a
certas regras. Para que no haja equvocos, as gramticas formais devem ter uma estrutura
clara, coerente, completa. Por isso usam-se notao e conceitos matemticos precisos para a
sua definio e manipulao.
Definio 1.3.1. Gramtica.
Uma gramtica G definida por um quarteto
G=(V, T, S, P)
em que
V : variveis, conjunto no vazio finito de objectos,
T: smbolos terminais, conjunto no vazio finito de objectos,
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
19
Teoria da Computao
Gramticas
Linguagens
L1
G1
G2
G3
L2
G4
Figura 1.3.1 . Vrias gramticas podem produzir a mesma linguagem. Mas uma gramtica no
pode produzir duas linguagens.
As regras de produo de uma qualquer gramtica tm sempre a forma padro
x y
que se l (a cadeia) x produz (a cadeia) y .
A cadeia produtora x tem que ter qualquer coisa, no pode ser a cadeia vazia (se assim
no fosse produzir-se-ia a partir do nada, o que no teria significado). Este facto anota-se por
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
20
Teoria da Computao
x (V T)+
querendo-se dizer que a cadeia x pode ter variveis da gramtica e/ou smbolos terminais,
sem a cadeia vazia (por isso se escreve + e no *).
A cadeia produzida y, chamada o corpo da produo, pode conter variveis da
gramtica, e/ou smbolos terminais, podendo ser a cadeia vazia. Neste caso quer dizer que a
produo consiste simplesmente na anulao de x. Anota-se assim por
y (V T)*
sendo agora legtimo escrever ( * ) para admitir a possibilidade da cadeia vazia. De facto (V T)0
resulta na cadeia vazia.
A produo substitui, numa forma sentencial, a cadeia x pela cadeia y. Isto ,
w = uxv
x y,
e a regra de produo
____________
por substituio de x por y em w, obtm-se a cadeia
z = uyv
Diz-se que w produz z , ou que z produzida por w e anota-se com seta larga
w z
w e z podem variveis e/ou smbolos terminsais, dependendo do caso, como veremos.
As regras de produo podem aplicar-se por qualquer ordem e tantas vezes quantas as
necessrias. Este facto permite que com um nmero finito de produes se possa obter uma
linguagem infinita. Duas produes e um smbolo inicial so suficientes para produzir uma
linguagem infinita. Por exemplo as duas produes seguintes
S aS
S
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
21
Teoria da Computao
geram qualquer cadeia no alfabeto ={a}, incluindo a cadeia vazia. Experimente o leitor gerar
a cadeia aaa.
Ser possvel obter, com uma s produo, uma linguagem infinita? S em certas
gramticas especiais que estudaremos no Captulo 12.
Entre uma forma sentencial inicial w1 e uma final wn poderemos passar por um
grande nmero de formas sentencias intermdias, w1, w2, , ou seja,
w1 w2 wn
Diz-se que w1 produz wn ou, em escrita mais compacta (mais prtica), usando (*)
para significar uma sequncia de produes simples,
w1
wn
w1 ).
As regras de produo podem ser aplicadas numa ordem qualquer. Por cada ordem,
produz-se uma cadeia terminal. Ordens de derivao diferentes podem dar cadeias terminais
iguais ou diferentes, conforme a gramtica concreta.
O conjunto de todas as cadeias terminais que se podem obter por uma gramtica,
compem a linguagem gerada por essa gramtica. Exprime-se pela expresso L(G),
linguagem L da gramtica G. Em termos mais formais, dada a gramtica definida pelo
quarteto
G=(V, T, S, P)
a linguagem da gramtica (ou gerada pela gramtica) composta por todas as cadeias
terminais (sentenas, apenas com smbolos de T, ou eventualmente ) que se podem gerar a
partir de S com as produes de P, por qualquer ordem qualquer nmero de vezes, ou seja,
L(G) = {wT*: S
w}
Documento de trabalho
22
Teoria da Computao
S w 1 w2 ... wn w
uma derivao da cadeia w. A cadeia w deve ter apenas smbolos terminais caracteres do
alfabeto da linguagem, incluindo eventualmente .
Qualquer derivao da gramtica comea sempre por S, que por isso tambm
chamado o axioma da gramtica. Desde S at w passa-se por diversas expresses que tm
variveis da gramtica ou uma mistura de variveis e de smbolos terminais. A essas
expresses chama-se formas sentenciais da derivao: so as cadeias S, w1, w2, ..., wn .
Exemplo 1.3.2.
Seja a gramtica definida pelo quarteto
G =({S}, {a,b}, S, P)
Comparando com a definio 1, identificam-se os elementos do quarteto:
Conjunto V das variveis: S
Smbolos terminais: a,b , as cadeias terminais tero apenas estes smbolos
Varivel de inicializao: S
As produes P dadas por
P1: S aSb : partindo do smbolo inicial S, coloca-se-lhe um a antes e
um b depois.
P2: S : o smbolo S pode ser substitudo pela cadeia vazia (isto ,
por nada).
Uma derivao pode seguir o seguinte percurso:
S aSb
aplicando a
produo P1
aaSbb
produo P1
aaaSbbb
produo P1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
23
Teoria da Computao
...
pode-se continuar um nmero qualquer de vezes, at ao infinito. Vo-se obtendo sucessivas
formas sentenciais.
Em qualquer altura se pode aplicar a produo P2, substituindo S por , ou seja por
nada. Nessa altura obtm-se uma frase da linguagem. Assim,
ao fim da 1 produo obtm-se ab
ao fim da 2 produo obtm-se aabb
etc.,
ao fim da nsima produo obtmse aaa....abbb...b = anbn
Se aplicarmos primeiro a produo P2 obtm-se a cadeia vazia e no se pode
prosseguir.
Conclui-se assim que esta gramtica produz a linguagem composta por cadeias em que
a primeira metade s tem as e a segunda metade s tem bs, ou seja, de uma forma
matematicamente elegante, usando as noes que vimos anteriormente,
L(G) = {anbn, n0}
Este resultado to evidente que se pode dizer que no carece de demonstrao. Mas
pode-se demonstrar formalmente, usando uma das tcnicas de prova conhecidas. Como se
trata de demonstrar uma frmula para um nmero infinito de casos, o mais natural ser usar a
prova por induo, associada noo de recursividade.
O caso , correspondente a n =0 tem que ser tratado parte. Demonstra-se que ele se
obtm aplicando a produo P2 a partir de S.
Para os outros casos faamos a demonstrao por recursividade da produo P1 e
induo.
Queremos provar que qualquer que seja n 1, todas as formas sentenciais so da forma
wn = anSbn
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
24
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
25
Teoria da Computao
Exemplo 1.3.3:
Encontrar uma gramtica que gere a linguagem
L={an+1bn, n0}
Esta linguagem parecida com a do exemplo anterior, com a diferena de que
necessrio gerar um a adicional esquerda de b. Pode-se simplesmente ger-lo em primeiro
lugar, aplicar depois regras de produo como no caso anterior:
P1:
S aS
P2:
S aSb
P3:
S aA
P2:
A aAb
P3:
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
26
Teoria da Computao
G=({A}, {a,b}, S, P)
sendo P composto pelas trs produes P1, P2 e P3.
Para demonstrar que uma dada linguagem gerada por uma certa gramtica, tem que
se mostrar que:
(i) por um lado toda a cadeia w L pode ser derivada a partir de S usando as produes P da
gramtica ou seja
(ii) por outro lado qualquer cadeia gerada pela gramtica G pertence linguagem L.
Nem sempre fcil fazer as duas demonstraes, sobretudo a primeira. Ver por
exemplo em Linz, exemplo 1.13. Recorre-se frequentemente prova por induo.
Uma linguagem pode ser gerada por muitas gramticas, que por isso se dizem
equivalentes ,
G1 e G2 so gramticas equivalentes se L(G1)=L(G2)
Na Fig. 1.1 as gramticas G2, G3 e G4 so equivalentes.
Os palndromos so cadeias que tm interesse especial para o estudo de gramticas e
autmatos. Vejamos mais em detalhe como se podem definir e gerar.
Definio formal de palndromos ( PAL) sobre um alfabeto
Seja PAL a linguagem constituda por todos os palndromos (capicuas) sobre um dado
alfabeto. Pode-se definir pelas trs regras seguintes
1. O carcter vazio simtrico, logo pertence aos palndromos.
PAL
2. Qualquer carcter isolado simtrico, logo um palndromo
Para todo o a, a PAL,
3. Se tivermos uma cadeia simtrica e lhe adicionarmos o mesmo carcter no princpio e no
fim, resulta uma cadeia simtrica,.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
27
Teoria da Computao
awa PAL
Uma cadeia s pertence a PAL se puder ser gerada por estas 3 regras. Por outro lado se
uma cadeia um palndromo, ento ela pode ser gerada por aquelas trs regras, aplicando-as
as vezes necessrias pela ordem conveniente.
Exemplo 1.3.4
= { a, b }
Seja o alfabeto
awa PAL
bwb PAL
regra 2
aba PAL,
regra 3
babab PAL
regra 3
abababa PAL
regra 3
LEI/DEI/FCTUC/2009/@ADC
(regra 1)
Documento de trabalho
28
Teoria da Computao
2 P2: S a
(regra 2)
P3: S b
(regra 2)
3 P4: S aSa
(regra 3)
P5: S bSb
(regra 3)
1.4.Autmatos
Os autmatos finitos so modelos abstractos de muitos dispositivos de hardware e de
software. Aplicam-se nomeadamente em (Hopcroft& col)
1- software para o projecto e o teste de circuitos digitais.
2- Analisadores lexicais dos compiladores (que verificam se uma palavra, por
exemplo um identificador, est bem escrita num programa).
3- Software para busca de texto em ficheiros, na web, etc.
4- Software de verificao de sistemas que tm um nmero finito de estados
distintos, tais como protocolos de comunicao, protocolos de segurana, etc.
Muitos componentes e sistemas digitais podem estar num entre um nmero finito de
estados, e por isso a noo de estado central num autmato a eles associado. O estado
permite lembrar o passado relevante do sistema (ele chegou l aps um certo nmero de
transies, que so o seu passado). Se o nmero de estados de um sistema finito, poderemos
represent-lo com uma quantidade limitada de recursos.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
29
Teoria da Computao
Figura 1.4.1. Os dois estados do autmato que representa o interruptor on-off. F-fechado, Aaberto.
Representando por arestas de um grafo as aces de pressionar ( Press) teremos a Fig. 1.4.2
Press
Press
Press
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
30
Teoria da Computao
As etiquetas das arestas representam a aco exterior sobre o sistema (neste caso
pressionar o interruptor) e as arestas a evoluo do sistema em consequncia dessa aco, que
sempre uma transio entre dois estados (ou, como veremos, e generalizando a noo de
transio, de um estado para ele prprio).
Considere-se agora o autmato da figura 1.4.4.
p
Figura 1.4.4. Um autmato finito que transita de estado pela entrada de letras.
Inicializa-se no estado 1, recebe do exterior (l) a letra p e passa ao esto 2, depois com as
letras a e i passa sucessivamente aos estados trs e 4.
Poderamos nomear os estados de um modo mais sugestivo, tal que a sua etiqueta nos
sintetizasse o que se passou at a. Teramos por exemplo a Fig. 1.4.5.
pa
pai
Figura 1.4.5. O autmato anterior da Fig 1.4.4 com nova etiquetagem dos estados.mais
sugestiva.
Pode afirmar-se que o autmato de 4 estados capaz de reconhecer a palavra pai: se
chegou ao estado 4, ela pareceu-lhe, caso contrrio nunca chega ao estado 4. Por esta razo
diz-se que o autmato um aceitador da palavra pai. Para assinalar este facto o estado 4
desenha-se com uma dupla circunferncia, como na figura 1.4.6.
p
a
p
i
pa
pai
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
31
Teoria da Computao
Sensor
Fronta
Sensor
Rectag
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
32
Teoria da Computao
PR
Carcter
00
01
10
11
a
00
b
01
c
10
d
11
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
33
Teoria da Computao
b,c,d
c
F
a
Figura 1.4.9. O autmato finito que representa o sistema de controlo de abertura da porta .
Como que o controlador fecha e abre a porta? Enviando um sinal a um actuador
mecnico. Poderemos assim considerar que o autmato tem uma sada que pode ter dois
valores: 1 para abrir, 0 para fechar. Poderemos introduzir essa informao colocando sob a
letra do estado o valor lgico correspondente da sada, como na figura seguinte
b,d,a
b,c,d
c
A/1
F/0
a
Figura 1.4.10. O autmato anterior com a representao da sada. Veremos no Cap. 2 que este
autmato se chama por isso de Mquina de Moore.
Depois deste dois exemplos muito simples, estamos em condies de definir um
autmato mais detalhadamente.
Um autmato genrico tem os seguintes componentes:
- um ficheiro de entrada, composto por uma cadeia num alfabeto
- um mecanismo para leitura do ficheiro de entrada de modo que
l a cadeia de entrada da esquerda para a direita, um carcter de cada vez,
detecta o fim da cadeia
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
34
Teoria da Computao
Ficheiro de entrada
Sk
Unidade de Controlo
qk
Ficheiro de sada
mk
M
e
m
r
i
a
yk
Documento de trabalho
35
Teoria da Computao
entrada. No prximo instante de tempo, o estado interno do autmato vai ser determinado
pelo estado actual, pelo smbolo lido entrada e pelo contedo da memria, mk. Essa
dependncia definida pela funo de transio de estado f, que depende por isso do estado
actual, da entrada actual e do contedo actual da memria, ou seja,
qk+1 = f(qk, sk, mk)
Entre dois instantes do tempo sucessivos pode produzir-se uma sada ou pode alterarse o contedo da memria.
Chama-se configurao do autmato ao conjunto composto por
- o estado interno da unidade de controlo,
- o ficheiro de entrada e
- o contedo da memria.
Chama-se um passo transio do autmato de uma configurao para a configurao
seguinte.
Todos ao autmatos que estudaremos se enquadram nesta descrio genrica. Os
diversos tipos que estudaremos distinguem-se por
i) a forma de produzir a sada , sendo
aceitadores se reconhecem ou no a cadeia de entrada; no tm sada informam pelo
estado final em que terminam a leitura da entrada
transdutores se produzem cadeias de caracteres na sada com alguma utilidade
ii) a natureza da memria temporria (o factor mais importante)sendo
autmatos finitos se no sem tm memria temporrio ou
autmatos de pilha se tm uma memria em pilha LIFO (em ingls pushdown
automata, de empurrar (a pilha) para baixo ),
mquinas de Turing se tm a memria em fita, de dimenso infinita, que pode
ser lida e alterada em qualquer ordem
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
36
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
37
Teoria da Computao
Este tipo de computao parece nada ter ver, partida, com a computao do valor de
funes. Trata-se do reconhecimento, ou classificao, de cadeias de smbolos. Como as
cadeias de smbolos formam linguagens, este tipo de computao chama-se por isso
reconhecimento de linguagens, o segundo paradigma da computao.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
38
Teoria da Computao
Clculo de
funes f(n)
Reconhecimento
de Linguagens
Transduo de
cadeias
Vejamos como.
i) Qualquer caso de computao de uma funo pode ser reduzido a uma instncia do
reconhecimento de uma linguagem.
Exemplo 1.5.1. Seja a funo
f(n) = m , m o n-simo nmero primo
Tabela 1.5.1. Funo n-simo nmero primo
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
39
Teoria da Computao
f(n)
11
13
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
40
Teoria da Computao
( n)
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
41
Teoria da Computao
Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
42
Teoria da Computao
CAPTULO 2
AUTMATOS FINITOS
2.1. Introduo
45
2.2.Aceitadores determinsticos
46
59
75
83
85
97
105
107
Mquinas de Mealy
108
Mquinas de More
109
Bibliogafia
112
112
JFLAP
Deus ex-mquina
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
43
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
44
Teoria da Computao
2.1. Introduo
No Cap.1 estudmos as noes bsicas de linguagens, gramticas e autmatos. Podem-se
definir muitas linguagens a partir de um mesmo alfabeto, conforma as regras particulares de
combinao dos caracteres do alfabeto.
Por exemplo a partir do alfabeto = {a, b} e usando a notao de conjuntos poderemos
definir as linguagens L1 = { anbm | n,m >= 0 }a que pertencem as cadeias : ,aabbbbb, aaaa,
bbbb, ou a linguagem L2 = { anbn | n >= 0 } a que pertencem as cadeias: ,ab,aabb,
aaabbb, aaaabbbb, ou ainda L3 = {a,b}* composta por qualquer cadeia de as e bs ,incluindo
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
45
Teoria da Computao
Gramticas G
Geram as cadeias de L
Autmatos
Reconhecem as cadeias
de L
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
46
Teoria da Computao
={0,1}.
1
Incio
q0
q2
q1
0
1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
47
Teoria da Computao
Note-se que em cada estado o aceitador determinstico sabe exactamente o que deve
fazer, porque tido lhe dito: de cada estado h duas arestas definindo as duas transies
possveis, uma para cada carcter do alfabeto. Essas duas transies podem ser iguais, com
acontece no estado q2. Pode-se simplificar o grafo colocando apenas uma aresta com duas
etiquetas, com o na figura seguinte.
1
0
Incio
q0
0
1
q2
q1
0,1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
48
Teoria da Computao
deterministic finite
Documento de trabalho
49
Teoria da Computao
b
2
b
b
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
50
Teoria da Computao
e a entrada
o estado
actual
actual
seguinte ser
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
51
Teoria da Computao
cadeia de entrada
q0
q2
q1
carcter de entrada
estado actual
estado seguinte,
movida,
smbolo na sada
(caso a tenha)
em
que
os
vrtices
Smbolo
(ns)
qi
tm
como
Significado
etiquetas
Estado normal
os
q0
Estado inicial
2.2.2., ao lado
qf
[*] carcter
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
Estado
aceitador (ou
final)
Aresta
52
Teoria da Computao
Exemplo 2.2.4
1
q2
q1
q0
incio
1
Figura 2.2.7 DFA do exemplo 2.2.4.
Temos um autmato com trs estados, um de cada tipo. O alfabeto do autmato =
{0,1}. Lendo com ateno as etiquetas das arestas pode-se escrever a seguinte tabela de
transies. O DFA pode-se assim definir formalmente como
M= (Q, S, , ,q0,F) com
Q = {q0,q1,q2}, = {0,1}, F = {q2} e definida pela Tabela 2.2.4.
Tabela 2.2.3. Funo de transio do exemplo 2.2.4.
Entradas
0
q0
q1
q0
q1
q2
q0
q2
q1
q0
Estados
Qual ser a linguagem aceite pelo autmato? Um bom desafio para o leitor ...
No Captulo 3 estudaremos as expresses regulares, uma tcnica de especificao de
linguagens que tem uma lgebra prpria muito adequada para deduzir a definio da
linguagem a partir de um DFA qualquer. Neste momento poderemos fazer o seguinte
procedimento heurstico:
-colocamo-nos no estado aceitador e vemos como l poderemos chegar,
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
53
Teoria da Computao
-depois andamos para trs e em cada estado vemos o mesmo. At que se consiga
visualizar mentalmente a linguagem do autmato.
Chega-se ao estado final a partir de q1 com um 0, ou seja, com (****)0.
Chega-se a q1 com um 0 depois de 1:
cadeia termine em 100, termina no estado aceitador. Se terminar em 1000 no aceita a cadeia.
Mas aceita se terminar em 10000, 1000000, ou qualquer nmero par de zeros
precedido de 1.
Poderemos definir formalmente linguagem de um autmato finito.
Definio 2.2.2a. Linguagem de um DFA
Dado um DFA qualquer, M, a linguagem L aceite (ou reconhecida) por M o conjunto
de todas as cadeias que, comeando a ser lidas no estado inicial, fazem com que o autmato
alcance um dos estados finais depois de toda a cadeia ter sido lida. Escreve-se L(M) para
dizer que L a linguagem aceite ou reconhecida por M.
Que linguagens aceitam os seguintes autmatos ?
Exmplo 2.2.5
0
q0
Incio
q1
1
Fig. 2.2.8.
0
Exemplo 2.2.6
1
1
Incio
q0
q1
0
Fig. 2.2.9.
Exemplo 2.2.7
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
54
Teoria da Computao
1
1
q0
0,1
0
q1
q2
Fig. 2.2.10
Um DFA pode ser definido pela explicitao da funo de transio e, a partir dela,
facialmente se desenha o seu grafo.
Exemplo 2.2.8
Seja o DFA M = ({q0, q1, q2}, {a,b}, , q0, {q2}) cuja funo de transio a seguinte:
(q0, a) = q1
Tabela de transies
(q0, b) = q2
(q1, a) = q0
q0
q1
q2
(q1, b) = q2
q1
q0
q2
q2
q2
q2
(q2, a) = q2
(q2, b) = q2
q0
b
q1
Fig. 2 .2.11
q2
a,b
Ser possvel simplificar este DFA, isto , encontrar um outro com menos estados que
aceite a mesma linguagem (e s a mesma) ?
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
55
Teoria da Computao
q0
q2
a,b
*: Q * Q
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
56
Teoria da Computao
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
a
q0
b
q1
q2
ab
q0
q2
a) Funo de transio
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
57
Teoria da Computao
q0
q0
b
q1
q1
a,b
a,b
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
58
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
59
Teoria da Computao
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.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
60
Teoria da Computao
0
1
I
1
LEI/DEI/FCTUC/2009/@ADC
.
1
Documento de trabalho
61
Teoria da Computao
Fica o leitor desafiado a verificar que os autmatos seguintes aceitam, ainda no alfabeto
={0,1}, as cadeias com um nmero mpar de zeros e um nmero par de zeros.
1
1
0
0
I
0
a)
b)
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
62
Teoria da Computao
No havendo mais nenhuma situao relevante para o caso, conclumos que quatro
estados sero suficientes; chamem-se PP, PI, IP, II, sendo aceitador o II.
PP
PI
IP
II
PP
PI
IP
II
0
PP
PI
1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
II
63
Teoria da Computao
agora fcil de ver que o autmato completo representado pelo grafo seguinte. O estado
inicial (zero 0s e zero 1s) PP porque zero um nmero par.
1
PP
PI
1
0
1
IP
II
Exemplo 2.3.3. Desenhar o autmato aceitador da linguagem composta por todas as cadeias
com um nmero mpar de 0s e um nmero mpar de 1s.
Se quisermos o DFA que aceita as cadeias com um nmero impar de 0s e um nmero
par de 1s (IP), basta mudar o estado aceitado no autmato anterior, obtendo-se
1
PP
PI
1
0
1
IP
II
1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
64
Teoria da Computao
PP
PI
1
0
1
IP
II
1
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.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
65
Teoria da Computao
Figura 2.3.13.
E o autmato j vai tomando forma.
E se aparece bab?
Interessam-nos as corridas de as. Se aparece um a temos uma corrida de um a, mas se
de seguida aparece um b ele anula a corrida, obrigando ao reincio da contagem. Quer isso
dizer que do estado 1 se volta ao estado 0 se aparecer um b na entrada.
Se aparece baab este ltimo b obriga de igual modo ao reincio da contagem. Teremos
portanto completo o grafo do autmato na Fig. 2.3.14.
a,b
b
b
Figura 2.3.14. DFA que conta corridas de 3 ou mais as.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
66
Teoria da Computao
Fica o leitor desafiado a encontrar uma qualquer cadeia com uma corrida de trs as que
no seja aceite por este autmato.
Se em vez de uma corrida de trs tivssemos uma corrida de quatro ou cinco, o autmato
teria uma forma semelhante, com cinco ou seis estados, respectivamente.
Se em vez de corridas de as quisssemos corridas de b, bastaria trocar os as pelos bs e
os bs pelos as nas arestas do grafo.
a,b
a
a
Figura 2.3.15. DFA aceitador das cadeias com corridas de quatro ou mais bs.
Exemplo 2.3.4.
Desenhar o autmato que aceita no mesmo alfabeto {a, b} qualquer cadeia que tenha uma
corrida de trs as ou uma corrida de trs bs.
A situao aqui complicou-se um pouco. Vejamos o problema por partes.
Para corridas de trs as, sabemos como fazer. No autmato respectivo, quando surge
um b, reinicia-se a contagem com retorno ao estado 0. Mas agora quando aparece um b duas
coisas tm que acontecer: por um lado a anulao da contagem de as e por outro lado o incio
da contagem de bs.
Para corridas de trs bs tambm sabemos como fazer. E de modo anlogo, quando
aparece um a por um lado anula-se a contagem de bs e por outro lado inicia-se a contagem de
as.
Para iniciar, cria-se um estado inicial 0. Se aparece um a, inicia-se a contagem de as, se
for um b, inicia-se a contagem de bs, como na Fig.2.3.16. Os nomes dos estados foram
alterados para os relacionar com a sua funo: chega a 2a depois de uma corrida de dois as e
chega a 2b depois de uma corrida de dois bs.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
67
Captulo 2 a,b
. Autmatos Finitos
Teoria da Computao
1a
2a
3a
a
0
a,b
b
b
1b
2b
3b
a,b
1a
2a
3a
a
b
a,b
b
b
1b
2b
3b
Finalmente, na corrida de bs procede-se de modo semelhante quando aparece um a e obtmse o autmato da Fig. 2.3.18 que completa a resoluo do exemplo.
1a
2a
ab
3a
a
a
a
ab
b
1b
2b
3b
Figura 2.3. 18. Autmato completo do exemplo 2.3.4: aceita corridas de trs ou mais as ou
corridas de trs ou mais bs
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
68
Teoria da Computao
Ini
00
1
Estando em 00 se aparece 1 ento apareceu 001 e a cadeia deve ser desde j aceite,
independentemente do que acontecer depois, transitando por isso para o estado aceitador
001 e no saindo de l mais. Este ltimo requisito alcana-se colocando uma aresta de
001 para si mesmo, seja com 0 seja com 1.
0, 1
1
Ini
LEI/DEI/FCTUC/2009/@ADC
00
001
Documento de trabalho
69
Teoria da Computao
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
-9
-8
-7
-6
-5
-4
-3
-2
-1
o 7
10
12
10
11
10
M 2
10
d 5
u
l
Cdigo 0000
Mod2
0001
0010
0011
0100
0101
0110
0111
1000
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
10
1001 10010
1
70
Teoria da Computao
A contagem em mdulo dois tem dois resultados possveis: 0 ou 1. Por isso o autmato
s necessita de dois estados, o 0 (para contar 0) e o 1 (para contar 1). O nmero a contar est
codificado em binrio, iniciando-se a sua leitura da esquerda para a direita: o DFA l, por
exemplo, 10101111 pela ordem 1-0-1-0-1-1-1-1. Isto quer dizer que o LSB (Least Significant
Bit) o lido mais direita, e s conhecido no fim da leitura. O DFA conta com qualquer
nmero de bits: s quando a cadeia acaba se conhece o seu tamanho.
Inicialmente est no estado 0. Se aparece um 0, mantm-se no estado 0; se aparece um 1,
conta 1 e por isso vai para o estado 1.
0
Figura 2.3.21. Incio da
construo do DFA contador em
mdulo 2
1
0
Estando no estado 1, se aparece um 0 (leu at agora 10, modulo 2 d 0), transita para o
estado 0. Se aparece um 1 (leu at agora 11=3, modulo 2 d 1) mantm-se no estado 1.
0
Figura 2.3.22. Continuao da
construo do DFA contador em
mdulo 2
1
1
Estando no estado 0 depois de ler 10: se aparece 1 (101=5, mod2(5)=1) vai para o estado
1; se aparece 0 (100=4, mod2(4)=0), mantm-se no estado 0.
Estando no estado 1 depois de ler 11: se aparece 0 (110) vai para o estado 0), se aparece
1 (111) mantm-se no estado 1.
Para que o DFA esteja completo, falta definir o estado aceitador, que depende da
linguagem especificada:
- se forem as cadeias que em mdulo 2 dem zero, o estado final ser o estado 0
- se forem as cadeias que em mdulo 2 dem um, o estado final ser o estado 1. Neste
caso teremos a Fig. 2.3.23.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
71
Teoria da Computao
1
1
1
0
Exemplo 2.2.6. Desenhar o DFA capaz de contar os nmeros inteiros (no negativos)
correctamente em mdulo 4.
A contagem mdulo 4 tem quatro valores possveis: 0, 1, 2, 3. Quatro estados sero em
princpio suficientes. O nome do estado o valor da contagem que lhe corresponde. A leitura
da cadeia feita da esquerda para a direita.
No incio temos o estado inicial 0.
Aparece 0, mantm-se no estado 0; aparece 1, vai para o estado 1.
Estando no estado 1 (depois de ler 1): aparece 0 (10) vai para o estado 2, aparece 1 (11)
vai para o estado 3.
0
1
0
Estando no estado 2 (depois de ler 10): aparece 0 ( 100) vai para o estado 0, aparece 1
(101=5, mod4(5)=1) vai para o estado 1.
Estando no estado 3 (depois de ler 11): aparece 0 (110=6, mod4(6)=2) vai para o estado
2, aparece 1 (111=7, mod4(7)=3) vai para o estado 3.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
72
Teoria da Computao
0
0
1
1
0
0
2
0
1
1
1
4
5
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
73
Teoria da Computao
Continuando,
Estando em 3 (lido 11): com 0 (110) vai para 6, com 1 (111) vai para 0.
Estando em 4 (lido 100): com 0 (1000=8, 8mod7=1) vai para 1, com 1 (1001=9,
9mod7=2) vai para 2.
Estando em 5 (lido 101): com 0 (1010=10, 10mod7=3) vai para 3, com 1 (1011=11,
11mod7=4) vai para 4.
0
1
1
0
3
0
1
4
0
5
1
0
3
0
1
6
4
0
Documento de trabalho
74
Teoria da Computao
b
Figura 2.4.1. DFA aceitador da linguagem L={}, s com a cadeia vazia.
E dada uma linguagem qualquer, definida por um conjunto de cadeias, existir sempre
um DFA, autmato finito determinstico, que a reconhea ? Nem sempre.
H uma famlia de linguagens em que tal acontece sempre: as linguagens regulares.
Uma linguagem L diz-se regular se e s se existir um DFA M que a reconhea, ou seja,
L=L(M)
A famlia das linguagens regulares composta por todas as linguagens que so aceites
por algum DFA.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
75
Teoria da Computao
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).
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
76
Teoria da Computao
Havendo caminhos alternativos pode haver, entre o estado inicial e o estado aceitador,
zero, um ou vrios caminhos. Pode aceitar uma cadeia seguindo um dado caminho e no
aceitar a mesma cadeia seguindo um outro caminho alternativo.
Como definir neste caso a condio de aceitao de uma cadeia?
Do modo seguinte: uma cadeia de entrada aceite se houver para ela (pelo menos) um
caminho que leve a um estado aceitador quando ela toda lida.
Definio 2.5.1: Um aceitador no-determinstico (NFANondeterministic Finite Accepter)
definido pelo quinteto
M= (Q, , , q0, F)
em que a funo de transio definida por
: Q ({}) 2Q
Os restantes membros do quinteto definem-se do mesmo modo que no caso do DFA.
Lendo com ateno a definio constatam-se as seguintes diferenas em relao ao DFA
(definio 2.2.1):
1- O contradomnio de a potncia 2Q do conjunto Q, e no Q, precisamente porque o
resultado de pode ser no limite um qualquer subconjunto de Q. A potncia 2Q de um
conjunto composta por todos os seus subconjuntos possveis, incluindo o vazio.
2- O conjunto (qi, a) pode ser vazio, significando que no h qualquer transio nesta
situao. No grafo no h uma aresta partindo de qi com o smbolo a. No obrigatrio que
exista uma aresta a partir de qi para cada um dos smbolos do alfabeto.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
77
Teoria da Computao
3- tambm pode ser argumento de , ou seja, pode dar-se uma transio sem consumir
um smbolo de entrada ( o mecanismo de leitura pode ficar parado em alguns movimentos).
No grafo do NFA pode existir uma ou mais arestas com o smbolo .
Os NFAs podem representar-se por grafos tal como o DFA. Os ns so os estados e as
arestas as transies. Por exemplo, a transio (q1, a) = {q2, q3} s pode existir num NFA,
dado que h dois caminhos alternativos: de q1 lendo a ou se transita para q2 ou se transita para
q3. Com um grafo ser
a
q1
q2
a
Figura 2.5.2. Grafo da transio
(q1, a) = {q2, q3}
q3
Num NFA pode dar-se uma transio com o carcter . Este facto parece estranho na
medida em que aceitar o nada numa primeira anlise parece at contrariar a prpria noo de
aceitao. Mas veremos a utilidade deste facto.
Consequncias da possibilidade de transio com
H algumas consequncias da possibilidade de transio com o que convm aqui referir.
1 - de um qualquer estado para ele mesmo pode-se sempre transitar com .
Suponhamos que estamos no estado qi depois de ler o prefixo aba da cadeia ababb.
Figura 2.5.3. Grafo (NFA) da transio
(qi, b) = qj
qi
qj
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
78
Teoria da Computao
Mas repare-se que a cadeia ababb a mesma que ababb ou que ababb ou que
ababb e por a alm. Como representar esse facto no grafo? Simplesmente colocando uma
transio do estado qi para ele mesmo.
O mesmo ir depois acontecer em qj . Por isso o grafo completo ter a forma da Fig.
2.5.4.
qi
qj
q2
q1
Figura 2.5.5.
q3
aabab
Havendo (por vezes tantas) escolhas, como se pode saber se uma cadeia aceite pelo
DFA? Se ele escolhe um caminho e no consegue chegar ao estado final conclui-se que no
aceita a cadeia? E se ele tivesse escolhido outro, aceitaria ou no? Teria que tentar todos os
caminhos alternativos possveis. Se encontrasse um que o levasse a um estado aceitador ento
aceitaria a cadeia.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
79
Teoria da Computao
Computao
determinstica
Computao no
determinstica
aceita ou rejeita
aceita
Figura 2.5.6. Uma computao determinstica cria um caminho, enquanto que uma
computao no-determinstica cria uma rvore.
Na computao determinstica nunca h escolhas. A cadeia lida ou aceite ou no,
conforme o ltimo estado seja aceitador ou no. Na computao no determinstica cria-se
uma rvore, com sucessivas ramificaes sempre que haja uma escolha possvel. Se um dos
caminhos de uma computao terminar num estado aceitador, o NFA aceita a cadeia. Caso
nenhum caminho termine num estado aceitador, a cadeia rejeitada.
Uma cadeia aceite pela NFA se houver alguma sequncia de movimentos possveis
que coloquem o autmato num estado final (aceitador) no fim da cadeia. Caso contrrio
rejeitado.
H uma outra forma de concebermos uma computao no determinstica. Sempre que
h uma escolha possvel, o NFA replica-se uma vez por cada escolha, de modo que o nmero
de configuraes vai aumentado em cada ramificao da rvore supra. Cada configurao est
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
80
Teoria da Computao
no estado consequente da escolha feita e na sua entrada esto aos caracteres ainda no lidos.
Se um dos autmatos replicados est numa configurao tal que no pode transitar para
qualquer estado (seja com seja com um outro carcter), e se a leitura ainda no chegou ao
fim, ento esse autmato morre. Se no fim da computao houver algum autmato
sobrevivente e se pelo menos um deles estiver num estado aceitador, a cadeia aceite.
* (qi, w) = Qj
sendo Qj o conjunto de todos os estados possveis do autmato que podem ser alcanados a
partir de qi e pela leitura de w. Isto * (qi, w) contm o estado qj se e s se existir um
caminho no grafo de transies desde qi at qj com etiqueta w, para todos os qi, qj Q e
w*, como na Fig. 2.5.7.
Figura 2.5.7.
qi
qj
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
81
Teoria da Computao
q0
q1
q2
(q0, 1) = {q1}
(q0, 0) =
(q1, 0) = {q0, q2}
(q1, 1) = {q2}
(q1, ) = {q1}
(q0, ) = { q0, q2}
(q2, 0) =
(q2, 1) =
(q2, ) = {q2}
O autmato aceita:
10, porque dos dois estados alcanados um final.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
82
Teoria da Computao
1010, 101010,
No aceita : 1, 11, 01,
A sua linguagem composta palas cadeias de potncias de 10, ou seja,
L(M) = { (10)n : n 0 }
E se aparece a cadeia 110 ?
Depois de ler 11 chega a q2. Como no est definida a transio (q2, 0), obtm-se uma
configurao morta (dead configuration), em que se transita para o estado vazio, .
Mais
formalmente
* (q0, 110)=.
Como no se pode atingir um estado final processando 110, esta cadeia no aceite pelo
NFA.
Exemplo 2.5.2.: (Linz).
Considere-se o autmato da Fig. 2.5.9, com o alfabeto ={a}. Ele no-determinstico
porque (i) no estado inicial h uma escolha possvel com o carcter a e (ii) no esto definidas
todas as transies possveis.
a
q1
q3
q2
q0
a
a
q5
q4
a
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
83
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
84
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
85
Teoria da Computao
Ser ento:
1,0
0
q1
q2
qf
q0
Documento de trabalho
86
Teoria da Computao
Este NFA aceita todas as cadeias que contenham 000, e s essas. De facto:
- se uma cadeia contm 000, h sempre um caminho aceitador para ela. Por exemplo no
caso da cadeia 1001110110001101010 deixa-se ficar em q0 at ao nono carcter e depois
transita sucessivamente para q1, q2 e qf, ficando a at ao fim da cadeia.
- se uma cadeia no contm 000 no possvel chegar ao estado aceitador. Por exemplo
para a cadeia 1100101001, se o NFA transita com algum dos zeros para o estado q1, ele acaba
por morrer porque lhe aparece um 1 em q1 ou em q2 e no est a definida qualquer transio
com 1.
Se o autmato no tivesse a possibilidade de ficar em q0 com 0, avanaria sempre para
q1 quando lesse um 0 (por exemplo em 1010001). Mas se a seguir aparece 1, ele entra numa
configurao morta, dado que no h sada de q1 com 1, e por isso terminaria a computao
no aceitando a cadeia 1010001). Ora acontece que a sequncia 000 aparece mais frente e a
cadeia deveria ser aceite. O facto de poder esperar em q0, palpitando-lhe que aquele 0 no
ainda da sequncia pretendida, evita esta situao.
Segundo, desenhamos o NFA que aceita as cadeias com 111 (e s essas). Por razes
anlogas ele ser
0,1
0,1
qf
1
q0
1
q2
q1
q2
q1
0
q3
q0
1
1
q4
1
q5
Documento de trabalho
87
Teoria da Computao
q0
q0, q1
q0, q4
q1
q2
q2
q3
q3
q3
q3
q4
q5
q5
q3
q1
q2
q1
q23
a
q3
a) no NFA
b) no DFA equivalente
Figura 2.6.4. Pormenor do clculo do DFA equivalente: dois estados q2 e q3 do NFA coalcanveis pela transio a produzem um s estado q23 no DFA equivalente.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
88
Teoria da Computao
Para definir as transies no DFA, etiquetem-se os seus estados com ndices agrupando
os ndices dos estados do NFA co-alcanveis pelas mesmas transies.
Na Fig. 2.6.3 de q0 com 0, pode-se ir ou para q0 ou para q1, ou seja para o conjunto {q0,
q1} Crie-se um estado equivalente a este conjunto. Vamos chamar-lhe q01 para sabermos a que
corresponde.
De q0 com 1, pode-se ir ou para q0 ou para q4, ou seja para o conjunto {q0, q4} Crie-se de
igual modo um estado equivalente a este conjunto, q04.
Estes estados q01 e q04 vo integrar o DFA. Temos que saber o que se passa neles quando
aparece 1 ou 0. Para isso colocamo-los na primeira coluna da tabela de transies, como
indicado na Tabela 2.6.2..
Tabela 2.6.2. Transies do DFA equivalente.
q0
q01
q04
Agora temos que imaginar o seguinte: se o DFA est em q01 e aparece 0, o que se
passar?
Sabemos que q01 corresponde do conjunto {q0, q1} do NFA. E portanto aquela pergunta
equivalente a: se o NFA est ou em q0 ou em q1 e aparece um 0, o que se passar?
Se est em q0 pode ir para q0 ou para q1. Se est em q1 pode ir para q2. Portanto estando
em {q0, q1} pode ir para {q0, q1, q2}. Crie-se por isso no DFA o estado q012.
E se o DFA est em q01 e aparece 1, o que se passar? Fazendo uma anlise semelhante
conclui-se que estar em q04. Neste caso h uma nuance que convm realar: se est em q1,
com 1 vai para o vazio, . Mas {, q0, q4}={q0, q4}.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
89
Teoria da Computao
Nesta segunda etapa surgiu o novo estado do DFA, q012, que deve ser colocado na
primeira coluna. q04 j l estava.
Tabela 2.6.3. Mais transies do DFA equivalente
q0
q01
{, q0, q4}=
q04
q012
E agora continua-se a anlise. De q04 com 0 para onde se vai? E com 1? E de q012?
Sempre que aparece um novo estado do DFA (v-se palas etiquetas) tem que se colocar
na primeira coluna na linha seguinte ainda no ocupada.
Termina-se quando s se obtm estados do DFA que j existem na 1 coluna.
Tabela 2.6.4. Todas as transies do DFA equivalente
q0
q01
q04
q01
q045
q012
q0123
q04
q045
q01
q0345
q0123
q0123
q034
q0345
q013
q0345
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
90
Teoria da Computao
q013
q0123
q034
q034
q013
q0345
q01
0
q012
q0123
q0
q034
0
1
q045
q04
q0345
q013
1
0
1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
91
Teoria da Computao
Depois de o autmato entrar num dos estados aceitadores, apenas pode transitar entre
estados aceitadores e por isso todos os estados aceitadores se podem fundir num s, como no
grafo seguinte. As etiquetas dos estados foram escolhidas de modo sugestivo, indicando como
se chega ao estado (qual ou quais os ltimos caracteres lidos). Excepto para o estado final,
que poderamos etiquetar por 000 ou por 111, ou por ambas.
0
0
00
0
1
0,1
F
0
1
1
11
0, 1
0
0, 1
1
0
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
92
Teoria da Computao
O NFA est no estado inicial at que lhe palpita que vm a os dois ltimos caracteres e
que eles sero 10. Logo,
0,1
0
0
01
01
03
01
03
0=0
0=0
actual
01
1
03
0,1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
93
Teoria da Computao
NFA que est a ler a cadeia, no se move at que lhe palpita que o 1 que a vem o
antepenltimo carcter da cadeia e ento avana para o estado aceitador. Teremos ento o
seguinte NFA com trs estados, Fig. 2.6.9.
0,1
0, 1
0
0, 1
01
01
02
012
02
03
013
012
023
0123
03
013
02
012
023
03
013
0123
023
0123
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
94
Teoria da Computao
0, 1
01
03
02
1
0
1
012
013
1
023
0
1
0
0123
1
a
a
1
b
4
3
a
Documento de trabalho
95
Teoria da Computao
1
b
Estado
136
245
245
45
46
45
46
46
46
b
b
6
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
96
Teoria da Computao
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.
q1
a, b
Figura 2.7.1.
Ele tem um equivalente com um s estado:
a, b
q0
Exemplo 2.7.2.
No autmato DFA seguinte h estados a mais.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
97
Teoria da Computao
a
a
a
q1
q3
q0
q2
a
a
q0
a, b
q12
q3
b
q1
q3
a, b
q0
a
b
q4
q2
a, b
b
a
Figura 2.7.5
Em primeiro lugar os dois estados finais podem-se fundir num s, dado que as transies
a partir deles so reflexivas (voltam a eles): seja ele q34.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
98
Teoria da Computao
q1
b
q0
a
b
a, b
q34
q2
b
a
q0
a, b
q12
q34
a, b
Documento de trabalho
99
Teoria da Computao
q
w
* (p,w) F * (q,w )F
ou tal que de p se chegue a um no aceitador e de q a um aceitador,
* (p,w) F * (q,w )F
ento os estados p e q so distinguveis pela cadeia w.
Dois estados ou so distinguveis ou so indistinguveis. A indistino tem as
propriedades de uma relao de equivalncia R:
1.p R p
(reflexiva)
2. p R q q R p
(simtrica)
3. p R q e q R r p R r
(transitiva)
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
100
Teoria da Computao
pa
qa
Documento de trabalho
101
Teoria da Computao
e qp
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
102
Teoria da Computao
5
b
a
6
b
a
b
a
b
7
3,3
4,2
5,3
6,2
7,3
4,2
5,3
6,2
7,3
4,2
5,3
6,2
7,3
2,2
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
103
Teoria da Computao
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
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
104
Teoria da Computao
a
124
357
b
6
a
2.8 Um aplicao dos DFA: busca de texto (text search, Hopcroft, 68)
Os autmatos finitos encontram na busca de texto uma aplicao interessante. Como sabemos
a pesquisa de cadeias de caracteres uma das operaes mais executadas na web. Dado um
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
105
Teoria da Computao
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
-c
-v
-a
c
-h
-a
-e
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
106
Teoria da Computao
Exerccio 2.8.1
O seguinte NFA encontra num texto as palavras doce e mel. Desenhar o o DFA equivalente.
= { a, b, c, ...., z}.
m
5
6
e
Ficheiro de entrada
S
Unidade de Controlo
qk
M
e
m
r
i
a
Ficheiro de sada
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
107
Teoria da Computao
qi
1/0
Entrada/Sada
qj
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
108
Teoria da Computao
Exemplo 2.9.1
Considere-se a mquina de Mealy da Fig.2.9.3
q1
1/
0/1
1/0
q0
0/
q2
0/0
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
109
Teoria da Computao
Estado/Sada
1
qi /1
qj /0
Entrada
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
110
Teoria da Computao
- l 1, passa a 1 escreve
- l 1, passa a 3, escreve 1
- l 1, mantm 3, escreve 1
- l 0, passa a 4, escreve 1
- l 1, passa a 5, escreve 0
- l 0, passa a 4, escreve 1
- l 1, passa a 5, escreve 0
0
1/
4/1
0
0/
5/0
2/
1
0
Figura 2.9.6
6/0
A mquina de Moore escreve na sada logo aps transitar de estado. Por isso a sua
implementao por hardware faz-se com ilustrado na figura seguinte. Trata-se de uma
mquina sncrona (as mudanas na sada so sincronizadas com as mudanas de estado).
Estes dois exemplos indiciam que existe equivalncia entre as mquinas de Mealy e de
Moore: dada uma mquina de Mealy possvel encontrar uma mquina de Moore que, para as
mesmas entradas, d as mesmas sadas. E vice-versa. (Ignorando a sada do estado inicial na
mquina de Moore).
A de Moore equivalente tem em geral um maior nmero de estados.
As mquinas de Mealy e de Moore so os cavalos de batalha no projecto de circuitos
lgicos complexos. Existe at software que simula estas mquinas e gera o circuito lgico a
partir do autmato desenhado com um grafo (ver por ex.
http://www.seas.upenn.edu/~ee201/foundation/foundation_impl4.html ou
http://www.xilinx.com/univ/xse42.html ).
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
111
Teoria da Computao
Bibliografia.
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
G. H. Mealy, A Method for Synthesizing Sequential Circuits, Bell System Tech. J. vol 34, pp.
10451079, Sept 1955.
Apndice . O software JFLAP (livre) para desenho e simulao de autmatos.
http://www.cs.duke.edu/csed/jflap
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
112
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
113
Teoria da Computao
Livre: This work is licensed under a Creative Commons Attribution-NonCommercialShareAlike 2.5 License.
Tem vrias outras funcionalidades muito teis em captulos posteriores (equivalncia de
autmatos, gramticas, etc.).
O software DEM- Deus Ex-Maquina (tambm para a simulao de autmatos) est
disponvel na pgina da cadeira.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
114
Teoria da Computao
CAPTULO 3
3.1 Introduo
117
117
126
130
140
151
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
115
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
116
Teoria da Computao
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.
os smbolos do alfabeto
os operadores de
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
117
Teoria da Computao
unio : ou +
concatenao:
fecho-estrela : *
de parnteses
Exemplo 3.2.1.
Consideremos o alfabeto ={a, b, c, ..., z}.
Nele a linguagem finita L = {a} definida pela expresso regular : a
A linguagem L = {a, b, c }, definida pela expresso regular: abc ou a+b+c. O
operador unio em conjuntos corresponde ao operador adio nas expresses regulares.
Muitas linguagens so infinitas e no se podem por isso escrever por enumerao
explcita. A linguagem definida pela expresso regular (a+bc)* uma linguagem infinita
devido ao fecho-estrela. Por definio de *, teremos
L= {(a+bc)0 (a+bc)1 (a+bc)2 (a+bc)3
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
118
Teoria da Computao
2.2 r1r2,
3. Uma cadeia uma expresso regular se e s se ela puder ser derivada a partir das
expresses regulares primitivas e pela aplicao de um nmero finito de vezes das
regras de 2 (princpio da recursividade)
Exemplo 3.2.2
Seja o alfabeto ={0,1}
A expresso regular seguinte define a linguagem indicada
01* = {0, 01, 011, 0111,}, 0 concatenado com um nmero arbitrrio de 1s.
Se concatenarmos toda e qualquer cadeia desta linguagem com 01 obtm-se
(01*)(01) = {001, 0101, 01101, 011101, ..}
Por outro lado
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
119
Teoria da Computao
(0+1)* = {0, 1, 00, 01, 10, 11, ..}, i.e., toda e qualquer as cadeias com 0 e 1.
Analisemos agora a expresso regular
(0+1)*00(0+1)*
esquerda temos (0+1)*, qualquer cadeia de 0s e 1s. direita temos a mesma coisa.
Mas no centro temos o par 00. Quer dizer que esta expresso regular representa qualquer
cadeia que contenha o par 00 precedido por qualquer nmero de 0s e 1s e seguido de
qualquer nmero de 0s e 1s, ou seja,
{00, 1001, 00110, 10100, 010101000111000..},
i.e., todas as cadeias de 0 e 1 contendo 00 em qualquer posio. O par 00 tem que aparecer
uma vez, mas pode aparecer alm disso qualquer nmero de vezes.
Exemplo 3.2.3
No alfabeto = {a,b,c}, ser (a+bc)*(c+) uma expresso regular ?
Para responder temos que ver se ela se pode obter a partir das expresses regulares
primitivas por uma recurso:
Os smbolos a,b,c, so expresses regulares primitivas.
b.c uma expresso regular (er) , do item 2.2. da definio,
a+b.c uma er, do item 2.1 da definio,
(a+b.c) uma er, do item 2.4 da definio,
(a+b.c)* uma er, do item 2.3 da definio,
(c+) uma er, dos itens 2.1 e 2.4 da definio,
(a+bc)*(c+) uma er do item 2.2 da definio.
q.e.d
E (a + c + ) expresso regular ?
a , c so er primitivas
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
120
Teoria da Computao
a+c uma er
a+c+ no er, logo (a+c+) no expresso regular.
Exemplo 3.2.4.
Seja a expresso regular (1+10)*. Que linguagem define ?
Pela definio de fecho-estrela teremos sucessivamente:
(1+10)*= (1+10)0 (1+10) (1+10)2 (1+10)3
= (1+10) (1+10) (1+10) (1+10) (1+10) (1+10)
= {,1+10, (1+10) (1+10) , (1+10) (1+10) (1+10) , }
= {,1+10, 11,110,101,1010, (11+110+101+1010)(1+10), }
= {,1+10, 11,110,101,1010, 111,1110,1101,11010, 1011,10110,10101,101010,}
Qual a caracterstica comum a todas estas cadeias?
Elas comeam todas por 1 e podem ter um nmero arbitrrio de 1s seguidos. Os 0s so
introduzidos pela parcela 10 quando esta potenciada. Mas sendo potenciada, introduz 10,
1010, 101010, , ou seja, quando introduz um zero mete sempre 1 antes, e por isso no
possvel introduzir dois zeros seguidos. O facto de ambas as parcelas da soma se iniciarem
por 1 faz com que todas as suas concatenaes possveis se iniciem por 1. Poderemos concluir
que a linguagem composta por todas as cadeias em {0,1} que se iniciam por 1 e no tm
qualquer par de zeros.
Exemplo 3.2.5
E no caso (0+1)*011 ?
A primeira parte (0+1)* produz todas as cadeias. A segunda parte, 011, concatena o
sufixo 011 a todas as cadeias da primeira parte. Portanto temos a linguagem de todas as
cadeias em {0,1} que terminam em 011.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
121
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
122
Teoria da Computao
{a, b}
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
123
Teoria da Computao
v) Em = {0,1} escrever a expresso regular para a linguagem das cadeias que contm
um nmero mpar de zeros, ou seja,
L ={w : w contm um nmero mpar de zeros }
Nota:
(a+b)*= (a+b)*+(a+b)*
(a+b)* = (a+b)*(a+b)*
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
124
Teoria da Computao
r1 = (1+0)*00(1+0)*
Note-se que o enunciado no impede a existncia de mais pares de zeros para alm do
obrigatrio. Nunca confundir ter um par de zeros com ter um s par de zeros.
ii) Esta linguagem a complementar da anterior. No caso dos autmatos sabemos como
desenhar o autmato do complemento a partir do autmato original: basta trocarmos a misso
dos estados, passando os aceitadores a no aceitadores e os no aceitadores a aceitadores.
Com expresses regulares no h nenhuma tcnica assim expedita de encontrar o
complemento. Tem que se pensar na questo desde a base.
Se a linguagem no tem qualquer par de zeros consecutivos, quer dizer que sempre que
aprece um 0 ele deve ser seguido imediatamente por um 1, i.e., o 0 s pode aparecer na
cadeia 01
Antes ou depois de 01 pode aparecer um nmero arbitrrio de 1s, produzindo a cadeia
1....1011.....1. Portanto a linguagem contm (1...1011...1)*, ou, equivalentemente, (1*011*)*.
Note-se que ao fecharmos (fecho-estrela) a expresso estamos a replic-la um nmero
arbitrrio de vezes, permitindo assim gerar cadeias com um nmero arbitrrio de zeros. Mas
cada zero aparece acompanhado esquerda e direita por um nmero qualquer de 1s. Notese que obrigamos todas estas cadeias a terminar em 1, o que limitativo.
No esto ainda includas as cadeias que terminam em 0. Poderemos obt-las da
expresso anterior concatenando-lhe um zero no fim, obtendo-se (1*011*)*0 .
Faltam tambm as cadeias que s tm 1s; para elas basta adicionar 1*.
Finalmente juntam-se as cadeias que s tm 1s excepto o ltimo que 0, 1*0.
Teremos a unio destes subconjuntos todos, pelo operador + em expresses regulares:
(1*011*)* + (1*011*)*0 + 1* + 1*0
Este resultado responde pergunta. Por uma questo de elegncia podemos procurar
simplificar a expresso.
Pondo em evidncia os factores comuns s parcelas obtm-se a
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
125
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
126
Teoria da Computao
L (M + N) = LM + LN
Por exemplo aba(bba+abb)=ababba+abaabb. Atendendo ao significado de +, unio,
temos que concatenar o prefixo aba com cada uma das cadeias dentro do parntese. O
resultado a unio dessas concatenaes.
E tambm distributiva direita
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
127
Teoria da Computao
(M + N)L = ML + NL
Prova semelhante, agora com um sufixo em vez de prefixo.
A unio no distributiva em relao concatenao nem direita nem esquerda
(MN) + L (M + L)(N + L)
L + (MN) (L + M)(L + N)
Para provar que assim , faz-se prova por contradio: supe-se que igual e procura-se
um caso em que no o seja. As propriedades tm que ser gerais, vlidas para todas as
linguagens e todas as cadeias em cada linguagem.
(ab)+c= (a+c)(b+c)
Ora (a+c)(b+c)=ab+ac+cb+cc por definio de unio e de concatenao. Mas isto
diferente de (ab)+c, o que suficiente para a prova por contradio.
3.3.3 Identidades e anuladores (zeros)
Numa certa lgebra, a identidade o elemento que operado com qualquer outro elemento d
esse elemento, tal como 1 na multiplicao numrica.
O conjunto vazio, , a identidade para a unio porque
+L=L+=L
J para a concatenao, a identidade a cadeia vazia porque
L=L=L
O anulador o elemento que operado com outro elemento d sempre o conjunto vazio.
No caso da concatenao o conjunto vazio
L = L =
Para a unio no existe anulador. E para a interseco?
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
128
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
129
Teoria da Computao
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).
LEI/DEI/FCTUC/2009/@ADC
q0
q1
Documento de trabalho
130
Teoria da Computao
q0
r=
q1
q1
q0
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,
M (r)
q0
qf
com o estado inicial q0 e o estado final qF. Note-se que qualquer NFA pode ser representado
com um s estado final.
3 Suponhamos agora que temos dois NFAs M(r1) e M(r2) que aceitam as linguagens
L(r1) e L(r2) definidas pelas expresses regulares r1 e r2. Construam-se os NFA para a
segunda parte da Definio 3.2.2 do modo seguinte:
iv) L(r1+r2)
M (r1)
q0
M (r2)
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
131
Teoria da Computao
O NFA aceita a unio das linguagens, L1 pela parte de cima e L2 pela de baixo.
v) L(r1r2)
M (r1)
q
M (r2)
qf
O NFA aceita uma cadeia que resulte da concatenao de uma cadeia de L1 (que leva o
autmato ao estado aceitador da de M(r1)) com uma cadeia de L2 que lava depois a qf.
vi) L(r1*)
M (r1)
q
qF
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
132
Teoria da Computao
Usando estas mquinas possvel construir um NFA para qualquer expresso regular.
Pode-se por isso enunciar o teorema:
Teorema 3.4.1. L(r) uma linguagem regular
Se r uma expresso regular, existe algum autmato finito no-determinstico que aceita
L(r). Logo L(r) uma linguagem regular.
Exemplo 3.4.1.1
r=1*
Sendo 1 uma expresso regular primitiva, desenha-se o seu autmato. Depois aplica-selhe a regra do fecho estrela.
q0
1
0
DFA
q0
Figura 3.4.11. DFA de 1*
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
133
Teoria da Computao
Exemplo 3.4.1.2.
r=a+a*b
Desenham-se os NFA de a e de b, expresses regulares primitivas. A partir do de a
desenha-se o de a* que se concatena com o de b. Finalmente coloca-se um outro de a em
paralelo com o de a*b.
r=ab+(b+ab)*
Desenha-se o de a que se concatena com o de b. Desenha-se novamente o de b que se
paraleliza com o de ab. Agora aplica-se o fecho estrela ao conjunto obtido. Desenha-se depois
um outro de a e um outro de b que se concatenam, colocando-se o conjunto em paralelo com
o anterior.
3.4.2. De um NFA a uma expresso regular: expresses regulares para linguagens
regulares
A toda a linguagem regular se pode associar um NFA e portanto um grafo de transies.
Partindo do estado q0, procuram-se todos os caminhos possveis at ao estado final e as suas
etiquetas.
possvel depois encontrar uma expresso regular que gere todas essas etiquetas. Para
facilitar esta operao, usam-se os grafos de transio generalizados.
Grafos de transio generalizados so grafos de transio em que as arestas podem ser
etiquetadas por expresses regulares (e no s por caracteres). No Cap. 2 chammos-lhe *. A
etiqueta de um caminho desde o estado inicial at ao estado final a concatenao das
etiquetas das arestas do caminho, i.e., a concatenao de expresses regulares e portanto
uma expresso regular. As cadeias expressas por essa expresso regular so um subconjunto
da linguagem aceite pelo grafo de transio generalizado; a linguagem total ser a unio de
todos os subconjuntos gerados deste modo.
Temos ento o seguinte caminho pata encontrar uma expresso regular para uma dada
linguagem
NFA grafos de transio generalizados expresses regulares
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
134
Teoria da Computao
d
q
qi
qj
Para que isso acontea temos que analisar com ateno as etiquetas (expresses
regulares) das arestas das transio possveis entre os estados que ho-de restar. Por exemplo
para ir de qi at qi, um ciclo fechado, vai-se com a at q, com um nmero qualquer de es, ou
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
135
Teoria da Computao
ae*d
ce*b
ce*d
qi
qj
ae*b
Figura 3.4.13. Grafo resultante da eliminao do
estado intermdio da Fig. 3.4.12.
Note-se que no estado q entram e saem arestas para ambos os estados adjacentes e para
si prprio. No caso de alguma delas no existir, omite-se o correspondente no grafo
simplificado.
Este procedimento assegura que a linguagem aceite no alterada. Num grafo com mais
estados, mais complicado, o processo completo exige que este procedimento seja feito
sucessivamente para todos os pares (qi, qj) em Q {q} antes de se remover q (i.e., todos os
pares que estejam ligados a q). Por outro lado elimina-se um estado de cada vez, at restarem
apenas dois. As transies generalizadas permitem-nos reduzir qualquer autmato finito a um
outro com apenas dois estados.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
136
Teoria da Computao
r4
r3
q0
qf
r2
Figura 3.4.14, Qualquer NFA pode ser reduzido a
esta forma.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
137
Teoria da Computao
r4
r3
qf
r2
Figura 3.4 15. Caso em que o estado inicial aceitador.
a expresso regular
r=(r1*+ (r2r4*r3))*
Exemplo 3.4.2.1
Calcular a expresso regular do autmato da Fig. 3.4.16.
Antes de aplicar a construo subjacente ao teorema 3.2, necessrio introduzir uma
pequena alterao no autmato para que o estado inicial no seja o aceitador. Basta para isso
introduzir um estado adicional q que passa a ser o inicial e do qual se transita para A atravs
de . Resulta um NFA equivalente.
A
1
1
1
0
1
0
0
Figura 3.4.16. Exemplo 3.4.2.1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
138
Teoria da Computao
11*0
0
Figura 3.4.17. Eliminao do estado C.
q0
r4 = ( 0 + 11*0(11*0)*0 )*
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
139
Teoria da Computao
como vimos no Cap. 1. No caso das linguagens regulares teremos gramticas regulares, uma
classe de gramticas lineares.
3.5.1. Gramticas lineares esquerda e direita
Definio 3.5.1. Gramtica regular
Uma gramtica G = (V,T,S,P) diz-se linear direita se todas as suas produes so da forma
A xB,
A x,
em que
A, B V, variveis do conjunto das variveis
x T, smbolo do conjunto dos smbolos terminais
O seu nome deriva do facto de a varivel aparecer direita do smbolo terminal, e por
isso as cadeias vo sendo produzidas da esquerda para a direita. linear por ter apenas uma
varivel, tal como uma equao A=xB, linear em B se x for uma constante.
Uma gramtica diz-se linear esquerda se todas as suas produes tm a forma
A Bx,
A x,
Uma gramtica diz-se regular se ela ou linear esquerda ou linear direita. Na parte
direita das produes aparece no mximo uma varivel e ela situa-se sempre na posio mais
direita ou sempre na posio mais esquerda do lado direito das produes.
Exemplos de gramticas regulares:
Exemplo 3.5.1.1
G1= ({S}, {a,b}, S, P1) , linear direita
P1 : S abA
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
140
Teoria da Computao
P2 : S a
Tambm se pode escrever em forma mais compacta por
P : S abA|a
Como derivar ababa de G1 ?
S abS ababS ababa
Aplicando P1 sucessivamente duas vezes e depois P2 para terminar.
De cada vez que se aplica P1 introduz-se ab. Aplicando duas vezes, fica (ab)2S depois
para eliminar S tem que se aplicar P2 resultando em (ab)2a. Aplicando trs vezes P1 fica
(ab)3S e depois P2 termina a derivao em (ab)3a.
Generalizando conclui-se que a gramtica G1 produz a linguagem (regular) definida pela
expresso regular
r=(ab)*a
Exemplo 3.5.1.2
G2 =({S,A,B}, {a,b}, S, P2 } , linear esquerda
P1
S Aab
P2
A Aab | B
P3
Ba
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
141
Teoria da Computao
G3 =({S,A,B}, {a,b}, S, P }
P1
SA
P2
A aB
P3
P4
B Ab
Esta tem produes lineares direita (P2) e outras lineares esquerda (P4) (P1 e P3 tanto
so lineares esquerda como direita) por isso linear mas no regular. Uma gramtica
linear se do lado direito de cada produo aparece no mximo uma varivel, seja direita seja
esquerda. Se regular linear, mas nem todas as lineares so regulares.
Exemplo 3.5.1.4.
G4 =({S}, {a,b}, S, P }
P:
S aSSa |
no linear porque do lado direito de uma produo aparecem duas variveis (no caso duas
vezes S ).
As gramticas regulares esto associadas com linguagens regulares. Para toda a
linguagem regular existe uma gramtica regular.
Documento de trabalho
142
Teoria da Computao
Um NFA pode imitar esta produo se tiver um estado D e um estado E e entre os dois
uma aresta etiquetada por d :
D
V0 v1Vi
Vi v2Vj
Vn vl
v1v2Vj
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
143
Teoria da Computao
....
*
v1v2...vkVn
v1v2...vkvl = w
O NFA a ser construdo imita cada derivao consumindo um v de cada vez. V0, Vi, Vj,
..., Vn so estados do autmato, mas existem outros entre eles quando os vs so cadeias com
mais de um carcter. Alm disso preciso acrescentar o estado final.
Por exemplo se tivermos a produo:
Vi a1a2a3...amVj
ento o NFA ter um caminho ligando Vi a Vj, ou seja (Vi, Vj) existe e ser definida por
*(Vi, a1a2a3...am) = Vj
Vi
a1
a2
am
Vj
*(Vi, a1a2a3...am) = Vf
Vi
a1
a2
am
Vf
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
144
Teoria da Computao
Se uma cadeia wL(G) ento ela foi gerada por um conjunto de produes definidas
acima. No NFA existe, por construo, um caminho etiquetado w que vai de V0 at Vf ou seja,
w aceite pelo NFA.
Se uma cadeia w aceite pelo NFA, ento, pelo modo como este foi construdo, para
aceitar w o autmato tem que passar por uma sequncia de estados V0, Vi,... at Vf usando
caminhos etiquetados v1, v2, ...., ou seja, w tem necessariamente a forma
w= v1v2...vkvl
e por isso a derivao
*
P:
aA | aB ,
bB | b ,
aA | bB .
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
145
Teoria da Computao
a
a
A
a
b
F
B
b
Figura 3.5.4. Autmato da gramtica do exemplo 3.5.2.1.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
146
Teoria da Computao
S = q0
2 Para cada transio (qi, aj) = qk no DFA M , introduz-se em P a produo
qi ajqk
Documento de trabalho
147
Teoria da Computao
b
q0
q1
q2
qf
Produes em G
(q0, a)={q1}
q0 aq1
(q1, a)={q2}
q1 aq2
(q2,b)={q2}
q2 bq2
(q2, a)={qf}
q2 aqf
qf F
qf
q2
LEI/DEI/FCTUC/2009/@ADC
b
q3
Documento de trabalho
q4
148
Teoria da Computao
ab*a
a
q5
q6
q7
Reduz-se a um NFA com um s estado inicial e um s estado final criando um estado inicial
global e um estado final global com as necessrias transies a
q1
b
a
q2
q3
q4
q5
q6
q7
qf
Produes em G
q0 q1| q5
(q1, a)={q2}
q1 aq2
(q2,a)={q3, q4}
q2 aq3| aq4
(q3, a)={q4}
q3 aq4
(q3, b)={q3}
(q4, )={qf}
q3 bq3
q4 qf
(q5, a)={q6}
q5 aq6
(q6, b)={q6}
q6 bq6
(q6,a)={q7}
q6 aq7
(q7, )={qf}
q7 qf
qf F
LEI/DEI/FCTUC/2009/@ADC
qf
Documento de trabalho
149
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
150
Teoria da Computao
Teorema
3.2
DFA ou NFA
Teorema
3.4
Teorema
3.3
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
151
Teoria da Computao
Bibliografia:
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001.
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
152
Teoria da Computao
CAPTULO 4
4.1. Introduo
155
155
161
163
176
Bibliografia
177
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
153
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
154
Teoria da Computao
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.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
155
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
156
Teoria da Computao
De facto, num DFA a funo de transio generalizada * uma funo total, isto , ela
definida para todas as cadeias de *. Portanto, dada uma cadeia w e o estado inicial q0, *(q0,
w) existe, e ou um estado final (pertence e F, caso em que wL1 ) ou um estado no
aceitador e portanto pertencente a Q-F e neste caso w Compl(L1). Havendo um DFA que
aceita Compl(L1), ela regular e verifica-se o fecho em relao complementao.
(ii)
Em relao interseco, faz-se uma prova construtiva: constri-se um DFA especial a
partir dos DFA de L1 e L2, respectivamente M1 e M2.
Sejam M1 = (Q, , 1, q0, F1) e M2 = (P, , 2, p0, F2) os DFA de L1 e L2.
Vamos construir o DFA interseco destes dois e chamemos-lhe M12: ele aceitar uma
cadeia se e s se essa cadeia for aceite por M1 e por M2 . Tomamos um carcter do alfabeto
(que o mesmo nas duas linguagens) e seguimo-lo num e noutro autmato. Se ele est num
estado qi de M1 e num estado pj de M2, criamos um estado qij em M12. Se ele transita em M1
para qk e em M2 para pl, cria-se o estado qkl em M12. Assim os estados de M12 correspondem a
pares de estados de (Q, P).
Suponhamos o alfabeto ={a,b} e o carcter a. A Fig. 4.2.1 ilustra a demonstrao.
Em M1
Em M2
Ento em M12
qi
pj
(qi, pj)
qij
qk
pl
(qk, pl)
qkl
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
157
Teoria da Computao
1(qi,, a)= qk
e
2(pj,, a)= pl
E quais sero os estados aceitadores em M12?
Queremos obter o DFA que aceita a interseco das linguagens L1 e L2, isto , as cadeias
que levam M1 a um estado aceitador e ao mesmo tempo M2 tambm a um estado aceitador.
Para que isso acontea, fazemos aceitadores em M12 os estados compostos por estados
aceitadores, isto , os estados (qi, pj) tais que qi aceitador em M1 (qiF1) e pj aceitador em
M2 (pjF2).
Deste modo o DFA M12 aceita todas as cadeias, e s essas, wL1L2.
Alternativamente a esta demonstrao construtiva, a usando os nossos conhecimentos de
lgica, poderemos usar a Lei de DeMorgan
L1 L2 = L1 L 2
Se L1 regular, tambm o o seu complemento. Se L2 regular, tambm o o seu
complemento. Se os dois complementos so regulares, tambm o a sua unio. Se a unio
regular, tambm o o seu complemento. Logo a interseco regular.
vi) Quanto diferena, escrevamo-la de outra forma
L1 L2 = L1 L 2
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
158
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
159
Teoria da Computao
*2
h
a
01
h
11
101
c
1
1
2
O NFA obtido aceita a linguagem que resulta da original depois do homomorfismo h, que
por isso mesmo uma linguagem regular.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
160
Teoria da Computao
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.
L1/L2
x
L1
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
161
Teoria da Computao
(neste caso regulares), isto , se existir um algoritmo para ela. Veremos de seguida algumas
dessas questes fundamentais.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
162
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
163
Teoria da Computao
Por exemplo, num grafo de transio com n vrtices, qualquer caminho de comprimento igual
ou superior a n tem que repetir algum vrtice, isto , tem que conter um ciclo. Se cada estado
for considerado uma gaiola, ele ter mais de uma passagem.
Exemplo 4.4.1. Seja L=L(aba*b)
O seu NFA fcil de desenhar (Figura 4.4.2) :
a
a
A cadeia abb leva o DFA do estado inicial ao final aceitador, passando uma vez em cada
estado. O caminho abaab passa duas vezes no estado 3. Qualquer caminho aceitador maior
passar mais vezes em 3. Temos aqui uma ilustrao do princpio do pombal.
Considere-se a cadeia abab de L. Poderemos decomp-la em trs partes - x, y e z- da
seguinte forma:
Tabela 4.4.1
ab a
x
b
z
Se tivermos agora a cadeia abaab tambm a poderemos decompor em trs partes mas de
modo ligeiramente diferente,
Tabela 4.4.2
ab aa b
x
y2
e abaaab
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
164
Teoria da Computao
Tabela 4.4.3
ab aaa b
x
y3
E assim sucessivamente, qualquer cadeia aceite se pode decompor em trs partes xyiz como
na Tabela 4.4.4 seguinte:
Tabela 4.4.4
i
w=xyiz
abb
a
b
m
abab
a b
abaab
abaaab
abaaaab
qk F
q0
Figura 4.4.3. A decomposio para o exemplo
1. Nesta decomposio x=ab, z=b.
Podem-se desenhar os caminhos correspondentes, como na figura 4.4.3: partindo de q0,
com o segmento ab chega-se ao ponto (estado) m; a podem-se tirar as da cartola, tantos
quantos se quiser, ou, dito de outro modo, podem-se bombear as de um poo sem fundo, at
que decidimos prosseguir, percorrendo o segmento b at ao fim. Todas as cadeias bombeadas
(isto , no caso com as bombeados) pertencem linguagem, dado que levam ao estado
aceitador
Analisemos em detalhe a decomposio xyz das cadeias desta linguagem. Ela possvel
para qualquer cadeia da linguagem de comprimento igual ou maior do que 4 (abab, abaab,
). A decomposio verifica as condies seguintes:
w=xyz
com
|xy|=aba = 3
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
165
Teoria da Computao
e
|y| = 1
Se bombearmos y obtemos
wi=xyiz
a cadeia wi pertence a L para todo o i=0, 1, 2, ...
Se m for o comprimento da menor cadeia que contm uma vez o ciclo, neste caso m=4 e
|xy| = 3 m.
Pode-se fazer uma construo semelhante para uma qualquer linguagem regular infinita.
Como representada por um autmato finito, para ser infinita tem que ter cadeias
arbitrariamente grandes, e portanto tem que ter pelo menos um ciclo que o permita.
Exemplo 4.4.2.
Seja a linguagem L=abb(baa)*bb regular e infinita.
a
1
b
2
b
7
Se olharmos atentamente para o NFA verificamos que o nico ciclo existente 4-5-6. Ser
a que se faz a bombagem. Bombeia-se bab um nmero arbitrrio de vezes. A decomposio
xyz neste caso tem y=bab. As outras partes sero x=abb, z=bb. Por outro lado a menor cadeia
que contm xy abbbaabb e portanto m= 8.
Existe assim uma decomposio que verifica as condies seguintes:
w=xyz
com
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
166
Teoria da Computao
|xy|=abbbaa = 6 m
e
|y| = 3
Se bombearmos y obtemos
wi=xyiz
a cadeia wi pertence a L para todo o i=0, 1, 2, ...
Exemplo 4.4.3
No caso da linguagem regular L=a(abb)*bb(baa)*bb, cujo grafo do NFA o da Fig 4.4.5,
b
7
a
a
existem dois ciclos que fazem a linguagem infinita. Se procurarmos uma decomposio xyz
das cadeias da linguagem onde possamos fazer a bombagem, encontraremos duas
possibilidades, conforme o ciclo que escolhermos:
- escolhendo o 1 ciclo, ser xyz= a(abb)bbbb ou a(abb)bbbaabb ou a(abb)bb(baa)2bb
Tabela 4.4.6
x
abb
bbb
abb
bbbaabb
abb
bbbaabaabb
abb
Documento de trabalho
167
Teoria da Computao
abb
baa
bb
aabbbb
baa
bb
aabbabbbb
baa
bb
aabbabbabbbb baa
temos agora que y e z so bem definidos mas x pode ter muitas composies.
Para todas as cadeias da linguagem de comprimento maior do que 8 existe pelo menos um
ciclo. Para que uma cadeia contenha os dois ciclos pelo menos uma vez, ter um comprimento
de pelo menos 11. Podemos assim afirmar que para todas as cadeias maiores do que 11 existe
pelo menos uma decomposio xyz que verifica as propriedades
w=xyz
com
|xy| 11
e
|y| 1
Se bombearmos y obtemos
wi=xyiz
a cadeia wi pertence a L para todo o i=0, 1, 2, ...
Estamos agora em condies de enunciar esse to famoso quanto incompreendido lema da
bombagem para linguagens regulares.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
168
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
169
Teoria da Computao
w=xyiz
aaba
aaba
aaaba
aaaaba
aaaaaba
cadeias que pertencem todas a L.
Para cadeias de L maiores do que 5, por exemplo aaaaba, aabababa, pode-se sempre fazer
a decomposio com x=a, y=a, de tal modo que bombeando o y se obtm cadeias da
linguagem para todo o valor de i.
No entanto esta linguagem livre de contexto no regular, como veremos posteriormente.
O leitor pode tentar desenhar um autmato finito, ou escrever uma expresso regular para ela
que no conseguir faz-lo devido ao termo aqbq que tem forosamente um nmero de as
igual ao nmero de bs . Por isso as linguagens regulares so um subconjunto das linguagens
que verificam o Lema da Bombagem.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
170
Teoria da Computao
Linguagens
que verificam
o Lema da
Bombagem
Linguagens
regulares
Figura 4.4.6. As linguagens regulares verificam o Lema da Bombagem. Mas h outras, no regulares,
que tambm o verificam.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
171
Teoria da Computao
Tabela 4.4.9.
O Lema pela afirmativa
- existe um m tal que para
pertencente a L em que
- uma decomposio xyz que produz, pela - qualquer decomposio xyz produz, pela
bombagem de y, |xy|m
- todas cadeias pertencentes a L
bombagem de y, |xy|m
- (pelo menos) uma cadeia que no pertence
linguagem
i 0, xyiz L
i 0, xy z L
i
O que temos ento que provar, para uma linguagem qualquer, a fim de podermos concluir
que no regular, tudo o que se encontra na segunda coluna desta Tabela 4.4.9.
A prova pode transformar-se num jogo entre duas pessoas, tal como na Tabela 4.4.10.
Tabela 4.4.10. O jogo do lema da bombagem
Jogador 1
Jogador 2
Define a linguagem L
Escolhe um m
Indica uma cadeia de L
Define uma decomposio |xy|m
Indica um i que bombeie para fora
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
172
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
173
Teoria da Computao
E para um m qualquer eu escolho a cadeia ambm. Qualquer decomposio xyz bombeia para
fora da linguagem.
Exemplo 4.4.6.
Seja o alfabeto ={0} e a linguagem composta por cadeias apenas de zeros e com um nmero
de zeros igual sequncia dos quadrados perfeitos, isto 0, 1, 4, 9, 16, , ou seja, L= {0i2, i
N}.
Vejamos outra perspectiva da prova, que no recorre directamente ao Lema da Bombagem,
mas ainda assim prova por contradio.
Admitamos que a linguagem regular. Existe por isso um NFA que a aceita. Seja n o seu
nmero (finito) de estados. Ora este NFA tem que aceitar a cadeia com n2 zeros. Mas como
tem apenas n estados, para ler esta cadeia toda tem que passar pelo menos duas vezes por um
estado, isto , tem que ter um percurso fechado, um anel, que passa pelo menos em um
estado. Assim pelo facto indiscutvel de que n2>n , h pelo menos dois estados iguais desde o
incial q0 at ao final aceitador qn2. Sejam eles qi e qj, definindo-se i-j= p n. O anel da figura
tem comprimento p. Mas se dermos duas voltas ao anel, a cadeia resultante tambm ser
aceite pela DFA. Essa cadeia ter ( n2+p) zeros. Ser este um quadrado perfeito ? Se for bem
faz o autmato em a aceitar. Mas se no for ela no pertence linguagem.
q i = qj
Anel de
comprimento p
qn2 F
q0
Depois de n2, o prximo quadrado perfeito (n+1)2=n2+2n+1. Ora n2+p < n2+2n+1 porque
p n e por isso n2+p no um quadrado perfeito e portanto no pertence linguagem.
Logo no pode existir um tal NFA, ou seja, a linguagem no pode ser regular.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
174
Teoria da Computao
Esta prova geomtrica bastante intuitiva. Se quisermos uma prova baseada no lema da
bombagem, poderemo-nos inspirar na prova grfica.
A contraprova aqui tem que procurar destruir a caracterstica essencial da linguagem: os
quadrados perfeitos dos seus zeros.
Se me ds um certo m, apresento-te a cadeia com um nmero de zeros igual ao quadrado
perfeito m2. Fazendo agora uma decomposio xyz, tal que |xy|m, bombeando y, obtm-se
sempre, qualquer que seja y, cadeias com um nmero de zeros que no um quadrado
perfeito. Isto , bombeia-se para fora (embora para algumas bombagens se possa
eventualmente fazer para dentro). De facto, o y ficar sempre nos primeiros m zeros, e ter no
mximo m zeros (nesta caso x vazia). Analise-se este caso, em que y fica com os m zeros.
Bombeando uma vez, o nmero total de zeros ser m2+m. Ora m2+m no um quadrado
perfeito; se fosse m2+2m+1 s-lo-ia porque seria (m+1)2. Isto basta para negar o Lema da
Bombagem e concluir que a linguagem no regular.
Exemplo 4.4.7
p
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
175
Teoria da Computao
Exerccio 4.4.1.
Provar que a linguagem L={ww, w , } no regular.
O Lema da Bombagem por alguns considerado um dos mais interessantes tpicos em
Teoria da Computao. O Professor Harry Mairson, da Universidade de Brandeis (
http://www.cs.brandeis.edu/~mairson/poems/node1.html) dedica-lhe mesmo um inspirado
poema, que aqui se reproduz com autorizao.
by Harry Mairson
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
176
Teoria da Computao
Outros exemplos
0n1m, n>m
Para qualquer m que me ds apresento a cadeia 0m+11m, que pertence linguagem e maior
do que m. A decomposio xyz tem que ser feita de tal modo que o y composto apenas por
zeros (pelo menos um zero). Bombeando com i=0 apaga-se um 0 e ficando n=m e destruindose assim a condio n>m
Normalmente em problemas deste tipo, com um desigualdade, segue-se esta estratgia:
escolhe-se uma cadeia legtima no limite da desigualdade e depois apaga-se uma parte,
bombeando y0 de modo a destruir a desigualdade.
Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Introduction to Automata Theory, Languages and Computation, 2nd
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
177
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
178
Teoria da Computao
CAPTULO 5
5.1. Introduo
181
181
183
188
190
5.3. Parsing
194
5.3.1.Parsing e ambiguidade
194
203
210
Biliografia
211
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
179
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
180
Teoria da Computao
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.
na parte direita existe apenas uma varivel na posio mais esquerda ou mais
direita.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
181
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
182
Teoria da Computao
abbbaabbaabbaabbaaBbabababa abbbaabbaabbaabbaabbAababababa
abbbaabbaabbaabbaabbababababa
No fcil, olhando para as produes, generalizar a forma das cadeias obtidas pela
gramtica. Fazendo uma anlise experimental, produzindo cadeias de vrios comprimentos,
ou construindo uma rvore de derivao, verifica-se que L(G)= {ab(bbaa)nbba(ba)n : n 0 }.
Exemplo 5.2.3.
Mostrar que a linguagem L = {anbm : n m } livre de contexto. Note-se que pela definio
da linguagem o nmero de as tem que ser diferente do nmero de bs.
Para isso tem que se encontrar uma gramtica livre de contexto que a produza. Para o caso
n = m viu-se no exemplo 1.3.2 do Cap. 1, obtendo-se
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
183
Teoria da Computao
G =({S}, {a,b}, S, P)
S aSb|
Seja agora o caso n > m.
Primeiro forma-se uma cadeia com um nmero igual de as e de bs; de seguida
acrescente-se um a adicional esquerda. Para isso usam-se aquelas produes do caso n=m e
alm disso uma para introduzir um ou mais as adicionais:
S AS1,
S1 aS1b | ,
A aA | a
Note-se que a segunda produo gera um nmero igual de as e de bs. A ltima acrescenta
as esquerda. A primeira, ao criara o A logo de incio, torna possvel a ltima.
Esta gramtica no linear porque na primeira produo aparecem duas variveis no lado
direito. Mas livre de contexto porque do lado esquerdo aparece s uma varivel.
Tomemos agora o caso n < m. Aqui temos uma situao contrria anterior: introduzemse tantos as como bs e depois introduzem-se direita um ou mias bs. Teremos as produes
S S1B,
S1 aS1b | ,
B Bb | b.
Para o caso n m, juntam-se os dois conjuntos de produes, obtendo-se:
S AS1| S1B,
S1 aS1b | ,
A aA | a,
B Bb | b.
Note-se que para juntar os dois conjuntos de produes basta pr as duas primeiras
alternativas a partir de S.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
184
Teoria da Computao
Exemplo 5.2.4
Considere-se a gramtica com produes
S aSb | SS |
Trata-se de uma gramtica livre de contexto e no linear (porqu?).
Algumas cadeias geradas:
S SS SSSS aSbaSbaSbaSb abababab
S aSb aSSb aaSbSb aaaSbbaSbb aaaSSbbaaSbbb
aaaaSbaSbbbaaSbbb aaaababbbaabb.
Gera cadeias com um nmero de as igual ao nmero de bs (porqu ?) e em que o nmero
de as em qualquer prefixo de qualquer cadeia maior ou igual ao n de bs, i.e.
L = {w {a,b}* : na(w) = nb(w) e na(v) nb(v), v um prefixo qualquer de w}
e em que o nmero de bs em qualquer sufixo de qualquer cadeia maior ou igual ao n de
as, i.e.
L = {w {a,b}* : na(w) = nb(w) e na(u) nb(u), u um sufixo qualquer de w}
Substituindo a por parntese esquerda e b por parntese direita, obtm-se a linguagem
para descrever a regra dos parnteses nas linguagens de programao. Ela contm por
exemplo os casos (), (()), ((()())), ()()()(); etc. Esta situao dada pela gramtica
G=({S}, {(,)}, S, P)
com produes
S (S) | SS |
Uma derivao ser
S (S) (SS) ((S)S) (( )S) (( ))
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
185
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
186
Teoria da Computao
6. V y
7. V z
Como se poder gerar x+(y-z) ?
EE+E
(prod. 1)
V+E
(prod. 4)
x+E
(prod. 5)
x + (E)
(prod. 3)
x + (E - E) (prod. 2)
x + (V - E) (prod. 4)
x + (y - E) (prod. 6)
x + (y - V) (prod. 4)
x + (y - z) (prod. 7)
Exerccio 5.2.1.
Considere a gramtica com as produes
S 0B | 1A
A 0 | 0S | 1AA
B 1 | 1S | 0BB
Gere cinco cadeias com a gramtica. Que linguagem lhe est associada?
5.2.2. Derivao pela extrema direita e pela extrema esquerda
Nas gramticas livres de contexto no lineares aparece mais do que uma varivel na parte
direita das produes. Tem-se por isso uma escolha na ordem pela qual se substituem as
variveis. Por exemplo,
G=({A,B,S}, {a,b}, S, P} com produes
1.
S AB
2.
A aaA
3.
4.
B Bb
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
187
Teoria da Computao
5.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
188
Teoria da Computao
Exemplo 5.2.7
Seja a gramtica com as produes
S aAB,
A bBb,
BA|
Ento
S aAB aA abBb abAb abbBbb abbbb
uma derivao pela direita e
S aAB abBbB abAbB abbBbbB abbbbB abbbb
uma derivao pela esquerda.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
189
Teoria da Computao
vrtice raiz
5 filhos da
raiz
vrtice interior
folha
A partir da raiz aplica-se a primeira produo, dando 5 filhos, dos quais 3 so folhas e 2
so vrtices interiores (variveis). Depois do vrtice A resulta a folha c pela segunda produo
e do vrtice B a folha pela terceira produo. Na rvore nada indica a ordem de aplicao
das segunda e terceira produes.
Uma rvore de derivao inicia-se na raiz, com o smbolo inicial (em geral S), e termina
em folhas que so terminais (smbolos do alfabeto). Em cada nvel mostra como se substitui
cada varivel nas derivaes. Quando um vrtice contm um smbolo terminal, dele no parte
qualquer aresta. Apenas dos vrtices com variveis, chamados vrtices interiores (no raiz),
partem arestas.
Vejamos a definio formal.
Definio 5.2.3. rvore de derivao
Seja G = (V, T, S, P) uma gramtica livre de contexto. Uma rvore ordenada uma rvore de
derivao para a gramtica G se e s se tiver as seguintes propriedades:
1. A raiz etiquetada pelo smbolo inicial, em geral S.
2. Todas as folhas tm uma etiqueta de T {}, isto , um smbolo terminal
3. Todos os vrtices interiores (vrtices que no so folhas) tm uma etiqueta de V,
i.e., uma varivel.
4. Se um vrtice tem uma etiqueta A V, e se os seus filhos so etiquetados (da
esquerda para a direita) a1, a2,..., an ento P deve conter a produo da forma
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
190
Teoria da Computao
A a1 a2 ..., an
em que ai pode ser um smbolo terminal ou uma varivel.
5. Uma folha etiquetada no tem irms, i.e., um vrtice com um filho no pode
ter outros filhos.
Se uma rvore verifica as propriedades 3, 4 e 5, mas a propriedade 1 no se verifica
necessariamente e a propriedade 2 substituda por
2a. Todas as folhas tm etiquetas de V T {}, i.e., uma varivel ou um smbolo
terminal,
diz-se uma rvore de derivao parcial, sendo parte de uma rvore maior. Isto , se
extrairmos de uma rvore de derivao uma sub-rvore interior, esta ser uma rvore de
derivao parcial, podendo ter variveis nas folhas. Uma rvore de derivao parcial deriva
formas sentenciais e pode no derivar cadeias terminais. Pelo contrrio uma rvore de
derivao total d sempre cadeias terminais. Uma rvore de derivao por defeito total, e
portanto no necessrio adjectiv-la.
Lendo as folhas da rvore, da esquerda para a direita, omitindo quaisquer que se
encontrem, obtm-se o fruto (yield) da rvore. O fruto a cadeia de terminais obtida quando
se percorre a rvore de cima para baixo, tomando sempre o ramo inexplorado mais
esquerda.
Exemplo 5.2.8
Seja a gramtica G=({S,A,B}, {a,b}, S, P} com produes
S aAB,
A bBb,
BA|
A rvore de derivao parcial da Fig. 5.2.2 corresponde a
S aAB abBbB
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
191
Teoria da Computao
A
b
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
192
Teoria da Computao
Podemos ver que uma rvore de derivao est ligada a uma derivao particular e no
um esquema geral de derivaes para uma dada gramtica. Cada cadeia ter a sua rvore de
derivao prpria. Alm disso a rvore exprime uma derivao pela direita ou uma derivao
pela esquerda.
Dada uma gramtica livre de contexto G=(V, T, S, P), para toda a cadeia w L(G), existe
uma rvore de derivao de G cujo fruto w. Basta desenh-la aplicando as produes que
geraram w.
Inversamente, o fruto de qualquer rvore de derivao, desenhada de acordo com as
produes de P, pertence L(G).
Por outro lado se tG alguma rvore de derivao parcial de G cuja raiz est etiquetada por
S, ento o fruto de tG uma forma sentencial da gramtica G.
O leitor pode ver uma prova formal por induo destas afirmaes em Linz p. 132.
As rvores de derivao evidenciam as produes usadas na obteno de uma qualquer
cadeia, mas no explicitam a ordem da sua aplicao. Qualquer cadeia wL(G) tem uma
derivao pela extrema esquerda e uma derivao pela extrema direita. Este facto interessante
constata-se observando que a rvore tanto pode ser desenhada da esquerda para a direita
(produes pela esquerda) como da direita para a esquerda (produes pela direita).
As rvores de derivao, na literatura de lngua inglesa (por exemplo em Hopcroft, ou em
Sipser), so chamadas parse trees. Elas mostram como os smbolos terminais de uma cadeia
se agrupam em sub-cadeias, cada uma das quais pertence linguagem de uma das variveis
da gramtica, isto , ao conjunto das cadeias gerveis a partir de uma varivel da gramtica
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
193
Teoria da Computao
5.3. Parsing
Dada uma gramtica qualquer, sabemos gerar cadeias da sua linguagem, aplicando as suas
produes. As cadeias geradas pertencem linguagem da gramtica.
Mas podemos agora considerar a questo inversa. Dada uma cadeia w, como saber se ela
pertence a uma certa linguagem L(G) ? Este o problema da pertena, que j conhecemos
das linguagens regulares.
E se a cadeia pertence linguagem, qual a sequncia de produes que a gerou? Este o
problema de parsing : encontrar uma sequncia de produes pelas quais se deriva wL(G).
O conceito de parsing, uma palavra difcil de traduzir, aplica-se no estudo das linguagens
naturais (ver por exemplo em http://nltk.sourceforge.net/doc/en/parse.html) e nas linguagens de
computador. Os compiladores quando analisam um programa escrito numa dada linguagem,
fazem precisamente isso: procuram a sequncia de produes da gramtica da linguagem que
levou ao programa concreto. Se no a encontram, indicam erro. Se a encontram, a compilao
bem sucedida.
5.3.1. Parsing e ambiguidade
O parsing uma operao delicada, que tem absorvido uma parte significativa da investigao
em computao a nvel mundial. Se imaginarmos que os programas de computador so cada
vez maiores, fazer o seu parsing em tempo til (para o compilar depois) um desafio para o
qual ainda hoje se procuram respostas melhoradas. As tcnicas de parsing baseiam-se na
teoria de grafos e seus algoritmos (por isso a teoria de grafos um dos mais importantes
temas matemticos das cincias da computao).
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
194
Teoria da Computao
Dada uma cadeia w em L(G) pode-se fazer o seu parsing por procura exaustiva,
construindo sistematicamente todas as derivaes possveis (pela esquerda, por exemplo) e
verificando se se obtm a procurada w ou no. Esta tcnica executa-se por voltas sucessivas,
at que se encontre uma resposta. Procede-se do modo seguinte.
1 volta - analisar as produes do tipo
Sx
encontrando todas as formas sentenciais e cadeias x que se podem obter de S em um passo.
Alguma w? Se sim parar
2 volta aplicar todas as produes possveis varivel mais esquerda em cada forma
sentencial x da 1 volta, obtendo-se um conjunto de formas sentenciais alcanveis em dois
passos.
Alguma w ?
3 volta aplicar todas as produes possveis varivel mais esquerda em cada forma
sentencial obtida da 2 volta, obtendo um novo conjunto de formas sentenciais alcanveis em
trs passos.
Alguma w ?
e assim sucessivamente.
Se w L(G), deve ter uma derivao de extrema esquerda de comprimento finito. Por isso
este mtodo exaustivo h-de encontrar a soluo, se ela existir.
Trata-se de um mtodo de parsing de cima-para-baixo, que pode ser visto simplesmente
como a construo da rvore de derivao para baixo a partir da raiz.
Exemplo 5.3.1
Seja a gramtica com as produes
S SS | aSb | bSa | .
Fazer o parsing da cadeia w = aabb.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
195
Teoria da Computao
SS
aSb
bSa
Nenhuma cadeia produzida w. Podem-se desde j eliminar as folhas de bSa (dado que w
se inicia por a) e (dado que |w|>0). Em cada etapa segue-se apenas por onde possa estar a
soluo. Caminhos que se sabe serem estreis no de prosseguem.
Note-se a diferena entre rvore de derivao (ou rvore de parsing) , que vimos atrs, e
esta rvore de procura de cadeias. Os filhos da raiz so as produes alternativas a partir de S,
e portanto as suas etiquetas so formas sentenciais ou sentenas (da a sua forma rectangular
para distinguir dos crculos da rvore de derivao). Por outro lado esta rvore de procura
bastante genrica e no afecta apenas a uma cadeia (embora se v particularizando media
que se prossegue, pelo abandono de caminhos inexequveis).
2 volta: a partir dos vrtices restantes da etapa 1, gerar todos os filhos possveis, usando
uma e uma s produo pela esquerda. Por exemplo em SS substitui-se apenas o primeiro S.
S
SSS
aSbS
bSa
aSb
SS
bSaS
aSSb
aaSbbb
abSab
ab
Nenhuma cadeia w. Podem-se desde j eliminar as folhas que comeam por b ou cujo
segunda carcter b.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
196
Teoria da Computao
3 volta: prossegue-se a partir de cada vrtice da 2volta, com produes pela esquerda.
S
SSS
SSSS
aSSbS
aSbS
aSbSS
aaSbbS
bSa
aSb
SS
bSaS
bSaSS
SS
abSabS
aSSb
aaSbSb
aSSSb
abbS
aaSbb
aaSSbb
abSab
ab
abSaSb
aSb
aaaSbbb
aabSabb
aabbb
E encontrou-se finalmente a cadeia aabb. A sua derivao est identificada. O seu parsing
est concludo. Ela foi produzida pelo caminho assinalado a tracejado.
SaSbaaSbbbaabb
Como se pode ver, o parsing exaustivo tem algumas desvantagens. Se a cadeia fosse muito
grande, a rvore de procura seria tambm muito grande. Alm disso um processo fastidioso,
parecido com os mtodos de fora bruta que consistem em experimentar todas as
alternativas possveis para um problema. Por isso um processo pouco eficiente, e nenhum
compilador o usa hoje em dia. Tem apenas um interesse didctico, ajudando-nos a perceber a
essncia do processo de parsing.
Tem alm disso um problema maior: pode nunca terminar se a cadeia no est na
linguagem (verificar neste caso o que acontece para w= abb), a menos que se introduza um
mecanismo de paragem ao fim de certo tempo.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
197
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
198
Teoria da Computao
Tambm
aqui
as
formas
sentenciais
vo
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
199
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
200
Teoria da Computao
Definio 5.3.2. Uma gramtica livre de contexto G = (V, T, S, P ) uma gramtica simples
ou uma s-gramtica se todas as suas produes se iniciam por um smbolo terminal seguido
de zero ou mais variveis, ou seja, se so da forma
A ax
em que AV, aT, xV*, e qualquer par (A, a) aparece no mximo uma vez em P.
Em cada produo substitui-se uma varivel por um smbolo terminal e uma combinao
de variveis. Assim aumenta-se, por cada produo, exactamente em uma unidade o nmero
de caracteres terminais em cada forma sentencial. Ao fim de |w| produes j se introduziram
|w| smbolos terminais e portanto j se encontrou a cadeia se ela pertence linguagem. Podese parar ao fim de |w| voltas e por isso o nmero de voltas cresce linearmente com |w|.
Exemplo 5.3.3.
A gramtica com as produes
S aS | bSS | c
uma s-gramtica.
Uma produo possvel ( direita):
S aS abSS abSaS abSac abcac
Para se introduzir a, b ou c na forma sentencial h apenas uma possibilidade em cada volta.
A gramtica com produes
S aS | bSS | aSS | c
no uma s-gramtica porque o par (S, a) aparece nas duas produes S aS e S aSS.
Uma produo possvel:
S aS abSS abSaSS abSaSbSS abSaSbSc abSaSbcc abSacbcc abcacbcc
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
201
Teoria da Computao
Aqui tambm o nmero de caracteres terminais aumenta em uma unidade por cada
produo. Para se introduzir a na forma sentencial h duas possibilidades (duas produes
possveis) e da o facto de o processo de parsing ser mais longo.
Muitas caractersticas de linguagens de programao podem ser descritas por s-gramticas.
Um parsing numa s-gramtica pode ser feito em |w| voltas, e por isso o seu tempo linear
com o tamanho da cadeia.
Exemplo 5.3.4
Seja a gramtica livre de contexto j encontrada no exemplo 5.2.6 (no uma s-gramtica).
EE+E
E E - E
E (E)
EV
Vx
Vz
V y
Como se pode derivar a cadeia x+(y-z)?
Desenhe-se a rvore de derivao, na Figura 5.3.4.
A cadeia x + (y - z) encontra-se lendo as folhas da rvore da esquerda para a directa. Ela o
fruto da rvore.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
202
Teoria da Computao
EE+E
V+E
x+E
x + (E)
x + (E - E)
x + (V - E)
x + (y - E)
x + (y - V)
x + (y - z)
Definio 5.3.3
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
203
Teoria da Computao
Uma gramtica livre de contexto ambgua se existir alguma cadeia w L(G) que tem pelo
menos duas rvores de derivao possveis. A ambiguidade implica a existncia de duas ou
mais derivaes de extrema esquerda ou de extrema direita.
Exemplo 5.3.5(Linz) :
Seja a gramtica com produes
S aSb | SS |
construir a rvore de parsing de aabb.
H vrias possibilidades:
i)
S aSbaaSbbaabb
ii)
S SSaSbSaaSbbSaabbSaabb
iii) S SSSaSbSaaSbbSaabbaabb
A que correspondem as rvores seguintes, Fig. 5.3.5.
S
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
204
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
205
Teoria da Computao
Vamos desenvolver a gramtica que produz cadeias do tipo (a+b)*c, a+b*c, a+b+c,
Trata-se de uma gramtica de expresses aritmticas, do tipo das usadas por linguagens de
programao), em verso muito simplificada, considerando apenas os operadores adio + e
multiplicao * . Os argumentos dos operadores so identificadores, e estes podem ser neste
exemplo a, b ou c.
Necessitamos de duas variveis nesta gramtica. A varivel E representa as expresses; o
smbolo inicial. A varivel I representa os identificadores. Teremos assim a gramtica G= {V,
T, E, P} com
V={E, I}
T={a, b, c,+, *, (, )} e as produes
P:
P1.
EI
P2.
EE+E
P3
EE*E
P4
E (E)
P567 I a | b | c
Para derivar a cadeia a+b*c podem-se seguir duas rvores de derivao, Fig. 5.3.7
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
206
Teoria da Computao
ET
P2.
TF
P3.
FI
P3.
EE+T
P4
T T* F
P5
F (E)
P678 I a | b | c
Agora para derivar a mesma cadeia a+b*c teremos a rvore da Fig. 5.3.8.
O leitor pode tentar uma outra rvore de derivao desta cadeia. No a encontrar porque a
gramtica no ambgua. Note-se que este problema de saber se uma gramtica ou no
ambgua no tem ainda uma soluo geral; s para algumas gramticas, por anlise prpria, se
pode obter a resposta.
Esta gramtica produz a mesma linguagem da gramtica ambgua e nesse sentido as duas
so equivalentes. No entanto podem produzir resultados de compilao diferentes.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
207
Teoria da Computao
Exemplo 5.3.7
Se quisermos uma gramtica no-ambgua de expresses aritmticas com identificadores mais
gerais, podendo conter as, bs, cs, 0s e 1s, mas iniciando-se sempre por uma das letras (a
linguagem dos identificadores a da expresso regular (a+b+c)(a+b+c+0+1)* ), basta
substituir na gramtica anterior as produes P678 por I a | b|c| Ia | Ib|Ic | I0|I1|, obtendose a gramtica escrita em forma compacta seguinte (Hopcroft, 172):
ET | E+T
TF | T*F
FI | (E)
I a | b | c | Ia | Ib | Ic | I0 | I1
H gramticas ambguas que se podem tornar em gramticas no ambguas por pequenas
alteraes na sua estrutura, como foi o caso deste exemplo. Nem sempre assim acontece. De
facto h linguagens que so elas mesmas ambguas e por isso no possvel encontrar para
elas uma gramtica no ambgua.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
208
Teoria da Computao
Definio 5.3.4
Se L uma linguagem livre de contexto para a qual existe uma gramtica no ambgua, ento
L diz-se no ambgua. Se toda a gramtica que gera L ambgua, neste caso a linguagem
diz-se inerentemente ambgua.
Exemplo de linguagem inerentemente ambgua (Hopcroft, 212)
L = {anbncmdm, n 1, m 1) {anbmcmdn, n 1, m1}
Esta linguagem composta por todas as cadeias a+b+c+d+ tal que
i) ou existem tantos as e bs e tantos cs e ds
ii) ou existem tantos as e ds e tantos bs e cs
Esta linguagem livre de contexto.
Uma gramtica para ela:
i) Para anbncmdm
S AB
A aAb | ab
B cBd | cd
ii) Para anbmcmdn
SC
C aCd | aDd
D bDc | bc
Juntando agora as duas partes atravs da produo S AB | C vem
S AB | C
A aAb | ab
B cBd | cd
C aCd | aDd
D bDc | bc
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
209
Teoria da Computao
Esta gramtica ambgua. A cadeia aabbccdd pode gerar-se por duas derivaes de
extrema esquerda,
1. S AB aAbB aabbB aabbcBd aabbccdd
2. S C aCd aaDdd aabDcdd aabbcdd
cujas rvores de parsing so as seguintes Fig 5.3.9 3 5.3.10 (com folhas simplificadas):
Figura 5.3.9
Figura 5.3.10
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
210
Teoria da Computao
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
BNF significa Backus Naur Form.Para mais informao ver por exemplo http://cui.unige.ch/dbresearch/Enseignement/analyseinfo/AboutBNF.html.
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
211
Teoria da Computao
LEI/DEI/FCTUC/2009/@ADC
Documento de trabalho
212
Teoria da Computao
CAPTULO 6
6.1 Introduo
215
215
216
217
218
223
228
233
233
240
Bibliografia
243
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
213
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
214
Teoria da Computao
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).
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
215
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
216
Teoria da Computao
produo da forma
A x1Bx2.
sendo A e B variveis distintas.
Seja
B y1 | y2 | ... | yn
o conjunto de todas as produes em P que tm B como lado esquerdo. Se A produz uma
forma sentencial contendo B e se B produz diversas formas ento pode-se ir directamente de A
para estas formas, eliminando B, que deixa por isso de ser necessria.
A nova gramtica ser G= {V, T, S, P}, em que P se constri de P
A x1Bx2
eliminando a produo
Ter-se- a igualdade
L(G) = L(G)
Este teorema est demonstrado em Linz, p. 151. No entanto ele bastante intuitivo. Se de A
se vai para B e de seguida de B se pode ir para vria destinos, quer dizer que de A se pode ir
tambm para vrios destinos, indirectamente atravs de B. Mas se assim poderemos colocar
esses destinos directamente em A, eliminando B que tem um papel de mero intermedirio
Tem que se ter cuidado em no perder nenhum dos destinos originariamente possveis.
Exemplo:
S aAb
A ab|a|b|
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
217
Teoria da Computao
Substitui-se por
S aabb|aab|abb|ab
Que produz as mesmas 4 cadeias.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
218
Teoria da Computao
S xAy w
com x, y em (VT)*.
Uma varivel til se ocorrer pelo menos numa derivao, isto , se contribuir pelo menos
para a derivao de uma sentena. Caso contrrio intil. Uma produo intil se envolve
alguma varivel intil.
Uma varivel pode ser intil por duas razes:
i)
nunca pode ser alcanada a partir da varivel de incio, como por exemplo o B
em
SA
A aA |
B bA
ii)
no pode derivar uma cadeia terminal (sentena) porque cria um ciclo infinito,
com por exemplo a varivel A em
S aSb | | A,
A aA
Documento de trabalho
219
Teoria da Computao
S aS | A | C
Aa
B aa
C aCb
reduz-se simplesmente a
S aS | A
Aa
De facto, por inspeco visual, verifica-se que a varivel C intil (cria um ciclo infinito)
e deve ser eliminada, bem como todas as produes em que entra. A varivel B nunca
alcanvel a partir de S, e portanto tambm intil. Ficam apenas as produes que contm S
ou A.
Estes exemplos so muito simples e resolvem-se por mera inspeco visual. Em gramticas
maiores e mais complicadas necessrio um procedimento algortmico para a remoo das
produes inteis, que tem as seguintes etapas.
Etapa A - Construo de uma gramtica intermdia cujas variveis so todas teis. Seja V1
conjunto das variveis teis. Inicialmente est vazio, , e vai-se enchendo em voltas
sucessivas.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
220
Teoria da Computao
1. V1 = , inicializao
2. Se A x1 x2 x3...xm com xi V1T, colocar A em V1.
Na 1 volta s entram em V1 variveis que tenham do lado direito apenas smbolos
terminais. De facto neste instante V1 est vazia e portanto V1T=T.
Na 2 volta e seguintes entram as que tenham do lado direito smbolos terminais
e/ou variveis j includas em V1 nas voltas anteriores.
At que no se possam meter mais variveis em V1.
Depois de completado este processo, todas as variveis que possam gerar cadeias
terminais esto em V1. Por outro V1 s contm variveis teis. Ver uma
demonstrao mais formal em Linz, p. 155.
3. As produes P1 da gramtica intermdia so todas as produes da gramtica
original cujos smbolos esto todos em V1T (i.e., todas as suas variveis esto
em V1). Se houver uma varivel que no esteja em V1, ela no produz qualquer
cadeia final, e ser portanto intil e prejudicial. Portanto todas as produes que
tm estas variveis inteis so eliminadas na etapa A.
Etapa B. A partir da gramtica intermdia obtm-se a gramtica final.
Alm das produes j eliminadas na etapa A, pode haver outras que sejam
inteis, no por serem prejudiciais, mas por serem inalcanveis.
Encontrem-se por isso todas as variveis que no podem ser alcanadas a partir de
S e eliminam-se, bem como as suas produes. Para isso usa-se o grafo de
dependncias como ferramenta auxiliar.
O grafo das dependncias tem um n para cada varivel ainda existente. Entre duas variveis
existe uma aresta se as duas esto em lados opostos da mesma produo, ou seja, se uma produz
a outra. Depois de desenhado o grafo, procuram-se os caminhos desde a varivel inicial S at
cada um das restantes variveis. Se entre S e uma varivel A no existe nenhum caminho, ento
A no alcanvel e deve ser eliminada, bem como todas as produes em que entre.
Exemplo 6.2.3.3
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
221
Teoria da Computao
V1={A, D}
2 volta
- como S A, S vai para V1
- como B aaD, B vai para V1
V1={S, A, B, D}
3volta
-no h mais variveis para introduzir em B
3. Gramtica intermdia G1 : produes de P1 so as produes originais cujos smbolos esto
todos em V1T (ou seja, todas as suas variveis esto em V1)
S aS | A
A a
B aaD
D bD|
Na segunda parte obtm-se a gramtica G final a partir da gramtica intermdia G1. Para isso
basta encontrar todas as variveis que no so alcanveis a partir de S. Depois eliminam-se
bem como todas as suas produes. Poderemos recorrer ao grafo de dependncias.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
222
Teoria da Computao
A
chama-se anulvel (nullable). De facto ela pode-se anular (eliminar) nas formas sentenciais
em que aparecer.
Se uma gramtica gera uma linguagem que no contm , isso no obriga a que a
gramtica seja desprovida de produes-. Por exemplo
S aA
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
223
Teoria da Computao
A aA|
gera a linguagem das cadeias de as, an, n1. No contm , embora a sua gramtica contenha
A. Quando tal acontece possvel eliminar as produes- da gramtica.
Neste caso, fazendo
S aA|a
A aA|a
obtm-se a mesma linguagem (confirme o leitor que assim ).
Tambm para eliminar as produes- necessrio um procedimento algortmico para os
casos mais complicados. Ele fundamentado no teorema seguinte:
Teorema 6.2.4.1.
Seja G uma gramtica livre de contexto tal que no pertence a L(G). Ento existe uma
gramtica equivalente G sem produes- que gera a mesma linguagem.
Demonstrao:
A demonstrao faz-se desenvolvendo o algoritmo que permite encontrar G:
1 etapa- Encontrar o conjunto VN das variveis anulveis, que est inicialmente vazio.
1. Para todo o A tal que existe A , incluir A em VN.
Estas so as variveis anulveis directamente, em um passo.
2. Para todo o B tal que existe a produo
B A1A2 .... An
com A1, A2, ..., An pertencentes todas a VN., incluir B em VN.
Estas so as variveis anulveis indirectamente, atravs de outras, em mais de um passo.
3. Repetir o passo 2 at que no seja possvel adicionar mais variveis a VN
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
224
Teoria da Computao
xi V T
tendo do lado direito caracteres terminais e/ou vrias variveis, podendo algumas
ser anulveis.
2. Colocar em P
- esta produo A x1x2...xm, m 1,
xi V T
- as que resultam desta pela substituio das suas variveis anulveis por em
todas as combinaes possveis : se xi e xj so anulveis, cria-se
(i) uma produo em que xi substituda por ,
(ii)outra em que xj substituda por , e
(iii) ainda outra em que xj e xj so ambas substitudas por .
-
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
225
Teoria da Computao
1 etapa:
1 volta A e B so directamente anulveis.
2volta Depois S tambm o , indirectamente atravs de A e B.
Portanto todas as variveis so anulveis.
2 etapa. Consideramos uma produo de cada vez
S AB desmultiplica-se em
S AB , a produo original
S A , fazendo B=
S B,
S ,
fazendo A=
fazendo A= e B=, mas este caso no se retm.
A aAA multiplica-se em
A aAA
A aA
Aa
B bBB multiplica-se em
B bBB
B bB
Bb
De modo que teremos, concluda a segunda etapa, a gramtica
S AB | A | B
A aAA | aA | a
B bBB | bB | b
sem variveis anulveis.
Estas produes no permitem derivar a cadeia vazia. E se tivermos o caso de uma CFL
com , como fazer ?
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
226
Teoria da Computao
donde
VN={B, C}
A BC
donde
VN={A, B, C}
VN={A, B, C}
Agora
3
No h mais
S aAbBc resulta em
A BC resulta em
LEI/DEIFCTUC/2009/@ADC
S aAbBc
S abBc
(anula A)
S aAbc
(anula B)
S abc
(anula A e B)
A BC
AC
(anula B)
AB
(anula A)
Documento de trabalho
227
Teoria da Computao
B bB resulta em
B bB
Bb
(anula B)
C D resulta em
CD
D c resulta em
Dc
A B
usando apenas produes unidade um par unidade.
Pares unidade em um passo encontram-se por inspeco visual. Mas numa gramtica com
muitas produes e um grande nmero de variveis, j no to evidente.
Neste caso para descobrir todos os pares unidade, entre as variveis de uma gramtica,
poderemos usar o seguinte algoritmo de induo (Hopcroft, p. 263):
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
228
Teoria da Computao
Base :
*
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
229
Teoria da Computao
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,
B A,
A B,
Figura 6.2.5.1 Grafo de dependncias das variveis de pares unidade do exemplo 6.2.5.1.
Vai-se de S a A atravs de B.
3 Adicionar a P todas as produes no unitrias de P
S Aa
B bb
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
230
Teoria da Computao
A a | bc
4 Introduzir as derivaes que substituem os pares unidade de P com produes de P, como
na tabela
Par unidade em P
Produo em P
A criar em P
B bb
S bb
B bb
A bb
A a | bc
B a | bc
A a | bc
S a | bc
S B
A B
B A
S A
Tabela 6.2.5.1.
Tem-se finalmente a nova gramtica simplificada
S Aa |bb | a | bc |
B bb | a | bc
A a | bc | bb
Exemplo 6.2.5.2. (Hopcroft, 263)
Seja a gramtica do exemplo 5.3.7 de criao de expresses numa linguagem de programao
em que os identificadores so definidos do modo seguinte: uma letra seguida por letras ou
nmeros; as letras so a e b e os nmeros 0 e 1, ou seja, o alfabeto ={0,1,a,b} . As
operaes aritmticas usadas so a multiplicao * e a soma +. As suas produes so
ET | E+T
TF | T*F
FI | (E)
I a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1
Vrias so produes unidade. Os pares unidade so:
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
231
Teoria da Computao
T
Fig. 6.2.5.1
Note-se que para alm destes pares unidade teremos ainda os da base do algoritmo de
Hopcroft. No grafo de dependncias representar-se-iam como arestas reflexivas em cada
vrtice (do vrtice para ele mesmo).
Atendendo ao grafo de dependncias, mais conveniente eliminar ao pares unidade
comeando pelo fim do grafo, neste caso pelo par (F,I), depois sucessivamente (T,F), (E,T):
(F,I) : FI resulta em F a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1
(T,F): TF resulta em T a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)
(E,T): ET resulta em E a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)|T*F
Juntando agora as produes no-unidade restantes, teremos as produes
Ea | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)|T*F | E+T
T a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 |(E)| T*F
Fa | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1 | (E)
I a | b | c | 0 | 1 | Ia | Ib | Ic | I0 | I1
equivalentes s originais, pois geram as mesmas expresses.
Juntando as trs operaes de simplificao que estudmos at aqui, poderemos enunciar o
teorema seguinte.
Teorema 6.2.5.2
Seja L uma linguagem livre de contexto que no contm qualquer . Ento existe uma
gramtica livre de contexto que gera L e que no contm
-
produes inteis
produes-
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
232
Teoria da Computao
produes-unidade
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
233
Teoria da Computao
Esta gramtica ou aumenta em uma unidade em cada produo o tamanho das formas
sentenciais, ou substitui uma varivel de cada vez por um smbolo terminal. Para derivar uma
cadeia com n smbolos finais so necessrias no mximo 2n-1 produes. Olhando para as
produes v-se que esta gramtica trabalha em duas fases: primeiro cria a forma sentencial
apenas com n variveis. Para duas variveis basta uma produo, trs variveis duas
produes, etc., n variveis n-1 produes. De seguida substitui cada varivel por um smbolo
terminal, precisando de n produes para substituir as n variveis. Logo n-1+n d 2n-1.
Exemplo 6.3.1.1.
Vejamos as produes na FC Chomsky
S SB|a
Bb
Fazendo a derivao
S SB SBB SBBB SBBBB SBBBb SBBbb SBbbb Sbbbb abbbb
obtm-se uma cadeia de 5 caracteres em 9 derivaes.
Teorema 6.3.1
Qualquer gramtica livre de contexto G=(V, T, S, P} com L(G) tem uma gramtica
equivalente G = (V, T, S, P) na forma normal de Chomsky.
Pressupe-se que G no tem produes nem produes inteis nem produes unidade
nem smbolos inteis.
Demonstrao.
Este teorema demonstra-se construindo o algoritmo para transformao na forma de
Chomsky.
1 passo
Para todo o smbolo terminal a que aparece numa produo de corpo (lado direito) com
comprimento igual ou superior a 2, cria-se uma nova varivel Ba. Esta varivel ter uma s
produo Ba a. Usa-se Ba em vez de a nas produes de corpo maior ou igual a 2.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
234
Teoria da Computao
Cada produo fica com um corpo que ou um terminal simples, ou pelo menos duas
variveis e nenhum terminal.
Vejamos um exemplo para acompanhar o desenvolvimento,
Exemplo 6.3.1.2. Seja
S ABa
A aab
B Ac
Introduzem-se Ba, Bb, Bc para a, b, c , ficando
S ABBa
A BaBaBb
B ABc
Ba a
Bb b
Bc c
2 passo
Partem-se as produes A C1C2....Cn, n 3, num conjunto de produes com duas variveis
no lado direito. Para isso introduzem-se novas variveis D1, D2,..., Dn-2. A produo original
substituda pelas n-1 produes
A C1D1
D1 C2D2
..
Dn-2 Cn-1Dn
Ainda no mesmo exemplo, introduzem-se as variveis D1 (para a primeira produo) e D2
(para a segunda produo). A forma normal de Chomsky ser finalmente,
S AD1
D1 BBa
A BaD2
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
235
Teoria da Computao
D2 BaBb
B ABc
Ba a
Bb b
Bc c
Passou-se de 3 para 8 produes. Normalmente este o custo da passagem FN de Chomsky
(FNC): um grande aumento do nmero das produes.
Exemplo 6.3.1.3.
Considere-se a gramtica no-ambgua do Exemplo 6.2.5.2.
ET | E+T
TF | T*F
FI | (E)
I a | b | c | Ia | Ib | Ic | I0 | I1
Reduzir esta gramtica FN de Chomsky.
Olhando com ateno para as produes, nota-se que existem vrias produes unidade. A sua
remoo a primeira etapa para a resoluo do problema.
Remoo das produes unidade (Hopcroft, 263)
Temos que identificar todos os pares unidade. Para isso aplica-se o algoritmo que vimos:
Base: pares unidade (E, E), (T, T), (F, F), (I, I).
Passo indutivo:
E
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
236
Teoria da Computao
Produes
(E, E)
E E+T
(E, T)
E T*F
(E, F)
E (E)
(E, I)
Ea | b | c | Ia | Ib | Ic | I0 | I1
(T, T)
T T*F
(T, F)
T (E)
(T, I)
Ta | b | c | Ia | Ib | Ic | I0 | I1
(F, F)
F (E)
(F, I)
F a | b | c | Ia | Ib | Ic | I0 | I1
(I, I)
Ia | b | c | Ia | Ib | Ic | I0 | I1
Teremos assim a gramtica sem produes unidade, composta pelas 10 produes da segunda
coluna da tabela.
Note-se que a gramtica no tem nem produes- nem produes vazias. Est por isso
pronta para ser passada FN de Chomsky.
Os smbolos terminais desta gramtica so nove, {a, b, c, 0, 1, +, * , ( , )}. Qualquer um deles
aparece no corpo de uma produo com mais de um smbolo. Por isso conveniente
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
237
Teoria da Computao
Z 0
M *
B b
U 1
L (
C c
P +
R )
Introduzindo as variveis substituindo os caracteres finais nos corpos das produes com
mais de um carcter, teremos as produes seguintes
Produes actuais
Novas produes
E E+T
E EPT
E T*F
E TMF
E (E)
E LER
Ea | b | c | Ia | Ib | Ic | I0 | I1
Ea | b | c | IA | IB | IC | IZ | IU
T T*F
T TMF
T (E)
T LER
Ta | b | c |Ia | Ib | Ic | I0 | I1
Ta | b | c |IA | IB | IC | IZ | IU
F (E)
F LER
F a | b | c | Ia | Ib | Ic | I0 | I1
F a | b | c | IA | IB | IC | IZ | IU
Ia | b | c | Ia | Ib | Ic | I0 | I1
Ia | b | c | IA | IB | IC | IZ | IU
A a
B b
C c
Z 0
U 1
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
238
Teoria da Computao
P +
M *
L (
R )
Agora todos os corpos das produes ou tm mais de duas variveis ou tm um smbolo
terminal.
Para concluirmos a passagem forma normal de Chomsky resta resolver o problema da
existncia de mais de duas variveis em alguns corpos. Um conjunto de trs variveis , com
por exemplo EPT transforma-se num conjunto duas e mais um produo adicional:
E EPT
E EX1
X1PT
E TMF
E TX2
X2MF
E LER
E LX3
X3ER
Ea | b | c | IA | IB | IC | IZ | IU
Ea | b | c | IA | IB | IC | IZ | IU
T TMF
T TX2
T LER
T LX3
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
239
Teoria da Computao
Ta | b | c | IA | IB | IC | IZ | IU
Ta | b | c | IA | IB | IC | IZ | IU
F LER
F LX3
F a | b | c | IA | IB | IC | IZ | IU
F a | b | c | IA | IB | IC | IZ | IU
Ia | b | c | IA | IB | IC | IZ | IU
Ia | b | c | IA | IB | IC | IZ | IU
A a
A a
B b
B b
C c
C c
Z 0
Z 0
U 1
U 1
P +
P +
M *
M *
L (
L (
R )
R )
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
240
Teoria da Computao
- uma frase de tamanho n derivada em n passos, dado que em cada produo se introduz
exactamente um carcter terminal numa forma sentencial.
Exemplo 6.3.2.1
Seja o exemplo 6.3.1.1
S SB|a
Bb
- se aplicarmos um PDA para uma forma normal de Greibach, obtm-se um PDA sem
transies-, o que prova que sempre possvel eliminar tais transies num PDA
(estudaremos os PDA no Cap. 7, mas fica aqui a nota).
Teorema 6.3.2.1. Existncia da Forma Normal de Greibach
Para toda a gramtica livre de contexto G
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
241
Teoria da Computao
Hopcroft sugere (p. 271) expandir a primeira varivel de cada produo at se obter um
terminal. Vejamos um exemplo.
Exemplo 6.3.2.2 (Ex. 6.2.13 Linz)
Converter na forma normal de Greibach
S ABb | a
A aaA | B
B bAb
Para obtermos um terminal na primeira produo, substitui-se o A
S ABb|a e A aaA | B vai dar S aaBb|BBb|a
Mas agora necessrio substituir B na segunda produo
S BBb e B bAb vai dar S bAbBb
Agora o primeiro carcter em qualquer produo um smbolo terminal a ou b.
Introduzindo de seguida variveis adicionais para os caracteres terminais misturados com
variveis,
Za a
Zbb
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
242
Teoria da Computao
Bibliografia.
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
243
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
244
Teoria da Computao
CAPTULO 7
AUTMATOS DE PILHA
7.1 Introduo
247
247
249
261
265
270
Bibliografia
271
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
245
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
246
Teoria da Computao
7.1. Introduo
As gramticas livres de contexto so a base da construo das linguagens de programao e
so por isso muito importantes. Existir uma classe de autmatos que se possa associar a
todas as linguagens livres de contexto?
No Cap. 4 vimos que para linguagens regulares, uma subclasse das livres de contexto,
temos os autmatos finitos, determinsticos e no determinsticos, que so uma forma de
representao e especificao de linguagens. No entanto como sabemos os autmatos finitos
no conseguem representar todas as linguagens.
Sempre que uma linguagem infinita e que as suas cadeias tm uma estrutura tal que
necessrio guardar memria da parte da cadeia j lida, impossvel encontrar um autmato
finito para a linguagem. Por exemplo, nenhum autmato finito capaz de aceitar a linguagem
L= {anbn :, n 0} porque para isso necessrio uma capacidade infinita de contagem.
Tambm no caso de cadeias simtricas em relao a um ponto central, L = {v * tal que
v=wwR, w *}, se verifica o mesmo, sendo at necessrio aqui a memorizao de uma
cadeia de smbolos (e no apenas o seu nmero) por ordem inversa. Este facto sugere a
utilizao de uma pilha como memria, pilha do tipo LIFO (last in first out ) resultando numa
classe de mquinas chamadas autmatos de pilha (pushdown automata, PDA) ou
aceitadores de pilha (pushdown accepters, PDA). A pilha pode ter uma dimenso
arbitrariamente grande, at .
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
247
Teoria da Computao
cadeia de entrada
q0
q2
q1
CONTROLO
P
i
l
h
a
0
1
#
carcter de entrada
estado actual
smbolo no topo da
estado seguinte
escreve na pilha
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
248
Teoria da Computao
Livres de contexto
Livres de contexto
determinsticas
Regulares
Figura 7.2.3. Relao entre as linguagens regulares, livres de contexto determinsticas e livres
de contexto.
Poderemos conceber tambm PDAs transdutores, com um ficheiro de sada onde ele escreve.
No entanto s nos interessaremos aqui pelos PDA aceitadores.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
249
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
250
Teoria da Computao
para baixo, da
pushdown
Significado
push
acrescenta 0
2. (q0, b, 1) = { (q1, ) }
pop
apaga 1
3. (q1, b, 0) = { (q1, 1) }
substituio
substitui 0 por 1
4. (q0, b, 1) = { (q1, 1) }
nenhuma
no altera
5. (q1, , 0) = { (q2, ) }
pop
apaga 0
push
acrescenta 1
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
251
Teoria da Computao
Exemplo 7.3.1.
Considere-se a transio num NPDA definida por
= {a, b}
= {#, 0, 1}
z0=#
F= {q3}
e
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
252
Teoria da Computao
Note-se que no uma funo total. Para os pontos do seu domnio para os quais no se
encontra definida, assume-se que transita para o conjunto nulo representando uma
configurao morta do NPDA, isto , se o autmato cair num estado para o qual no est
definido, nunca mais de l sai, estando por isso morto.
H duas transies neste exemplo que merecem uma anlise mais detalhada:
1 : (q1, a, 1 ) = {(q1, 11)}
-
2 : (q2, b, 1 ) = {(q2, )}
-
por cada b que aparece nestas circunstncias, apaga um 1 da pilha, at que fique
apenas o smbolo inicial #.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
253
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
254
Teoria da Computao
As movidas com um nmero arbitrrio de passos so denotadas por . Por outro lado a
Pode-se demonstrar que as duas definies so equivalentes: se existe um NPDA que aceita
uma linguagem L por um estado final, ento existe um NPDA que aceita a mesma L pela pilha
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
255
Teoria da Computao
um a inicial acrescenta 0
um b inicial acrescenta 1
um a acrescenta 0
um b apaga 0
um a apaga 1
um b acrescenta 1.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
256
Teoria da Computao
q1
0
1
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
257
Teoria da Computao
q1
1
0
b, # ; 1#
3
, # ; #
q0
a, 0 ; 00
4
b, 0;
qf
b, 1 ; 11
6
a, 1 ;
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
258
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
259
Teoria da Computao
a, a ;
b, # ; b#
, a ; a
a,a ; aa
q0
q1
, # ; #
qf
, b ; b
b, b1 ; bb
b,a; ba
b, b;
a, b; ab
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
260
Teoria da Computao
A
#
A ax
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
261
Teoria da Computao
1.1-1.2
S aA | aB
2.1.-2.2
A aAB | aBB
Bb
(de 1.1)
aaAB
(de 2.1)
aaaABB
(de 2.1)
aaaaBBBB
(de 2.2)
aaaabBBB
(de 3.1)
aaaabbBB
(de 3.1)
aaaabbbB
(de 3.1)
aaaabbbb
(de 3.1)
Procuremos agora um NPDA que modelize esta gramtica. Vejamos se chegam trs
estados, o inicial q0 , o de derivaes, q1 e o aceitador qf.
O alfabeto da pilha = {#, S, A, B } e = {a, b}.
1 Introduzir o smbolo inicial na pilha:
S aB
A aAB
3 Simular
4 Simular
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
262
Teoria da Computao
5 Simular
A aBB
Bb
(q1, b, B) = { (q1, )}
6 Simular
7 Aceitar a cadeia quando aparece # no topo da pilha: muda para o estado aceitador
a, S ; A
q0
, # ; #S
, # ; #
q1
a, B ;
qf
a, A ; BB
a, A ; AB
Movida
Grafo
q0
q1
S aB
q1
A aAB
q1
S aA
, # ; S#
q1
a, S ; A
a, S ; B
a, A ; AB
A aBB
q1
a, A ; BB
Bb
(q1, b, B) = { (q1, )}
q1
b, B ;
aceitar a cadeia
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
q0
, # ; #
qf
263
Teoria da Computao
Exemplo 7.4.2
Construir um NPDA que aceite a linguagem gerada pela gramtica
S aSbb | a
Antes de mais, deve transformar-se a gramtica na forma de Greibach, mudando as
produes para (neste caso simples)
S aSA | a
A bB,
B b.
O autmato correspondente ter 3 estados {q0, q1, q2} sendo q2=qf.
1 colocar o smbolo inicial S na pilha:
a, S ; SA
a, S ;
q0
, # ; S#
q1
b, A ; B
, # ; #
qf
b, B ;
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
264
Teoria da Computao
Qual o nmero mnimo de estados de um NPDA, para uma linguagem definida por uma
gramtica de Greibach ?
- no exemplo obtiveram-se trs ;
-
a, S ; A
, # ; #
q1
, # ; #S
qf
a, A ; BB
a, B ;
a, A ; BA
(Notao DEM)
(q0, , #) = { (q0,S$)}
E agora comea-se com a gramtica de Greibach.
a, S ; B
a, S ; A
, # ; $S
q1
, $ ; #
qf
a, A ; BB
a, B ;
a, A ; BA
(Notao DEM)
Figura 7.4.5. NPDA com dois estados para uma linguagem sem .
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
265
Teoria da Computao
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.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
266
Teoria da Computao
(detecta o primeiro b)
(conta os bs)
(q2, , # ) = {(qf, )}
( aceita se n as = n bs)
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
267
Teoria da Computao
aceita aquela linguagem. Logo ela determinstica (e livre de contexto, como j se sabe).
b ,1 ;
a, 1 ; 11
q0
b, 1 ;
a, # ;1#
q2
q1
, # ;
qf
a, 1 ; 11
q0
a, # ; 1#
q1
b, 1 ;
q2
, # ;
qf
a, # ;1#
qf
b ,1 ;
a, 1 ; 11
q1
b, 1 ;
q2
, # ;
Figura 7.5.3. PDA equivalente ao da Figura anterior, com um s estado aceitador: chegando a
q2 e lendo # na pilha, passa ao estado aceitador.
Contrariamente ao que acontece nos autmatos finitos, nos PDA no h equivalncia entre
os determinsticos e os no determinsticos.
Diferenas entre os DFA e os DPDA
Tambm os DFA no tm escolhas possveis. H no entanto algumas diferenas entre estes e
os DPDA:
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
268
Teoria da Computao
DPDA
no admite transies -
admite transies -
no h equivalncia entre os
os no determinsticos
determinsticos e os no determinsticos
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
269
Teoria da Computao
q0
qf
q1
q0
b, # ; #
a, # ; #
qf
q1
b, #;#
a, # ; #
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
270
Teoria da Computao
Exemplo 7.6.1.
Desenhar o grafo do NPDA da linguagem L = {anbm : 0 n m , m 2 } (Taylor, 541). Este
problema um exemplo implementado no Deus Ex Mquina ficheiro Example 10.3.2 na
directoria dos Pushdown Automata.
b, 0 ;
a, 0 ; 00
a,#; #0
b, # ; #
q0
b, 0 ;
q1
b, # ; #
b, # ; #
qf
Bibliografia.
An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett
Computer Science, 2001
Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,
1998.
Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,
Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,
Prentice Hall, 1998.
Introduction th the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
271
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
272
Teoria da Computao
CAPTULO 8
8.1 Introduo
275
266
275
285
289
290
290
295
297
Bibliografia
LEI/DEIFCTUC/2009/@ADC
298
Documento de trabalho
273
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
274
Teoria da Computao
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.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
275
Teoria da Computao
com
|vxy| m
e
|vy| 1
tal que bombeando os segmentos v e y se obtm cadeias de L, ou seja,
uvixyiz L
para todo o i = 0, 1, 2, ....
Graficamente pode ilustrar-se pela figura seguinte. Note-se que |vxy| m |v| m e |y| m.
w=uvxyz
v
O mesmo
nmero
de voltas
x
u
|v x y| m
|x| 0
u v ix y iz
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
276
Teoria da Computao
Repare-se que se v ou y for vazia (uma delas pode s-lo, mantendo |vy| 1), temos o caso
de uma linguagem regular. Este facto natural: as linguagens regulares tambm so livres de
contexto e por isso este lema tambm se lhes aplica. Neste caso no necessrio contar o
nmero de voltas do ciclo, porque no h comparao a fazer, e por isso um autmato finito
(ou um PDA coma pilha desactivada) suficiente para a linguagem.
Aqui consideraremos o caso em que nem v nem y so vazias.
Vejamos uma demonstrao do lema.
Considere-se uma Linguagem L- {} , sem o carcter vazio, com uma gramtica G sem
produes unitrias e sem produes -.
O comprimento do corpo de uma produo sempre limitado; seja k esse limite. Para uma
cadeia w L, o comprimento da sua derivao (nmero de produes necessrias para a
obter) ser por isso de pelo menos n =| w |/k.
w
1
k
2
k
5
k
6
k
n
k
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
277
Teoria da Computao
x
Figura 8.2.1.3. Uma derivao arbitrariamente longa repete necessariamente variveis. Um
tringulo representa um conjunto de derivaes a partir da varivel central at cadeia-folha
do tringulo. No fundo cada tringulo uma sub-rvore.
Da figura poderemos escrever a sequncia de derivaes
*
uvxyz L
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
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
278
Teoria da Computao
v
A
x
Figura 8.2.1.4. Mais um ciclo de A a A em relao figura anterior.
Pode-se repetir o procedimento um nmero arbitrrio de vezes, i, de tal modo que
uvi xyiz L
Fica assim demonstrado que bombeando v e y o mesmo nmero de vezes se obtm cadeias
na linguagem. como se fossem duas bombas sncronas.
Este Lema aplica-se de modo anlogo ao do regular: para provar que uma linguagem no
livre de contexto. Como apresenta duas bombas funcionando sincronamente, de aplicao
mais delicada. Basicamente prova-se que para uma dada linguagem no possvel encontrar
as duas bombas sncronas satisfazendo o lema, e por isso ela no livre de contexto.
Note-se que agora a parte a bombear, vxy, pode estar em qualquer parte de w, seja no
princpio (u=), seja no meio (u e z diferentes de ), ou no fim (z=), sempre com |vxy|m , o
que implica que na prova se tenham que experimentar todas essas possibilidades.
Mas a filosofia de aplicao exactamente a mesma. Poderemos repetir aqui a Tabela
4.4.9, com a nica diferena na definio da decomposio de w em partes.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
279
Teoria da Computao
i 0, uvixyiz L
i 0, uvixyiz L
Exemplo 8.2.1.1.
Seja L={anb2ncn, n 0}. Provar que no livre de contexto.
A caracterstica essencial da linguagem a da relao entre o nmero de as, bs e cs. Se
uma bombagem destruir essa relao, a cadeia bombeada no pertence linguagem.
Para fazer com que isso acontea, basta impossibilitar a bombagem simultnea de as, bs e
cs, dado que a bombagem de apenas as e bs, ou de apenas bs e cs, destri a relao.
Considere-se por exemplo, para um dado m, a cadeia com m as, 2m bs e m cs.Ela
maior do que m e portanto deve verificar o lema.
Verifica-se que qualquer que seja o posicionamento da bombagem obtm-se sempre
cadeias fora da linguagem. Como a subcadeia a bombear, vxy, tem que ser menor ou igual a
m, se a distncia do ltimo a ao primeiro c for maior do que m, como o caso, nunca se
podem bombear simultaneamente as, bs e cs.
Note-se que esta construo vlida para qualquer valor de m. Pode-se por isso concluir
que no existe um tal m que verifique o Lema, ficando assim provado que a linguagem no
livre de contexto.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
280
Teoria da Computao
2m bs
m as
a
v x
bombeia as
v x
m cs
c
v x
bombeia as e bs
v x
bombeia bs
bombeia bs e cs
v x
bombeia c
Figura 8.2.1.5 necessrio tentar todas as localizaes possveis, ao longo da cadeia de teste,
das partes bombeadas.
Tambm se pode fazer a prova como um jogo entre dois parceiros, um procurando o m, o
outro procurando uma cadeia que encoste o adversrio parede. Repete-se aqui, na Tabela
8.2.1.2, a Tabela 4.4.10 agora com uma nova decomposio uvxyz.
Tabela 8.2.1.2 O jogo do lema da bombagem
Jogador 1
Jogador 2
Define a linguagem L
Escolhe um m
Indica uma cadeia de L maior do que m
Define uma decomposio |uvxyz| m
Indica um i que bombeie para fora
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
281
Teoria da Computao
Exemplo 8.2.1.2
L= {anbpcq, n> p q>0 }
Aqui temos uma desigualdade. Interessa, para um dado valor de m, escolher uma cadeia na
situao limite e depois, com a bombagem, destruir a desigualdade. Para isso conveniente
que no se possam bombear simultaneamente as, bs e cs (se se pudesse, poder-se-ia
eventualmente manter a desigualdade).
Tabela Exemplo 8.2.1.2
Jogador 1
Define a linguagem:
Jogador 2
Escolhe um m: 6
aaaaaabbbbbcccccc
|vxy| 6
no pertence a L (p<q)
Escolhe outro m: 8
Indica uma cadeia:
aaaaaaaaabbbbbbbbcccccccc
(estratgia, m+1 as, m bs, m cs)
Decomposio
uvxyz = |aaaaaaaa|ab|bbbbb|b|bcccccccc|
Indica um i que bombeie para fora: i =0
aaaaaaaabbbbbbcccccccc
|vxy| 8
no pertence a L (p<q)
Para outros valores de m, seguindo a mesma estratgia, chega-se mesma concluso: no
existe um m que verifique o Lema.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
282
Teoria da Computao
Figura 8.2.1.6. Nem todas as linguagens que verificam o Lema Livre de Contexto so livres
de contexto. Mas se uma linguagem no o verifica, ela no livre de contaxto.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
283
Teoria da Computao
w=uvxyz
|u v | m
O mesmo
nmero
de voltas
x
u
|y z| m
|u v y z| m
x0
|vy| 1
|u v | m
|y z| m
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
284
Teoria da Computao
A grande diferena entre este lema e o anterior reside em w. Neste, as sub-cadeias a serem
bombeadas (v e y) devem-se localizar dentro de m smbolos dos extremos esquerdo e direito
de w, respectivamente; a cadeia do meio, x, pode ter um tamanho arbitrrio. No lema anterior,
u e z podem ser arbitrariamente grandes. Este facto deriva da linearidade: havendo apenas
uma varivel em cada derivao, chega-se mais rapidamente a um ciclo do que no caso em
que existam muitas variveis em cada derivao.
Demonstrao:
Sendo a linguagem linear, existe alguma gramtica linear para ela, que no contenha nem
produes unitrias nem produes - ( a eliminao deste tipo de produes no altera a
linearidade da gramtica). Consideremos a figura seguinte 8.2.2.2.
S
x
Figura 8.2.2.2 rvore de derivao de uma linguagem linear.
Se a gramtica linear (contm no mximo uma s varivel no corpo de cada derivao),
as variveis s podem aparecer no caminho central S-A-A ....(efeito conjugado de produes
lineares esquerda, direita e ao centro). Havendo um nmero finito de variveis no
caminho de S at ao primeiro A, e gerando cada uma delas um nmero finito de smbolos
terminais, quer u quer z so limitados. Por razes semelhantes v e y so tambm limitados e
por isso existe um m tal que |uvyz| m (mesmo que o m tenha que ser grande, limitado).
Da figura poderemos escrever a sequncia de derivaes
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
285
Teoria da Computao
uvxyz L
A vAy.
Continuando a derivar a partir do ltimo A, at encontrar novamente A, pode-se desenhar
uma segunda figura incluindo a produo adicional A vAy , Fig.8.2.2.3
S
x
Figura 8.2.2.3 Mais um ciclo a partir da figura anterior.
Agora temos
*
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
286
Teoria da Computao
Jogador 1
Define a linguagem: anb2nc pd p,
Jogador 2
Escolhe um m: 5
no pertence a L
Escolhe outro m: 2
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
287
Teoria da Computao
aaabbbbccddd
|uvyz| 2
no pertence a L
A linguagem no linear.
Ser livre de contexto no-linear ?
8.2.3. Relao entre os trs Lemas de Bombagem
Pela hierarquia das linguagens sabemos que
Livres de Contexto
LemaLC
Lineares
LemaLin
Regulares
LemaReg
Figura 8.3.1. Relao entre os trs lemas e as trs famlias de linguagens em causa.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
288
Teoria da Computao
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.
Documento de trabalho
289
Teoria da Computao
S2 0S1 | 01L
S1 aS1 | bA
L 1M
A bB
M 00N
B aC
P 11P | 1
C bbC | c
Se quisermos a linguagem
L3=L1L2
poderemos usar as duas gramticas para gerarem as cadeias da unio, usando ora uma ora
outra. Isto faz-se criando uma nova varivel de inicializao (um novo axioma) que deriva ou
a inicializao de G1 ou a inicializao de G2. Teremos assim a gramtica G3
G3 =(V3, T3, S3, P3}
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
290
Teoria da Computao
S3 S1 | S2
S1 aS1 | bA
S2 0S1 | 01L
A bB
B aC
C bbC | c
L 1M
M 00N
P 11P | 1
Esta forma de especificar a unio muito prtica. Note-se que os alfabetos das linguagens
L1 e L2 so bem diferentes mas isso no tira qualquer coerncia gramtica G3 que nunca
mistura letras com nmeros numa cadeia. Este procedimento possvel para quaisquer
gramticas livres de contexto.
b) Prova da concatenao
Considerando ainda o mesmo exemplo, se quisermos L1L2 cria-se de modo anlogo uma
gramtica G4 do modo seguinte
G4 =(V4, T4, S4, P4}
S4 S1 S2
S1 aS1 | bAA
S2 0S2 | 01L
A bBB
B aC
C bbC | c
L 1MP
M 00N
P 11P | 1
Verifique o leitor que G4 nunca coloca letras depois de nmeros.
c) Prova do fecho estrela e do fecho-positivo
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
291
Teoria da Computao
O fecho estrela L1* resulta da concatenao de sucessivas potncias de L1. Ora tal pode fazerse criando uma gramtica G5 que tenha um ciclo em torno de S1, que possa ser feito um
nmero qualquer de vezes, incluindo zero vezes:
G5 =(V5, T5, S5, P5}
S5 S1S5 | (ciclo em torno de S1)
S1 aS1 | bAA
A bBB
B aC
C bbC | c
Se eliminarmos na produo S5 elimina-se o carcter vazio, ou seja, teremos L1+.
d) prova em relao aos homomorfismos: ver Hopcroft , p.285
e) prova em relao reverso
Queremos provar que se L uma CFL, tambm o LR
Seja G a gramtica de L
G = ( V, T, S, P ), L = L (G)
Com por exemplo a produo P
A baABCba
Se construirmos uma gramtica a partir de G revertendo todos os corpos das produes de G,
no caso de P vir PR
A abCBAab
obteremos a gramtica GR que gera LR
GR = ( V, T, S, P R )
LR = L (GR)
Assim sendo LR livre de contexto (porqu?).
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
292
Teoria da Computao
L1L2={0n1n2n, n1}
Produes:
Produes:
Produes
SAB
SAB
n n
A0A1|01 (gera 0 1 )
???
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
293
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
294
Teoria da Computao
Teorema 8.3.2.3. Dada uma gramtica livre de contexto G= (V, T, S, P) existe um algoritmo
para decidir de L(G) ou no infinita, sendo G sem produes-, sem produes unitrias e
sem smbolos inteis.
Verifica-se se nas derivaes da gramtica h alguma varivel que se repita.
Por exemplo se numa derivao a varivel A se repetir,
*
xAy
uzv
uAv
*
uxAyv uxxAyv
*
uxn A yn v
...
uxn zyn v
S bAAa
A bBB
B aC
C bbCA | cA|c
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
295
Teoria da Computao
Grafo de dependncias
S bAAa
A bBB
B aC
Cc
Figura 8.3.2.2. Uma linguagem finita
8.3.3. Algumas propriedades indecidveis de CFLs (Hopcroft, 302).
No existe nenhum algoritmo (no possvel resolver com um computador) algumas questes
que so aparentemente simples, com por exemplo:
a) uma dada gramtica CFG ambgua ?
b) uma dada linguagem CFL inerentemente ambgua ?
c) vazia a interseco de duas linguagens CFLs ?
d) so duas linguagens CFLs iguais ?
e) uma linguagem CFL igual a * ?
Isto no quer dizer que para uma linguagem concreta no se possa obter resposta a
qualquer daquelas questes. Quer dizer sim que no h nenhum algoritmo geral que d
resposta (em tempo til) para toda e qualquer linguagem livre de contexto.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
296
Teoria da Computao
Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd
Papadimitriou, 2nd
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
297
Teoria da Computao
CAPTULO 9
MQUINAS DE TURING
9.1. Introduo
301
302
309
311
319
324
325
Bibliografia
328
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
299
Teoria da Computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
300
Teoria da Computao
9.1. Introduo
Uma pesquisa no Google em 6 de Dezembro de 2007 com turing machine deu 1.820.000
resultados. Este nmero mostra a importncia do tema.
As Mquinas de Turing (MT) estiveram no centro do desenvolvimento dos computadores e
da computao durante os ltimos 70 anos. Alain Turing (1912-1954) foi um brilhante
matemtico, em Cambridge, Inglaterra, numa poca efervescente de desenvolvimento da
lgica e da matemtica que haveria de resultar no computador digital, os anos 30 e 40 do
sculo passado. geralmente considerado como o fundador das cincias da computao.
Outros matemticos famosos, como Gdel, Bertrand Russel na Europa, Church nos EUA,
foram contemporneos de Alain Turing. Existe em Portugal um blog como seu nome,
http://turing-machine.weblog.com.pt, que merece uma visita.
Em 1940 Alan Turing procura formalizar a noo de algoritmo, identificando as operaes
fundamentais e primitivas que possam servir de base ao clculo matemtico. Depois, definiu
uma mquina abstracta capaz de executar essas operaes segundo regras bem definidas. A
MT foi assim concebida para ser um modelo de computao, formalizando um conjunto de
operaes bsicas s quais se pode reduzir qualquer computao.
Os autmatos finitos so para as linguagens regulares, os autmatos de pilha para as
linguagens livres de contexto. E as MT? Com que linguagens se relacionam?
J encontrmos linguagens que no so livres de contexto, como por exemplo anbncn. Por
isso no possvel construir um autmato de pilha que as aceite.
Ser que uma MT suficientemente poderosa para aceitar linguagens dependentes do
contexto? Todas elas? Qual o autmato mais poderoso? Quais os limites da computao?
So questes s quais as MT respondem.
Mquina de Turing
Figura 9.1.1. Importncia da Mquina
de Turing. At hoje no foi ainda
Um modelo abstracto de computao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
Problemas resolveis e
irresolveis
301
Teoria da Computao
UNIDADE
DE
CONTROLO
R/W
FITA
Figura 9.2.1 Componentes da Mquina de Turing
Definio 9.2.1.
Uma mquina de Turing M definida pelo septeto
M = (Q, , , , q0,
, F)
em que
Q o conjunto de estados internos da unidade de controlo
o alfabeto de entrada
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
302
Teoria da Computao
(branco, um
=-{ }
A funo de transio em geral uma funo parcial em Q
: Q Q {L, R}
em que R significa movida para a direita e L movida para a esquerda. Os dois argumentos de
entrada da funo de transio e os trs de sada so os seguintes:
q, prximo estado da unidade de controlo
= { a, b }
= { a, b, }
: ( Q ) ( Q { L, R } )
e a transio
( q0, a ) = ( q1, b, R )
Esta transio ilustrada na figura seguinte.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
303
Teoria da Computao
abc
bbc
q1
q0
Q = {q0, q1 }
= {a, b}
= {a, b,
F = {q1}
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
304
Teoria da Computao
(q0, a) = (q0, b, R)
(q0, b) = (q0, a, R)
(q0, ) = (q0, , R)
q3
q0
q0
(q0, a) = (q0, b, R)
b
q0
b
q0
(q0, b) = (q0, a, R)
a
q0
q0
(q0, b) = (q0, a, R)
b
q0
q0
(q0, ) = (q0, , R)
Figura 9.2.4. Movidas do exemplo 9.2.2
No fim obtm-se o seguinte contedo da fita
b
(q0, a) = (q0, a, R)
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
305
Teoria da Computao
(q0, b) = (q1, b, R)
(q0, ) = (q0, , R)
(q1, a) = (q0, b, L)
(q1, b) = (q0, b, L)
(q1, ) = (q0, , L)
obtm-se um funcionamento em ciclo infinito, como se pode ver para a cadeia aabbba:
(q0, a) = (q0, a, R)
a
q0
q0
q0
(q0, b) = (q1, b, R)
(q1, b) = (q0, b, L)
a
q0
q1
q0
q1
(q0, b) = (q1, b, R)
a
q0
q1
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
306
Teoria da Computao
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:
-
o contedo da fita
a1a2...ak-1qakak+1...an
correspondente figura seguinte. A cabea aponta para a clula que contm o smbolo que
segue q, i.e., ak.
x1
a1
a2
x2
ak
an
por isso no
necessrio mostr-los. No entanto se a posio dos brancos for relevante, deve ser
especificada na descrio instantnea.
Para representar as movidas de uma MT utiliza-se a notao de configurao em configurao
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
307
Teoria da Computao
(q1, c) = (q2, e, R)
em termos de configuraes escreve-se, admitindo que na fita temos por exemplo abcd e que
a cabea aponta para c,
abq1cd | abeq2d
configurao (k) | configurao (k+1)
q1
q2
(q1, c) = (q2, e, R)
abq1cd | abeq2d
, F) uma MT.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
308
Teoria da Computao
x1qix2 y1qjay2
para algum qj e algum a, para os quais (qj, a) seja indefinido.
Chama-se computao sequncia das configuraes que levam a MT do estado inicial ao
estado de paragem (halt).
A situao em que a MT entra num ciclo infinito, nunca parando, nem de l podendo sair,
denota-se por
x1qx2
Esta situao, de ciclo infinito, em que a mquina nunca mais pra, muito importante na
aplicao da teoria das MT.
: ( Q ) ( Q { L, R } )
i.e.
(q0, b) = (q1, b, R)
DEM e Taylor
: ( Q ) ( {L, R }) Q
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
309
Teoria da Computao
; a, R
q1
q0
q1
; b, L
qf
q1
q0
; a, R
; b, L
q1
qf
qf
DEM
q0
:a
q0
q1
a
a:R
q1
q2
a
:b
q2
q3
a
b
b:L
q3
qf
a
Figura 9.3.1b.
Movidas e
grafo no DEM
do exemplo
9.3.1
qf
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
310
Teoria da Computao
Exemplo 9.3.2.
Para uma MT com a fita inicial vazia
JFLAP
; a, R
q1
; b, R
q0
:a
q1
a:R
q2
:b
q3
b:R
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
311
Teoria da Computao
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,
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
312
Teoria da Computao
(q0, 0) = (q0, 0, R)
Havendo vrios zeros, ela ficou a apontar para o segundo zero. Ento esta transio d-se
novamente, porque ela se mantm no estado q0 , indo por a alm, at acabarem os zeros. Se
existisse um 1 algures no meio dos zeros a MT pararia (no est definida uma transio para
essa eventualidade).
2 Depois de ler todos os zeros h-de chegar ao primeiro branco direita da cadeia. A
pode seguir para a direita, deixando o branco tal como est. Como correu tudo bem at aqui,
j leu a cadeia toda, deve passar a um estado aceitador, qf :
: ( Q ) ( Q { L, R } )
i.e.
Taylor:
: ( Q ) ( {L, R }) Q
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
(q0, b) = (q1, b, R)
313
Teoria da Computao
:R
q0
qf
(q0, 0) = (q1, 0)
0:R
(q1, 0) = (q1, R)
(q1, ) = (qf, )
q0
0:0
q1
qf
Note-se que uma funo parcial. No definida por exemplo (q0, 1). Se aparece um
1, no estado q0, a MT pra (halt) para sempre, indicando que w no aceite, a menos que q0
fosse um estado final. Mas a definio de estado final deve ser feita previamente resoluo
do problema: um estado final se antes dele s apareceram 0s e se j se chegou ao fim da
cadeia, i.e., se a cabea apontar para um branco. No pode ser q0 e por isso cria-se um outro
estado qf para estado final. Chega-se a ele apenas quando se leu a cadeia toda sem encontrar
qualquer 1.
As MT podem reconhecer algumas linguagens que no so livres de contexto. So
mquinas mais poderosas do que os autmatos estudados anteriormente. Voltaremos a este
assunto mais tarde.
Exemplo 9.4.2. MT aceitadora de Linguagem na=nb
Seja o alfabeto ={a,b} e a linguagem composta pelas cadeias com um nmero de as igual
ao nmero de bs, em qualquer ordem., por exemplo
ab, ba, abaaabbabbbb, bbaabababbaaa, etc.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
314
Teoria da Computao
*aa*abbb
bbabaa
*b*baa
aabbbabb
*a*bbabb
**a*a*bb
****a**b
***b*a
****babb
********
******
****b**b
Programa da MT
- Carrega-se a cadeia na fita
- Desloca-se a cabea at ao primeiro carcter, que ser a ou b. Suponhamos que a.
- Apaga-se o a e substitui-se por *. Segue para a direita. A encontra a, b (ou *).
O grafo est na pgina seguinte.
Exemplo 9.4.3.
Seja a MT com = {a, b}, = {a, b,
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
315
Teoria da Computao
isso a linguagem aceita pela MT L= L[b(a+b)*], todas as cadeias que se iniciam por b em
{a,b}.
a : a, R
* : *, R
JFLAP
a : *,R
q1
* : *, R
b : *, L
* : *, L
a :a, L
: ,R
q0
q3
a : *, L
q2
b :b, L
,L
q4
:
b : b, R
* :*, R
,L
,L
*:R
*: ,L
q5
a:R
qf
q1
*:R
a:*
b:* *:L
*:R
a:L
:R
q5
q0
b:*
:L
b:L
q2
*:R
q4
q6
Figura 9.4.3. MT
:L
*:R
do exemplo 9.4.2.
na=nb no JFLAP e
:R
b:R
*:
q7
DEM
no DEM.
Exemplo 9.4.4
Construir no JFLAP uma MT que aceite a linguagem L = { an bm : n 1, m n }
Documento de trabalho
316
Teoria da Computao
Figura 9.4.4. Esta MT decide se uma cadeia pertence linguagem (termina em SIM) ou se
no pertence linguagem (termina em NO).
Exemplo 9.4.5. Desenhar uma MT que aceite a linguagem L = { an bn an bn : n 0 }
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
317
Teoria da Computao
Figura 9.4.5. Implementao FLAPP do exemplo 9.4.5 pelo aluno Antnio Damasceno em
2004-5.
Figura 9.4.6a. JFLAP do exemplo 9.4.6 pelo aluno Antnio Damasceno em 2004-5.
Uma outra implementao possvel
Figura 9.4.6b.
Implementao JFLAP
pelo aluno Cristvo Pires
em 2004-5 (exemplo
9.4.6).
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
318
Teoria da Computao
Figura 9.4.7. JFLAP do ex. 9.4.7 pelo aluno Antnio Damasceno no ano lectivo 2004-5.
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
319
Teoria da Computao
= f (w),
w
, desde que se verifique que partindo de w no estado inicial aps a
e portanto com sada w
computao de f chega a um estado final qf
q0w M qf
As especificaes do estado final so feitas pelo programador.
Ser que qualquer funo computvel por uma MT ?
Definio 9.5.1. Funo computvel.
Uma funo f com o domnio D diz-se Turing computvel ou simplesmente computvel
se existir alguma mquina de Turing M = ( Q, , , , q0,
, F) tal que
qf F
q0w M qf f (w),
para toda a w D.
Esta definio pressupe que a MT pra, depois de calcular f(w), apontando para o
primeiro carcter do resultado do clculo.
Todas as funes matemticas usuais, por mais complicadas que sejam, so Turingcomputveis. Esta afirmao no se pode provar, mas acredita-se que assim seja porque at
hoje ningum foi capaz de propor uma funo matemtica que no fosse computvel.
Vejamos alguns exemplos.
Exemplo 9.5.1. Adio de inteiros (representao unria) (Linz, 233
Para adicionar nmeros inteiros com uma MT, primeiro faz-se a sua representao unria, s
com 1s. Depois temos que especificar como se escrevem as duas parcelas na fita da MT.
Admitamos que as separamos por um 0, ficando brancos esquerda e direita:
Figura 9.5.1.
Preparao
da fita para a
adio
LEI/DEIFCTUC/2009/@ADC
x=5
x=4
Documento de trabalho
320
Teoria da Computao
e que no fim da computao o resultado deve ser apresentado em unrio (como uma sequncia
de 1s)
x+ y =9
Figura 9.5.3
qf
Este tambm o Ex. 1.3.2 de Taylor, Copying Machine.tm implementada em DEM, fita 8.tt
Exemplo 9.5.3.
Comparao de dois nmeros positivos, x e y, em representao unria, Linz 235.
Escrevem-se os nmeros na fita separados por um 0, por exemplo, comparar 4 e 6,
11110111111
Um algoritmo possvel
- apagar um 1 da primeira parte e outro 1 da segunda, at os 1s acabarem numa das partes
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
321
Teoria da Computao
Caso 4&6
11110111111 *1110*11111**110**1111***10***111****0****11
Agora quando procura mais 1 do lado esquerdo no encontra, passa pelo zero e continua at
ao ltimo 1, o que provoca a transio para o estado x<y.
Caso 6&4
11111101111*111110*111**11110**11***11101*******110****
Agora ao apagar mais um 1 do lado esquerdo e procurar o outro 1 do lado direito, no o
encontra, chega ao branco e passa ao estado x>y.
No caso de igualdade, quando acabam os 1s em ambos os lados, passa ao estado x=y.
Fica o leitor desafiado a desenhar o respectivo grafo, usando o JFLAP.
Exemplo 9.5.4
q0
:a
q1
Figura 9.5.4
a:R
Que faz ?
1 Inicializando-se numa fita vazia, l um branco, substitui-o por um a, desloca-se para a
direita e repete estas operaes indefinidamente.
2 Percorre a fita at ao infinito sem escrever nada.
Exemplo 9.5.5. E esta ?
q0
:a
q1
a:R
q2
:b
q3
Figura 9.5.5
b:R
Escreve sucessivamente abababababab.......
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
322
Teoria da Computao
Exemplo 9.5.6.
Construa uma MT que decida a linguagem em ={a,b} composta por todas as cadeias que
contenham a subcadeia baa (isto , que diga se sim ou no uma cadeia pertence linguagem).
Figura 9.5.6
Note-se que esta linguagem regular, e por isso tambm se pode desenhar um DFA que faz o
mesmo.
Exemplo 9.5.7
Desenhe uma MT que calcula a funo f(x)=2x, estando x em unrio.
Primeiro devemos conceber um algoritmo que resolva o problema. No existe uma nica
soluo. Uma delas poder ser
1- substituir cada 1 por um x e de seguida adicionar um y no fim da cadeia. Por exemplo para
f(111)= 111111 a fita ter sucessivamente
111 x11yxx1yyxxxyyy
xx1111 x11111111111
O grafo da MT ser o da Figura.
Figura 9.5.7
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
323
Teoria da Computao
Exemplo 9.5.8 Desenhar uma MT que conte o nmero de aa em cadeias no alfabeto {m, a, r,
g, a, r, i, d, a}.
Figura 9.5.8. MT
que conta os as
em cadeias de
{m,a,r,g,a,r,i,d,a}
x + y , se x y
f (x, y) =
0, se x< y
Podemos decomp-la em trs operaes: uma comparao, uma soma, a um apagamento, que
se podem implementar pelos trs blocos da Figura 9.6.1.
Somadora
x
x, y
Comparadora
Figura 9.6.1.
Implementao
da funo do
exemplo 9.6.1.
LEI/DEIFCTUC/2009/@ADC
f (x, y)
x<y
Documento de trabalho
Apagadora
324
Teoria da Computao
Agora cada bloco pode ser executado por uma MT. A funo total resulta da combinao
das trs MTs.
pra (halt) com uma resposta correcta para f (d) R na sua fita. Requer-se que
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
325
Teoria da Computao
q0d M qf f (d),
qf F
para todo o d D.
No DEM existe uma livraria de MTs que executam diversos algoritmos. A tabela seguinte
enumera-os. Alguns deles recorrem a uma MT especial, com vrias fitas (tapes). No Captulo
10 abordaremos essas arquitecturas especiais da MT, que no entanto no alteram as suas
capacidades computacionais, apenas tornam mais fcil a programao de algoritmos.
Tabela 9.7.1 Lista de exemplos do DEM. Os exemplos esto em Taylor.
balpatent
balanced parenthesis
beaver
c-interp
Cnfsat
Convert
Convert to unary
Copying
Cvp
div2mult
div2single
Ex12-3-1
Ex2-2-3
Ex2-6-2
Ex2-6-3
Ex2-6-5
Ex4.5.1
Factoria
f(n)= n!
Fspacon
God
Multiply
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
326
Teoria da Computao
N^n
Nntravsa
Palindro
Palindromes
Recdesct
Recursive-descent Parser
Recognzr
Reverse
reverse word
Reverse2
Samenumb
Samenumb4t
Selctstr
select a string
Sqrt
Documento de trabalho
327
Teoria da Computao
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,
LEI/DEIFCTUC/2009/@ADC
Documento de trabalho
328