A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Lambda Cálculo & Programação Funcional

Apresentações semelhantes


Apresentação em tema: "Lambda Cálculo & Programação Funcional"— Transcrição da apresentação:

1 Lambda Cálculo & Programação Funcional
Rodrigo Diego, Paulo Henrique {rdma, php} at cin dot ufpe dot br

2 Motivação É um modelo formal de computação equivalente a Máquinas de Turing, Markov e etc. Church, 1941 Notação que especifica uma função e regras de composição Todos os componentes são funções

3 uma função é concebida como uma abstração
exemplo: f(x) = a escreve-se \x.a g(x) = x escreve-se \x.x uma função composta é conhecida como aplicação exemplo de aplicação f(3) escreve-se (\x.a)3 => a ! logo, f(g(x)) => (\x.a)g(x) => (\x.a(\x.x)) !

4 uma abstração pode ser livre (free) ou ligada (bound)
esse conceito tem a ver com a presença ou não de uma variável x em M, onde a abstração é do tipo \x.M exemplo: \x.x       x é ligada \x.y       y é livre

5 Linguagem Funcional vs. Lambda Cálculo
uma variável é uma expressão lambda se M é uma expressão lambda e x é uma variável, então \x.M é uma expressão lambda. exemplo: quadrado de x \x.x*x                              (lambda-calculo) Prelude> (\x.x*x) 2          (Haskell) 4 se F e A são duas expressões lambda, então FA é uma expressão lambda

6 Lambda Cálculo é: uma linguagem, a notação lambda expressões lambda
e regras para simplificar e manipular expressões lambda a notação lambda é uma linguagem de primeira ordem, com conjunto de nomes de variáveis, V conjunto de constantes predefinidas, C Átomo Todo membro de C e de V é um átomo 

7 Notação Lambda uma notação que cria função sem dar-lhe nome
conhecida como notação lambda: \padrão -> expressão

8 Expressão Lambda uma expressão lambda é definida por Cláusula Básica:
todo átomo é uma expressão lambda Cláusula Indutiva se E1 e E2 são expressões lambda, então (E1E2) também o são (regra de aplicação - E1 operador, E2 operando) se E1 é uma expressão lambda e v é uma variável, então \v.E1 é uma expressão lambda (regra de abstração)

9 Definição Formal (BNF)
<exp>  ::=  <constante>     |   <variável>     |   (<exp> <exp>)       aplicação     |   (\ <variável>  <exp>)    abstração

10 Exemplo x, y, 2 e 3 são expressões lambda x, y pertencem a V
2, 3 pertencem a C equivalentes a: \x.x \y.y \x.2 \x.3, respectivamente

11 Convenções Associação a esquerda E1 E2 E3 = (E1 E2 E3) = ((E1 E2) E3)
porém, (E1 (E2 E3)) != (E1 E2 E3)

12 Expressão Lambda - Abstração
a variável v de uma abstração \v.E é chamada de parâmetro formal a expressão E é chamada de corpo da expressão na prática, uma expressão \v.E é uma função de argumento v a partir de uma expressão E a expressão lambda \x. (+ x 3) é lida como: "uma função de x que adiciona x a 3"

13 Lambda Conversões seja \x.(x + 3)
trocando-se x por y, temos \y.(y + 3) se aplicarmos a abstração lambda a 5 temos: \x.(x + 3) 5 = \y.(y + 3) 5 = 8 regras de conversão são necessárias para provar a equivalência entre lambda expressões

14 Regras de Conversão Lambda
a-conversão: " Uma variável vinculada pode ser consistentemente renomeada, em uma expressão lambda, 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) porém \x.(x + y) não pode ser renomeada para \y.(y + y)

15 Regra de Conversão Lambda
b-conversão " A expressão lambda (\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 reduzida para \y.(3 + y) 5 e logo após para (3 + 5) = 8 Em Haskell: \x y -> (x + y) 3 5 8

16 a expressão redex significa reducible expression
é toda expressão potencialmente reduzível através de uma b-conversão forma normal é quando não há mais nenhuma redução possível


Carregar ppt "Lambda Cálculo & Programação Funcional"

Apresentações semelhantes


Anúncios Google