Bir de Teorik Bilgisayar Bilimi sitedeki önce verilen bir yanıta , ben kategori teorisi tipi teorisi için "vakıf" olduğunu söyledi. Burada daha güçlü bir şey söylemek istiyorum. Kategori teorisi tip teorisidir . Tersine, tip teorisi kategori teorisidir . Bu noktalarda genişleyeyim.
Kategori teorisi tip teorisidir
Yazılan herhangi bir biçimsel dilde ve hatta normal matematikte, enformel notasyon kullanarak, türündeki işlevleri bildiririz . Yazılı olarak ve "type" olarak adlandırılan bazı şeyler olduğu ve bir türden diğerine "işlev" olduğu fikridir . Kategori teorisi, bu tip "ve" fonksiyonların "cebirsel teorisidir. (Resmen, kategori teorisi, gelenekçilerin set-teorik ayak parmaklarına dokunmaktan kaçınmak için onlara “nesneler” ve “morfizmalar” olarak adlandırır, ancak giderek artan bir şekilde bu teoriyi rüzgara çeken ve daha sezgisel terimleri kullanan kategori teorisyenlerini görüyorum: "tür "ve" function ". Ama,A B ff: A → BbirBf
Hepimiz liseden itibaren set teorisi üzerine büyüdük. Bu yüzden, set olarak ve gibi tipleri ve set-teorik haritalamalar gibi gibi fonksiyonları düşünmeye alışkınız. Onları hiç böyle düşünmediyseniz, formdasınız demektir. Set teorik beyin yıkamasından kaçtınız. Kategori teorisi, pek çok türde ve birçok türde fonksiyon olduğunu söylüyor. Dolayısıyla, kümeler olarak türlerin fikri sınırlayıcıdır. Bunun yerine, kategori teorisi türleri ve fonksiyonları cebirsel bir şekilde aksiyomize eder. Temel olarak, kategori teorisi budur. Bir tür ve fonksiyon teorisi. Yüksek düzeyde soyutlama içeren, oldukça karmaşık bir hale geliyor. Ancak, eğer bunu öğrenirseniz, türleri ve fonksiyonları derinlemesine anlayacaksınız.B fABf
Tip teorisi kategori teorisidir
"Tip teorisi" derken, her şeyin tip kontrolünü sağlayan katı terim oluşturma kurallarına dayanan herhangi bir türden yazılı dili kastediyorum. Ne zaman böyle bir dilde çalışıyorsak, kategori teorik bir yapıda çalışıyoruz. Set-teorik notasyonları kullanıp set-teorik olarak düşünmemize rağmen, yine de kategorik olarak anlamlı şeyler yazmaya başlıyoruz. Bu inanılmaz bir gerçek .
Tarihsel olarak, Dana Scott bunu ilk fark eden olabilir. Yazılı (ve yazılmamış) lambda matematiğine dayalı anlamsal programlama dilleri modelleri üzerinde çalışmıştır. Geleneksel küme teorik modeller bu amaç için yetersizdi, çünkü programlama dilleri teoriye sahip olmayan sınırsız özyinelemeyi içeriyordu. Scott, programlama fenomenini yakalayan bir dizi anlamsal model icat etti ve lambda matematiğinin tam olarak kartezyen kapalı kategoriler olarak adlandırılan bir kategoriler sınıfını temsil ettiğini fark etti . "Set-teorik" olmayan pek çok kartez kapalı kategorisi vardır. Ancak yazılan lambda matematiği hepsine eşit olarak uygulanır. Scott, " Lambda matematiğinin kuramlarını ilişkilendirme " adında güzel bir makale yazdı."neler olup bittiğini, bir kısmı web üzerinde mevcut görünüyor." Orijinal HB Curry: Kombinatorik Mantık Üzerine Denemeler ", Lambda Calculus ve Formalism Üzerine Denemeler", Academic Press, 1980. Berry ve " Muhtemelen bağımsız olarak Curien de aynı hayata geçirilmiş, işlevsel fikirlerin uygulanmasında bu fikirleri kullanmak için kategorik bir soyut makine (CAM) tanımlamışlar ve uyguladıkları dilin Microsoft'un F # ' nun temel çerçevesi olan "CAML" olarak adlandırılmıştı .
, , vs. gibi standart tip yapıcılar functorlardır . Bu, yalnızca türleri türlerle eşlemekle kalmaz, aynı zamanda türler arasındaki türden işlevlere işlev görürler. Polimorfik fonksiyonlar , functor eylemlerinden kaynaklanan tüm bu fonksiyonları korur. Kategori teorisi 1950'lerde Eilenberg ve MacLane tarafından icat edildi.→ L ı s t×→Listtam olarak polimorfik fonksiyonlar kavramını biçimlendirmek. Onlara "doğal dönüşümler", "doğal" diyorlar çünkü tür değişkenlerini kullanarak doğru şekilde yazabileceğiniz tek kişiler onlar. Bu yüzden, bir kategori programlama teorisinin, programlama dilleri ortaya çıkmadan önce bile, polimorfik programlama dillerini resmileştirmek için icat edildiğini söyleyebiliriz!
Bir set-teorik gelenekçinin, set-teorik notasyonları kullandığında yüzeyin altında gerçekleşen functorlar ve doğal dönüşümler hakkında bilgisi yoktur. Ancak, tip sistemini sadık bir şekilde kullandığı sürece, gerçekten farkında olmadan kategorik yapılar yapıyor.
Tüm söylenen ve yapılanlar, kategori teorisi, türlerin ve fonksiyonların en temel matematik teorisidir. Bu nedenle, tüm programcılar, özellikle işlevsel programcılar olmak üzere, biraz kategori teorisi öğrenmekten faydalanabilirler. Ne yazık ki, özellikle programcıları hedef alan kategori teorisi hakkında herhangi bir ders kitabı görünmemektedir. "Bilgisayar bilimi için kategori teorisi" kitapları tipik olarak teorik bilgisayar bilimi öğrencileri / araştırmacılarına yöneliktir. Bilgisayar bilimcileri için temel kategori teorisi olan Benjamin Pierce'in kitabı belki de en okunaklı olanıdır.
Ancak, web üzerinde programcıları hedef alan birçok kaynak var. Haskellwiki sayfa iyi bir başlangıç noktası olabilir. At Midlands Graduate School , biz (diğerleri arasında) kategorisinde teorisi üzerine dersler var. Graham Hutton'un kursu "acemi" kursu, benimki de "ileri" kursu. Ancak her ikisi de temelde aynı içeriği kaplar, farklı derinliklere gider. Chalmers Üniversitesi dünyanın dört bir yanından gelen kitaplar ve ders notları hakkında güzel bir kaynak sayfasına sahiptir . "Sigfpe" nin coşkulu blog sitesi, programcının bakış açısından pek çok iyi sezgi de sunuyor.
Öğrenmek isteyeceğiniz temel konular:
- kategori tanımı ve bazı kategori örnekleri
- fonktorlar ve bunlardan örnekler
- doğal dönüşümler ve bunlardan örnekler
- ürünlerin, kopyaların ve üstlerin tanımları (fonksiyon alanları), ilk ve son nesneler.
- adjunctions
- monad, cebir ve Kleisli kategorileri
Kendi ders notları içinde Midlands Graduate School sonuncusu (monads) dışındaki tüm bu konuları kapsar. Bugünlerde monadlar için uygun başka kaynaklar var. Yani bu büyük bir kayıp değil.
Ne kadar çok matematik bilirseniz, kategori teorisini öğrenmek o kadar kolay olur. Kategori teorisi genel bir matematiksel yapı teorisi olduğu için, tanımların ne anlama geldiğini anlamak için bazı örnekler bilmek faydalı olacaktır. (Kategori teorisini öğrendiğimde, programlama dili anlambilimi konusundaki bilgilerimi kullanarak kendi örneklerimi oluşturmam gerekti, çünkü standart ders kitaplarında sadece hiçbir şey bilmediğim matematiksel örnekler vardı.) Sonra Lambek'in mükemmel kitabı geldi. ve Scott " Kategorik mantığa giriş ""hangi kategorilerle ilgili hangi tip teoriyi yazıyorlar (" mantık "olarak adlandırıyorlar). Artık kategori teorisini, birçok örnek bile bilmeden, sadece tip sistemleriyle ilişkilendirerek anlamak mümkün. Yukarıda bahsettiğim kaynakların çoğu bunu kullanıyor. kategori teorisini açıklamak için yaklaşım.