Skip to content

Commit 22507ff

Browse files
committed
Diagramas, conos y álgebras
1 parent de8140e commit 22507ff

File tree

1 file changed

+81
-6
lines changed

1 file changed

+81
-6
lines changed

TFG.tex

+81-6
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,25 @@ \subsection{Functores en Haskell}
447447
\end{minted}
448448
\end{example}
449449

450+
\section{Diagramas y conos}
451+
En estas páginas hemos trabajado a menudo con categorías con infinitos objetos e innumerables morfismos.
452+
Sin embargo, resulta de interés estudiar una estructura particular de objetos y morfismos que podamos encontrar dentro de esa categoría.
453+
Para ello, formalizaremos un concepto que hemos manejado antes, los diagramas.
454+
\begin{definition}
455+
Sean $\cat$ y $\mathcal{I}$ dos categorías. Un \emph{diagrama} de $\cat$ con \emph{forma} $\mathcal{I}$ es un functor $D \colon \mathcal{I} \to \cat$.
456+
\end{definition}
457+
Es decir, técnicamente \emph{diagrama} será sólo otra palabra para \emph{functor}.
458+
En la práctica, usaremos \emph{diagrama} cuando querramos distinguir una estructura particular dentro de una categoría.
459+
Esa estructura estará expresada en la forma del diagrama, $\mathcal{I}$ en la definición.
460+
461+
\begin{example}
462+
Sea $\mathcal{I}$ la siguiente categoría:
463+
\[ \begin{tikzcd}
464+
A & B \arrow[l,"\leftarrow"] \arrow[r,"\rightarrow"] & C
465+
\end{tikzcd} \]
466+
Entonces el diagrama $D \colon \mathcal{I} \to \cat$ es llamado \emph{span}.
467+
\end{example}
468+
450469
\section{Construcciones universales}
451470
Podemos caracterizar ciertos objetos en una categoría por alguna propiedad especial que cumplan. En lugar de pedir que sólo haya un objeto que cumpla dicha propiedad, nos limitamos a pedir que todos los objetos que cumplan la propiedad sean isomorfos. Estas propiedades son llamadas \emph{propiedades universales}.
452471

@@ -492,7 +511,7 @@ \chapter{F-álgebras}
492511
La igualdad de estos dos morfismos nos dará la fundación de la categoría de $F$-álgebras.
493512
Es más, como estos morfismos preservan bien la estructura de $F$-álgebran, les daremos el nombre (honorífico) de $F$-homomorfismo:
494513

495-
\begin{proposition}
514+
\begin{proposition}\label{prop:fmorfismo}
496515
Sea $\cat$ una categoría y $F$ un endomorfismo en $\cat$.
497516
Sea $Alg_F$ la colección de $F$-álgebras con homomorfismos $f \colon (A,\alpha) \to (B,\beta)$ tal que:
498517
\begin{itemize}
@@ -556,14 +575,70 @@ \chapter{F-álgebras}
556575
Luego $\alpha$ tiene inversa y debe ser isomorfismo.
557576
\end{proof}
558577

559-
El homomorfismo $u$ de la demostración recibe el imponente nombre de \emph{catamorfismo}.
578+
Dado un $F$-álgebra inicial $(A,\alpha)$, para todo otro $F$-áĺgebra $(B,\beta)$, al homomorfismo único de $(A,\alpha)$ a $(B,\beta)$ le daremos el imponente nombre de \emph{catamorfismo}.
579+
Por ejemplo, el homomorfismo $u$ de la demostración era un catamorfismo a $(F A, F \alpha)$.
560580

561581
\section{Catamorfismos en Haskell}
562582

563-
Para ilustrar la utilidad de los catamorfismos, vamos a construir una álgebra inicial en \code{Hask} sobre el functor \code{[]} (listas).
564-
En este caso, un \code{[]}-álgebra será un par \code{(a,alpha)} donde \code{alpha :: [a] -> a}.
565-
Digamos que \code{a = Int}
566-
Para que esta $F$-álgebra sea inicial, necesitamos un \code{cat :: Int -> [Int]} que sea la inversa de \code{alpha}.
583+
Debemos empezar implementando álgebras en Haskell:
584+
\begin{minted}{haskell}
585+
type Algebra f a = f a -> a
586+
\end{minted}
587+
Hay que tener en cuenta que no estamos imponiendo que \code{f} sea un functor, ya que Haskell no permite imponer restricciones a constructores de datos sin recurrir a GADTs\footnote{\url{https://wiki.haskell.org/Data_declaration_with_constraint}}.
588+
589+
Lo siguiente que necesitamos es implementar el punto fijo de \code{f}:
590+
\begin{minted}{haskell}
591+
newtype Fix f = U (f (Fix f))
592+
\end{minted}
593+
Como \code{Fix} tiene un único constructor, hay un isomorfismo entre \code{Fix f} y \code{f (Fix f)}.
594+
Este isomorfismo es \code{U}, y su inversa es:
595+
\begin{minted}{haskell}
596+
unFix :: Fix f -> f (Fix f)
597+
unFix (U f) = f
598+
\end{minted}
599+
600+
Ahora que sabemos que (\code{Fix f}, \code{U}) es el álgebra inicial, sabemos que existe un catamorfismo de este álgebra a todas las demás álgebras.
601+
Consideramos cualquier otra álgebra (\code{b}, \code{g}), con \code{g :: Algebra f b}. sea \code{m :: Fix f -> b} el correspondiente catamorfismo, entonces por \ref{prop:fmorfismo}:
602+
603+
\[
604+
\begin{tikzcd}
605+
{f (Fix f)} \arrow[r,"fmap\ m"] \arrow[d,"U"] & f b \arrow[d,"g"]\\
606+
{Fix f} \arrow[r,"m"] & b
607+
\end{tikzcd}
608+
\]
609+
610+
Podemos invertir \code{U} con \code{unFix}, luego la conmutatividad del diagrama es equivalente a que:
611+
\begin{minted}{haskell}
612+
m = g . fmap m . unFix
613+
\end{minted}
614+
Usamos esto para definir recursivamente el catamorfismo:
615+
\begin{minted}{haskell}
616+
cata :: (Functor f) => (Algebra f b) -> (Fix f -> b)
617+
cata g = g . fmap (cata g) . unFix
618+
\end{minted}
619+
620+
Veamos un ejemplo con el functor \code{Maybe}
621+
\begin{example}
622+
Especialicemos el código anterior para \code{Maybe}:
623+
\begin{minted}{haskell}
624+
type AlgebraM a = Algebra Maybe a
625+
type FixM = Fix Maybe
626+
\end{minted}
627+
Por ahora, no dice mucho. Pero al añadir las siguientes de líneas obtenemos una perspectiva interesante:
628+
\begin{minted}{haskell}
629+
type Nat = FixM
630+
631+
cero :: Nat
632+
cero = U Nothing
633+
suc :: Nat -> Nat
634+
suc = U . Just
635+
\end{minted}
636+
Es decir, los naturales pueden verse como el punto fijo del functor \code{Maybe}.
637+
\end{example}
638+
%Para ilustrar la utilidad de los catamorfismos, vamos a construir una álgebra inicial en \code{Hask} sobre el functor \code{[]} (listas).
639+
%En este caso, un \code{[]}-álgebra será un par \code{(a,alpha)} donde \code{alpha :: [a] -> a}.
640+
%Digamos que \code{a = Int}
641+
%Para que esta $F$-álgebra sea inicial, necesitamos un \code{cat :: Int -> [Int]} que sea la inversa de \code{alpha}.
567642

568643
\backmatter
569644

0 commit comments

Comments
 (0)