Rmulo Silva
Teoria da Computao
Maio/2007
1. Introduo
Teoria da Computao. A Teoria da Computao abrange o estudo de modelos de computadores ou mquinas e o respectivo poder computacional destes modelos. Isto , que classes de problemas podem ser resolvidas em cada modelo e como represent-los. O modelo de computao atual (ano base: 2007) incapaz de entender a linguagem humana direta: seja falada ou escrita, dado o nmero enorme de possibilidades de significados e/ou acepes de uma mesma palavra, alm das variaes de construes de frases. Linguagens Formais. Para diminuir este distanciamento entre a lngua humana (por exemplo: o portugus, o ingls, etc.) e a programao de computadores foram criadas as linguagens de programao. Estas so linguagens formais, isto , procuram eliminar toda ambigidade possvel, garantindo assim que um comando e palavras reservadas tenham sempre o mesmo significado independentemente de onde apaream no programa. A lngua portuguesa uma linguagem natural, sendo que sua representao escrita possui uma gramtica. Esta indica onde se deve usar preposio ou no; a concordncia verbal e nominal, entre outras regras. Gramticas. Da mesma forma, as linguagens de programao possuem uma gramtica associada, que define a formao de programas vlidos. Por exemplo: se cada comando deve ser seguido de ; (ponto-e-vrgula), se o tipo de uma varivel vem antes ou depois de seu nome. Algoritmos. As resolues de problemas so representadas atravs de algoritmos, sendo que esses so implementados computacionalmente em alguma linguagem de programao. Compiladores. Os compiladores fazem traduo dos programas escritos nas diversas linguagens de programao para instrues que o computador capaz de executar. Assim, a Teoria da Computao est intimamente ligada ao estudo de linguagens: sua representao (gramtica); e sua traduo para instrues da mquina usada (compilador).
Forma Normal de Backus. A gramtica anterior est especificada numa notao conhecida como Forma Normal de Backus (BNF). Nessa notao, as palavras entre os smbolos < e > so chamadas variveis. O smbolo ::= indica que a varivel sua esquerda pode ser substituda pelos valores direita. Assim, a gramtica anterior estabelece que uma frase formada por um sujeito seguido de um predicado, sendo que este por sua vez formado por um verbo seguido de um complemento. E portanto, a frase o livro abre a mente uma frase vlida segundo a gramtica acima. Em uma linguagem de programao teramos, por exemplo, uma regra que define um comando de atribuio vlido: <Atribuicao> ::= <Varivel> := <Valor> ; onde <Varivel> se refere a qualquer seqncia de caracteres comeando com alguma letra. A descrio de gramticas seguindo essa forma, embora de simples entendimento, no muito prtica quando se deseja estudar mais genericamente as propriedades das linguagens. Assim, na teoria da computao geralmente dado um tratamento matemtico s linguagens e adotam-se convenes de notao e simplificaes, procurando facilitar sua representao e o estudo de suas propriedades. Exemplo de convenes: ao invs de se escrever <Varivel>, em geral utiliza-se apenas uma letra maiscula (V) para representar tais tipos de construo. Alm disso, na Teoria da Computao, em geral procura-se estudar classes de linguagens ao invs de uma linguagem especfica. A seguir, algumas definies essenciais para o estudo de Linguagens Formais: 2.1 Alfabeto (): um conjunto finito de smbolos. Na lngua portuguesa seria formado pelas 27 letras do alfabeto mais os dgitos de 0 a 9. Outros exemplos: o alfabeto grego, o alfabeto russo. Usamos a letra grega sigma maiscula () para representar o alfabeto de uma linguagem. Ex.: = {0,1} representa o alfabeto composto pelos smbolos 0 e 1. 2.2 Palavra ou cadeia: uma seqncia finita de smbolos do alfabeto concatenados Exemplos de palavras utilizando o alfabeto = {0,1}: 0, 1, 010, 111, 011, etc. O comprimento de uma cadeia w, denotado por |w| o nmero de smbolos que compem w. Assim a palavra 011 tem comprimento 3 (trs). Usamos a letra grega epsilon minscula () para representar a palavra vazia, isto , tem comprimento 0 (zero).
O smbolo * indica o conjunto de todas as palavras possveis de serem formadas a partir do alfabeto , de qualquer comprimento incluindo a palavra vazia (). A notao an indica a repetio do smbolo a n vezes. Assim a3 representa aaa, a2 representa aa e a0 representa (palavra vazia). 2.3 Linguagem Formal: um conjunto de palavras sobre um alfabeto. Exemplos de linguagens formais sobre o alfabeto = {0,1}: a) L = { 01, 1010, 1110} representa a linguagem formada pelas cadeias 01, 1010 e 1110 somente. b) L = { w | w tem nmero mpar de zeros em *} representada todas cadeias possveis com nmero mpar de zeros usando somente os smbolos 0 e 1.
O smbolo | pode ser usado quando h mais de uma regra para um mesmo no terminal, como o no-terminal A do exemplo. O conjunto de no-terminais para a gramtica G V= {S,A,B}. O conjunto de terminais T = {a,b} . O conjunto de regras P = { S AB, A aA, A a, B b }. A seta () indica que o no-terminal sua esquerda pode ser substitudo pelo smbolo ou smbolos que esto sua direita. Assim: o no-terminal S pode ser substitudo por AB o no-terminal A pode ser substitudo por aA ou por a o no-terminal B pode ser substitudo por b. As palavras ou cadeias vlidas na linguagem so formadas a partir do smbolo inicial, substituindo-o por alguma de suas regras e os no-terminais desta sucessivamente, at que se obtenham apenas terminais. Assim, utilizando a gramtica definida anteriormente pode-se obter a palavra aaab efetuando-se as seguintes substituies: (1) S (2) (3) (4) (5) AB aAB aaAB aaaB aaab
Na linha (1) foi usada a nica regra disponvel para o smbolo S. Na linha (2) foi usada a regra A aA. Na linha (3) foi usada novamente a regra A aA. Na linha (4) foi usada a regra A a. Na linha (5) foi usada a regra B b. Observe que a notao usada no processo de substituio, indica pela seta , diferente da notao usada na prpria gramtica, indicada pela seta . Isto permite diferenciar quando se est gerando uma palavra ou descrevendo uma regra da gramtica. Derivao. O processo de substituir um no-terminal por alguma de suas regras chamado de derivao. rvore de derivao. A gerao de uma palavra pelas sucessivas derivaes pode ser representada atravs de uma rvore, chamada rvore de derivao, onde a raiz o smbolo inicial S. A Figura 1 apresenta a rvore de derivao para a palavra aaab do exemplo anterior. S A a a A A a Figura 1 B b
Efetuando-se todas as possveis derivaes a partir do smbolo inicial S, obtm-se todas as palavras que compem a linguagem formal descrita pela gramtica, podendo ser infinito o nmero de palavras. No exemplo da gramtica anterior possvel gerar o seguinte conjunto infinito de palavras: L = {ab, aab, aaab, aaaab, aaaaab, ...}. Observando mais atentamente as palavras geradas fcil notar que todas seguem um padro: so formadas por uma seqncia de um ou mais as e terminadas exatamente com um b. Assim pode-se dizer a gramtica representa ou gera a linguagem L = { w | w formada por uma seqncia de um ou mais as seguido de exatamente um b sobre *}, onde = {a,b}. Linguagens de Programao. A gramtica de uma linguagem de programao representa todos os programas possveis de serem escritos nela, geralmente um nmero potencialmente infinito de programas. Assim, o primeiro trabalho do(s) criador(es) de uma linguagem de programao definir sua gramtica. Notao. Usa-se L(G) para denotar a linguagem gerada pela gramtica G. Gramticas equivalentes. Uma mesma linguagem pode ser gerada por diferentes gramticas. Por exemplo, a gramtica: S Ab A aA | a gera a mesma linguagem descrita pela gramtica vista anteriormente. Assim, quando duas gramticas geram a mesma linguagem, elas so ditas gramticas equivalentes. Formalmente: G1 equivalente a G2 se e somente se L(G1) = L(G2). No estudo das linguagens formais, as gramticas so classificadas de acordo com as restries que se impem sobre suas regras de produo. Assim, as linguagens formais podem ser classificadas em: Linguagens Regulares (Tipo 3) - LR Linguagens Livres de Contexto (Tipo 2) - LLC Linguagens Sensveis ao Contexto (Tipo 1) - LSC Linguagens Recursivamente Enumerveis (Tipo 0) - LRE A Figura 2 mostra a relao entre os tipos de linguagens. LR LLC LSC LRE Figura 2 As linguagens regulares (LR) so aquelas onde se impem mais restries s regras de produo. 7
Hierarquia de Chomsky. As linguagens livres de contexto (LLC) so menos restritivas que as linguagens regulares (LR). As linguagens sensveis ao contexto (LSC) so menos restritivas que linguagens livres de contexto (LLC) e assim por diante. A hierarquia assim gerada chamada de Hierarquia de Chomsky. Devido ao fato que um tipo de linguagem com mais restries um caso particular de um tipo de linguagem com menos restries, ento toda LR uma LLC. Toda LLC uma LSC, e toda LSC uma LRE. Estudaremos inicialmente apenas as linguagens regulares (LR). Gramtica Regular (GR). Uma gramtica G regular se todas suas produes so tais que podem ser colocada em alguma das seguintes formas: A a A aB A Isto , do lado esquerdo da regra sempre h somente um no-terminal. Do lado direito h um terminal sozinho (acompanhado no mximo de um no-terminal), ou h apenas a palavra vazia (). s vezes, inicialmente a gramtica no possui todas suas regras em alguma das formas segundo a definio de gramtica regular. No entanto, fazendo-se pequenas alteraes possvel obter uma gramtica equivalente onde todas as regras estejam de acordo com a definio de gramtica regular. Exemplo: seja G1 a gramtica a seguir: S AB A aA | a Bb G1 regular. Para ver isto, basta observar que ela equivalente a G2, definida por: S aA A aA | b Linguagem Regular (LR). Uma linguagem regular se ela pode ser descrita usando uma gramtica regular (GR).
4. Modelos de Mquinas
Dispositivo Reconhecedor. Uma outra maneira de definir uma linguagem atravs da utilizao de um dispositivo reconhecedor, que permite submeter uma palavra ou cadeia a um teste de aceitao capaz de determinar se tal palavra pertence ou no linguagem em questo. O dispositivo reconhecedor na verdade um modelo matemtico que descreve o funcionamento de uma mquina, onde as cadeias so submetidas para aceitao ou rejeio. 8
Cada tipo de linguagem da Hierarquia de Chomsky possui um reconhecer distinto. Linguagem Linguagens Regulares (LR) Linguagens Livres de Contexto (LLC) Linguagens Sensveis ao Contexto (LSC) Linguagens Recursivamente Enumerveis (LRE) Reconhecedor Autmatos Finitos Autmatos com Pilha Mquina de Turing com limitada Mquina de Turing
memria
a b
a b
fita de entrada
cabea de leitura q0 qn q1 q2 controle finito Figura 3 Um AFD pode ser representado esquematicamente conforme a Figura 3: os smbolos que compem a palavra a ser testada encontram-se escritos numa fita de entrada, dividida em clulas, onde cada smbolo ocupa exatamente uma clula. H um controle finito composto pelos estados possveis para o autmato, sendo que existe um marcador que indica o estado atual. Alm disso, h uma cabea de leitura que l um smbolo por vez da fita. Finito. O autmato dito finito porque o conjunto de estados possveis (Q) finito. Determinstico. O autmato determinstico quando dado o estado atual de M, ao ler um determinado smbolo na finita de entrada existe apenas um prximo estado possvel.
Estado Inicial. O estado inicial q0 indica que ao ligarmos o AFD, o marcador automaticamente se posiciona no estado q0, antes de ler qualquer smbolo da fita de entrada. S pode existir um nico estado inicial. Aceitao. Uma palavra reconhecida (ou aceita) quando o AFD aps ler todos os smbolos contidos na fita de entrada, o marcador se encontrar em um estado final. Ao contrrio do estado inicial, podem existir vrios estados finais. Rejeio. Uma palavra rejeitada quando aps ler todos os smbolos da fita de entrada, o marcador no se encontrar em um estado final ou quando no existe uma transio definida para um smbolo a ser lido, estando o autmato num determinado estado. Mquina de Estados Finitos. Alguns autores denominam os AFDs de mquinas de estados finitos. Vejamos um exemplo de AFD: Seja M = (,Q, ,q0,F) tal que = {a,b}, Q = {q0, q1, q2}, F = {q2} e a funo transio (ou funo programa) definida segunda a tabela a seguir: q0 q1 q2 a q1 q1 --b --q2 ---
Interpretando a tabela: estando no estado q0 e lendo o smbolo a na fita de entrada, M muda para o estado q1. Tambm estando no estado q0 e lendo o smbolo b na fita de entra, M rejeita a palavra, pois no h transio definida esta situao. J estando no estado q1, e lendo o smbolo a, M permanece no estado q1. Quando M est no estado q1 e l um smbolo b, ele muda para o estado q2. E uma vez no estado q2, qualquer smbolo que seja lido, a palavra ser rejeitada, pois no h transies definidas a partir de q2. Grafo Orientado. Comumente representa-se a funo programa () utilizando-se um grafo orientado. A Figura 4 apresenta o grafo correspondente funo programa do AFD do exemplo anterior. a q0 a b
q1
q2 Figura 4
Os ns do grafo representam os estados possveis do AFD enquanto as arestas orientadas representam as transies. A origem de uma seta indica o estado atual. O smbolo a ser lido colocado sobre a seta.
10
O destino da seta indica o prximo estado aps a leitura do smbolo. O estado inicial indicado atravs de uma seta sem origem e com destino no estado inicial. Os estados finais so indicados atravs de dois crculos concntricos. Observando o grafo do AFD temos os estados q0, q1 e q2, sendo q0 o estado inicial e q2 o estado final. O estado q1 pode ser traduzido como estado onde se l um ou mais as. O estado q2 pode ser expresso por: estado que indica a leitura de exatamente um b. Este AFD reconhece a linguagem L = { w | w formada por uma seqncia de um ou mais as seguido de exatamente um b sobre *}, onde = {a,b}. Portanto, equivalente gramtica vista anteriormente: S AB A aA | a Bb Teorema: Toda linguagem regular (LR) possui um AFD equivalente. Outro exemplo: seja L = { abncm | n 0 e m 0}. O AFD a seguir reconhece L. b a q0 q1 c c q2 Figura 5 M = (, Q, , q0, F) onde = {a, b, c}, Q = {q0, q1, q2}, est representada pelo grafo da Figura 5, q0 o estado inicial e F = {q1, q2}. Exemplos de palavras ou cadeias reconhecidas pelo AFD : a, ab, ab, abb, abbb, abc, abbc, abcc, ac, acc, accc, etc. Exemplos de cadeias no reconhecidas: b, c, ba, acb, aa, etc.
11
A S c A1 b
Figura 6
12
Unix. O comando grep do sistema operacional Unix permite o uso de expresses regulares para busca de padres. Exemplos: grep Mar* arq: listar todas as linhas do arquivo arq que contm palavras contendo a string Mar. grep Maria arq* : listar todas as linhas de arquivos cujo nome comece com arq e que contenha a string Maria. grep i maria arq : listar todas as linhas do arquivo arq que contenham a string maria (ignorando maisculas e minsculas). grep v maria arq : listar todas as linhas do arquivo arq que no contenham a string maria. 13
grep [a-z] arq: listar todas as linhas do arquivo arq que comecem com as letras minsculas de a a z.
a q0 q1 a
14
q0 q1 a
c q2
Figura 8 No AF da Figura 8, o autmato pode fazer a transio para o estado q1 a partir do estado q0 sem ler qualquer smbolo na fita. Assim, as cadeias: b, bc, bcc so aceitas pelo autmato enquanto que bb, aac, acb so rejeitadas. Teorema. Para todo AFND, incluindo os AF, possvel construir um AFD equivalente. Equivalncia. Na prtica, o teorema anterior estabelece que a facilidade de nodeterminismo dos AFNDs no representa um aumento de poder computacional em relao aos AFDs. Ou seja, a classe de linguagens reconhecida por AFNDs e AFDs a mesma.
Inicialmente procura-se desenhar os autmatos dos smbolos isoladamente, que so de fcil representao. Os autmatos obtidos so combinados segundo as regras anteriores at se obter o autmato que representa a expresso regular completa.
15
x r=x
q0r1
qfr1
r = r1 + r2
q0r
qfr2
q0r1
qfr1
q0r
qfr2
r = r1r2
q0r1
qfr1
r = r1*
Figura 9 A Figura 9 mostra esquematicamente como pode ser feita a construo de AF a partir de uma expresso regular. importante observar que os estados que seriam finais em M1 e M2 para as expresses regulares r1 e r2, no o so quando se faz o autmato que representa r1+r2. E o mesmo ocorre com M1 em r1r2 e em r1*. Exemplo: seja a expresso regular (a + ab)(bc)*. * Observe que ela a concatenao das subexpresses (a +ab) e (bc) . Por sua vez, (a + ab) indica que apenas as palavras a e ab so vlidas dentro da subepresso. J * (bc) a concatenao dos smbolos b e c, repetidos em grupo, zero ou mais vezes. Assim, primeiro montamos o autmato para a primeira subexpresso (a + ab) que ser: a
Figura 10 16
Para montar o autmato para a segunda subexpresso (bc)*, primeiro montamos o autmato para bc somente, e sobre o seu resultado aplicamos a regra que permite repeti-lo zero ou mais vezes, obtendo assim:
Figura 11
Agora, uma vez obtidos os autmatos para (a +ab) e (bc)* basta coloc-los em seqncia usando uma transio para que representem a concatenao das duas subexpresses, e definir o estado que no possui transies a partir dele como estado final, representando assim o autmato para (a + ab)(bc)*, conforme a Figura 12. a
Figura 12
17
M: M qf1 q0
. . .
qfn
q0
. . .
qf
Figura 13
2 passo: elimina-se gradualmente os estados intermedirios entre o estado inicial e final de M construindo expresses regulares equivalentes s transies do estado eliminado.
Exemplo: Seja M o autmato da Figura 14. Inicialmente constri-se o autmato M, mostrado na Figura 15. c M a b a c q0 q1 b q3 Figura 14 q2
c M a a c q0 b q2
qf
q0
q1 b q3
Figura 15 18
Observe que o autmato da Figura 15 equivalente ao autmato da Figura 14, pois apenas foram acrescentados dois estados (um novo estado inicial e um final) ligados aos respectivos estados inicial e finais usando transies . Agora procedemos eliminao dos estados intermedirios entre q0 e qf. Assim, eliminado o estado q0 obtm-se o autmato da Figura 16.
a c q0 a*b q1 b
q2
qf
q3 Figura 16
A expresso regular colocada na transio de q0 para q1 representa que saindo de q0 at chegar em q1 foram lidos zero ou mais as e necessariamente um b. Isto corresponde exatamente ao estado eliminado (q0). Em seguida, eliminando-se o estado q1, obtm-se o autmato da Figura 17. c a*ba*c q2
qf
q0
a ba b
* *
q3 Figura 17
Observe que o estado q1 possui transio para dois estados distintos (q2 e q3). Portanto ao efetuar sua eliminao necessrio representar como que saindo de q0 * * se chega a q2 (representado por a ba c), e como se chega a q3 (representado por * * a ba b). As Figuras 18 e 19 representam a eliminao dos estados q2 e q3, respectivamente.
19
a*ba*cc*
q0
qf
a ba b
* *
q3
Figura 18
q0
a ba cc + a ba b
qf
Figura 19
A expresso regular a*ba*cc* + a*ba*b equivalente ao autmato original (M). Alm disso, sabendo que a subexpresso cc* equivalente a c+ e que a*ba* uma subexpresso comum funcionando como um prefixo para cc* e b, pode-se reescrever a expresso da seguinte forma: a*ba*(c+ + b). Ordem de Eliminao e Equivalncia. importante registrar que a ordem de eliminao dos estados pode resultar em expresses regulares diferentes, porm equivalentes.
20
Exemplo: seja o autmato da Figura 20. Esse autmato j determinstico. Portanto inicia-se eliminando estados inteis. O estado q5 um estado intil porque no estado final e no possui transies a partir dele, logo pode ser eliminado juntamente com suas transies, resultando no AFD apresentado na Figura 21.
q0
b a
q1
b
q2
a b b
q3
b
q4
q5
a
a Figura 20
q0
b a
q1
b
q2
a
q3
q4
a Figura 21 O AFD obtido no possui estados inacessveis. Ento passa-se construo das classes de equivalncia, iniciando com os conjunto Q F = {q0,q1} e F = {q2,q3,q4}. possvel observar que (q 0 , a ) = q1 e (q1 , a ) = q 0 . Isto , lendo o smbolo a a partir dos
21
estados que formam o conjunto Q F, o AFD permanece em um estado do prprio conjunto Q F. J a leitura do smbolo b a partir dos estados do conjunto Q F leva a estados do conjunto F. Alm disso, a leitura do smbolo a a partir de estados do conjunto F, o AFD permanece no conjunto F. Assim, podemos agrupar os estados q0 e q1 em nico estado (q01) e tambm os estados q2, q3 e q4 em um nico estado (q234), gerando o AFD apresentado na Figura 22. a b
q01
q234
Figura 22
Alm das observaes anteriores, as linguagens regulares possuem as seguintes propriedades: Concatenao: a concatenao de LRs resulta em LR Unio: a unio de LRs resulta em LR Fecho: o fecho (repetio de zero ou mais vezes) de LR resulta em LR Interseco: a interseco entre LRs resulta em LR Complemento: o complemento (* - L) de uma LR resulta em LR. Fechamento. Pelas propriedades anteriores, diz-se que a classe das linguagens regulares (LR) fechada quanto s operaes de concatenao, unio, fecho, interseco e complemento. Pois, o resultado dessas operaes recai dentro da prpria classe de linguagens regulares (LR). As operaes de concatenao, unio e fecho podem ser melhor visualizadas quando as linguagens regulares so representadas atravs de expresses regulares. Assim, sejam r e s expresses regulares para as linguagens L1 e L2. rs representa a concatenao de L1 e L2. sr representa a concatenao de L2 e L1. r+s representa a unio de L1 e L2. r* representa o fecho de L1
22
16. Bibliografia
LEWIS, Harry R. & PAPADIMITRION, Christos H. Elementos de Teoria da Computao. 2.ed. Porto Alegre, Bookman, 2000. MENEZES, Paulo Blauth. Linguagens formais e autmatos. 2.ed. Porto Alegre, Sagra Luzzatto, 1998. 165p.
23
HOPCROFT, John E.; ULLMAN, Jeffrey D.; MOTWANI, Rajeev. Introduo Teoria de Autmatos, Linguagens e Computao; Rio de Janeiro; Ed. Campus, 2002. DIVERIO, T. A.; MENEZES, P. B. Teoria da Computao: Mquinas Universais e Computabilidade, Srie Livros Didticos Nmero 5, Instituto de Informtica, da UFRGS, Editora Sagra Luzzatto, 1a edio, 1999. EUGNIO, Cristiana Munhoz; PALERMO, Lilliam. Unix Avanado: Programao CShell. Disponvel em http://www.ccuec.unicamp.br , acessado em 20/03/2006.
24