aboutsummaryrefslogtreecommitdiff
path: root/present/script.txt
blob: a1ce2830415f1b372f539f85dfded662a87d241b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
(1) Buenos días, mi nombre es Juan Marín Noguera y voy a presentar mi
TFG sobre Teoría de Categorías, tutorizado por Alberto del Valle.

(2) Category theory is the study of mathematical structure. [SPC] It
is also called abstract nonsense because of its very abstract nature
but it has a wide range of application in mathematical practice, [SPC]
such as providing a common vocabulary of terms [SPC] like isomorphism,
product, kernel, or quotient space. [SPC] This facilitates learning
and applying some intuition acquired in one field of mathematics to
another one. [SPC] However, category theory goes beyond that and
provides mechanisms to formally transfer knowledge across fields, like
functors and adjunctions.

(3) In addition, category theory provides general results applicable
to a wide variety of fields, [SPC] which allow abbreviating routine
parts of proofs by referring to these results [SPC] as well as to
start exploring areas of mathematics, as we will see in the part about
computation theory. [SPC] Category theory also provides proof methods
like diagram chasing which is very common in algebra.

(4) My work is based primarily on the classical books [SPC] "The Joy
of Cats" and [SPC] "Categories for the Working Mathematician", [SPC]
with some examples taken from this more modern book by Riehl. [SPC] I
have also developed some examples on my own and some proofs of results
that were not given by the bibliography. Finally, the last part about
functional programming is not based on any particular book but rather
on common knowledge in the field and relevant papers.

(5) The most fundamental concept in category theory is that of a
category. [SPC] Categories are made up of a collection of objects and
one of morphisms, [SPC] each with a domain and a codomain from the
collection of objects [SPC] specified with this notation, [SPC] and
there are also operations of composition of arrows [SPC] and identity
such that [SPC] composition is associative and [SPC] the identities
are identities of the composition. This is expressed by commutative
diagrams like these, which explain that for any two paths with the
same domain and codomain, the composition of the arrows is the
same. [SPC] Typical categories are constructs, where objects are sets
with some structure and morphisms are functions between those
sets. For example, we have the construct of all sets along with all
functions, or that of vector spaces and lineal transformations.

(6) With this we can define general concepts just in terms of objects
and morphisms. [SPC] For example, a monomorphism is a left-cancellable
arrow [SPC] and an epimorphism is a right-cancellable arrow. [SPC]
These terms are very similar and show a general pattern in category
theory where many concepts come in pairs, one being the dual the
other. [SPC] Formally, the dual of a category is another category with
the same objects and morphisms but with the domain and codomain of
morphisms swapped, and with composition taking the inputs in the
opposite order. [SPC] Then the dual of a property is the same property
in the dual category.

(7) In constructs, monomorphisms are usually the injective functions
and epimorphisms are the surjective functions, but this need not be
the case. [SPC] For example, in the category of rings and ring
homomorphisms, if we have this inclusion and these two arrows, [SPC]
then g and h are given by their composition with u, [SPC] so u is an
epimorphism despite not being surjective. [SPC] u is also clearly a
monomorphism, which illustrates that a monomorphism that is also an
epimorphism is not always an isomorphism, as u does not have an
inverse.

(8) Ahora vuelvo al español. Para relacionar distintas categorías
tenemos los funtores, que son como morfismos de categorías. [SPC]
Están formados por una función sobre los objetos y, [SPC] para cada
par de objetos en el dominio, una función que lleva morfismos entre
esos dos objetos a morfismos entre sus imágenes por la función
anterior. [SPC] Además, estas funciones deben respetar la identidad
[SPC] y la composición. [SPC] Los funtores se pueden componer y para
cada categoría existe un funtor identidad, por lo que podemos definir
una categoría de categorías más pequeñas (que no se incluye a sí misma
por la paradoja de Russell) y así los funtores verdaderamente son
morfismos de categorías.

(9) A partir de aquí podemos definir el concepto de transformación
natural, un concepto fundamental que de hecho fue el que motivó el
desarrollo de la teoría de categorías. Para ilustrarlo vemos que [SPC]
un espacio vectorial de dimensión finita [SPC] es isomorfo a su dual,
formado por las transformaciones lineales del espacio al cuerpo, pero
no hay una forma canónica de tomar el isomorfismo. [SPC] Sin embargo,
para el doble dual sí que la hay. [SPC] Estos "morfismos que se
definen igual" para todos los objetos son muy comunes en matemáticas,
[SPC] y los definimos como una función que lleva cada objeto de una
categoría a un morfismo entre la imagen del objeto por dos funtores de
tal forma que para todo morfismo f el diagrama conmuta.

(10) Otro concepto importante es el de flecha universal. Una flecha
universal de un objeto b a un funtor U es un morfismo u como el del
diagrama tal que para cada morfismo f de b a un punto en la imagen del
funtor, existe un f gorro tal que el diagrama conmuta. Entonces el
objeto c es el objeto libre sobre b. Normalmente el funtor será un
funtor olvidadizo sobre un constructo, que lleva cada objeto del
constructo a su conjunto subyacente y cada morfismo a sí mismo como
función. [SPC] Entonces si tenemos, por ejemplo, el funtor olvidadizo
del constructo de monoides, el objeto libre de un conjunto está
formado por las listas de elementos del conjunto con la concatenación
de listas, y la flecha universal lleva cada elemento a una lista de
longitud 1. [SPC] Y si tenemos el del constructo de los módulos sobre
un cierto anillo conmutativo, el objeto libre de un conjunto es el
módulo libre con cierta dimensión y la flecha universal lleva cada
elemento a un elemento de la base. [SPC] El concepto dual al de flecha
universal de un objeto a un funtor es el de flecha universal de un
funtor a un objeto.

(11) Si un funtor G admite una flecha universal desde cada objeto de
su codominio, [SPC] podemos definir una adjunción. [SPC] Esta está
formada por dicho funtor, [SPC] un funtor en sentido inverso llamado
funtor libre que lleva cada objeto a su objeto libre hacia G y [SPC]
dos transformaciones naturales llamadas unidad [SPC] y counidad [SPC]
que cumplen estas dos identidades. Entonces cada eta sub x es una
flecha universal de x a G y cada épsilon sub y es una flecha universal
de F a y.

(12) A partir de las adjunciones podemos definir el concepto de
mónada. Las mónadas vienen dadas por un endofuntor (un funtor de una
categoría a sí misma) y dos transformaciones naturales eta y mu, donde
la primera va del funtor identidad al endofuntor y la segunda del
endofuntor aplicado dos veces al mismo aplicado una vez, [SPC] y que
cumplen estas dos condiciones de coherencia. [SPC] Un ejemplo sencillo
es la potencia, basada en el endofuntor en la categoría de conjuntos
que lleva cada conjunto a su conjunto potencia y cada función a la
"función potencia" que asocia a cada subconjunto su imagen por la
función original. Entonces eta lleva cada elemento de un conjunto al
conjunto unipuntual y mu da la unión de un conjunto de
conjuntos. [SPC] La primera propiedad muestra que, dado un conjunto de
conjuntos de conjuntos, da lo mismo unir los conjuntos "de fuera" y
luego "los de dentro" que unir primero por dentro y luego por
fuera. Las otras dos propiedades muestran que unir un conjunto
unipuntual o uno formado por conjuntos unipuntuales da el conjunto
original. [SPC] Por otro lado, si tenemos una adjunción podemos
obtener una mónada componiendo el funtor libre y el olvidadizo y
tomando como eta la unidad de la adjunción y como mu esta expresión en
función de la counidad.

(13) A continuación vamos a ver ahora la utilidad de las mónadas en
ciencias de la computación, para lo que primero explico la
programación funcional. [SPC] La forma tradicional de programar se
conoce como programación imperativa. [SPC] En ella hay un estado
formado por los valores de las variables [SPC] y usamos comandos que
modifican el estado. Por ejemplo este código calcula una suma
modificando sucesivamente los valores de i y sum. [SPC] Además,
podemos agrupar listas de comandos en procedimientos. Esta forma de
programar es intuitiva y concuerda más o menos con cómo funcionan
internamente ordenadores, pero el que los valores de las variables
cambien hace que sea difícil razonar con el código y fácil introducir
fallos, [SPC] por lo que surge la programación funcional. [SPC] En
esta las variables simplemente representan valores descritos mediante
una expresión, [SPC] y las expresiones se asimilan a expresiones
matemáticas. Por ejemplo, esta línea asocia a cada elemento de la
lista su precio y luego suma los precios. [SPC] Finalmente, en vez de
procedimientos se usan funciones puras, que sirven como funciones
matemáticas en que simplemente asocian a cada entrada una salida, sin
modificar variables ni causar otros efectos colaterales.

(14) La programación funcional se basa en dos fundamentos. [SPC]
Primero tenemos el cálculo lambda, [SPC] que define las variables, la
definición de funciones y la aplicación de una variable a un valor
como las expresiones fundamentales para expresar programas y define
[SPC] una serie [SPC] de reglas [SPC] de reducción sobre
expresiones. [SPC] El otro fundamento es la teoría de
categorías. [SPC] La idea es que para evitar más fallos cada expresión
tiene un tipo, como entero, cadena de caracteres, vector en R^3,
etc. [SPC] Las funciones que llevan elementos de un tipo a a un tipo b
tienen tipo "a a b". [SPC] Entonces podemos definir una categoría
cuyos objetos son los tipos de dato, [SPC] y cuyos morfismos son las
funciones de un tipo a otro que se pueden expresar mediante cálculo
lambda, y la composición y la identidad son las obvias.

(15) La programación funcional como la hemos descrito tiene un
problema, [SPC] y es que define los programas como funciones puras,
por lo que no se pueden representar programas interactivos. [SPC] Para
representarlos, para cada tipo a definimos un tipo IO de a que
representa las acciones que se comunican con el exterior de alguna
forma y finalmente devuelven un elemento de tipo a. Existen funciones
que devuelven acciones básicas como leer o escribir un caracter, crear
una ventana, etc., [SPC] y para combinarlas usamos una mónada. [SPC]
Para que IO sea un endofuntor, lo definimos sobre morfismos de esta
forma, lo que permite mapear el valor devuelto por una acción. [SPC]
Entonces definimos eta sobre un valor como la acción que simplemente
devuelve el valor tal cual [SPC] y mu como una función que toma una
acción que devuelve otra acción y ejecuta las dos acciones en
secuencia, y con esto se puede definir cualquier programa interactivo
como un valor de tipo IO.

(16) Aunque la mónada IO es la única "necesaria" en programación
funcional, hay otras mónadas que también son útiles. [SPC] Por
ejemplo, muchas veces una función puede no devolver un valor del tipo
esperado sino dar un error, que representamos como un elemento de tipo
e que contiene errores como división entre 0, o que una cadena de
entrada no tiene el formato correcto, etc. El símbolo de suma directa
es una unión disjunta de tipos. [SPC] Entonces podemos facilitar el
manejo de errores con una mónada. [SPC] El endofuntor actúa sobre una
función devolviendo una función que actúa como la original sobre
elementos del dominio y deja los elementos del tipo de error tal
cual. [SPC] Eta se define como la inclusión en la unión disjunta [SPC]
y mu toma un valor con dos posibles fuentes de error y "se olvida" de
cuál es la fuente del error. [SPC] Finalmente, en la práctica el uso
de mónadas se hace con esta notación. En este caso se toma un valor x
que puede ser un error, en caso de que no lo sea se le aplica una
función f que puede devolver otro error, y se aplica mu para juntar
los dos errores porque bastante tenemos ya con un error.

(17) Esto concluye la presentación y me parece que ahora los que no
están en el grado se libran de escuchar el turno de preguntas.