71 votos

Relacionar la teoría de las categorías con la teoría de los lenguajes de programación

Me pregunto cuál es la relación de la teoría de las categorías con la teoría del lenguaje de programación.

He estado leyendo algunos libros sobre la teoría de las categorías y la teoría de los topos, pero si por casualidad alguien sabe cuáles son las conexiones y pudiera decírmelo sería muy útil, ya que eso me daría motivos para continuar con este empeño con fuerza, y saber dónde buscar.

Motivación: Actualmente estoy investigando sobre la educación matemática de pregrado/graduado, específicamente la enseñanza de la programación a los graduados/graduados en matemáticas. Estoy jugando con la idea de que si toco los puntos fuertes de los matemáticos puedo instruirlos mejor en la programación y serán mejores programadores, y lo que aprendan les será útil. Estoy en el proceso (muy temprano) de escribir un libro de texto sobre el tema.

1 votos

Esto es muy similar a otra pregunta sobre la teoría de categorías y los lenguajes de programación, pero la cambié para reflejar que quería saber algunas conexiones precisas, en lugar de simplemente dónde buscar.

1 votos

Los topos están en una especie de "rama" diferente a la de los lenguajes de programación. Su ancestro menos común sería probablemente las hiperdoctrinas de Lawvere o simplemente las categorías cerradas cartesianas. No se trata de desalentar el aprendizaje de los topoi (¡son fascinantes!), pero no juegan un papel importante en los lenguajes de programación.

4 votos

Además, francamente, creo que los estudiantes de ciencias de la computación estarían mucho mejor si los arrastráramos a través de un semestre de teoría de conjuntos primero. Facilitaría muchas otras cosas; podríamos hablar de "conjuntos recursivos de números naturales" en lugar de problemas decidibles. Pero no creo que se pueda meter suficiente teoría de categorías en la cabeza de un estudiante de grado (incluso de un estudiante de matemáticas) a tiempo para generar un rendimiento significativo de la inversión en términos de comprensión de PL.

92voto

Steven Murawski Puntos 6665

La relación más evidente con la teoría de las categorías es que tenemos una categoría que consiste en tipos como objetos y funciones como flechas. Tenemos funciones de identidad y podemos componer funciones con los axiomas habituales (con varias salvedades). Eso es sólo el punto de partida.

Un lugar donde se empieza a profundizar es cuando se consideran las funciones polimórficas. Una función polimórfica es esencialmente una familia de funciones, parametrizadas por tipos. O categóricamente, una familia de flechas, parametrizadas por objetos. Esto es similar a lo que es una transformación natural. Introduciendo algunas restricciones razonables, descubrimos que una gran clase de funciones polimórficas son, de hecho, transformaciones naturales, y ahora se aplica mucha teoría de categorías. Los ejemplos estándar que podemos citar aquí son los siguientes teoremas libres .

La teoría de las categorías también encaja perfectamente con la noción de "interfaz" en la programación. La teoría de las categorías nos anima a no mirar de qué está hecho un objeto, sino cómo interactúa con otros objetos y consigo mismo. Al separar una interfaz de una implementación, el programador no necesita saber nada sobre la implementación. Del mismo modo, la teoría de las categorías nos anima a pensar en los objetos hasta el isomorfismo: no proclama con precisión qué conjuntos comprenden nuestros grupos, sólo importa cuáles son las operaciones sobre nuestros grupos. La teoría de las categorías capta precisamente esta noción de interfaz.

También existe una hermosa relación entre el cálculo lambda de tipo puro y las categorías cerradas cartesianas (CCC). Cualquier expresión en el cálculo lambda puede interpretarse como la composición de las funciones estándar que vienen con una CCC: como la proyección sobre los factores de un producto, o la evaluación de una función. Así, las expresiones lambda pueden interpretarse como aplicables a cualquier CCC. En otras palabras, el cálculo lambda es un lenguaje interno para las CCC. Esto se explica en Lambek y Scott. Esto significa, por ejemplo, que la teoría de las CCC está profundamente integrada en Haskell, porque Haskell es esencialmente cálculo lambda tipado puro con un montón de extensiones.

Otro ejemplo es la forma en que la recursión estructural sobre tipos de datos recursivos puede describirse de forma agradable en términos de objetos iniciales en categorías de álgebras F. Puede encontrar algunos detalles aquí .

Y un último ejemplo: dualizar (en el sentido categórico) las definiciones resulta muy útil en el mundo de los lenguajes de programación. Por ejemplo, en el párrafo anterior he mencionado la recursión estructural. La dualización de la misma da lugar a las nociones de F-coalgebras y de recursividad vigilada, y conduce a una buena manera de trabajar con tipos de datos "infinitos", como los flujos. Trabajar con flujos es complicado porque ¿cómo evitar que se intente recorrer inadvertidamente toda la longitud de un flujo causando un bucle infinito? La doble recursividad estructural adecuada conduce a una poderosa forma de tratar con flujos que garantiza un buen comportamiento. Bart Jacobs, por ejemplo, tiene muchos artículos interesantes en esta área.

3 votos

¡Impresionante! ¡Esto es EXACTAMENTE lo que estaba buscando!

6 votos

Y sigfpe es exactamente la persona que puede dar esa respuesta. Deberías leer su blog para ver buenos ejemplos de nociones teóricas de la categoría de programación: blog.sigfpe.com

0 votos

Los teoremas libres, según tengo entendido, se dieron en base a relaciones lógicas y no a transformaciones naturales (conozco algún trabajo que relaciona más o menos ambas cosas). ¿Tienes alguna referencia de los teoremas libres como transformaciones naturales directamente?

20voto

MortenSickel Puntos 123

Lambek & Scott, "Introduction to higher order categorical logic" es un libro clásico sobre el tema.

¿Qué idioma estás (investigando?) enseñando a estos alumnos de matemáticas? En mi opinión, Haskell es más fácil de aprender que los lenguajes cercanos al metal para personas con mentalidad matemática sin experiencia previa en programación.

2 votos

Actualmente estoy mirando Haskell, ML y Scala. Me inclino fuertemente por Haskell y ML.

3 votos

No sé mucho sobre Scala, pero ML es una buena opción también - tiene muchas de las mismas ventajas que Haskell (énfasis en los valores en lugar de los cálculos, un sistema de tipos sensible), mientras que carece de algunas características (typeclasses, monadic IO) de Haskell que son extremadamente útiles, pero requieren un cierto costo de abstracción por adelantado (y si nada más a menudo conducen a mensajes de error que son desconcertantes para los principiantes).

2 votos

ML es una excelente elección. Haskell también lo es. Creo que el material pedagógico para ML está más desarrollado, en parte porque el lenguaje no ha cambiado mucho en bastante tiempo.

19voto

18voto

Aissen Puntos 131

Se ha trabajado mucho en este ámbito. Como se ha mencionado anteriormente, existe una correspondencia esencial entre el λ -cálculo y categorías cartesianas cerradas. El trabajo seminal de Moggi Nociones de computación y mónadas desarrolló una forma unificada de tratar muchos efectos computacionales. Esto, por supuesto, inspiró el enfoque actual de Haskell para tratar la IO, el Estado, la Concurrencia, etc. El enfoque dual, Nociones comonádicas de computación de Tarmo Uustalu y Varmo Vene, recoge otras nociones, como la computación basada en flujos. Las clases y los lenguajes orientados a objetos pueden modelarse utilizando el álgebra de carbón (también mencionado anteriormente). Una referencia general al enfoque coalgebraico es Álgebra universal: Una teoría de sistemas de Jan Rutten, y los artículos que muestran cómo aplicarlo a los lenguajes orientados a objetos incluyen Razonamiento sobre clases en lenguajes orientados a objetos: Modelos lógicos y herramientas y Razonamiento coalgebraico sobre clases en lenguajes orientados a objetos por Bart Jacobs y sus colegas. Aunque su objetivo es razonar sobre los programas, en el camino dan semántica para los lenguajes de programación pertinentes.

11voto

Rog Puntos 121

Artículo de Báez El debate y Artículo de Manin son quizás interesantes para usted.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X