DennyQi's Log

01 范畴

Categories

一个范畴(category)就是一些点和一些箭头构成的一张图。每个箭头是从唯一一个点指向另一个唯一点的有向边。一张图必须要满足以下要求才能使这张图能被称为一个范畴:

  • 对于每个点aa,都存在一个箭头1a:aa1_a:a\to a
  • 对于任意箭头f:abf:a\to bg:bcg:b\to c,存在箭头gf=acg\circ f=a\to c
  • 对于任意箭头f:abf:a\to b1bf=f1_b\circ f = ff1a=ff\circ 1_a=f
  • 对于任意箭头f,g,hf,g,hh(gf)=(hg)fh\circ(g\circ f)=(h\circ g)\circ f

在范畴里,点被称为对象(object),箭头被称为态射(morphism)。

关于“什么是对象”、“什么是态射”,这是未定义的,换言之它们是“纯粹形式的”。注意,我们不应该把范畴建立在集合论或其它基础理论之上,范畴论本身应该被理解为一个基础理论。范畴论的“对象”可以是任何具体对象的抽象,比如集合论的集合、自然数、一个网页地址,然后“态射”就相对应于该具体对象之间的关系,重要的是,根据范畴的定义,这一关系在“复合”上满足很好的性质。为什么范畴论如此关心“复合(composition)”?这背后有深刻的意义,很重要的一点是,这似乎与人类思维结构本身有关。让我们以“编程”为例:编程本质上是让计算机帮我们做事,实现编程的基本方法是把一个复杂问题拆分成小问题,人类通过分析解决每个小问题,然后通过计算机程序帮我们把这些小问题“复合”起来,解决原先的复杂问题。我们之所以需要这一“分解-复合”的流程来解决复杂问题,归根结底是因为人脑一瞬间所能处理的信息是有限的。人无法解决巨大的问题,只能解决小问题。而正是因为人只能解决小问题,所以如何把小问题复合起来就成为了最重要的问题。范畴论研究的就是“复合”本身,它提醒我们:不要试图去看对象“内部”有什么,应当关注对象与对象之间是如何复合的。