这份笔记的标题是《抽象代数学习笔记》,但我先坦白:抽象代数这门课,我前前后后读了三遍,才勉强觉得自己摸到了门。第一次读的时候,满屏的定义定理像是在空中搭积木,每个字都认识,连在一起却不知道在干什么。后来我换了个笨办法——倒回去把抽象代数的历史翻了一遍,再把“运算”这件事彻底想清楚,很多概念才真正落到地上。这篇博文,就是把我从历史到运算、从公理到例子的这段学习过程重新整理一遍。适合正在上抽象代数课、准备考研复试,或者单纯好奇“群环域到底是什么”的读者。我会把抽象代数的历史脉络和核心运算体系揉在一起讲,尽量说人话,不绕圈子。
1. 为什么先读历史:抽象代数不是天上掉下来的
抽象代数最劝退的地方,就是它一上来就给你“集合+运算+公理”这种极简框架,完全没有解释这些框架从哪来。很多教材第二页就出现了“群”的定义,第三页开始证明定理,至于“为什么要这样定义”,教材默认你自己悟。我的体会是,不读历史,你很难悟出来,因为公理化的表达方式把来源藏得太深了。
1.1 从五次方程开始:一场四百年的追逐
抽象代数真正的起点,不是某个数学家闲得无聊想推广运算,而是一个实打实的老大难问题:什么样的方程能用根式求解?
二次方程的求根公式,初中就学过。三次、四次方程在16世纪也被意大利数学家解了出来,公式虽然又长又丑,但至少能写出来。于是人们自然要问:五次方程,有没有类似的根式解?这个问题看起来只是“再往前多走一步”,结果这一走就是两百多年。
拉格朗日在1770年前后做了一项非常关键的工作。他没有再去硬凑五次方程的求根公式,而是转身研究“为什么三四次方程能成功”。他发现,解方程时真正起作用的,不是那些符号本身,而是符号在置换下的表现。比如把一个方程根的排列顺序打乱,某些表达式会保持不变,某些表达式只是换了个排列方式。拉格朗日把这种东西叫“预解式”,并意识到:方程能不能根式求解,可能取决于根的置换结构。
这个想法后来被鲁菲尼和阿贝尔接了过去。鲁菲尼写了一本几乎没人读得下去的书,论证五次方程没有根式解;阿贝尔在19世纪20年代给出了更严格的证明,也就是现在说的阿贝尔-鲁菲尼定理。但真正把问题讲透的是伽罗瓦。伽罗瓦用“置换群”来刻画方程的对称性,然后给出了一个判据:一个方程能用根式求解,当且仅当它的“伽罗瓦群”满足某种分解条件。一般五次方程的伽罗瓦群是对称群 S5,而 S5 不满足那个条件,所以没有根式解。
我读这段历史时最大的震撼是:为了回答“五次方程有没有公式解”这个具体问题,数学家被迫造出了一套研究“对称性”的语言。而这个语言后来长成了整个抽象代数。伽罗瓦不到二十一岁就去世了,但他留下的笔记足够让后人忙活上百年。所以说,群论不是闲出来的一门学科,它是被一个具体问题逼出来的。
1.2 历史带来的三条学习线索:集合、结构、映射
把历史捋一遍之后,我再看抽象代数教材,感觉完全不一样了。教材里的概念其实都对应着历史中的真实需求,我给自己总结了三条线索,用来串起整门课。
第一条线索是“集合”。以前我们总觉得数学研究的对象是数,但抽象代数告诉你,研究的对象可以是任意集合:可以是一堆置换,是一堆多项式,是一堆矩阵,甚至是一堆细菌的基因型。你先把研究对象装进一个集合里,然后在这个集合上定义运算,看看能冒出什么结构。
第二条线索是“结构”。一个集合加上一种或两种运算,如果满足某些规则,就成了群、环、域。这些结构不是拍脑袋想出来的,而是从整数、有理数、实数、复数这些“老熟人”身上提炼出来的公共规则。比如整数有加法和乘法,有理数、实数、复数也都有加法和乘法,但它们之间又有区别:有理数里能做除法,整数里不行。这种区别用“域”和“整环”这样的术语刻画出来,比整天念叨“有理数可以做除法”要清晰得多。
第三条线索是“映射”。有了结构和结构,自然要问:两个结构之间的运算规则能不能对应起来?这就是同态和同构的雏形。伽罗瓦当年也是在方程的根的置换群和方程的某种排列结构之间找对应关系。说白了,历史教给我的三件事就是:先把对象打包成集合,再在集合上定义运算,最后用映射把不同结构联系起来。抽象代数整门课,基本都在干这三件事。
2. 运算:抽象代数最小的事务单元
如果说集合是抽象代数的主角,那运算就是它的基本动作。很多人学抽象代数卡住,不是因为集合不懂,而是对“运算”的理解还停留在“加减乘除”上。这一章我把运算单独拎出来讲透,因为群、环、域这些结构,本质上都是“一个集合+若干运算+若干规则”的组合。
2.1 一个二元运算到底在说什么
抽象代数里说的“运算”,绝大多数指“二元运算”。它的定义其实很朴素:给定一个集合 G,二元运算就是从 G × G 到 G 的一个映射。这句话翻译成人话就是:任取两个 G 里的元素 a 和 b,经过运算之后,得到的结果仍然是 G 里的一个元素。这个性质叫“封闭性”。
封闭性听起来简单,实际最容易出错。举个反例:取全体正整数的集合,做减法运算。3 减 5 等于 -2,而 -2 不是正整数,结果跑出去了,所以正整数集合配上减法不构成一个封闭的运算。但你换一个视角,把集合扩大到全体整数,减法就封闭了。这就是为什么教材一上来强调“集合和运算是绑在一起看的”:同一个集合,换一种运算,结构可能就变了;同一个运算,换一个集合,也可能不成立。
我当初理解封闭性的一个好方法,是把它想象成“门禁系统”。你规定一个集合是活动范围,二元运算是规则。规则说,任意两个人按规则操作,出来的结果必须还在这扇门里面。如果结果溜到门外,那这个规则就不能在这个群体里运行。用这个角度看,整数集合上减法封闭,正整数集合上减法不封闭,一下就清楚了。
二元运算还有一个容易忽略的点:它必须“先取两个元素”。这听起来像废话,但很多人刚接触群的时候,会不自觉地把减法、除法混进来。减法本质上是“加上相反数”,除法本质上是“乘以倒数”,它们都能化归成另一个更基础的运算。在抽象代数里,我们更愿意直接定义基础运算,而不是绕弯子。
2.2 运算的四条公理与群的门槛
有了二元运算,接下来就要问:这个运算满足哪些规则?群的定义就是一套精挑细选的规则,一共四条:封闭性、结合律、单位元、逆元。
封闭性刚才说了。结合律指的是 (a * b) * c = a * (b * c),也就是说,三个元素做两次运算时,先算前两个还是先算后两个,结果不变。这个性质我们在小学学加法、乘法时就用过,但抽象代数里它是被特别强调的,因为并不是所有运算都满足结合律。比如向量的叉积,就不满足结合律。
单位元指的是存在一个元素 e,使得集合里任意元素 a 都满足 a * e = e * a = a。加法的单位元是 0,乘法的单位元是 1。单位元的存在,相当于给运算提供了一个“基准点”。逆元指的是每个元素 a 都能找到另一个元素 b,使得 a * b = b * a = e。加法的逆元是相反数,乘法的逆元是倒数。
注意,交换律并不在群的定义里面。也就是说,一个集合可以找到一种运算,满足封闭、结合、单位元、逆元,但 a * b 不一定等于 b * a。这就是非交换群,也是群论比“数的运算”丰富得多的地方。矩阵乘法和置换的复合都是非交换的例子。我刚开始学的时候老想把交换律塞进群的定义里,后来发现那样就把一半的数学排除在外了,得不偿失。
2.3 凯莱表:把运算变成一张表来读
讲运算光说理论太干,我强烈建议新手自己多画“凯莱表”。凯莱表就是有限集合上的运算表:把集合元素按一定顺序排在表头和表左列,交叉处填上运算结果。
举个例子,考虑集合 {e, a, b, c},定义乘法如下表:
| * | e | a | b | c |
|---|---|---|---|---|
| e | e | a | b | c |
| a | a | e | c | b |
| b | b | c | e | a |
| c | c | b | a | e |
这其实是一个非常有名的群,叫克莱因四元群。它的特点是每个非单位元的平方都是 e,任意两个不同非单位元相乘得到第三个非单位元。如果你去查这四行的排列规律,会发现每一行、每一列都恰好是 e、a、b、c 的一个排列,不重复也不遗漏。这个性质叫“拉丁方性质”,是群的运算表必然满足的规律。
我画凯莱表画了整整一页之后,才真正理解“封闭性”和“逆元”这两条公理到底在表里怎么体现:封闭性对应着表里所有格子都没有“外来户”;逆元对应着表中每一行都有且只有一个位置填单位元。画表这个动作虽然机械,但它把抽象的群落到具体的格子上,对建立直觉帮助非常大。
有限群可以画表,无限群就没法画全了。但无限群也有办法,比如整数加法群的“表”可以靠公式描述:任意两个整数,相加还是整数,单位元是 0,每个 n 的逆元是 -n。抽象代数就是这样,能用公式说清楚的就不画表,画表的说到底也是公式的另一种形式。
2.4 从群的运算繁衍出环与域
一个集合配一种运算,得到的是群。但数学里更常见的场景是一个集合同时配有加法和乘法两种运算,比如整数、有理数、多项式。这两种运算之间要协调,就诞生了环和域的概念。
环的定义是:集合 R 上有一个“加法”和一个“乘法”。加法部分要求构成一个交换群,也就是说,加法满足封闭、结合、交换,存在零元,每个元素有相反数。乘法部分只要求构成半群,也就是封闭且结合,不必要求乘法有逆元,甚至不必要求乘法有单位元。最后再加一条分配律:a(b+c)=ab+ac,(b+c)a=ba+ca。这条分配律就是把加法和乘法绑在一起的“契约”,没有它,两个运算就各玩各的,没有意义。
整数集合配通常的加法和乘法,就是一个典型的环。矩阵全体在矩阵加法和乘法下也构成环,而且是非交换的。习惯了数字乘法的交换性之后,第一次看到矩阵乘法不满足交换律会很不舒服,但这就是环的意义:它把“数的乘法交换性”这个特殊性质去掉,保留下加法和乘法之间的结构性关联。
如果在环的基础上,再要求乘法有单位元、非零元素都有乘法逆元,而且乘法交换,那就得到了域。有理数、实数、复数都是域。域给人的感觉是“加减乘除都能做”,这就是抽象代数用一个公理系统把“数系”和“可除性”打包起来的结果。从群到环再到域,运算越来越多,公理越来越强,适用对象也越来越窄,但每条规则都朝着“更像普通数系”的方向靠拢。
3. 历史与运算交汇:为什么伽罗瓦的灵感今天仍好用
前面把历史和运算分开讲,但抽象代数真正精彩的地方,恰恰是历史和运算交汇的那片区域。伽罗瓦留下来的核心思想,其实可以用一句很朴素的话说:一个方程的对称性,可以用一个置换群来表示;而方程的性质,藏在这个群的结构里。这句话今天不是只用来解方程,而是已经渗透到数论、几何、密码学等各个方向。
3.1 对称性就是置换群
先看什么是置换群。一个有限集合的“置换”,就是对这个集合元素的重新排列。全体置换在“先做第一个置换、再做第二个置换”的复合运算下,构成一个群,叫对称群 Sn。Sn 里面那些能分解成偶数个对换的置换,构成一个子群,叫交错群 An。
对称群之所以叫“对称群”,是因为它描述了集合的对称性。比如一个正方形的四个顶点在旋转和翻转下怎么变动,本质上就是在集合 {1,2,3,4} 上做置换,只是并非所有置换都能保持正方形的几何形状。能保持形状的那些置换组成一个子群,叫二面体群 D4。我每次看到这里都觉得很有意思:一个正方形的“对称性”,被你用一群置换精确刻画了,几何问题变成了代数问题。
伽罗瓦的高明之处,就是把“方程根的置换”当成切入点。一个多项式方程的根,如果允许所有可能的置换而不改变根之间的有理关系,这些置换就组成了方程的伽罗瓦群。通俗地说,伽罗瓦群描述了方程的根“长得有多对称”。根之间关系越“整齐”,群就越小;关系越乱,群就越大。
3.2 用子群划分方程的结构
有了伽罗瓦群,怎么判断方程能不能根式求解?伽罗瓦的思路是看群能不能一层层“拆开”。如果一个群存在一列子群,每个都是前一个的正规子群,而且相邻两个群的“商群”都是交换群,那这个群叫做可解群。可解性恰好对应着方程能否用根式求解。
第一次听到这个概念,我完全懵了。后来我用一个生活类比才勉强让自己接受:根式求解方程,就像你组装一个复杂的模型,只能按说明书一步步来,每一步都相对简单、顺序可交换;如果模型的“结构步序”过于复杂,一旦步骤不能拆成可交换的小块,就无法按规范流程组装出来。一般五次方程的伽罗瓦群是 S5,它的某个关键部位是 An(n≥5 时是非交换单群),而单群意味着它已经不能被拆成更小的正规子群,所以“组装流程”被卡死了。
这个结论深刻的地方在于,它把“能不能写出求根公式”这个问题翻译成了“这个群是不是可解群”。后面你再看到商群、正规子群、单群这些概念,就知道它们是伽罗瓦当年在计算方程可解性时被逼出来的工具。没有这段历史,商群就是一个毫无动机的抽象构造;配上历史,它就是拆解对称性的手术刀。
3.3 环和域在数论与几何中落地
伽罗瓦理论更多是群论的表演舞台,但环和域同样有自己的历史落点。戴德金在研究代数数的时候,发现有些“整数”分解因式的方式和普通整数不一样,为了让“唯一分解”继续成立,他发明了“理想”的概念。这个概念后来发展成环论的核心工具。换句话说,环论里那些抽象的“理想”“商环”,最初是为了解决数论里的分解问题才出现的。
域论在几何上也有经典应用,就是三大尺规作图不能问题:化圆为方、三等分任意角、倍立方体。用域论的语言可以严格证明,尺规作图能构造出来的数恰好是某些“扩域”中的元素;而三等分 60° 角需要的某些数不在允许的扩域里,所以不可能。我第一次读到这里的时候,感觉像亲眼看到几何问题被代数工具一锤定音,这比背公式带劲多了。
到了现代,群论在密码学里的地位就更直接了。椭圆曲线密码、RSA 背后的许多安全性论证,都建立在有限群或有限域上计算的复杂性上。你去看那些密码学协议,里面到处是模运算、有限域上的乘法、群的阶和生成元。抽象代数在 19 世纪看起来像是“无用之学”,现在却成了信息安全的基石之一。
4. 我的学习笔记模板与实操记录
讲完历史和原理,我来交一份纯实操的“抄作业”指南:我自己是怎么学这门课的。我的方法不一定适合所有人,但对初学者应该有一定参考价值。核心思路是:不要光看,动手写;不要光背定义,要用例子和反例把定义“钉”住。
4.1 笔记格式:定义、例子、反例、证明要点
我的抽象代数笔记本不是普通的“抄板书”,而是四栏式。每学一个新的概念,比如“群”,我就开一页,分成四块:定义、例子、反例、证明要点。定义栏照抄教材,但用红笔圈出所有量词,比如“任意”“存在”“都”这些字眼,因为群的定义里每个量词都是有用的。
例子栏我要求自己至少写三个,而且不能全是同一个类型的。比如群,就写整数加法群、正实数乘法群、二面体群 D4。反例栏更难,要求找一个“看起来像群其实不是”的对象,比如正整数乘法没有逆元、全体整数减法不满足结合律。填反例栏非常痛苦,但它能逼我找出定义的边界在哪里。
证明要点栏是给我自己看的缩写,比如“验证子群用一条判定法:a,b∈H 推出 ab^{-1}∈H”。以后复习时我不需要重新看完整证明,扫一眼要点就知道思路。这个方法很土,但对对抗遗忘特别管用,我隔一个月翻笔记,一眼就能找回当时理解的上下文。
4.2 读定义的三步法
我读抽象代数定义,经历了从“背”到“品”的转变。现在每看到一个新概念,我固定走三步。
第一步是问“它在哪里”。也就是这个概念附属于什么集合、什么运算。比如“子群”,它扎根在一个大群 G 里,用的是 G 原来的运算;比如“理想”,它是环的子集合,但这个子集合还有一个“吸收外部元素”的额外条件。找不到载体,后面全白搭。
第二步是问“它保持什么”。这个概念像不像一个映射?是保持运算的同态,还是保持局部结构的子对象?同态保持运算,子群保持群结构,理想保持“被吸收”的性质。每学一个概念,我都问它保留了原来结构的哪些部分,丢掉哪些部分。这一步能帮我理解为什么理想不叫“子环”而叫“理想”——因为它要求的条件比子环多,它还得能吸收环里任何元素的乘法。
第三步是问“它有什么用”。这个概念是用来判定什么的?理想是用来做商环的;正规子群是用来做商群的;同构是用来判断两个结构“本质上一样”。学概念不能只学定义,还得知道它附近有几个“功能按钮”。三步走完,这个概念才算真正进入我的知识网络。
4.3 习题设计:算运算表、验群、找同态
课后的习题当然要做,但我还会给自己出三类“手工题”。
第一类是画运算表,尤其是小群,比如 S3、Klein 四元群、Z/4Z。画完之后我还会把每一行当作一个置换来看,体会“左乘”到底在做什么。这个练习看着机械,但能让我对群元素之间的相互作用有肌肉记忆。
第二类是验证子群。给我一个群和一个子集,我自己写判定过程。比如在整数加法群里,偶数集合是子群,因为偶数减偶数还是偶数;奇数集合不是子群,因为 3-3=0 不是奇数,单位元不在里面。这类题做多了,我对“子群判定定理”的理解就不只是背结论了。
第三类是找同态和判断同构。比如从整数加法群到模 n 整数加法群的“取余”映射是不是同态?是,因为 6 mod 4 + 7 mod 4 = (6+7) mod 4。同构呢?Z/4Z 和 Klein 四元群同构吗?不同构,因为前者有 4 阶元素,后者没有。这类题逼我把“元素性质”和“结构性质”分开,判断结构是否一样,不能只看元素个数。
4.4 资料搭配与阅读顺序
资料方面,我自己的体会是不要只抱一本教材死啃。入门阶段可以先看偏直观的书,比如阿廷的《代数》或者面向本科生的教材,重点看它如何处理群和域的例子。第二遍读更抽象的教材时,像范德瓦尔登那种经典著作,就可以直接跳到重点定理看证明思路。
还有一个非常管用的操作:遇到不懂的术语,去读这个术语刚诞生时的原始文章或史料。比如读“理想”这个词的由来,戴德金最初是在代数数论里用它来挽救唯一分解定理,理解这个背景之后,“理想”就不再是一个莫名其妙的子集了。数学史未必能帮你做出一道计算题,但能帮你建立“为什么要有这个东西”的方向感。
5. 常见问题与排查:我踩过的坑与解法
每个学过抽象代数的人,基本都经历过“抽象”的暴击。其实很多卡点是可以提前避开的。这一章我把自己和身边人踩过的坑整理成问题清单,每个都给一点实用的排查思路。
5.1 被“抽象”二字劝退怎么办
很多入门者最大的障碍,是觉得“抽象=空洞”。我的第一手经验恰好相反:抽象不是空洞,而是把大量具体例子的公共规则提取出来。群的定义之所以只用四条公理,是因为整数、置换、矩阵、旋转全都满足这四条规则;剩下的个别性质,比如交换性、有限性,被刻意排除在定义之外。
所以遇到抽象定义,我的应对方法就是立刻去找三个具体例子。定义越抽象,例子越要具体。比如“群”让人晕,“整数加法群”“正实数乘法群”“正方形的旋转群”一点不晕。看三个例子,再回头重读定义,你会觉得那几条公理说的就是这些例子都具备的共同点。这就是把“抽象”翻译回“具体”的方法。
5.2 不知道为什么非要把单位元、逆元都证明一遍
刚开始学的时候,我总觉得教材在小题大做:都说是单位元了,还要证明唯一性干嘛?后来才明白,在群里 e1 和 e2 都可以当单位元时,不一定马上知道它们相等,得用定义推一下。这个“推一下”的过程虽然短,但它给整个理论打了地基:如果连一个对象的存在性、唯一性都没搞清楚,后面谈什么结构?
我现在给初学者的建议是:别嫌这些证明啰嗦,把“单位元唯一”“逆元唯一”这类基础命题当成练手题。你自己试着证明一遍,就会熟悉“假设两个都满足条件,然后看它们被迫相等”这类证明思路。后面大量定理都用同样一招,只是披着不同的外衣。
5.3 同态和同构概念打结
同态和同构是抽象代数里最容易混淆的一对概念。我的记忆办法是:同态是“保持运算的映射”,同构是“既保持运算又是一一对应的映射”。保持运算的意思是 f(a*b)=f(a)*f(b),一一对应就是两个集合的元素能对上号,不多不少。
为什么同构特别重要?因为如果两个群之间存在同构,那么凡是能用一个群的结构性质,另一个群也有。比如整数加法群和偶数加法群同构(映射 f(n)=2n),虽然它们元素都不一样,但结构上是同一个东西。同态的范围更宽,它可以不一一对应,只是把结构“投影”过去,比如整数加法群到模 n 群的取余映射就是同态,但不是单射,因为很多整数余数相同。把这两个概念放在同一张图上理解,比单独背定义牢靠得多。
5.4 商群太难:从陪集入手
商群 G/N 几乎是初学阶段的最大难关。我一开始完全看不懂:商群的元素是一个个集合(陪集),集合之间还能做运算?后来我换了一个切入角度,先只盯着最经典的例子:整数加法群 Z,取子群 nZ(n 的倍数)。Z/nZ 的陪集就是“余数相同的整数”,比如模 4 的陪集是 {…,0,4,8,…}、{…,1,5,9,…} 这些。两个陪集相加,就是各自取一个代表元做加法,再看余数落在哪个陪集里。做几遍就发现,商群讲的其实是“在不同代表元之间做运算结果一致”这件事。
这个例子吃透之后,再回头看商群的定义:N 必须是正规子群,是为了保证陪集运算不依赖代表元的选择。如果 N 不正规,你在一个陪集里换个代表元,计算结果可能跑到另一个陪集里去了,那就麻烦了。所以“正规子群”这个条件不是故意刁难人,它是为了让“集合之间的运算”真的有意义。
5.5 常见误区与速查对照
| 误区 | 具体表现 | 纠正思路 |
|---|---|---|
| 以为群必须满足交换律 | 验证群时先检查 a*b 是否等于 b*a | 交换律只决定“交换群/阿贝尔群”,不是群的必要条件 |
| 混淆子群与商群 | 以为商群的元素是子群里的元素 | 商群的元素是陪集,每个陪集是一个集合,不是单个元素 |
| 只看同态定义,不看核 | 判断同态时只查 f(a*b)=f(a)*f(b),忽略核描述“压缩程度” | 核是映射到单位元的元素全体,它决定同态的信息丢失情况 |
| 把“封闭”当成想当然 | 对任意运算默认封闭 | 遇到新集合+新运算,第一步就要单独检查结果是否仍在集合内 |
| 不会判断两个群是否同构 | 只比较元素个数 | 先找有没有元素阶数的差异、运算表结构是否一致,再考虑构造同构映射 |
最后再分享一个小技巧。我每次做完一道抽象代数的证明题,都会追问自己一句:“这个证明如果拿掉某一步,会出现什么反例?”比如如果子群判定少验证一个条件,能不能找出不成立的例子?这个习惯让我从“看懂答案”逐步变成“能设计证明”。抽象代数学到最后,靠的其实不是技巧,而是这种“不断追问为什么非这样不可”的思维方式。卡住的时候,我建议你把书合上,先去算一个具体例子,很多时候答案就在那个例子里。