不理解 Monoid 定义中态射的表示法

问题描述 投票:0回答:1

我试图从范畴论的角度理解

Monoid
是什么,但我对用来描述它的符号有点困惑。这是维基百科:

在范畴论中,幺半群范畴(C,⊗,I)中的幺半群(或幺半群对象)(M,μ,η)是一个带有两个态射的对象 M

μ: M ⊗ M → M 称为乘法,

η: I → M 称为单位

我的困惑在于态射符号。为什么二元运算

是态射表示法的一部分?我对态射的理解是,它是一种可以从一种类型映射到另一种类型(域到共域)的函数,例如
M → M
。为什么操作
是定义中域的一部分?第二个困惑是关于
I
。为什么
I
是一个域?
I
中根本不存在
Monoid
对象。它只是物体的一个中性元素
M

我知道

Monoid
是一个具有一个对象、恒等态射和在此对象上定义的二元运算的范畴,但这种符号让我觉得我不明白某些东西。

M ⊗ M
是否与笛卡尔积有某种关系,因此态射的域被定义为
M x M

编辑:我在Mathematics Stack Exchange上得到了对我的问题非常有用的答案。

haskell category-theory monoids
1个回答
20
投票

M ⊗ M
与笛卡尔积有什么关系吗,所以态射的域定义为
M x M

完全正确。更具体地说,我们通过选择

Hask
(所有 Haskell 类型作为对象,所有 Haskell 函数作为态射的类别)作为 C, Monoid (对类型构造函数)为
(,)
(单位类型)为 I
μ
η的签名,翻译成Haskell,则变成: () 通过柯里化

μ
,并利用 
μ :: (M, M) -> M η :: () -> M

函数与 () -> M 值一一对应(对于某些

M
,它们看起来都像
\() -> m
),我们得到了熟悉的
 m
方法:
Monoid
请注意,分类定义远比 

mappend :: M -> M -> M mempty :: M
 更笼统。例如,我们可以继续在 
Hask

中工作,同时用它们的对偶

Monoid
(,) 替换
()
Either
,从而得到:
Void
每个 Haskell 类型都是幺半群 

以这种特殊的方式
μ

μ :: Either A A -> A η :: Void -> A η

either id id)。
另一个例子是将 
C

视为 Haskell
absurd

的范畴(它们之间有自然变换——我将其写为 Functor——作为态射),

type f ~> g = forall a. f a -> g a
,和 
ComposeI
:
Identity 这两个通常写为:

-- Note the arrows here are ~>, and not ->
μ :: Compose M M ~> M
η :: Identity ~> M

换句话说,

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

s类别中的幺半群(这是“单子是endofunctors类别中的幺半群”的

Hask
特定版本)。值得一提的是,正如在另一个例子中一样,这并不是将幺半群从该类别中分离出来的唯一方法(请参阅
这个答案
的最后一段以获取指针 - 事实上,其余部分可能是相关的)阅读,因为它讨论了幺半群范畴的概念)。
© www.soinside.com 2019 - 2024. All rights reserved.