Aplikasi teori kategori yang solid dalam TCS?

103

Saya telah belajar beberapa bit dari teori kategori. Tentunya cara pandang yang berbeda. (Ringkasan yang sangat kasar bagi mereka yang belum melihatnya: teori kategori memberikan cara untuk mengekspresikan semua jenis perilaku matematika hanya dalam hal hubungan fungsional antara objek. Misalnya, hal-hal seperti produk Cartesian dari dua set didefinisikan sepenuhnya dalam hal bagaimana fungsi-fungsi lain berperilaku dengannya, bukan dalam hal elemen apa yang menjadi anggota set.)

Saya memiliki pemahaman yang samar-samar bahwa teori kategori berguna pada bahasa pemrograman / logika ("Teori B"), dan saya bertanya-tanya berapa banyak algoritma dan kompleksitas ("Teori A") yang dapat memperoleh manfaat. Mungkin bisa membantu saya turun, jika saya tahu beberapa aplikasi yang kuat dari teori kategori dalam Teori B. (Saya sudah secara implisit mengasumsikan tidak ada aplikasi dalam Teori A yang ditemukan sejauh ini, tetapi jika Anda memiliki beberapa di antaranya, itu bahkan lebih baik untuk saya!)

Dengan "aplikasi solid", maksud saya:

(1) Aplikasi sangat bergantung pada teori kategori sehingga sangat sulit untuk dicapai tanpa menggunakan mesin.

(2) Aplikasi ini memanggil setidaknya satu teorema kategori non-sepele (misalnya lemma Yoneda).

Bisa jadi itu (1) menyiratkan (2), tapi saya ingin memastikan ini adalah aplikasi "nyata".

Walaupun saya memiliki latar belakang "Teori B", itu sudah lama, jadi de-jargonisasi akan sangat dihargai.

(Tergantung pada jawaban apa yang saya dapatkan, saya mungkin mengubah pertanyaan ini menjadi wiki komunitas nanti. Tapi saya benar-benar menginginkan aplikasi yang bagus dengan penjelasan yang bagus, jadi sepertinya memalukan untuk tidak memberi hadiah kepada penjawab dengan sesuatu.)

Ryan Williams
sumber

Jawaban:

79

Saya dapat memikirkan satu contoh di mana teori kategori secara langsung "diterapkan" untuk memecahkan masalah terbuka dalam bahasa pemrograman: Thorsten Altenkirch, Peter Dybjer, Martin Hofmann, dan Phil Scott, "Normalisasi dengan evaluasi untuk kalkulus lambda yang diketik dengan coproducts" . Dari abstrak mereka: "Kami memecahkan masalah keputusan untuk hanya mengetik lambda kalkulus dengan jumlah biner yang kuat, setara dengan masalah kata untuk kategori tertutup cartesian gratis dengan produk biner. Metode kami didasarkan pada teknik semantik yang dikenal sebagai 'normalisasi dengan evaluasi' dan melibatkan membalikkan interpretasi sintaks ke dalam model berkas yang cocok dan dari penggalian ini bentuk-bentuk normal yang unik dan sesuai. "

Secara umum, saya pikir teori kategori biasanya tidak diterapkan untuk membuktikan teorema mendalam dalam bahasa pemrograman (yang jumlahnya tidak begitu banyak), tetapi sebaliknya menawarkan kerangka kerja konseptual yang sering berguna (misalnya di atas, ide (pra) semantik sheaf).

Contoh sejarah yang penting adalah saran Eugenio Moggi bahwa gagasan monad (yang mendasar dan ada di mana-mana dalam teori kategori) dapat digunakan sebagai bagian dari penjelasan semantik tentang efek samping dalam bahasa pemrograman (misalnya, negara, nondeterminisme). Ini juga mengilhami beberapa refleksi pada sintaksis bahasa pemrograman, misalnya mengarah langsung ke "Monad typeclass" di Haskell (digunakan untuk merangkum efek).

Baru-baru ini (dekade terakhir), penjelasan tentang efek ini dalam hal monad telah ditinjau kembali dari sudut pandang hubungan lama (didirikan oleh ahli teori kategori, pada 60-an) antara monad dan teori aljabar: lihat Martin Hyland dan John Power's , "Pemahaman Teori Kategori Aljabar Universal: Teori dan Moneter Lawvere" . Idenya adalah bahwa pandangan monadik efek kompatibel dengan (dalam beberapa hal lebih menarik) pandangan aljabar efek, di mana efek (misalnya, toko) dapat dijelaskan dalam hal operasi (misalnya, "pencarian" dan "pembaruan") dan persamaan terkait (misalnya, idempotensi pembaruan). Ada bangunan kertas baru-baru ini tentang hubungan ini oleh Paul-André Melliès, "Kondisi Segal memenuhi efek komputasi", yang juga sangat bergantung pada ide-ide yang berasal dari "teori kategori lebih tinggi" (misalnya gagasan "struktur Yoneda" sebagai cara mengatur semantik presheaf).

Kelas contoh terkait lainnya berasal dari logika linier . Segera setelah diperkenalkan oleh Jean-Yves Girard di tahun 80-an (dengan tujuan pemahaman yang lebih baik tentang logika konstruktif), koneksi yang kuat dengan teori kategori didirikan. Untuk beberapa penjelasan tentang hubungan ini, lihat buku John Baez dan Mike Stay, "Fisika, Topologi, Logika, dan Komputasi: A Rosetta Stone" .

Akhirnya, jawaban ini tidak akan lengkap tanpa merujuk ke blog sigfpe yang menjelaskan "A Neighborhood of infinity" . Khususnya Anda dapat memeriksa "Pemesanan Sebagian dari beberapa Teori Kategori yang diterapkan pada Haskell" .

Noam Zeilberger
sumber
3
Hai Noam, saya pikir setelah jawaban yang luar biasa itu, perwakilan Anda cukup tinggi untuk menambahkan tautan!
Suresh Venkat
Saya menghadapi masalah yang sama dengan seorang pemula. Saya hanya menunggu jawaban saya terpilih, lalu saya masukkan tautannya. Anda bisa melakukan hal yang sama ...
Andrej Bauer
10
Terima kasih! Maaf tentang pembatasan hyperlink ... berharap ada cara untuk memberi tahu sistem "yo, aku Noam Zeilberger, aku sah"
Ryan Williams
menambahkan tautan! Ya itu kebijakan yang benar-benar masuk akal, hanya menghalangi kadang-kadang.
Noam Zeilberger
46

Komputasi Quantum

Satu bidang yang sangat menarik adalah penerapan berbagai kategori monoid untuk perhitungan kuantum. Beberapa bisa berpendapat bahwa ini juga fisika, tetapi pekerjaannya dilakukan oleh orang-orang di departemen ilmu komputer. Sebuah makalah awal di bidang ini adalah semantik kategoris protokol kuantum oleh Samson Abramsky dan Bob Coecke; banyak makalah baru-baru ini oleh Abramsky dan Coecke dan lainnya terus bekerja ke arah ini.

Dalam tubuh kerja protokol kuantum ini dixiomatiskan sebagai (jenis tertentu) kategori tertutup rapat. Kategori tersebut memiliki bahasa grafis yang indah dalam hal diagram string (dan pita). Persamaan dalam kategori sesuai dengan gerakan tertentu dari string, seperti meluruskan string yang kusut tetapi tidak diikat, yang pada gilirannya sesuai dengan sesuatu yang bermakna dalam mekanika kuantum, seperti teleportasi kuantum.

Pendekatan kategoris menawarkan pandangan logis tingkat tinggi tentang apa yang biasanya melibatkan perhitungan tingkat sangat rendah.

Teori Sistem

Coalgebra telah digunakan sebagai kerangka kerja umum untuk memodelkan sistem (aliran, automata, sistem transisi, sistem probabilistik). Teorinya berakar pada teori kategori, yang didasarkan pada gagasan coalgebra , di mana adalah functor yang menggambarkan struktur sistem transisi. Dengan demikian, jenis sistem berubah dengan functor yang mendasarinya, tetapi banyak teori, seperti gagasan bisimulasi, dapat diterapkan untuk semua functors. Teori kategori juga memungkinkan konstruksi modular dari modal logika untuk alasan tentang sistem yang digambarkan sebagai coalgebras.FF

Transformasi Grafik

Transformasi grafik dapat diekspresikan dengan cukup baik dalam bahasa teori kategori. Ini telah menemukan aplikasi, misalnya, dalam transformasi model (seperti dalam model UML) dan formalisme pemodelan visual lainnya. Pendekatan berlangsung dalam kategori grafik dan grafik homomorfisme. Pertama, pushout dapat dilihat sebagai konstruksi perekatan: Diberikan dua grafik . Grafik dan dua morfisme dan menunjukkan bagian-bagian yang memiliki dua grafik. Pushout menyatukan bagian-bagian ini, menambahkan bagian dan , pada dasarnya, menempelkan dan bersama-sama di sepanjangG1,G2Pe1:PG1e2:PG2G1G2G1G2P .

Sebuah pushout ganda digunakan untuk menggambarkan transformasi grafik. Aturan diwakili oleh tuple , di mana menunjukkan prasyarat aturan, menunjukkan kondisi pasak aturan, dan menunjukkan bagian grafik untuk menerapkan aturan. Ada peta dari dan , salah satunya akan digunakan untuk mencocokkan bagian dari grafik asli, yang lain untuk membuat grafik yang dihasilkan. menjelaskan bagian grafik yang akan dihapus. menjelaskan bagian yang akan dibuat. Peta dari ke dalam konteks(L,K,R)LRKl:KLr:KRLKRKdKgrafik perlu disediakan, dan pushout dari dan peta perlu sama dengan grafik yang menarik . Pushout dari dan kemudian memberikan hasil melakukan transformasi.DdlGdk

Bahasa Pemrograman (via MathOverflow)

Ada banyak aplikasi teori kategori dalam desain bahasa pemrograman dan teori bahasa pemrograman. Jawaban luas dapat ditemukan di MathOverflow. https://mathoverflow.net/questions/3721/programming-languages-based-on-category-theory ) https://mathoverflow.net/questions/4235/relating-category-theory-to-programming-language-theory .

Bigraphs - Kalki Proses

Akhirnya, ada bigraph Milner , kerangka umum untuk menggambarkan dan bernalar tentang sistem agen yang berinteraksi. Ini dapat dilihat sebagai kerangka kerja umum untuk penalaran tentang proses aljabar dan teori struktural dan perilaku mereka. Pendekatan ini juga didasarkan pada pushout.

Dave Clarke
sumber
35

Saya secara implisit mengasumsikan tidak ada aplikasi dalam Teori A yang ditemukan sejauh ini, tetapi jika Anda memiliki beberapa di antaranya, itu bahkan lebih baik bagi saya!

  • Pemahaman saya adalah bahwa teori spesies Joyal digunakan secara relatif luas dalam kombinatorik enumeratif, sebagai generalisasi fungsi-fungsi pembangkit yang juga memberi tahu Anda cara mengubah hal-hal di samping jumlah yang ada.

  • Pippenger telah menerapkan Batu dualitas untuk menghubungkan bahasa dan varietas semi-grup reguler. Jeandel telah memperkenalkan automata topologi menerapkan ide-ide ini untuk memberikan akun terpadu (dan bukti!) Untuk kuantum, probabilistik, dan automata biasa.

  • Roland Backhouse telah memberikan karakterisasi abstrak dari algoritma serakah melalui koneksi Galois dengan semiring tropis.

Dalam nada yang jauh lebih spekulatif, Noam menyebutkan model-model berkas. Ini secara abstrak mencirikan teknik sintaksis hubungan logis, yang mungkin merupakan salah satu teknik paling kuat dalam semantik. Kami sebagian besar menggunakannya untuk membuktikan hasil yang tidak dapat diekspresikan dan konsistensi, tetapi itu harus menarik untuk teori kompleksitas karena ini adalah contoh yang bagus dari teknik bukti non-alami (dalam arti Razborov / Rudich) yang praktis. (Namun, hubungan logis biasanya dirancang dengan sangat hati-hati untuk menjamin bahwa mereka relativisasi - sebagai perancang bahasa, kami ingin dapat meyakinkan pemrogram bahwa panggilan fungsi adalah kotak hitam!)

EDIT: Saya akan terus berspekulasi, atas permintaan Ryan. Seperti yang saya pahami, bukti alami kira-kira satu di sepanjang garis mencoba mendefinisikan invarian induktif dari struktur sirkuit, tunduk pada berbagai kondisi yang masuk akal. Gagasan serupa (tidak mengejutkan) cukup umum dalam bahasa pemrograman juga, ketika Anda mencoba mendefinisikan invarian yang dikelola secara induktif oleh istilah lambda-calculus (misalnya, untuk membuktikan keamanan jenis). 1

Namun, teknik ini sering rusak pada tipe yang lebih tinggi (yaitu, fungsi). Sebagai contoh, kalkulus lambda yang diketik sederhana adalah total - setiap program yang tertulis di dalamnya berakhir. Namun, upaya langsung untuk membuktikan kecenderungan ini cenderung pada masalah fungsi kelas satu: itu tidak cukup untuk membuktikan bahwa setiap istilah tipe berakhir. Karena kita juga dapat menerapkan argumen pada fungsi, kita tidak hanya perlu memastikan bahwa setiap istilah tipe berhenti, kita juga perlu memastikan bahwa properti ini memiliki "secara turun-temurun" - kita juga perlu tahu bahwa dengan jangka waktu berapa pun tipe , aplikasi juga akan berhenti.A B AABABA

Inilah yang dilakukan hubungan logis. Alih-alih mendefinisikan satu invarian induktif tunggal, kami mendefinisikan seluruh keluarga predikat dengan rekursi atas struktur (biasanya) tipe. Kemudian, kami membuktikan bahwa setiap istilah yang dapat ditentukan terletak pada predikat yang sesuai, yang memungkinkan kami menetapkan apa yang kami cari. Jadi untuk terminasi, kita akan mengatakan bahwa nilai-nilai yang baik dari tipe dasar adalah nilai-nilai dari tipe dasar, dan nilai-nilai yang baik dari tipe adalah nilai-nilai dari tipe ini yang, jika diberi nilai , dievaluasi menjadi nilai yang baik. dariA BABAB. Perhatikan bahwa tidak ada satu pun invarian induktif - kami mendefinisikan seluruh keluarga invarian dengan rekursi pada struktur input, dan menggunakan cara lain untuk menunjukkan bahwa semua istilah ada di dalam invarian ini. Bukti-teoritis, ini adalah teknik yang jauh lebih kuat, dan itulah sebabnya itu memungkinkan Anda membuktikan hasil konsistensi.

Koneksi ke berkas berkas muncul dari fakta bahwa kita sering perlu alasan tentang istilah terbuka (yaitu, istilah dengan variabel bebas), dan karenanya perlu membedakan antara macet karena kesalahan dan macet karena perlu mengurangi variabel. Berkas gandum muncul dari mempertimbangkan pengurangan kalkulus lambda sebagai mendefinisikan morfisme kategori yang istilahnya adalah objek (yaitu, urutan parsial yang diinduksi oleh reduksi), dan kemudian mempertimbangkan functors dari kategori ini ke dalam set (yaitu, predikat). Jean Gallier menulis beberapa makalah yang bagus tentang ini pada awal 2000-an, tetapi saya ragu mereka dapat dibaca kecuali Anda sudah mengasimilasi kalkulus lambda dalam jumlah yang wajar.

Neel Krishnaswami
sumber
1
Bisakah Anda memberikan referensi ke kertas Backhouse? Dia memiliki beberapa yang menyebutkan "koneksi Galois" dalam judul, tetapi pencarian cepat tidak jelas mengungkapkan yang mana tentang algoritma serakah (dan saya tidak berpikir saya cukup akrab dengan daerah untuk mengarungi rincian dan angka dengan mudah mana yang "benar-benar" tentang algoritma serakah). Terima kasih!
Joshua Grochow
1
Bersamaan dengan pertanyaan Joshua, saya juga tertarik pada bagaimana model berkas dan hubungan logis berhubungan dengan bukti alami.
Ryan Williams
Re: Batu dualitas, untuk karya terbaru yang lebih menarik lihat Mai Gehrke's "Batu dualitas dan bahasa yang dikenali lebih dari aljabar" ( math.ru.nl/~mgehrke/Ge09.pdf ) dan Gehrke, Grigorieff dan Pin "Sebuah pendekatan topologi untuk pengakuan "( math.ru.nl/~mgehrke/GGP10.pdf )
Noam Zeilberger
Re: Gallier, maksud Anda adalah akhir tahun 90-an (seperti dalam sciencedirect.com/science/article/pii/0304397594002800 ?)
Blaisorblade
24

Ada banyak contoh, yang pertama terlintas dalam pikiran adalah penggunaan teori kategori oleh Alex Simpson untuk membuktikan sifat-sifat bahasa pemrograman, lihat misalnya " Kecukupan Komputasi untuk Jenis Rekursif dalam Model Teori Set Intuitionistic ", Sejarah Logika Murni dan Terapan , 130: 207-275, 2004. Walaupun judulnya menyebutkan teori himpunan, tekniknya adalah kategori-teoretik. Lihat beranda Alex untuk lebih banyak contoh.

Andrej Bauer
sumber
Terima kasih atas referensi, tetapi harap dicatat bahwa saya tidak bertanya: "hasil apa yang diperoleh dengan menggunakan teori kategori yang tidak dapat diperoleh sebaliknya?"
Ryan Williams
Benar, kamu tidak. Saya mengedit jawaban saya.
Andrej Bauer
11

Saya pikir Anda mengajukan dua pertanyaan tentang penerapan, tipe A dan tipe B secara terpisah.

Seperti yang Anda perhatikan, ada banyak aplikasi substantif dari teori kategori untuk topik tipe B: semantik bahasa pemrograman (monad, kategori tertutup kartesius), logika dan kemampuan (topoi, varietas logika linier).

Namun, tampaknya ada sedikit aplikasi substantif untuk teori A (algoritma atau kompleksitas).

Ada beberapa kegunaan dalam objek dasar, seperti menggambarkan kategori automata atau objek kombinatorial (grafik, sekuens, permutasi, dll). Tetapi ini sepertinya tidak menjelaskan pemahaman yang lebih dalam tentang teori atau algoritma bahasa.

Secara spekulatif, ini bisa menjadi ketidakcocokan antara strategi saat ini dari teori kategori dan teori A:

  • Strategi utama teori kategori berhadapan dengan kesetaraan (ketika semuanya sama dan ketika mereka berbeda dan bagaimana mereka saling memetakan).

  • Untuk teori kompleksitas, strategi utama adalah reduksi dan menetapkan batas (orang akan berpikir pengurangan adalah seperti panah, tapi saya tidak berpikir apa pun di luar kesamaan dangkal ini telah dipelajari).

  • Untuk algoritma, tidak ada strategi menyeluruh untuk itu selain pemikiran kombinatorial cerdas ad hoc. Untuk domain tertentu, saya berharap bisa ada eksplorasi yang bermanfaat (algoritma untuk aljabar?) Tapi saya belum melihatnya.

Mitch
sumber
2
ternyata reduksi berkaitan dengan rekonstruksi kategorikal interpretasi Goedel's Dialectica dan semantik logika linier. Lihat "Pertanyaan dan Jawaban Andreas Blass - Kategori yang Muncul dalam Logika Linear, Teori Kompleksitas, dan Teori Set". math.lsa.umich.edu/~ablass/qa.pdf
Neel Krishnaswami
3

Aplikasi "TCS-A" yang muncul di benak saya adalah spesies kombinatorial Joyal (generalisasi seri daya ke functors sehingga dapat menggambarkan objek kombinatorial seperti pohon, set, multiset, dll.) Dan formalisasi kriptografi "permainan-hopping" menggunakan relasional, logika Hoare probabilistik (Easycrypt, Certicrypt, karya Andreas Lochbihler). Sementara kategori tidak secara langsung muncul dalam yang terakhir mereka berperan dalam pengembangan logika yang mendasarinya (misalnya monad).

PS: Karena nama saya disebutkan dalam jawaban pertama: penggunaan fibrations dari groupoids untuk menunjukkan nonderivability dari aksioma tertentu dalam teori tipe Martin-Löf oleh Thomas Streicher dan saya sendiri juga dapat dianggap sebagai penggunaan teori kategori yang “solid” (walaupun dalam logika atau "TCS-B").

Martin Hofmann
sumber
3

Buku yang lebih baru Seven Sketches in Compositionality mencantumkan beberapa aplikasi teori kategori dalam sains dan teknik komputer. Bab penting tentang basis data di mana penulis menggambarkan kueri, penggabungan, migrasi, dan pengembangan basis data berdasarkan model kategorikal. Penulis mengambil ini lebih jauh dan mengembangkan Categorical Query Language (CQL) dan lingkungan pengembangan terintegrasi (IDE) berdasarkan pada model kategorikal dari basis data.

michid
sumber