Baru-baru ini saya memulai studi saya dalam teori tipe / sistem tipe dan Lambda Calculus.
Saya sudah membaca tentang Kalkulus Ketik Sederhana Diketik dalam gaya Gereja dan Kari. Yang terakhir juga dikenal sebagai Type Assignment system (TA).
Saya berpikir tentang hubungan antara TA dan Hindley-Milner (HM), sistem dalam bahasa seperti ML dan Haskell.
Buku Lambda-Calculus and Combinators: An Introduction (Hindley) mengatakan bahwa TA bersifat polimorfik (hal. 119). Apakah itu sama dengan polimorfisme dalam sistem seperti HM dan System-F?
TA dikatakan memiliki properti normalisasi yang kuat, sehingga tidak sepenuhnya lengkap. Bahasa yang menggunakan sistem HM turing lengkap, Haskell misalnya. Jadi harus menjadi kasus bahwa sistem HM memungkinkan istilah seperti loop infinity untuk menerima suatu tipe Apakah itu benar atau saya melewatkan sesuatu?
Bagaimanapun, saya ingin tahu hubungan antara TA dan HM.
sumber
Jawaban:
Sistem F dan subsistemnya HM memiliki tipe sebelumnya untuk kuantifikasi universal:
yang tidak dimiliki sistem di Hindley / Seldin. Itulah perbedaan utama.
Sekarang Sistem F tidak memiliki tipe-inferensi decidable, dan HM adalah cara menggabungkan inferensi tipe dengan polimorfisme parametrik yang cukup ekspresif. HM mencapai ini dengan hanya memungkinkan kuantifikasi universal terluar, yaitu semua jenis adalah dari bentuk
dimanaτ bebas kuantifier (dan n ≥ 0 ). HM memberikan sistem aturan yang memastikan bahwa hanya program yang dapat diketik dengan cara ini yang dapat diterima. Ini dicapai dengan "biarkan-polimorfisme". Sistem di Hindley / Seldin tidak melakukan semua itu. Kemudian, dalam Bab 13, Hindley / Seldin memperkenalkan sistem tipe murni (PTS), di mana Sistem F adalah kasus khusus. Saya tidak yakin apakah HM dapat dinyatakan sebagai PTS.
Pertanyaan normalisasi yang kuat adalah ortogonal. Sistem F dan HM sangat normal, tetapi itu dapat dengan mudah diperbaiki dengan memperkenalkan kombinator titik-fix atau serupa. Makalah tipe-skema utama untuk program fungsional oleh L. Damas dan R. Milner bahkan menyatakan ini: " Misalnya, rekursi dihilangkan karena dapat diperkenalkan dengan hanya menambahkan operator titik tetap polimorfik ... " Pengenalan fixpoints , membuat sistem Turing lengkap, tidak menimbulkan masalah dari sudut pandang inferensi tipe.
sumber