Являются ли лямбда-исчисление и комбинаторная логика одинаковыми?

26

В настоящее время я читаю « Лямбда-исчисление и комбинаторы » Хиндли и Селдина. Я не эксперт, но всегда интересовался лямбда-исчислением из-за участия в функциональном программировании (начиная с Lisp и SICP, а теперь с R и Haskell).

В « Binary лямбда - исчисления и комбинаторной логики» , Джон Тромп гласит:

CL можно рассматривать как подмножество лямбда-исчисления ... теории в значительной степени совпадают, становясь эквивалентными при наличии правила экстенсиональности.

При каких условиях можно использовать комбинаторную логику вместо лямбда-исчисления ?

Любые ссылки будут оценены.

Шейн
источник
Взгляните на «Лямбда-исчисление: его синтаксис и семантика» HP Barendregt.
Каве

Ответы:

15

Что отличает комбинаторную логику, это то, что она свободна от переменных. Это иногда полезно в метаматематике и философской логике, где статус переменных сложен.

Это также может быть полезно в реализациях, поскольку управление переменными может быть головной болью. См., Например, Хьюз, 1982, Супер-комбинаторы: новый метод реализации для аппликативных языков.

Чарльз Стюарт
источник
3
Комбинаторная логика больше не считается полезной в реализациях, и она никогда не использовалась, потому что «управление переменными может быть головной болью». Комбинаторы и варианты использовались для реализации сокращения графов для ленивых языков, но в настоящее время Haskell (самый известный ленивый язык) использует гораздо более разумные методы для реализации сокращения графов.
Blaisorblade
См., Например, S. Peyton Jones, 1992, «Внедрение ленивых функциональных языков на стандартном оборудовании: G-машина без бесхребетного тега» - research.microsoft.com/copyright/accept.asp?path=/users/simonpj/…
Blaisorblade
2
@Blaisorblade: Комбинаторы и варианты использовались для реализации сокращения графов для ленивых языков - будьте осторожны: Haskell и ghc не совпадают, а в литературе есть несколько основанных на суперкомбинаторе Haskells. Но это действительно так, современное состояние функционального программирования нашло преимущества эффективности обработки сред, которые перевешивают его сложность. Вы по-прежнему видите суперкомбинаторы, используемые, например, в логическом программировании высшего порядка, где это не так. Суперкомбинаторы остаются частью инвентаря методов, используемых при реализации программирования более высокого порядка.
Чарльз Стюарт
Суперкомбинаторы избегают только свободных переменных, а не связанных, поэтому ИМХО их нельзя рассматривать как использование комбинаторной логики как таковой. В основном это специальные лямбда-термины. Различия между суперкомбинаторами, лямбда-программами (если они есть, не уверены) и реализацией GHC значительно ниже (где указатели от замыкания на его свободные переменные могут быть скопированы из функции хоста благодаря чистоте). Сказав это, я также подумал о недавнем Utrecht Haskell Compiler, который очень похож на GHC, но IIRC использует лямбда-лифтинг; тем не менее, это не CL.
Blaisorblade
Я не знал о логическом программировании высшего порядка - я нашел эту статью на нем: springerlink.com/content/t68777w270713p5n . К сожалению, вряд ли я успею это прочитать.
Blaisorblade
4

Реферирование на комментарий Джона Тромп, я хочу заметить , что комбинаторная логика чувствует себя очень отличается от лямбда - исчисления. Так как ваш интерес связан с функциональным программированием, вы действительно не хотите много знать о комбинаторной логике.

Мой любимый урок по комбинаторной логике - в этих лекциях из Кембриджского университета.

Однако они представлены для объяснения реализации так называемых ленивых (или аппликативных) языков; как уже упоминалось в моем предыдущем комментарии, такие методы уже устарели.

Blaisorblade
источник
Поскольку комбинаторные языки больше не используются для реализации ленивых / аппликативных языков, каковы современные технологии? И есть ли название / категория для классификации этих методов?
CMCDragonkai
@CMCDragonkai См. Комментарии к cstheory.stackexchange.com/a/306/989 для обсуждения. Краткий практический ответ - «см. Статьи о том, что делает GHC»: существует множество различных методов (включая как машину STG, так и оптимизации, такие как анализ строгости), которые объединяются вместе, чтобы быстро выполнять ленивые программы.
Blaisorblade