haskell 困惑于为什么幺半群的所有态射与恒等态射不相同

jjhzyzn0  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(172)

我正忙碌着阅读Bartosz Milewski为程序员写的《范畴理论》(Category Theory)一书,当我在把幺半群描述为集合和幺半群描述为范畴之间移动时,我正努力描述非恒等态射。
我知道当观察幺半群时(例如字符串),我们感兴趣的是描述利用“append”特性的各种函数,例如,将“dog”附加到任何输入的函数或将“mmm”附加到任何输入的函数。这些函数将分别将它们的输入Map到字符串集合中的另一个元素。这显然包括不追加任何内容的可能性。
当我们在作为一个范畴的上下文中查看这个幺半群时,据我所知,我们正在缩小到一个抽象的层次,在那里这个幺半群对象表示整个'string'类型,我们不再对元素在这个类型中如何相互Map感兴趣,因为我们已经将整个类型表示为一个单数点/对象。
根据这一点,我会假设在这个抽象层次上,所有在'Set'上下文中描述的函数看起来都是一样的,因为它们都Mapstring -〉string。在我看来,这意味着在一个类别的上下文中,identity函数(不附加任何内容)看起来和前面提到的AppendDog或AppendMmm函数,或者任何其他函数都是一样的。
我的推理显然是不正确的,但是,在书中的这个图中,从幺半群对象到其自身的态射被显示为唯一的实体:

作为结束语/总结:我不明白为什么我们在把幺半群集合抽象为一个范畴之后,仍然对描述它的函数感兴趣。一旦这个集合成为一个范畴中的一个对象,而这个对象代表了整个类型,那么这个集合中的所有函数不是看起来都像恒等函数吗?因为从我们的新Vantage来看,它们似乎都从那个类型开始,然后又回到那个类型。
我希望我已经把我的困惑说清楚了。提前感谢你的帮助!

krcsximq

krcsximq1#

我相信你所观察到的事实是,每个幺半群都同态于平凡幺半群,如果你只看任何幺半群的点和箭头图,它也是平凡幺半群的有效图,但这张图并不是全貌。
当你在“抽象”时,你本质上是在抛弃幺半群上的等价关系,并补充可能的最弱的一个。Append "mm"和Append "" * 是不同的 *,但图中没有说明。可以想象它们是相等的,你将得到一个有效的幺半群,但这改变了等价关系。
即使我们放弃了一些细节,也不应该放弃它们不平等(或者至少 * 可能 * 不平等)的事实,这对结构很重要。

mfuanj7w

mfuanj7w2#

也许一个具体的例子会让我们更容易讨论这个问题。下面是我的具体例子:

t
┌────┐
│    ▼
└─── • ◀──┐
     │    │
     └────┘
       f

这是一个包含一个对象()和两个态射(tf)的范畴。这是一个完整的范畴定义吗?不,我们还需要另一个东西,即复合的定义。我将以查找表的形式给予它。

f ∘ f = f
f ∘ t = t
t ∘ f = t
t ∘ t = f

这是一个完整的范畴定义吗?不,我们还需要做一件事,那就是我们需要为每个对象标识一个态射,作为一个恒等式。对于这个范畴,只有一个对象,并且f对这个对象有正确的行为。
这是一个完整的范畴定义吗?是的!你可能想要验证范畴律--fx = xf = x,以及(x**yz = xy**z)--但也欢迎你相信我的话。(如果这有助于你对这些证明的直觉,你可能会想把f读作“假”,把t读作“真”,把读作“异或"。)
好吧,这是一个单一对象的范畴。希望它清楚地表明,不是所有的态射都是相同的。真和假看起来肯定是不同的概念!
现在比较一下上面的范畴定义和下面的幺半群定义。要定义幺半群,我们必须给予一个集合的三元组(M,+,0),一个二元运算和一个恒等式。定义:

M = {f, t}
f + f = f
f + t = t
t + f = t
t + t = f
0 = f

这说明了布尔型在异或下的幺半群。注意我们的两个发展是多么的相似。对于范畴,我们给出了一个点和箭头图,标识了两个箭头,ft。而对于幺半群定义,我们给出了一个包含两个元素的集合,ft。对于范畴,我们给出了一个组合算子,将两个态射组合成一个。对于幺半群,我们给出了一个取集合中两个元素并返回一个元素的算子;对于范畴,我们确定f为单位态射;对于幺半群,我们确定f为单位元素;对于范畴,我们证明了是结合的;对于幺半群,我们证明了+是结合的;对于范畴,我们证明了与f的复合不起作用,而对于幺半群,我们证明了对f的加法不起作用。
定义幺半群需要提供的数据和定义单对象范畴需要提供的数据是相同的!

相关问题