Cálculo Lâmbda ( l – Calculus)

32
Cálculo Lâmbda ( – Calculus) João Bosco da Mota Alves Programação Funcional INE/CTC/UFSC Junho/2001

description

Cálculo Lâmbda ( l – Calculus). João Bosco da Mota Alves Programação Funcional INE/CTC/UFSC Junho/2001. Notação Lâmbda. Às vezes, precisa-se definir pequenas funções, sem dar-lhes nomes Exemplo Calcular x 2 +3x+1, para x Î [1..100] Claro, é possível usar-se Ys = map f [1 .. 100] where - PowerPoint PPT Presentation

Transcript of Cálculo Lâmbda ( l – Calculus)

Page 1: Cálculo Lâmbda ( l  – Calculus)

Cálculo Lâmbda( – Calculus)

João Bosco da Mota AlvesProgramação Funcional

INE/CTC/UFSCJunho/2001

Page 2: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 2

Notação Lâmbda Às vezes, precisa-se definir pequenas

funções, sem dar-lhes nomes Exemplo

Calcular x2+3x+1, para x [1..100] Claro, é possível usar-se

Ys = map f [1 .. 100]where f x = x*x + 3 * x + 1

Page 3: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 3

Notação Lâmbda Há uma notação (-notation) que

cria função sem dar-lhe nome,\padrão -> expressão

Conhecida como Notação Lâmbda O símbolo \ é o mais parecido com Então

\x -> x*x + 3*x + 1

Page 4: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 4

Notação Lâmbda Lê-se, \x -> x*x + 3*x + 1, como

“a função que, dado o argumento x, calcula o valor x*x + 3*x + 1”

Muito usada para a passagem de função como parâmetro; exemploys = map (\x -> x*x + 3*x + 1) [1 .. x]

Page 5: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 5

Notação Lâmbda Em XLISPWIN> #' (lambda (x) (+ x 3))#<Closure: #484facad>> (funcall * 5)8 > (mapcar #' (lambda (x) (+ x 2)) '(1 2 3

4 5))(3 4 5 6 7)

Page 6: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 6

– Calculus consiste de Uma linguagem, a notação –

Que nos dá expressões lâmbda E regras

Para simplificar e manipular essas expressões lâmbda

Precisamos, então, aprender tanto a linguagem quanto as regras

Page 7: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 7

– Calculus Suponha que f : R -> R seja definida

por f(x) = (x + 1)2

Uma função de uma variável, f(x) f(a), para um a específico, é obtido

substituindo-se, por a, todas as ocorrências de x

Também, f(x) a, aplicação de f(x) a a

Page 8: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 8

– Calculus Então

f(x) 3 = (3 + 1)2 = 16

Page 9: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 9

– Calculus Suponha, agora, f : RR -> R, definida

por f(x,y) = x + y + (2*x*y) Aqui, f é um par de nos reais, (x,y) Dizemos que f é uma função de duas

variáveis, x e y f(a,b) pode ser obtido substituindo-se

por a e b as ocorrências de x e y, resp

Page 10: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 10

– Calculus Então

f(x,y) 3 5 = 3 + 5 + (2*3*5) = 38

Page 11: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 11

– Calculus Entretanto, há outra forma de se

pensar a aplicação de função Ao invés de aplicar-se às duas

variáveis simultaneamente, aplica-se à apenas uma de cada vez

Primeiro, f(x,y) 3 = 3 + y + (6*y) = g(y)

Depois g(y) 5 = 3 + 5 + (6*5) = 38

Page 12: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 12

– Calculus É sempre possível transformar

uma função de n variáveis em uma função de (n – 1) variáveis, aplicando-a para um valor de um de seus argumentos

Esta importante técnica é conhecida como currying

E é usada na aplicação de função em cálculo lâmbda

Page 13: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 13

– Calculus Seja, f : RR R -> R, definida por

f(x,y,z) = x + y + z Computando f(2,5,4)f(x,y,z) 2 5 4 2 + y + z f(2,y,z) 5 4 2 + 5 + z f(2,5,z) 4 2 + 5 + 4 11

Page 14: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 14

– Calculus A notação lâmbda é uma linguagem

de primeira ordem, com Conjunto de nomes de variáveis, V Conjunto de constantes pré-definidas, C

Átomo Todo membro de V e de C é um átomo Ex.: 2, ana

Page 15: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 15

– Calculus Expressão lâmbda, , é definida por Cláusula Básica

Todo átomo pertence a Cláusula Indutiva

Se E1, E2 , então (E1 E2) (Regra de aplicação: E1, operador; E2, operando)

Se E e v V, então (v.E) (Abstração lâmbda)

Page 16: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 16

– Calculus Cláusula Extrema

Uma expressão não é uma expressão lâmbda a menos que possa ser mostrada pertencer a , pela aplicação das cláusulas básica e indutiva, em um número finito de vezes

Page 17: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 17

– Calculus Na meta-linguagem BNF<exp> ::= <constante> | <variável> | (<exp> <exp>)

aplicação | ( <variável> <exp>)

abstração

Page 18: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 18

– Calculus Ex.: x, z2, 2, 3 e +, são expressões

lâmbda que são átomos, pois

x, z2 V

2, 3, + C

Page 19: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 19

– Calculus Como x e 2 são expressões

lâmbda, então também o são (pela regra da aplicação)

(x 2)((x 2) 2)(x (2 2))

Page 20: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 20

– Calculus Para eliminar parênteses, pode-se

estabelecer convenções Associação à esquerda, por exemplo

E1 E2 E3 = (E1 E2 E3) = ((E1 E2) E3)

Note que (E1 (E2 E3)) E1 E2 E3

Page 21: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 21

Simplificações ( – Calculus) ((+ x) y) + x y (((+ x) y) z) + x y z ((x (3 (z 5))) 4) x (3 (z 5)) 4 (x (((3 z) 5) 4)) ?

Page 22: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 22

– Calculus O poder expressivo do cálculo

lâmbda, vem das expressões lâmbda geradas pelo uso da regra de aplicação

Exemplo de abstrações lâmbda ( x. 2) ( x. (+ x 3)) ( x. x) ( x. ( y. (+ x y)))

Page 23: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 23

– Calculus A variável v de uma abstração lâmbda

v. E é chamada de parâmetro formal A expressão E é chamada de corpo da

expressão lâmbda Também podemos ter variáveis livres A variável y, abaixo, é livre; x, não

v. (+ x y)

Page 24: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 24

– Calculus Informalmente, a proposta de uma

abstração lâmbda v. E é fazer uma função de um argumento, v, a partir de uma expressão lâmbda E

A função, propriamente dita é o corpo A expressão lâmbda x. (+ x 3) é lida

como a função de x que adiciona x a 3

Page 25: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 25

– Calculus Abstração lâmbda tem associação à

esquerdax. y. E=x. (y. E)= (x. (y. E))x. y. (+ x y) 2=(x. (y. (+ x y) 2)) (x. y. (+ x y)) 2

Page 26: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 26

– Calculus Já a -expressão x. y. (+ x y) é

lida como a função de x que é a função de y que adiciona x a y

Page 27: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 27

– Calculus Seja x. (+ x 3) Trocando-se x por y, obtem-se a

mesma função y. (+ y 3) Se aplicada a 5, as duas avaliam 8 x. (+ x 3) 5 = y. (+ y 3) 5 = 8 Precisa-se de regras de conversão

que mostre a equivalência entre -exp

Page 28: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 28

Regras de conversão em – Calculus -conversão Uma variável vinculada pode ser

consistentemente renomeada, em uma -expression, se não houver ocorrência livre da mesma

x. (+ x 3) renomeada para y. (+ y 3)x. (+ x y) renomeada para z. (+ z y)Mas não x. (+ x y) para y. (+ y y)

Page 29: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 29

Regras de conversão em – Calculus -conversão

A -expression (x. E) E’, pode ser reduzida pela substituição, por E’, em todas as ocorrências de x no corpo E, desde que E’ não tenha ocorrência livre da mesma

x. (+ x 5) 3) reduzida para (+ 3 5) = 8

x. y. (+ x y)) 3 5 para (+ 3 5) = 8

Page 30: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 30

Regras de conversão em – Calculus

x. y. (+ x y)) 3 5x. (y. (+ x y))) 3) 5y. (+ 3 y)) 5(+ 3 5)8 Viu como a expressão lâmbda tem

associação à esquerda?

Page 31: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 31

Regras de conversão em – Calculus A expressão redex significa reducible

expression, ou expressão redutível Uma forma normal de redução surge

quando se usa a associação à esquerda Ex.: faça por associação à esquerda e à

direita, e veja que o resultado é 11x. y. (+ x y (y. (+ z 1)) 3)) 2 5

Page 32: Cálculo Lâmbda ( l  – Calculus)

INE/CTC/UFSC João Bosco da Mota Alves 32

Redex Função identidade como -

expressãox. x) 2 = 2x. x) = Ou mesmo,

51

32

51

32).( xx