Dzisiaj przemówienie Henninga Kerstana („Trace Semantics for Probabilistic Transition Systems”) po raz pierwszy skonfrontowało mnie z teorią kategorii. Zbudował teoretyczne ramy do opisywania probabilistycznych układów przejściowych i ich zachowania w sposób ogólny, tj. Z nieskończenie nieskończonymi zbiorami stanów i różnymi pojęciami śladów. W tym celu przechodzi przez kilka warstw abstrakcji, aby ostatecznie skończyć na pojęciu monad, które łączy z teorią miar, aby zbudować model, którego potrzebuje.
Ostatecznie zajęło mu 45 minut (z grubsza) zbudowanie frameworka do opisania koncepcji, którą początkowo wyjaśnił w 5 minut. Doceniam piękno podejścia (to nie uogólniać ładnie na różne pojęcia śladów), ale wydaje mi się dziwnym równowagi mimo.
Z trudem widzę, czym tak naprawdę jest monada i jak ogólna koncepcja może być przydatna w zastosowaniach (zarówno w teorii, jak i praktyce). Czy to naprawdę warte wysiłku, jeśli chodzi o wyniki?
Dlatego to pytanie:
Czy istnieją problemy, które są naturalne (w sensie CS), na których można zastosować abstrakcyjne pojęcie monad i pomaga (lub wręcz instrumentalnie) w uzyskaniu pożądanych rezultatów (w ogóle lub w ładniejszy sposób niż bez)?
źródło
Odpowiedzi:
Pytanie o to, czy wystąpienie monady jest naturalne, jest podobne do pytania, czy grupa (w sensie teorii grup) jest naturalna. Po sformalizowaniu czegoś, w tym przypadku jako endofunkcji, spełnia on albo aksjomaty bycia monadą, albo nie. Jeśli spełnia aksjomaty, to dostajemy za darmo wiele technicznych urządzeń.
Artykuł Moggiego Pojęcia obliczeń i monady praktycznie rozwiązują ten problem: monady są niezwykle naturalne i przydatne do opisywania efektów obliczeniowych w ujednolicony sposób. Wadlera inni tłumaczyli te pojęcia, aby radzić sobie z efektami obliczeniowymi w funkcjonalnych językach programowania, wykorzystując połączenie, że funktor jest konstruktorem typu danych. To dodaje lukru na torcie. Monady FP umożliwiają leczenie efektów obliczeniowych, takich jak IO, które bez nich byłyby niezwykle nienaturalne. Monady zainspirowały powiązane użyteczne pojęcia, takie jak strzałki i idiomy, które są również bardzo przydatne do konstruowania programów funkcjonalnych. Zobacz odnośnik Wadlera. Monady FP to to samo, co monady teorii kategorii w tym sensie, że aby monada FP działała, muszą zachowywać te same równania - kompilator na nich polega. Zasadniczo prezentacja monady jest różna (różne, ale równoważne operacje i równania), ale jest to różnica powierzchowna.
Ogromna część pracy Barta Jacobsa , aby wziąć tylko jeden przykład, wykorzystuje monady. Dużo pracy wywodzi się z węgielnicy, która jest ogólną teorią systemów. Jednym z (wielu) wkładów Jacobsa w tę dziedzinę jest opracowanie ogólnego pojęcia semantyki śladowej dla systemów (określanych jako węgiel) w oparciu o monady. Można argumentować, że pojęcie semantyki śladu jest naturalne: jaka jest semantyka systemu? Lista działań, które można zaobserwować!
Jednym ze sposobów zrozumienia monad jest programowanie w Haskell za pomocą monad. Następnie znajdź jeden z wielu dobrych dostępnych samouczków (za pośrednictwem Google). Zacznij od kąta programowania, a następnie przejdź do strony teoretycznej, zaczynając od podstawowej teorii kategorii.
źródło