Přirozená transformace
V teorii kategorií je přirozená transformace způsob, jakým se navzájem transformují dva funktory mezi stejnými kategoriemi tak, že se zachovává vnitřní struktura (tzn. skládání morfismů) příslušných kategorií. Po kategoriích a funktorech jsou přirozené transformace jedním ze základních konceptů teorie kategorií, objevují se tedy ve většině jejích aplikací.
Definice
Mějme dvě kategorie a dva funktory mezi nimi: . Přirozená transformace z do pak je soubor morfismů v kategorii obsahující pro každé jednu složku , přičemž pro každý morfismus (v kategorii ) platí
- .
Tato podmínka vyjadřuje, že existuje následující komutativní diagram (zobrazující morfismy v kategorii ):
Jinými slovy, definice přirozené transformace říká, že pro každý morfismus v kategorii existuje v kategorii právě jeden morfismus . V případě je tímto morfismem , obecně pak výsledný morfismus tvoří diagonálu ve výše zobrazeném komutativním diagramu, která je jednoznačná právě díky komutativnosti tohoto diagramu (a přirozenou transformaci pak lze chápat jako mapování morfismů na komutativní čtverce).
V případě, že složky jsou pro každé izomorfismem, označuje se jako přirozený izomorfismus (též přirozená ekvivalence nebo ekvivalence funktorů).
Příkladem izomorfismu používaným ve funkcionálním programování je
- .
Skládání přirozených transformací
Přirozené transformace lze též skládat; existují přitom dva způsoby, jakým na sebe mohou skládané transformace navazovat, podle běžného způsobu znázornění na diagramu se tyto dva způsoby skládání označují jako vertikální a horizontální:
Jsou-li tři funktory mezi danými dvěma kategoriemi a přirozené transformace mezi těmito funktory, pak můžeme tyto dvě transformace složit (vertikálně), přičemž platí
- .
Vertikální skládání je tedy asociativní a má identitu (identitní přirozenou transformaci transformující funktor sám na sebe). Díky tomu se lze pro každou dvojici kategorií dívat na soubor všech funktorů spolu s přirozenými transformacemi mezi nimi jako na kategorii; viz kategorie funktorů.
Vedle toho můžeme definovat také horizontální skládání: máme-li dvě dvojice funktorů a a dvě odpovídající přirozené transformace a , můžeme jejich horizontálním složením získat přirozenou transformaci mezi složenými funktory, jež je vzhledem k vlastnostem přirozených transformací dobře definovaná.
Horizontální a vertikální skládání lze kombinovat, neboť platí
Funkcionální programování
Ve funkcionálním programování odpovídají funktorům (přesněji endofunktorům v kategorii typů daného programovacího jazyka a funkcí mezi nimi) generické typy, které poskytují operaci fmap mapující funkce na funkce. Přirozenou transformací pak je generická funkce mapující dva generické typy mezi sebou. Pokud například existují generické typy List<T>
a Set<T>
, odpovídá přirozené transformaci generická funkce List<T> → Set<T>
. Podmínka komutativnosti přirozené transformace pak znamená, že dvě možnosti, jak provést konverzi např. z List<int>
na Set<string>
(buď nejprve zkonvertovat List<int>
na List<string>
pomocí fmap a následně zkonvertovat List<string>
na Set<string>
pomocí generické funkce pro transformaci, anebo naopak nejprve ztransformovat List<int>
na Set<int>
a poté aplikovat fmap pro konverzi Set<int>
na Set<string>
) musí dát stejný výsledek.
Přirozené transformace jsou také nedílnou součástí definice monád a monadických operátorů.
Reference
- LEINSTER, Tom. Basic Category Theory. Cambridge: Cambridge University Press, 2014. (Cambridge Studies in Advanced Mathematics; sv. 143). Bibcode 2016arXiv161209375L. arXiv:1612.09375 [math.CT]. Kapitola 1.3 Natural transformations, s. 27–38.