Saya hanya membaca di lambda calculus untuk "mengenalnya". Saya melihatnya sebagai bentuk komputasi alternatif sebagai lawan dari Mesin Turing. Ini adalah cara menarik untuk melakukan sesuatu dengan fungsi / reduksi (secara kasar). Beberapa pertanyaan terus mengganggu saya:
- Apa gunanya kalkulus lambda? Mengapa harus melalui semua fungsi / reduksi ini? Apa tujuannya?
- Akibatnya saya bertanya-tanya: Apa yang sebenarnya dilakukan lambda calculus untuk memajukan teori CS? Kontribusi apa yang memungkinkan saya memiliki momen "aha" untuk memahami kebutuhan akan keberadaannya?
- Mengapa kalkulus lambda tidak tercakup dalam teks tentang teori automata? Rute umum adalah melalui berbagai automata, tata bahasa, Turing Machines, dan kelas kompleksitas. Kalkulus Lambda hanya termasuk dalam silabus untuk kursus gaya SICP (mungkin tidak?). Tetapi saya jarang melihatnya sebagai bagian dari kurikulum inti CS. Apakah ini menyiratkan itu tidak terlalu berharga? Mungkin tidak dan saya mungkin melewatkan sesuatu di sini?
Saya sadar bahwa bahasa pemrograman fungsional didasarkan pada kalkulus lambda, tetapi saya tidak menganggapnya sebagai kontribusi yang valid, karena ia dibuat jauh sebelum kami memiliki bahasa pemrograman. Jadi, sungguh apa gunanya mengetahui / memahami lambda calculus, apakah aplikasi / kontribusinya terhadap teori?
Functional Programming
membahas Haskell dan sedikit Lisp. Penggantinya adalahPrinciples of Programming Languages
, yang menggunakan ML dan memperkenalkan kalkulus lambda. Seperti yang ditunjukkan oleh beberapa jawaban, itu benar-benar tempat kalkulus lambda berada: di kelas tentang bahasa pemrograman, pengetikan, dll.Jawaban:
-kalkulus memiliki dua peran utama.λ
Ini adalah dasar matematika sederhana dari perilaku komputasi sekuensial, fungsional, tingkat tinggi.
Ini adalah representasi bukti dalam logika konstruktif.
Ini juga dikenal sebagai korespondensi Curry-Howard . Bersama-sama, pandangan ganda -kalkulus sebagai bukti dan sebagai bahasa pemrograman (berurutan, fungsional, tingkat tinggi), diperkuat oleh nuansa aljabar λ- kalkulus (yang tidak digunakan bersama oleh mesin Turing), telah mengarah pada transfer teknologi besar-besaran antara logika, dasar-dasar matematika, dan pemrograman. Transfer ini masih berlangsung, misalnya dalam teori tipe homotopy . Khususnya pengembangan bahasa pemrograman secara umum, dan pengetikan disiplin ilmu khususnya, tidak dapat dipahami tanpa λλ λ λ -kalkulus. Sebagian besar bahasa pemrograman berutang beberapa derajat kepada Lisp dan ML (mis. Pengumpulan sampah diciptakan untuk Lisp), yang merupakan turunan langsung dari -calculus. Untaian pekerjaan kedua yang sangat dipengaruhi oleh λ- calculus adalah
asisten bukti interaktif .λ λ
Apakah kita harus tahu -kalkulus untuk menjadi programmer yang kompeten, atau bahkan ahli teori ilmu komputer? Tidak. Jika Anda tidak tertarik pada jenis, verifikasi, dan bahasa pemrograman dengan fitur tingkat tinggi, maka itu mungkin model perhitungan yang tidak terlalu berguna bagi Anda. Secara khusus, jika Anda tertarik pada teori kompleksitas, maka λ -kalkulus mungkin bukan model yang ideal karena langkah reduksi dasar ( λ x . M ) N → β M [ N / x ] sangat kuat: ia dapat membuat angka acak salinan pada N , jadi → βλ λ
Untuk ikhtisar ensiklopedis dari sejarah kalkulus lihat Sejarah Lambda-kalkulus dan Logika Combinatory oleh Cardone dan Hindley .λ
sumber
sumber
sumber
Pertanyaan Anda dapat didekati dari berbagai sisi. Saya ingin meninggalkan aspek historis dan filosofis di samping dan menjawab pertanyaan utama Anda, yang saya anggap sebagai ini:
Apa gunanya Aljabar Boolean, atau Aljabar Relasional, atau Logika Orde Pertama, atau Tipe Teori, atau teori / formalisme matematika lainnya? Jawabannya adalah bahwa mereka tidak memiliki tujuan yang melekat pada mereka, bahkan jika desainer mereka menciptakannya untuk tujuan tertentu. Leibniz, ketika mendirikan fondasi Aljabar Boolean, memiliki proyek filosofis tertentu dalam pikirannya; Boole mempelajarinya karena alasannya sendiri. Karya de Morgan tentang Relational Algebra juga dimotivasi oleh berbagai proyeknya; Peirce dan Frege memiliki motivasi sendiri untuk menciptakan logika modern.
Intinya adalah: apa pun alasan yang dimiliki Gereja ketika membuat kalkulus lambda, titik kalkulus lambda bervariasi dari satu praktisi ke praktisi lainnya.
Untuk seseorang itu adalah notasi yang nyaman untuk berbicara tentang perhitungan; alternatif untuk Mesin Turing, dan sebagainya.
Bagi yang lain, ini adalah dasar matematika yang kuat untuk membangun bahasa pemrograman yang lebih canggih (mis. McCarthy, Stanley).
Bagi orang ketiga, ini adalah alat yang ketat untuk memberikan semantik bahasa pemrograman serta alami (misalnya Montague, Fitch, Kratzer).
Saya pikir kalkulus Lambda adalah bahasa formal yang layak dipelajari untuk kepentingannya sendiri. Anda dapat mempelajari fakta bahwa dalam kalkulus lambda yang tidak diketik, kita memiliki binatang kecil bernama 'Y-combinators', dan bagaimana mereka membantu kita mendefinisikan fungsi rekursif dan membuat bukti ketidakjelasan sangat elegan dan sederhana. Anda dapat mempelajari fakta menakjubkan bahwa ada korespondensi intim antara kalkulus lambda yang diketik sederhana dan sejenis logika intuitionistic . Ada banyak topik menarik lainnya untuk dijelajahi (misalnya bagaimana kita harus memberikan semantik kalkulus lambda? Bagaimana kita dapat mengubah kalkulus lambda menjadi sistem deduktif seperti FOL?)
Lihat Pengantar Hindley & Seldin untuk Combinators dan λ – Calculus untuk pengantar. Barendregt, The Lambda Calculus, adalah Alkitab, jadi jika Anda tertarik dengan Hindley & Seldin, ada banyak topik yang bersifat semantik dan sintaksis untuk dijelajahi.
sumber
Turing berpendapat bahwa Matematika dapat direduksi menjadi kombinasi simbol baca / tulis, dipilih dari himpunan terbatas, dan beralih di antara sejumlah 'kondisi' mental yang terbatas. Dia menegaskan ini di Mesin Turing, di mana simbol direkam dalam sel pada kaset dan robot melacak negara.
Namun, mesin Turing bukan merupakan bukti konstruktif dari pengurangan ini. Dia berpendapat bahwa 'prosedur efektif' apa pun dapat diterapkan oleh beberapa Mesin Turing, dan menunjukkan bahwa Mesin Universal Turing dapat menerapkan semua mesin lain itu, tetapi dia tidak benar-benar memberikan satu set simbol, status, dan memperbarui aturan yang menerapkan Matematika. dengan cara yang dia berargumen. Dengan kata lain, dia tidak mengusulkan 'Mesin Turing standar', dengan seperangkat simbol standar yang dapat kita gunakan untuk menuliskan Matematika kita.
Sebaliknya, Lambda Calculus adalah persis seperti itu. Gereja secara khusus berusaha menyatukan notasi yang digunakan untuk menuliskan Matematika kita. Setelah ditunjukkan bahwa LC dan TM setara, kita dapat menggunakan LC sebagai 'Mesin Turing standar' kami dan semua orang akan dapat membaca program kami (well, dalam teori;)).
Sekarang, kita bisa bertanya mengapa memperlakukan LC sebagai primitif, bukan sebagai dialek TM? Jawabannya adalah bahwa semantik LC adalah denotasional : Istilah LC memiliki makna 'intrinsik'. Ada angka Gereja, ada fungsi untuk penambahan, perkalian, rekursi, dll. Ini membuat LC sangat selaras dengan bagaimana (formal) Matematika dipraktikkan, itulah sebabnya mengapa banyak (fungsional) algoritma masih disajikan langsung dalam LC.
Di sisi lain, semantik program TM bersifat operasional : artinya didefinisikan sebagai perilaku mesin. Dalam hal ini, kita tidak dapat memotong beberapa bagian rekaman dan mengatakan "ini adalah tambahan", karena itu tergantung konteks. Perilaku mesin, ketika menyentuh bagian pita itu, tergantung pada kondisi mesin, panjang / offset / dll. dari argumen, berapa banyak kaset yang akan digunakan untuk hasilnya, apakah ada operasi sebelumnya telah merusak bagian rekaman itu, dll. Ini adalah cara kerja yang menghebohkan ("Tidak ada yang mau memprogram Mesin Turing"), itulah sebabnya mengapa banyak algoritma (imperatif) disajikan sebagai pseudocode.
sumber
jawaban lain baik, berikut adalah satu sudut / alasan tambahan untuk pertimbangan yang menyatu dengan yang lain namun mungkin lebih definitif, namun mungkin lebih sulit untuk diingat dengan jelas karena asal-usul lama hilang sedikit di pasir waktu:
prioritas sejarah!
Kalkulus Lambda diperkenalkan setidaknya pada awal 1932 dalam referensi berikut:
yang Turing Machine diperkenalkan pada ~ 1936 , sehingga Lambda Kalkulus mendahului penampilan TM dengan beberapa tahun!
jadi dengan kata lain jawaban dasar adalah bahwa Lambda Calculus dalam banyak hal merupakan sistem warisan tertinggi TCS. masih ada dalam banyak cara yang sama bahwa Cobol meskipun tidak banyak perkembangan baru dalam bahasa! tampaknya merupakan sistem perhitungan Turing Lengkap paling awal yang diperkenalkan dan bahkan mendahului gagasan dasar Turing Completeness. hanya analisis retrospektif kemudian yang menunjukkan bahwa Lambda Calculus, mesin Turing, dan Post Correspondence Problem adalah setara dan memperkenalkan konsep kesetaraan Turing dan tesis Church-Turing .
Kalkulus Lambda hanyalah cara untuk mempelajari perhitungan dari pov logika-sentris lebih dalam hal merepresentasikannya sebagai teorema matematika & derivasi rumus logis dan sebagainya. itu juga menunjukkan hubungan yang mendalam antara komputasi dan rekursi dan penggabungan yang lebih erat dengan induksi matematika .
ini adalah fakta yang agak luar biasa karena ini menunjukkan bahwa dalam banyak hal asal (setidaknya teoretis ) komputasi secara fundamental dalam logika / matematika , tesis maju / diperluas secara terperinci oleh Davis dalam bukunya Engines of Logic / Mathematicians dan asal-usul komputer . (tentu saja asal-usul & peran dasar aljabar Boolean juga semakin memperkuat kerangka historis konseptual itu.)
karenanya, secara dramatis, orang mungkin bahkan mengatakan kalkulus Lambda sedikit seperti mesin waktu pedagogis untuk menjelajahi asal mula komputasi!
sumber
Saya baru saja menemukan posting ini dan meskipun posting saya agak terlambat pada hari (tahun!), Saya berpikir bahwa mungkin "nilai sen" saya mungkin berguna.
Sementara mempelajari subjek di universitas, saya memiliki pemikiran yang sama tentang masalah ini; jadi, saya mengajukan pertanyaan "mengapa" kepada dosen dan jawabannya adalah: "penyusun". Segera setelah dia menyebutkannya, kekuatan di balik reduksi dan seni menilai cara terbaik untuk memanipulasinya tiba-tiba menjadikan seluruh tujuan mengapa hal itu dan masih merupakan alat yang berpotensi bermanfaat.
Nah, itu bisa dikatakan adalah momen "aha" saya.
Menurut pendapat saya, kita sering menganggap bahasa tingkat tinggi, pola, automata, algoritma-kompleksitas dll berguna karena kita dapat menghubungkannya dengan 'tugas' yang ada; sedangkan lamdba calculus tampaknya agak terlalu abstrak. Namun, masih ada orang-orang di luar sana yang bekerja dengan bahasa pada tingkat rendah - dan saya membayangkan lambda kalkulus, kalkulus objek, dan formalisasi terkait lainnya telah membantu mereka untuk memahami dan mungkin mengembangkan teori dan teknologi baru yang dapat dimanfaatkan oleh programmer rata-rata. Memang, itu mungkin bukan modul inti untuk alasan itu, tetapi (untuk alasan yang telah saya nyatakan) akan ada beberapa yang aneh - selain akademisi - yang mungkin menemukannya integral dengan jalur karir yang mereka pilih dalam komputasi.
sumber