在分类理论中,两个空集可以同构吗?

时间:2019-07-14 00:47:10

标签: haskell category-theory isomorphism

我是Haskell的初学者,我想创建一个函数来确定两个列表之间是否存在同构。我认为如果长度相同> 0,答案是肯定的。

但是空集呢?空集之间可以有同构吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

这当然取决于类别!

在标准类别SET中,其中的对象是集合,箭头A-> B是将B的元素与A的每个元素相关联的函数,表示空集合的任何两个对象之间肯定存在同构关系-实际上,他们是同一个对象!

还可以想象一个类别,其中集合被附加的代数结构所充实(这样,从该类别到SET都有一个明智的健忘函子),尽管健忘函子映射,附加的代数结构仍可以区分两个对象它们都为空集,在这种情况下,它们之间可能没有同构。

答案 1 :(得分:3)

在Haskell中,我们通常将类型视为类别中的对象,而不是单个值。除非我们定义列表是对象的“自定义”类别,否则询问一个列表(一个值)是否与其他列表同构是没有意义的。对于后一种情况,答案取决于我们如何定义类别。

无论如何,在集合的类别中,给定任何集合A,从空集合f : {} -> A{}仅有一个功能(态射)A。这是具有空域的唯一功能,恰好与空集重合。为了帮助理解这一点,请记住函数f : X -> Y是一对对

f = {(x0,y0),(x1,y1),....}
  with x0,x1,... in X, and y0,y1,... in Y

这样

for any x in X there is a unique y in Y satisfying (x,y) in f

X = {}时,我们不能选择x0,x1,... in X,因此唯一的选择是拥有f = {},即“空对”。 f是一个函数,因为条件降低为

for any x in {} .......

这是虚无的事实,因为对空集的通用量化始终是正确的。

因此,对于任何f : {} -> A,都只有一个函数A。即使A = {}也是如此,在这种情况下,f : {} -> {}也是同构。确实,我们有f = id(因为没有其他函数!)和f . f = f = id(因为没有其他函数!),所以f是它自己的逆。