将“最佳”产品类型映射到“次优”产品类型的唯一态射m是否真的唯一?

时间:2019-03-20 19:56:37

标签: category-theory

我正在研究Bartosz Milewski关于类别理论的出色博客。我被困在products and coproducts上。

Bartosz说,两个对象ab的乘积是带有两个投影的对象c,因此对于任何其他带有两个投影的对象c'是从mc'的唯一变态c,将这些投影分解。

我们当然可以在集合和函数的类别中找到合适的示例。 IntBool这两种类型的乘积是(Int, Bool)对。这两个投影分别是p (int, _) = intq (_, bool) = bool。但是,IntBool乘积的另一个候选者:类型为Int,投影为p' int = intq' _ = True。正如Bartosz所说:“虽然很la脚,但符合条件。”请注意,产品类型Int包含的值少于产品类型(Int, Bool)。准确地说是一半。即使两种产品类型都可以映射到整个Int类型,但是产品类型Int可以映射到Bool类型的一半。它不是形容词(如果这是正确的词)!

因为我们可以提出一种m :: (Int, Bool) -> Int的简单用法(其中m只能唯一地实现为m (int, _) = int),所以我们知道产品类型{{ 1}}比(Int, Bool)更好。在这一点上,我想知道:难道我们不能像Int那样容易地实现m吗?那不是第二种态吗?还是不允许这样做,因为得到的乘积m (int, _) = int + 1实际上根本不是Int,而是Int被“移位了” 1?

L

1 个答案:

答案 0 :(得分:1)

m中的箭头指向错误的方向。我们知道(Int, Bool)Int“更好”,因为我们有一个态射m :: Int -> (Int, Bool)m x = (x, True)。它满足p . m == p'q . m == q'的条件,这就是m 分解 p'q'的含义。如果您以其他任何方式定义m,则此条件将不成立。

例如,如果将其定义为m x = (x + 1, True),则定义为p (m 0) == 1,但是定义为p' 0 == 0

您的地图m' :: (Int, Bool) -> Int如果将pq分解,也将指出Int是合适的产品。但是合成q' . m' :: (Int, Bool) -> Bool始终返回True,因此它不能等于q