Cuvântul "algebră" poate avea mai multe semnificații în matematică dar în contextul teoriei categoriilor când spunem "algebră" ne vom referii în general la F-algebre sau algebre pentru endofunctori dacă nu se specifică altfel. În acest context, o algebră încapsulează noțiunea de structură algebraică și este o noțiune foarte utilă pentru a definii structuri de date, mai ales structuri recursive.
Definiție: Algebră pentru un endofunctor
Fie un endofunctor. O algebră a lui este o pereche unde , numit și carrier, și . Dacă din context morfismul este cunoscut sau unic atunci carrier-ul este referit ca fiind algebra.
Un homomorfism între algebre și este un morfism pentru care , adică următoarea diagramă comută:
Din algebre și homomorfisme între acestea pentru endofunctorul putem forma o categorie iar dacă există obiectul inițial în acea categorie acesta este algebra inițială, adică avem câte un homomorfism unic de la acea algebră la oricare algebră a lui . Vom nota carrier-ul pentru algebra inițială a lui cu . Algebra inițială este un concept foarte important pentru că putem defini tipuri de date recursiv.
De asemenea, ne vom referi la ca fiind signatura algebrei.
Lema lui Lambek
Dacă pentru un endofunctor există algebra inițială atunci este izomorf cu prin .
Pentru că este tot o algebră și este inițial atunci există un morfism unic pentru care , dar cum este inițială și homomorfismul unic către ea însăși este dat de identitatea rezultă că și atunci . Putem vedea cum se leagă toate aceste lucruri în diagrama următoare:
Prin algebra inițială putem defini tipuri de date inductive în semantică categorială pentru că algebra inițială este cel mai mic punct fix (least fixed point) a lui .
Putem ilustra acest lucru prin următoarele exemple în :
-
pentru functorul , unde este mulțimea singleton, algebra inițială este mulțimea numerelor naturale . Numerele naturale ca tip de date pot fi definite recursiv ca fiind , din definiția acestei algebre unde trebuie să existe și faptul că avem o uniune disjunctă de mulțimi poate fi împărțită în două funcții, un punct și o funcție de succesiune și de aici obținem cei doi constructori de tip. Unde intervine recursivitatea este în unicitatea funcției succesiune pentru că este unic și inversabil iar inversa trebuie în mod necesar să fie incluziunea .
-
pentru functorul algebra inițială este mulțimea listelor de tip , .
-
pentru functorul algebra inițială este mulțimea arborilor binari cu noduri cu valori de tip , .
Catamorfisme
Mofismul unic de la algebra inițială pentru un endofunctor la o altă algebră se numește catamorfism notat .
Un catamorfism este conceptual o operație de tip fold, adică, transformăm valorile unui tip de date inductiv cum sunt listele într-o valoare de tip . Pentru catamorphism avem următoarea diagramă comutativă:
Conform definiției algebrei , dar cum este algebra inițială este invesabilă și atunci putem calcula recursiv .
Să luăm cazul unde , dacă luam un tip cu atunci . Deci mapează , iar funcția poate fi spartă în , și .
Astfel, putem rescrie ca un fold la dreapta . Practic, dacă avem cu atunci . Este important de menționat că corespunde cu fold-ul la dreapta, nu la stânga în acest caz.
Cu alte cuvinte, dacă avem o algebră, transformă un morphism într-un morphism . Aici este un lucru foarte important de observat, cum este signatura algebrei aceasta servește ca un caz de bază pentru aplicarea catamorfismului, adică transformăm tratarea cazurilor de bază pentru a obține o valoare de tip într-o operație pe valorile algebrei inițiale (care este un tip inductiv) ca să obținem o valoare agregată de tip .
Definiție: Coalgebră pentru un endofunctor
Fie un endofunctor. O coalgebră a lui este o pereche unde , numit și carrier, și . Dacă din context morfismul este cunoscut sau unic atunci carrier-ul este referit ca fiind coalgebra.
Un homomorfism între coalgebre și este un morfism pentru care , adică următoarea diagramă comută:
Din coalgebre și homomorfisme între acestea pentru endofunctorul putem forma o categorie iar dacă există obiectul final în acea categorie acesta este algebra finală, adică avem câte un homomorfism unic de la oricare coalgebră a lui la această coalgebră. Vom nota carrier-ul pentru coalgebra finală a lui cu . Coalgebra inițială este un concept foarte important pentru că putem defini tipuri de date corecursiv.
De asemenea, ne vom referi la ca fiind signatura coalgebrei.
Corolarul lemei lui Lambek pentru coalgebre
Dacă pentru un endofunctor există coalgebra finală atunci este izomorf cu prin .
Pentru că este tot o coalgebră și este finală atunci există un morfism unic pentru care , dar cum este finală și homomorfismul unic către ea însăși este dat de identitatea rezultă că și atunci . Putem vedea cum se leagă toate aceste lucruri în diagrama următoare:
Prin coalgebra finală putem defini tipuri de date coinductive în semantică categorială pentru că coalgebra finală este cel mai mare punct fix (greatest fixed point) a lui .
Anamorfisme
Mofismul unic către coalgebra finală pentru un endofunctor de la o altă coalgebră se numește anamorfism notat .
Un anamorfism este conceptual o operație de tip unfold, adică, transformăm o valoare a unui tip de date în valorile unui tip de date coinductiv cum sunt stream-urile. Pentru anaamorphism avem următoarea diagramă comutativă:
Conform definiției coalgebrei , dar cum este coalgebra finală este invesabilă și atunci putem calcula corecursiv .
Să luăm cazul unde , dacă luam un tip cu atunci . Deci mapează , iar funcția poate fi spartă în , și .
Astfel, este chiar unfold la dreapta .
Cu alte cuvinte, dacă avem o coalgebră, transformă un morphism într-un morphism . Aici este un lucru foarte important de observat, cum este signatura coalgebrei aceasta servește ca un generator pentru aplicarea anamorfismului, adică ne folosim de o valoare de tip ca să producem valorile coalgebrei finale (care este un tip coinductiv).