Portanto, existe um algoritmo para converter termos de cálculo lambda em lógica combinatória usando combinadores SK. Produz coisas que explodem de tamanho. Eu gostaria de saber mais sobre essa explosão de tamanho. No entanto, não consigo pensar em um algoritmo melhor. Eu ouvi falar de linguagens funcionais sendo praticamente compiladas em combinadores, então parece que um algoritmo melhor deve existir. Eu procurei o artigo de David Turner sobre o assunto e ele basicamente diz para aplicar algumas otimizações e que elas causam uma "melhoria considerável".
"Melhoria considerável" significa que o tamanho cai para apenas um aumento polinomial? Existe uma maneira conhecida de converter termos lambda em lógica combinatória com apenas um aumento polinomial (ou menor?) De tamanho? Se esse algoritmo existe, é prático?
Respostas:
não é um especialista nisso, mas aqui estão dois artigos históricos que parecem ser intimamente relevantes para a questão e é possivelmente uma área de pesquisa semi-ativa. Turner propôs um conjunto de combinadores que podem ser reduzidos a combinadores SK. este próximo artigo argumenta que os combinadores Turner, mesmo não reduzidos a combinadores SK, levam a uma explosão exponencial (e que presumivelmente a redução aos termos SK seria ainda maior). mas o segundo artigo diz que existe um algoritmo eficiente de espaço O (n log n) baseado nos combinadores Turner. (parece que talvez tenham sido feitas alegações sobre a eficiência polinomial que não são totalmente demonstradas / não comprovadas e, portanto, são consideradas conjecturas ...
O que é uma implementação eficiente do cálculo λ? / Frandsen, Sturtivant (1991) (ver p.18)
Tradução de Turner Combinators no espaço O (n log n) / Noshita (1985)
fonte