Teoria kategorii dla programistów - challenges

Odpowiedz Nowy wątek
2019-01-10 09:17

Rejestracja: 5 lat temu

Ostatnio: 4 minuty temu

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

Rejestracja: 3 lata temu

Ostatnio: 9 godzin temu

0

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


Pozostało 580 znaków

2019-01-10 12:20

Rejestracja: 5 lat temu

Ostatnio: 4 minuty temu

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

Rejestracja: 3 lata temu

Ostatnio: 9 godzin temu

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

Rejestracja: 5 lat temu

Ostatnio: 4 minuty temu

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

Rejestracja: 3 lata temu

Ostatnio: 9 godzin temu

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

Rejestracja: 5 lat temu

Ostatnio: 4 minuty temu

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

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