Apakah ada hierarki ekspresif untuk sistem tipe?

23

Terinspirasi oleh hierarki luas yang hadir dalam teori kompleksitas, saya bertanya-tanya apakah hierarki tersebut juga hadir untuk sistem tipe. Namun, dua contoh yang saya temukan sejauh ini lebih mirip checklist (dengan fitur ortogonal) daripada hierarki (dengan sistem tipe yang lebih banyak dan lebih ekspresif).

Dua contoh yang saya temukan adalah kubus Lambda dan konsep polimorfisme k-rank . Yang pertama adalah daftar periksa dengan tiga opsi, yang kedua adalah hirarki nyata (meskipun k-peringkat untuk nilai-nilai spesifik k tidak umum saya percaya). Semua fitur sistem tipe lain yang saya tahu sebagian besar ortogonal.

Saya tertarik pada konsep-konsep ini karena saya merancang bahasa saya sendiri dan saya sangat ingin tahu bagaimana peringkatnya di antara sistem tipe yang ada saat ini (sistem tipe saya agak tidak konvensional, sejauh yang saya tahu).

Saya menyadari bahwa konsep 'ekspresif' mungkin agak kabur, yang dapat menjelaskan mengapa sistem jenis tampak seperti daftar periksa bagi saya.

Alex ten Brink
sumber
4
Saya yakin perbandingan ekspresif yang keras dan cepat hanya dapat dibuat antara sistem tipe yang lebih teoretis. Jika Anda mendesain bahasa pemrograman lengkap, maka Anda dapat melakukan perbandingan fitur per fitur dengan bahasa / formalisme yang ada. Sayangnya, karena banyak fitur dapat dikodekan dalam hal fitur lain, ini tidak akan menjadi tugas sepele. Jika Anda dapat memiliki tipe semewah milik Scala atau Haskell, maka Anda akan melakukannya dengan baik dalam hal ekspresi.
Dave Clarke
3
Saya benar-benar harus finsih menulis posting blog saya di "Bagaimana membandingkan bahasa pemrograman" ...
Andrej Bauer
@Andrej Bauer: Itu akan menjadi tambahan yang menarik untuk jawaban dan komentar yang sudah ada di sini. Saya sudah belajar cukup banyak tentang bagaimana 'ekspresifitas' dapat didefinisikan - mungkin saya seharusnya bertanya sebaliknya ...
Alex ten Brink
Saya yakin saya melihat polimorfisme peringkat-2 digunakan di beberapa tempat. Salah satu yang saya ingat sekarang adalah Lammel, Peyton-Jones, Scrap Your Boilerplate, 2003.
Radu GRIGore
2
@ Radu GRIGore: Polimorfisme peringkat-2 adalah penting karena memungkinkan argumen tipe muncul dalam posisi ganda-contravarian, yang dengan semacam dualitas biasa memungkinkan pemodelan tipe eksistensial dengan pengkodean Gereja mereka. Peringkat-3 hanya memberikan kuantifikasi universal lagi dan berganti dari sana, jadi ada sedikit kekuatan ekspresif yang ditambahkan sebagai perbandingan.
CA McCann

Jawaban:

22

Ada beberapa indera "ekspresif" yang mungkin Anda inginkan untuk sistem tipe.

  1. F

  2. ABFF

  3. AB

  4. Apakah satu jenis sistem menjamin properti yang lebih kuat daripada yang lain. Misalnya, sistem tipe linear hanya menolak lebih banyak program, tetapi itu memungkinkan mereka membuat pernyataan yang lebih kuat tentang program yang mereka terima.

Sayangnya, saya tidak percaya bahwa ada upaya untuk mengkategorikan atau memformalkan gagasan ini, dengan pengecualian lambda-cube Barendregt, seperti yang dibahas oleh @cody.

Sam Tobin-Hochstadt
sumber
3
Saya kira dengan "makalah ekspresif Felleisen" yang Anda maksud adalah On the Expressive Power of Programming Languages .
Martin Berger
Ya persis. Saya menjelaskan sedikit jawabannya.
Sam Tobin-Hochstadt
13

Saya tidak yakin saya memiliki jawaban yang memuaskan untuk pertanyaan Anda, tetapi jika Anda mempertimbangkan Pure Type Systems, yang merupakan generalisasi dari sistem yang ditemukan dalam kubus lambda (gambaran menyeluruh, jika agak tanggal dapat ditemukan dalam teks Barendregt klasik ) maka ada beberapa konsep alami tentang hierarki:

  1. ΓA t:TΓB t:TΓ,tT:(,,)PTS dalam arti bahwa ada morfisme dari setiap PTS lain untuk itu. Ini dapat dilihat sebagai ukuran dari ekspresifitas sistem tipe, di mana PTS final adalah sistem yang paling ekspresif.

  2. ABAFωECC

cody
sumber