Saya tidak tahu harus bertanya ke mana lagi, saya harap ini tempat yang bagus.
Saya hanya ingin tahu apakah mungkin membuat generator kalkulus lambda; pada dasarnya, loop yang akan, diberikan waktu yang tak terbatas, menghasilkan setiap fungsi kalkulus lambda yang mungkin. (seperti dalam bentuk string).
Karena kalkulus lambda sangat sederhana, hanya memiliki beberapa elemen untuk notasinya, saya pikir itu mungkin (meskipun, tidak sangat berguna) untuk menghasilkan semua kombinasi yang mungkin dari elemen notasi itu, dimulai dengan kombinasi yang paling sederhana, dan dengan demikian menghasilkan setiap lambda yang mungkin. fungsi kalkulus.
Tentu saja, saya hampir tidak tahu apa-apa tentang kalkulus lambda jadi saya tidak tahu apakah ini benar-benar mungkin.
Apakah itu? Jika demikian, apakah ini cukup mudah seperti yang saya bayangkan, atau apakah secara teknis memungkinkan, tetapi begitu sulit sehingga secara efektif tidak mungkin?
PS. Saya tidak berbicara tentang fungsi yang dikurangi beta, saya hanya berbicara tentang setiap notasi yang valid dari setiap fungsi kalkulus lambda.
sumber
if n%2==0 ...
Iya. Ambil sesuatu yang menyebutkan semua string ASCII yang mungkin. Untuk setiap output, periksa apakah itu sintaks kalkulus lambda yang valid yang mendefinisikan fungsi; jika tidak, lewati saja. (Pemeriksaan itu bisa dilakukan.) Itu menyebutkan semua fungsi kalkulus lambda.
sumber
Seperti yang telah disebutkan, ini hanya menyebutkan istilah dari konteks bahasa bebas, jadi pasti bisa dilakukan. Tapi ada matematika yang lebih menarik di baliknya, masuk ke bidang kombinatorik anlytical.
Makalah Menghitung dan menghasilkan istilah dalam kalkulus lambda biner berisi pengobatan masalah enumerasi, dan banyak lagi. Untuk mempermudah, mereka menggunakan sesuatu yang disebut biner lambda calulus , yang hanya merupakan pengkodean istilah lambda menggunakan indeks De Bruijn , jadi Anda tidak perlu menyebutkan variabel.
Makalah itu juga berisi kode Haskell konkret yang mengimplementasikan algoritma generasi mereka. Itu pasti secara efektif mungkin.
Saya kebetulan telah menulis implementasi dari pendekatan mereka di Julia.
sumber
Tentu. Kita dapat langsung menghasilkannya sesuai dengan definisi istilah lambda.
Di Haskell, kita mendefinisikan tipe data terlebih dahulu,
dan kemudian dengan menggunakan adil
join
,kita hanya menyebutkannya, seperti misalnya
fjoin
setara dengan Omega monad 'sdiagonal
.sumber
Saya telah menemukan satu alat online yang dapat menghasilkan string sampel dari ekspresi reguler: https://www.browserling.com/tools/text-from-regex . Anda dapat menghasilkan banyak contoh istilah lambda dengan memasukkan sesuatu seperti ini:
Tentu saja untuk mendapatkan istilah dengan tingkat bersarang yang sewenang-wenang, Anda perlu menggunakan tata bahasa bebas konteks, yang merupakan alat yang lebih deskriptif untuk mendefinisikan bahasa daripada ekspresi reguler. Saya belum menemukan alat yang ada untuk menghasilkan kalimat bahasa sampel berdasarkan pada definisi tata bahasa bebas konteks, tetapi tidak ada alasan seseorang tidak dapat dibangun.
sumber