Programlama için kategori teorisi (değil)?


21

Haskell ve o kadar saf olmayan FP dillerini öğrendikten sonra Kategori teorisi hakkında okumaya karar verdim. Kategori teorisini iyi anladıktan sonra, kategori teorisi kavramlarının programların tasarımını düşünmede nasıl kullanılabileceğini düşünmeye başladım, ancak ne kadar denesem denesem de bu yolun yolu değil gibi görünüyor.

Kategori teorisini program tasarlamakla ilişkilendirmek için başarısız birçok girişimde bulunduktan sonra şu sonuca vardım:

  • Kategori teorisi bir programlama dili tasarlarken faydalıdır .
  • Kategori teorisi, programlar tasarlarken kullandığınız bir şey değildir (kategori ilkelerine göre tasarlanmış bir dil kullanırken bile). Örneğin: Haskell'de programlama yaparken, kategori teorisi kavramlarını değil programınızı tasarlamak için türleri, tür yapıcısını, işlevleri, üst düzey işlevleri vb. Kullanacaksınız.

Özetle katman sisteminin altındayız (sipariş düşükten yükseğe):

Kategori teorisi -> Programlama dili -> Program

Belirli bir katmanda, hemen alttaki katmanın kavramlarını kullanırsınız .

Bu anlayış doğru mu? Değilse ve program tasarlarken doğrudan kategori teorisi kavramlarını kullanabileceğimize inanıyorsanız , lütfen gösterildiği bazı makalelere veya blog gönderilerine bakın.

NOT: Program tasarlayarak, eşzamanlılık, paralellik, reaktif, mesaj geçirme vb. Gibi farklı kavramlara dayalı programlar tasarlamak kastediyorum.


1
Monadları programlama dilinin veya programlarının bir parçası olarak görüyor musunuz? Oklar?
Dave Clarke

2
Bu bana en azından kısmen felsefi bir soru olarak çarpıyor. Tek bir doğru cevap olduğundan emin değilim. Kategori teorisinin bir uzmanı programlama sırasında kendisinden elde edilen sezgiyi uygulayacak, diğeri ise farklı düşünme biçimlerini destekleyecektir.
Raphael

2
Yazılan programların çoğu, kategori teorisinden ilham almayan programlama dillerini kullanır. Anlayabildiğim kadarıyla, ortalama bir programcı kategori teorisinin farkında değildir ve bu nedenle çoğu program (işletim sisteminiz ve tarayıcınız dahil) yüksek matematikten ilham almaz.
Yuval Filmus

1
@YuvalFilmus: Sorum fonksiyonel programlama dilleri hedefleniyor
Ankur

1
ayrıca monoids
vzn

Yanıtlar:


13

Tabii ki, bu ne tür bir program tasarlamaya çalıştığınıza bağlıdır.

Teyzenizin çikolata dükkanı için bir muhasebe programı tasarlıyorsanız, kategori teorisinin çok yararlı olacağından şüpheliyim.

Ancak tabii ki kategori teorisinin programların tasarımında çok yararlı olduğu durumlar vardır (bununla da veri yapıları, kütüphaneler vb. Kastediyorum). Bu tür durumlar çoğunlukla ilgili programlar matematiksel nitelikte olduğunda ortaya çıkar.

Yazma programlarına istiyorsanız matematiksel analizde ortaya çıkan kesin gerçek sayılar ve diğer yapılarla hesaplama, yanıtın gereken ilk soru, ne demek olduğunu doğru vb bir türevlenebilir fonksiyon, bir manifoldu gibi bir karmaşık matematiksel nesne (uygulamak ). Burada bazı kategori teorisi ve mantığını bilmek çok yardımcı olur, çünkü size matematiksel yapıların tanımlarını karşılık gelen veri yapılarının spesifikasyonlarına ve uygulamalarına çevirmek için sistematik bir yol sağlarlar. Aramanız gereken terim gerçekleştirilebilirlik teorisidir . Ama bu sadece bir örnek.

Kategori teorisinin nasıl işe yaradığını görmenin en iyi yolu, çok sayıda kategori teorisi (ve genel olarak matematik) bilen insanlar tarafından yazılan programlara bakmaktır. Bunun bariz bir örneği Martín Escardó ve imkansız işlevleri, örneğin:

M. Escardó ve P. Oliva: Sıralı Oyunlar, Tychonoff Teoremi ve Double-Negation Shift'in Ortak , Matematiksel Yapısal Fonksiyonel Programlama 2010, ACM Press'te neler var . ( Haskell ve Agda dosyaları ile birlikte )

Bunun sadece kategori teorisi değil, aynı zamanda mantık ve topoloji olduğunu da şikayet edebilirsiniz. Bu tür şikayetler ciddi şekilde yanlış yönlendirilir. En iyi kategori teorisi her zaman başka şeylerle karıştırılır.

Son olarak, kendinden atanmış biraz okumaya dayanan şeylerin doğası hakkında büyük sonuçlar çıkarmamayı öneriyorum.


Bu tam olarak benim açımdan. Eğer muhasebe yazılımı tasarlıyorsam, yazım sistemi benim tasarım dili olacak. Matematiksel bir yazılım tasarlıyorsam bile o zaman kategori teorisi kavramlarını temsil etmek için yazı sistemini kullanacağım. Temel olarak tip teorisinin VEYA tip sistemlerinin kategori teorisinden daha genel soyutlamalar olduğunu gösterir.
Ankur

1
Bu saçma bir ifadedir. Bunun gibi kapsamlı ifadeler yapmadan önce belki biraz daha öğrenmeniz gerektiğini düşünüyorum. Belki existentialtype.wordpress.com/2011/03/27/the-holy-trinity
Andrej Bauer

Ben bir araştırmacı, doktora öğrencisi, bilim adamı, matematikçi veya kategori teorisyeni değilim, bu yüzden ifadelerimden rahatsız olmayın, bazı bilimsel dergilerde veya araştırma gazetelerinde yayınlanmayacaklar. Ben sadece madalyonun diğer tarafını anlamaya çalışan bir programcıyım. Bu arada, bağlantı için teşekkürler.
Ankur

1
Bunun farkındayım, tam da bu yüzden sizin gibi sonuçlar çıkarmaya dikkat etmenizi öneriyorum: sadece böyle sonuçlar çıkarmak için gerekli bilgiye sahip değilsiniz. Ve bu yüzden de, sizden, tip teorisi ve kategori teorisi arasındaki ilişki hakkında bazı teknik kitap yerine Bob Harpher tarafından yazılmış bir blog yazısına atıfta bulunuyorum. Yardım etmeye çalışıyorum, ancak matematik dalının doğası hakkında büyük sonuçlar çıkarmaya geldiğinde sizden biraz daha rezervasyon bekliyorum.
Andrej Bauer

Örneğin, "tip teorisinin kategori teorisinden daha genel bir soyutlama olduğunu" söylediniz. Bu, az bilgiye dayanarak yapmamak gerektiğini bilmeniz gereken bir ifade örneğidir. Bu alanda profesyonel olarak çalışıyorum ve hatta böyle bir sonuç çıkarmaya çok dikkat etmeliyim.
Andrej Bauer

6

İnsanlar veri türlerini tanımlamak için CT kullanırdı.

  1. Veri tipi, nesneleri (spesifikasyon dili) tiplerinin sonlu dizileri olan ve okları, veri tipi işlemlerinin projeksiyonları veya başka bileşimleri olan belirli bir kategori tarafından tanımlanmıştır. Örneğin, nesne etki alanıdır ve yığınların push işleminin codomainidir. Bu size sözdizimi sağlar, ancak yine de anlambilim kavramınız yoktur.
  2. Bir cebir, yani türün bir örneği, teoriden Ens'e (küçük) kümeler kategorisinin bir fonktörüdür. (Russell'ın paradoksundan kaçınmak için "küçük" kullanıyoruz, ancak çoğunlukla önemli değil.)
  3. Kategorilerin kapanma özelliklerinin mantıksal teorilerin ailelerine karşılık geldiği ortaya çıktı. Örneğin, teori kategorisi ürünler altında kapatılırsa, veri tipi denklemlerle aksiyomatize edilebilir. Teori kategorisi geri çekmelerle kapatılırsa, veri türü Horn cümleleri ile aksiyomatize edilebilir.

Artık kimsenin buna dikkat etmediğinden emin değilim. Ben düşünürdüm bu ve orada bağlantılar, daha ayrıntılı olarak açıklıyor.

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.