TeoriadaComputação

download TeoriadaComputação

of 24

Transcript of TeoriadaComputação

Teroria da ComputaoBruno de Lima Silva outubro de 2011

1. Programas, Mquinas e ComputaesProgramas: Um conjunto de operaes e testes compostos de acordo com uma estrutura de controle: o Monolticos: desvios condicionais e incondicionais o Iterativos: estruturas de iterao o Recursivos: sub-rotinas recursivas Mquina: Interpreta Programas Possui uma interpretao para cada operao ou teste que constituem o programa. Computao: Histrico do funcionamento da mquina para o programa e um dado valor inicial. Funo Computada: Funo parcial induzida a partir da mquina e programa dados, a qual definida sempre que, para um dado valor de entrada, existe uma computao finita (a mquina pra).

ProgramasTudo que um computador faz instrudo a partir de programas.

Um programa (em ingls, software) uma sequncia de instrues especficas que descrevem uma tarefa a ser realizada por um computador, na manipulao, redirecionamento ou modificao de dados, de maneira lgica. O programa de computador surgiu antes do desenvolvimento do computador eletrnico. Um trabalho publicado em 1843 por Ada Lovelace, sugerindo uma forma para calcular os nmeros de Bernoulli atravs da mquina analtica de Charles Babbage, tido como o primeiro programa de computador. A primeira aplicao prtica da programao surgiu com os dispositivos baseados em cartes perfurados, que eram utilizados desde o sculo XVIII na indstria da confeco. O empresrio estadunidense Hermann Hollerith utilizou o conceito no processamento dos dados do censo dos Estados Unidos da Amrica em 1890. Os primeiros computadores eletrnicos eram programados somente atravs de linguagens de baixo nvel. Essas linguagens no disponibilizavam um nvel de abstrao sobre o hardware e os comandos eram interpretados diretamente pelos circuitos eletrnicos. No ENIAC, um dos equipamentos mais emblemticos na histria da computao, a programao era realizada atravs de ligaes manuais, que uniam as unidades de processamento do computador, formando uma sequncia de execuo. As linguagens de alto nvel surgiram por volta da dcada de 1940, como a Plankalkl e a Short Code, e tiveram grande impulso com o desenvolvimento dos compiladores, que tornaram a programao uma atividade possvel para um grande nmero de pessoas. Na dcada de 1950 surgiu a primeira linguagem de grande aceitao, o Fortran. Resumindo: um conjunto estruturado de instrues que capacitam uma mquina a aplicar sucessivamente certas operaes bsicas e testes sobre os dados iniciais fornecidos com o objetivo de transformar esses dados numa forma desejvel. Operaes e Testes: o Operaes: F, G, H... o Testes: T1, T2, T3... o Operao Vazia:

TerminologiaUm programa de computador a formalizao de um algoritmo em qualquer linguagem capaz de ser transformada em instrues que sero executadas por um computador gerando os resultados esperados. O termo "software" pode ser utilizado quando se quer designar um conjunto de programas ou, mais freqentemente, quando feita uma referncia parte no fsica do sistema computacional, em contraposio ao termo "hardware", que designa o conjunto de componentes eletrnicos que constituem um computador. Os programas de computador utilizados diretamente por pessoas comuns, como os editores de texto, so chamados de software aplicativo, ou de aplicao. Os programas voltados para dar suporte funcional aos computadores, como os sistemas operacionais, so chamados de software de sistema. Esses softwares, assim como aqueles embutidos em outros sistemas (firmware), podem ser genericamente chamados de "programas".

ExecuoUm programa de computador primeiramente carregado na memria do computador (usualmente pelo sistema operacional). O sistema operacional organiza trs blocos de memria, tambm chamados segmentos. O primeiro o segmento de cdigo, que esttico em tamanho e em contedo. Ele recebe todo o cdigo de mquina que define as sub-rotinas do programa, e o endereo de cada sub-rotina definido como o menor dos endereos das clulas de memria que a definem. O segundo bloco de memria o segmento de dados, e recebe as variveis globais. Assim como no segmento de cdigo, o endereo de cada varivel definido como o menor dos endereos das clulas de memria que o definem. Ele esttico em tamanho mas dinmico em contedo, o que significa que este segmento no pode criar variveis em tempo de execuo, mas o contedo varivel, pode ser modificado. O terceiro bloco de memria o segmento de pilha, uma rea de memria na qual se armazena informao em forma de uma pilha. Ele serve para armazenar informaes como variveis locais, parmetros de subrotinas e endereos de retorno (para onde o fluxo do programa deve ir aps a execuo de uma funo, isto , o ponto logo aps ela foi invocada.) Antes da execuo do programa propriamente dita, a pilha esvaziada. A partir de ento o programa executado, instruo por instruo, at o seu trmino. A execuo de um programa de computador pode ser abreviada em caso de erro de software ou de hardware.

ProgramaoH diversas linguagens que permitem criar essa sequncia de instrues, sendo que algumas so compiladas e outras so interpretadas. As primeiras, aps ser compilado o cdigo fonte, transformam-se em software, isto , programas executveis. Portanto, programas so arquivos que contm comandos para a mquina, tendo, em geral, formato exe, com ou bat no sistema operacional Windows. Evidentemente, os programas no so infalveis e, mesmo depois de repetidamente testados, podem apresentar erros que, comumente, chamados de bugs. Esses erros devero ser eliminados por meio de pequenos programas complementares ou em novas verses, em que tero novos recursos, e/ou sero mais adequadas ao hardware, podendo explorar melhor as possibilidades do sistema operacional. Atualmente a maioria dos programas possui uma interface grfica amigvel, ou seja, uma tela com cones clicveis que do acesso s funes do sistema. Portanto, o usurio no precisa conhecer a linguagem do computador para executar os comandos, basta clicar sobre o comando escolhido, na forma de uma palavra ou de uma figura, ou digitar uma combinao especfica de teclas, para que o programa envie uma mensagem para o processador causando a execuo de uma certa tarefa.

Programa Monoltico estruturado com somente desvios condicionais e incondicionais. No emprega mecanismos auxiliares como iterao, subdiviso ou recurso, de modo que toda a lgica do programa esta contida em um nico bloco: um monlito. Fluxograma:

partida

parada

operao

v

test e

f

Instrues Rotuladas: Alm da forma de um fluxograma, o programa pode ser representado como uma seqncia de instrues rotuladas. Definio: Rtulo, instruo rotulada. Um rtulo ou etiqueta uma cadeia finita de caracteres constituda de letras ou dgitos. Uma Instruo rotulada assume as formas: o Operao: r1: faa F v_para r2 ou r1: faa v para r2. o Teste: r1: se T ento v_para r2 seno v_para r3. Exemplo de Programa Monoltico: 1: 2: 3: 4: faa F v_para 2 se T1 ento v_para 1 seno v_para 3 faa G v_para 4 se T2 ento v_para 5 seno v_para 1

Definio: Programa Monoltico. Um Programa Monoltico um par P(I, r) I: Conjunto Finito de Instrues Rotuladas r: Rtulo inicial que distingue a instruo inicial em I No existem duas instrues diferentes com o mesmo rtulo. Um rtulo no associado a nenhuma instruo um rtulo final.

A estrutura oferecida pelos programas monolticos tpica das linguagens de mquinas e de programas montadores (assembly), entretanto isto se reflete de diversas maneiras em linguagens de alto nvel.

1.1.2 Programa Iterativo Substituem desvios incondicionais por estruturas cclicas, permitindo um melhor controle e manuteno de programas. A noo de programa iterativo deu origem s tcnicas de programao estruturada, inspirando toda uma gerao de linguagens como Pascal. So baseados em trs mecanismos de composio de instrues, encontrados em diversas linguagens: Algol 68, Pascal, Ada, Fortran 90, etc

o Seqencialo o Condicional Enquanto (At)

Definio: Programa Iterativo Um programa Iterativo P descrito indutivamente como se segue:

a. A operao vazia constitui um programa iterativo.b. Cada identificador de operao constitui um programa iterativo.

c. Composio Seqencial: Se V e W so programas iterativos, ento acomposio seqencial denotada por V;W um programa iterativo, cujo efeito a execuo de V e aps de W. d. Composio Condicional e. Composio Enquanto f. Composio At (enquanto T faa V); W enquanto T faa (V; W) Parnteses podem ser empregados para mudar uma interpretao:

Exemplo: Um programa iterativo (se T1 ento enquanto T2 faa (at T3 faa (V; W)) seno ) Observaes: trivial traduzir um programa iterativo para um fluxograma, mas a recproca no verdadeira. O uso de identao interessante para facilitar o entendimento.

Programa Recursivo Nas linguagens de programao em geral o conceito de programa recursivo aparece associado ao de sub-rotinas recursivas. Recurso uma forma indutiva de definir programas. Sub-rotinas permitem a estruturao hierrquica dos programas, possibilitando nveis diferenciados de abstrao.

Definio: Expresso de Sub-Rotinas Uma Expresso de Sub-Rotinas, ou simplesmente Expresso indutivamente definida como se segue:

a. A operao vazia, , constitui uma expresso de sub-rotinas.b. Cada identificador de operao constitui uma expresso de sub-rotinas. c. Cada identificador de sub-rotina constitui uma expresso de sub-rotinas. d. Composio seqencial: D1; D2 e. Composio condicional: (se T ento D1 seno D2) Definio: Programa Recursivo: Um Programa Recursivo P tem a seguinte forma: P E0, onde R1 def E1, R2 def E2, ..., Rn def En Onde, para k {1, 2, ..., n}

E0 : Expresso Inicial, que uma expresso de sub-rotinas. Ek : Expresso que define Rk, isto , a expresso que define a sub-rotina identificada por Rk

Adicionalmente, para cada identificador de sub-rotina referenciado em alguma expresso, existe uma expresso que o define. A operao vazia tambm uma expresso de sub-rotinas Raciocnio Recursivo: Lgica Recursiva. Pilha de Dados e Operaes

Exemplo de Programa Recursivo: P R ; S, onde: R def F; (se T ento R seno G; S) S def (se T ento seno F; R) Exemplos Concretos: Fatorial Fibonacci Lista Recursiva

1.2 Mquinas As mquinas interpretam os programas suprindo todos os recursos necessrios para realizar a computao que eles representam. Cada identificador de operao ou teste interpretado pela mquina deve ser associado a uma transformao na estrutura da memria e a uma funo verdade respectivamente. Nem todo identificador de operao ou teste definido em uma mquina. Para cada identificador de operao ou teste definido em uma mquina existe somente uma funo associada. Adicionalmente a mquina deve descrever o armazenamento ou recuperao da informao na estrutura da memria.

Definio: Mquina. Uma mquina uma hptupla: M = ( V, X, Y, X, Y, F, V Conjunto de Valores de Memria X Conjunto de Valores de Entrada Y Conjunto de Valores de Sada X Y T

), onde:

Funo de Entrada, tal que X: X V Funo de Sada, tal que Y: V Y

F Conjunto de Interpretaes de Operaes. Para cada F existe uma nica F: V V T Conjunto de Interpretaes de Testes. Para cada T existe uma nica T: V {verdadeiro, falso}

Os conjuntos de interpretaes podem ser vistos como conjuntos de funes, indexadas pelo subconjunto de identificadores de operaes e testes para os quais a mquina est definida. Exemplo: Mquina de Dois Registradores: Seja uma mquina com dois registradores, a e b, que assumem valores em N, com duas operaes e um teste: Subtrair 1 de a, se a > 0. Adicionar 1 em b. Teste se a zero.

Adicionalmente Valores de Entrada so armazenados em a (zerando b) e a Sada retorna o valor de b. Implementao: dois_reg = ( N2, N, N, armazena_a, retorna_b, {subtrai_a, adiciona_b}, {a_zero} ), onde:

V = N2 = Conjunto de Valores de Memria. X = N = Conjunto de Valores de Entrada

Y = N = Conjunto dos Valores de Sada armazena_a: N N2, tal que, para todo n N, armazena_a(n) = (n, 0) retorna_b: N2 N tal que, para todo n N, retorna_b(n, m) = m subtrai_a: N2 N2 tal que, para todo (n, m) N2,

o subtrai_a(n, m) = (n-1, m), se n 0,o subtrai_a(n, m) = (0, m), se n = 0.

adiciona_b: N2 N2 tal que, para todo (n, m) N2, adiciona_b(n, m) = (n, m+1) a_zero: N2 {verdadeiro, falso}, tal que, para todo (n, m) N2, o a_zero(n, m) = verdadeiro, se n = 0,

o a_zero(n, m) = falso, se n 0,Definio: Programa para uma Mquina. Diz-se que P um programa para a mquina M se cada operao e teste em P corresponder a uma interpretao em M. Formalmente: Seja M = ( V, X, Y, X, Y, F, T ), uma mquina e P um programa onde PF e PT so conjuntos de operaes e testes de P. P um programa para a mquina M se e somente se:

Para toda F em PF, existe uma nica funo F: V V em F. Para todo T em PT, existe uma nica funo T: V V em T. A operao vazia, , interpretada em qualquer mquina.

1.3 Computaes e Funes ComputadasUma computao de um programa monoltico em uma mquina um histrico de instrues executadas e o correspondente valor de memria. O histrico representado como uma cadeia de pares onde:

Cada par reflete um estado de mquina para o programa, ou seja, a funo a ser executada e o valor corrente de memria. A cadeia reflete uma seqncia de estados possveis a partir do estado inicial. (instruo inicial e valor de memria considerado).

Definio: Computao de um Programa Monoltico em uma Mquina. Seja M = ( V, X, Y, X, Y, F, T ), uma mquina e P = (I, r) um programa monoltico para M, onde L o seu correspondente conjunto de rtulos. Uma computao do programa monoltico P para a mquina M uma cadeia (finita ou infinita) de pares de LxV (s0,v0)(s1,v1)(s2,v2)... onde os sk so os rtulos de instrues e os vk os correspondentes estados da memria. Seja F um identificador de operao, T um identificador de teste e r e r rtulos de L.

Operao:

a. Se sk o rtulo de uma operao da forma sk: faa F v_para rento (sk+1, vk+1 ) = (r, F(vk)) par subseqente de (sk, vk) na cadeia.

b. Se sk o rtulo de uma operao da forma sk: faa v_para r,ento (sk+1, vk+1 ) = (r, vk) par subseqente de (sk, vk) na cadeia.

Teste:

Se sk o rtulo de um teste da forma sk: Se T ento v_para r seno v_para r, ento (sk+1, vk+1 ) par subseqente de (sk, vk) na cadeia , sendo que vk+1 = vk e:

i. sk+1 = r se T(vk) = verdadeiro ii. sk+1 = r se T(vk) = falsoObservaes: A computao pode ser finita ou infinita, conforme a cadeia for finita ou infinita. Para um dado valor inicial de memria, a correspondente cadeia de computao nica, ou seja, a computao determinstica. Por que? Um teste e a operao vazia no alteram o contedo de memria. Em uma computao infinita no h rtulo final.

Exemplo: Computao Finita de Programa Monoltico na Mquina de Dois Registradores 1: Se a_zero ento v_para 9 seno v_para 2. 2: faa subtrai_a v_para 3. 3: faa adiciona_b v_para 1. (sk, vk) (1,(3,0)) (2,(3,0)) (3,(2,0)) (1,(2,1)) (2,(2,1)) (3,(1,1)) (1,(1,2)) (2,(1,2)) (3,(0.2)) (1,(0,3)) (9,(0,3)) Ao Instruo inicial e valor de entrada armazenado. Em 1, como a 0, desviou para 2. Em 2, subtraiu 1 do registrador a e desviou para 3. Em 3, adicionou 1 ao valor de b e desviou para 1, Em 1, como a 0, desviou para 2. Em 2, subtraiu 1 do registrador a e desviou para 3. Em 3, adicionou 1 ao valor de b e desviou para 1, Em 1, como a 0, desviou para 2. Em 2, subtraiu 1 do registrador a e desviou para 3. Em 3, adicionou 1 ao valor de b e desviou para 1, Em 1, como a=0, desviou para 9.

Definio: Computao de um Programa Recursivo em uma Mquina Seja M = ( V, X, Y, X, Y, F, T ), uma mquina e P um programa recursivo para M, tal que:

P E0 onde R1 def E1, R2 def E2, ..., Rn def Em. Uma computao do programa recursivo P na mquina M uma cadeia (finita ou infinita) de pares da forma: (D0, v0)(D1, v1)(D2, v2)... onde (D0, v0) tal que D0 = E0; e v0 o valor inicial da mquina. Para cada par (Dk, vk), supondo que F um identificador de operao, T um identificador de teste e C, C1 e C2 so expresses de sub-rotinas:

Caso 1: Dk = ; C cadeia. Caso 2: Dk = F; C vk) na cadeia. Caso 3: Dk = Ri; C na cadeia.

(Dk+1, vk+1) = (C, vk) par subseqente de (Dk, vk) na (Dk+1, vk+1) = (C, F(vk)) par subseqente de (Dk, (Dk+1, vk+1) = (Ei;C, vk) par subseqente de (Dk, vk)

Caso 4: Dk = (C1; C2); C (Dk+1, vk+1) = (C1;(C2;C), vk) par subseqente de (Dk, vk) na cadeia. Caso 5: Dk = Ek = (Se T ento C1 seno C2); C subseqente de (Dk, vk) na cadeia, sendo que: (Dk+1, vk+1) par

o Vk+1 = vk o Dk+1 = C1; C se T(vk) verdadeiro o Dk+1 = C2; C se T(vk) falsoObservaes:

A computao pode ser finita ou infinita conforme a cadeia for finita ou infinita. A computao determinstica (por qu?) Teste ou referncia a uma sub-rotina no alteram o valor da memria. Em uma computao finita, a expresso vazia ocorre no ltimo par da cadeia e no ocorre em nenhum outro par. Em uma computao infinita, a expresso vazia no ocorre em nenhum par.

Funo ComputadaNoo Intuitiva (programa monoltico): A computao inicia na instruo identificada pelo rtulo inicial com a memria contendo o valor inicial resultante da aplicao da funo de entrada sobre o dado fornecido. Executa, passo a passo, testes e operaes na ordem determinada pelo programa, at atingir um rtulo final, quando pra. O valor da funo computada pelo programa o valor resultante da aplicao da funo de sada ao valor da memria quando da parada.

Definio: Funo Computada por um Programa Monoltico em uma Mquina Seja M = ( V, X, Y, X, Y, F, T ), uma mquina e P = (I, r) um programa monoltico para M. A funo computada pelo programa monoltico P na mquina M, denotada por : X Y uma funo parcial definida para xX se a cadeia (s0,v0)(s1,v1)...(sn,vn) uma computao finita de P em M, onde o valor inicial da memria dado pela funo de entrada, ou seja, v0 = X(X). Neste caso a imagem de x dada pela funo de sada aplicada ao ltimo valor da memria na computao, ou seja: (x) = Y(vn). Note-se que a funo computada pode ser parcial, isto , no est definida para todos os valores do domnio.

Exemplo: Funo Computada por um Programa Monoltico na Mquina de Dois Registradores. Considere o programa monoltico mon_ba para a mquina dois_reg: 1: Se a_zero ento v_para 9 seno v_para 2. 2: faa subtrai_a v_para 3. 3: faa adiciona_b v_para 1. dois_reg = ( N2, N, N, armazena_a, retorna_b, {subtrai_a, adiciona_b}, {a_zero} ), A correspondente funo computada a funo identidade, ou seja: : N N tal que, para qualquer nN, tem-se que (n) = n Noo Intuitiva (programa recursivo) A computao inicia na instruo identificada pelo rtulo inicial com a memria contendo o valor inicial resultante da aplicao da funo de entrada sobre o dado fornecido. Executa, passo a passo, testes e operaes na ordem determinada pelo programa, at que a expresso de sub-rotina resultante seja a expresso vazia, quando pra. O valor da funo computada pelo programa o valor resultante da aplicao da funo de sada ao valor da memria quando da parada.

Definio: Funo Computada por um Programa Recursivo em uma Mquina Seja M = ( V, X, Y, X, Y, F, T ), uma mquina e P um programa recursivo para M. A funo computada pelo programa recursivo P na mquina M, denotada por : X Y uma funo parcial definida para xX se a cadeia (D0,v0)(D1,v1)... (Dn,vn) uma computao finita de P em M, onde

D0 = E0; expresso inicial de P v0 = X(X) En =

Neste caso a imagem de x dada pela funo de sada aplicada ao ltimo valor da memria na computao, ou seja: (x) = Y(vn). Exerccio: Definir funo computada por um programa iterativo P em uma mquina M.

1.4 Equivalncia de Programas e MquinasFunes computadas permitem introduzir importantes relaes de equivalncia entre programas e mquinas:

Relao de Equivalncia Forte de Programas: Um par de programas pertence relao se as correspondentes funes computadas coincidem para qualquer mquina. Relao Equivalncia de Programas em uma Mquina: Um par de programas pertence relao se as correspondentes funes computadas coincidem para uma dada mquina. Relao Equivalncia de Mquinas: Um par de mquinas pertence relao se as mquinas podem se simular mutuamente.

A relao Equivalncia Forte de programas especialmente importante, pois:

Permite agrupar diferentes programas em classes de equivalncia de programas cujas funes coincidem. Fornece subsdios para analisar propriedades de programas como a complexidade estrutural.

Definio: Igualdade de Funes Parciais. Duas funes parciais, f, g:XY so ditas iguais, ou seja, f = g, se e somente se, para cada xX (1) ou f e g so indefinidas, ou ambas so definidas com f(x)=g(x). Definio: Composio Sucessiva de Funes. Para uma dada funo f:SS, a composio sucessiva de f com ela prpria denotada usando expoente, ou seja, fn = f f ... f (n vezes).

1.4.1 Equivalncia Forte de ProgramasDef: Relao Equivalncia Forte de Programas. Programas Fortemente Equivalentes. Sejam P e Q dois programas arbitrrios, no necessariamente do mesmo tipo, ento o par (P, Q) est na Relao de Equivalncia Forte de Programas, denotado por P Q, se e somente se, para qualquer mquina M as correspondentes funes computadas so iguais, isto : = . Neste caso, P e Q so ditos Programas Equivalentes Fortemente. Exerccio: Mostrar que a Relao Equivalncia Forte de Programas uma relao de equivalncia, e que portanto induz uma partio do conjunto de todos os programas em classes de equivalncias.

Exemplo: Programas Equivalentes Fortemente:

P3: enquanto T faa (F) P4 R onde R def (se T ento F;R seno ) Razes para Considerar a Equivalncia Forte de Programas:

Permite identificar diferentes programas em uma mesma classe de equivalncia, ou seja identificar diferentes programas cujas funes computadas coincidem para qualquer mquina. As funes computadas por programas equivalentes tem a propriedade de que as mesmas operaes so efetuadas na mesma ordem, independentemente do significado dos mesmos (por qu?) Fornece subsdios para analisar a complexidade estrutural de programas.

Verifica-se que: Para todo iterativo, existe um monoltico equivalente fortemente. Para todo monoltico, h um recursivo equivalente fortemente. Iterativos Monolticos Recursivos. (Teoremas 2.14 a 2.18)

1.4.2 Equivalncia de ProgramasDefinio: Relao Equivalncia de Programas em uma Mquina. Sejam P e Q dois programas arbitrrios, no necessariamente do mesmo tipo, e uma mquina M qualquer. Ento o par (P, Q) est na Relao Equivalncia de Programas na Mquina M, denotado por P MQ, se e somente se as correspondentes funes computadas so iguais, ou seja, = . Neste caso, P e Q so ditos Programas Equivalentes na Mquina M, ou simplesmente Programas M-Equivalentes.

Equivalncia de MquinasAfirma-se que duas mquinas so equivalentes, se uma pode simular a outra e viceversa. Definio: Simulao Forte de Mquina. Sejam M = ( VM, X, Y, XM, YM, FM, TM ), e N = ( VN, X, Y, XN, YN, FN, TN ), duas mquinas arbitrrias. N simula fortemente M se e somente se para qualquer programa P para M existe um programa Q para N tais que as correspondentes funes parciais computadas coincidem, ou seja, = Definio: Simulao de Mquina. Sejam M = ( VM, X, Y, XM, YM, FM, TM ), e N = ( VN, X, Y, XN, YN, FN, TN ), duas mquinas arbitrrias. N simula M se e somente se para qualquer programa P para M existe um programa Q para N e existem

Funo de Codificao Funo de Decodificao

c:XMXN d:YNYM

tais que = d c Definio: Relao Equivalncia de Mquinas. Sejam M e N duas mquinas arbitrrias, ento o par (N, M) est na Relao Equivalncia de Mquina se e somente se M simula N e N simula M.

2. Mquinas UniversaisSe for possvel representar qualquer algoritmo como um programa em tal mquina, ento esta denominada de mquina universal. As evidncias de que uma mquina universal: Evidncia Interna. Consiste na demonstrao de que qualquer extenso das capacidades da mquina universal proposta computa, no mximo, a mesma classe de funes, ou seja, no aumenta o seu poder computacional; Evidncia Externa. Consiste no exame de outros modelos que definem a noo de algoritmo, juntamente com a prova de que so, no mximo, computacionalmente equivalentes.

2.1 Mquina NORMAO modelo de mquinas de registradores, do qual faz parte a Mquina NORMA, apresenta diferenas importantes em relao aos outros modelos apresentados neste trabalho. Esse modelo surgiu mais recentemente em comparao aos demais modelos, visto ter sido desenvolvido para ser uma representao aproximada dos computadores modernos. A estrutura de memria de uma mquina de registradores composta por um nmero innito de registradores que, diferentemente dos demais modelos, podem ser modicados independentemente. Esse modelo segue o padro da memria de acesso direto dos computadores eletrnicos modernos.

Ainda, nas mquinas de registradores a noo de programa e mquina apresenta-se de forma dissociada. Mais precisamente, a funo programa denida para realizar uma computao forma um conjunto de instrues rotuladas, que operam sobre a estrutura de registradores. A estrutura de controle executa instrues nos registradores que podem armazenar um nmero inteiro arbitrariamente grande. Alm dos registradores, o modelo composto por quatro operaes bsicas: incremento, decremento, salto condicional e parada. Essas operaes podem ser utilizadas de modo a compor as demais operaes necessrias para computaes mais complexas. A mquina de registradores abordada neste trabalho a NORMA, cujo nome signica Number theOretic Register MAchine.

2.2 Mquina TuringAlan Turing props um modelo desenvolvido com o intuito de demonstrar a impossibilidade de solucionar o problema da decidibilidade de Hilbert, conhecido como Entscheidungsproblem [3], em 1936. De acordo com [2], este modelo uma analogia a um mecanismo utilizado por um cientista para efetuar clculos: o cientista possui um estoque ilimitado de papel, lpis e borracha; no processo de soluo do problema o cientista pensa, faz anotaes e l anotaes anteriores podendo alter-las ou no; os raciocnios e alteraes so executadas pelo cientista baseados em parte das anotaes j feitas, uma vez que o cientista no consegue lembrar de todas ao mesmo tempo. O propsito de uma Mquina de Turing operar de maneira anloga. Uma Mquina de Turing composta por: (i) uma ta de tamanho innito dividida em blocos que representam os papis do cientista; (ii) uma cabea de leitura e escrita que representa o lpis e a borracha, possibilitando a leitura ou a escrita de um smbolo por vez, reposicionando-se na ta a partir de um movimento para o bloco antecessor ou sucessor, mas nunca ultrapassando o limite esquerda da ta; (iii) um conjunto de estados nitos que representam os raciocnios desenvolvidos pelo cientista, que so alterados a partir das observaes desse, causadas pelo estado atual, a posio da cabea de leitura e escrita e o smbolo que est correntemente sendo observado.

2.3 Mquina de PostNo mesmo ano que Turing introduziu o seu modelo, Emil Post apresentou um outro modelo de mquina universal que envolvia dois conceitos: um espao de smbolos onde a soluo do problema desenvolvida, e um conjunto xo de instrues que determina a ordem das operaes e onde elas so aplicadas no espao simblico. O espao simblico denido por Post consiste em uma la innita por onde se move uma unidade de controle, capaz de operar em uma posio da la por vez. As posies da la podem estar preenchidas ou no conforme ilustra a . Nessa gura, o smbolo | representa posio preenchida e a ausncia do smbolo representa posio vazia. Ainda conforme ilustrado na Figura 2.3, uma das posies da la marcada como ponto de partida, e essa posio indicada pelo smbolo #. A congurao de posies marcadas na la inicialmente so uma representao do problema, enquanto que ao nal da execuo essa congurao passa a representar a soluo ou resposta do problema. Entretanto, Post no se preocupou em denir como seria

essa representao, que deve ser feita por um agente externo antes e depois da computao do problema. Uma possvel soluo para realizar esta representao seria utilizar uma representao binria para o alfabeto utilizado na descrio do problema, de modo que uma posio vazia signica zero, uma posio preenchida signica um, e cada oito posies correspondem a um smbolo. Por praticidade, o alfabeto utilizado ser mais vasto uma vez que podemos considerar o conjunto de oito posies da la preenchidas por zeros e uns como se fosse uma nica posio representando um smbolo. A unidade de controle ou trabalho, como denida por Post, deve ser capaz de marcar uma posio da la (assumindo que esteja previamente vazia); desmarcar uma posio da la (assumindo que esteja preenchida); (iii) mover-se para uma posio direita ou esquerda; e (iv) determinar se a posio da la indicada pela posio da unidade de controle est marcada ou no.

2.4 Mquina de PilhasUma Mquina com Pilhas uma dupla: M = (, D) onde: alfabeto de smbolos de entrada; D programa ou diagrama de fluxos construdo a partir de componentes elementares denominados partida, parada, desvio, empilha e desempilha. Uma Mquina com Pilhas consiste, basicamente, de trs partes: Varivel X. De entrada, similar da Mquina de Post, mas usada somente para entrada; Variveis Yi. Do tipo pilha, utilizadas como memria de trabalho; Programa. uma seqncia finita de instrues, representado como um diagrama de fluxos onde cada vrtice uma instruo. o As instrues podem ser de cinco tipos: partida, parada, desvio, desempilha e empilha.

A varivel X no possui tamanho nem limite fixos. Os smbolos pertencem aoalfabeto de entrada. Inicialmente, o valor de X a palavra de entrada, e seu comprimento igual ao comprimento da palavra corrente armazenada. Caso X no contenha smbolos, a entrada vazia, representada por .

As variveis

Yi, em nmero varivel mas finito, tambm no possuem tamanho nem limite fixos, e os smbolos pertencem ao alfabeto de entrada. Inicialmente, o valor de cada pilha Yi a palavra vazia, e seu comprimento igual ao comprimento da palavra corrente armazenada.

As componentes elementares de um diagrama de fluxos so:Partida. Existe somente uma instruo de incio (partida) em um programa. Parada. Existem duas alternativas de instrues de parada em um programa: uma de aceitao (aceita), e outra de rejeio (rejeita).

Desvio (ou Teste) e Desempilha. Determinam o fluxo do programa de acordo com o smbolo mais esquerda da palavra armazenada na varivel X (desvio) ou no topo da pilha Yi (desempilha). So desvios condicionais. Se o cardinal de n, ento existem n+1 arestas de desvios condicionais, pois se deve incluir a possibilidade da palavra vazia . X ler(X) denota uma leitura destrutiva, que l o smbolo mais esquerda de X ou do topo de Yi, retirando o smbolo lido.

Empilha. Empilha um smbolo s no topo da pilha indicada, ou seja, concatena o smbolo na extremidade da palavra armazenada na varivel Yi.

em um diagrama de fluxos, existe somente uma instruo de partida, mas podem existir diversas (zero ou mais) instrues de parada, tanto de aceitao como de rejeio; uma palavra de entrada aceita ou rejeitada, se a computao, iniciada com a varivel X contendo a entrada, atingir uma instruo aceita ou rejeita, respectivamente; em um desvio (respectivamente, desempilha), se X (respectivamente, Yi) contm a palavra vazia , ento segue o fluxo correspondente; caso contrrio, l o smbolo mais esquerda de X (respectivamente, no topo de Yi) e o remove aps a deciso de qual aresta do fluxo indica a prxima instruo. As seguintes concluses podem ser estabelecidas sobre o nmero de pilhas e o poder computacional das mquinas com pilhas:

Mquina Finita. Uma Mquina Finita, que corresponde a uma Mquina Sem Pilhas, possui um poder computacional relativamente restrito, pois no tem memria auxiliar para armazenar informaes de trabalho. Por exemplo, no existe Mquina Sem Pilha capaz de reconhecer um duplo balanceamento como em { anbn n 0 }. Mquina com Uma Pilha. A Classe das Mquinas com Uma Pilha, embora mais poderosa que a Classe das Mquinas Finitas, ainda possui uma capacidade computacional restrita. Por exemplo, no existe Mquina com

Uma Pilha capaz { anbncn n 0 } .

de reconhecer um triplo balanceamento como em

Mquina com Duas Pilhas. Conforme ser verificado adiante, a Classe das Mquinas com Duas Pilhas possui o mesmo poder computacional que a Classe das Mquinas de Turing ou de Post; Mquina com Mais de Duas Pilhas. A Classe das Mquinas com Mais de Duas Pilhas possui o mesmo poder computacional que a Classe das Mquinas com Duas Pilhas. Ou seja, para qualquer mquina com mais de duas pilhas, possvel construir uma equivalente com, no mximo, duas pilhas que realiza o mesmo processamento.

2.5 Autmatos com duas pilhasO Autmato de Duas Pilhas uma mquina universal que foi desenvolvida a partir de uma generalizao de autmatos com pilha. O modelo composto por uma estrutura de dados composta de duas pilhas que geralmente so utilizadas como uma pilha de trabalho e outra de retorno, mas podem ser usadas livremente; uma ta de entrada que contm o conjunto de smbolos a ser processado pela mquina que lida uma nica vez e no pode ser alterada depois do incio da computao; um conjunto nitos de estados cujas transies indicam os smbolos lidos da ta de entrada e das pilhas, e os smbolos escritos nas pilhas; uma unidade de controle formada por um conjunto de apontadores que indicam a posio de leitura da ta de entrada e o topo das pilhas. As pilhas presentes nesse modelo so utilizadas livremente como memria para leitura e gravao de smbolos que so armazenados separadamente, um em cada uma das clulas que compem a pilha. Inicialmente as pilhas apresentam-se vazias e no possuem um tamanho mximo de clulas pr-determinado. O controle do estado atual da mquina realizado pela unidade de controle, que possui um ponteiro para a ta de entrada e um ponteiro para o topo de cada pilha. No caso do ponteiro da ta, esse s pode movimentar-se para a direita lendo a entrada uma nica vez; j os ponteiros das pilhas podem mover-se em uma posio para cima ou para baixo, ou ainda permanecer conforme a operao realizada empilhe, desempilhe ou substitua um smbolo permanecendo na mesma posio, mas sempre apontando para o topo da pilha.

2.6 Modificaes sobre mquinas universaisMquinas Universais so equivalentes s diversas verses modificadas do modelo bsico, com caractersticas que supostamente aumentariam o poder computacional.

No-Determinismo No-determinismo uma importante generalizao dos modelos de mquinas. No caso da Mquina de Turing, para o mesmo estado corrente e smbolo lido, diversas alternativas so possveis. Cada alternativa percorrida de forma totalmente independente. Isso significa que as alteraes de contedo na fita realizadas em um caminho no modificam o contedo da mesma nos demais caminhos alternativos.

A mesma idia vlida para a varivel X da Mquina de Post ou para as pilhas do Autmato com Pilhas.

Genericamente, no-determinismo interpretado como: a mquina, ao processar uma entrada, tem como resultado um conjunto de novos estados. ela assume um conjunto de estados alternativos, como se houvesse uma multiplicao da unidade de controle, uma para cada alternativa, processando independentemente, sem compartilhar recursos com as demais. processamento de um caminho no influi no estado geral, nem no smbolo lido dos demais caminhos alternativos. Para uma mquina M no-determinstica, uma palavra w pertence a: ACEITA(M) se existe pelo menos um caminho alternativo que aceita a palavra. REJEITA(M) se todas as alternativas rejeitam a entrada. LOOP(M) se nenhum caminho aceita a palavra e pelo menos um fica em loop.

Mquina de Turing com Fita Infinita Esquerda e DireitaA modificao da definio bsica da Mquina de Turing, permitindo que a fita seja infinita dos dois lados, no aumenta o poder computacional. Simulao: as clulas pares representam a parte direita da fita, e as mpares, a parte esquerda. O smbolo b usado para controlar a fronteira entre as partes esquerda e direita.

Mquina de Turing com Mltiplas FitasA Mquina de Turing com mltiplas fitas possui k fitas infinitas esquerda e direita e k correspondentes cabeas de fita. O processamento realizado: depende do estado corrente da mquina e do smbolo lido em cada uma das fitas; grava um novo smbolo em cada uma das fitas, move cada uma das cabeas independentemente para a esquerda ou direita, e a mquina assume um (nico) novo estado.

Outras modificaes sobre a Mquina de TuringSo apresentadas outras modificaes sobre o modelo bsico da Mquina de Turing, as quais no aumentam o poder computacional. Ou seja, possvel construir Mquinas de Turing tradicionais que simulam cada uma das modificaes sugeridas.

Mquina de Turing Multidimensional. Neste modelo, a fita tradicional substituda por uma estrutura do tipo arranjo k dimensional, infinita em todas as 2k direes; Mquina de Turing com Mltiplas Cabeas. A Mquina de Turing com esta modificao possui k cabeas de leitura e gravao sobre uma nica fita. Cada cabea possui movimento independente. Assim, o processamento depende do estado corrente e do smbolo lido em cada uma das cabeas. Combinaes. Combinaes de algumas ou de todas as modificaes apresentadas. A combinao de algumas ou de todas as modificaes apresentadas no aumenta o poder computacional da Mquina de Turing. Por exemplo, uma Mquina de Turing No-Determinstica com Mltiplas Fitas e Mltiplas Cabeas podem ser simuladas por uma Mquina de Turing tradicional.

2.7 Hierarquia de classe de mquinas

Hierarquia de Classes de Linguagens: Linguagens Regulares. Correspondem Classe das Mquinas sem Pilha. So exemplos de linguagens dessa classe: alguns editores de texto, protocolos de comunicao. So linguagens muito simples, como as quais, por exemplo, no possvel fazer qualquer tipo de balanceamento de tamanho nopredefinido. A principal caracterstica dessa classe que o tempo de reconhecimento de uma palavra diretamente proporcional ao comprimento da entrada. Qualquer algoritmo especificado usando esse formalismo igualmente eficiente, em termos de tempo de processamento; Linguagens Livres do Contexto Determinsticas. Correspondem Classe dos Autmatos Determinsticos com Uma Pilha.

So linguagens mais complexas que as Regulares, mas ainda muito simples, com as quais, por exemplo, no possvel reconhecer a linguagem. Palavra_Reversa = { wwr w pertence a { a, b }* } Tempo de reconhecimento de uma entrada diretamente proporcional ao dobro do tamanho da entrada;

Linguagens Livres do Contexto. Correspondem Classe dos Autmatos NoDeterminsticos com Uma Pilha: Constituem uma classe de fundamental importncia, pois incluem linguagens de programao como Algol e Pascal. Algumas linguagens muito simples no pertencem a essa classe de linguagens como: Triplo_Bal = { anbncn n 0 } Palavra_Palavra = { ww w palavra sobre os smbolos a e b } Os melhores algoritmos de reconhecimento conhecidos possuem tempo de processamento proporcional ao tamanho da entrada elevado ao cubo; Linguagens Recursivas. Correspondem classe de todas as linguagens que podem ser reconhecidas mecanicamente e para as quais existe um algoritmo de reconhecimento que sempre pra para qualquer entrada. Inclui a grande maioria das linguagens aplicadas. Os reconhecedores de linguagens recursivas podem ser muito ineficientes, tanto em termos de tempo de processamento como de recursos de memria.

Linguagens Enumerveis Recursivamente. Correspondem Classe dasMquinas Universais. Correspondem classe de todas as linguagens reconhecidas mecanicamente. que podem ser

2.7 Hiptese de ChurchTuring props um modelo abstrato de computao, conhecido como Mquina de Turing, com o objetivo de explorar os limites da capacidade de expressar solues de problemas. Trata-se, portanto, de uma proposta de definio formal da noo intuitiva de algoritmo. Diversos outros trabalhos, como Mquina de Post (Post - 1936) e Funes Recursivas (Kleene - 1936), bem como a Mquina Norma e o Autmato com Pilhas, resultaram em conceitos equivalentes ao de Turing. O fato de todos esses trabalhos independentes gerarem o mesmo resultado em termos de capacidade de expressar computabilidade um forte reforo no que conhecido como Hiptese de Church ou Hiptese de Turing-Church: "A capacidade de computao representada pela Mquina de Turing o limite mximo que pode ser atingido por qualquer dispositivo de computao" Em outras palavras, a Hiptese de Church afirma que qualquer outra forma de expressar algoritmos ter, no mximo, a mesma capacidade computacional da Mquina de Turing. Como a noo de algoritmo ou funo computvel intuitiva, a Hiptese de Church no demonstrvel.

Supondo verdadeira a Hiptese de Church, pode-se afirmar que para: Funo Computvel: possvel construir uma Mquina de Turing (ou formalismo equivalente) que compute a funo; Funo No-Computvel: No existe Mquina de Turing (ou formalismo equivalente) que compute a funo.

BibliografiaDIVERIO, Tiaraj Asmuz;

MENEZES, Paulo Blauth. Teoria da computao: mquinas universais e computabilidade. 2. ed. Porto Alegre: Sagra Luzzatto, 2004. MENEZES, Paulo Blauth.

ALVES, DBORA PANDOLFI Equivalncia de Mquinas Universais:Demonstrao, Anlise e Simulao So Leopoldo, julho de 2007 UCPEL/ESIN/BCC 053218 Teoria da Computao