Fungsi apa yang tidak dapat dihitung oleh Sistem F?

28

Dalam artikel wikipedia ini tentang Turing Completeness disebutkan bahwa:

Kalkulus lambda yang tidak diketik adalah Turing lengkap, tetapi banyak kalkulus lambda yang diketik, termasuk Sistem F, tidak. Nilai dari sistem yang diketik didasarkan pada kemampuan mereka untuk mewakili sebagian besar program komputer sambil mendeteksi lebih banyak kesalahan.

Apa contoh dari total fungsi komputasi yang tidak dapat dihitung oleh sistem F ?

Selain itu, karena hindley-milner adalah:

Pembatasan Sistem F

karena kenyataan bahwa:

pengecekan tipe tidak dapat ditentukan untuk varian Curry-style dari Sistem F, yaitu, yang tidak memiliki anotasi pengetikan yang eksplisit.

Apakah ini berarti bahwa kalkulus lambda yang mendasari sistem tipe hindley-milner tidak lengkap juga?

Jika ini benar, karena haskell jelas turing lengkap dan kita tahu bahwa dasarnya adalah kalkulus lambda dan sistem tipe hindley-milner, fitur apa yang tidak ada dalam kalkulus lambda ditambahkan untuk membuat haskell turing lengkap?

Mike HR
sumber
Contoh fitur yang membuat Haskell turing lengkap adalah antarmuka kode asli.
Trismegistos
@cody terima kasih atas komentar Anda. Saya tidak terbiasa dengan sistem T. Apakah saya benar dengan menganggap itu adalah sistem T yang disebutkan di sini ? bagaimana sistem T membandingkan dan kontras dengan sistem F?
Mike HR
CATATAN, pada googling untuk system T vs. system Fsaya menemukan sesuatu yang menjawab pertanyaan terakhir saya yang diulang di sini sebagai: Bagaimana cara haskell menambahkan Turing-kelengkapan untuk Sistem F
Mike HR
1
Saya pikir @Trismegistos mengangkat masalah filosofis yang menarik: apa sebenarnya Haskell, di mana batasannya?
Martin Berger

Jawaban:

45

FNNNX. X(XX)XNNHA2

TFeval:NNtFt. Buktinya melibatkan varian dari trik diagonalisasi yang digunakan untuk keraguan masalah penghentian. Andrej menjelaskannya dengan indah di sini .

λF λ

YY

Perhatikan ada fitur lain yang membuat Haskell Turing lengkap, tetapi mereka biasanya tidak dianggap sebagai bagian dari bahasa inti, misalnya referensi ke fungsi, tipe data tidak terbatas, dll.

cody
sumber
1
Wow, ini adalah jawaban yang luar biasa dan menjawab semuanya dengan sempurna. Terima kasih!
Mike HR
"Adapun bahasa pemrograman total ..." Ini tidak sepenuhnya benar. Ada beberapa penerjemah mandiri untuk bahasa total yang berfungsi dengan mengecualikan program yang tidak berhenti sebagai salah ketik, menurut pemahaman saya. Lihat tulisan ini
jmite
@iteite seperti yang dinyatakan, klaim saya benar. Makalah itu disebutkan dalam diskusi terkait, dan Andrej memiliki beberapa tindak lanjut komentar di blognya: math.andrej.com/2016/01/04/...
cody
11

Agak keliru untuk mengatakan bahwa sistem pengetikan Haskell adalah "sistem tipe hinley-milner". Tipe-tipe Haskell jauh lebih kuat, termasuk, di antaranya, tipe-tipe yang lebih tinggi. Memang sistem pengetikan sangat kuat sehingga Anda dapat menanamkan bahasa pemrograman Turing-lengkap dalam sistem pengetikan, lihat di sini . Ini bukan satu-satunya alasan kekuatan Haskell, Cody telah menyebutkan beberapa yang lain.

Martin Berger
sumber
Terima kasih. paparan utama saya ke hindley-milner telah melalui haskell jadi saya kira saya mungkin berasumsi bahwa tipe yang lebih tinggi adalah bagian darinya. Apakah hindley-milner hanya merujuk pada inferensi tipe (jadi kemungkinan besar algoritma W)? atau itu sesuatu yang lebih? Saya mengerti bahwa ada dasar matematis dalam kalkulus lambda, saya hanya mencoba untuk memahami di mana batas logis antara sistem tipe haskell yang kuat dan implementasi minimal dari "sistem tipe hindley-milner" nantinya.
Mike HR
NB Jika ada yang tertarik pada kekuatan sistem tipe haskell , saya akan merekomendasikan video Edward Kmett pada hask , yang menggali (dalam) teori kategori menggunakan sistem tipe haskell.
Mike HR
1
λW