A questão subjacente:
O que o cálculo lambda faz por nós que não podemos fazer com as propriedades básicas da função e notação geralmente aprendidas na álgebra do ensino médio?
Antes de tudo, o que significa abstrato no contexto do cálculo lambda? Minha compreensão da palavra abstrato é algo que está separado da maquinaria, o resumo conceitual de um conceito.
No entanto, as funções lambda, eliminando os nomes das funções, impedem um certo nível de abstração. Por exemplo:
f(x) = x + 2
h(x, y) = x + 5 y
Mas mesmo sem definir o mecanismo dessas funções, podemos facilmente falar sobre sua composição. Por exemplo:
1. h(x, y) . f(x) . f(x) . h(x, y) or
2. h . f . f . h
Podemos incluir os argumentos, se quisermos, ou podemos abstrair completamente para dar uma visão geral do que está acontecendo. E podemos reduzi-los rapidamente a uma única função. Vejamos a composição 2. Posso ter camadas de detalhes dos alunos com as quais posso escrever, dependendo da minha ênfase:
g = h . f . f . h
g(x, y) = h(x, y) . f(x) . f(x) . h(x, y)
g(x, y) = h . f . f . h = x + 10 y + 4
Vamos executar o acima com cálculo lambda, ou pelo menos definir as funções. Não sei se isso está certo, mas acredito que a primeira e a segunda expressões aumentam em 2.
(λuv.u(u(uv)))(λwyx.y(wyx))x
E multiplicar por 5y.
(λz.y(5z))
Em vez de ser abstrato, isso parece entrar no próprio mecanismo do que significa somar, multiplicar etc. Abstração, na minha opinião, significa nível superior, e não inferior.
Além disso, estou lutando para ver por que o cálculo lambda é mesmo uma coisa. Qual é a vantagem de
(λuv.u(u(uv)))(λwyx.y(wyx))x
sobre
h(x) = x + 5 y
ou uma notação combinada
Hxy.x+5y
ou até a notação de Haskell
h x y = x + 5 * y
Novamente, o que o cálculo lambda faz por nós que não podemos fazer com as propriedades da função f (x) e a notação com as quais muitos estão familiarizados.