Enr*_*lis 7 haskell functional-programming category-theory
巴尔托什卢斯基,在部分终端对象的第5章强调以下
请注意,在此示例中,唯一性条件至关重要,因为还有其他集合(实际上,除了空集之外的所有集合)都有来自每个集合的传入态射。例如,为每种类型定义了一个布尔值函数(谓词):
Run Code Online (Sandbox Code Playgroud)yes :: a -> Bool yes _ = True但
Bool不是终端对象。Bool每种类型至少有一个多值函数:Run Code Online (Sandbox Code Playgroud)no :: a -> Bool no _ = False坚持唯一性为我们提供了正确的精度,可以将终端对象的定义缩小到一种类型。
所有这些都发生在Initial Object部分之后,没有进行类似的观察。
因此,我觉得我可能遗漏了初始对象和终端对象之间的关键区别。
根据我的理解,唯一性对于初始对象也很重要,因为我可以观察到还有其他集合(实际上是所有集合)对每个集合(空集除外)都有向外的态射,但通常会有更多不是一个这样的态射(除了那个去().
所以我的问题是:除了将它们连接到其他对象的箭头方向之外,初始对象和终端对象之间是否有任何区别,Bartosz 可能试图用引用的文本下划线?
我知道这个问题,比如作者是什么意思?可能有点不恰当,因为我们不在他的脑海中,但我想谁知道范畴论至少可以提出一些合理的假设。
对每个集合都有一个传出态射(空集除外)
这是关键部分。要求是每个集合句号都有传出态射。一个集合的存在就足以破坏它。这就是为什么,事实上,初始对象 inSet已经明确定义,甚至不需要唯一性:空集是唯一具有指向空集的输出箭头的集。
同时,每个非空集合都有来自真正每个集合的传入箭头,包括空集合,但仅对于一个元素的集合,这个箭头是唯一的。
这是书中的直接引述:“初始对象是具有一个且只有一个态射到类别中的任何对象的对象。” 注意只有一个部分。
顺便说一句,我也很小心不要说“任何其他对象”,因为从初始对象到它自己也有一个独特的态射:它总是身份。