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

问题描述

Bartosz Milewski在Chapter 5 Terminal Object 部分中强调了以下内容

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

yes :: a -> Bool
yes _ = True

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

no :: a -> Bool
no _ = False

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

所有这些都在初始对象部分的 之后,其中类似的观察结果是 不是

因此,我有一种感觉,可能是缺少初始对象和终端对象之间的关键区别。

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

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

我知道像作者是什么意思?这样的问题可能会引起不适,因为我们不在他的脑海中,但是我猜谁知道类别理论至少可以提出一些合理的假设

解决方法

每个集合(空集合除外)

这是关键部分。要求是每个集合句点必须有外向语素。一个分解存在的集合足以破坏它。这就是为什么确实Set中的初始对象已经定义明确,甚至不需要唯一性的原因:空集是唯一具有指向空集的箭头的集。 >

与此同时,每个非空集合实际上都是从每个集合(包括空集合)中传入的箭头,但只有一个元素集合才是唯一的箭头。

,

这是书中的直接引文:“初始对象是具有到该类别中的任何对象的只有一个态射的对象。”注意只有一个部分。

顺便说一句,我也非常小心,不要说“任何 other 个对象”,因为从初始对象到它本身还有一个独特的形态:它始终是身份。