functor
函子(functor)就是范畴(category)间的态射(morphism)。
设有范畴和,一个函子(functor)由两部分组成,
(1)作用在对象上的函数,它将中的每一个对象,映射为中的一个对象
(2)作用在箭头上的函数,它将中的每一个箭头,映射为中的一个箭头
并且,这两个函数使得以下等式成立,
forgetful functor
一个函子可能会“遗忘”范畴中的部分(或全部)结构,这样的函子称为遗忘函子(forgetful functor)。
例如,遗忘函子,将范畴中的每一个群,映射为一个由群的所有元素组成的集合,
(“遗忘”了建立在群乘法之上的群结构,)
并且将范畴中的任意两个群之间的群同态,映射为两个集合之间的函数。
一个函子称为完全的(full),
如果对于中的任意两个对象,以及对应中的箭头,
存在的箭头,使得。
一个函子称为忠实的(faithful),
如果对于中的任意两个对象,以及中的任意两个箭头,
如果,就有。
hom-set
以上两个概念(完全的,忠实的),可以使用hom-set术语重新描述,
设中有两个对象,函子,
将中每一个箭头映射为中的一个箭头,
这样就定义了一个函数,,
我们说函子是完全的,如果是一个满射(surjective),
我们说函子是忠实的,如果是一个单射(injective)。
其中,表示所有从对象到对象的箭头所构成的集合,
表示箭头的始端,表示箭头的终端。
如果一个函子既是完全的,又是忠实的,我们就说它是完全忠实的,这时是一个双射(bijection)。
comma category
给定范畴和函子,,
逗号范畴(comma category),由以下对象和箭头组成,
它的对象为三元组,
其中,是中的对象,是中的对象,是中的箭头,
它的箭头为二元组,
其中,,,并且满足,。
coslice category
取中的某个元素,它唯一对应一个函子,
在这种情况下逗号范畴,记为,称为余切片范畴(coslice category)。
它的对象是,,
其中,是中的对象,是中的箭头。
它的箭头是,,
其中,,并且满足,。
如果是一个单位函子(identity functor),
那么,还可以写为。
slice category
同理,我们可以定义切片范畴(slice category),
只需要取为单位函子,为函子即可。
initial object & terminal object
设是一个范畴,是它的一个对象,如果对于中的任意对象,存在唯一的箭头,
就称是范畴的始对象(initial object)。
同理,如果对于中的任意对象,存在唯一的箭头,
则称是范畴的终对象(terminal object)。
initial morphism & terminal morphism
设是范畴,是函子,是范畴中的一个对象,
根据始对象的定义,余切片范畴的始对象,满足以下条件,
对于范畴中的任意对象,,
存在唯一的箭头,,使得。
该条件称为,初始性质(initial property),
始对象,称为从对象到函子的始态射(initial morphism)。
同理,我们把切片范畴的终对象,
定义为从函子到对象的终态射(terminal morphism),
终对象所满足的性质,称为终止性质(terminal property)。
在不引起歧义的情况下,
我们将始态射和终态射统称为泛态射(universal morphism)。
adjoint functor
设是范畴,是函子,是范畴中的对象,
是从对象到函子的始态射,,
是从对象到函子的始态射,,
根据初始性质(initial property),
对于中的箭头,存在中唯一的箭头,
使得,。
以上定义了一个从范畴到的一个对应关系,
我们把范畴中的对象,分别对应到了范畴的对象上,
把范畴中的箭头,对应到了范畴的箭头上。
如果范畴中的任意对象都满足这个条件(初始性质),
我们就找到了一个从范畴到范畴的函子,,
称为的左伴随函子(left adjoint),称为的右伴随函子(right adjoint),记为。
范畴中的一族箭头,构成了一个自然变换,,其中是范畴的单位自函子。
伴随函子的概念还可以用hom-set来描述,
设和都是范畴,,是函子,如果,
那么,对于中的任意对象,中的任意对象,是一个双射,
且对于任意的,有,。
algebra
在泛代数(universal algebra)中,一个代数(algebra)或者说一个代数结构(algebra structure),
由一个集合以及集合上是一系列运算构成。
集合上的元运算是一个函数,它将中的个元素,映射为一个,
代数中所有运算的集合记为,我们称该代数是一个类型的代数。
在泛代数和伴随函子之间有紧密的联系,
假设范畴,由所有类型的代数构成,
遗忘函子,具有左伴随函子,
则对于范畴中的任意集合,给出了由生成的,类型为的自由代数(free algebra),
自由代数中的对象,称为自由对象(free object)。
Kleene closure
集合的克林闭包(Kleene closure)由下式定义,
其中,,,。
中的元素称为字符串(string),定义中的称为字符串的连接操作。
free monoid
中所有的字符串,以空串作为单位元,以连接操作作为群乘法,构成了一个幺半群(monoid),
称为由生成的自由幺半群(free monoid)。
设范畴为所有的幺半群构成的范畴,它的对象为具体的某个幺半群,它的箭头为幺半群之间的群同态。
设范畴为所有的集合构成的范畴,它的对象为具体的某个集合,它的箭头由集合之间的映射。
设为范畴到之间的遗忘函子,我们定义,
它将范畴中的幺半群,映射为其元素集合,
它将范畴中的群同态,映射为群元素集合之间的映射。
则中某集合上的自由幺半群,就是由该集合生成的自由代数。
proof
要证是一个由生成的自由代数,
只需证明是对象到函子的始态射,
其中,是范畴中的箭头(集合间的映射)。
始态射是余切片范畴的始对象,且满足初始性质,
对于范畴中的任意幺半群,给定范畴中的任意箭头(集合间的映射),
存在唯一的中的箭头(群同态),使得,,
因为,群同态已经表示成集合的映射了,所以,可以表示为。
即,需要证明集合到函数,决定了一个唯一群同态。
我们使用数学归纳法进行证明,
因为由多个不相交的子集构成,
可以看做从由多个分量组成,。
根据的定义,,所以是唯一确定的,只能是,
又,所以,如果是群同态,则必须,其中为的单位元,所以也是唯一确定的。
此外,要想是群同态,必须有,其中,所以也是唯一确定的。
因此,如果是一个群同态,就可以由唯一确定。
总之,函数确定了唯一的群同态,
使得,其中,
因此,就是由生成的自由代数。
note
实际上是一个集合,它连同字符串的连接操作构成了一个自由幺半群,
这个自由幺半群在遗忘函子中的像是集合,
也在范畴中,但不是自由幺半群在中的像,它们之间的箭头是。
自由幺半群是一个自由代数,它的生成集是,而不是它在中的像。
指的是,对于任意的从生成集到其他集合的映射,
存在唯一的群同态(这里用映射表示了群同态),使得初始性质(initial property)成立。
此外,与自由幺半群类似的,
自由单子(free monad)是由自函子生成的幺半群(单子),
,
自函子范畴,对象是自函子,箭头是自函子之间的自然变换,
单子范畴,对象是单子(由自函子构成的幺半群),箭头是幺半群同态。
遗忘函子,
将单子范畴中的单子,映射成自函子范畴中的函子,
将单子范畴中的幺半群同态,映射为自函子范畴中的自然变换,
其中,为的左伴随函子,。
reference
Categories for the Working Mathematician 2nd
Category theory for computer science
Wikipedia: Initial and terminal objects
Stack Exchange: Why is the free monoid free?