类别中初始对象和终止对象之间的区别

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

Bartosz Milewski,在第 5 章终端对象部分强调了以下内容

请注意,在这个例子中,唯一性条件至关重要,因为还有其他集合(实际上,所有集合,除了空集合)都有来自每个集合的传入态射。例如,为每种类型定义了一个布尔值函数(谓词):

yes :: a -> Bool
yes _ = True

但是

Bool
不是终端对象。每种类型中至少还有一个
Bool
值函数:

no :: a -> Bool
no _ = False

坚持唯一性为我们提供了正确的精度,将终端对象的定义缩小为一种类型。

所有这些都发生在之后部分初始对象,其中没有进行了类似的观察。

因此,我感觉我可能错过了初始对象和最终对象之间的一个关键区别。

根据我的理解,唯一性对于初始对象也至关重要,因为我可以观察到还有其他集合(实际上是所有集合)对每个集合(空集除外)都有传出态射,但一般来说会有不止一个这样的态射(除了

()
的那个)。

所以我的问题是:除了将它们连接到其他对象的箭头方向之外,初始对象和终止对象之间是否有任何区别,Bartosz 可能试图用引用的文本下划线?

我知道像作者的意思是什么?这样的问题可能有点不恰当,因为我们不在他的脑海中,但我想知道范畴论的人至少可以提出一些看似合理的假设。

haskell functional-programming category-theory
2个回答
9
投票

每个集合都具有传出态射(空集除外)

这是关键部分。要求是每个集合都存在传出态射句号。如果存在一组发生故障的情况,就足以破坏它。这就是为什么

Set
中的初始对象实际上已经被明确定义,甚至不需要唯一性:空集是 唯一一个具有指向空集的传出箭头的集。

同时,每个非空集合都有来自真正每个集合(包括空集合)的传入箭头,但仅对于单元素集合,该箭头是唯一的。


7
投票
这是书中的直接引用:“初始对象是对类别中的任何对象具有且仅有一个态射的对象。”注意

只有一个部分。

顺便说一句,我也很小心不要说“任何

other对象”,因为从初始对象到自身也有一个独特的态射:它始终是恒等式。

© www.soinside.com 2019 - 2024. All rights reserved.