1 / 16

Lambda Cálculo & Programação Funcional

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

Download Presentation

Lambda Cálculo & Programação Funcional

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

More Related