在阅读 Bartosz 的优秀著作《程序员的范畴论》时,我陷入了第二个练习,该练习涉及偏序集中的乘积。给定一个偏序集,
b e
↗ ⤭ ↘
a → c f → h
↘ ⤭ ↗
d g
如何从类别意义上定义产品?根据两个对象的乘积可以分类什么?那么副产品呢?
对象
a
和
的乘积是具有态射b
和c
的对象p :: c -> a
存在,这样对于任何其他对象q :: c -> b
(具有态射c'
和p' :: c' -> a
) ,存在态射q' :: c' -> b
使得m :: c' -> c
和p' = p . m
。 请记住,偏序集中的态射基本上描述了“小于或等于”的关系。q' = q . m
现在两个对象
c
和
a
之间的乘积 b
必须是小于或等于 a
和 b
的对象。例如,让我们从图表中选择 a
作为 e
,将 b
作为 g
: b e -- this one is a
↗ ⤭ ↘
a → c f → h
↘ ⤭ ↗
d g -- this one is b
简单地说,第一个想到的“总是”小于或等于任何其他物体的物体是最小的物体,在这种情况下是
a
。 现在
a
是e
和
g
乘积的有效候选者吗?我们来看看产品的定义:从 a
到 e
是否存在态射?是的,它存在并且可以写成
pₐ = ce . ac
(读作:“首先是从 a 到 c 的箭头,然后是从 c 到 e 的箭头”)。从 a
到 g
是否存在态射?是的,这也存在,可以写成
qₐ = cg . ac
。到目前为止一切顺利,剩下的唯一问题是这是否是“最佳”候选者,因为不存在其他对象,因此我们可以在 a
和其他候选者之间构建唯一的同构?
查看图表,我们可以看到对象
c
也满足所需的条件,即 p = ce
和
q = cg
。剩下要做的就是根据上面的定义对这两个对象进行排名。我们看到存在从 a
到 c
的态射。这意味着
c
必须是最佳候选者,因为我们现在可以定义态射 m = ac
,使得 pₐ = p . m = ce . ac
和 qₐ = q . m = cg . ac
。因此,偏序集中两个对象的乘积实际上是比这两个对象都小的最大对象(也称为最大下界)。值得注意的是,在全序中,这对应于函数min(a, b)
,因为每个对象都必须与任何其他对象相关(Wolfram 称之为三分法)。
与乘积定义类似,余积对应于大于或等于a
和 b
的最小对象。在全序中,这对应于两个对象的最大值。你可以自己解决这个问题。