Přirozená transformace

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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 \mathcal{C}, \mathcal{D} a dva funktory mezi nimi: F, G: \mathcal{C} \rightarrow \mathcal{D}. Přirozená transformace \eta z F do G pak je soubor morfismů v kategorii \mathcal{D} obsahující pro každé X \isin \mathcal{C} jednu složku \eta_X: F(X) \rightarrow G(X), přičemž pro každý morfismus f:X \rightarrow Y (v kategorii \mathcal{C}) platí : G(f) \circ \eta_X = \eta_Y \circ F(f).

Tato podmínka vyjadřuje, že existuje následující komutativní diagram (zobrazující morfismy v kategorii \mathcal{D}): :Komutativní diagram přirozené transformace η

Jinými slovy, definice přirozené transformace říká, že pro každý morfismus f: X \rightarrow Y v kategorii \mathcal{C} existuje v kategorii \mathcal{D} právě jeden morfismus F(X) \rightarrow G(Y). V případě f = 1_X je tímto morfismem \eta_X, 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 \eta_X jsou pro každé X izomorfismem, označuje se \eta jako přirozený izomorfismus (též přirozená ekvivalence nebo ekvivalence funktorů).

Příkladem izomorfismu používaným ve funkcionálním programování je : \textrm{Hom}(X \otimes Y,Z) \cong \textrm{Hom}(X,Z^Y).

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í: :Horizontální a vertikální skládání přirozených transformací

Jsou-li F,G,H: \mathcal{A} \rightarrow \mathcal{A'} tři funktory mezi danými dvěma kategoriemi a \alpha: F \rightarrow G, \beta: G \rightarrow H přirozené transformace mezi těmito funktory, pak můžeme tyto dvě transformace složit (vertikálně), přičemž platí : (\beta \circ \alpha)_X=\beta_X \circ \alpha_X.

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ů F, G: \mathcal{A} \rightarrow \mathcal{A'} a F', G': \mathcal{A'} \rightarrow \mathcal{A} a dvě odpovídající přirozené transformace \alpha: F \rightarrow G a \alpha': F' \rightarrow G', můžeme jejich horizontálním složením získat přirozenou transformaci (\alpha' * \alpha): F' \circ F \rightarrow G' \circ G 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í : (\beta' \circ \alpha') * (\beta \circ \alpha) = (\beta' * \beta) \circ (\alpha' * \alpha): F' \circ F \rightarrow H' \circ H

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. +more Pokud například existují generické typy List a Set, odpovídá přirozené transformaci generická funkce List → Set. Podmínka komutativnosti přirozené transformace pak znamená, že dvě možnosti, jak provést konverzi např. z List na Set (buď nejprve zkonvertovat List na List pomocí fmap a následně zkonvertovat List na Set pomocí generické funkce pro transformaci, anebo naopak nejprve ztransformovat List na Set a poté aplikovat fmap pro konverzi Set na Set) musí dát stejný výsledek.

Přirozené transformace jsou také nedílnou součástí definice monád a monadických operátorů.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top