haskell - 在范畴论中,两个空集可以同构吗?

标签 haskell category-theory isomorphism

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

但是空集又如何呢?空集之间可以存在同构吗?

谢谢。

最佳答案

在 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 = {}时,我们无法在X中选择x0,x1,...,因此唯一的选择是让f = { },“空对集合”。 f 是一个函数,因为条件简化为

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

这是一个空洞的真理,因为对空集的通用量化总是正确的。

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

关于haskell - 在范畴论中,两个空集可以同构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023799/

相关文章:

c++ - boost 图相等性和子图

python - igraph 错误识别子同构?

haskell - 如何使用 QuickCheck 生成任意二元函数?

.net - 在 .NET 中调用 Haskell 函数

list - 如何阅读这份 list ?

haskell - list monad 不是一个免费的 monad,但是……

haskell - 从具有默认值的镜头获取可能

haskell - Hask 中的仿函数和自由对象

function - Scala -- 如何在非函数类型上使用仿函数?

c++ - BGL : Example of isomorphism with vertex invariants