Apa hubungan antara functors dalam teori SML dan Kategori?

24

Seiring pemikiran yang sama seperti pernyataan Andrej Bauer dalam jawaban ini

Komunitas Haskell telah mengembangkan sejumlah teknik yang diilhami oleh teori kategori, yang mana monad paling terkenal tetapi tidak boleh dikacaukan dengan monad .

Apa hubungan antara functors di SML dan functors dalam teori Kategori?

Karena saya tidak tahu tentang rincian functors dalam bahasa lain seperti Haskell atau OCaml, jika ada info nilai maka silakan juga menambahkan bagian untuk bahasa lain.

Guy Coder
sumber
1
Anda dapat mencoba mengirim email Dave McQueen untuk jawaban yang pasti, saya kira.
Gilles 'SO- stop being evil'

Jawaban:

14

Kategori membentuk kategori (besar) yang objeknya adalah kategori (kecil) dan yang morfismenya adalah fungsi antara kategori kecil. Dalam pengertian ini, functors dalam teori kategori adalah "morfisme ukuran lebih tinggi".

Functors ML bukan functors dalam arti kata kategoris. Tapi mereka "fungsi ukuran lebih tinggi" dalam arti tipe-teoretis.

Pikirkan tipe data konkret dalam bahasa pemrograman yang khas sebagai "kecil". Dengan demikian int, bool, int -> int, dll kecil, kelas-kelas dalam java kecil, seperti struct baik di C. Kami dapat mengumpulkan semua tipe data menjadi koleksi besar yang disebut Type. Tipe konstruktor, seperti listatau arraymerupakan fungsi dari Typehingga Type. Jadi itu adalah fungsi "besar". Functor ML hanyalah fungsi besar yang sedikit lebih rumit: ia menerima sebagai argumen beberapa hal kecil dan mengembalikan beberapa hal kecil. "Beberapa hal kecil disatukan" dikenal sebagai struktur dalam ML. Dalam hal teori tipe Martin-Lof kami memiliki semesta Type tipe kecil. Jenis besar biasanya disebut jenis . Jadi kita punya:

  1. nilai adalah elemen tipe (contoh 42 : int:)
  2. tipe adalah elemen dari Type(contoh int : Type:)
  3. Tanda tangan ML adalah jenis (contoh OrderedType:)
  4. konstruktor tipe adalah elemen jenis (contoh list : Type -> Type:)
  5. Struktur ML adalah elemen jenis (contoh String : OrderedType:)
  6. ML functors adalah fungsi antara jenis (misalnya: Map.Make : Map.OrderedType -> Make.S)

Sekarang kita bisa menggambar analogi antara ML dan kategori, di mana functors berhubungan dengan functors. Tapi kami juga melihat bahwa tipe data dalam ML seperti "kategori kecil tanpa morfisme", dengan kata lain mereka lebih suka set daripada kategori seperti. Kita dapat menggunakan analogi antara ML dan teori himpunan kemudian:

  1. tipe data seperti set
  2. jenisnya seperti kelas teori set
  3. functors seperti fungsi berukuran kelas
Andrej Bauer
sumber
15

Struktur ML standar mirip dengan aljabar . Tanda tangannya menggambarkan seluruh kelas aljabar dengan bentuk yang serupa.

F:M.HainGrhalF:SEBUAHbRng

Sebagian besar gagasan ini dikerjakan dalam serangkaian makalah oleh Burstall dan Goguen dalam merancang bahasa spesifikasi yang disebut CLEAR (Referensi c5 dan c6 pada halaman DBLP .) David MacQueen bekerja bersama dengan Burstall dan Sannella pada waktu itu, dan sangat akrab dengan masalah. Sistem modul ML Standar didasarkan pada ide-ide ini.

Apa yang kebanyakan orang akan pikirkan adalah, bagaimana dengan morfisme? Kategori fungsi teoritis memiliki bagian objek dan bagian morfisme. Apakah fungsi standar ML memiliki hal yang sama? Jawabannya adalah YA dan TIDAK.

  • Bagian YA dari jawaban berlaku jika strukturnya adalah orde pertama. Kemudian, ada homomorfisma antara struktur yang berbeda dari tanda tangan yang sama, dan fungsi-fungsi Standar ML secara otomatis memetakannya ke homomorfisma dari tanda tangan hasil.
  • Bagian NO dari jawaban berlaku ketika struktur memiliki operasi tingkat tinggi.

Apakah ini berarti bahwa Standar ML menyimpang dari teori kategori? Saya kira tidak. Saya lebih suka berpikir bahwa Standar ML melakukan hal yang benar, dan teori kategori belum menyusul. Teori kategori belum tahu bagaimana menangani fungsi tingkat tinggi. Suatu hari, itu akan terjadi.

Uday Reddy
sumber
"Teori kategori belum tahu bagaimana menangani fungsi tingkat tinggi." Itu terdengar seperti pertanyaan lain karena saya pikir teori Kategori bisa melakukan semuanya sebagai dasar.
Guy Coder
2
T(X)=[XX]twsayaceX=T(X)T(X)
Uday Reddy
Saya benar-benar membuatnya menjadi pertanyaan nyata .
Guy Coder
"Struktur ML Standar mirip dengan aljabar ". Bukankah functors sedikit lebih umum dari itu? Tidak ada yang mencegah struktur berisi objek yang tidak terkait (tipe, nilai & fungsi), yaitu. tidak membentuk aljabar.
didierc
2
@didierc Tanda tangan untuk aljabar terdiri dari satu atau lebih jenis (seperti tipe kami), dan satu atau lebih operasi (seperti fungsi kami) dan opsional beberapa aksioma (seperti spesifikasi kami). Sebuah aljabar untuk tanda tangan mengambil set tertentu untuk orang-orang macam, dan fungsi-fungsi khusus untuk operasi mereka, sehingga aksioma puas. Tanda tangan dan struktur SML adalah persis seperti itu, kecuali bahwa SML memungkinkan operasi tingkat tinggi sedangkan Aljabar tidak.
Uday Reddy
3

Sejauh pengetahuan saya, tidak ada hubungan formal antara functors dalam teori kategori dan functors dalam ML (SML atau OCaml, mereka cukup dekat untuk tujuan kita di sini).

Dalam teori kategori, functors adalah fungsi yang beroperasi pada objek. Mereka adalah satu tingkat di atas morfisme, yang sering berfungsi yang beroperasi pada elemen (banyak kategori memiliki objek yang ditetapkan dengan beberapa struktur aljabar dan panah yang merupakan homomorfisme di antara struktur ini). Functor ML adalah fungsi yang beroperasi pada modul, satu tingkat di atas fungsi yang beroperasi pada nilai-nilai bahasa inti. Saya pikir kemiripannya berhenti di sini.

Fungsional ML dibaptis oleh Dave McQueen dalam revisi 1985 tentang Modul untuk Standar ML (citeseerx) yang muncul dalam Polymorphism Newsletter (makalah aslinya menggunakan ungkapan "modul parametrik" - publikasi kemudian cenderung menggunakan kata sifat "parametrized"). Sayangnya, saya tidak dapat menemukan salinan makalah itu. Dalam makalahnya tahun 1986, Menggunakan Jenis Ketergantungan untuk Mengekspresikan Struktur Modular (citeseerx) ia memberikan nama sebagaimana mapan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Functors tidak hanya berfungsi pada objek, mereka juga memetakan morfisme. Functors adalah "morfisme antar kategori".
Andrej Bauer
@ AndrejBauer Ya, functors adalah fungsi pada objek. Tidak setiap fungsi pada objek adalah functor, tapi itu pertimbangan sekunder di sini.
Gilles 'SO- stop being evil'