Teoria kategorii dla programistów - challenges

Odpowiedz Nowy wątek
2019-01-10 09:17
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".
edytowany 1x, ostatnio: yarel, 2019-01-10 09:17
Chyba znalazłem błąd, jednak, z Unit do Bool, nie powinny być dwie strzałki? - lion137 2019-01-10 13:05
Powinny być ;-) Jednak liczbę strzałek zredukowałem, a wypisałem nazwy funkcji. Są więc dwa morfizmy z Unit -> Bool: True i False - yarel 2019-01-10 13:06
No i koniecznie muszą być złożenia. - lion137 2019-01-10 13:15

Pozostało 580 znaków

2019-01-10 11:48
0

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


Pozostało 580 znaków

2019-01-10 12:20
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?

edytowany 1x, ostatnio: yarel, 2019-01-10 12:20

Pozostało 580 znaków

2019-01-10 12:46
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.


Pozostało 580 znaków

2019-01-10 13:11
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ść :)

No właśnie, napisałem poniżej:) - lion137 2019-01-10 13:12

Pozostało 580 znaków

2019-01-10 13:12
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.


Pozostało 580 znaków

2019-01-10 13:18
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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