以下所有内容如何才能成立?
Hask
类别中,对象是Haskell类型和
态射是Haskell函数。价值观在Hask
中不起作用。 A
并终止于同一对象A
的箭头。id
函数扮演。id
函数返回的值必须与之相同
传入的参数的值。如果在类别理论中将身份态射定义为从对象A返回到相同对象A的箭头,那么f :: A -> A
类型的任何Haskell函数都不满足该描述吗?
有another question的答案可能也可能涵盖这个主题,但他们似乎对类别理论有一定程度的熟悉,我很遗憾没有。
在我看来,这是一个非常基本的初级问题。那么有人可以仅使用初学者可以理解的语言,符号和名义构造来提供答案吗?
答案 0 :(得分:12)
我不确定我是否真的理解你的问题。
但类别中的身份必须满足
id . f = f
g . id = g
适用于任何f,g
个正确类型。因此,id
不仅仅是任何随机函数A -> A
,而是满足上述要求的函数。
请注意,在Hask中,我们可以使用任何值a :: A
id . (const a) = const a
因此
id (const a ()) = const a ()
因此
id a = a
所以id
正是我们所期望的。
答案 1 :(得分:6)
id
应该是任何给定Haskell类型的标识态射。 Hask 中类型A的识别态射是A -> A
类型的函数,但它不仅仅是类型为{{1}的任何函数};它必须遵守类别法。
特别是,对于具有到/来自对象A的态射的合成,它必须是左右标识。如果A -> A
是对象A的识别态射,则这意味着任何对象B和态射idA
,f :: A -> B
必须与f . idA
完全相同,对于任何对象C和态射f
,g :: C -> A
必须完全相同与ifA . g
相同。
我们可以通过选择具体案例来测试您声称任何g
类型的函数都可以成为A的身份。让我们将A -> A
作为Integer的标识,并考虑函数(+1) :: Integer -> Integer
。现在很明显(*2) :: Integer -> Integer
,(*2) . (+1)
和(+1) . (*2)
都是一样的,所以我们已经展示了 - 哦等等,这些功能完全不同。
注意我的不在这里引入了Haskell值的相等性。我在谈论 Hask 类别中态射的平等;在类别理论的范畴内,态射的等同性肯定是 ,因为没有它,关于身份态射的范畴规律是没有意义的。
我一度感到困惑的一个关键点是,尽管考虑具有相同类型的两个不同的对象是没有意义的(因为对象是< / em>类型当我们谈论 Hask )时,你可以有两个不同的状态具有相同的类型。类别理论确实允许在两个对象A和B之间存在几个不同的态射(并且允许从对象到其自身的态射,这些态射是不身份态射,并且彼此区分)。态射不是纯粹由他们的&#34;端点&#34;。
定义的身份法实际上是非常严格的要求,并且应该强烈暗示不仅任何旧(*2)
函数将对A -> A
执行。有一种清晰的直觉,即能够在不改变它们的情况下与任意其他态射合成,身份态度需要做什么&#34;什么都不做&#34; (无论对于有关类别的意义如何)。
在 Hask 中我们知道态射是函数,有一个非常明显的解释&#34;什么都不做&#34 ;;只返回其输入的函数。应该清楚的是, 适用于类别法:
idA
此外,如果提议的身份态射执行其他而不是返回其输入(存在一些f . id = f
id . f = f
,x
不是badId x
),那么你可以通过尝试与x
组合来反驳类别法!
id
假设{p> (badId . id) x
badId (id x)
badId x
不是badId x
,因此x
不能等于badId . id
(由id
定义)。所以id x = x
不是作品的左侧身份。
答案 2 :(得分:3)
似乎你对Hask类别和类别有一些常见的误解,但也许它们都归结为
- 在
醇>Hask
类别中,Objects是Haskell类型,而Morphisms是Haskell函数。价值观在Hask
中不起作用。
这并没有多大意义。 Hask中的态射是函数,函数是值,所以从这个意义上说,值已经在Hask中发挥作用。
当且仅当函数f, g :: A -> B
相等时,Hask中从A到B的两个态射f和g是相等的,当且仅当对于每个值a :: A
时,值{{ {1}}和f a
相等。因此,在扩展了这个定义后,我们发现不一定是函数的值(如g a
)在Hask中也有一定的作用。
Hask的单位和关联公理在这个意义上是函数的等价,所以他们对价值水平有很多话要说!
先验地,非功能类型的值不会明确地出现在构成Hask类别的(对象,态射,身份,组合规则,单元和关联属性)的清单中。但实际上,值a :: A
可以在Hask中编码为态射a :: A
,不同的值const a :: () -> A
对应于从()到A的不同态射。这是chi&#39中使用的事实;计算显示除了熟悉的a :: A
之外,我们对Hask中的对象A上的身份函数没有其他选择。