Upload
celeste-clarke
View
29
Download
0
Embed Size (px)
DESCRIPTION
Lambda Cálculo & Programação Funcional. Rodrigo Diego, Paulo Henrique {rdma, php} at cin dot ufpe dot br. 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 - PowerPoint PPT Presentation
Citation preview
Lambda Cálculo & Programação Funcional
Rodrigo Diego, Paulo Henrique{rdma, php} at cin dot ufpe dot br
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
• uma função é concebida como uma abstração• exemplo:
o f(x) = a escreve-se \x.ao g(x) = x escreve-se \x.x
• uma função composta é conhecida como aplicaçãoo exemplo de aplicação
f(3) escreve-se (\x.a)3 => a !o logo, f(g(x)) => (\x.a)g(x) => (\x.a(\x.x)) !
• 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:
o \x.x x é ligadao \x.y y é livre
Linguagem Funcional vs. Lambda Cálculo
1. uma variável é uma expressão lambda2. se M é uma expressão lambda e x é uma variável, então \
x.M é uma expressão lambda.o 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
Lambda Cálculo é:
• uma linguagem, a notação lambdao expressões lambda
• e regraso para simplificar e manipular expressões lambda
• a notação lambda é uma linguagem de primeira ordem, como conjunto de nomes de variáveis, Vo conjunto de constantes predefinidas, C
• Átomoo Todo membro de C e de V é um átomo
Notação Lambda
• uma notação que cria função sem dar-lhe nome• conhecida como notação lambda:
o \padrão -> expressão
Expressão Lambda
• uma expressão lambda é definida por• Cláusula Básica:
o todo átomo é uma expressão lambda• Cláusula Indutiva
o 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)
o se E1 é uma expressão lambda e v é uma variável, então \v.E1 é uma expressão lambda (regra de abstração)
Definição Formal (BNF)
<exp> ::= <constante> | <variável> | (<exp> <exp>) aplicação | (\ <variável> <exp>) abstração
Exemplo
• x, y, 2 e 3 são expressões lambdao x, y pertencem a Vo 2, 3 pertencem a C
• equivalentes a:o \x.xo \y.yo \x.2o \x.3, respectivamente
Convenções
• Associação a esquerdao E1 E2 E3 = (E1 E2 E3) = ((E1 E2) E3)o porém, (E1 (E2 E3)) != (E1 E2 E3)
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:
o "uma função de x que adiciona x a 3"
Lambda Conversões
• seja \x.(x + 3)o trocando-se x por y, temos \y.(y + 3)
• se aplicarmos a abstração lambda a 5 temos:o \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
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 "o \x.(x + 3) renomeada para \y.(y + 3)o \x.(x + y) renomeada para \z.(z + y)o porém \x.(x + y) não pode ser renomeada para \y.(y + y)
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:
o \x y -> (x + y) 3 5o 8
• 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