幺半群

前言

一个单子就是一个自函子范畴上的幺半群。
前面已经讲解了范畴以及函子和自函子,那什么是幺半群呢?

幺半群(Monoid)

维基百科中幺半群被定义为是一个伴有二元运算的集合,且这个二元运算只需要满足结合率,并且这个集合中还必须有一个特殊的元素,幺元,对于这个二元运算,一个元素与幺元的运算将返回这个元素自身。
用公式表示为,假设这个二元运算用 * 表示:
结合律:对任何在 M 内的a、b、c , (a * b) * c = a * (b * c) 。
单位元:存在一在 M 内的元素e,使得任一于 M 内的 a 都会符合 a * e = e * a = a 。
往往还在满足封闭性,即 a * b 的结果依然在这个集合内。

幺半群作为范畴

我们知道,范畴论中讨论的是对象以及态射,并不是集合,其实集合也是一个范畴,如果一个范畴内的对象都是集合,那么我们说这个范畴叫做小范畴。
我引用网上的一幅图来讨论范畴论中的幺半群,如下:

这里写图片描述

这个例子与上一篇中类型范畴的自函子相似,假设类型范畴是一个更大的范畴C里的对象,且范畴C仅有这一个对象,那么自函子就相当于一系统的态射了,函子之间的自然变换(自已科谱)相当于该范畴内态射的复合了。
如果我们把态射看成是一个集合的元素,我们看一下它是否符合幺半群定义:
是否存在一个二元运算且满足结合律。这个是存在的,因为这些态射都是 Hom-集M(m.m) 里的元素,它们的复合总是存在的,因为他们指向同一个对象,甚至它们都满足交换率,是否存在一个幺元,对象 m 的单位态射 id,就相当于幺元,根据单位态射的定义,这个正好符合幺元的特性。
其实我们总能够从一个单对象的范畴里,其实就是幺半群范畴里抽出一个幺半群集合,该范畴里的对象的所有态射,即 Hom-集,其实是一个集合,也是一个小范畴。

总结

自函子范畴上的幺半群,这个时候就好理解了,它说的就是,范畴C上的自函子,以自函子为对象,自函子之间的自然变换为态射组成的一个范畴,这个范畴是个小范畴,它满足幺半群特性。这与把范畴 C 当作一个更大的范畴的对象,以自函子当态射是一个道理。只不过它正好满足幺半群的特性,所以我们说它也是一个幺半群。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: "Monad" 是一个术语,用于描述计算机科学中的一种抽象概念。它来源于数学,但在编程语言和函数式编程中有着独特的用途。 "Monad" 的定义确实涉及自我映射的半群的概念,但是这只是一种抽象的表述方式。最重要的是,Monad 用于描述一种用于编写复杂计算的模式,并且提供了许多有用的性质,如结合律和可组合性。 因此,在编程语言中,Monad 是一种抽象的模式,它可以用于解决许多常见的编程问题,例如错误处理、状态管理和输入/输出操作。 总的来说,"Monad" 是一种编程技巧,它可以使代码更清晰、更简单,并且更容易阅读和维护。 ### 回答2: Monad函数式编程中的概念,用于处理副作用和状态变化的问题。它是指具有特定结构和操作的类型类(type class)。Monad可以被视为自我映射的半群,因为它具有单位元和结合律的性质,并支持map和flatMap等操作。 在函数式编程中,副作用和状态变化被视为不纯粹和难以控制的因素。为了处理这些问题,可以通过使用Monad来封装这些操作并保持代码的简洁性和可读性。通过将这些操作串联起来,可以避免副作用和状态变化的传递问题,使代码逻辑更加清晰。 Monad本质上是一个抽象的概念,并不是一个具体的实现。在不同的编程语言中,可以有不同的实现方式和语法糖来支持Monad。比如在Haskell中,Monad通过do记法来实现,而在Scala中,可以通过for推导来利用Monad。 在这个意义上,可以说Monad一个比喻,因为它是一种抽象的概念,并不直接对应具体的实现。通过将Monad视为自我映射的半群,可以更好地理解和使用它。这种比喻的好处是可以抽象出共性,使得不同Monad类型之间的操作具有通用性,提高代码的复用性和可维护性。 总的来说,Monad是一种用于处理副作用和状态变化的抽象概念,通过将操作和状态的组合抽象为自我映射的半群,可以更好地管理代码逻辑。尽管Monad本身是一个抽象概念,但它在函数式编程中扮演了重要的角色,并且有着丰富的实践和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值