








































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Material da disciplina de Teoria da Computação em .doc
Tipologia: Notas de estudo
1 / 48
Esta página não é visível na pré-visualização
Não perca as partes importantes!









































“Para o metafísico, as coisas e suas imagens no pensamento, os conceitos, são objetos isolados de investigação, objetos fixos, imóveis, observados um após o outro, cada qual de per si, como algo determinado e perene. O metafísico pensa em toda uma série de antíteses desconexas: para ele, há apenas o sim e o não e, quando sai desses moldes, encontra somente uma fonte de transtornos e confusão. Para ele, uma coisa existe ou não existe. Não concebe que essa coisa seja, ao mesmo tempo, o que é uma outra coisa distinta. Ambas se excluem de modo absoluto, positiva e negativamente. Causa e efeito se revestem da forma de uma antítese rígida. À primeira vista, esse método especulativo parece-nos extraordinariamente plausível, porque é o do chamado senso comum. Mas o verdadeiro senso comum, personagem bastante respeitável dentro de portas fechadas, entre as quatro paredes de sua casa, vive peripécias verdadeiramente maravilhosas, quando se arrisca pelos amplos campos de investigação. E o método do pensamento metafísico, por justo e necessário que seja em vastas zonas do pensamento, mais ou menos extensas, de acordo com a natureza do objeto de que trata, tropeça sempre, cedo ou tarde, com a barreira, que, franqueada, faz com que ele se torne um método unilateral, limitado, abstrato; perde-se em contradições insolúveis, uma vez que, absorvido por objetos concretos, não consegue enxergar as suas relações.”
— Friederich Engels, Anti-Dühring, 1878.
“Todo o movimento é sempre causado. A causualidade é uma das categorias fundamentais da dialética, tal como é uma categoria fundamental de toda a ciência. Negar a causualidade é, em última análise, negar a possibilidade do conhecimento.
A causa última de todo movimento, de toda a mudança, são as contradições internas do objeto em mutação. Todo o objeto, todo o fenômeno muda, `dá de si', modifica-se e transforma-se, em última análise, sob o efeito das suas contradições internas. Neste sentido, tem-se amiúde, e justamente, chamado à dialética a ciência das contradições. Lógica do movimento e lógica das contradições, são duas definições da dialética, praticamente idênticas.
A análise de todo o objeto, de todo o fenômeno, ou de todo o feixe, de todo o conjunto de fenômenos, deve pois visar a determinar quais deles são os elementos constitutivos contraditórios, e quais são os movimentos, a dinâmica, desencadeados por essas contradições.”
— Ernest Mandel, Introdução ao Marxismo, 1989.
“F(a) não é definido”
F 0 A D f é parcial F 0 D F
No caso da composição de funções:
f F 0B 0 g F 0A E <a, f(g(a))> para os quais: g(a)F 0B 9F 05 7 e f(g(a))F 0B 9F 05 7 logo, f(F 05 7 )=F 05 7
Se o domínio de uma função é vazio então a função é dita totalmente indefinida.
Se o domínio de uma função parcial é não vazio então a função é dita parcialmente definida.
Definição : Uma função g:AF 0A E B é uma extensão de uma função f:AF 0A E B se o domínio de f é um subconjunto do domínio de g, e para todo “a” no domínio de f, g(a)=f(a).
Definição da operação de divisão como função parcial sobre um conjunto memória M:
Todas as operações podem ser definidas como funções parciais.
Predicados parciais sobre o conjunto memória da máquina.
Ex.: Divide exatamente
1.4. Funções Computáveis
Definição : Função computável é aquela que pode ser algoritmicamente especificada, ou seja, pode-se dado “a” obter f(a) por uma seqüência precisa de instruções de uma forma mecânica e sem raciocínio.
Então dizemos que a função f:AF 0A E B é computável sss um algoritmo de “lápis e papel” pode ser especificado e quando aplicado a uma representação simbólica do elemento “a” do domínio terminará eventualmente produzindo uma representação simbólica de f(a). F 0 A D sem restrições quanto à quantidade de papel, tempo e paciência (para ser calculada “à mão”).
Obs.: se o algoritmo eventualmente não parar, o algoritmo define uma função parcialmente definida.
F é um nome de função P é um nome de predicado (teste)
Nós chamaremos estes quatro tipos de instrução respectivamente como instrução start, instrução de operação, instrução de teste e instrução halt. Instruções na forma:
L: DO F GOTO L;
São instruções das quais o controle nunca retornará. Nós vamos usar tais instruções nos casos em que o programa nunca termina. Uma instrução deste tipo chama-se laço- F 05 7 e é representado no fluxograma como abaixo:
F 0 A FF 0 5 7
Definição : Um esquema de um programa é um conjunto finito F 07 0 de instruções que contém exatamente uma instrução start e para cada rótulo ocorrendo em alguma instrução de F 07 0 , exatamente
uma instrução começa com este rótulo.
Um exemplo bobo de como esta definição é deficiente é o seguinte:
1.6. Máquinas Definidas
Definição : Uma máquina é uma função F 04 D definida sobre o conjunto F 04 6F 0C 8F 05 0 de todos os nomes de funções e predicados para qual existe um conjunto M, chamado conjunto memória da máquina, tal que:
As funções F 04 D F e os predicados F 04 D p são funções computáveis indicadas por seus nomes, ou em outras
palavras uma máquina é uma função que mapeia strings de funções computáveis para funções computáveis.
Na prática usaremos tabelas que assinalam operações e testes com seus respectivos nomes.
Operações e testes ilegais levarão ao resultado indefinido.
Definição : Um F 04 D -programa (ou um programa para F 04 D ), é um programa na qual nenhuma instrução, exceto laços-F 05 7 , fazem uso de uma operação ou teste que é interpretada como uma função totalmente indefinida.
1.7. Computação Definida
Definição : Uma computação completa de um programa F 07 0 numa máquina F 04 D é uma seqüência finita:
L (^) 0, m0, L1, m (^) 1,...Ln, mn
de elementos alternados de rótulos de F 07 0 e elementos de M, onde L 0 é o rótulo contendo a instrução start de F 07 0 , o rótulo L^ n contém alguma instrução halt de^ F 07 0 , e onde para i<n nós temos ou uma instrução da forma:
L (^) i: DO F GOTO L’;
pertencendo à F 07 0 ; neste caso L (^) i+1=L’ e m (^) i+1 =F 04 D F (mi), ou uma instrução da forma:
L (^) i: IF P THEN GOTO L’ ELSE GOTO L’’;
pertencendo à F 07 0 , neste caso mi+1 =mi, e ou F 04 D P(mi )= true e Li+1=L’, ou F 04 D P (mi)= false e Li+1 =L’’.
Uma computação não é completa se, ou nunca é executada uma instrução halt, ou alguma instrução da
operação é executada e F 04 D F (mi)=F 05 7 , ou alguma instrução de teste é executada e^ F 04 D P (mi)=F 05 7.
Definição : A função parcial F 04 DF 0 7 0computada por um programa F 07 0 numa máquina F 04 D é a função sobre o conjunto memória da máquina compreendendo todos os pares ordenados <m (^) 0,mn> tal que:
L (^) 0, m0, L1, m (^) 1,...,Ln, mn
é uma computação completa.
1.8. Definição da Máquina PC
Seja MF 0C CF 04 EF 0B 4F 04 E.
PCF 0 7 0:<m,n><0,(n+1).m!> F 0 A D Verificação FormalF 0A C correção.
1.9. Codificação e Decodificação
Como “preparar” o estado inicial da computação numa máquina? F 0 A D Codificação
Como ler o resultado obtido do programa? F 0 A D Decodificação
Por exemplo: estamos interessados em calcular a função fatorial com o programa F 07 0 , porém ele calcula a função (n+1).m! e não a função m!.
Poderíamos codificar um dado de entrada k como um par <k,0>, e o resultado do fatorial como o segundo membro do par <0,k!>.
Nós vamos especificar um conjunto de entrada X e um conjunto de saída Y, que são a imagem dos dados de entrada e de saída. Dada a função de codificação: e:XF 0A E M
e de decodificação: d:MF 0A E Y
onde M é o conjunto de memória, a composição
dF 0 B 0^ F 04 DF 0 7 0F 0 B 0e
para qualquer programa F 07 0 , nós teremos uma função parcial de X para Y.
Para o problema do fatorial teríamos a função de decodificação: input: kF 0A E <k,0>,
e de decodificação: output: <j,k>F 0A E k, então: outputF 0 B 0PCF 0 7 0F 0 B 0input
é uma função sobre F 06 E que calcula a função fatorial.
1.10. Definição da Máquina SR
A máquina SR4 é uma máquina de quatro registradores:
Seja o conjunto memória: M (^) SR4 ={<x, y, z, w>|x, y, z, wF 0B 3 0}
1.11. Propriedades dos Programas
Definição : Dois programas F 07 0 e F 07 0 ‘ são F 04 D -equivalentes sss F 04 DF 0 7 0= F 04 DF 0 7 0‘ .F 0A C são equivalentes se fazem
a mesma coisa.
Definição : Dois programas são equivalentes sss eles são^ F 04 D -equivalentes para qualquer máquina F 0 4 D.^ Depende da interpretação dos nomes
F 0 A D
Teorema : a) Todo programa é equivalente a um contendo somente uma instrução halt.
b) Todo programa é equivalente a um ao qual nenhuma instrução de teste conduz diretamente a uma outra instrução de teste envolvendo o mesmo nome de predicado.
Prova : a) Se o programa não tem instrução halt nós somente adicionaremos uma com um rótulo que não ocorra no programa. Se existir mais de uma, nós a condensamos em uma fazendo os rótulos idênticos.
b) A prova está ilustrada a seguir:
Teorema : Todo programa F 07 0 é F 04 D -equivalente a algum F 04 D -programa F 07 0 ‘.
Prova : O programa F 07 0 ‘ tem laços-F 05 7 onde^ F 07 0 tem instruções que usam nomes de funções ou nomes de predicados assinalados como totalmente indefinidos na máquina F 04 D.
Definição : No programa F 07 0 , a instrução I’ é acessível de uma instrução I se existe um caminho no fluxograma de F 07 0 de I para I’.
Definição : Um laço em F 07 0 é qualquer conjunto de instruções as quais são acessíveis de qualquer outra instrução do conjunto.
2.1. Simulação e Equivalência de Máquinas
Suponhamos que F 04 D e F 04 D ’ são duas máquinas, F 07 0 é um programa, e nós queremos computar a função F 04 DF 0 7 0em^ F 04 D ’. Se^ F 04 D e^ F 04 D ’ não tem conjuntos memória iguais, nós faremos uso de funções de decodificação, g: MF 0A E M’ e h: M’F 0A E M, e então encontraremos um programa^ F 07 0 ‘ tal que: F 0 A D um processo de “compilação” F 0 4 DF 0 7 0=h^
F 0 B 0
F 0 4 DF 0 7 0 ’‘^
F 0 B 0 g.
Suponha a função f:XF 0A E Y, que deve ser computada em F 04 D usando algum programa F 07 0 com
e:XF 0A E M e d:MF 0A E Y como funções de codificação e decodificação. Isto é:
2.2. Simulação Passo-à-passo
Existe um método geral de mostrar que uma máquina F 04 D ’ simula uma máquina F 04 D. Nós
mostramos que cada uma das operações e testes de F 04 D pode ser separadamente “simulada” por uma computação em F 04 D ’. Então para compilar um programa^ F 07 0 para^ F 04 D em um programa^ F 07 0 ‘ para^ F 04 D ’ correspondente nós simplesmente trocamos cada instrução de F 07 0 pelo programa para^ F 04 D ’ que “simula” a operação ou teste desta instrução. Suponha g:MF 0A E M’, então o programa F 07 0 F para simular uma operação F 04 D F deve ser tal que para todo mF 0C E M, F 04 D ’F 07 0 F(g(m))=g(F 04 D F(m)).
conj. de conj. de memória memória M M’ correspondente segmento de instrução de F 07 0 programa de F 07 0 ‘
Por indução sobre o comprimento da seqüência de computação, é fácil provar que se F 07 0 gera em F 04 D uma seqüência de computação da forma: L (^) 0,m0,L1,m (^) 1,...,Ln-1 ,mn-1 ,Ln,mn
então F 07 0 ‘gera em F 04 D ’ uma seqüência de computação da forma: L (^) 0,g(m0),...,L1,g(m^ 1),...,Ln-1 ,g(mn-1 ),...,Ln,g(mn).
Além disto, para oF 0A 3 i<n, as configurações de memória da subseqüência L i,g(mi),...,L^ i+1,g(m^ i+1 )
são aquelas da computação completa do programa F 07 0 F se em F 07 0 L (^) i rotula uma instrução de
operação que usa F, e aquelas da computação completa do programa F 07 0 P se em^ F 07 0 Li rotula um teste que usa P.
Então temos que F 0 4 DF 0 7 0(m0)=mn,
então F 0 4 DF 0 7 0 ’ ‘(g(m^ 0))=g(mn) para todas as configurações de memória m (^) 0. Isto estabelece que g F 0B 0^ F 04 DF 0 7 0=F 04 DF 0 7 0 ’‘ F 0B 0 g.
Rearranjando a equação usando a função inversa g -1, nós obtemos F 0 4 DF 0 7 0=g^ -^
F 0 B 0
F 0 4 DF 0 7 0 ’‘^
F 0 B 0 g
provando que F 04 D ’ simula F 04 D usando g e g-1^ como funções de codificação e decodificação de memória respectivamente.
Definição : A máquina F 04 D ’ simula passo-à-passo uma máquina^ F 04 D se para alguma função de codificação de memória g:MF 0A E M’ bijetora, existe:
a) Para todo nome de função F um programa F 07 0 F tal que g F 0B 0^ F 04 D F=F 04 D ’F 07 0 F F 0B 0 g;
b) Para todo nome de predicado P um programa F 07 0 P , o qual tem duas instruções halt rotuladas TRUE e FALSE, tal que para todo mF 0C E M,
F 0 4 D ’
F 0 7 0 P(g(m))=
F 0 5 7 quando^
F 0 4 D P(m)=
F 0 F 0 5 7 4 D ’
F 0 7 0 P(g(m))=g(m) quando^
F 0 4 D P(m)
F 0 B 9
F 0 5 7
com a computação de F 04 D ’F 07 0 P (g(m)) terminando no halt TRUE se F 04 D P(m)=true e no halt FALSE se F 0 4 D P^ (m)=false.
Ex.: Prove que SR4 simula passo-à-passo PC.
2.3. Máquinas de Registradores Ilimitados
usar variáveis extras quando se manipula muitos valores.
Máquina R:
O ambiente de informação de R é o conjunto de todas as sequências infinitas de inteiros não negativos
{n (^) i}
tal que para algum kF 0B 3 0, ni=0 para todo i>k.
Conjunto de operações e testes:
xi^ F 0A C m x (^) i^ F 0A C xj+m xi^ F 0A C xj-m^ se x^ j^ F 0B 3 m, caso contrário xi = xi^ F 0A C xjF 0B 4 m xi^ F 0A C xjF 0B 8 m se m=0, xi=0 divisão inteira
x (^) i^ F 0A C xj xiF 0A C xj+x (^) k xiF 0A C xj-x (^) k se x (^) k^ F 0B 3 xj, caso contrário x (^) i= x (^) i^ F 0A C xj=F 0B 4 xk xiF 0A C xjF 0B 8 xk se x (^) k=0, xi =0 divisão inteira.
xi =m? xiF 03 E m? x i =xj? x (^) i^ F 03 E xj?
Ex.:
e
Ex.: Fazer um protrama para a máquina R que calcule o maior fator comum de dois números.
e <m,n> { m,n,0,0,...} d {n 1,n2,n3,...}n^3
F 0 7 0 x divide y^ :
F 0 7 0 MFC^ :