Teoria kategorii dla programistów - challenges

0

Na mikrobologu i blogu @lion137 wstawił interesującą pozycję, tj. Teorię kategorii dla programistów.

Lektura mnie wciągnęła i zacząłem robić rozdział po rozdziale razem z ćwiczeniami i mMam pewne wątpliwości jak powinna wyglądać kategoria złożona z typów: Void, Unit i Bool (Challenge#6 z rozdziału 2).

Wydumałem coś takiego jak na załączonym obrazku.

Wątpliwości:

  • Void -> Void - choć podpadaloby pod "id", to dla mnie bardziej podpada pod pojęcie "absurd" (w sensie zdefiniowanym w książce, odwolującym się do pojęcia ze świata haskellowego),
  • Unit -> Void i Bool -> Void (w ogólności dowolny typ -> Void) - czy ma to rację bytu? Kojarzy mi się z "do_nothing".
0

Muszą być jeszcze złożenia morfizmów.

0

Hmm, tej uwagi o składaniu morfizmów nie zrozumiałem, to dotyczy grafu czy ogólnie własności kategorii?

Papier wszystko przyjmie i taki graf ma wymagane morfizmy ;) Tzn. mogę składać :
Unit->Bool i Bool->Void i mieć Unit->Void, tylko nie wiem czy to ma sens, stąd te znaki ? na krawędziach.

Bo czym byłaby funkcja, która zwraca nic?

Może to definicja nil?

0

To jest częśc definicji kategorii, jeśli są morfizmy: f: a -> b i g: b -> c, to istnieje morfizm a -> c, który jest złożeniem tych morfizmów: g.f.
Zależy, co rozumiemy przez "wszystkie możliwe" morfizmy, mające sens, czy wszystkie na papierze, jak Zasugerowałeś. Jeśli jest to kategoria, to musi istnieć:
id: Void -> Void, więc możliwe są też Bool -> Void, czyli możliwe są wszystkie kombinacje:). Będą istnieć złożenia, np.: Void -> Unit złożone z Unit -> Bool, to będzie absurd i tak dalej.

0

Patrząc teoretycznie to "wszystkie możliwe" morfizmy na papierze działają (tzn. na chwilę obecną nie wiedzę powodu, że miałyby nie działać).
Jednak od strony praktyki (programowanie), nie sposób przekazać do funkcji wartości ze zbioru pustego i czym byłaby funkcja, która zwraca nic? Chyba, ze godzimy się że null/nil to dobra wartość :)

1

Po namyśle, chyba zmienię zdanie co do funkcji w Void, nie powinno ich być w kategorii. Co innego id na Void, możemy je sobie zdefiniować. Ale, np. Bool -> Void, jaka definicja? Nie ma.

0

Wątpliwości co do ? :: cokolwiek_nie_Void -> Void mam już rozwiane :) Co do id :: Void -> Void chyba wynika z wymagań kategorii i nie ma co się przywiązywać, że wygląda praktycznie jak absurd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1