Permintaan referensi: Teori kategori yang berlaku untuk sistem ketik

13

Saya terus mendengar tentang bagaimana seseorang harus belajar teori kategori untuk benar-benar memahami teori bahasa pemrograman. Sejauh ini, saya telah belajar banyak PL tanpa pernah melangkah ke bidang kategori. Namun, saya pikir sudah waktunya untuk melakukan lompatan untuk melihat apa yang telah saya lewatkan.

Sayangnya, tidak ada sumber yang bisa saya temukan yang membuat koneksi untuk mengetik sistem atau pemrograman. Mereka mengatakan itu adalah pengantar teori kategori untuk ilmuwan komputer, tetapi kemudian beralih ke omong kosong abstrak umum (saya katakan ini dengan penuh kasih) tanpa memberikan contoh atau aplikasi praktis.

Saya kira pertanyaan saya sebenarnya dua kali lipat:

  1. Apakah teori kategori penting untuk memahami "konsep mendalam" dalam PL?
  2. Apa sumber yang menjelaskan teori kategori dari sudut pandang aplikasi praktis untuk mengetik sistem dan pemrograman?

Sejauh ini, yang terjauh yang saya dapatkan adalah konsepsi kabur dari functors (yang tampaknya tidak terkait dengan functors di ML, sejauh yang saya tahu). Saya takut abstraksi yang harus saya ingat untuk memahami monad dari sudut pandang kategori-teoretis.

kepala kebun
sumber
2
@ Raphael Adalah ide yang buruk untuk mengajukan pertanyaan yang terdiri dari dua pertanyaan berbeda yang hanya saling berkaitan secara samar. Tetapi pertanyaan 1. tidak subyektif. Ini lebih merupakan permintaan untuk klarifikasi dan penjelasan. Saya kira pertanyaan 2. dimaksudkan dalam arti bahwa dia senang dengan referensi ke tempat di mana dijelaskan bukan penjelasan yang sebenarnya juga.
Thomas Klimpel
2
Di masa depan, lebih baik mengajukan satu pertanyaan per posting. Anda dapat mengajukan pertanyaan 1, lalu bergantung pada jawaban yang Anda dapatkan, memutuskan apakah akan mengajukan pertanyaan 2 secara terpisah. Itu sering membuat segalanya berjalan lebih lancar.
DW
1
@ Raphael Bagaimana pertanyaan satu subjektif? Mungkin sulit untuk menilai - apakah itu yang Anda maksud? Dan itu mungkin sebagai jawaban "Itu tergantung pada orang seperti apa Anda." - Apakah itu yang Anda maksud? Ini masih mungkin berubah bahwa itu adalah pasti penting atau pasti tidak penting, kan? (Dan orang-orang tampaknya setuju bahwa itu tidak penting.)
k.stm
1
@ k.stm Bentuk umum dari pertanyaan itu membuat saya khawatir. Jika seseorang bertanya, "Apakah aljabar penting untuk memahami konsep mendalam bahasa formal?", Saya tahu pasti bahwa orang yang berbeda akan memberikan jawaban yang berbeda - berdasarkan preferensi dan selera mereka. Saya tidak berharap itu berbeda di sini.
Raphael
1
@ Raphael Oke, saya mengerti. Tetapi saya pikir itu adalah orang yang memberikan jawaban subyektif untuk pertanyaan objektif. (Terasa seperti orang-orang berkata, “Oh, saya minum lima gelas sehari dan saya merasa sehat!” Ketika ditanya apakah kopi sehat atau tidak.)
k.stm

Jawaban:

15

Teori kategori tidak perlu untuk memahami bahasa pemrograman, bahkan tidak perlu melakukan penelitian lanjutan pada bahasa pemrograman. Kebanyakan orang bahasa pemrograman tidak tahu banyak tentang teori kategori.

Kategori metode teoritis telah berguna sebagian besar dalam sebagian kecil penelitian bahasa pemrograman, yaitu dalam analisis pemrograman fungsional, khususnya, sejak penemuan besar Moggi bahwa beberapa efek komputasi memiliki struktur monadik. Pada 1990-an, setelah terobosan Moggi, banyak penelitian dilakukan untuk memperluas metode kategorikal ke bentuk lain dari bahasa pemrograman. Namun, sejauh yang saya ketahui, metode kategorikal belum menemukan semua yang berguna untuk OO, perhitungan konkuren, paralel, dan terdistribusi, perhitungan waktunya atau kompiler. Karena alasan ini, orang-orang sebagian besar telah meninggalkan memperluas metode kategorikal.

Pendekatan kategoris pada pemrograman mengetik bekerja dengan baik dalam fungsi murni. Memang beberapa sistem pengetikan sederhana adalah kategori. Ini dijelaskan dalam misalnya

Sekarang ada banyak pekerjaan pada jenis untuk proses bersamaan (misalnya jenis sesi) dan tidak ada yang bersifat kategoris pada September 2016.

Yang mengatakan, orang tidak akan pernah tahu terlalu banyak matematika, dan mengetahui teori kategori berguna. Jadi ini masalah biaya / manfaat. Jika Anda menyukai matematika, jika mungkin Anda memiliki sedikit latar belakang aljabar (mis., Apa yang kelompok bebas lebih dari set, dering gratis dll) maka belajar teori kategori akan mudah, dan jika Anda berencana melakukan pekerjaan yang (terinspirasi oleh) pemrograman fungsional, mengetahui kategori akan bermanfaat.

Akhirnya, teori kategori adalah matematika yang indah, dan layak dipelajari hanya karena sangat rapi.


Lihat kontribusi Uday Reddy dalam diskusi ini untuk pandangan berbeda.

Martin Berger
sumber
"Namun, sejauh pengetahuan saya metode kategorik belum ditemukan semua yang berguna untuk ..." Itulah masalah saya. Semantik operasional dapat secara akurat menggambarkan semua konsep ini, jadi saya tidak merasa kehilangan. Saya suka matematika, tetapi latar belakang saya dalam aljabar abstrak sayangnya kurang. Saya hanya memahami dasar-dasar telanjang dari struktur aljabar umum. Ini telah membuat teori kategori menggenggam sangat rumit.
Gardenhead
2
@ardenhead Kemudian CT mungkin tidak begitu berguna bagi Anda. Jika Anda ingin membaca banyak makalah di ruang "Pemrograman Fungsional", termasuk bekerja pada jenis, maka banyak dari mereka akan menggunakan bahasa CT sekalipun.
Martin Berger
Apakah ini duplikat?
Raphael
2
Saya juga menyarankan buku cs.unibo.it/ ~asperti/PAPERS/book.pdf "Kategori, Jenis, dan Struktur", yang tampaknya tidak dicetak, tetapi itu adalah tautan ke pdf dari salah satu beranda penulis, jadi saya rasa ini sah.
John Forkosh
6

Teori kategori pembelajaran adalah investasi waktu yang sangat besar, dan pertanyaan apakah layak itu sangat valid. Saya masih berjuang dengan ini juga , dan saya sudah tahu mengapa saya harus mempelajarinya. Saya menulis:

Saya suka bahasa rakitan ketika saya mulai memprogram, dan teori himpunan terasa mirip dengan bahasa rakitan. Teori kategori adalah salah satu alternatif untuk mengatasi semua prasangka berakar tentang logika dan teori model yang tertanam dalam teori himpunan ZFC mainstream.

Idenya di sini adalah menggunakan kategori alih-alih set atau "bit yang tidak ditentukan" sebagai kemungkinan semantik untuk teori tipe tertentu atau bahasa pemrograman. Mengapa orang ingin melakukan ini? Pertimbangkan dualitas antara tindakan dan observasi. Pengamatan yang berbeda (atau setidaknya urutan waktunya) tidak saling mengganggu (di luar mekanika kuantum), tetapi ini tidak selalu benar untuk tindakan yang berbeda. Prasangka berakar tentang logika yang tertanam dalam teori himpunan membuatnya sulit untuk memodelkan tindakan, dibandingkan dengan pengamatan pemodelan.


Saya tidak yakin bahwa benar-benar ada korespondensi yang sempurna antara teori kategori dan teori tipe seperti yang diklaim di sini :

Dengan dualitas sintaksis-semantik seseorang dapat memandang teori tipe sebagai bahasa sintaksis formal atau kalkulus untuk teori kategori, dan sebaliknya orang mungkin menganggap teori kategori sebagai menyediakan semantik untuk teori tipe.

Memang benar bahwa teori kategori dapat memberikan semantik untuk teori jenis (yang dapat sangat berguna), tetapi saya ragu bahwa teori jenis benar-benar memberikan bahasa sintaksis formal yang cukup kuat untuk mengekspresikan semua perhitungan yang dilakukan dalam teori kategori.


Dalam praktiknya, kegunaan teori kategori dapat muncul dengan menyarankan pertanyaan dan analogi yang bermanfaat. Tetapi teori kategori juga dapat menyarankan kegiatan dan pertanyaan yang pada akhirnya berubah menjadi gangguan (buang-buang waktu) dari masalah yang sangat penting. Dan Anda tentu bisa belajar logika dan mengetik teori tanpa peduli tentang teori kategori.

Thomas Klimpel
sumber
Terima kasih atas pemikiran anda Alasan Anda untuk belajar teori kategori tampaknya berbeda dari saya; Anda tertarik berasal dari perspektif matematika murni, sementara saya ingin memperluas pemahaman saya tentang tipe. Namun, senang mengetahui bahwa orang lain membuat saya kesulitan menemukan kategori yang sulit untuk didekati dan diterapkan
gardenhead