SML'deki functors ile Kategori teorisi arasındaki ilişki nedir?


24

Andrej Bauer'ın bu cevabındaki ifadesiyle aynı düşünce boyunca

Haskell topluluğu, kategori teorisinden esinlenerek, monadlarının en iyi bilinen fakat monadlarla karıştırılmaması gereken birkaç teknik geliştirmiştir .

Arasındaki ilişki nedir functors SML ve functors Kategori teoride?

Haskell veya OCaml gibi diğer dillerde functorların ayrıntılarını bilmediğim için, eğer değer bilgisi varsa, lütfen diğer diller için bölümler de ekleyin.


1
Sanırım kesin bir cevap için Dave McQueen'e e-posta göndermeyi deneyebilirsiniz .
Gilles 'SO- kötülük yapmayı bırak'

Yanıtlar:


14

Kategoriler, nesneleri (küçük) kategoriler ve morfizmaları küçük kategoriler arasında functor olan (büyük) bir kategori oluşturur. Bu anlamda, kategori teorisindeki işlevciler "daha yüksek boyutta morfizmalar" dır.

ML functors, kelimenin kategorik anlamdaki functorları değildir. Fakat bunlar tip teorik anlamda "daha yüksek boyut fonksiyonları" dır.

Somut veri tiplerini tipik bir programlama dilinde "küçük" olarak düşünün. Böylece int, bool, int -> intvb C. kuyu yapılar Biz denilen büyük bir koleksiyona tüm veri türlerini toplayabilir olarak java sınıfları, küçük, küçük Type. Gibi bir tür yapıcı, listya da arraybir fonksiyonudur Typeiçin Type. Bu yüzden "büyük" bir işlevdir. Bir ML functor, sadece biraz daha karmaşık bir fonksiyondur: birkaç küçük şeyi argüman olarak kabul eder ve birkaç küçük şeyi döndürür. “Bir araya getirilen birkaç küçük şey” ML'de yapı olarak bilinir . Martin-Löf tipi teorisi bakımından küçük tipli bir evrenimiz var Type. Büyük tiplere genellikle çeşit denir . Böylece sahibiz:

  1. değerleri türleri elemanları (örnek: vardır 42 : int)
  2. türleri elemanları Type(örneğin: int : Type)
  3. ML imzalar türleri (örneğin: vardır OrderedType)
  4. tip tanımına türlü elemanları (örnek: vardır list : Type -> Type)
  5. ML yapıları belirtmektedir türlü elemanları (örnek: vardır String : OrderedType)
  6. ML fanktorlar türleri arasındaki fonksiyonları (örnek: vardır Map.Make : Map.OrderedType -> Make.S)

Artık, ML ile kategoriler arasında bir benzetme kurabiliriz, çünkü altında işlevlerin işlevlere karşılık gelir. Ancak ML'deki veri tiplerinin "morfizmasız küçük kategoriler" gibi olduklarını, bir başka deyişle, kategorilerden çok setler olduklarını fark ettik. ML ve set teorisi arasında bir benzetme kullanabiliriz:

  1. veri türleri kümeler gibidir
  2. çeşitleri set-teorik sınıfları gibidir
  3. işlevler sınıf boyutlu işlevler gibidir

15

Standart bir ML yapısı bir cebire benzer . İmzası , benzer şekildeki bir cebir sınıfını tanımlar .

F:MOnG,rpF:birbR,ng

Bu fikirlerin çoğu Burstall ve Goguen tarafından CLEAR ( DBLP sayfasındaki Referanslar c5 ve c6 .) Adlı bir spesifikasyon dili tasarlarken bir dizi makalede işlendi . sorunları ile. Standart ML modül sistemi bu fikirlere dayanmaktadır.

İnsanların çoğunun merak edeceği şey, peki ya morfizm? Kategori teorik fonktorlar bir nesne kısmına ve bir morfizm kısmına sahiptir. Standart ML fonksörleri aynı mı? Cevap EVET ve HAYIR.

  • Yapının birinci dereceden olması durumunda cevabın YES kısmı uygulanır. Daha sonra, aynı imzanın farklı yapıları arasında homomorfizmler vardır ve Standart ML fonk- siyonları bunları otomatik olarak sonuç imzasının homomorfizmi ile eşleştirir.
  • Cevabın NO kısmı, yapılar yüksek dereceli işlemlere sahip olduğunda uygulanır.

Bu, Standart ML'nin kategori teorisinden saptığı anlamına mı geliyor? Sanmıyorum Standard ML'nin doğru olanı yaptığını ve kategori teorisinin henüz yetişemediğini düşünüyorum. Kategori teorisi, daha üst düzey fonksiyonlarla nasıl başa çıkılacağını henüz bilmiyor. Bir gün olacak.


“Kategori teorisi daha üst düzey fonksiyonlarla nasıl başa çıkılacağını henüz bilmiyor.” Bu, bir başka soruya benziyor çünkü Kategori teorisinin her şeyi bir temel olarak yapabileceğini düşündüm.
Guy Coder,

2
T(X)=[XX]twbenceX=T(X)T(X)
Uday Reddy

Aslında bunu gerçek bir soru yaptım .
Guy Coder,

"Standart bir ML yapısı bir cebire benziyor ". Functors bundan biraz daha genel değil mi? Hiçbir şey bir yapının alakasız nesneler (türler, değerler ve işlevler) içermesini engelleyemez, yani. cebir oluşturmamak.
didierc

2
@didierc Cebirlerin imzası , bir veya daha fazla türden (türlerimiz gibi) ve bir veya daha fazla işlemden (işlevlerimiz gibi) ve isteğe bağlı olarak bazı aksiyomlardan (özelliklerimiz gibi) oluşur. İmza için bir cebir , bu türler için belirli kümeleri ve bu işlemler için belirli işlevleri seçer, öyle ki aksiyomlar tatmin edilir. SML imzaları ve yapıları tam da böyle şeylerdir, ancak SML daha yüksek seviyeli işlemlere izin verirken, Cebir'de yoktur.
Uday Reddy,

3

Benim en iyi bildiğim için vardır, arasında resmi ilişki functors kategori teoride ve functors ML içinde (SML veya OCaml, burada bizim amacımız için yakın yeterince konum).

Kategori teorisinde, işlevler nesneler üzerinde çalışan işlevlerdir. Bunlar genellikle elementler üzerinde çalışan fonksiyonlar olan morfizmlerin üstünde bir seviyedir (birçok kategoride bazı cebirsel yapıya sahip nesneler ve bu yapılar arasında homomorfizm olan oklar vardır). Bir ML functor, ana dil değerlerinde çalışan fonksiyonların bir seviyesinin üzerinde olan modüller üzerinde çalışan bir fonksiyondur. Bence benzerlik burada bitiyor.

ML functors, 1985 yılında Polimorfizm Bülteni'nde yer alan Standart ML Modüllerinin (citeseerx) revizyonunda Dave McQueen tarafından vaftiz edildi (orijinal makale "parametrik modül" ifadesini kullandı - daha sonra yayınlar sıfatını "parametreleştirdi" kullanma eğiliminde). Ne yazık ki, bu makalenin bir kopyasını bulamıyorum. 1986 tarihli makalesinde Modüler Yapıları İfade Etmek İçin Bağımlı Türleri Kullanmak (citeseerx) ismini verdiği şekilde verir.


2
Functors sadece nesneler üzerindeki fonksiyonlar değil aynı zamanda morfizmi de haritalandırırlar. Functors "kategoriler arasındaki morfizm" dir.
Andrej Bauer

@AndrejBauer Evet, işlevler nesneler üzerinde fonksiyonlardır. Nesnelerdeki her işlev bir işlev değildir, ancak bu ikincil bir düşüncedir.
Gilles 'SO- kötü olmayı'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.