Una mónada es sólo un monoide en la categoría de endofunctores, ¿cuál es la iluminación?

cs.stackexchange https://cs.stackexchange.com/questions/128627

Pregunta

Perdón por el juego de palabras.Estoy un poco confundido acerca de implicación de la reclamación y, por tanto, de la cuestión.

Fondo: Me aventuré en la teoría de categorías para comprender los fundamentos teóricos de varios construcciones categóricas y su relevancia para la programación funcional (FP).Me parece (a mí) que una de las "joyas de la corona" en la intersección de Cat y FP es esta afirmación:

A monad is just a monoid in the category of endofunctors

Cuál es el Vaya cosa ¿Qué opina de esta observación y cuáles son sus implicaciones programáticas/de diseño?Fuentes como sigfpe y muchos textos sobre PF parecen implicar la alucinante de este concepto pero quizás no logro ver la sutileza a la que se alude.

Así es como lo entiendo:

Saber algo es monoide nos permite extrapolar el hecho de que podemos trabajar dentro de un Mapa reducido configuración donde la asociatividad de las operaciones nos permite dividir/combinar el cálculo en orden arbitrario, es decir, (a1+a2)+a3 == a1+(a2+a3).También puede permitir distribuir esto entre máquinas y lograr una alta paralelización.(Así, mentalmente podría pasar de un theoretical construct -> computer science understanding -> practical problem solving.)

para mi fue obvio (como resultado del estudio de Cat) para ver que las mónadas tienen una monoidal estructura en la categoría de endofunctores.Sin embargo, ¿cuál es la implicación que se puede extraer de esto y cuál es su impacto programático/diseño/ingeniería cuando codificamos con un modelo mental de este tipo?

Aquí está mi interpretación:

  • Implicación teórica: Todos los problemas computables en su corazón son monoidal en un sentido.
    • ¿Es esto correcto?Si es así, puedo entender el iluminación.Es una perspectiva diferente sobre la comprensión de la noción/estructura de los problemas computables que no sería obvia si viniera solo de un modelo de cálculo de Turing/Lambda y pudiera estar en paz.
    • ¿Hay más?
  • Implicación práctica: ¿Se trata simplemente de proporcionar un caso para la do-¿Estilo de notación de programación?Es decir, si las cosas son monoidales podremos apreciar mejor la existencia del do/for construcciones en Haskell/Scala.¿Es asi?Incluso si no supiéramos acerca de los apuntalamientos monoidales, no necesitamos invocar el monoidalidad para hacer este reclamo desde vincular >>= y flatMap los constructos se definen como asociativos.Entonces, ¿qué pasa?¿O tiene más que ver con el plegabilidad de constructos monádicos y eso es el indirecto iluminación ¿A eso se alude?

Preguntas): ¿Que me estoy perdiendo aqui?¿Es simplemente el reconocimiento del hecho de que las mónadas son monoides generalizados y que pueden ser conjunto ¿En algún orden similar a las operaciones de reducción de mapas como los monoides?¿Cómo ayuda saber acerca de la propiedad monoidal? mejorar ¿El código/diseño de alguna manera?¿Cuál es un buen ejemplo de antes/después para mostrar esta diferencia (antes de conocer las mónadas/monoidalidad y después)?

¿Fue útil?

Solución

Es posible que esta respuesta no sea exactamente lo que está buscando.Es decir, creo que quizás aquí se esté exagerando la importancia de esta caracterización.La frase

una mónada en X es solo un monoide en la categoría de endofunctores de X

es originario de Mac Lane's Categorías para el matemático que trabaja, donde aparece como una intuición útil para la definición de mónada, que, por sí sola, puede parecer bastante desconocida al principio.Al caracterizarlo como un monoide en una categoría monoide particular, se le brinda al lector una perspectiva alternativa.Tenga en cuenta que el capítulo sobre mónadas en realidad viene antes del capítulo sobre categorías monoidales:la observación pretende ser útil, más que precisa (sólo se precisa más tarde).

Luego, la cita fue reformulada en el infame artículo de James Iry. Breve, incompleta y mayoritariamente errónea historia de los lenguajes de programación.

Una mónada es sólo un monoide en la categoría de endofunctores, ¿cuál es el problema?

Presentado fuera de contexto, como está en el artículo, tiene como objetivo divertir.Desde entonces, la cita se ha convertido en un meme en la comunidad de programación funcional, principalmente porque es divertida, más que una idea clave para la programación funcional (aunque también sirve para despertar la curiosidad de los programadores funcionales, atrayéndolos al maravilloso mundo de la teoría de categorías). ).Mi opinión es que esta caracterización, aunque útil e interesante, no es tan importante como podría imaginarse por su popularidad.

Sin embargo, esto no quiere decir que no se pueda obtener información de esta caracterización.Primero, permítame señalar que, si bien la presentación de una mónada con una multiplicación y una unidad sugiere claramente un monoide, como usted señala, la presentación de Kleisli, con una operación de vinculación y retorno, no lo es.Es la presentación de Kleisli la que es común en la programación funcional, por lo que ciertamente la caracterización como monoide es más interesante desde esta perspectiva.

Desde una perspectiva teórica, una de las ideas es que muchas estructuras naturales en informática (y matemáticas) son monoidales.Desde la perspectiva de las mónadas (particularmente con su relación con óperas cartesianas y teorías de lawvere), la estructura monoidal corresponde a la estructura de sustitución (equivalentemente, estructura de composición).La sustitución es omnipresente en la informática (por ejemplo, la sustitución que evita la captura en una teoría de tipos o el injerto de árboles).Las mónadas son sólo un ejemplo más.

Si bien comprender formalmente la afirmación en cuestión puede no ser esclarecedor, sugiero que sí lo es comprender las diferentes perspectivas sobre las mónadas, ya que permite ver las diferentes formas en que se pueden utilizar las mónadas (p. ej.como contenedores, descripción de estructuras algebraicas, descripción de sistemas multicomposicionales, etc.).Puede ser difícil apreciar la frecuencia con la que aparecen sin haber visto las diferentes luces en las que se pueden ver.En este sentido, las mónadas como monoides es sólo una perspectiva (y probablemente no la más esclarecedora).

Finalmente, si bien las mónadas en sí mismas son indiscutiblemente muy útiles en la programación funcional pura en general, no estoy seguro de que la perspectiva de mónadas como monoides sea útil per se.Creo que la perspectiva de Kleisli, que resulta ser equivalente, es la perspectiva más esclarecedora en este caso.

En resumen, esta respuesta puede resultar un poco decepcionante:No creo que comprender esta relación sea tan útil o esclarecedor en la práctica (es decir,para programación).Sin embargo, es una perspectiva útil a tener en cuenta, junto con las demás, al considerar teóricamente las mónadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top