Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.