00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.

Slides:



Advertisements
Apresentações semelhantes
Departamento de Informática Universidade Federal do Espírito Santo
Advertisements

Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi Wandekoken 2010/1.
Computação Gráfica I Conteúdo: Professor: - Objetos gráficos espaciais
Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB.
Introdução à Ciência da Computação Linguagens de Programação.
Matrizes especiais Matriz linha Matriz do tipo 1 x n, ou seja, com uma única linha. Por exemplo, a matriz A =[ ], do tipo 1 x 4. Matriz coluna.
Teoria da Computação MÁQUINA DE TURING (Continuação) Fabrício Dias
MÁQUINAS UNIVERSAIS Fabrício Dias
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Linguagens Formais e Autômatos
TEORIA DA COMPUTAÇÃO Parte III  Máquina de Turing
Interação entre objetos
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
ÁLGEBRA BOOLEANA Prof. Wanderley.
Metodologia Científica e Tecnológica
Temas de DSP Conceitos básicos de Sinais.
Cálculo Numérico Módulo I Ferramentas de Suporte
Análise de Requisitos Use Case Renata Araujo Ricardo Storino
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Árvores.
Recursividade Inhaúma Neves Ferraz
4. TEORIA DOS CONJUNTOS FUZZY - 1
Linguagens Livres de Contexto
BCC101 – Matemática Discreta
02(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
05(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
04(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Introdução ao -calculus
7 Abstração Genérica Unidades genéricas e instanciação.
8 Sistemas de Tipos Polimorfismo de inclusão.
Noções de Estrutura de Dados Logica de Programação
Linguagem de 1ª ordem da teoria de conjuntos
Classes e objetos P. O. O. Prof. Grace.
A Lógica das Sentenças Abertas Profa. Ana Florencia Aula 9
Conceitos Básicos.
Simplificação de Expressões Booleanas e Circuitos Lógicos
Análise Semântica e Representação Intermédia
Aprendizado de Máquina Aula 8
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Informática Teórica Engenharia da Computação
SISTEMAS LINEARES.
IB 1 Introdução à Computação Apresentação do curso Fonte: Prof: Joseana Macedo Fachine na01.ppt.
Informática Teórica Engenharia da Computação
Introdução a Programação
Conceitos de Lógica Digital
SIPSER – Capítulo 3: A tese de Church-Turing
Capítulo 11 Programação Lógica
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Teoria da Computação Aula 5 Prof. Fabiano Sabha.
Potencial elétrico Física Giovanni Ávila.
Trabalho e Potencial elétrico (Capítulo 3)
Inteligência Artificial
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Campus de Caraguatatuba Aula 2: Somatório e Produtório
Máquina de Turing Universal
1 O  -Cálculo & Linguagens Funcionais Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco - Recife - Brasil.
Construção e Análise de Algoritmos
Fontes de Erros Aula 1 Introdução; Erros em processos numéricos;
Cálculo Lambda (l – Calculus)
Lambda Cálculo & Programação Funcional
Faculdade Pernambucana - FAPE Setembro/2007
Engenharia/Ciência da Computação
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Transcrição da apresentação:

00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB

-calculus 00(c) 2007 Gustavo Motta 2 Sumário Histórico Variáveis e funções na matemática e nas linguagens de programação Domínios, tipos e funções de alta ordem Funções polimórficas e Currying

-calculus 00(c) 2007 Gustavo Motta 3 Histórico Alonzo Church -1930s Teoria unificada de funções abrangendo todos os tipos de funções da matemática Definição, aplicação e recursão Resposta negativa ao Entscheidungsproblem Entscheidungsproblem Definiu o que é uma função computávelfunção computável Influência na ciência computação Linguagens funcionais Alonzo Church (1903–1995)

-calculus 00(c) 2007 Gustavo Motta 4 Introdução – Variáveis e funções na matemática e nas linguagens de programação Variável na matemática Toda ocorrência refere-se a um mesmo valor Variável nas linguagens de programação Qual é o seu sentido?

-calculus 00(c) 2007 Gustavo Motta 5 Introdução – Variáveis e funções na matemática e nas linguagens de programação Modos de uso de variáveis em textos matemáticos livre Ocorrência livre de variáveis x representa um valor fixo implicitamente definido por uma equação ou outra relação Ocorrência amarrada (bounded) de variáveis

-calculus 00(c) 2007 Gustavo Motta 6 Introdução – Variáveis e funções na matemática e nas linguagens de programação O problema Distinguir variáveis livres e amarradas A variável x é livre ou amarrada? Sendo a expressão uma função, então x é considerada amarrada, mesmo que implicitamente A notação lambda força a diferenciação entre variáveis livres e amarradas com o uso do símbolo

-calculus 00(c) 2007 Gustavo Motta 7 Introdução – Variáveis e funções na matemática e nas linguagens de programação Funções na matemática Funções Enfoque intensional (conotativo) Procedimento computacional para computar o valor da função para um dado argumento Caráter dinâmico, conceito original Similar nas linguagens de programação Função unicamente definida por um procedimento Pressupõe uma descrição finita de uma função em termos de um procedimento para computação

-calculus 00(c) 2007 Gustavo Motta 8 Introdução – Variáveis e funções na matemática e nas linguagens de programação Funções na matemática Enfoque extensional (denotativo) Postula a existência de um valor da função para um dado argumento sem especificar como computá-los Caráter estático, baseado na teoria de conjuntos Funções como conjuntos de pares ordenados Diferentes funções conotativas (procedimentos) podem computar a mesma função denotativa Não é decidível, em geral, se duas funções definidas procedimentalmente são extensionally equal Definição 1.1 Duas funções são extensionally equal se e somente se elas têm o mesmo valor para todo argumento.

-calculus 00(c) 2007 Gustavo Motta 9 Introdução – Domínios, tipos e funções de alta ordem Sejam D (domínio) e R (co-domínio) dois conjuntos Uma função é definida por um conjunto de pares ordenados onde o segundo componente é unicamente determinado pelo primeiro Caso a função tenha exatamente um par (x, y) para cada x D, então ela é chamada função total, caso contrário é chamada função parcial

-calculus 00(c) 2007 Gustavo Motta 10 Introdução – Domínios, tipos e funções de alta ordem Uma função com domínio D e co-domínio R também é chamada de mapeamento de D para R e seu conjunto pares é denominado de grafo Existem muitas funções diferentes de D para R cada uma tendo o tipo [D R], D, R Para D e R finitos, o número de funções totais possíveis para o tipo [D R] é O conjunto de todas as funções com tipo [D R] é chamado espaço de função

-calculus 00(c) 2007 Gustavo Motta 11 Introdução – Domínios, tipos e funções de alta ordem Se R tem pelo menos dois elementosdois elementos O conjunto de todas as funções com tipo [ ] é não enumerável O conjunto de funções computáveis é enumerável Tem um procedimento computacional, i. e., uma máquina de Turing associada Máquinas de Turing podem ser enumeradas Expressão formada por strings finitos num alfabeto finito A grande maioria das funções com tipo [ ] é não computável

-calculus 00(c) 2007 Gustavo Motta 12 Introdução – Domínios, tipos e funções de alta ordem Existe uma propriedade definível extensionally que permita distinguir o grafo das funções computáveis do grafo das funções não computáveis? Os grafos das funções computáveis devem sercontínuos num sentido abstrato Base para construção de um modelo matemático para o -calculus sem tipos O propósito original do -calculus foi prover um framework para o estudo das propriedades formais de funções arbitrárias Objetivo ambicioso, não alcançado Usada para estudo das funções computáveis

-calculus 00(c) 2007 Gustavo Motta 13 Introdução – Domínios, tipos e funções de alta ordem Não se pode ter uma expressão para cada função com tipo [ ] O conjunto de contínuas coincide com o conjunto de funções que podem ser precisamente descritas por expressões, i. e., funções computáveis -calculus com tipos consideram o domínio e o co-domínio das funções relevantes no tratamento formal Toda variável tem um tipo associado Tipos são conjuntos de valores com operações associadas

-calculus 00(c) 2007 Gustavo Motta 14 Introdução – Domínios, tipos e funções de alta ordem integer, boolean, real, char, array, class O espaço de função é um conjunto Usado para construção de tipos funções Pode ser usado como domínio e co-domínio de outras funções [ ] é um tipo para funções de alta ordem (ou funcionais), funções que recebem funções como argumento e devolvem funções como resultado A função que calcula a derivada simbólica é uma função de segunda ordem O par faz parte do conjunto de pares desta função, então, quando a função é aplicada, tem-se

-calculus 00(c) 2007 Gustavo Motta 15 Introdução – Funções polimórficas e currying O problema Uma função para calcular o número de elementos de uma lista não deveria depender do tipo dos elementos da lista A solução – funções polimórficas Uma função é dita polimórfica se o tipo de pelo menos um de seus argumentos puder variar de chamada para chamada

-calculus 00(c) 2007 Gustavo Motta 16 Introdução – Funções polimórficas e currying Exemplo... void serialize(Object obj) {... }... Circle c = new Circle(...); Date d = new Date(...);... serialize(c); serialize(d);... clone equals … Object … Date y, m, d draw width height Rectangle w, h draw diameter Circle r distance move draw Point x, y

-calculus 00(c) 2007 Gustavo Motta 17 Introdução – Funções polimórficas e currying O tipo de uma função relaciona-se com a aridadearidade A função de adição de naturais tem o seguinte tipo [ ]add (a, b) = a + b Quando estendida para um número de argumentos arbitrário é chamada de poliádica Por exemplo, a função é poliádica e o seu domínio é ( ) ( ) …

-calculus 00(c) 2007 Gustavo Motta 18 Introdução – Funções polimórficas e Currying Linguagens de programação convencionais não suportam funções poliádicas Soluções Funções com um único parâmetro, que é uma seqüência de valores – arrays ou listas Adotar a solução de Currying (Haskell B. Curry)Currying Haskell B. Curry Técnica de transformar uma função que toma múltiplos argumentos numa função que toma um argumento por vez O -calculus sem tipos adota funções Curryed

-calculus 00(c) 2007 Gustavo Motta 19 Introdução – Funções polimórficas e Currying Exemplo de Currying Função tradicional [ ]add (a, b) = a + b add(10) erro Função Curryed [ [ ]] add (a) (b) = a + b add (10) add (b) = 10 + b [ ]

-calculus 00(c) 2007 Gustavo Motta 20 Bibliografia Revesz, G. E. Lambda-Calculus, Combinators, and Functional Programming. Cambridge University Press, 1988.