Próbuję objąć moją głowę algebrami F, a this article wykonuje całkiem niezłą robotę. Rozumiem pojęcie teorii dualnej w kategorii, ale trudno mi zrozumieć, w jaki sposób F-coalgebras (dual-algebr F) odnosi się do leniwych struktur danych w Haskell.Są domyślnie typem algebry danych haskell?
F-algebry opisywane są za pomocą funkcji endofunctor: F a -> a, co ma sens, jeśli myśli się o F a jako wyrażeniu, a także o wyniku oceny tego wyrażenia, jak wyjaśnia objaśniony artykuł to.
Będąc dualią F-algebr, odpowiednia funkcja dla F-węgierki byłaby -> F a. Wikipedia mówi, że F-coalgebras mogą być używane do tworzenia nieskończonych, leniwych struktur danych. W jaki sposób a -> F functon pozwala na tworzenie nieskończonych, leniwych struktur danych? Mając to na uwadze, skoro Haskell jest leniwy, to większość typów danych znajduje się w Haskell F-coalgebrach zamiast F-algebrach? Czy algebry F nie są leniwie oceniane?
Jeśli typy danych (lub co najmniej te, dla których są zdolne do wyświetlania nieskończonych danych) oparte są na F-węglach w Haskell, na przykład funkcja -> F a dla list? Co to jest terminal F-coalgebra dla list?
Dokonywanie nieskończoną listę [1,2,3,4 ...] może wyglądać tak w Haskell:
list = 1 : map (+ 1) list
robi tego zastosowania F-coalgebras jakoś? Czy nieskończone struktury danych wymagają pojęcia leniwej oceny i rekurencji wraz z użyciem F-coalgebras? Czy coś mi umyka?
Czy Haskell jest niespójny, ponieważ pozwala rozwinąć się w nieskończoną strukturę danych? (co prowadzi do zwijania rozwinięcia nie kończącego się) –
Rozkłady w całkowitym/spójnym/Turingie niekompletne języki są jak generatory: nieskończony potencjał, ale potrzebują one * sterownika * do poruszania się. Haskell jest niekonsekwentny, ponieważ pozwala traktować rozwinięcia jako fałdy (unifikuje początkowe algebry i końcowe węgiel), a tym samym napędza nieskończoną rzecz samą w sobie. Jeśli znasz generatory Pythona, podobna rzecz dzieje się, gdy wywołasz 'list' na nieskończonym generatorze. –