O cálculo lambda e a lógica combinatória são iguais?


26

Atualmente, estou lendo " Lambda-Calculus and Combinators " de Hindley e Seldin. Não sou especialista, mas sempre me interessei pelo cálculo lambda por causa do envolvimento com a programação funcional (começando com Lisp e SICP e agora com R e Haskell).

Em " Cálculo binário lambda e lógica combinatória" , John Tromp afirma:

CL pode ser visto como um subconjunto do cálculo lambda ... as teorias são basicamente as mesmas, tornando-se equivalentes na presença da regra da extensionalidade.

Sob quais condições alguém usaria lógica combinatória em vez de cálculo lambda ?

Todas as referências serão apreciadas.


Veja "Cálculo lambda: sua sintaxe e semântica", de HP Barendregt.
Kaveh

Respostas:


15

O que distingue a lógica combinatória é que ela é livre de variáveis. Às vezes, isso é útil na metamatemática e na lógica filosófica, onde o status das variáveis ​​é complicado.

Também pode ser útil em implementações, pois gerenciar variáveis ​​pode ser uma dor de cabeça. Cf., por exemplo, Hughes, 1982, Super-combinadores: Um novo método de implementação para linguagens aplicativas


3
A lógica combinatória não é mais considerada útil nas implementações e nunca foi usada porque "gerenciar variáveis ​​pode ser uma dor de cabeça". Combinadores e variantes foram usados ​​para implementar a redução de gráficos em idiomas preguiçosos, mas hoje em dia Haskell (a linguagem preguiçosa mais proeminente) usa técnicas muito mais razoáveis ​​para implementar a redução de gráficos.
Blaisorblade 8/09/10

Veja, por exemplo, S. Peyton Jones, 1992, "Implementando linguagens funcionais preguiçosas em hardware de estoque: a G-machine Spineless Tagless" - research.microsoft.com/copyright/accept.asp?path=/users/simonpj/…
Blaisorblade

2
@Blaisorblade: Combinadores e variantes foram usados ​​para implementar a redução de gráficos em linguagens preguiçosas - Cuidado: Haskell e ghc não são os mesmos, e a literatura contém vários Haskells baseados em supercombinadores. Mas é verdade que o estado da arte em programação funcional encontrou as vantagens de eficiência de lidar com ambientes que superam sua complexidade. Você ainda vê supercombinadores usados, por exemplo, em programação lógica de ordem superior, onde isso não é verdade. Os supercombinadores continuam fazendo parte do inventário de técnicas usadas na implementação de programação de ordem superior.
Charles Stewart

Os supercombinadores evitam apenas variáveis ​​livres, não vinculadas, portanto, IMHO não podem ser considerados usos da lógica combinatória per se. São principalmente termos lambda especiais. Existem diferenças muito menores entre supercombinadores, programas com uso de lambda (se houver algum, não tenho certeza) e a implementação do GHC (onde ponteiros de um fechamento para suas variáveis ​​livres podem ser copiados da função host, graças à pureza). Dito isto, eu também estava pensando no recente Utrecht Haskell Compiler, que é muito semelhante ao GHC, mas o IIRC usa o levantamento de lambda; Ainda assim, isso não é CL.
Blaisorblade 10/09/10

Eu não conhecia programação lógica de ordem superior - encontrei este documento: springerlink.com/content/t68777w270713p5n . Infelizmente, é improvável que eu tenha tempo para lê-lo.
Blaisorblade 10/09/10

4

Referindo-me ao comentário de John Tromp, quero observar que a lógica combinatória parece muito diferente do cálculo lambda. Como seu interesse deriva da programação funcional, você realmente não quer saber muito sobre a lógica combinatória.

Meu tutorial favorito sobre lógica combinatória está nessas notas de aula da Universidade de Cambridge.

No entanto, eles são introduzidos para explicar a implementação das chamadas linguagens preguiçosas (ou aplicativas); Como mencionado no meu comentário anterior, essas técnicas estão desatualizadas.


Como as linguagens combinatórias não são mais usadas para implementar linguagens preguiçosas / aplicativas, quais são as técnicas de ponta agora? E existe um nome / categoria para classificar essas técnicas?
CMCDragonkai

@CMCDragonkai Veja os comentários em cstheory.stackexchange.com/a/306/989 para discussão. A curta resposta prática é "consulte os documentos sobre o que o GHC faz": há uma variedade de técnicas diferentes (incluindo a máquina STG e otimizações, como análise de rigor) que são combinadas para tornar os programas preguiçosos mais rápidos.
Bluesorblade #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.