Professional Documents
Culture Documents
SUMRIO
1. SISTEMAS FORMAIS, GRAMTICAS E MODELOS ABSTRATOS DO COMPUTADOR ........... 5 1.1 1.2 1.3 1.4 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.6 1.7 2. Sistemas Formais ................................................................................................................................ 5 Origem Sistemas Formais ................................................................................................................... 5 Mtodos Formais ................................................................................................................................. 6 Linguagens Formais ........................................................................................................................... 6 Gramticas ......................................................................................................................................... 10 Definio Formal de Gramtica .................................................................................................. 11 Derivao e Reduo .................................................................................................................... 12 Notao ......................................................................................................................................... 13 Linguagens Definidas por Gramticas ........................................................................................ 13 Sentena, Forma Sentencial e Linguagem .................................................................................. 14 Tipos deLinguagens/ Gramticas ..................................................................................................... 14 Tipos de Linguagens Representao grfica ................................................................................. 15
LINGUAGENS REGULARES ................................................................................................................. 16 2.1 Operaes de Concatenao e Fechamento ..................................................................................... 16 2.1.1. Definio de Expresses Regulares ............................................................................................. 17 2.2. AUTMATOS FINITOS ........................................................................................................................ 18 2.2.1. Autmatos Finitos Determinsticos .............................................................................................. 18 2.2.2. Autmatos Finitos No-Determnisticos ...................................................................................... 20 2.2.3. Transformao de A.F.N.D. para A.F.D. .................................................................................... 21 2.2.4. Relao entre G.R. e A.F. ............................................................................................................. 22 2.2.5. Minimizao de Autmatos Finitos: ............................................................................................ 25 2.2.6. Aplicaes de A.F. e E.R. ............................................................................................................. 27 3. GRAMTICAS LIVRES DE CONTEXTO .................................................................................................... 29 3.1. SIMPLIFICAES DE GRAMTICAS LIVRES DE CONTEXTO ............................................................. 29 3.1.1. Smbolos Inteis ........................................................................................................................... 29 3.1.2. Eliminao de -produes .......................................................................................................... 30 3.1.3. Produes Unitrias ..................................................................................................................... 30 3.1.4. Eliminao de Recurso Esquerda ........................................................................................... 31 3.1.5. Fatorao Esquerda .................................................................................................................. 31 3.2. CONJUNTOS FIRST E FOLLOW .......................................................................................................... 32 3.2.1. Conjunto First............................................................................................................................... 32 3.2.2. Conjunto Follow ........................................................................................................................... 33 3.3. AUTMATOS COM PILHA .................................................................................................................. 33 3.3.1. Modelagem de MEFs como SDs ................................................................................................ 35
4. TEORIA DA COMPUTAO - TEORIA DE PROBLEMAS: DECIDIBILIDADE, COMPUTABILIDADE E COMPLEXIDADE ................................................................................................. 37 4.1. INTRODUO ..................................................................................................................................... 37 4.1.1. Conceitos e Propsitos Fundamentais da Teoria da Computao .............................................. 38 4.2. TEORIA DE PROBLEMAS .................................................................................................................... 41 4.2.1. Solucionabilidade de Problemas .................................................................................................. 41 4.2.2. Decidibilidade ............................................................................................................................... 41 4.2.3. Princpio da Resoluo de Problemas.......................................................................................... 42 4.2.4. Classes de Solucionabilidade de Problemas ................................................................................ 42 4.2.5. Definio Formal de Problema .................................................................................................... 43 4.2.6. Modos de Definir uma Funo .................................................................................................... 45 4.3. COMPUTABILIDADE ........................................................................................................................... 46 4.3.1. Origem da Computabilidade......................................................................................................... 46 4.3.2. Computabilidade de Funes ....................................................................................................... 49 4.3.3. Problema da Parada ..................................................................................................................... 50 4.3.4. Exemplo Problemas No Computveis ........................................................................................ 54 4.3.5. Computabilidade Parcial .............................................................................................................. 55 4.3.6. Complexidade................................................................................................................................ 56 4.3.7. Recursos Computacionais ............................................................................................................ 56 4.3.8. Problemas Tratveis e Intratveis ................................................................................................ 58
4.3.9.
REFERNCIAS BIBLIOGRFICAS............................................................................................................... 60
INTRODUO
Teoria de Linguagens Formais e Teoria de Mquina so prticas abrangentes que se inserem no estudo da Teoria da Computao em geral. A teoria da Computao uma cincia que procura organizar o conhecimento formal relativo aos processos de computao, como complexidade de algoritmos, linguagens formais, problemas intratveis. Atualmente, o termo computar est associado ao conceito de fazer clculos ou aritmtica, usando para isso mquinas computadoras. Entretanto, a noo de computabilidade pode ser dissociada da implementao fsica da mquina. Originalmente a palavra latina putare significa pensar, mas no caso da teoria da computao o sentido mais adequado seria algo como manipulao de smbolos, o que no necessariamente, pensamento. Essa manipulao de smbolos envolvendo, principalmente letras, nmeros e proposies algbricas permitiriam s mquinas computadoras, segundo Alan Turing (1939) realizar qualquer operao formal de que o ser humano seria capaz. Mesmo assim, alguns filsofos sustentavam que os computadores no poderiam computar (fazer aritmtica), porque no compreende a noo de nmero (apenas manipulam sinais eltricos). Todavia, pode-se falar, sem entrar no mrito da questo, que os computadores realizam uma computao perceptvel, j que transforma uma entrada em sada como se estivessem realmente computando. Neste caso, o que importa o efeito final do processo e no a maneira como ele realizado.
So Sistemas de manipulao de formas, sem preocupao de que estas formas significam no mundo real. A essncia de um Sistema Formal a Sintaxe. Semntica escrever de maneira correta lexicograficamente. Sintaxe: escrita na ordem correta. Manipula smbolos. Ex. 15::=Resultado+10 (erro) passaria pelo bloco lxico pois os tokens esto escritos de maneira correta. Mas no passaria no bloco sinttico.
1.2
A primeira notcia de que se tem de um sistema formal so os trabalhos de Euclides (300A.C.). Estes trabalhos organizam e sistematizam todo o conhecimento da poca com relao Geometria e so conhecidos sob nome de Elementos. Pela primeira vez, a apresentao feita atravs de axiomas, definies, postulados, teoremas e demonstraes. O arcabouo bsico dos Sistemas Formais devido a Ren Descartes (1596-1650) e de Leibniz (1646-1716) sobre linguagens e alfabetos. Frege (1848-1925), Peano (1858-1932), Whitehead (1861-1947), Bertran Russel (1872-1970) e Wittgenstein (1889-1951) criaram a formalizao como se costuma apresentar. Na construo de um Sistema Formal deve-se concentrar ateno na forma com que se trabalha. As Linguagens Naturais, aquelas usadas entre seus seres humanos para se comunicarem possuem ambigidades que impedem seu uso para este propsito. Portanto, torna-se necessrio, dar um passo na direo de evitar estas ambigidades o que feito usando uma linguagem constituda por um conjunto bem definido de smbolos e de regras de derivao, permitindo construir novos objetos a partir daqueles disponveis.
1.3
Mtodos Formais
Podem ser aplicados em diversos domnios, dependendo do contexto. So tcnicas com fundamentos matemticos usados para descrever e analisar propriedades de Sistemas. Um dos motivos de usar mtodos formais avaliar ou eliminar as ambigidades e inconsistncias na especificao. Normalmente cada mtodo formal est associado a uma linguagem formal. A Linguagem formal possui sua sintaxe e sua semntica bem definidas. possvel provar que um programa, ou parte dele, sempre termina em um tempo finito.
1.4
Linguagens Formais
O que a Teoria das Linguagens Formais? Para responder esta questo precisa-se primeiro responder o que Linguagem Formal, e para isto precisamos antes responder o que Linguagem. Inicialmente, de maneira bastante informal, podemos definir uma linguagem como sendo uma forma de comunicao. Elaborando um pouco mais esta definio, podemos definir uma linguagem como sendo um conjunto de elementos (smbolos) e um conjunto de mtodos (regras) para combinar estes elementos, usado e entendido por uma determinada comunidade. Exemplos: 1 - Linguagens Naturais (ou idiomticas) 2 - Linguagens de Programao, de Controle, de Consulta 3 Protocolos de Comunicao Contudo, apesar de intuitiva, esta definio no nos permite responder satisfatoriamente as duas primeiras questes; precisamos antes dar um sentido formal para a definio de linguagem. Faremos isto nas duas prximas sees. O estudo dos diversos tipos de linguagens aplica-se a diversas reas de informtica, sempre que for necessrio analisar o formato e o significado de uma seqncia de entrada. O estudo das linguagens formais, sob a forma de gramticas a base da teoria da interpretao e compilao. A deciso de uma seqncia constitui uma unidade vlida para a linguagem baseada em regras definidas. O nome Teoria de Linguagens Formais devido a que regras para uma linguagem devem ser explicitamente definidas em termos de quais seqncias ou cadeias (strings) podem ocorrer. O estudo de linguagens formais objetiva como especificar um conjunto de cadeias para uma determinada linguagem.
Conceitos Bsicos:
Linguagem Formal: o conjunto de palavras sobre um alfabeto. Um Alfabeto definido simplesmente como um conjunto finito de smbolos. Por exemplo, o alfabeto da lngua portuguesa V = {a, b, c, d..., z}. O alfabeto utilizado para expressar os nmeros naturais V = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}. Um Smbolo uma entidade abstrata que no precisa ser definida formalmente, assim como ponto e linha no so definidos na geometria. Letras e dgitos so exemplos de smbolos freqentemente usados. Smbolos so ordenveis lexicograficamente e, portanto, podem ser comparados quanto sua igualdade. Por exemplo, tomando as letras do alfabeto, pode-se Ter a ordenao a < b < c < ...< z. A utilidade dos smbolos est na possibilidade de us-los como elementos atmicos em definies de linguagens. Uma sentena sobre um alfabeto V, uma seqncia (ou cadeia) finita de smbolos do alfabeto. Exemplo de sentenas sobre V = { a , b }: a, b, aa, ab, bb, aaa, aab, aba, baa, ... Tamanho de uma sentena: Seja w uma sentena . O tamanho da sentena w, denotado por |w|, definido pelo nmero de smbolos (elementos do alfabeto) que compem w.
Sentena vazia uma sentena constituda de nenhum smbolo; isto , uma sentena de tamanho 0 (zero). Observaes: Representa-se a sentena vazia por (psolon). - Por definio, || = 0
Uma Cadeia uma seqncia finita de smbolos justapostos (sem vrgula separando os caracteres). Por exemplo, se a, b e c so smbolos, ento abcb um exemplo de cadeia utilizando estes smbolos. O tamanho de uma cadeia o comprimento da seqncia se smbolos que a forma. O tamanho de uma cadeia w denotado por |w|. Por exemplo, |abcb| = 4. A cadeia vazia denotada por ., e tem tamanho igual a 0; assim || = 0. Um prefixo de uma cadeia um nmero qualquer de smbolos tomados de seu incio, e um sufixo um nmero qualquer de smbolos tomados de seu fim. Por exemplo, a cadeia abc tem prefixo a, ab e abc. Seus sufixos prprios so , c, bd, abc. Um prefixo ou sufixo que no so a prpria cadeia so chamados de prefixo prprio e sufixo prprio. No exemplo anterior, os prefixos prprios so , a e ab; e os sufixos prprios so , c e bc. Potncia de uma sentena: Seja w uma sentena . A n-sima potncia de w, representada por wn, significa w repetido n vezes. Exemplos: se x = ab, ento x3 = ababab Para x, x0 = A Concatenao de duas cadeias a cadeia formada pela escrita da primeira cadeia seguida da Segunda, sem nenhum espao no meio. Por exemplo, a concatenao de compila e dores compiladores. O operador de concatenao a justaposio. Isto , se w e x so variveis que denotam cadeias, ento wx a cadeia formada pela concatenao de w e x. No exemplo acima, se tornarmos w=compila e x=dores, tem-se compiladores. O Fechamento de um Alfabeto V, representado por V*, o conjunto de todas as cadeias que podem ser formadas com smbolos de V, inclusive a cadeia vazia. O Fechamento Positivo de V, denotado por V+ definido como V* - {}. Ou seja, todas as cadeias formadas com os smbolos de V, exceto a cadeia vazia.
Assim, por exemplo, o conjunto de sentenas vlidas da lngua portuguesa poderia ser definido como um subconjunto de {a, b, c,.., z}+. Representaes de Linguagens: O estudo de linguagens est intimamente relacionado ao estudo das formas de representao dessas linguagens. O problema de representao de uma linguagem, por sua vez, est relacionado com o fato dela ser finita ou infinita: Linguagem Finita: uma Linguagem que pode ser representada por enumerao. Exemplo: A linguagem definida como sendo o conjunto dos inteiros positivos pares maiores que 0 e menores que 20, pode ser representado por: L = {2, 4, 6, 8, 10, 12, 14, 16, 18}. Linguagem Infinita: Neste caso, na impossibilidade de usarmos enumerao, precisamos encontrar uma representao finita para estas linguagens. Exemplo: A linguagem definida como sendo o conjunto dos inteiros pares poderia ser representada por V ={2, 4, 6, 8, 10,...} que, que apesar de intuitiva, no finita e nem precisa. As representaes finitas de linguagens classificam-se em Reconhecedores e Sistemas Geradores: Um Reconhecedor para uma linguagem um dispositivo formal usado para verificar se uma determinada sentena pertence ou no a uma determinada linguagem. So exemplos de reconheceres de linguagens, as Mquinas de Turing, o Autmato de pilha e o Autmato Finito. Cada um destes mecanismos reconhece um conjunto bastante particular de linguagens. Entretanto, os modelos so inclusivos: todas as linguagens reconhecveis por um Autmato Finito podem ser reconhecidas por um Autmato de Pilha e todas as linguagens reconhecveis por um autmato de pilha so reconhecveis por Mquinas de Turing. Um Sistema Gerador um dispositivo formal atravs do qual sentenas de uma linguagem podem ser sistematicamente geradas. Exemplos de sistemas geradores so as gramticas gerativas, definidas pela primeira vez por Noam Chomsky, em seus estudos para sistematizar a gramtica da lngua inglesa.
Todo Reconhecedor e todo sistema gerador pode ser representado por algoritmos e/ou procedimentos. Pode-se garantir que linguagens reconhecidas por autmatos so reconhecidas algoritmicamente. J o conjunto das linguagens reconhecidas por Mquinas de Turing, que mais
abrangente, inclui linguagens reconhecveis algoritmicamente e linguagens indecidveis, que no possuem algoritmos para reconhecimento. Linguagens Formais: So linguagens que podem ser representadas de maneira finita e precisa atravs de sistemas com sustentao matemtica (dispositivos formais ou modelos matemticos).
Obs: Entende-se por Teoria das Linguagens Formais e dos Autmatos o estudo de modelos matemticos que possibilitam a especificao e o reconhecimento de linguagens (no sentido amplo da palavra), suas classificaes, estruturas, propriedades, caractersticas e inter-relacionamentos.
A importncia desta Teoria na Cincia da Computao dupla: Ela tanto apia outros aspectos tericos da Cincia da Computao (decidibilidade, computabilidade, complexidade computacional, por exemplo), como fundamenta diversas aplicaes computacionais tais como processamento de linguagens, reconhecimento de padres, modelagem de sistemas.
1.5
Gramticas
Sabe-se que uma linguagem qualquer conjunto ou subconjunto de sentenas sobre um alfabeto, ou seja: dado um alfabeto V, uma linguagem L sobre esse alfabeto, um subconjunto de V* L V*. Assim sendo, devemos nos preocupar em definir que subconjunto esse. A finalidade de uma gramtica definir o subconjunto de V* que forma (define) uma determinada linguagem. Uma gramtica define uma estrutura sobre um alfabeto de forma a permitir que apenas determinadas combinaes sejam vlidas, isto , sejam consideradas sentenas (definindo assim a linguagem que ela representa). O que Gramtica? Uma gramtica, de maneira informal, pode ser definida como sendo: a) Um sistema gerador de linguagens; b) Um sistema de reescrita; c) Uma maneira finita de descrever (representar) uma linguagem; d) Um dispositivo formal usado para especificar de maneira finita e precisa uma linguagem potencialmente infinita. 10
Uma gramtica gerativa um instrumento formal capaz de construir (gerar) conjuntos de cadeias de uma determinada linguagem. As gramticas so instrumentos que facilitam muito a definio das caractersticas sintticas das linguagens. So instrumentos que permitem definir, de forma formal e sistemtica, uma representao finita para linguagens infinitas.
Exemplo intuitivo de uma Gramtica: (um subconjunto da gramtica da lngua portuguesa) <sentena> :: = <sujeito> <predicado> <sujeito> :: = <substantivo> | <artigo> <substantivo> | <artigo> <adjetivo> <substantivo> <predicado> :: = <verbo> <objeto> <substantivo> :: = joo | Maria | cachorro | livro | po <artigo> :: = o | a <adjetivo> :: = pequeno | bom | bela <verbo> :: = morde | le | olha <objeto> :: = <substantivo> | <artigo> <substantivo> | <artigo> <adjetivo> <substantivo> Notao utilizada: < ......... > : categoria sinttica ou gramatical; ::= | ::= : definido por : ou (alternativa) : regra de sintaxe (ou regra gramatical ou regra de produo)
11
As regras que relacionam variveis e terminais so chamados de produes, que sempre iniciam num ponto, o smbolo inicial. Uma regra de produo tpica estabelece como uma determinada configurao de variveis e terminais pode ser reescrita, gerando uma nova configurao. Uma Gramtica especificada por uma qudrupla (N,T,P,S), onde: N o conjunto de no-terminais, ou variveis. T o conjunto de terminais, ou alfabeto, sendo que N e T so conjuntos disjuntos (no se misturam) P um conjunto finito de produes, ou regras, sendo que P(NT)+ X (NT)* S o smbolo no terminal inicial, sendo SN. a partir dele so geradas todas as sentenas da linguagem. Uma produo (n,p) pode ser escrita n::=p, para facilitar a leitura. No caso de existir mais de uma alternativa para uma mesma configurao e smbolos do lado esquerdo da regra, como exemplo: <substantivo> ::= coisa <substantivo> ::= co <substantivo> ::= pedra pode-se escrever as opes em uma nica produo, separada por |. O mesmo ex. ficaria: <substantivo> ::= coisa | co | pedra O smbolo ::= pode ser lido como definido por e o smbolo | pode ser lido como ou.
12
Observao: derivao a operao adequada para gerao de sentenas; enquanto que a operao de reduo adequada ao reconhecimento de sentenas.
1.5.3 Notao
Como converso notacional, pode-se admitir que smbolos no-terminais sero sempre representados por letras maisculas, e terminais por letras minsculas. Assim, uma regra como <a> ::= <a>b | b poderia ser escrita como A::= Ab | b. Alm disso, os conjuntos T e N podem ficar subentendidos e no precisam ser expressos sempre. Pode-se ainda arbitrar que o smbolo inicial S ser o no-terminal que aparecer primeiro do lado esquerdo da primeira produo da gramtica. Assim, bastaria listar as regras de produo para se Ter a definio completa da gramtica. Por exemplo, a gramtica: S ::= ABSc | BA ::= AB Bc ::= bc Ab ::= ab Bb ::= bb Aa ::= aa
Tem como smbolo inicial S, o conjunto de terminais {a, b, c} e o conjunto dos no-terminais (variveis) {A, B, C}. As produes esto detalhadas. Tem-se assim a definio completa da gramtica.
13
1.6
Impondo restries na forma das produes, pode-se identificar quatro tipos diferentes de gramticas. Essa classificao foi feita por Chomsky e conhecida como hierarquia de Chomsky. Os tipos de gramticas definidos nesta hierarquia so: a) Tipo 0: No h restrio na forma de das produes. o tipo mais geral. Exemplo: S ::= ABS | ab Ba ::= aB | a Aa ::= aa | a |
b) Tipo 1: Seja G=(N,T,P,S). Se: O smbolo Inicial S no aparece no lado direito de nenhuma produo, e Para cada produo 1 ::= 2 ( o n de smbolos da direita tem que ser igual ou maior o da esquerda) ento se diz que G uma gramtica do tipo 1, ou Gramtica Sensvel ao Contexto. Exemplo: S ::= aBC | aABC aB ::= ab bB ::= bb A ::= AABC | aBC bC ::= bc CB cC ::= cc ::= BC
14
c) Tipo 2: Uma Gramtica G=(N,T,P,S) do tipo 2, ou Gramtica Livre de Contexto, se cada produo livre de contexto, ou seja, cada produo da forma: (No lado esquerdo tem apenas um smbolo no-terminal. A ::= com A N e (T N)* Exemplo: S ::= aSb | A A ::= cAd | e O Tipo 2 no definido como restrio do tipo 1, porque se permite produes da forma A ::= ; tambm se permite que o smbolo S aparea no lado direito das produes.
d) Tipo 3: Uma gramtica G do tipo 3, ou regular, se cada produo da forma A::= aB, A ::= a, A ::= , onde A e B so no-terminais e a um terminal. (Do lado esquerdo apenas um no terminal, e do lado direito, pode ter o epson, um terminal e um no-terminal). Exemplo: S ::= aS | bB B ::= bB | bC C ::= cC |
1.7
Uma Linguagem L do tipo i se existe uma gramtica G de tipi i tal que L = L(G), para i igual 0, 1, 2, 3. Pode-se relacionar cada tipo de gramtica com uma mquina reconhecedora da seguinte maneira: a gramtica do tipo 0 e 1 gera linguagens reconhecveis por Mquinas de Turing; a gramtica do tipo 2 gera linguagens reconhecveis por autmatos de pilha; a gramtica do tipo 3 gera linguagens reconhecveis por autmatos finitos. Representao:
15
2. Linguagens Regulares
As Linguagens Regulares constituem um conjunto de linguagens decideis bastante simples e com propriedades bem definidas e compreendidas. Essas linguagens podem ser reconhecidas por autmatos finitos e so facilmente descritas por expresses simples, chamadas expresses regulares (E.). Antes de introduzir o mecanismo das E.R.s, ser feito uma reviso sobre operaes de concatenao e fechamento de conjuntos, operaes bsicas para E.R.s.
2.1
Seja C um conjunto finito de smbolos (alfabeto), e sejam L, L1 e L2 subconjuntos de C* (linguagens sobre o alfabeto C). A concatenao de L1 e L2, denotada por L1L2 o conjunto { xy | x L1 e y L2}. Em outras palavras, as cadeias da linguagem L1L2 so formadas por uma cadeia de L1 concatenada a uma cadeia de L2, nesta ordem, incluindo a todas as combinaes possveis. Defini-se L0 = {} e Ln = LL n-1 para n 1. O fecho de Kleene ( ou simplesmente fecho) de uma linguagem L, denotado por L*, o conjunto:
L* = U Li
i=0
L+ = U Li
i=1
Em outras palavras, L* denota as cadeias construdas pela concatenao de qualquer nmero de cadeias tomadas de L. O conjunto L+ semelhante, mas neste caso, as cadeias de zero palavras, cuja concatenao definida como , so excludas. Nota-se, porm, que L+ contm se e somente se L contm. Esta definio difere da definio do fechamento de alfabetos, onde A+ era definido como A* - {}. No caso da linguagem, pode ocorrer dois casos: Se L, ento L+ = L*; Se L, ento L+ = L* - {}. Exemplo: 16
1. Seja L1 = {10, 1} e L2 = {0011, 11}. Ento L1L2 = {100011, 1011, 10011, 111}
2. {10, 11}* = {, 10, 11, 1010, 1011, 1110, 1111,...} 2.1.1. Definio de Expresses Regulares
Seja A um alfabeto. As expresses regulares sobre o alfabeto A e os conjuntos (linguagens) que elas denotam so definidas indutivamente como segue: uma expresso que denota o conjunto vazio; uma expresso regular que denota o conjunto {}; Para cada smbolo em a em A, a uma expresso regular que denota o conjunto {a}; Se r e s so expresses regulares que denotam os conjuntos R e S, respectivamente, ento (r+s), (rs), e (r*) so expresses regulares que denotam os conjuntos RS, RS e R*, respectivamente. Quando se escreve E.R.s, pode-se omitir muitos parnteses se for assumido que o smbolo * tem precedncia maior que a concatenao e +, e que a concatenao tem precedncia maior que +. Por exemplo: ((0(1*))+0) pode ser escrita como )!* + ). Alm disso, pode-se aplicar simplificaes abreviando expresses como rr* para r+. As E.R.s possuem as seguintes propriedades algbricas:
Exemplo; Exerccios; 17
2.2.
Autmatos Finitos
Autmato Finito um reconhecedor de Linguagens Regulares. Estende-se por reconhecedor de uma Linguagem L um dispositivo que tomado uma seqncia w como entrada, responde sim se w L e no caso contrrio. Os autmatos Finitos classificam-se em: Autmatos Finitos Determinsticos (A.F.D) Autmatos Finitos No-Determinsticos (A.F.N.D)
2.2.1.1.
Interpretao de
A interpretao de (q, a) = p, onde {q, p} K e a , de que se o controle de M est no estado q e o prximo smbolo de entrada . Ento "a" deve ser reconhecido e o controle passa para o prximo estado (no caso p). Nota-se que a funo de mapeamento definida por x , ou seja, de um estado, atravs do reconhecimento de um smbolo, o controle passa para UM NICO outro estado. Por esse motivo, este autmato chamado de DETERMINSTICO. Logicamente um estado uma situao particular no processo de reconhecimento de uma sentena. Uma sentena x aceita (reconhecida) por um A.F.M. = (, , , q0, F) se, e somente se, (q0, x) = p p F. Uma Linguagem Aceita por Mapeamento um conjunto de todas as sentenas aceitas por M. Formalmente, defini-se por: L(M) = {x | (q0, x) = p p F}
18
2.2.1.2.
Diagrama de Transio
Um Diagrama de Transio para um A.F.M. um grafo direcionado e rotulado. Os vrtices representam os estados e fisicamente so representados por crculos, sendo que o estado inicial diferenciado por uma seta com rtulo inicio e os estados finais so representados por crculos duplos. As arestas representam as transies, sendo que entre dois estados p e q existir uma aresta direcionada de p para q com rtulo a( a ) (p, a) = q em M. 2.2.1.3. Tabela de Transio
uma representao tabular de um A.F. Nesta tabela as linhas representam os estados (o inicial por uma seta e os finais por asteriscos). As colunas representam os smbolos de entrada e o contedo da posio (q, a) ser igual a p se existir (q, a) = p, seno ser indefinida. Exemplos: Abaixo so apresentados dois exemplos de A.F.D nas formas grficas e tabulares: Exemplo1: A.F.D que reconhea as sentenas da linguagem L = { (a, b)+, onde o nmero de as impar}. Forma Grfica:
Incio q0
a b q1
Forma Tabular:
b q0 a q1 b q0
q1 q0 q1 * * Exemplo2: A.F.D. que reconhea as sentenas da Linguagem l = { (0,1)*, onde todos os 1,s apaream consecutivos}. Forma Grfica:
Incio
q0
q1
q2
19
Forma Tabular: * * * q0 q1 q2
0 q0 q2 q2
1 q1 q1 ___
a q0 q1
b q2
b q3
a, b Forma Tabular: q0 q1 q2 * q3
1 q0 q2 q3 ___
20
2.2.2.1.
A.F.N.D.
Implementao Complexa
0 q0, q1
1 q0 21
q1 q2 * q3
q2 q3 ___
22
b) Para mostrar que L(M) = L(G), deve-se mostrar que (1) L(G) L(M) e (2) L(M) L(G). esta demonstrao fcil, considerando-se as produes as produes da G.R. e a definio das transies de M, sendo omitida neste texto.
Exemplo: Dada a gramtica regular abaixo, que gera as sentenas da linguagem {(anbm), com n par e m > 0}, iremos definir um A.F. que reconhea as sentenas desta linguagem.
Gramtica:
Autmato: Primeiramente deve-se definir os estados do autmato, com um estado novo, denominado aqui C. assim, tem-se que K = {S, A, B, C}. O alfabeto o mesmo, assim = {a, b}, o estado inicial S, e F = {B, C}, pela definio acima. Na forma tabular o autmato fica o seguinte: S A * * B C a A S ___ ___ b B ___ B ___
Nota-se que pode ser gerado um estado inalcanvel (o novo estado, quando no houverem produes da forma B a, B N e a T). Na forma grfica o autmato fica: a b
Incio
S
b
C B
b 23
Teorema 4.3: Seja um A.F.M. = (K, , , q0, F). Ento uma G.R. G = (N, T, P, S) | L(G) = L(M). Prova: a) Mostrar que G existe; b) Mostrar que L(G) = L(M). a) Seja M = (K, , , q0, F) um A.F. Construir uma G.R. G = (N, T, P, S), como segue: 1. N = K; 2. T = ; 3. S = q0; 4. Define-se P como segue: Se (B, a) = C, ento adiciona-se B ::= aC em P; Se (B, a) = C e C F, ento adiciona-se B ::= a em P; Se q0 F, ento L(M). Assim a gramtica deve ser transformada, encontrando uma outra G.R., G1, tal que L(G1) = L(G) {}, e L(G1) = L(M). Seno L(M). b) Para mostrar que L(G) = L(M), deve-se mostrar que (1) L(M) L(G) e (2) L(G) L(M). Esta prova tambm no ser expressa aqui neste texto. Exemplo: Tem-se o seguinte A.F.: a a b b a
Incio
S
b
Na forma tabular:
S * A B C
a A S C B
b B C S A
24
A G.R. definida pelo exemplo (algoritmo) acima resulta em: S ::= aA | bB | a A ::= aS | bC B :: aC | bS C ::= aB | bA | b
Estados Inacessveis: Um estado q K inacessvel quando no existe w tal que a partir de q0, seja alcanado, ou seja, ~ w | (q0, w) = q, onde w uma sentena ou parte dela. Estados Mortos: Um estado q K morto se ele F e ~ w | (q, w) = p, onde p F e w uma sentena ou parte dela. Ou seja, q morto se ele no final. E, a partir dele nenhum estado final alcanado. Estados Equivalentes: Um conjunto de estados q1, q2,..., qj so equivalentes entre s, se eles pertencem a uma mesma CLASSE DE EQUIVALNCIA. Classe de Equivalncia: Um conjunto de estados q1, q2,..., qj esto em uma mesma C.E. se (q1, a), (q2, a),..., (qj, a), para cada a , resultam respectivamente nos estados qi, qi+1 ,..., qn e estes pertencem a uma mesma C.E. 2.2.5.1. Mtodo para Construo do Autmato Finito Mnimo
1. Eliminar os estados inacessveis; 2. Eliminar os estados mortos; 3. Construir todas as classes de equivalncia; 4. Construir M como segue: 25
a) K o conjunto de C.E. obtidas; b) q0 ser a C.E. que contiver q0; c) F ser o conjunto das C.E. que contenham pelo menos um elemento F, isto , {[q] | p [q] e p F, onde [q] um C.E.}; d) ([p], a) = [q] (p, a) = q uma transio de M e p e q so elementos de [p] e [q], respectivamente. Exemplo: Minimizar o A.F.D. definido na seguinte tabela de transio: A B C * D E F * G H a G F C A E B G H b B E G H A C F D
Tem-se que os estados acessveis so: {A, G, B, F, E, C}. Portanto, pode-se eliminar os estados D e H. Assim, o novo A.F.D. : * A B C E F * G
a G F C E B G
b B E G A C F
Nenhum dos estados do A.F.D. morto. Assim, pode-se construir as classes de equivalncia. No primeiro passo, duas classes de equivalncia so construdas: F e K-F. Cada passo do algoritmo representado numa linha da tabela abaixo:
26
a) Analisador Lxico: Os tokens (smbolos bsicos) de uma linguagem de programao geralmente podem ser especificados eficientemente atravs de E.R., as quais podem ser automaticamente convertidas para A.F.D. equivalentes, cuja implementao (o analisador lxico propriamente dito) trivial. Isto permite inclusive, a gerao automtica de um analisador lxico a partir da especificao formal dos tokens de uma linguagem de programao. b) Editores de Texto: As operaes de busca e substituio de cadeias de caracteres em um texto, podem ser eficientemente realizadas, se a cadeia for expressa em termos de E.R. e a operao realizada em termos de um A.F. usufruindo da possibilidade da converso automtica de E.R. para A.F., de forma transparente ao usurio. c) Alm das aplicaes acima (tidas como as principais) podemos tambm destacar o uso destas ferramentas nas seguintes reas: 27
c.1) Protocolos de comunicao c.2) Projeto (modelagem) de sistemas operacionais c.3) Path Expression c.4) Problemas especfico tais como: segurana de arquivos, desorientao em sistemas de hipertexto, modelagem de redes neurais, compresso de dados, etc...
28
3.1.
Existem vrias maneiras de restringir as produes de uma gramtica livre de contexto sem reduzir seu poder expressivo. Se L uma linguagem livre de contexto no-vazia, ento L pode ser por uma gramtica livre de contexto G com as seguintes propriedades: a) Cada varivel e cada terminal de G aparecem na derivao de alguma palavra de L. b) No h produes da forma A::= B, onde A e B so variveis. Alm disso, se L, ento h necessidade de produes da forma A::= .
29
30
As produes de cada smbolo K so as produes R ::= , onde R um elemento de Nk e uma produo no unitria. No exemplo, as produes de S so as produes unitrias de S, A, B e C. Exemplo; Exerccios;
se vamos expandir A em , ou 2. Entretanto, pode-se postergar a deciso expandido A para A. Ento, aps enxergarmos a entrada derivada a partir de , expandiremos A em 1 ou em 2. Isto , as produes originais, fatoradas esquerda, tornam-se: A A A 1, 2 Entrada: Gramtica G Sada: Uma gramtica equivalente fatorada esquerda Mtodo: Para cada no-terminal A, encontrar o mais longo prefixo comum a mais de duas ou mais alternativas. Se , isto , existe um prefixo comum no-trivial, substituir todas as produes de A, A 1 | 2 | ... | n | , onde representa todas as alternativas que no comeam com , por A A | A 1 | 2 | ... | n Aqui, A um novo no-terminal. Aplicar repetidamente esta transformao at que no haja duas alternativas com um mesmo prefixo comum. Exemplo; Exerccios;
3.2.
32
Para determinar o conjunto FIRST de cada um dos no-terminais de uma gramtica, procedese como: 1. Cria-se uma tabela TABFIRST cujas linhas so rotuladas com os no-terminais da gramtica e com uma coluna rotulada como FIRST, que ir conter os smbolos pertencentes ao FIRST de cada no-terminal. Inicializa-se cada uma das posies desta tabela com (conjunto vazio); 2. Para cada um dos no-terminais, calcula-se o seu conjunto FIRST; 3. Repete-se o passo 2 at que no ocorra mais nenhuma modificao na tabela; Exemplo; Exerccios;
3.3.
Assim como as expresses regulares possuem seu Autmato equivalente o Autmato Finito, as gramticas livres de contexto tambm possuem sua mquina equivalente o Autmato com Pilha ( pushdown automata). A equivalncia algo satisfatrio desde que o autmato com pilha seja no determinstico, pois sua verso determinstica aceita somente os subconjuntos das linguagens livres de contexto. Ou seja, nem toda linguagem livre de contexto pode ser reconhecida por um autmato com pilha. Sendo assim, necessrio adicionar um aspecto que permita que ele reconhea qualquer linguagem livre de contexto. Neste caso, uma pilha adicionada ao Autmato lhe confere a facilidade de no-determinismo. 33
O Autmato com Pilha anlogo ao Autmato Finito, incluindo uma pilha como memria auxiliar. A pilha independente da fita de entrada e no possui limite mximo de tamanho (memria infinita). O A.P. essencialmente um A.F. com controle da fita de entrada e da pilha. Sua principal caracterstica que o ltimo smbolo gravado o primeiro a ser lido (first in last out), como mostra a figura abaixo:
Gravao
Leitura
Topo
Sentido do Crescimento Base Figura 2: Estrutura do Tipo Pilha. A base uma pilha fixa e define o seu incio. O Autmato de Pilha composta por quatro partes: a) Fita: Anloga do Autmato Finito; b) Pilha: Memria auxiliar que pode ser usada livremente para leitura e gravao. dividida em clulas, armazenando cada uma,, um smbolo do alfabeto auxiliar (pode ser igual ao alfabeto de entrada). Em uma estrutura do tipo pilha, a leitura ou gravao sempre na mesma extremidade denominada topo. O topo varivel e define a posio do ltimo smbolo gravado. No possui tamanho fixo e nem mximo, sendo seu tamanho atual, igual ao tamanho da palavra armazenada. Seu valor inicial zero. c) Unidade de Controle: Reflete o estado corrente da mquina. A unidade de controle possui um nmero finito e pr-definido de estados. Possui uma cabea de fita e uma cabea de pilha: Cabea de Fita: unidade de leitura a qual acessa uma clula da fita de cada vez e movimenta-se exclusivamente para a direita. possvel testar se a entrada foi completamente lida. Cabea da Pilha: unidade de leitura e gravao a qual move para a esquerda (ou para cima) ao gravar e para direita (ou para baixo), ao ler um smbolo. Acessa um smbolo 34
de cada vez, estando sempre posicionada no topo. A leitura exclui o smbolo lido. possvel testar se a pilha est vazia. Em uma operao de gravao, possvel armazenar uma palavra composta por mais de um smbolo. Neste caso, o smbolo do topo o mais esquerda da palavra gravada. d) Programa ou Funo de Transio: Comanda a leitura da fita, leitura de gravao da pilha e define o estado da mquina. uma funo parcial que dependendo do estado atual, smbolo lido na fita e smbolo lido na pilha, determina o novo estado e a palavra a ser gravada na pilha. Pode mudar de estado sem ler a fita (movimento vazio). Um Autmato com Pilha No-Determinstico (A.P.N) ou simplesmente Autmato com Pilha (A.P) M uma 6-upla: M = (, Q, , q0, F, V) onde: alfabeto de entrada; Q conjunto de estados possveis do autmato o qual finito; funo programa ou funo de transio: : Q x ( {, ?}) x (V {, ?}) 2QxV q0 estado inicial do autmato, tal que q0 elemento de Q; F conjunto de estados finais tal que F Q; V alfabeto auxiliar ou alfabeto da pilha. Algumas consideraes devem ser feitas em relao a funo programa: O smbolo na. Ieitura indica que o A.P. no l e nem move a cabea da fita ou da pilha (movimento vazio) e na gravao indica que nenhuma gravao realizada na pilha (e no move a cabea); ? significa que a funo pode no ser total, ou seja, indefinida para alguns argumentos do conjunto da partida. A omisso do parmetro de leitura denotada por ?. Isto indica que toda palavra de entrada foi lida na fita e na leitura faz o teste de pilha vazia.
possveis de entrada e da sada so requeridos como alfabetos de entrada e sada. Sob estas simplificaes, basta declarar explicitamente um estado inicial correspondente ao tempo zero. Um autmato (ou uma mquina) descrito como uma 6-upla: At = {U, Y, X, x0, , }, onde: U um conjunto finito de entradas; Y um conjunto finito de sadas; X um conjunto de estados ou espao de estados; x0 X o estado inicial; : U x X a funo de prximo estado ou funo de transio; : U x X Y a funo de prxima sada. Ento um autmato um sistema dinmico invariante e discreto no tempo. Quando o espao de estado um conjunto finito, o autmato chamado de autmato finito. Assim, esta sxtupla formal pode ser interpretada como sendo uma descrio matemtica de uma mquina qual, se no tempo t0, estiver no estado x0 e receber um segmento de entrada u do tempo t0 ao tempo t estar no tempo t no estado (x, u) e emitir a sada (x, u).
36
Esta classificao engloba problemas de toda a natureza, envolvendo desde problemas clssicos que fundamentam a teoria da computao at problemas (ou instncias de problemas) prticos da cincia da computao, tais como:
1 Existe programa para solucionar um determinado problema? 2 Qual o poder de expresso de um determinado modelo de especificao? 3 Dado um programa qualquer, ele sempre tem parada garantida? 4 Dois programas P1 e P2 so equivalentes entre si? 5 Uma determinada soluo a melhor soluo para um dado problema? 6 Qual o significado de um determinado programa? 7 Dado um programa qualquer, este programa est correto?
Esta lista poderia ser expandida e detalhada, contudo, seu objetivo enfatizar a abrangncia da teoria da computao. Dos tpicos aqui listados, complexidade (5), semntica (6) e correo/construo (7), costumam ser tratados como disciplinas especficas e independentes, enquanto que os demais se classificam como problemas bsicos da teoria da computao. Todos os problemas computacionais podem ser tratados (estudados) sob a tica da Teoria das Linguagens Formais e Autmatos. 37
Segundo esta tica, a teoria da computao pode ser vista como um conjunto de modelos formais (juntamente com suas propriedades) que fundamentam a cincia da computao. Tais modelos incluem Autmatos (Finitos, de Pilha e Mquinas de Turing) e Gramticas, enquanto que as
propriedades de interesse envolvem questes de decidibilidade, Inter-relacionamento entre modelos (abrangncia, equivalncia, etc...) e complexidade computacional. Nesta apostila, abordaremos a Teoria da Computao segundo a tica da Teoria das Linguagens Formais e Autmatos.
4.1.1.
Com o objetivo de melhor fundamentar as questes cobertas pela teoria da computao e de identificar claramente a possibilidade de reduzir tais questes a problemas pertinentes a Teoria das Linguagens Formais, apresentaremos nesta seo alguns conceitos fundamentais e comentamos alguns dos principais propsitos que sustentam a teoria da computao.
Procedures e Algortmos
O conceito de algoritmo fundamental dentro da cincia da computao e pode ser definido formalmente segundo vrios propsitos da teoria da computao (como ser visto no final desta seo) ou informalmente em funo da definio de procedure (como veremos a seguir). Procedure: m conjunto finito de passos (instrues), os quais podem ser executados mecanicamente em uma quantidade fixa de tempo e com uma quantidade fixa de esforo. Um bom exemplo de uma procedure um programa de computador escrito em linguagem de mquina, pois tal programa possui um nmero finito de passos, todos executveis mecanicamente com uma quantidade fixa de recursos. Algoritmo: uma procedure que sempre pra; ou seja, uma procedure cuja execuo chegar ao final, independentemente de quais sejam suas entradas. Adicionalmente, dizemos que uma procedure termina para uma determinada entrada, se existe um nmero finito t, tal que aps a execuo de t instrues (no necessariamente distintas), ou no existem mais instrues a serem executadas, ou a ltima instruo executada foi uma instruo halt.
Exemplos: 38
1 Dado um nmero inteiro positivo I, determinar se I ou no um nmero primo. 2 Dado um inteiro I, determinar se existe um nmero perfeito maior que I (obs: um nmero perfeito se a soma de seus divisores (exceto ele mesmo) igual ao prprio nmero). 3 Dado um programa escrito em uma determinada linguagem de programao, determinar se esse programa est sintaticamente correto. Este problema uma instncia do seguinte problema genrico: dada uma cadeia de caracteres x determinar se essa cadeia gerada por uma Gramtica Livre de Contexto (ou reconhecida por um Autmato de Pilha). 4 Dado um programa qualquer, determinar se existe alguma entrada para a qual o programa entrar em loop.
Os problemas enunciados nos exemplos 1 e 3 possuem representao algortmica enquanto que os problemas dos exemplos 2 e 4 s so representveis via procedures.
A partir das definies acima, podemos notar claramente a relao entre problemas decidveis e indecidveis com conjuntos recursivos e recursivamente enumerveis; ou seja, um problema decidvel se o conjunto de solues das diversas instncias deste problema um conjunto recursivo, e indecidvel caso tal conjunto seja recursivamente enumervel. Assim sendo, torna-se evidente que a questo da decidibilidade pode ser tratada formalmente atravs dos modelos que compem a Teoria das Linguagens e Autmatos.
39
A classe dos problemas indecidveis significativamente representada pelo HALTING PROBLEM (problema da parada) que consiste em: Dado uma procedure Z e uma entrada X, decidir (determinar) se Z termina quando aplicado a X. A indecidibilidade deste problema extremamente til para demonstrar a indecidibilidade de outros problemas atravs da reduo destes para o halting problem.
a) Mquinas de Turing (Turing, 1936); b) Gramticas (Chomsky, 1959); c) Algoritmos de Markov (Markov, 1951); d) Lambda Calculus (Church, 1941); e) Sistemas Post e Sistemas de Produo (Emil Post, 1936); f) Funes Recursivas (Kleene, 1936).
Um ponto importante a ressaltar aqui, que toda procedure (ou algoritmo) descrita por algum destes formalismos, pode tambm ser descrita atravs de qualquer um dos demais; fato este que sugere a equivalncia entre os formalismos. A aceitao destes formalismos dentro da teoria da computao , em grande parte, decorrente da hiptese (conhecida como Tese de Church) de que todo processo computvel passvel de ser descrito por uma procedure pode ser realizado por uma Mquina de Turing. Esta tese, apesar de no ter sido provada formalmente, tambm no foi contradita e continua sendo universalmente aceita. Conseqentemente podemos afirmar que Mquinas de Turing constituem o formalismo mais genrico para a representao de procedure e que qualquer outro formalismo ser significativo se for considerado equivalente s mquinas de Turing. A demonstrao formal da equivalncia entre os diversos formalismos citados e mquinas de Turing, refora a tese de Church.
40
4.2.2. Decidibilidade
Neste estudo, concentra-se nos problemas com respostas binrias sendo sim ou no, os quais sero referidos simplesmente como problemas sim/no ou problemas de deciso. Na prtica, qualquer problema pode ser tratado equivalentemente como um problema (ou classe de problema) sim/ no. Os problemas solucionveis so chamados computveis. Alguns problemas no-solucionveis so parcialmente solucionveis, ou seja, existe um algoritmo capaz de responder sim, embora, eventualmente possa ficar em lao infinito para uma resposta que deveria ser no. Neste caso, diz-se que o problema parcialmente solucionvel. 41
Problema Solucionvel ou Totalmente Solucionvel: Um problema tido como solucionvel se existe algum algoritmo que resolva o problema, sempre pra para qualquer que seja entrada, devolvendo uma resposta afirmativa (Aceita) ou negativa(Rejeita).
Problema Parcialmente Solucionvel: Um problema Parcialmente Solucionvel se existe um algoritmo que resolva o problema, parando quando a resposta for afirmativa. No caso da resposta for negativa, o algoritmo pode parar ou permanecer indefinidamente (LOOP). Ou seja, para qualquer algoritmo que processe esse problema, existe pelo menos uma palavra de entrada que resulta em loop.
Problema No-Solucionvel ou Insolvel: Quando no existe um algoritmo que resolva o problema tal que pra para qualquer entrada, com uma resposta afirmativa ou negativa. Alguns problemas No-Solucionveis podem ser Parcialmente Solucionveis. 42
A unio dos conjuntos de problemas solucionveis e no-solucionveis o universo de todos os problemas. Entretanto, existem problemas parcialmente solucionveis. O conjunto dos problemas parcialmente solucionveis contm todos os problemas solucionveis e alguns no-solucionveis. Com isso, pode-se afirmar trs coisas: a) Todo problema solucionvel parcialmente solucionvel; b) Existem problemas no-solucionveis que possuem soluo parcial; c) Existem problemas sem soluo total ou parcial tido como insolveis.
43
f2
f3
fn
Denomina-se, ento a soluo de um problema como funo. : D R d D Tem-se: (d, (d)) q Sendo assim, um problema pode ser representado matematicamente por uma funo. Solucionar o problema, encontrar uma maneira de implementar esta funo ou de aproxim-la ao conhecimento que dispe. Abaixo, apresenta-se um exemplo do autor Barreto. O conjunto de dados disponveis d D, no qual d so dados (observao da amnese, sintomas, resultados laboratoriais) que pertencem, ao conjunto D de dados disponveis. R o conjunto de doenas possveis. A condio que caracteriza uma soluo satisfatria consiste em encontrar o par (d, r), onde r R o diagnstico desejado. Caso o diagnstico for nico, pode-se dizer que a relao q torna-se uma funo e, pode-se dizer que a soluo do problema ser poder associar a cada elemento de D o elemento correspondente de R, de modo que (d, (d)) q (onde (d) = r) e uma funo. Formular um problema diferente de encontrar a soluo. A definio de um problema possibilita testar se um determinado elemento ou no a soluo, mas no auxilia na busca deste elemento. Verificar se um elemento a soluo, verifica-se se o par (dado, elemento e candidato soluo) satisfaz ou no a condio. Testar se um par (dado, elemento e candidato soluo) satisfaz a soluo de um problema, nem sempre permitido. Isto depende do modo de definir a funo associada ao problema em questo.
44
Declarativa: Definir um problema desta maneira atribuir propriedades que devem ser satisfeitas pela soluo do problema. Da mesma forma que um conjunto pode ser definido por uma propriedade (ex: conjunto dos objetos de madeira de uma sala), uma funo pode ser definida por uma propriedade. Exemplo: Seja a propriedade de pertencer a um conjunto. Neste caso, trata-se da definio da funo caracterstica de um conjunto. Normalmente costuma-se considerar o conceito de um elemento pertencer a um conjunto como conceito primitivo, explicado, mas no definido. Entretanto, este, conceito pode ser substitudo pelo de uma funo caracterstica de um conjunto. Pertencer passar a ser um conceito definido e a funo caracterstica do conjunto A ser: FA : U Verdadeiro, Falso, significa que se a imagem do elemento for Verdade, ele pertence ao conjunto e Falso se no pertencer.
Por um Programa: Um programa de computador define a correspondncia entre dados e resultados sempre ele conseguir chegar a uma soluo. Portanto, um programa pode ser considerado como um modo de definir um problema. Exemplo: Neste modo, o problema no completamente definido para todo valor de seus dados. Conhece-se apenas a definio do problema para um subconjunto dos dados possveis e este conhecimento pode ser de qualquer uma das formas citadas: por enumerao, declarativamente ou proceduralmente. Deseja-se conhecer os elementos do conjunto de respostas admissveis para todos os elementos do conjunto de dados, mesmo aquele que no esto includos na definio da funo. Pode-se reconhecer neste caso que a soluo no nica: todas as funes que sejam iguais dentro da regio em que o problema definido so vlidas. Tambm, deve-se considerar que, neste 45
caso, muitas vezes, melhor Ter uma soluo aproximada quando dados so usados para definir a funo. As maneiras de definir uma funo levam ao conceito de computabilidade.
4.3. Computabilidade
Uma funo computvel se for possvel calcular seu valor para todos os elementos do seu domnio de definio. Caso contrrio considerada no computvel. Uma funo tambm pode ser considerada parcialmente computvel se for possvel calcular seu valor para alguns elementos, pelo menos, de seu domnio de definio.
Teorema de Gdel Uma das primeiras descobertas nesta linha, deve-se a Kurt Gdel, que em 1931 sugeriu um Teorema da No-Completude. (Incopleteness Theorem). Entre outras coisas, ele mostrou que no 46
existe algoritmo cujas entradas declaradas sejam nmeros inteiros e cuja sada mostre se esta declarao verdadeira ou no. No Teorema da No-Completude (ou Incompleteza) de Gdel, um sistema de axiomas dito completo quando todo teorema verdade ou mentira. Se existir um sistema de axiomas consistentes (quando no existirem axiomas que entrem em contradio com outros axiomas) existiro sempre teoremas que poder provar que so mentiras e teoremas que podero provar que so verdades. Outros tambm que no podem provar nada, nem que sejam verdades, nem que sejam mentiras. Neste caso, o sistema dado como incompleto, no sentido de que existem coisas que no pode-se provar, nem verdades, nem mentiras. Este teorema parte da premissa de que existem verdades e mentiras levando a concluso que existem teoremas verdadeiros, falsos e outros que no sabem se so verdades ou mentiras. Alguns outros matemticos como Alonso Church, Stephen Kleene, Emil Post, Alan Turing encontraram vrios problemas que no possuem soluo algortmica.
A Tese de Church Turing Um dos maiores obstculos em saber se existe ou no algoritmo para resolver um determinado problema saber exatamente o significado de algoritmo. Gdel definiu algoritmo como uma seqncia de regras para transformar funes matemticas complexas em funes matemticas simples. Church utilizou um formalismo chamado clculo lambda. Turing imaginou uma mquina hipottica (Mquina de Turing) definindo um algoritmo como sendo qualquer conjunto de instrues para esta mquina. Um algoritmo tambm pode ser definido como operaes bsicas em estruturas de dados controladas por seqncia, seleo e iterao. Uma conjectura, enunciada por Church, diz que todos os modelos razoveis do processo de computao, definidos e por definir, so equivalentes. Essa conjectura conhecida como a Tese de Church. A Tese de Church no admite nenhuma prova formal, mas at hoje todos os modelos propostos se manteram equivalentes. Com concluses: Todas estas definies de algoritmo so equivalentes; Qualquer definio razovel de algoritmo ser equivalente a estas definies; A tese de Church-Turing ( ou Tese de Church), define que se tem uma boa definio de algoritmo se uma seqncia de passos possa ser executada de maneira rotineira (ou mecnica), de maneira formal no desenvolvimento da mesma tarefa.
47
Procedimento e Algoritmo Um procedimento definido como uma seqncia finita de instrues, e define-se uma instruo como uma operao claramente descrita, que pode ser executada mecanicamente, em tempo finito. mecanicamente significa que deve haver dvidas sobre o que deve ser feito; em tempo finito significa que no h dvidas de que a tarefa correspondente instruo pode, em qualquer caso, ser conduzida at sua concluso. Para se escrever um procedimento pode-se usar uma linguagem natural, uma linguagem de programao, ou uma linguagem usada em matemtica. Na verdade, usa-se uma combinao de todas elas. Sobre a forma de escrever instrues e procedimentos, supe-se apenas que existe uma linguagem, comum a todos, em que instrues e procedimentos podem ser escritos sem ambigidade. Exemplos: o algoritmo Euclides para clculo mximo divisor comum de dois nmeros naturais; um programa em PASCAL que calcula a soma de dois nmeros; a frmula de Bhscara que calcula as razes da equao de segundo grau. Por exemplo, um conjunto A recursivamente enumervel se existe um procedimento que enumera os elementos de A Existe ento um procedimento que emite todos os elementos de A, possivelmente com repeties. Define-se ento algoritmo como sendo um procedimento que sempre pra, quaisquer que sejam os valores de suas entradas. Por exemplo, conjunto A dito recursivo se existe um algoritmo que determina para um valor arbitrrio de sua entrada x, se x A ou se x A. Embora isso no seja estritamente necessrio, pode-se, para fixar as idias, especificar que o algoritmo deve parar e dizer sim ou no, respondendo a pergunte, se x A?. No sentido moderno, pode-se definir um algoritmo como sendo qualquer coisa que possa ser executada no computador. O computador particular escolhido irrelevante para a definio, desde que qualquer algoritmo que possa ser implementado em um computador possa ser implementado em outro. Isto real, porque todos os computadores podem simular um ao outro. Este programa conhecido como interpretador (ou simulador, ou programa universal). A equivalncia entre todos os computadores modernos, e sua equivalncia s Mquinas de Turing e outras definio de algoritmo evidenciam a Tese de Church. A universalidade uma propriedade dos algoritmos, significando que qualquer computador equivalente a todos os outros no sentido de que todos eles podem desenvolver a mesma tarefa. Embora os computadores possam
48
function media(x, y, z: real):real; {encontra a mdia dos valores de trs nmeros reais} begin (funo mdia} media := (x + y + z) / 3.0; end;
O cabealho function dentro dos parnteses indica que a funo consiste de todas 3-tuplas de nmeros reais. Para cada uma delas esperado que a funo produza um resultado nico.
Funes Parcialmente Computveis: Na computao, algumas funes no so definidas para algumas entradas. Teoricamente impossvel, dado um programa sem conhecer sua estrutura interna garantir que ele termine com certo tipo de entrada. Pode acontecer de escolher um conjunto de dados de entrada e se o programa tiver laos pode entrar num loop infinito e nunca parar. Com isso, os programas podem gerar funes parcialmente computveis. Exemplo: 49
function (x:integer): integer; var y:integer; begin y := 1; while (x<>0) do begin x := x 2; y := y * 2; end; := y; end; Percebe-se que a chamada (2K), com K 0 retorna o nmero 2K. Para qualquer outra entrada, o programa no pra. Portanto, este fragmento de programa computa a funo F = {(2K, 2K ) | K N}, a qual uma funo parcial de Z em Z. Funes No Computveis: As funes no computveis so aquelas que no podem ser implementadas no computador. Pode-se considerar como funes no computveis quelas cujo tempo de execuo do programa no hbil, quer dizer, o computador pode levar muito tempo para implementar tais funes. Exemplo: Dada uma equao arbitrria da forma (a + 1)2 + (b + 1)3 = (c + 1)4, o problema determinar se a equao satisfeita por quaisquer nmeros inteiros. Isto chamado Problema da Equao Diofantinas e sabe-se que no existe algoritmo de soluo de equaes Diofantinas Arbitrrias.
Portanto, o problema a ser resolvido determinar se um programa arbitrrio (qualquer) pra ou no pra. Este denominado Problema de Parada. Sua soluo um algoritmo, no qual, dado um programa qualquer P e sua entrada de dados D, pode-se dizer ou no, se eventualmente P pra quando executado com a entrada de dados D. Muitas vezes a soluo para o Problema da Parada, utilizado em muitos sistemas computacionais, forar a parada do programa cada vez que sua execuo ultrapasse o tempo determinado (alocado) para isso. Mas esta soluo no adequada por duas razes: Os programas no terminantes pode alocar todo tempo dispensado na execuo; Nem sempre o programa pode calcular o tempo necessrio para a execuo do programa, e ele pode terminar de maneira precoce em um tempo inferior sua parada com sucesso. O Problema da Parada no computvel conforme a seguir: Suponha que exista um algoritmo para resolver o Problema da Parada, testaparada. O algoritmo testaparada possui duas entradas, P e D. Imprime a resposta OK! caso o programa P termina quando executada com uma entrada de dados D. E imprime No Pra! caso contrrio. O testaparada testa a determinao do programa P para dados D conforme mostra a figura abaixo: P D
P(D) pra?
Figura 4: Ao Testaparada. Suponha-se que pode-se us-la para construir um algoritmo mais limitado, o qual testa a terminao de P quando os dados so o prprio P, o qual ser chamado de novotestaparada. Embora posa parecer estranho a entrada de dados com o prprio programa, sabe-se qualquer seqncia de caracteres pode ser a entrada de um programa. Assim, existem programas de interesses prtico, cuja a entrada uma seqncia de caracteres representando outro programa; exemplos so compiladores e editores.
51
Programa novotestaparada(P) { verifica se o programa P pra quando executado com o dado sendo o prprio P } testaparada(P,P) A ao de novotestaparada demonstrado na figura 2.4. P
Figura 5: Ao de novotestaparada. Supondo a existncia do algoritmo testaparada estar-se- supondo a existncia tambm de novotestaparada. Assim, pode-se construir o seguinte algoritmo, chamado parada, que possui apenas uma entrada P.
Programa parada(P) {para escrever esta rotina suponha-se que testaparada existe} Se novotestaparada(P) sai No Pra! ento pra seno lao infinito
52
Pra
Lao Infinito Figura 6: Ao de parada(P). Finalmente, considerando o que ocorre durante a execuo de parada(parada), ou seja, durante a execuo de parda com sua prpria entrada de dados, um programa texto de P (P pode ser qualquer seqncia de caracteres). A execuo de parada(parada) demonstrada na figura 2.6. Sendo a mesma figura 2.5, mas a entrada P foi substituda pelo prprio parada. parada
parada(parada) pra?
Sim
No
pra lao infinito Figura 2.6: Ao de parada(parada). A figura 2.6 mostra uma contradio, pois se a parada (parada) pra ento ele entra em lao infinito. Por outro lado, se parada(parada) entra em lao infinito ento ele pra! Ou seja, a execuo de parada(parada) no pode parar nem entrar em lao infinito. Esta contradio s pode ser resolvida admitindo-se que o algoritmo parada no existe. Porm, a nica suposio feita derivando parada, era que testaparada no existiria. Portanto, se parada no 53
existe, ento testaparada no existe. Concluindo com isso, que no existe algoritmo que solucione o problema da parada (testaparada). Assim, o problema da Parada no computvel! Resumindo: 1. Suponha-se que pode-se escrever o programa testaparada; 2. Usa-se este programa para construir outro programa (parada) atravs de um programa intermedirio (novotestaparada); 3. Mostra-se que parada tem algumas propriedades impossveis (no pode parar e nem entrar em lao infinito); 4. Conclui-se que a suposio no passo 1 est errada.
Problema da Totalidade: Sendo que o Problema da Parada determinar se um programa arbitrrio P pra ou no pra quando executando com uma entrada de dados arbitrria D. A questo saber se o programa arbitrrio P parar para todas as entradas. Este denominado Problema da Totalidade. Assim, pode-se dizer que P total se P(D) pra para qualquer entrada de dados D. de se esperar que o Problema da Totalidade seja no computvel. Ao contrrio, dado qualquer P e D, pode-se simplesmente construir um programa especial afim de que P e D ignorar sua entrada e simular P(D). Este programa especial pode ser denominado paradapd.
Programa paradapd(E) { a entrada mas o programa no usar, ele apenas simula uma entrada de dados D} simular o programa P com a entrada de dados D
Agora, perguntar se paradapd total o mesmo que perguntar se P(D) pra. Ento, um algoritmo para o Problema da Totalidade poderia tambm ser dado para o Problema da Parada:
54
Programa testaparada(P,D) {para escrever este programa supe-se que o algoritmo para o Problema da Totalidade existe} construir a entrada do programa paradapd se paradapd total ento imprimir OK e pra seno imprimir No Pra e pra
Algoritmo
Algoritmo
Sim
No
Sim
No
55
Ao contrrio do Problema da Parada, o Problema da Totalidade por exemplo, no so parcialmente computveis. Para este problema no existe algoritmo que imprima Sim se P pra para todas entradas de dados e tambm permita entrar em lao infinito quando a resposta No.
4.3.6. Complexidade
O estudo da Computabilidade leva ao entendimento de quais problemas admitem soluo algortmica ou no. Para aqueles problemas que existem algoritmos vlido saber quais os recursos computacionais so necessrios para a sua execuo. Somente aqueles algoritmos que podem utilizar uma quantia de recursos viveis so de interesse prtico. Isto um campo da cincia da computao denominado Teoria da Complexidade. A figura 2.8 demonstra uma representao do universo de problemas. Aqueles que podem ser computados algoritmicamente forma um pequeno subconjunto. Aqueles viavelmente computveis, de acordo com recursos que necessitam compreendem uma pequena poro deste subconjunto infinitesimal.
Todos Problemas
Problemas Computveis
56
paralela, por exemplo, o hardware est intimamente ligado ao nmero de processadores necessrios pelo algoritmo. Os algoritmos usualmente aceitam dados de entrada conforme seu processamento. Portanto, a quantia de qualquer recurso usado pelo algoritmo pode variar de acordo com o tamanho dos dados. Considera-se, por exemplo, um algoritmo que multiplica dois nmeros. A figura 2.9 mostra um algoritmo feito no jardim de infncia. Se o algoritmo apresentado com dois n-dgitos, necessita-se adicionar n linhas, cada uma contendo n( ou n+1) dgitos. Cada linha pode ser computada com cerca de n passos, ou n unidades de tempo, e existir n linhas separadas. Adiciona as linhas tomar n x n (ou n2) unidades de tempo. Portanto, o tempo de execuo deste algoritmo proporcional a n2. Existem outras formas de algoritmos de multiplicao, algumas bem mais rpidas que podem ser feitas em computadores paralelos, mas problema encontrar aqueles que tm a execuo mais rpida e demanda menos recursos computacionais. A quantidade de recursos usados depende do tamanho dos dados de entrada. Assim, no caso da multiplicao, quanto mais nmero a serem multiplicados mais tempo ser necessrio para desenvolver esta multiplicao. A teoria da Complexidade estuda vrios recursos computacionais. A quantidade de recursos usados por um algoritmo expressa como uma funo do tamanho dos dados de entrada. Os algoritmos podem utilizar diferentes entrada de mesmo tamanho. importante conhecer a quantia de recursos usados pelo algoritmo para qualquer entrada de um dado tamanho. Por exemplo, se o computador est controlando um reator nuclear ou lanando um foguete, vital saber o tempo mais longo necessrio ao computador para responder a uma situao de emergncia. Isto denominado complexidade no pior caso do algoritmo. Alternativamente, conhecer a quantia mdia de recursos usados para todas as entradas de um dado tamanho pode ser bastante til. Isto denominado complexidade mdia. s vezes, interessante conhecer a chance do algoritmo permanecer perto de seu comportamento mdio para um dado de entrada. Neste caso, o desvio padro do recurso utilizado, poderia ser calculado. Vrias vezes se conhecem os limites (inferior e superior) que se aproximam na soluo de determinado problema. A complexidade de algoritmos envolve a complexidade de problemas em relao aos recursos necessrios para resolver determinado problema. Isto a complexidade de um problema, a complexidade do melhor algoritmo, o qual resolve este problema. A anlise do algoritmo fornece um limite superior (upper bound) para a quantidade de recursos que suficiente para resolver um problema. Para saber quanto pode-se melhorar este algoritmo, precisa-se estabelecer um limite inferior (lower bound) na quantidade de recursos necessrios, ou seja, qual a quantidade mnima
57
necessria de recursos para a soluo do problema. Naturalmente, tem-se interesse em estabelecer o mais limite e, analogamente, o menor limite superior possvel. Idealmente, os dois limites, inferior e superior, deveriam ser iguais, pois neste caso, saberia exatamente a quantidade de recursos que tanto necessria quanto suficiente para resolver um problema. Se utilizar um algoritmo que utilize exatamente esta quantidade de recursos, ento, tem-se um algoritmo timo para a tarefa. A diferena entre limite inferior e superior demonstra uma medida de quanto o algoritmo pode ser melhorado. Nem sempre possvel construir algoritmos timos. A fim de capturar a noo de algoritmo praticamente vivel, deve-se limitar os dispositivos computacionais para somente executar um nmero de passos que limitado por um polinmio no comprimento da entrada. A esta classe de problemas denomina-se classe P. Existem problemas que possuem verificao algortmica em tempo no polinomial e formam a classe NP. Mas existem problemas que no possuem uma fcil verificao algortmica, os quais so denominados de problemas NP-Completos. O tempo de execuo destes algoritmos no polinomial e de difcil verificao. Os problemas de deciso na classe NP permitem que validem potenciais solues em um tempo polinomial. Isso quer dizer que para problemas NP utiliza-se uma redutibilidade polinomial.
Com essas consideraes conclui-se que: Um algoritmo eficiente precisamente quando sua complexidade for baixa; Um algoritmo eficiente precisamente quando a sua complexidade for um polinmio nos tamanhos de entrada e sada; Este critrio no absoluto, mas na maioria os casos realmente aceitvel.
59
REFERNCIAS BIBLIOGRFICAS
Apostila de Teoria dos Autmatos e da Computabilidade. Professora Maria Aparecida Fernandes de Almeida. Agosto, 2001.
Apostila de Linguagens Formais e Compiladores. Professor Olinto Jos Varela Furtado, Universidade Federal de Santa Catarina UFSC, 2003.
DIVRIO, TIARAJU ASMUZ & MENEZES, Paulo F. Bath. Teoria da Computao, Srie de Livros Didticos, Porto Alegre: Editora Sagra Luzzato.
DOMNICO, L. C. Matemtica 3 em 1, Curso Completo de 2 Grau. So Paulo: Instituto Brasileiro de Edies Pedaggicas.
HOPCROFT, J. E., ULLMAN, J. D. Introduction to Automata Theory, Languages and Computation. New York : Addison Wesley, 1979.
MENEZES, P. F. B. Linguagens Formais e Autmatos. 4 ed. Srie de Livros Didticos. Porto Alegre : Sagra Luzzato, 2001.
60