Teoria da Computação

Documentos relacionados
Funções Recursivas. Prof.: Edson Holanda Teoria da computação - Diverio e Menezes

Teoria da Computação

Linguagens Formais e Autômatos P. Blauth Menezes

Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

1 INTRODUÇÃO E CONCEITOS BÁSICOS

Computabilidade e Complexidade (ENG10014)

Resolução Exe 2.12 Monolítico Recursivo

I.2 Introdução a Teoria da Computação

Máquinas Universais. Máquina de Turing. Celso Olivete Júnior.

Computabilidade e Complexidade (ENG10014)

sumário 1 introdução e conceitos básicos 1 2 noções de lógica e técnicas de demonstração introdução à matemática discreta...

Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente

Centro Universitário do Triângulo

1 introdução. capítulo. O que é uma solução computável? Quais são os limites do que pode ser computado? Existem problemas sem solução computacional?

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

Turma A - Segundas e Quartas das 8h30min - 10h10min Turma B - Segundas e Quartas das 10h30min - 12h10min

1 Postulado de Church-Turing 1

COMPUTABILIDADE 3. Funções Parciais Recursivas

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Universidade da Madeira Ano lectivo 2006/07-2º semestre Responsável: Prof. José Carmo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

INE5317 Linguagens Formais e Compiladores AULA 5: Autômatos Finitos

Aulas Práticas. 1ª Aula Prática Perguntas sobre a Implementação de Funções Simples na Máquina URM...1

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Exercícios de Teoria da Computação Computabilidade

Teoria da Computação. Computabilidade e complexidade computacional

Máquinas de Turing - Computabilidade

SCC-5832 Teoria da Computação

Linguagens Formais e Autômatos P. Blauth Menezes

Matemática Discreta para Ciência da Computação

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Teoria da Computação Aula 02 Introdução

Matemática Discreta para Ciência da Computação

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.

SCC Teoria da Computação e Linguagens Formais

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica

Aula prática 5. Funções Recursivas

Linguagens de Programação Funcional

Linguagens Formais e Autômatos Apresentação da Disciplina

Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade

SCC Introdução à Teoria da Computação

Capítulo 2: Procedimentos e algoritmos

Teoria da Computação. Computabilidade

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Linguagens Formais e Autômatos

Máquinas de Turing 3

Fundamentos de Programação

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Introdução ao Curso. Área de Teoria DCC/UFMG 2019/01. Introdução à Lógica Computacional Introdução ao Curso Área de Teoria DCC/UFMG /01 1 / 22

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada

ECO026 TEORIA DA COMPUTAÇÃO. Prof: Rafael Santos Site:

Teoria da Computação. Aula 01

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Cálculo Lambda Sem Tipos

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Teoria da Computação. Unidade 1 Conceitos Básicos. Referência Teoria da Computação (Divério, 2000)

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Programação Funcional - Introdução a Cálculo Lambda

Faculdade de Computação

Turing to Norma, uma ferramenta para auxiliar o estudo da equivalência entre Máquina de Turing e Máquina Norma

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Máquina de Turing. Controle finito

Funções. Matemática Básica. O que é uma função? O que é uma função? Folha 1. Humberto José Bortolossi. Parte 07. Definição

O que é a Teoria em Ciência da Computação. Introdução à Ciência da Computação Mário S. Alvim

Máquinas de Turing 3

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Transcrição:

Ciência da Computação Teoria da Computação (ENG10395) Profa. Juliana Pinheiro Campos E-mail: jupcampos@gmail.com

Funções recursivas Os formalismos usados para especificar algoritmos podem ser classificados nos seguintes tipos: Operacional: define-se uma máquina abstrata baseada em estados, em instruções primitivas e na especificação de como cada instrução modifica cada estado. Ex: MT. Axiomático: Associam-se regras às componentes da linguagem. As regras permitem afirmar o que será verdadeiro após a ocorrência de cada cláusula, considerando-se o que era verdadeiro antes da ocorrência. Ex: gramática.

Funções recursivas Denotacional ou funcional: Trata-se de uma função construída a partir de funções elementares de forma composicional, no sentido em que o algoritmo denotado pela função pode ser determinado em termos de suas funções componentes. Ex: funções recursivas parciais (de Stephen C. Kleene) e cálculo lambda (de Alonzo Church)

Funções recursivas de Kleene (ou funções recursivas parciais) São funções construídas sobre 3 funções naturais básicas (funções recursivas primitivas): natural zero visto como uma função sucessor (de um número natural) projeção (na realidade, uma família de funções, pois depende do n de componentes, bem como de qual componente deseja-se projetar) juntamente com as seguintes operações: substituição composicional (generaliza o conceito usual de composição de funções)

Funções recursivas de Kleene (ou funções recursivas parciais) recursão (definição de uma função em termos dela mesma) minimização (busca, em um tempo finito, o menor valor para o qual uma certa condição ocorre) constituindo uma forma compacta e natural para definir muitas funções e suficientemente poderosa para descrever toda função intuitivamente computável.

Definição por indução de funções recursivas Quando você aprendeu a operação de exponenciação pela primeira vez provavelmente foi da forma: x n = x. x.. x (n vezes) Essa forma é bem simples de entender. Mais tarde você aprendeu uma definição própria por indução: x 0 = 1 x n+1 = x n. x

Definição por indução de funções recursivas Na sua forma mais simples, a definição de uma função f por indução a partir de uma outra função g é da forma Para f(0) = m f(n + 1) = g(f(n)) 0 f(0) = m 1 f(1) = g(m) Associe 2 f(2) = g(f(1))... A partir de agora, consideramos funções que podem ser obtidas usando a indução e a composição, começando por algumas que são obviamente computáveis.

Definição das funções recursivas primitivas As funções primitivas são incontestavelmente computáveis. São elas: Função constante zero f zero : N N tal que, x Є N, f zero (x) = 0 Sucessor sucessor: N N tal que, x Є N, sucessor(x) = x + 1 Projeção proj k i : N k N tal que (x 1,, x k ) Є N k, proj k i (x 1,, x k ) = x i para 1 <= i <=k (retorna o i-esimo elemento de uma sequencia de k valores) Ex: proj3 3 : N 3 N (projeção da 3ª componente de uma tripla) proj3 3 (x, y, z) = z

Definição das funções recursivas primitivas Elas são usadas para definir todas as outras funções recursivas parciais. Todas as funções tratadas serão sempre entre números naturais. Algumas vezes as projeções são chamadas funções de seleção. Proj1 1 é chamada de função identidade e escrita como id(x) = x.

Operações básicas Composição (substituição composicional): Sejam as funções parciais: g: N k N e f 1, f 2,..., f k : N n N. A função parcial: h: N n N é a substituição composicional de funções, ou simplesmente substituição de funções, definida a partir de g, f 1, f 2,... f k como segue: h(x 1, x 2,..., x n ) = g(f 1 (x 1, x 2,..., x n ), f 2 (x 1, x 2,..., x n ),... f k (x 1, x 2,..., x n )) h é dita definida para (x 1, x 2,..., x n ) se, e somente se: f i (x 1, x 2,..., x n ) é definida para todo i Є {1,2,..., k} g(f 1 (x 1, x 2,..., x n ), f 2 (x 1, x 2,..., x n ),... f k (x 1, x 2,..., x n )) é definida

Operações básicas Composição (substituição composicional): Exemplos: f um : sucessor(f zero ) f dois : sucessor(f um ) f tres : adição(f um, f dois ) função constante um função constante dois função constante três OBS: Para qualquer número natural n a função constante pode ser definida como a aplicação de n vezes a função sucessor.

Operações básicas Recursão primitiva Sejam as funções parciais: f: N n N e g: N n+2 N. A função parcial: h: N n+1 N é definida por recursão primitiva a partir de f e g como segue: h(x 1, x 2,..., x n, 0 ) = f (x 1, x 2,..., x n ) h(x 1, x 2,..., x n, y + 1) = g(x 1, x 2,..., x n, y, h(x 1, x 2,..., x n, y) A função parcial h é dita definida para (x 1, x 2,..., x n, ) se, e somente se: f (x 1, x 2,..., x n ) é definida g(x 1, x 2,..., x n, i, h(x 1, x 2,..., x n, i) é definida para todo i Є {1,2,..., y}

Operações básicas Recursão primitiva Exemplo: A adição é definida usando recursão primitiva: adição(x, 0) = id(x) adição(x, y+1) = proj3 3 (x, y, sucessor(adição(x, y))) adição(3,2) = proj3 3 (3, 1, sucessor(adição(3, 1))) = sucessor(adição(3, 1)) = sucessor(proj3 3 (3, 0, sucessor(adição(3, 0)))) = sucessor(sucessor(adição(3, 0))) = sucessor(sucessor(3)) = sucessor(4) = 5

Operações básicas Minimização Seja f:n n+1 N uma função parcial. A função parcial: h: N n N é fita definida por minimização de f e é tal que, (x 1, x 2,..., x n, y) Є N n+1: h(x 1, x 2,..., x n ) = min{y f(x 1, x 2,..., x n, y) = 0 e, z tal que z < y, f(x 1, x 2,..., x n, z) é definida} A função h, para o valor (x 1, x 2,..., x n ) é definida como o menor natural y tal que f(x 1, x 2,..., x n, y) = 0. Adicionalmente, a condição z tal que z < y, f(x 1, x 2,..., x n, z) é definida garante que é possível determinar, em um tempo finito, se, para qualquer valor z menor do que y, f(x 1, x 2,..., x n, z) é diferente de zero

Operações básicas Minimização Exemplo: função número zero. Suponha a função constante f zero. Seja const Zero o nº 0 nos naturais (não confundir com a função constante zero): const Zero: 1 N (função número zero const Zero (*)= 0) Podemos representar também como const Zero: N Podemos definí-la por minimização da seguinte forma: const Zero = min{y f zero (y) = 0}. De fato, o menor natural y tal que f zero (y) = 0 é o 0.

Funções recursivas Função recursiva total Como o próprio nome indica, função recursiva total nada mais é que uma função recursiva parcial que é total, ou seja, definida para todos os elementos do domínio. Como podemos ver, as seguintes classes de funções são equivalentes: funções recursivas parciais e funções turingcomputáveis; funções recursivas totais e funções turing-computáveis totais.

Funções recursivas Operações limitadas Uma vez que estamos limitados aos números naturais, não podemos ter algumas operações convencionais como as operações de subtração e divisão. A subtração realizada em sala de aula é a subtração limitada m n = máx{m n, 0} A função divisão div(m, n):divisão inteira de m por n pode ser realizada convencionando que o resultado é nulo quando n = 0.

Funções recursivas Predicado recursivo primitivo: é uma função recursiva parcial que assume somente os valores 0 e 1. Exemplo: função e zero : retorna 1 para o argumento 0 e 0, caso contrário. e_zero(0) = f um e_zero(n+1) = const Zero

Funções recursivas Predicado recursivo primitivo: Ex: função maior_ou_igual: maior_ou_igual(m,n) = 1 quando m >= n; e 0 caso contrário. maior_ou_igual (m, n) = e_zero(sub(n, m) Ex: E a função menor_que(m,n) como seria? menor_que(m, n) = f um maior_ou_igual(m, n) OBS: A negação de qualquer predicado recursivo também é um predicado recursivo.

Funções recursivas Predicado recursivo primitivo: Resumindo, se f e g são funções recursivas e p é um predicado recursivo, todos os três com o mesmo número de argumentos k, então a função definida por casos f(n 1,, n k ) = g(n 1,, n k ), se p(n 1,, n k ); f(n 1,, n k ) = h(n 1,, n k ), caso contrário; também é recursiva primitiva, uma vez que pode ser reescrita como: f(n 1,, n k ) = p(n 1,, n k ) x g(n 1,, n k ) + (1 - p(n 1,, n k )) x h(n 1,, n k ) ;

Referências Diverio, T. A.; Menezes, P. B.. Teoria da Computação: Máquinas Universais e Computabilidade. Porto Alegre: Sagra Luzzato, 2000. Carnielli, W. A.; Epstein, R. L.; Computabilidade, funções computáveis, lógica e os fundamentos da matemática. 2.ed. São Paulo: Editora UNESP, 2009.