范畴论是数学中的一个高度抽象的分支,它为多种数学概念和结构提供了一个统一的框架。它最初由塞缪尔·艾伦伯格和桑德斯·麦克莱恩在20世纪40年代发展起来,主要是为了更深入地理解拓扑学中的结构,但后来发现它在许多数学领域都非常有用。
让我向你们介绍小明和小丽。 尽管他们是两个截然不同的人,我们仍然可以将他们统称为“人”。 这种将不同对象赋予同一名称的概念,虽然看似简单得近乎微不足道,但被认为是数学本质的核心。
法国传奇数学家亨利·庞加莱曾声称:
数学是给不同事物起同一个名字的艺术。
为了体会这种看似平常的命名概念的力量,我们来看看如何证明小明和小丽有足够多的共同点,可以给他们一个共同的名字。 首先,需要去除那些在判断一个对象是否为人时不相关的细节。 去除这些细节后,显而易见的是,小明和小丽虽然是不同的人,但他们有相同的内部结构。 因此,“人”这个标签,仅仅是给那些在剥去不必要细节后具有相同结构的对象的名称。
这种去除特定细节以揭示底层结构的技术称为抽象(abstraction),它可以说是数学家武器库中最有力的武器之一。
让我们在更数学化的语境中看一个例子,然后探讨如何使用抽象的过程来理解不仅仅是人和数字这样的对象,还有数学本身。
来看看简单的数线。 从负无穷大到正无穷大,你能想象到的每一个(实)数字都存在于这条永无止境的线上。 当在数线上左右移动时,我们常常会被似乎无穷无尽的小数点所淹没,这些小数看起来完全混乱不堪。
-2.533957..... 4.18003.....
-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
但如果我们细心观察,就会发现这些让人讨厌的小数中有很多可以用两个整数的比的更简洁、更美观地表示。如果这种形式适用于这条线上的每一个数字就好了,但遗憾的是,有些数字并不能表示成这种形式,如π。
除去那些不能表示成两个整数之比的数字,如果我们仔细研究,会发现它们展示出一些有趣的特征。 例如,如果取这样的两个数字相加,
587 211 583
–──+──=──
250 70 875
结果似乎总是可以表示为两个整数的比。 这是显而易见的事实。 但我希望我们能真正思考一下。 为什么这是显而易见的? 为什么不可能存在两个整数比相加后得到一个无法以这种形式表示的数字呢?
? ?
─+─=π
? ?
让我们看看“抽象”是否能帮助解决这个难题。 回想一下,抽象是一个过程,通过这个过程去除不相关的细节以揭示底层结构。 那么,让我们取一个任意的整数比,并找出哪些信息对我们来说不重要,以便找到它的内部结构:
161
──
53
这个具体的分子是161,分母是53,对我们来说没有多大用处。 最终,我们只关心分子和分母是整数,它们具体是哪些整数并不重要。 因此,我们去掉这些具体的数字,而换用更一般的符号,r如使用熟悉的字母‘a’和‘b’。
α
─
b
这就是任何整数比的内部结构! 就像对人的抽象一样,我们可以给这个结构一个标签。 数学家称这种结构为“有理数”。 那么,既然已经找到了整数比的真正本质,就可以对这种结构进行运算,
α² α α α · α α²
─ ─ · ─ ── ─
b b b b · b b²
这就是我们熟悉的代数。初等代数简单来说就是应用于数字的抽象研究。 为了证明两个有理数的和也是有理的,可以取两个不同的任意有理数,并证明它们的和是有理的,
α c
─+─
b d
首先,得到了这样的结果:
αd+cb
────
bd
为了完成证明,需要再次应用一些抽象。 这次不相关的细节是分子和分母是如何组成的。 分母是整数的乘积这一事实对我们来说真的不重要,因为两个整数相乘总是得到另一个整数,我们用另一个任意整数替换这个乘积,
bd=q
同样的方法对分子进行处理,用n替换ad,用m替换cb。 最后,我们可以推理,任何两个整数的和也必须是整数,这意味着可以再次用另一个任意整数替换分子,
n+m=p
所以,经过所有这些抽象之后,我们得到的事实是某个有理数加上另一个有理数等于p/q,其中p和q是一些整数。
α c p
─+─=─
b d q
这个结果也是有理的! 因此,我们可以说任意两个有理数的和也必须是有理的,这一点是真实而且被证明的,通过抽象的力量。
抽象的例子
在数字的抽象上,观察其他数学领域如何基于抽象也是一种启发性的练习。 简要概述几个例子:群论是对称性的抽象,环论是基础算术的抽象,图论则是关系的抽象。
到目前为止,我们讨论的抽象主要是将相对具体的对象和现象转化为数学结构,但在20世纪中叶,两位数学家通过抽象一个更基本的概念开辟了一个新的研究领域。范畴论的研究是组合的抽象。 在探讨这种抽象如何使我们能够合理地讨论看似无关的数学、计算机科学和逻辑领域之前,让我们先了解一下组合的含义。
集合论
集合论几乎是理解组合的最好方式,这是数学中一个庞大且极其基础的部分。 集合论研究的是集合,一组事物的集合。 集合论的另一个关键部分是研究如何关联集合,这是通过函数完成的。 函数是一种将一个集合中的每个元素分配给另一个集合中的元素的方法,这种分配也称为映射。 例如,
• 函数'年龄'可以将集合'人'中的每个人分配给集合'整数'中对应该人年龄的数字。
• 另一个名为'>=18'的函数可能是一个将每个整数分配给真或假的函数,具体取决于它是否大于或等于18岁。
年龄
人 → 整数
↓ ≥18?
{True,False}
通过整齐地排列集合,并在对应的箭头旁边写上函数,这些箭头表示函数是如何从一个集合映射到另一个集合的,使这一过程更形象化。
假设有一次选举,只有“人”集合中年满18岁或以上的人能投票。 我们如何找出哪些人有资格投票呢? 我们可以使用“年龄”函数来找出每个人的年龄,然后使用我们的“>=18”函数来检查他们是否年满18岁。
但有没有更快的方法呢? 幸运的是,有更快的方法。 当有两个函数,其中一个的结束集合与另一个的开始集合相同时,总是可以创建一个新的函数,将它们简单地连起来。 在这个例子中,它会直接将一个人映射到真或假上,这取决于他们的年龄是否大于18岁。 我们说这个函数是函数“年龄”和“>=18”的组合,我们将这个新函数写作
≥ 18?◦Age
函数的顺序可能会引起混淆,但将圆圈读作“遵循”可以帮助理解,所以这个函数应该读作“>=18遵循年龄”。 由于这个新函数从一个人映射到真或假,我们可以将其以对角线箭头的形式添加到图表中,作为从“人”集合直接到真值集合的快捷方式。
年龄
人 → 整数
↘ ↓≥18?
≥ 18?◦年龄 {True,False}
在尝试使用抽象来揭示组合的本质之前,我们需要查看一个最后的细节。 考虑一个从人的集合映射到人的集合的函数。 有许多这样的函数,例如将一个人映射到他们父亲的函数。 但其中一个函数特别重要,一个将每个人映射到他们自己的函数。 我们称这个函数为恒等函数,或 id。 这似乎完全没用,但让我们看看当将它与一个更有趣的函数组合时会发生什么。 恒等函数和年龄函数的组合是一个将一个人映射到如21(她的年龄)的函数。
Age o id=Age
注意,这与年龄函数的映射完全相同! 换句话说,将“年龄”与恒等函数组合得到的是年龄函数。 与恒等函数的组合就像乘以1,它实际上什么也不做。
这个函数被证明是非常有用的,所以我们会将它添加到图表中。
id 年龄
↻人 → 整数
↘ ↓ ≥18?
≥ 18?◦年龄 {True,False}
每个集合都存在一个恒等函数,其定义为将集合中的每个元素映射到它自身,但我只在人的集合上显示了它,以避免图过于杂乱。 这就是集合论中的组合,虽然看起来非常小众,似乎不适用于其他地方,但事实证明,这样的组合是数学、计算机科学和逻辑中众多的领域的基石。
为了理解这一点,我们需要使用一些抽象。 你现在知道怎么做了,让我们看看哪些细节与组合无关,以便可以去除它们。 首先用字母A替换集合'人',它简单地代表某个实体可以放在这个位置。 对其他两个集合做同样的处理,使用字母B和C。 我们将这些抽象的集合称为对象(object)。
id 年龄
↻A → B ← Object
↘ ↓ ≥18?
≥ 18?◦年龄 C
对函数做同样的概括,简单地用字母f和g来表示新抽象对象之间的某种关系,我们将这些抽象的函数称为箭头(Arrow)。
id f
↻A → B ← Object
↘ ↓g ↖ Arrow
g◦f C
重要的是要记住,尽管这个特定的图表有3个对象和任意两个不同对象之间的单个箭头,但这绝不是一个限制。 可以有尽可能多的对象,并根据需要定义它们之间的尽可能多的箭头,甚至允许有无限多的对象或箭头。 但为了保持图表的清晰和简洁,我只显示3个对象。
对于任意两个箭头,其中一个的结束是下一个的开始,
id f
↻ A → B
↓ g
C
总应存在一个可以切角的箭头,
id f
↻ A → B
g◦f ↘ ↓ g
↗
Composition C
我们称这个箭头为它们的组合(Composition)。 为了确保组合的行为与集合论中的函数组合类似,我们要求如果将一个箭头与一个已组合的箭头组合,必须能够按任何顺序组合它们,并且最终得到相同的箭头。
(g◦f)◦h=g◦(f◦h)
我们说箭头的组合必须是结合的(Associativity)。 例如,加法是结合的,因为(1+1)+1=1+(1+1)。那减法呢,(1-1)-1=1-(1-1)?。
最后,由于我们无法再用集合和元素来定义恒等箭头,我们将其定义为组合的单位,换句话说,要求每个对象都有一个循环箭头,与它组合时它什么也不做。
f◦id=f
这就是我们得到的函数组合的内部结构。 就像我们给人和有理数的抽象形式起了一个共同的名字一样,数学家们称这种结构为范畴(Category)。 通过指定对象和箭头,以及定义箭头的组合并展示它们符合一些限制,可以展示许多不同的数学领域形成了一个范畴,这将意味着使用范畴构建的任何证明都立即在这些数学领域中有效。
如果你对这些具体例子不熟悉,也不用担心,我的目的是展示具有相同底层结构的广泛主题。 首先,如果对象是向量空间,箭头是矩阵,组合是矩阵乘法,恒等箭头是单位矩阵,我们就在线性代数领域定义了一个范畴。
Linear Algebra
1 0 √3 1
( ) ( )
0 1 ↷ –2 √2
ℚ² → ℝ²
↘ 2 –1
2 –1 √3 1 ↓ (0 1)
(0 1 ) ( ) –2 2
–2 2 –2 √2 ℝ³
或者如果对象是数据类型,箭头是它们之间的函数,组合和恒等箭头的定义与集合论中相同,我们就创建了一个模拟基本函数编程语言的范畴。
Functional Programming
id ↷ sqrt
lnt → Float
↘ ↓islnteger
islnteger◦sqrt
Bool
如果你有编程经验,为什么不试着弄清楚复合函数 'isInteger ○ sqrt' 对给定输入返回什么。 你能想出一个合适的函数名吗? 也许直觉上不那么明显,让我们设对象为整数,两个整数之间的箭头表示第一个整数小于或等于第二个整数。 组合可以被认为是基于这样的事实:知道1小于2且2小于3,可以具体地说1必须小于3,因此我们可以在它们之间画一个箭头。
≤
1 → 2
≤ ↘ ↓≤
3
恒等箭头的存在仅仅因为每个数字都小于或等于它自己。 然后我们就基于整数的排序构建了一个范畴。 范畴论之所以非常有用,原因与抽象有理数的原因相同。 我们可以构建直接适用于所有这些不同数学领域的证明。
例如,考虑一个相对简单的证明:范畴中的每个对象只能有一个唯一的恒等箭头。 假设确实有一些对象在一个范畴中有两个恒等箭头,另一个恒等箭头用上面有横杠的id表示。
─
id & id
根据恒等箭头的定义,任何以该对象为起点的箭头,我们称之为f,与恒等箭头组合,恰好给出完全相同的箭头。
f◦id=f
由于这对任何以对象为起点的箭头都必须是真的,所以对第二个恒等箭头也必须有效,因为这两个起点和终点都是这个对象。
─ ─
id◦id=id
考虑另一个方程。 由于带横杠的id也是一个恒等箭头,任何以该对象为终点的箭头,我们称之为g,与带横杠的id组合,必须是其本身。
─
id◦g=g
注意这里组合的顺序已经变了,但恒等箭头作为组合的单位意味着它在箭头之前或之后组合都会返回相同的箭头。 就像之前一样,这个方程对任何以该对象为终点的箭头都必须是真的,包括另一个恒等箭头。 现在让我们看看这两个方程,
─
id◦id=id
─ ─
id◦id=id
注意它们左边是完全相同的! 经过一些重新排列,我们得出结论:第一个恒等箭头等于我们的第二个恒等箭头。 它们从一开始就是相同的!
正如证明所示,无法存在两个不同的恒等箭头,它们必须是相同的。 不可否认这是一个相当简单的证明,但我希望我们能真正意识到这样一个简单证明的深远影响。 已经证明:对于给定的维度,只存在一个恒等矩阵;在函数编程语言中,每种数据类型只有一个恒等函数;从一个集合到其自身只有一种可能的恒等映射,所有这些都在一个简洁的小证明中得到了证实。
总而言之,范畴论让我们能够概括在如此多独立的数学、计算机科学以及更广泛领域中共享的行为。 我们从在学校学习的基础代数覆盖到了迄今为止可能是数学中最抽象的领域。 但最重要的是,我们看到这些研究领域是如何由同一个工具推动的。
我希望我已经让你相信,抽象这一强大的工具确实值得被称为数学家的武器。
数学联邦政治世界观提示您:看后求收藏(笔尖小说网http://www.bjxsw.cc),接着再看更方便。