00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de...

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

Transcript of 00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de...

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

00 (c) 2007 Gustavo Motta 1

Introdução ao -calculus

Prof. Gustavo MottaDepartamento de Informática/UFPB

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

00 (c) 2007 Gustavo Motta 2

-ca

lculu

sSumá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

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

00 (c) 2007 Gustavo Motta 3

-ca

lculu

sHistó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 -1936

Definiu o que é uma

função computável

Influência na ciência

computação

Linguagens funcionais

Alonzo Church (1903–1995)

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

00 (c) 2007 Gustavo Motta 4

-ca

lculu

sIntroduçã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?

322 xx

1xx

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

00 (c) 2007 Gustavo Motta 5

-ca

lculu

sIntroduçã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

Ocorrência livrelivre 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

322 xx

1

0

dxex )065( 2 xxx

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

00 (c) 2007 Gustavo Motta 6

-ca

lculu

sIntroduçã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 ‘’

133 23 xxx

xx. xfx ).(

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

00 (c) 2007 Gustavo Motta 7

-ca

lculu

sIntrodução – Variáveis e funções na

matemática e nas linguagens de programação

Funções na matemática

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

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

00 (c) 2007 Gustavo Motta 8

-ca

lculu

sIntroduçã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.

)()( xgxfxgf

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

00 (c) 2007 Gustavo Motta 9

-ca

lculu

sIntroduçã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

],|),[( RyDxyx

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

00 (c) 2007 Gustavo Motta 10

-ca

lculu

sIntroduçã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

DR

DR

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

00 (c) 2007 Gustavo Motta 11

-ca

lculu

sIntrodução – Domínios, tipos

e funções de alta ordem

Se R tem pelo menos dois 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

DRD

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

00 (c) 2007 Gustavo Motta 12

-ca

lculu

sIntroduçã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 ser “contí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

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

00 (c) 2007 Gustavo Motta 13

-ca

lculu

sIntroduçã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

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

00 (c) 2007 Gustavo Motta 14

-ca

lculu

sIntroduçã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

DR

DR DR

O parfaz parte do conjunto de pares desta função, então, quando a função é aplicada, tem-se

)363)(,133)(( 223 xxxfxxxxf

363)()133)(( 223 xxxfxxxxfd

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

00 (c) 2007 Gustavo Motta 15

-ca

lculu

sIntroduçã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

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

00 (c) 2007 Gustavo Motta 16

-ca

lculu

sIntrodução – Funções polimórficas e

currying

Exemplo...

void serialize(Object obj) {

...

}

...

Circle c = new Circle(...);

Date d = new Date(...);

... serialize(c); ...

... serialize(d); ...

cloneequals…

Object

Datey, m, d

drawwidthheight

Rectanglew, h

drawdiameter

Circler

distancemovedraw

Pointx, y

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

00 (c) 2007 Gustavo Motta 17

-ca

lculu

sIntrodução – Funções polimórficas e

currying

O tipo de uma função relaciona-se com a aridade

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 é

( ) ( ) …

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

00 (c) 2007 Gustavo Motta 18

-ca

lculu

sIntroduçã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)

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

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

00 (c) 2007 Gustavo Motta 19

-ca

lculu

sIntroduçã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

[ ]

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

00 (c) 2007 Gustavo Motta 20

-ca

lculu

sBibliografia

Revesz, G. E. Lambda-Calculus, Combinators, and Functional Programming. Cambridge University Press, 1988.