Apakah kalkulus dan logika kombinasi lambda sama?

26

Saat ini saya membaca " Lambda-Calculus and Combinators " oleh Hindley dan Seldin. Saya bukan ahli, tetapi selalu tertarik pada kalkulus lambda karena keterlibatan dengan pemrograman fungsional (dimulai dengan Lisp dan SICP, dan sekarang dengan R dan Haskell).

Dalam " Binary Lambda Calculus and Combinatory Logic" , John Tromp menyatakan:

CL dapat dipandang sebagai bagian dari kalkulus lambda ... teorinya sebagian besar sama, menjadi setara di hadapan aturan ekstensionalitas.

Dalam kondisi apa seseorang akan menggunakan logika kombinatori bukannya kalkulus lambda ?

Referensi apa pun akan dihargai.

Shane
sumber
Lihatlah "kalkulus Lambda: sintaks dan semantiknya" oleh HP Barendregt.
Kaveh

Jawaban:

15

Yang membedakan logika kombinatorik adalah bahwa ia bebas variabel. Ini kadang-kadang berguna dalam metamathematics dan logika filosofis, di mana status variabel rumit.

Mungkin juga berguna dalam implementasi, karena mengelola variabel dapat menjadi sakit kepala. Cf., misalnya, Hughes, 1982, Super-combinators: Metode implementasi baru untuk bahasa aplikatif

Charles Stewart
sumber
3
Logika kombinasi tidak lagi dianggap berguna dalam implementasi, dan itu tidak pernah digunakan karena "mengelola variabel dapat menjadi sakit kepala". Kombinator dan varian digunakan untuk mengimplementasikan pengurangan grafik untuk bahasa malas, tetapi saat ini Haskell (bahasa malas yang paling menonjol) menggunakan teknik yang jauh lebih masuk akal untuk mengimplementasikan pengurangan grafik.
Blaisorblade
Lihat misalnya S. Peyton Jones, 1992, "Menerapkan bahasa-bahasa fungsional yang malas pada perangkat keras saham: mesin G-Spinless Tanpa Tag" - research.microsoft.com/copyright/accept.asp?path=/users/simonpj/…
Blaisorblade
2
@Blaisorblade: Combinator dan varian digunakan untuk mengimplementasikan pengurangan grafik untuk bahasa malas - Hati-hati: Haskell dan ghc tidak sama, dan literatur berisi beberapa Haskell yang berbasis supercombinator. Tapi itu benar, state-of-the-art dalam pemrograman fungsional telah menemukan keuntungan efisiensi penanganan lingkungan yang lebih besar daripada kompleksitasnya. Anda masih melihat supercombinators digunakan, misalnya, dalam pemrograman logika tingkat tinggi, di mana ini tidak benar. Supercombinators tetap menjadi bagian dari inventaris teknik yang digunakan dalam mengimplementasikan pemrograman tingkat tinggi.
Charles Stewart
Supercombinators hanya menghindari variabel bebas, bukan variabel terikat, jadi IMHO mereka tidak dapat dianggap menggunakan logika kombinatoris per se. Mereka kebanyakan adalah istilah lambda khusus. Ada perbedaan yang jauh lebih kecil antara supercombinators, program lambda-lifted (jika ada, tidak yakin) dan implementasi GHC (di mana pointer dari penutupan ke variabel bebasnya dapat disalin dari fungsi host, berkat kemurnian). Karena itu, saya juga berpikir untuk Utrecht Haskell Compiler baru-baru ini, yang sangat mirip dengan GHC, tetapi IIRC menggunakan lambda-lifting; tetap saja, itu bukan CL.
Blaisorblade
Saya tidak tahu pemrograman logika tingkat tinggi - saya menemukan makalah ini di atasnya: springerlink.com/content/t68777w270713p5n . Sayangnya, kecil kemungkinan saya akan punya waktu untuk membacanya.
Blaisorblade
4

Merujuk pada komentar John Tromp, saya ingin berkomentar bahwa logika kombinasi terasa sangat berbeda dari kalkulus lambda. Karena minat Anda berasal dari pemrograman fungsional, Anda benar-benar tidak ingin tahu banyak tentang logika kombinatorik.

Tutorial favorit saya tentang logika kombinasi ada dalam catatan kuliah ini dari Universitas Cambridge.

Namun, mereka diperkenalkan untuk menjelaskan implementasi yang disebut bahasa malas (atau aplikatif); seperti yang disebutkan dalam komentar saya sebelumnya, teknik seperti itu sekarang sudah ketinggalan zaman.

Blaisorblade
sumber
Karena bahasa kombinasional tidak lagi digunakan untuk menerapkan bahasa malas / aplikatif, apa teknik canggih saat ini? Dan adakah nama / kategori untuk mengklasifikasikan teknik ini?
CMCDragonkai
@CMCDragonkai Lihat komentar di cstheory.stackexchange.com/a/306/989 untuk diskusi. Jawaban praktis singkatnya adalah "lihat makalah tentang apa yang dilakukan GHC": ada berbagai teknik yang berbeda (termasuk mesin STG dan optimisasi seperti analisis ketat) yang digabungkan bersama untuk membuat program malas cepat.
Blaisorblade