Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Teoria da Computação, Notas de estudo de Informática

Material da disciplina de Teoria da Computação em .doc

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 08/01/2010

william-dias-8
william-dias-8 🇧🇷

5

(1)

1 documento

1 / 48

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Acad. Marcelo Bacchieri
Acad. Luciano Vieira
Teoria da Computação
Prof. Campani
Informática
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30

Pré-visualização parcial do texto

Baixe Teoria da Computação e outras Notas de estudo em PDF para Informática, somente na Docsity!

Acad. Marcelo Bacchieri

Acad. Luciano Vieira

Teoria da Computação

Prof. Campani

Informática

“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:

START: GOTO L 0;

L 0: DO F 0 GOTO L2;

L 1: DO F 1 GOTO L2;

L 2: HALT;

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:

  1. F 04 D F é uma função parcial sobre M para cada F^ F 0C EF 04 6.
  2. F 04 D P é uma função parcial sobre M para cada P^ F 0C EF 05 0.

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.

L 1,<2,3>,

L 2,<2,3>,

L 3,<2,6>,

L 1,<1,6>,

L 2,<1,6>,

L 3,<1,6>,

L 1,<0,6>,

L 4,<0,6>.

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. Modelos Limites para Máquinas

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.

SR4~PC

SR2~SR

SR2~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

  • x divide y:

F 0 7 0 x divide y^ :

F 0 7 0 MFC^ :