Hoy, una charla de Henning Kerstan ("Trace Semantics for Probabilistic Transition Systems") me enfrentó por primera vez a la teoría de categorías. Ha construido un marco teórico para describir los sistemas de transición probablísticos y su comportamiento de manera general, es decir, con conjuntos de estados infinitamente incontables y diferentes nociones de trazas. Con este fin, pasa por varias capas de abstracción para finalmente terminar con la noción de mónadas que combina con la teoría de la medida para construir el modelo que necesita.
Al final, le tomó 45 minutos (aproximadamente) construir un marco para describir un concepto que explicó inicialmente en 5 minutos. Aprecio la belleza del enfoque (que no generalizar Nicely sobre diferentes nociones de trazas), pero me parece extraño, sin embargo, un equilibrio.
Me cuesta ver qué es realmente una mónada y qué tan general un concepto puede ser útil en aplicaciones (tanto en teoría como en práctica). ¿Realmente vale la pena el esfuerzo, en cuanto a resultados?
Por lo tanto esta pregunta:
¿Existen problemas naturales (en el sentido de CS) en los que la noción abstracta de mónadas se puede aplicar y ayuda (o incluso es instrumental) para obtener los resultados deseados (en absoluto o de una manera más agradable que sin ellos)?
fuente
Respuestas:
Preguntar si una ocurrencia de mónada es natural es similar a preguntar si un grupo (en el sentido de la teoría de grupo) es natural. Una vez que formaliza algo, en este caso como endofunctor, satisface los axiomas de ser una mónada o no. Si satisface los axiomas, se obtiene una gran cantidad de maquinaria técnica de forma gratuita.
El artículo de Moggi Las nociones de computación y mónadas prácticamente sella el trato: las mónadas son increíblemente naturales y útiles para describir los efectos computacionales de una manera unificada. Wadlery otros tradujeron estas nociones para tratar los efectos computacionales en lenguajes de programación funcionales, usando la conexión de que un functor es un constructor de tipo de datos. Esto agrega la guinda del pastel. Las mónadas FP permiten un tratamiento de los efectos computacionales como IO que serían extremadamente antinaturales sin ellos. Las mónadas han inspirado nociones útiles relacionadas, como flechas y modismos, que también son muy útiles para estructurar programas funcionales. Vea el enlace de Wadler para referencias. Las mónadas de FP son lo mismo que las mónadas de teoría de categorías en el sentido de que para que una mónada de FP funcione las mismas ecuaciones deben mantenerse --- el compilador se basa en ellas. En general, la presentación de la mónada difiere (operaciones y ecuaciones diferentes pero equivalentes), pero esta es una diferencia superficial.
Una gran cantidad del trabajo de Bart Jacobs , por poner un ejemplo, usa mónadas. Gran parte del trabajo proviene de coalgebra, que es una teoría general de los sistemas. Una de las contribuciones de Jacobs (muchas) al área es el desarrollo de una noción genérica de semántica de trazas para sistemas (descritos como coalgebras) basada en mónadas. Se podría argumentar que la noción de semántica de rastreo es natural: ¿cuál es la semántica de un sistema? La lista de acciones que se pueden observar!
Una forma de entender las mónadas es programar primero en Haskell usando mónadas. Luego, encuentre uno de los muchos buenos tutoriales disponibles (a través de google). Comience desde el ángulo de programación, luego pase al lado teórico, comenzando con alguna teoría básica de categorías.
fuente