Teoria kategorii dla informatyków/Ćwiczenia 11: Monady: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Pqw (dyskusja | edycje)
Pqw (dyskusja | edycje)
mNie podano opisu zmian
Linia 1: Linia 1:
==Zadanie 11.1== {{kotwica|mod11:zad1|}}
==Zadanie 11.1== {{kotwica|mod11:zad1|}}


Linia 26: Linia 25:
<center>[[Grafika:tk-11.9.png]]</center>
<center>[[Grafika:tk-11.9.png]]</center>


Pozbywając się nazw obiektów, podstawiając <math>\mu</math> za <math>G\varepsilon_F</math> oraz <math>T=GF</math> mamy na koniec:
Pozbywając się nazw obiektów, podstawiając <math>\mu</math> za <math>G\varepsilon_F</math> oraz <math>T=GF</math>, mamy na koniec:


<center>[[Grafika:tk-11.10.png]]</center>
<center>[[Grafika:tk-11.10.png]]</center>
Linia 78: Linia 77:
<center>[[Grafika:tk-11.14.png]]</center>
<center>[[Grafika:tk-11.14.png]]</center>


To kończy dowód, że <math>F^{\mathbb{T}}\dashv G^{\mathbb{T}}</math>. Indukowana monada to
To kończy dowód, że <math>F^{\mathbb{T}}\dashv G^{\mathbb{T}}</math>. Indukowana monada to:


<center><math>(G^{\mathbb{T}}F^{\mathbb{T}}, \eta, G^{\mathbb{T}}\varepsilon_{^{\mathbb{T}}}) = (T,\eta,\mu)=\mathbb{T}.</math></center>
<center><math>(G^{\mathbb{T}}F^{\mathbb{T}}, \eta, G^{\mathbb{T}}\varepsilon_{^{\mathbb{T}}}) = (T,\eta,\mu)=\mathbb{T}.</math></center>
Linia 89: Linia 88:
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka:''' <div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka:''' <div class="mw-collapsible-content" style="display:none">


Wykorzystaj konstrukcję kategorii Eilenberga-Moore'a. Zauważ, że <math>P^{\mathbb{T}}</math> to poset izomorficzny z podzbiorem <math>P</math> składającym się z punktów stałych funkcji <math>T</math>.
Wykorzystaj konstrukcję kategorii Eilenberga - Moore'a. Zauważ, że <math>P^{\mathbb{T}}</math> to poset izomorficzny z podzbiorem <math>P</math> składającym się z punktów stałych funkcji <math>T</math>.
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie:''' <div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie:''' <div class="mw-collapsible-content" style="display:none">


Po pierwsze, zobaczmy jak wyglądają <math>\mathbb{T}</math>-algebry. Są to pary <math>(x,Tx\leq x)</math> dla <math>x\in P</math>, czyli te spośród elementów <math>x\in P</math>, dla których prawdą jest, że <math>Tx\leq x</math>. Ale przecież własności monady implikują, że zawsze <math>x\leq Tx</math>, a zatem <math>\mathbb{T}</math>-algebry to punkty stałe funkcji <math>T</math> .Morfizm <math>\mathbb{T}</math>-algebr <math>(x,Tx\leq x)</math>, <math>(y,Ty\leq y)</math> istnieje, o ile <math>x\leq y</math>. A zatem <math>P^{\mathbb{T}}</math> jest częściowym porządkiem izomorficznym ze zbiorem <math>(\mathrm{fix}(T),\leq)</math> (punkty stałe <math>T</math> z porządkiem indukowanym z <math>P</math>). Funktor <math>G^{\mathbb{T}}</math>, który dla prostoty oznaczymy tu <math>g</math>, można zatem interpretować jako zanurzenie <math>g\colon \mathrm{fix}(T)\to P</math>. Funktor <math>F^{\mathbb{T}}</math>, oznaczany <math>f</math>, jest funkcją monotoniczną typu <math>P\to \mathrm{fix}(T)</math>, która każdemu elementowi <math>x\in P</math> przypisuje punkt stały <math>Tx\in P</math>. Wniosek: <math>f</math> jest obcięciem funkcji <math>T</math> do typu <math>P\to \mathrm{fix}(T)</math>. Oczywiście wtedy <math>fgx=x</math> dla dowolnego <math>x\in P</math>. Pokażmy, że <math>f\dashv g</math>, czyli dla dowolnych <math>a,b\in P</math>, <math>fa\leq b</math> wtedy i tylko wtedy, gdy <math>a\leq gb</math> w <math>P</math>. Załóżmy <math>fa\leq b</math>. Wówczas z monotoniczności <math>g</math> dostajemy <math>gfa\leq gb</math>. Z definicji monady wynika, że <math>a\leq Ta</math>, co czytamy też jako <math>a\leq gfa</math>, co w końcu daje: <math>a\leq gfa\leq gb</math>. Odwrotnie, załóżmy <math>a\leq gb</math>. Z monotoniczności <math>f</math> i faktu <math>fg=1_P</math>, co zauważyliśmy w poprzednim paragrafie, mamy natychmiast: <math>fa\leq fgb=1_Pb=b</math>. To kończy dowód faktu, że <math>f\dashv g</math>. </div></div>
Po pierwsze, zobaczmy jak wyglądają <math>\mathbb{T}</math>-algebry. Są to pary <math>(x,Tx\leq x)</math> dla <math>x\in P</math>, czyli te spośród elementów <math>x\in P</math>, dla których prawdą jest, że <math>Tx\leq x</math>. Ale przecież własności monady implikują, że zawsze <math>x\leq Tx</math>, a zatem <math>\mathbb{T}</math>-algebry to punkty stałe funkcji <math>T</math> .Morfizm <math>\mathbb{T}</math>-algebr <math>(x,Tx\leq x)</math>, <math>(y,Ty\leq y)</math> istnieje, o ile <math>x\leq y</math>. A zatem <math>P^{\mathbb{T}}</math> jest częściowym porządkiem izomorficznym ze zbiorem <math>(\mathrm{fix}(T),\leq)</math> (punkty stałe <math>T</math> z porządkiem indukowanym z <math>P</math>). Funktor <math>G^{\mathbb{T}}</math>, który dla prostoty oznaczymy tu <math>g</math>, można zatem interpretować jako zanurzenie <math>g\colon \mathrm{fix}(T)\to P</math>. Funktor <math>F^{\mathbb{T}}</math>, oznaczany <math>f</math>, jest funkcją monotoniczną typu <math>P\to \mathrm{fix}(T)</math>, która każdemu elementowi <math>x\in P</math> przypisuje punkt stały <math>Tx\in P</math>. Wniosek: <math>f</math> jest obcięciem funkcji <math>T</math> do typu <math>P\to \mathrm{fix}(T)</math>. Oczywiście wtedy <math>fgx=x</math> dla dowolnego <math>x\in P</math>. Pokażmy, że <math>f\dashv g</math>, czyli dla dowolnych <math>a,b\in P</math>, <math>fa\leq b</math> wtedy i tylko wtedy, gdy <math>a\leq gb</math> w <math>P</math>. Załóżmy <math>fa\leq b</math>. Wówczas z monotoniczności <math>g</math> dostajemy <math>gfa\leq gb</math>. Z definicji monady wynika, że <math>a\leq Ta</math>, co czytamy też jako <math>a\leq gfa</math>, co w końcu daje: <math>a\leq gfa\leq gb</math>. Odwrotnie, załóżmy <math>a\leq gb</math>. Z monotoniczności <math>f</math> i faktu <math>fg=1_P</math>, co zauważyliśmy w poprzednim paragrafie, mamy natychmiast: <math>fa\leq fgb=1_Pb=b</math>. To kończy dowód faktu, że: <math>f\dashv g</math>. </div></div>




Linia 130: Linia 129:
&=& \mu_X((1_M\times \eta_X)(e,x))\\
&=& \mu_X((1_M\times \eta_X)(e,x))\\
&=& \mu_X((T\eta_X)(e,x))\\
&=& \mu_X((T\eta_X)(e,x))\\
&=& (\mu_X\circ T\eta_X)(e,x))
&=& (\mu_X\circ T\eta_X)(e,x)),
\endaligned
\endaligned
</math></center>
</math></center>


co dowodzi, ze <math>(\mu_X\circ \eta){TX})=1_{TX}=(\mu_X\circ T\eta_X)</math>.
co dowodzi, że <math>(\mu_X\circ \eta){TX})=1_{TX}=(\mu_X\circ T\eta_X)</math>.


Po drugie,
Po drugie:


<center><math>\aligned
<center><math>\aligned
Linia 143: Linia 142:
&=& \mu_X(k,(m*n,x))\\
&=& \mu_X(k,(m*n,x))\\
&=& (k*m*n,x))\\
&=& (k*m*n,x))\\
&=& \mu_X((k*m,(n,x)))\\ &=& (\mu_X\circ\mu_{TX})(k,(m,(n,x))).
&=& \mu_X((k*m,(n,x)))\\ &=& (\mu_X\circ\mu_{TX})(k,(m,(n,x))),
\endaligned</math></center>
\endaligned</math></center>


Linia 173: Linia 172:
  <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie:''' <div class="mw-collapsible-content" style="display:none">
  <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie:''' <div class="mw-collapsible-content" style="display:none">


Algebrą dla tej monady jest każda para <math>(\mathcal{P} X,h\colon \mathcal{P} X\to X)</math>, która spełnia: <math>h(\{ x\})=x</math> oraz dla dowolnego <math>\alpha\subseteq \mathcal{P} X</math>
Algebrą dla tej monady jest każda para <math>(\mathcal{P} X,h\colon \mathcal{P} X\to X)</math>, która spełnia: <math>h(\{ x\})=x</math> oraz dla dowolnego <math>\alpha\subseteq \mathcal{P} X</math>:


<center><math>h(\{h(A)\mid A\in \alpha\})= h(\bigcup\alpha).</math></center>
<center><math>h(\{h(A)\mid A\in \alpha\})= h(\bigcup\alpha).</math></center>


Mając strukturę algebry na <math>X</math> możemy teraz zdefiniować częściowy porządek na <math>X</math> jako:
Mając strukturę algebry na <math>X</math>, możemy teraz zdefiniować częściowy porządek na <math>X</math> jako:


<center><math>x\leq y \iff h(\{x,y\})=y.</math></center>
<center><math>x\leq y \iff h(\{x,y\})=y.</math></center>
Linia 214: Linia 213:
co daje <math>h_{FX} = G\varepsilon_{FX}</math>. Widzimy więc, jak strzałka <math>h</math> jest zdefiniowana na obrazie <math>F</math>. A jak jest w ogólnym przypadku?
co daje <math>h_{FX} = G\varepsilon_{FX}</math>. Widzimy więc, jak strzałka <math>h</math> jest zdefiniowana na obrazie <math>F</math>. A jak jest w ogólnym przypadku?


Niech <math>A\in \mathbf{D}_0</math>. Skoro <math>\varepsilon_A\colon FGA\to A</math> jest strzałką w <math>\mathbf{D}</math>, to strzałka <math>K(\varepsilon_A)\colon K(FGA)\to K(A)</math> jest z definicji funktora <math>K</math> morfizmem <math>\mathbb{T}</math>-algebr nad <math>\mathbf{C}</math>. Dokładnie mówiąc, jest to morfizm pomiędzy algebrą <math>K(FGA)=(GFGA,h_{FGA}=G\varepsilon_{FGA})</math> i algebrą <math>(GA,h_A)</math>. To znaczy, że poniższy diagram komutuje:
Niech <math>A\in \mathbf{D}_0</math>. Skoro <math>\varepsilon_A\colon FGA\to A</math> jest strzałką w <math>\mathbf{D}</math>, to strzałka <math>K(\varepsilon_A)\colon K(FGA)\to K(A)</math> jest z definicji funktora <math>K</math> morfizmem <math>\mathbb{T}</math>-algebr nad <math>\mathbf{C}</math>. Dokładnie mówiąc, jest to morfizm pomiędzy algebrą <math>K(FGA)=(GFGA,h_{FGA}=G\varepsilon_{FGA})</math> a algebrą <math>(GA,h_A)</math>. To znaczy, że poniższy diagram komutuje:


<center>[[Grafika:tk-11.16.png]]</center>
<center>[[Grafika:tk-11.16.png]]</center>


Używając faktu, że <math>\varepsilon</math> jest kojednością sprzężenia, zgodnie z [[Teoria_kategorii_dla_informatyków/Wykład_9:_Sprzężenia_I#mod9:thm:adjtriangle|Twierdzeniem 9.3]] dostajemy
Używając faktu, że <math>\varepsilon</math> jest kojednością sprzężenia, zgodnie z [[Teoria_kategorii_dla_informatyków/Wykład_9:_Sprzężenia_I#mod9:thm:adjtriangle|Twierdzeniem 9.3]], dostajemy:


<center><math>h_A = h_A\circ 1_{GFGA} = h_A\circ GFG\varepsilon_A\circ GF\eta_{GA} = G\varepsilon_A\circ G\varepsilon_{FGA}\circ GF\eta_{GA} = G\varepsilon_A\circ 1_{GA}= G\varepsilon_A.</math></center>
<center><math>h_A = h_A\circ 1_{GFGA} = h_A\circ GFG\varepsilon_A\circ GF\eta_{GA} = G\varepsilon_A\circ G\varepsilon_{FGA}\circ GF\eta_{GA} = G\varepsilon_A\circ 1_{GA}= G\varepsilon_A.</math></center>


A zatem, jeśli <math>K</math> istnieje, to musimy mieć
A zatem, jeśli <math>K</math> istnieje, to musimy mieć:


<center><math>K(f\colon A\to B)=(GA,G\varepsilon_A)\stackrel{Gf}{\to}(GB,G\varepsilon_B).</math></center>
<center><math>K(f\colon A\to B)=(GA,G\varepsilon_A)\stackrel{Gf}{\to}(GB,G\varepsilon_B).</math></center>


Łatwo sprawdzić, że ten przepis rzeczywiście definiuje funktor <math>K</math>, który spełnia zarówno równość <math>KF=F^{\mathbb{T}}</math>, jak i <math>G^{\mathbb{T}}K=G</math>. Gdyby istniały dwa takie funktory <math>K_1,K_2</math>, to skoro <math>G^{\mathbb{T}}K_1 = G = G^{\mathbb{T}}K_2</math>, wierność <math>G^{\mathbb{T}}</math> implikuje <math>K_1=K_2</math>, co kończy dowód. </div></div>
Łatwo sprawdzić, że ten przepis rzeczywiście definiuje funktor <math>K</math>, który spełnia zarówno równość <math>KF=F^{\mathbb{T}}</math>, jak i <math>G^{\mathbb{T}}K=G</math>. Gdyby istniały dwa takie funktory <math>K_1,K_2</math>, to skoro <math>G^{\mathbb{T}}K_1 = G = G^{\mathbb{T}}K_2</math>, wierność <math>G^{\mathbb{T}}</math> implikuje <math>K_1=K_2</math>, co kończy dowód. </div></div>

Wersja z 12:22, 27 lis 2006

==Zadanie 11.1==

Udowodnij, że jeśli FG oraz T=GF, to naturalność ε implikuje, że poniższy diagram:

komutuje.

Rozwiązanie:


==Zadanie 11.2==

Niech 𝕋=(T,η,μ) będzie monadą nad 𝐂. Pokaż że dla dowolnego X𝐂0, para (TX,μX) jest 𝕋-algebrą.

Wskazówka:
Rozwiązanie:


==Zadanie 11.3==

Udowodnij Twierdzenie 11.2.

Wskazówka:
Rozwiązanie:

==Zadanie 11.4==

Niech 𝕋=(T:PP,1PT,TTT) będzie monadą nad posetem (P,). Pokaż, od jakiego sprzężenia pochodzi ta monada.

Wskazówka:
Rozwiązanie:


==Zadanie 11.5==

Udowodnij, że (𝒫,{...},) jest monadą nad 𝐒𝐞𝐭 dla kowariantnego funktora potęgowego 𝒫:𝐒𝐞𝐭𝐒𝐞𝐭.

Rozwiązanie:

==Zadanie 11.6==

Niech (M,*,e) będzie monoidem. Udowodnij, że funktor

M×():𝐒𝐞𝐭𝐒𝐞𝐭

wraz z transformacjami naturalnymi ηX(x):=(e,x) oraz μX(m2*(m1,x)):=(m2*m1,x) definiuje monadę 𝕋, której 𝕋-algebrami są M-automaty.

Rozwiązanie:

==Zadanie 11.7==

Udowodnij, że funktor ():𝐏𝐨𝐬𝐏𝐨𝐬, który dodaje do posetu nowy element najmniejszy wraz z funktorem zapominania indukuje monadę nad 𝐏𝐨𝐬. Jakie są algebry dla tej monady?

Wskazówka:
Rozwiązanie:

==Zadanie 11.8==

Wykaż, że algebrami dla monady nad 𝐒𝐞𝐭 indukowanej przez kowariantny funktor potęgowy 𝒫 są półkraty zupełne i homomorfizmy tych półkrat (tzn. funkcje zachowujące dowolne suprema).

Wskazówka:
Rozwiązanie:


==Zadanie 11.9==

Wykaż, że sprzężenie F𝕋G𝕋, od którego pochodzi monada 𝕋 jest obiektem końcowym pewnej kategorii, w następującym sensie: jeśli FG dla F:𝐂𝐃:G jest sprzężeniem, które indukuje 𝕋, to istnieje dokładnie jeden funktor K:𝐃𝐂𝕋 taki, że dwa poniższe diagramy komutują:

Taki funktor K:𝐃𝐂𝕋 nazywa się funktorem porównawczym (ang. comparison functor) dla sprzężenia FG.

Uwaga
Dowodzi się, że sprzężenie F𝕋G𝕋 rzeczywiście nie jest jedynym, które indukuje 𝕋, a zatem K w ogólności nie trywializuje się. Okazuje się, że dla 𝐂 można skonstruować tak zwaną kategorię Kliesliego oznaczaną 𝐂𝕋, która jest w ogólności różna od 𝐂𝕋 i parę funktorów F𝕋:𝐂𝐂𝕋:G𝕋 z F𝕋G𝕋, gdzie to sprzężenie indukuje 𝕋. Dalsze wiadomości na ten temat można znaleźć na przykład w podręczniku Saundersa Mac Lane'a pt. Categories for the Working Mathematician, Springer, 1997.
Wskazówka:
Rozwiązanie: