Saya telah membaca selama beberapa minggu tentang Kalkulus Lambda, tetapi saya belum melihat sesuatu yang secara material berbeda dari fungsi matematika yang ada, dan saya ingin tahu apakah itu hanya masalah notasi, atau apakah ada yang baru properti atau aturan yang dibuat oleh aksioma kalkulus lambda yang tidak berlaku untuk setiap fungsi matematika. Jadi, misalnya, saya pernah baca itu:
"Mungkin ada fungsi anonim" : Fungsi Lambda bukan anonim, semuanya hanya disebut lambda. Diijinkan dalam notasi matematika untuk menggunakan variabel yang sama untuk fungsi yang berbeda jika namanya tidak penting. Misalnya, dua fungsi dalam Koneksi Galois sering keduanya disebut *.
"Fungsi dapat menerima fungsi sebagai input" : Bukan hal baru yang dapat Anda lakukan dengan fungsi biasa.
"Functions is black box" : Hanya input dan output juga deskripsi yang valid dari fungsi matematika ...
Ini mungkin tampak seperti diskusi atau pertanyaan yang dikemukakan tetapi saya percaya bahwa harus ada jawaban yang "benar" untuk pertanyaan ini. Saya ingin tahu apakah kalkulus lambda hanya notasi, atau konvensi sintaksis untuk bekerja dengan fungsi matematika, atau apakah ada perbedaan substansial atau semantik antara lambda dan fungsi biasa.
Jawaban:
Ironisnya, judulnya ada pada poin tetapi tidak dalam cara Anda tampaknya bersungguh-sungguh yang "adalah kalkulus lambda hanya konvensi notasi" yang tidak akurat.
Istilah Lambda bukan fungsi 1 . Mereka adalah potongan-potongan sintaksis, yaitu koleksi simbol pada halaman. Kami memiliki aturan untuk memanipulasi koleksi simbol ini, yang paling signifikan adalah pengurangan beta. Anda dapat memiliki beberapa berbeda istilah lambda yang sesuai dengan yang sama fungsi. 2
Saya akan membahas poin Anda secara langsung.
Pertama, lambda bukan nama yang digunakan kembali. Tidak hanya itu akan sangat membingungkan, tetapi kita tidak menulisλ ( x ) (atau ( λ x ) ) yang akan kita lakukan jika λ adalah nama untuk suatu fungsi, sama seperti kita menulis f( x ) . Dalam f( x ) kita bisa mengganti f (jika didefinisikan oleh istilah lambda) dengan istilah lambda menghasilkan sesuatu seperti ( λ y. y) ( x ) berarti ( λ y. y) adalah ekspresi yang dapat mewakili suatu fungsi, bukan deklarasi yang mendeklarasikan suatu fungsi (dinamaiλ atau yang lainnya). Bagaimanapun, ketika kita membebani terminologi / notasi, itu (satu harapan) dilakukan dengan cara di mana ia dapat disatukan melalui konteks, yang tentu saja tidak dapat menjadi kasus untuk istilah lambda.
Poin Anda berikutnya baik-baik saja tetapi agak tidak relevan. Ini bukan kompetisi di mana ada Syarat Tim dan Fungsi Tim, dan hanya satu yang bisa menang. Aplikasi utama istilah lambda adalah mempelajari dan memahami beberapa jenis fungsi tertentu. Polinomial bukan fungsi meskipun kita sering mengidentifikasi mereka dengan sembrono. Mempelajari polinomial tidak berarti orang berpikir bahwa semua fungsi harus polinomial, juga bukan berarti polinomial harus "melakukan" sesuatu "baru" agar layak dipelajari.
Mengatur fungsi teoretis bukan kotak hitam, meskipun mereka sepenuhnya ditentukan oleh hubungan input-output mereka. (Mereka benar - benar adalah hubungan input-output mereka.) Istilah Lambda juga bukan kotak hitam dan mereka tidak didefinisikan oleh hubungan input-output mereka. Seperti yang saya sebutkan sebelumnya, Anda dapat memiliki istilah lambda berbeda yang menghasilkan hubungan input-output yang sama. Ini juga menggarisbawahi fakta bahwa istilah lambda tidak dapat berfungsi, meskipun mereka dapat menginduksi fungsi. 2
Ini berlaku untuk istilah lambda juga, kita dapat menafsirkan keduanya sebagai hal selain fungsi. Keduanya juga merupakan objek yang jauh lebih bisa ditelusuri untuk dikerjakan daripada set fungsi yang tak terhitung jumlahnya. Keduanya jauh lebih komputasi daripada fungsi sewenang-wenang. Saya dapat menulis sebuah program untuk memanipulasi polinomial (dengan koefisien yang setidaknya dapat diwakili secara komputabel) dan istilah lambda. Memang, istilah lambda yang tidak diketik adalah salah satu model asli dari fungsi yang dapat dihitung. Perspektif yang lebih simbolis / sintaksis, kalkulasi / komputasional ini biasanya lebih ditekankan, terutama untuk kalkulus lambda yang tidak diketik , daripada interpretasi yang lebih semantik dari kalkulus lambda. Diketikistilah lambda adalah hal-hal yang jauh lebih mudah dikelola dan biasanya (tetapi tidak selalu) dapat dengan mudah diartikan sebagai fungsi teoretis yang ditetapkan, tetapi biasanya juga dapat diartikan ke dalam kelas yang lebih luas dari hal-hal selain fungsi daripada kalkulus lambda yang tidak diketik. Mereka juga memiliki teori sintaksis yang kaya dan hubungan yang sangat mendalam dengan logika .
1 Mungkin masalahnya mungkin terjadi sebaliknya. Mungkin Anda memiliki kesalahpahaman tentang apa fungsi itu.
3 Jika Anda jelas tentang perbedaan ini, maka analoginya harus cukup informatif.
4 Masalah ini tidak terjadi dengan bidang karakteristik 0, seperti bilangan kompleks, real, rasional, atau bilangan bulat, sehingga perbedaannya tidak setajam, meskipun masih ada.
sumber
Pikirkan konsep variabel. Dalam bahasa lama seperti dasar, Anda tidak memiliki alokasi dinamis dan Anda memerlukan satu nama untuk setiap variabel. (Ini tidak sepenuhnya akurat karena Anda memiliki array, tetapi idenya adalah bahwa ...) dalam banyak masalah, Anda harus dapat mengalokasikan variabel sebanyak yang Anda inginkan, tanpa dibatasi oleh jumlah nama yang ditentukan oleh program Anda.
Fungsi Lambda memungkinkan Anda untuk menyingkirkan batasan yang sama tentang nama fungsi, memungkinkan program Anda untuk mendefinisikan sebanyak mungkin fungsi yang dibutuhkan dan "menyimpan" mereka di struktur data kompleks yang sama dengan variabel lainnya. Ini bukan sesuatu yang bisa Anda lakukan dengan fungsi bernama konvensional.
sumber
f(x)=let g(y)=x+y in g
, setiap matematikawan akan langsung tahu apa yang dimaksud dan setuju bahwa ini adalah objek matematika yang masuk akal (mungkin hingga beberapa quibble tentang kejelasan tentang domainf
). Mereka juga akan sangat senang jika saya kemudian menulis set{f(n) | n ∈ ℕ}
, yang berisi banyak sekali fungsi dan khususnya tidak dibatasi dengan hanya memiliki jumlah nama yang terbatas untuk digunakan.