haskell - 类别中初始对象和终止对象之间的差异
问题描述
Bartosz Milewski 在第 5 章的终端对象部分强调了以下内容
请注意,在此示例中,唯一性条件至关重要,因为还有其他集合(实际上,除了空集之外的所有集合)都具有来自每个集合的传入态射。例如,为每种类型定义了一个布尔值函数(谓词):
yes :: a -> Bool yes _ = True
但
Bool
不是终端对象。每种类型至少有一个多Bool
值函数:no :: a -> Bool no _ = False
坚持唯一性为我们提供了恰到好处的精确度,可以将终端对象的定义缩小到一种类型。
所有这些都在Initial Object部分之后,没有进行类似的观察。
因此,我觉得我可能遗漏了初始对象和最终对象之间的关键区别。
根据我的理解,唯一性对于初始对象也很重要,因为我可以观察到还有其他集合(实际上是所有集合)对每个集合(空集除外)都有一个传出态射,但通常会有更多比一个这样的态射(除了去()
.
所以我的问题是:除了将它们连接到其他对象的箭头方向之外,初始对象和终端对象之间是否有任何区别,Bartosz 可能试图用引用的文本强调?
我知道这个问题,比如作者是什么意思?可能有点不合时宜,因为我们不在他的脑海中,但我想知道范畴论的人至少可以提出一些似是而非的假设。
解决方案
对每个集合都有一个传出态射(空集除外)
这是关键部分。要求是每个 set句号都有输出态射。一个集合的存在足以破坏它。这就是为什么,事实上,初始对象 inSet
已经明确定义,甚至不需要唯一性:空集是唯一具有指向空集的传出箭头的集合。
同时,每个非空集合都有来自真正每个集合(包括空集合)的传入箭头,但仅对于单元素集合,该箭头是唯一的。
推荐阅读
- java - 在java中将正则表达式模式替换为小写
- jquery - 如何使用jquery将具有多行的表中的设置输入值设置为兄弟文本?
- node.js - async save multiple document with mongoose
- javascript - 基于 URL 查询字符串的弹出和淡入淡出消息 - CSS/JS
- bash - Quotes in sh -c command - syntax error
- java - 如何在netbeans中处理图像上的文本字段
- python - 使用 python 脚本将 google sheet 下载为 csv
- matlab - 从元胞数组中提取内容
- django - (1045, "Access denied for user 'root'@'cloudsqlproxy~[cloudsql instance ip]' (using password: NO)")
- java - 如何捕获 Mat 对象并将其传递给新活动?