¿Cuál es el significado de los monoides en la teoría de categorías?

¿Cuál es el significado de los monoides?

Primero, comprendamos qué son …

Los monoides son la forma más básica de combinar cualquier valor . Un monoide es el álgebra que se cierra bajo una operación binaria asociativa y tiene un elemento de identidad.

Podemos pensar en un monoide como un patrón de diseño que nos permite reducir (o doblar) rápidamente en una colección de un solo tipo de forma paralela.

Un monoide es cualquier cosa que satisfaga las siguientes reglas:

  • Regla de cierre
  • Regla de asociatividad
  • Regla de identidad

Regla de asociatividad

“Si combina varios valores más, el orden en el que combina no importa” (1 + 2) + 3 == 1 + (2 + 3) // asociatividad izquierda y derecha

Entonces, si tenemos 1 + 2 + 3 + 4, podemos transformar eso en (1 + 2) + (3 + 4).

“Hay un elemento de identidad que no hace nada”. Regla de identidad

Ahora, ¿cuál es el significado de los monoides?

Dadas las tres reglas anteriores, los monoides nos permiten escribir una función de reducción. Cuando ejecutamos una reducción en una matriz de enteros usando la suma, iniciamos nuestra operación con un 0 (el elemento de identidad).

Cuando ejecutamos una reducción en una matriz de enteros usando la multiplicación, iniciamos nuestra operación con un 1 (el elemento de identidad).

Considere la siguiente operación:

1 + 2 + 3 ⇒ [1,2,3] |> Lista.reducir (+)

En lugar de tener que escribir todo ese código donde escribimos un número, escriba a +, escriba otro número, y podemos alimentar una lista de números en nuestra función de reducción que aplica la operación + a cada elemento y acumula la suma.

Más ejemplos…

¿Dónde encaja un monoide en la jerarquía de la clase de tipos?

Depende de la implementación que estemos viendo. Por ejemplo, en la biblioteca FantasyLand JavaScript, un monoide es un semigrupo:

Mientras que, en Haskell, una mónada es un monoide:

Los monoides proporcionan la capacidad asociativa de agregar elementos a una lista, que las mónadas pueden reutilizar.

En pocas palabras : los monoides proporcionan asociatividad e identidad que son requisitos para la composición. Nos ayudan a diseñar un software más reutilizable y nos ayudan a mejorar su rendimiento.

Puede encontrar una discusión, explicación y ejemplos de código mucho más exhaustivos en mi libro.

¡Salud!

Lex

Las acciones correctas de los monoides de endomorfismo producen (di) gráficos. Esto se describe en detalle en “Lawvere, Rosebrugh: Sets for Mathematics” (pero reserve mucho tiempo leyendo este libro). En principio, esto es simular el comportamiento de los dígrafos (p. Ej., Cómo obtener vértices de los bordes) utilizando máquinas de estados, y luego producir un functor F: Mon ^ {op} -> Conjunto que codifica esos datos. Para los científicos informáticos, esta forma de codificar gráficos es algo extraña ya que básicamente modelas aristas en lugar de pares (V, E) y obtienes vértices usando las restricciones impuestas por la estructura monoide de endomorfismo. Pero es completamente general y podrá expresar bordes bidireccionales, etc., conceptos más difíciles con el mismo mecanismo. He escrito código en Haskell que implementa gráficos usando esta representación.

¡Los monoides están en todas partes!

La definición tradicional de un monoide es un conjunto con una operación binaria (llamémosla “multiplicación”) que es asociativa y con un elemento especial: la unidad de multiplicación.

Luego está la definición categórica: una categoría con un objeto. Esta definición es equivalente a la anterior en que el conjunto original se reemplaza por el conjunto hom, la unidad por el morfismo de identidad y la multiplicación asociativa con la composición de los morfismos.

Una generalización natural es requerir que la asociatividad y las leyes de unidad sean ciertas solo hasta el isomorfismo. Entonces resulta que, por ejemplo, tomar un producto cartesiano de dos conjuntos puede verse como una “multiplicación” de conjuntos, con el conjunto singleton como la unidad.

Esto puede generalizarse reemplazando el producto cartesiano con un producto categórico y el singleton con el objeto terminal. Obtienes una categoría cartesiana. O puede cambiar a un coproducto categórico, con el objeto inicial como unidad (categoría co-cartesiana).

Luego, puede reemplazar el producto o coproducto con un bifunctor aún más general llamado producto tensorial. Obtienes una categoría monoidal. Un gran ejemplo de una categoría monoidal es la categoría de endofunctores. La composición del functor desempeña el papel del producto tensorial, el functor de identidad es el objeto de la unidad.

Una vez que tenga una categoría monoidal, puede definir un monoide en ella. Es un objeto junto con dos morfismos. Un morfismo va desde el cuadrado del objeto (producto tensor del objeto consigo mismo) de regreso al objeto. Esa es tu multiplicación. El segundo morfismo va del objeto de la unidad a tu objeto, esa es tu unidad.

Ahora puedes jugar con monoides en varias categorías monoidales. Por ejemplo, un monoide en la categoría de endofunctores se llama mónada. Un monoide en la categoría de profunctores se llama flecha (bueno, también debes asumir la fuerza). Si elige la convolución del día como su producto tensor, obtendrá el functor aplicativo.

Y eso es solo el comienzo, porque una categoría monoidal se puede usar para construir categorías enriquecidas, en las que los conjuntos de hom se reemplazan por objetos hom de una categoría monoidal.

Codifican la estructura algebraica más esencial a nivel categórico. Además, comienzan la historia del álgebra de los functors.

Un monoide, en términos categóricos, es una categoría con un objeto. Esto los hace bastante fundamentales.