Bagaimana tepatnya kalkulus lambda menangkap gagasan intuitif tentang komputabilitas?

12

Saya sudah mencoba untuk membungkus kepala saya di sekitar apa, mengapa dan bagaimana -kalkulus tapi saya tidak bisa memahami "mengapa itu bekerja"?λ

"Secara Intuitif" Saya mendapatkan model komputer Turing Machines (TM). Tapi -straksi ini membuat saya bingung.λ

Mari kita asumsikan, TM tidak ada - lalu bagaimana seseorang bisa "secara intuitif" diyakinkan tentang kemampuan -kalkulus untuk menangkap gagasan komputabilitas ini. Bagaimana memiliki banyak fungsi untuk segala sesuatu dan kemampuannya menyiratkan kemampuan komputasi? Apa yang kulewatkan di sini? Saya membaca makalah Alonzo Church tentang itu, tetapi saya masih bingung dan mencari pemahaman yang lebih "bodoh" tentang hal yang sama.λ

PhD
sumber
Apakah Anda memiliki masalah yang sama dengan sistem penulisan ulang dan tata bahasa? Dalam kalkulus lambda operasi dasar cukup sederhana: abstraksi fungsi, aplikasi fungsi dengan substitusi, dan perhitungan adalah normalisasi beta. Dengan kata lain, saya tidak melihat apa masalah Anda dengan itu sebagai model perhitungan yang masuk akal.
Kaveh
2
Saya belum melihat ada orang yang meragukan bahwa fungsi pasti kalkulus lambda dapat dihitung. Secara historis pertanyaannya adalah apakah ini satu-satunya fungsi yang dapat dihitung secara intuitif, yang merupakan masalah yang sama sekali berbeda dari apa yang Anda tanyakan.
Kaveh
1
Satu hal yang saya temukan bermanfaat adalah buku Raymond M Smullyan, "To Mock a Mockingbird" yang menggantikan fungsi dengan burung di hutan ajaib (dan merupakan bacaan yang baik)
dspyz
1
Buku Smullys adalah tentang logika kombinasi
Trismegistos

Jawaban:

21

Anda berada di perusahaan yang baik. Kurt Gödel mengkritik -kalkulus (dan juga teorinya sendiri tentang fungsi rekursif umum) karena tidak menjadi gagasan yang memuaskan tentang komputasi dengan alasan bahwa itu tidak intuitif, atau tidak cukup menjelaskan apa yang sedang terjadi. Sebaliknya, ia menemukan analisis Turing tentang komputabilitas dan gagasan tentang mesin yang benar-benar meyakinkan. Jadi, jangan khawatir.λ

Di sisi lain, untuk mendapatkan beberapa gagasan tentang bagaimana model komputabilitas bekerja, yang terbaik adalah menulis beberapa program di dalamnya. Tetapi Anda tidak harus melakukannya dalam -calculus murni , meskipun itu menyenangkan (dengan cara yang sama seperti firewalking). Anda dapat menggunakan turunan modern λ -calculus, seperti Haskell.λλ

Andrej Bauer
sumber
4
Jika firewalking sama menyenangkan seperti yang Anda katakan, maka saya harus mencobanya.
Radu GRIGore
Andrej, apakah Anda tahu referensi untuk ini? Godel tidak menerima model Chruch sebagai menangkap semua fungsi yang dapat diubah tetapi saya tidak ingat melihat di mana pun ia mengkritik model itu lebih jauh dari itu. Kritiknya terhadap model kalkulus lambada Gereja setara dengan kritiknya terhadap fungsi rekursif umum Godel-Herbrand sendiri sejauh yang saya tahu.
Kaveh
3
Saya pikir Anda menginginkan K. Godel: "Beberapa Keterangan tentang Hasil yang Tidak Dapat Dipastikan", Dalam Solomon Feferman, John Dawson & Stephen Kleene (eds.), Kurt Gödel: Collected Works Vol. Ii. Oxford University Press. 305--306 (1972). Lihat books.google.si/…
Andrej Bauer
6

Anda memprogram di dalamnya! Lihatlah pengkodean gereja . Anda dapat melihat bagaimana hampir semua aritmatika dapat dilakukan yang mungkin harus meyakinkan Anda bahwa itu sangat kuat. Saya suka melihat operasi pada daftar. Anda dapat mendefinisikan sebagian besar struktur data apa pun dalam hal fungsi yang melakukan operasi paling penting di dalamnya.

Misalnya, penyandian daftar adalah fungsi lipatan yang terlipat di atasnya. Perhatikan ini bukan penyandian Gereja, tetapi yang saya dapatkan dari jenis dan bahasa pemrograman Percie. Pengkodean pasangan Gereja tidak memberi kita rekursi, kita harus menambahkannya kembali ke dalam diri kita sendiri dengan semacam kombinasi rekursi.

jadi daftar membutuhkan dua argumen, fungsi untuk melakukan pelipatan, dan nilai awal untuk dipasang ke flip pada beberapa titik.

cons x xs = lam f. lam a. f x (xs f a)
nil       = lam f. lam a. a

sekarang kita dapat mendefinisikan penjumlahan yang diberi fungsi add (lihat pengkodean gereja dari atas)

sum xs = xs add 0

kita bisa melakukan lebih banyak dan mendefinisikan fungsi peta

consApply f x xs = cons (f x) xs
map f xs = xs (consApply f) nil

jika Anda masih tidak yakin bahwa ada perhitungan yang terjadi di sini dan ingin memastikan bahwa Anda dapat melakukan perhitungan apa pun maka periksa kombinator titik tetap . Ini agak menyakitkan kepala saya untuk berpikir tentang kadang-kadang namun jadi saya tidak yakin saya akan menyebutnya intuitif tetapi jika Anda secara manual mengevaluasinya dengan beberapa argumen Anda dapat melihat apa yang sedang terjadi.

Jake
sumber