【问题标题】:Don't understand notation of morphisms in Monoid definition不理解 Monoid 定义中的态射符号
【发布时间】:2019-05-18 15:41:43
【问题描述】:

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

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

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

η:I→M称为单位

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

我知道Monoid 是一个类别,其中包含一个对象、一个恒等态射和一个在该对象上定义的二元运算,但是这种表示法让我觉得我不明白。

M ⊗ M 是否与笛卡尔积有某种关联,所以态射的域被定义为M x M

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

【问题讨论】:

  • 你从集合论的角度了解什么是幺半群吗?定义只是——除了“因为我们观察到有很多我们想要统一谈论的事情是这样的”之外,几乎没有可以给出“为什么是这样的定义”的答案”。所以我真的无法想象明智地回答这个问题。但我可以想象合理地回答“这个定义如何与集合论定义的各个部分相对应?”。
  • 好的。由于您(现已删除)的评论说您了解集合论的定义,所以当我吃完午饭回来时,如果还没有答案,我会写下两个定义的部分如何对应的描述;以及与由定义引起的一个对象的类别的连接。
  • @daniel-wanger 是的,我理解集合论中的幺半群(至少是主要思想)。我什至对范畴论中的内容有一些“不稳定”的理解。我现在的主要问题(至少我认为这是主要问题)是我不明白如何阅读符号。是否有一种规则说在左侧(域)只能有对象?因为像I -> M 这样的定义对我来说看起来很奇怪。就像从对象I(不是对象)到M 的态射。或者M ⊗ M 是一种域名。但我真的很感激任何答案。
  • 警告!工作中有不同但相关的概念!具有一个对象的类别对应于幺半群的传统概念(例如,您可以通过原地跳跃从您所在的位置到达您所在的位置的方式)。 monoidal category 的概念是另外一回事:它们可以拥有更有趣的对象集合,其中 (X) 和 I 诱导出类幺半群结构(Haskell 类型上的 (,) 方式是关联的并吸收() 直到同构)。
  • monoidal category”这个词是必不可少的,这就是您要询问的这些运算符的来源。你似乎忽略了他们。

标签: haskell category-theory monoids


【解决方案1】:

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

没错。更具体地说,我们通过选择 Hask(所有 Haskell 类型作为对象,所有 Haskell 函数作为态射的类别)从 base 中获取由 Monoid 类表示的那些幺半群) 为 C(,)(对类型构造函数)为 ()(单位类型)为 Iμη 的签名,翻译成 Haskell,然后变成:

μ :: (M, M) -> M
η :: () -> M

通过柯里化 μ,并利用 () -> M 函数如何与 M 值一一对应(对于某些 m,它们都看起来像 \() -> m ),我们得到熟悉的Monoid 方法:

mappend :: M -> M -> M
mempty :: M

请注意,分类定义远比Monoid 更为笼统。例如,我们可能会继续在 Hask 中工作,同时将 (,)() 替换为它们的对偶,EitherVoid,从而得到:

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

每个 Haskell 类型都是一个幺半群以这种特殊的方式μeither id idηabsurd)。


另一个例子是把 C 作为 Haskell 的范畴Functors(它们之间有自然变换——我将写成type f ~> g = forall a. f a -> g a——作为态射),Compose作为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

换句话说,MonadFunctors 类别中的一个幺半群(这是 Hask 特定版本的“单子是内切子类中的一个幺半群” )。值得一提的是,就像在另一个例子中一样,这不是将幺半群从该类别中剔除的唯一方法(有关指针,请参阅this answer 的最后一段——实际上,其余部分可能是相关阅读,因为它讨论了幺半群的概念)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多