8 votos

Monoids en la Categoría de Teoría

No tengo una formación sólida en matemáticas (ingeniería y matemáticas), así que estoy en un poco de desventaja aquí, pero he estado tratando de aprender los trazos de la Categoría de la Teoría para ayudar a obtener una imagen más completa de algunos de los lenguajes de programación Funcional que yo uso (Haskell, Scala, F#, etc.).

Estoy leyendo 'Una Introducción a la Categoría de Teoría' de Harold Simmons y se topó con algo en el primer capítulo relacionado con la Monoids que me deja un poco confundido.

Él dice que una Monoid es una estructura $(R, *, 1)$ donde $R$ es un conjunto, $*$ es una operación binaria en $R$ $1$ es un elemento de $R$ que funciona como un elemento de identidad. Tan lejos, tan bueno.

Él va a decir que un monoid de morfismos entre dos monoids:

$$p: R \to S$$

es una función que respeta la estructura de la monoids. A continuación, explica que esto significa:

$$p(r*s) = p(r) * p(s),\quad\mathrm{and}\quad p(1) = 1$$

donde $r$ $s$ son elementos de $R$.

La pregunta que tengo es que esto parece hacer ciertas suposiciones: específicamente, que $R$ $S$ son los mismos monoid. Digo esto desde $p(r)$ es una de morfismos de $R$ $S$ $*$está definido por $R$, pero no necesariamente para $S$.

He perdido de algo aquí?

23voto

Daniel Robert-Nicoud Puntos 9698

Una descripción más detallada de la forma de escribir de la declaración (es decir, sin el abuso de notación) sería la siguiente:

Deje $(R,*_R,1_R)$ $(S,*_S,1_S)$ dos monoids, a continuación, una función de $p:R\to S$ se llama monoid de morfismos si por cualquier $r_1,r_2\in R$ $$p(r_1*_Rr_2) = p(r_1)*_Sp(r_2)$$ y $$p(1_R) = 1_S.$$

Sin embargo, en la mayoría de las fuentes el subíndice que indica el monoid estamos es a la izquierda de distancia para facilitar la notación, ya que se supone que el lector puede deducir fácilmente. Usted se acostumbrará a ella, no te preocupes.

15voto

Matt Dawdy Puntos 5479

Esto es lo que un matemático podría llamar el abuso de notación y lo que un científico de la computación podría llamar la sobrecarga: el símbolo * se utiliza para denotar la monoid tanto el funcionamiento en $R$$S$.

4voto

leftaroundabout Puntos 1343

¿Por qué no escribir esto en Haskell! El monoid tipo de clase se define como

class Monoid m where
  mempty :: m          -- Simmons calls this `1`
  (<>) :: m -> m -> m  -- aka `*`. (Or `mappend`.)

Si ahora los tipos R y S son monoids, es decir,

instance Monoid R where { ... }
instance Monoid S where { ... }

a continuación, una función p :: R -> S es un monoid de morfismos si p (a<>b) ≡ p a <> p by p mempty ≡ mempty. O, con el consentimiento explícito tipo de anotaciones,

p (a<>b :: R) :: S
    ≡ (p a :: S) <> (p b :: S)
p (mempty :: R) ≡ (mempty :: S)

Tenga en cuenta que los casos de <> y mempty pertenecen a diferentes instancias de la monoid métodos: en el lado izquierdo, es la Monoid R de instancia, en el lado derecho es la Monoid S de instancia. (Haskell del HM tipo de sistema se infiere que este por sí mismo, si no se escribe el tipo de firmas explícitamente.)

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