Dapatkah Elementary Affine Logic digunakan sebagai sistem tipe inti dari bahasa pemrograman praktis?

9

Elementary Affine Logic adalah sistem tipe yang menangkap kelas istilah-λ yang dapat dikurangi dalam waktu dasar. Selain itu, istilah EAL-typeable dapat dikurangi menggunakan fragmen abstrak dari algoritma Lamping, yang sangat menarik bagi saya karena saya sedang mengeksplorasi kombinator interaksi yang sesuai.

Pertanyaan saya adalah, bagaimana seseorang dapat membuat bahasa pemrograman praktis menggunakan EAL sebagai sistem tipe yang mendasarinya? Yaitu, ekstensi seperti apa (titik perbaikan, polimorfisme, tipe dependen, tipe data, dll.) Dapat dibuat ke sistem tipe inti tanpa mempengaruhi karakteristik itu, dan apakah bahasa seperti itu dapat digunakan dalam praktiknya, atau apakah itu akan menjadi terlalu restriktif karena alasan yang tidak saya sadari?

Viktor Maia
sumber
"Elementary Affine Logic adalah sistem tipe yang menangkap kelas istilah-λ yang dapat dikurangi dalam waktu dasar": ini tidak tepat. Menangkap EAL sebuah ketat subset dari -termsλ yang mewakili fungsi dasar (wrt pengkodean Gereja). Memang benar bahwa semua fungsi dasar ditutupi: untuk setiap fungsi dasar , ada setidaknya satu istilah EAL komputasi f , tetapi biasanya ada ton hal lain yang sesuai dengan algoritma dasar komputasi f yang tidak di EAL. fff
Damiano Mazza
Aduh, benar. Juga, sejauh yang saya mengerti, ada juga istilah yang dapat dikurangi dengan algoritma abstrak, tetapi tidak memiliki tipe EAL, kan? Jadi, sementara semua istilah EAL dapat dikurangi tanpa oracle, masih ada beberapa ketidakcocokan antara algoritma abstrak dan EAL. @DamianoMazza
MaiaVictor
Ya itu benar.
Damiano Mazza
1
"Pokoknya, tidak ada yang melarang kamu untuk mencoba dan melihat apa yang bisa kamu dapatkan!" - 3 tahun kemudian: ya, tidak ada yang melarang saya, jadi saya melakukannya! docs.formality-lang.org . Terima kasih atas semua bantuan Anda :)
MaiaVictor

Jawaban:

10

Sesuatu yang sangat mirip, tetapi menggunakan logika cahaya affine (LAL) bukan EAL, dicoba beberapa tahun yang lalu oleh Baillot, Gaboardi dan Mogbil (Anda dapat menemukan kertas di sini ). Saya pikir pekerjaan mereka dapat dengan mudah digeneralisasikan ke EAL, yang merupakan sistem yang lebih liberal.

Adapun fitur dari bahasa tersebut, Anda memiliki polimorfisme secara native (EAL adalah pembatasan logika linier urutan kedua). Sejauh yang saya tahu, tidak ada yang melihat tipe dependen, tapi saya tidak melihat mengapa mereka tidak bekerja. Faktanya, EAL yang tidak diketik berfungsi seperti halnya EAL yang diketik, karena properti normalnya tidak bergantung pada tipe.

list A:=nil|A  list AforNatNatNat di sini adalah tipe bilangan bulat Gereja).

dbl:NatNatdbl n_=2n_ dblexpitu sendiri akan diulang. Jadi bahasa pemrograman apa pun yang didasarkan pada EAL perlu memiliki semacam mekanisme untuk melarang definisi tertentu dengan iterasi; sulit membayangkan bagaimana pembatasan seperti itu tidak akan menghasilkan bahasa yang terasa canggung bagi programmer. Bagaimanapun, tidak ada yang melarang Anda untuk mencoba dan melihat apa yang bisa Anda dapatkan!

Bagaimanapun, jika Anda tertarik pada hubungan antara evaluasi optimal, EAL dan logika ringan secara umum, saya sarankan Anda melihat makalah Coppola dari awal hingga pertengahan 2000-an.

Damiano Mazza
sumber