Tipos Indutivos & Recursão (Primitiva)

Documentos relacionados
Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 17

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

A integral também é conhecida como antiderivada. Uma definição também conhecida para integral indefinida é:

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Estruturas Discretas INF 1631

Renata de Freitas e Petrucio Viana. IME, UFF 12 de março de 2015

Fundamentos de Matemática

Teoria da Computação I

Universidade Estadual de Santa Cruz. Departamento de Ciências Exatas e Tecnológicas. Especialização em Matemática. Disciplina: Estruturas Algébricas

Lista n 0 1 de Exercícios de Teoria da Computação

Curso de C para Engenharias

Acumuladores. Paradigma de Programação Funcional. Marco A L Barbosa

Unidade IV: Ponteiros, Referências e Arrays

Lógica Computacional Descrição do Projeto

Segunda Prova de Análise e otimização de Código - DCC888 -


Lógica Computacional

Exercícios de Teoria da Computação Autómatos finitos não deterministas

Ensino Fundamental II

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

Algoritmo e Programação

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves

Comandos de Manipulação

Introdução à Programação

Teoria da Computação - Programação OCaml Ficha de exercícios

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

LIMITES e CONTINUIDADE de FUNÇÕES. : R R + o x x

PLANO DE ENSINO. Período/ Fase: 1º Semestre: 1º Ano: 2011 Disciplina: Programação de Computadores I (PGC21) Carga Horária: 72 horas/aula

Orientação a Objetos

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

ALP Algoritmos e Programação. . Linguagens para Computadores

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

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48

Organização e Arquitetura de Computadores I

PLANO DE ENSINO. Ano: 2015 Semestre Letivo: ( ) Primeiro ( x ) Segundo Total de Créditos (se for o caso): 4 Carga Horária: 60 horas

CAP. I ERROS EM CÁLCULO NUMÉRICO

UNOCHAPECÓ - ÁREA DE CIÊNCIAS EXATAS E AMBIENTAIS ENGENHARIA MECÂNICA - P.I. PROF. EDERSON MOREIRA PAZ

Algumas Equivalencias do Axioma da Escolha

Aula 03 Custos de um algoritmo e funções de complexidade

Laboratório de Sistemas e Sinais L1: Matrizes, Sons e Imagens

RESULTADO DOS RECURSOS DA PROVA OBJETIVA EDITAL 02/2012.

Orientação a Objetos

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Linguagens Formais e Autômatos. Alfabetos, Palavras, Linguagens e Gramáticas

MANUTENÇÃO DE MICRO. Mário Gomes de Oliveira

MD Teoria dos Conjuntos 1

1 Os números naturais, Axiomas de Peano

Alfabeto e palavras. Alfabeto conjunto finito de símbolos (Σ).

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

N, 1 i m, tal que f m é f e cada f i satisfaz uma das condições abaixo:

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Tipos abstratos de dados

ESCOLA SUPERIOR ABERTA DO BRASIL - ESAB CURSO DE PÓS-GRADUAÇÃO LATO SENSU EM ENGENHARIA DE SISTEMAS JACK SUSLIK POGORELSKY JUNIOR

Consequências Interessantes da Continuidade

Relatório do 1ºProjecto. Gestão de uma Clínica Médica

Matemática Discreta - 03

Geração de Código em C para Simples

Exp e Log. Roberto Imbuzeiro Oliveira. 21 de Fevereiro de O que vamos ver 1. 2 Fatos preliminares sobre espaços métricos 2

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

Programação Orientada a Objeto

Provas de. Manuel Ricou Departamento de Matemática Instituto Superior Técnico

Faculdade Pitágoras 24/10/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Introdução às Tecnologias da Informação e da Comunicação Parte Teórica

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

PARTE Funções Reais de Várias Variáveis Reais

CAPÍTULO 6 ARITMÉTICA DIGITAL

Sistemas Computacionais II Professor Frederico Sauer

Introdução às Linguagens de Programação

1.3. Componentes dum sistema informático HARDWARE SOFTWARE

Números fuzzy interativos

Capítulo 2: Introdução à Linguagem C

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

1 Máquina URM, comandos e programas URM

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica

A ideia de coordenatização (2/2)

BCC202 - Estrutura de Dados I

Dadas a base e a altura de um triangulo, determinar sua área.

Conhecimento e compreensão do tema produção mais limpa em cursos de especialização: um estudo de caso

Aula 5 Microsoft PowerPoint 2003: Criando uma Apresentação

SISTEMA GERENCIADOR DE BANCO DE DADOS

Carlos Humberto Soares Júnior

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular ESTUDOS AVANÇADOS DE INFORMÁTICA APLICADA Ano Lectivo 2012/2013

Capítulo 2. Álgebra e imagens binárias. 2.1 Subconjuntos versus funções binárias

Monografia sobre R ser um Domínio de Fatoração Única implicar que R[x] é um Domínio de Fatoração Única.

Prova de Aferição de Matemática

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Cada elemento da EAP deve representar um resultado tangível e verificável; Todos os resultados principais devem estar explicitamente

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

A linguagem da Lógica Proposicional (Capítulo 1)

Resumo. Leonel Fonseca Ivo. 17 de novembro de 2009

PROGRAMA DE DISCIPLINA

Introdução a Java. Hélder Nunes

Algoritmos e Linguagem de Programação I

Roteiro do Programa e Entrada/Saída

ELIPSES INSCRITAS NUM TRIÂNGULO

Hoje é inegável que a sobrevivência das organizações depende de dados precisos e atualizados.

Sergio da Silva Aguiar Universidade Estadual do Sudoeste da Bahia - I Seemat

Transcrição:

Alfio Martini www.inf.pucrs.br/alfio Clube de Lógica em Ciência da Computação Faculdade de Informática - PUCRS 2 de setembro de 2013

Sumário Objetivos Gerais 1 Objetivos Gerais 2 3 Funções Primitivas Recursivas sobre 4

Sumário Objetivos Gerais 1 Objetivos Gerais 2 3 Funções Primitivas Recursivas sobre 4

Objetivos Apresentar os princípios gerais que envolvem construções indutivas de tipos de dados: Princípio geral destas definições (Construtores) Definições de funções totais por recursão primitiva Esquema de indução para prova de propriedades

Sumário 1 Objetivos Gerais 2 3 Funções Primitivas Recursivas sobre 4

:Idéia Geral Uma definição indutiva de um conjunto S consiste sempre dos seguintes passos: Base Listar alguns elementos específicos (constantes) de S. Pelo menos um elemento deve ser listado. Indução Definir uma ou mais regras para a construção de novos elementos de S a partir dos elementos já existentes. Fecho Declarar que S consiste exatamente dos elementos produzidos pelos passos da base e indução.

Construtores de Dados Os construtores de um conjunto indutivo S são todos elementos listados no passo da base juntamente com todas as regras apresentadas no passo da indução.

Indutiva dos Naturais Os elementos do conjunto indutivo Nat são todos os valores gerados pelas seguintes regras: zero Nat NatZero x Nat suc x Nat NatSuc Nat é isomórfico à N, onde N = {0, 1, 2,...} suc : Nat Nat e zero : Nat (operadores)

Uma outra definição de Nat [NatZero] zero Nat. [NatSuc] Se x Nat, então suc x Nat. [Fecho] Nada mais está em Nat.

Linguagem Nat Termos zero suc zero suc (suc zero) suc (suc (suc zero)). suc k zero (k N).

Uma Gramática para Nat N : Nat ::= zero suc N (N Nat)

Naturais: Princípio de Indução Princípio de Indução Cada elemento em Nat tem a seguinte forma: zero Suc k, k Nat

Regra de Indução para Nat Conjunto Indutivo Nat x 0 : Nat, P(x 0 ). P zero. P(suc x 0 ) n : Nat.P n (x 0 arbitrária) IndNat

Indutiva de ListEmpty nil List(A) h A T List(A) ListCons h T List(A)

Linguagem List(A) Termos List(A) List(N) List(Nat) nil nil nil x nil 5 nil (suc zero) nil a b nil 2 0 nil zero (suc 3 zero)nil...

Uma Gramática para List(A) L : List(A) ::= nil h L (h A, L List(A))

: Princípio de Indução Princípio de Indução Cada elemento em List(A) tem a seguinte forma: nil h T, h A, T List(A)

Regra de Indução para List(A) Conjunto Indutivo List(A) e 0 : A, l 0 : List(A), P l 0. P nil. P (e 0 l 0 ) l : List(A). P l (e 0, l 0 arbitrárias) IndList

Indutiva da Lógica Proposicional Exercício...

Sumário Objetivos Gerais Funções Primitivas Recursivas sobre 1 Objetivos Gerais 2 3 Funções Primitivas Recursivas sobre 4

Funções Primitivas Recursivas sobre Funções Primitivas Recursivas: Visão Geral Idéia Geral Dada uma definição de um conjunto indutivo S, f : S... S S é definida por recursão da seguinte forma: Escolher um dos argumentos (posições) de entrada de S e, neste argumento: definir f para cada elemento do conjunto base (constantes) definir f para cada um dos construtores restantes (regras de construção)

Funções Computáveis (FC) Funções Primitivas Recursivas sobre Funções Recursivas (FR) A classe de FC é a classe de FR (Church) Classe FR primitivas é uma subclasse das FR FR Primitivas são todas funções TOTAIS

FR Primitivas Objetivos Gerais Funções Primitivas Recursivas sobre Construção Funções Básicas (zero, sucessor e projeções) Regra da Composição (Substituição) Regra da

Classe de Funções Primitivas Recursivas Funções Primitivas Recursivas sobre Funções Básicas A classe de funções primitivas recursivas sobre os números naturais N é definida pelas seguintes regras: Função Constante: a função constante zero z(x) = 0 é primitiva recursiva. Função Sucessor: a função sucessor Suc(x) = x + 1 é primitiva recursiva. Função de Projeção: para todo n 1 e 1 i n, a função n-ária de projeção Pi n que retorna o i-ésimo argumento, é primitiva recursiva. P n i (x 1,..., x n) = x i

Classe de Funções Primitivas Recursivas Funções Primitivas Recursivas sobre Regra de Composição f (x 1,..., x k ) y 1 = g 1(z 1,..., z m). y k = g k (z 1,..., z m) h(z 1,..., z m) = f (y 1,..., y k ) = f (g 1(z 1,..., z m),..., g k (z 1,..., z m)) h = Cn[f, g 1,..., g k ]

Classe de Funções Primitivas Recursivas Funções Primitivas Recursivas sobre h(x, 0) = f (x) h(x, Suc(y)) = g(x, y, h(x, y)) h = Pr[f, g]

Classe de Funções Primitivas Recursivas Funções Primitivas Recursivas sobre (Adição) x + 0 = x x + Suc(y) = Suc(x + y) sum(x, 0) = x sum(x, 0) = P 1 1 (x) sum(x, Suc(y)) = Suc(sum(x, y)) sum(x, Suc(y)) = Suc(P 3 3 (x, y, sum(x, y))) = Cn[Suc, P 3 3 ](x, y, sum(x, y)) sum Pr[P 1 1, Cn[Suc, P 3 3 ]]

Uma bijeção entre Nat e N Funções Primitivas Recursivas sobre Nat2nat : Nat N, onde Nat2nat zero = 0 Nat2nat (suc x) = Suc (Nat2nat x) (Nat2nat01) (Nat2nat02) 0 N Suc : N N tal que Suc x x + 1

Adição em Nat Objetivos Gerais Funções Primitivas Recursivas sobre add : Nat Nat Nat, onde add x 0 = x add x (suc y) = suc (add x y) (add01) (add02)

Concatenação em Funções Primitivas Recursivas sobre cat : List(A) List(A) List(A), onde cat nil l = l cat (h T ) l = h (cat T l) (cat01) (cat02)

Comprimento de Funções Primitivas Recursivas sobre length : List(A) N, onde length nil = 0 length (h T ) = (length T ) + 1 (len01) (len02)

Teoremas sobre add Objetivos Gerais Funções Primitivas Recursivas sobre x : Nat. y : Nat. z : Nat.add x (add y z) = add (add x y) z x : Nat. y : Nat.add x y = add y x x : Nat.add(Z, x) = x x : Nat. y : Nat.add x (suc y) = add (suc x) y) x : Nat. y : Nat.add (suc x) y) = suc (add x y) Th-add-01 Th-add-02 Th-add-03 Th-add-04 Th-add-05

(A) Funções Primitivas Recursivas sobre l 1 : List(A). l 2 : List(A). l 3 : List(A). cat l 1 (cat l 2 l 3 ) = cat (cat l 1 l 2 ) l 3 l 1 : List(A). l 2 : List(A).len (cat l 1 l 2 ) = add (len l 1 ) (len l 2 ) l : List(A).cat l nil = l l : List(A).rev (rev l) = l l 1 : List(A). l 2 : List(A). rev (cat l 1 l 2 ) = cat (rev l 2 ) (rev l 1 )) Th-cat-01 Th-cat-02 Th-cat-03 Th-rev-01 Th-rev-02

Sumário Objetivos Gerais 1 Objetivos Gerais 2 3 Funções Primitivas Recursivas sobre 4

Objetivos Gerais Tipos Indutivos são definidos por Construtores Tipos Indutivos podem ser equipados com Funções Funções são definidas por Tipos Indutivos + Funções = (Abstract) Datatypes Provas por Indução e definições de Funções são feitas sobre os Construtores do Tipo.