Haskell Don';不理解幺半群定义中态射的表示法

Haskell Don';不理解幺半群定义中态射的表示法,haskell,category-theory,monoids,Haskell,Category Theory,Monoids,我试图从范畴理论的角度理解什么是幺半群,但我对用来描述它的符号有点困惑。以下是维基百科: 在范畴论中,单纯形范畴(C,⊗, 一) 是一个带有两个态射的对象M μ:M⊗ M→ 我叫乘法 η:我→ 我叫单位 我的困惑是关于态射符号。为什么二进制操作是⊗变形符号的一部分?我对态射的理解是,它是一种可以从一种类型映射到另一种类型(域到辅域)的函数,如M→ M。为什么操作⊗定义中域的一部分?第二个困惑是关于I。为什么I是一个域?Monoid中根本没有I对象。它只是对象M的一个中性元素 我知道Monoid是

我试图从范畴理论的角度理解什么是
幺半群,但我对用来描述它的符号有点困惑。以下是维基百科:

在范畴论中,单纯形范畴(C,⊗, 一) 是一个带有两个态射的对象M

μ:M⊗ M→ 我叫乘法

η:我→ 我叫单位

我的困惑是关于态射符号。为什么二进制操作是
变形符号的一部分?我对态射的理解是,它是一种可以从一种类型映射到另一种类型(域到辅域)的函数,如
M→ M
。为什么操作
定义中域的一部分?第二个困惑是关于
I
。为什么
I
是一个域?
Monoid
中根本没有
I
对象。它只是对象
M
的一个中性元素

我知道
Monoid
是一个包含一个对象、一个恒等态射和一个在这个对象上定义的二进制运算的范畴,但是这个符号让我觉得我不明白什么

Is
M⊗ M
以某种方式与笛卡尔积相关,因此态射的域被定义为
mxm

编辑:我在网上得到了一个非常有用的答案

Is
M⊗ M
和笛卡尔积有什么关系,所以态射的域被定义为
mxm

没错。更具体地说,我们通过选取Hask(所有Haskell类型作为对象,所有Haskell函数作为态射的类别)作为C,
(,)
(成对类型构造函数)作为⊗, 和
()
(单位类型)为I。μ和η的签名,翻译成Haskell,然后变成:

μ :: (M, M) -> M
η :: () -> M
通过求μ,并利用
()->M
函数如何与
M
值一一对应(对于某些
M
,它们看起来都像
\()->M
),我们得到了熟悉的
幺半群
方法:

mappend :: M -> M -> M
mempty :: M
请注意,分类定义远比仅
Monoid
更一般。例如,我们可能会继续在Hask中工作,同时将
(,)
替换为它们的对偶,
或者
或者
Void
,从而得到:

μ :: Either A A -> A
η :: Void -> A
每个Haskell类型都是一个幺半群,以这种特殊的方式(μ是
或者id是
,η是)


另一个例子是将C作为Haskell
函子
s的范畴(它们之间有自然变换——我将把它们写成
typef~>g=forall a.fa->ga
——作为态射),如下所示:⊗, 正如我所说:

这两种情况通常写为:

-- "Inlining" the definitions of Compose, Identity, and ~>
join :: M (M a) -> M a
return :: a -> M a

换句话说,
单子
函子
s类中的幺半群(这是“单子是内功能子类中的幺半群”的特定版本)。值得一提的是,正如在另一个例子中一样,这并不是将幺半群从该类别中去掉的唯一方法(请参阅的最后一段,以获取指针——事实上,它的其余部分可能是相关阅读,因为它讨论了幺半群类别的概念)。

您从集合论的角度理解了什么是幺半群吗?定义只是——除了“因为我们观察到有很多事情我们想一致地谈论,它们是那样的”之外,对于“为什么定义是那样的”几乎没有什么答案。所以我真的无法想象理智地回答这个问题。但我可以想象,回答“这个定义和集合论定义的各个部分是如何对应的?”,好的。因为你(现在被删除)的评论说你对集合论的定义很感兴趣,当我吃完午饭回来,如果还没有答案,我会写一篇描述,描述两个定义的部分是如何对应的;“和一个对象与范畴的联系是由定义引出的。@daniel wanger是的,我从集合论中理解了什么是幺半群(至少是主要思想)。我甚至对范畴理论中的概念有一些“不稳定”的理解。我现在的主要问题(至少我认为这是最主要的问题))是我不懂如何阅读符号。是否有某种规则规定在左侧(域)只能有对象?。因为这样的定义对我来说很奇怪。就像它是从object
I
(不是object)到
M
的态射。或
M⊗ M
是一种域。但我真的很感激你的回答。警告!工作中有不同但相关的概念!带有一个对象的类别对应于传统的幺半群概念(例如,通过在现场跳来跳去,你可以从现在的位置到达现在的位置)。单倍体范畴的概念是另一回事:它们可以有更有趣的对象集合,其中(X)和I可以归纳出类单倍体的结构(Haskell类型上的(,)方式是联想的,吸收()直至同构)。单词“单倍体范畴”是必不可少的,你要问的这些操作符就是从这里来的。你似乎忽视了他们。
-- "Inlining" the definitions of Compose, Identity, and ~>
join :: M (M a) -> M a
return :: a -> M a