Mengapa karya Schönfinkel tentang menghilangkan "variabel terikat" dalam logika sangat penting?


15

AFAIK, Bukti pertama tentang penggunaan fungsi-fungsi tingkat tinggi kembali ke makalah Schönfinkel 1924: "Pada Blok Bangunan Logika Matematika" - di mana ia mengizinkan seseorang untuk melewatkan fungsi sebagai argumen ke fungsi lain.

Itu sepertinya menarik. Namun, semua yang telah saya baca tentang karyanya (dan Curry dengan ekstensi) tampaknya menyinggung satu hal dalam beberapa bentuk atau yang lain: [fungsi urutan yang lebih tinggi] ... ini menghilangkan kebutuhan untuk variabel terikat ...

Apa yang saya belum bisa membungkus kepala saya adalah - apa masalahnya? Mengapa ahli logika dan ahli matematika waktu itu peduli akan hal ini? Dan apakah kita sebagai ahli teori, peduli akan hal ini hari ini? Mengapa "terobosan" untuk menyingkirkan variabel terikat dan apa dampaknya terhadap komputasi (secara teoritis) seperti yang kita ketahui?

PS: Saya sadar bagaimana karyanya membuka jalan bagi -kalkulus dan dampak "itu" pada komputasi dan pemrograman fungsional secara umum. Pertanyaan saya sebagian besar diarahkan ke waktu "sebelum" untuk penciptaan λ -kalkus dan "setelah" makalah Schönfinkel. Fakta bahwa Curry secara mandiri mengambil garis pekerjaan itu, yang kemudian dikenal sebagai "logika kombinatori" juga menyinggung pentingnya karya Schönfinkel.λλ


2
Makalah Schönfinkel dapat ditemukan di sini .
Martin Berger

Jawaban:


17

TL; DR. Metamathemik dari pengikatannya halus : tampaknya sepele tetapi tidak - apakah Anda berurusan dengan logika (tingkat tinggi) atau 𝜆-kalkulus. Mereka sangat halus sehingga representasi yang mengikat membentuk bidang penelitian terbuka, dengan kompetisi ( tantangan POPLmark ) beberapa tahun yang lalu. Bahkan ada lelucon oleh orang-orang di lapangan tentang kompleksitas pendekatan untuk mengikat.

Jadi, jika Anda peduli dengan metamathematics (dan sebagian besar matematikawan tidak), Anda harus berurusan dengan penjilidan. Tetapi banyak ahli matematika dapat dengan aman memperlakukan formalisasi pengikatan seolah-olah itu merupakan masalah "mendasar".

Poin lain adalah bahwa pengikatan adalah satu-satunya masalah "baru" dalam bahasa dengan fungsi tingkat tinggi, karena teori bahasa dengan pengikatan hanyalah aljabar (untuk konstanta) + pengikatan. "Yayasan Bahasa Pemrograman" Mitchell sebenarnya menyajikan hal-hal dalam urutan ini dan agak mencerahkan.

Saya sadar bagaimana karyanya membuka jalan bagi λ-calculus dan dampak "itu" pada komputasi dan pemrograman fungsional secara umum. Pertanyaan saya sebagian besar diarahkan ke waktu "sebelum" untuk penciptaan λ-kalkulus dan "setelah" makalah Schönfinkel.

Saya pasti melewatkan sesuatu, tetapi komentar ini sepertinya tidak ada bedanya. Mengikat logika tingkat tinggi dan mengikat λ-kalkulus tampak sulit, sehingga selama orang-orang peduli dengan logika tingkat tinggi, mereka harus berurusan dengan penjilidan. Saya bias dengan menggunakan proversor teorema berbasis Curry-Howard-isomorphism yang mengimplementasikan logika dengan hanya menerapkan teori tipe (di mana tipe adalah rumus dan program adalah istilah bukti), sehingga saya hanya berurusan dengan pengikatan satu kali.

Di sisi lain, IIRC, pada saat itu memang sedikit yang peduli dengan karya Schönfinkel - sebagian karena bagaimana ia (tidak) menerbitkannya - makalah-makalah itu sebagian besar ditulis oleh rekan-rekannya berdasarkan penelitian yang dilakukannya (lihat di sini , halaman 4) ; Curry kemudian menemukan kembali teorinya secara independen.

Peringatan: Saya bukan seorang sejarawan, tetapi seorang mahasiswa PhD di PL, jadi milik saya adalah perspektif modern (dan mudah-mudahan akurat) tentang topik tersebut.

EDIT:

Mengapa mengikat dengan halus, sedikit lebih konkret

Ada dua sisi untuk itu - pertama, mengimplementasikannya sulit. Kedua, metamathematics adalah matematika manipulasi bukti: manipulasi ini biasanya otomatis, yaitu, ini adalah algoritma - jadi pada dasarnya, Anda menghadapi semua kesulitan implementasi, ditambah membuat bukti tentang mereka. Di bawah ini saya berikan contoh. Contoh-contoh tersebut memiliki perspektif modern - mereka adalah tentang bukti yang benar-benar diformalkan. Namun, beberapa kesulitan akan meluas ke bukti manual yang akurat - selama Anda tidak menipu pada detail.

Ini menunjukkan bahwa Schönfinkel hanya memberikan solusi pertama untuk masalah ini, tetapi ini masih jauh dari definitif.

Menerapkannya halus karena membayangi

(λf.f 1+f 2)(λx.x)(λx.x) 1+(λx.x) 2 memberi Anda ( λ g y . g y ) ( λ g y . g y ) z dan kemudian ( λ y . ( λ g y . g y ) y ) z : sekarang Anda harus berurusan dengan membayangi. Anda dapat menghindari ini, dengan mengorbankan aturan pengurangan beta.(λfx.f(fx)) (λgy.g y) z(λgy.g y) (λgy.g y) z(λy.(λgy.g y) y)  z

λxy.xyλy.yλy.y

Yang lebih buruk adalah bahwa kontra-contoh untuk algoritma naif sulit untuk dibangun ketika Anda sudah tahu masalahnya, apalagi ketika Anda tidak. Bug dalam algoritma yang hampir benar seringkali tidak terdeteksi selama bertahun-tahun. Saya mendengar bahwa bahkan siswa yang baik biasanya gagal untuk muncul (sendiri) dengan definisi yang benar dari substitusi yang menghindari penangkapan. Sebenarnya, mahasiswa PhD (termasuk saya) dan profesor tidak dibebaskan dari masalah ini.

Itulah salah satu alasan mengapa beberapa (termasuk salah satu buku teks terbaik tentang bahasa pemrograman, Jenis dan Bahasa Pemrograman oleh Benjamin Pierce) merekomendasikan representasi tanpa nama (bukan logika kombinasi, meskipun telah digunakan, tetapi lebih tepatnya indeks deBrujin).

Bukti tentang hal itu halus

Ternyata bukti tentang ikatan tidak lebih sederhana dari implementasinya, seperti yang disebutkan di atas. Tentu saja, ada algoritma yang benar, dan bukti tentang mereka ada - tetapi tanpa mesin canggih, untuk setiap bahasa menggunakan penjilidan Anda perlu mengulangi bukti, dan bukti itu sangat besar dan menjengkelkan jika Anda menggunakan definisi untuk mengikat pada pena dan kertas .

BSEBUAHSEBUAHBB

Selanjutnya, saya mencari contoh terbaik saya "apa yang salah jika Anda mencoba memformalkan definisi standar". Russell O'Connor (yang ada di situs ini) memformalkan teorema ketidaklengkapan Gödel pertama dalam Coq (sebuah pembuktian teorema dari jenis yang disebutkan di atas) - dan teorema tersebut melibatkan logika (dengan semua algoritma yang relevan) dalam logika lain (dengan sintaksis dari logika pertama dikodekan sebagai angka). Dia menggunakan definisi yang digunakan di atas kertas dan memformalkannya secara langsung. Cari "substitusi" atau "variabel" dan hitung seberapa sering mereka muncul sehubungan dengan masalah untuk mendapatkan kesan. http://r6.ca/Goedel/goedel1.html

Saya tidak pernah menggunakan definisi itu dalam pekerjaan saya, tetapi setiap pendekatan alternatif memiliki beberapa kelemahan.


Saya bias menggunakan proversor teorema berbasis Curry-Howard-isomorphism, jadi saya hanya berurusan dengan penjilidan sekali - Bisakah Anda jelaskan apa yang Anda maksud?
PhD

3
Anda bilang itu halus tetapi tidak pernah mengatakan apa sebenarnya yang membuatnya begitu dan mengapa peduli tentang itu jika Anda seorang metamathetician? Itulah perspektif yang saya cari.
PhD

Pada komentar pertama Anda: Saya membuat eksplisit koneksi ke Curry-Howard, tetapi saya harus merujuk Anda ke Wikipedia atau pertanyaan lain. Saya setuju dengan komentar kedua Anda; Saya akan menguraikan untuk orang-orang yang tidak terbiasa dengan kalkulus lambda.
Blaisorblade

@ Phd: Saya harap apa yang saya tambahkan sedikit membantu, meskipun itu tidak menggantikan kuliah yang baik tentang materi ini (dan sayangnya, materi yang saya potong biasanya didistribusikan di antara banyak materi terkait PPL lainnya).
Blaisorblade

1
Terima kasih banyak! Itu memang membantu. Tautan ini mungkin menarik bagi Anda juga: home.uchicago.edu/~wwtx/Varfreelogic_revised.pdf - Logika urutan pertama tanpa variabel terikat.
PhD
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.