Bagaimana kombinator Y mencontohkan "inkonsistensi Lambda calculus"?

44

Di halaman Wikipedia untuk Fixed Point Combinators tertulis teks yang agak misterius

Penggabung Y adalah contoh dari apa yang membuat kalkulus Lambda tidak konsisten. Jadi harus dianggap dengan kecurigaan. Namun aman untuk mempertimbangkan kombinator Y ketika didefinisikan dalam logika matematika saja.

Sudahkah saya memasuki semacam novel mata-mata? Apa di dunia yang dimaksud dengan pernyataan bahwa kalkulus adalah "tidak konsisten" dan bahwa itu harus "dianggap dengan kecurigaan" ?λ

Ben I.
sumber
3
FWIW, paragraf itu sudah ada di artikel Wikipedia sejak Januari 2014, ketika diperkenalkan dalam penulisan ulang besar-besaran hampir seluruh artikel ini .
Ilmari Karonen

Jawaban:

51

Ini terinspirasi dari peristiwa nyata, tetapi cara itu dinyatakan hampir tidak dikenali dan "harus dianggap dengan kecurigaan" adalah omong kosong.

Konsistensi memiliki makna yang tepat dalam logika: teori yang konsisten adalah teori di mana tidak semua pernyataan dapat dibuktikan. Dalam logika klasik, ini setara dengan tidak adanya kontradiksi, teori yaitu tidak konsisten jika dan hanya jika ada pernyataan sehingga teori membuktikan kedua A dan negasinya ¬ A .AA¬A

Jadi apa artinya ini tentang kalkulus lambda? Tidak ada. Kalkulus lambda adalah sistem penulisan ulang, bukan teori logis.

Dimungkinkan untuk melihat kalkulus lambda dalam kaitannya dengan logika. Menganggap variabel mewakili hipotesis dalam sebuah bukti, abstraksi lambda sebagai bukti di bawah hipotesis tertentu (diwakili oleh variabel), dan aplikasi sebagai menyusun bukti kondisional dan bukti hipotesis. Kemudian aturan beta terkait dengan penyederhanaan bukti dengan menerapkan modus ponens , prinsip dasar logika.

n=3n=2

The Curry-Howard korespondensi adalah paralel antara diketik bate dan sistem bukti.

  • jenis sesuai dengan pernyataan logis;
  • istilah sesuai dengan bukti;
  • tipe yang dihuni (yaitu tipe sedemikian sehingga ada istilah jenis itu) sesuai dengan pernyataan benar (yaitu pernyataan sedemikian sehingga ada bukti pernyataan itu);
  • evaluasi program (yaitu aturan seperti beta) sesuai dengan transformasi bukti (yang lebih baik mengubah bukti yang benar menjadi bukti yang benar).

YY(λx.x)

Ini tidak berarti untuk kalkulus lambda murni, yaitu untuk kalkulus lambda tanpa jenis.

Di banyak kalki yang diketik, tidak mungkin untuk mendefinisikan kombinator titik tetap. Kalkuli yang diketik itu berguna sehubungan dengan interpretasi logis mereka, tetapi bukan sebagai dasar untuk bahasa pemrograman Turing-lengkap. Di beberapa kalki yang diketik, dimungkinkan untuk menentukan kombinator titik tetap. Kalkuli yang diketik tersebut berguna sebagai dasar untuk bahasa pemrograman Turing-lengkap, tetapi tidak sehubungan dengan interpretasi logis mereka.

Kesimpulannya:

  • Kalkulus lambda tidak "tidak konsisten", konsep itu tidak berlaku.
  • Sebuah diketik lambda kalkulus yang ditunjuk jenis untuk setiap jangka lambda tidak konsisten. Beberapa kalkulus lambda yang diketik adalah seperti itu, yang lain membuat beberapa istilah tidak dapat diketik dan konsisten.
  • Kalkulus lambda yang diketik bukan satu-satunya raison d'etre untuk kalkulus lambda, dan kalkulus lambda yang diketik tidak konsisten adalah alat yang sangat berguna - hanya saja tidak untuk membuktikan sesuatu.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Wow, ada banyak hal yang harus saya bongkar di sini. Terima kasih untuk penjelasan rinci. Saya perlu waktu untuk mencoba semuanya.
Ben I.
4
Secara teknis, melihat diketikan sebagai un i diketik, Anda dapat membuat korespondensi CH antara kalkulus lambda diketikan dan logika. Itu hanya logika yang sangat, sangat membosankan (dan tentu saja tidak konsisten). Asisten pembuktian seperti NuPRL sedikit memperkeruh perairan. Bahasa objek NuPRL berisi kalkulus lambda yang tidak diketik, dan Anda dapat dengan mudah mendefinisikan kombinator Y. NuPRL membagi hal-hal sedikit berbeda sehingga memiliki sistem penyempurnaan tipe daripada sistem tipe, dan latihan ini bukan untuk menghasilkan istilah yang diketik dengan baik tetapi untuk menghasilkan turunan pengetikan.
Derek Elkins
Apakah hanya saya, atau apakah aneh untuk memaksakan paradigma "proposisi sebagai tipe" pada kalkulus lambda yang tidak diketik? Saya selalu melihat orang-orang berbicara tentang logika dalam kalkulus lambda yang tidak diketik dengan memperkenalkan objek spesifik sebagai nilai boolean truedan false, dan proposisi adalah hal-hal yang memiliki output bernilai boolean. (dan hanya dianggap proposisi pada domain hal mana tidak output nilai boolean).
Sepele (membuktikan setiap pernyataan) dan mengandung kontradiksi adalah dua sifat yang berbeda. Sementara mereka setara dalam logika klasik, untuk logika paraconsistent suatu sistem dapat tidak konsisten dan non-sepele.
Taemyr
1
"Tidak konsisten", untuk logika berbasis kalkulus λ, berarti "menetapkan setiap jenis ke beberapa istilah", bukan "menetapkan jenis untuk setiap istilah" (meskipun yang pertama mengikuti dari yang terakhir); ada banyak bahasa berbasis kalkulus λ yang sesuai dengan logika tidak konsisten tetapi di mana tidak setiap istilah kalkulus λ dapat diketik.
Jonathan Cast
6

Saya ingin menambahkan satu ke apa yang dikatakan @Giles.

λλ

λx.λy.xa(ba)ababa(ba)λx.λy.xy(ab)(ab)(ab)(ab)

λf.(λx.f(xx))(λx.f(xx))(aa)a(aa)a

(aa)aaa(¬a¬a)(¬a)¬a¬a

(aa)a

  • (aa)aλ
  • Hidup dengan sistem tipe yang tidak konsisten sebagai sistem deduksi logis.
Ejaan nonkontekstual
sumber
1
a,b.aba.(aa)a
Derek Elkins
@DerekElkins, istilah primitif seperti apa? Juga, jika saya mengerti dengan benar, ini hanya untuk mengasumsikan (a -> a) -> a selalu dihuni yang menghasilkan ketidakkonsistenan? Jadi tidak ada lagi ketidakkonsistenan dengan bahasa pemrograman yang membutuhkan bukti terminasi? Atau adakah sumber ketidakkonsistenan lain dalam kalkulus lambda yang tidak diketik atau yang diketik oleh Hindley-Milner?
Hibou57
1
fixfixAAfix(λx.x)δfix
Derek Elkins