不太理解`F(1A) = 1F(A) ∀ A ∈ C1`作为函子定律

Not quite understand `F(1A) = 1F(A) ∀ A ∈ C1` as the Functor law

我正在阅读这篇关于 scala 中的类别和函子的文章:https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/

本部分:

In order to preserve the category structure this mapping must preserve the identity maps and the compositions. More formally:

F(1A) = 1F(A) ∀ A ∈ C1

F(g ο f) = F(g) ο F(f) ∀ f: A → B, g: B → C where A, B, C ∈ C1

我不太理解:F(1A) = 1F(A)

为什么右边的部分是 1F(A) 而不是 F(A)

我在其他文章中看到,Functor的恒等律是:

fa.map(a => a) == fa

与 1F(A)

无关

如果A是原类别中的对象,则F(A)是新类别中对应的对象。如果原类别中有箭头A->B,则新类别中必然有相应的箭头F(A)->F(B)。因为 1A 只是一个箭头 A->A,这意味着一定有一个箭头 F(A)->F(A),也就是 1F(A)。更紧凑地,F(1A) = 1F(A).

我认为您对符号表示的内容感到困惑。

1A 表示恒等箭头,它只是一个 arrow/mapping 从类别中的对象 A 到自身,即 A -> A.

类似地,1F(A)表示恒等函子,它只是一个从函子F(A)到它自身的箭头,即F(A) -> F(A ).

因此,箭头 1F(A) 与函子 F(A) 不同,所以说 1 是错误的F(A) = F(A) 按照你的建议。

为了回答你为什么 F(1A) = 1F(A) 的问题,请考虑以下内容解释:

F(1A) = F(f : A -> A ) = F(f) : F(A) -> F(A) = 1F(A)

另外,现在我们已经弄清了符号的含义,代码片段与函子定义一致:

fa.map(a => a) == fa

fa 是一个函子,映射使用恒等函数将函子的每个元素映射到自身。这再现了一个相当于原始函子 fa 的函子,因此映射可以用范畴论的语言表示为 1F(A)

所以大家看到范畴论里面有一个箭头和一个对象的概念,大家看符号的时候肯定能区分和理解。如果您真的对这个主题感兴趣,我强烈建议您阅读 Steve Awodey's Category Theory 的第一章。