半群、子群、商群这三个词,第一次是挤在同一页教材上出现的。定义各占三行,加起来的篇幅还不到半页,但那半页我前后翻了不下十遍——不是因为字不认识,而是合上书之后说不上来它们之间到底是怎么接上的。半群为什么要单独拎出来讲,明明后面只研究群?子群的判定条件为什么能从四条砍到一条?商群为什么非要那个"正规"的前置条件,不正规会死在哪一步?教材把这些都写成了定理和命题,却很少写清楚每一步的动机。真正把这三个概念焊在一起的,不是定义,是"验证顺序"和"反例库"。
抽象代数这门课的特点是:看懂定义不等于会做题,会做题不等于知道为什么。比如给一个子集让你判断是不是子群,四条定义摆在那里,逐条验也能做,但如果知道"非空 + 对乘法与取逆封闭"甚至"有限非空 + 对乘法封闭"就够了,手速和准确率会完全不一样。再比如商群,很多人能背出"正规子群才能作商群",但让他指出来"如果子群不正规,陪集乘法会在哪一步崩掉",就说不清了。这篇想做的就是把这些断点接起来:半群是观察结合律这条底线能撑起多少结构,子群是把视野收窄到一个封闭的小世界,商群是把大世界按某种等价关系折叠。三个动作,一条线。
内容偏原理梳理加手算训练,适合正在学抽象代数、被定义绕晕的人,也适合学过一遍但只记得名词的人。中间会给出可运行的枚举代码、两个完整的推演案例、一份高频错误对照表,以及我自己踩过的几个坑。数学基础只需要知道什么是集合、映射和运算,其余都在文中补。
1. 三个词放在一起时才看得出的那条主线
1.1 定义背得再熟,也解决不了"该验哪一条"
我见过太多人复习抽象代数的方式是把定义抄一遍:半群是带结合律的封闭二元运算结构,子群是群的非空子集且在同样运算下成群,商群是正规子群的所有陪集在陪集乘法下构成的群。这三句话本身没有错,但它们回答的是"是什么",而不是"拿到一道题该先动哪里"。
真正决定做题速度和正确率的是判定路径。判断一个集合是不是半群,你只需要验两件事:运算有没有跑出集合,三个元素换着顺序结合结果变不变。判断一个子集是不是子群,教材上往往写四条,实际上熟练之后是两件事:非空,以及任意两个元素做一次"乘法加求逆"的复合仍在集合内。判断一个陪集集合能不能构成商群,你需要验的只有一件:这个子群在共轭作用下是否稳定。
这三条路径的长度差别很大,而教材把它们平铺在定义里,读起来是一样长的。这就是为什么很多人"定义都懂,题做不出"——脑子里没有优先级。我建议的记法是:把每个概念压缩成一个"最少需要验什么"的动作指令,定义只作为推导来源,不作为操作手册。
1.2 一条收紧的轴和一条折叠的轴
把三个概念画在一个平面上,会发现它们沿着两个完全不同的方向在动。
第一个方向是收紧。从集合到半群,加的是封闭性和结合律;从半群到幺半群,加的是单位元;从幺半群到群,加的是每个元素都有逆元。这是一条逐级加码的轴,越往右结构越强,能用的工具越多,但符合要求的对象越少。你手上的东西如果只是一堆字符串连接,它就是幺半群,别硬套群的定理,因为字符串没有逆元——"abc"乘什么都没法变回空串。
第二个方向是折叠。已经有一个群了,子群是在群内部划出一块自洽的小区域,商群则是把整块区域按某种方式压成一个点。前者是"往内看",后者是"往外压"。这两个动作不是同一条轴上的前后关系,而是正交的两种操作:子群回答"哪些元素能被圈出来自己玩",商群回答"哪些元素可以被看作同一个"。理解这一点之后,很多困惑会自动消解,比如"为什么每个群都有子群但不是每个子群都能作商群"——因为圈出来容易,能压成点难。
1.3 我的三个反例本
学这门课,我最大的收获不是记住了多少定理,而是攒了一小本反例。正例让你知道定义能被满足,反例让你知道定义的每一条都不是白写的。我的本子上长期保留三个:
整数在减法下不构成半群,因为 (3-2)-1=0 而 3-(2-1)=2。这个例子专治"结合律是废话"的错觉。
三元置换群里,由一个对换生成的二阶子群不是正规子群。这个例子专治"子群都能作商群"的错觉,而且它是能完整手算出来的最小反例,非常宝贵。
自然数在加法下是幺半群,去掉 0 之后仍是半群但没了单位元。这个例子专治"半群和群差不多"的错觉,因为幂、同态、同余这些概念在没有单位元的情况下要重新处理,很多证明里"乘以单位元"那一步会直接失效。
反例的价值在于:当你写证明卡住时,往往是因为某个条件没被用上。把反例拿出来对照,能立刻定位到"哦,我用了正规性,但题里只给了子群"。
2. 半群:把结合律单独拎出来,是在防什么
2.1 封闭性这道门槛比想象中高
先说封闭。给定集合 S 和 S×S 到 S 的映射,封闭性说的是运算的结果不会掉出 S。听起来是最容易满足的一条,实际上是最容易出错的一条,因为它依赖你对"集合"的界定。
正奇数在加法下不封闭,两个正奇数相加是偶数。自然数在减法下不封闭,1-2 已经跑出去了。如果把全体 2×2 实矩阵拿来配乘法,封闭是天然满足的,但如果你限定"所有三阶以内可对角化矩阵",很快就会撞上两个可对角化矩阵乘积不可对角化的例子。所以在写"这个集合在运算下封闭吗"之前,第一件事是把集合的边界说死:是所有元素、还是满足某条件的元素、还是某个区间。
封闭性一旦不成立,后面所有讨论都没有意义,因为"运算"本身已经是个部分函数。这也是为什么在形式语言里,字母表上所有有限串的集合配连接运算一定封闭——连接两个有限串当然还是有限串,这个封闭性是定义直接保证的,不需要额外验证。
2.2 结合律失效的四个常见现场
结合律说 (ab)c = a(bc),也就是括号可以随便打。它失效的时候通常不是因为运算太怪,而是因为这个运算本身就"不打算"让你重新结合。
最常见的是减法这类非交换且带方向差异的运算,整数减法和实数除法都是反例。第二个现场是向量叉积,它满足的是雅可比恒等式而不是结合律,所以只能构成李代数,不是半群。第三个现场是函数复合的"反向"写法,如果你把 f∘g 定义成先 f 后 g 而不是先 g 后 f,某些公式会看起来不满足结合律,其实那是记号约定问题而不是结构问题,这一点特别容易在自学时误会自己。第四个现场是浮点数的加法,严格数值意义上它不满足结合律,因为舍入误差的累积顺序不同结果会差一点点——这也是半群概念在数值计算里必须被"松弛"处理的原因。
值得强调的是八元数那种典型反例:它甚至不满足交换律,也不满足结合律,但满足一个叫"交错律"的弱化条件。看到这类结构的存在,你才会明白为什么数学家要把结合律单独摘出来当成公理,而不是把它当成"理所当然"——因为它真的可以被去掉,去掉之后还能长出其他理论。
2.3 少了单位元和逆元,还剩多少东西能用
这是半群这一章最关键的问题。很多人觉得半群只是群的"残缺版",价值不大,其实恰恰相反:半群理论保留了群论里最实用的那一批工具,只是形式要调整。
首先可以用的是幂。有了结合律,a²=a·a、a³=a·a·a 都是有定义的,而且 a^m·a^n = a^{m+n}、a^{mn}=(a^m)^n 照样成立。没有单位元时 a^0 不好定义,但只要把所有讨论限定在正整数幂上,一切照旧。这一步保证了"元素的阶"这个概念在有限半群里也能讨论。
其次可以用的是同态。半群同态 φ: S→T 的定义就是保持运算,φ(ab)=φ(a)φ(b),这个定义完全不依赖单位元和逆元。有了同态,像和核(这里指等价关系的核,不是群的核)就有意义。
最有价值的是子半群和同余关系。子半群的定义就是子集对运算封闭,不需要非空之外的任何附加条件——注意这里是"封闭即可",因为结合律在子集上自动继承。同余关系是半群版的"正规子群",下一节第 5 部分会详细展开。
反过来,半群失去的东西也很明确:你没法解方程 ax=b,因为不能乘 a 的逆;你没法用"乘以单位元"这种技巧在证明里做缓冲;你没法定义左陪集右陪集,因为陪集需要群运算把整个集合平移过去。记住这个"有"和"没有"的清单,遇到具体问题时能立刻判断该用哪套工具。
2.4 把二元运算全枚举一遍:半群到底稀不稀有
教科书上的例子都是精选过的,容易让人产生错觉,以为随便写个运算就大概率是半群。用代码把所有可能都枚举一遍,直观感受会完全不同。
from itertools import product def is_associative(op, n): # op 用 n×n 的表表示,op[a][b] 是 a*b 的结果 for a, b, c in product(range(n), repeat=3): if op[op[a][b]][c] != op[a][op[b][c]]: return False return True def has_identity(op, n): for e in range(n): if all(op[e][x] == x and op[x][e] == x for x in range(n)): return e return None for n in (2, 3): total = n ** (n * n) semi = 0 mono = 0 for flat in product(range(n), repeat=n * n): op = [list(flat[i*n:(i+1)*n]) for i in range(n)] if is_associative(op, n): semi += 1 if has_identity(op, n) is not None: mono += 1 print(f"n={n} 全部运算 {total} 个,半群 {semi} 个,幺半群 {mono} 个")二元集上共 16 种运算,其中满足结合律的只有 8 个,这 8 个里有 4 个带单位元。三元集上共 19683 种运算,满足结合律的只有 113 个,其中幺半群 7 个。也就是说,随手扔一个运算表出来,它几乎肯定不是半群,比例大概是 0.6%。
这个比例带来的方法论启示是:判断一个结构是不是半群,不要凭直觉,要老老实实检查结合律。而检查的优先级应该是先看有没有现成的定理能借用(比如已知某类函数复合必结合),再看有没有明显的反例可构造,最后才逐三元组暴力验证。手算时,优先试那些"看起来会出问题"的组合,比如含吸收元的情形、含幂等元的情形,往往一击命中。
3. 子群判定:从四条条件砍到一条的逻辑,和有限群的捷径陷阱
3.1 三条验证与一条验证的等价性推导
子群的标准定义要求 H 是 G 的非空子集,并且在 G 的运算下自身成群。拆开就是:非空、对乘法封闭、有单位元、每个元素有逆元。但在实际验证时,我们几乎从不这样逐条查,原因在于后两条是可以被"推导"出来的,而推导过程中藏着一个很妙的技巧。
标准判定是:H 非空,且对任意 a、b 属于 H,都有 ab⁻¹ 属于 H。这一条同时打包了封闭性和取逆。思路是这样的:先取 a=b,得到 aa⁻¹=e 属于 H,单位元有了;再取 a=e,得到 b⁻¹ 属于 H,逆元有了;最后对 a、b⁻¹ 用一次条件,得到 a(b⁻¹)⁻¹=ab 属于 H,封闭性有了。一次验证,换四条结论。
这个推导里最容易被忽略的是"非空"这一步。如果 H 是空集,它确实满足"任意 a、b 属于 H 时 ab⁻¹ 属于 H"这个命题,因为前提永远为假,逻辑上命题为真。但空集不是子群,因为它没有单位元,也不满足群的公理。所以非空必须单独说,不能省。
还有一个常见变体是两条式判定:H 非空、对乘法封闭、对取逆封闭。它和一条式完全等价,只是把取逆和乘法拆开了,读起来更符合直觉,验证时也更适合分步检查。我在手算时更喜欢这个版本,因为它出错时能立刻知道是封闭性出问题还是逆元出问题。
3.2 "有限且封闭就是子群"为什么不能推广
有一个特别好用的结论:如果 G 是有限群,H 是 G 的非空子集,且 H 对 G 的乘法封闭,那么 H 一定是子群。这条结论把验证成本又砍掉一半,因为不用查逆元了。
证明的关键是元素的有限阶。取 a 属于 H,考虑 a, a², a³, ... 这个序列,因为 H 有限,序列必有重复,于是存在 i<j 使 a^i=a^j,两边消去得到 a^{j-i}=e,所以 e 属于 H,且 a 的逆就是 a^{j-i-1},也在 H 里。注意这个证明里"消去"这一步用到了群的消去律,而消去律来自逆元存在——所以整个论证是"在 G 里进行的",H 只是被验证的对象。
这里有个高频错误:把这条结论的记忆方式记成了"封闭就是子群",然后套到无限群上。整数加法群里,全体非负整数对加法封闭,包含单位元 0,但不是子群,因为 3 的逆 -3 不在里面。正整数集合更明显,连单位元都没有。所以这条捷径必须和"G 有限"这个前提绑死,分开记就等于记错。
另一个容易出问题的地方是"非空"依然不能省。空集对乘法封闭,但它显然不是子群。我在批改作业时见过不止一次,判断某个用条件定义的集合是不是子群,作者直接写"显然非空",结果那个条件在该群中根本无解。
3.3 陪集是等价类:划分与计数结论的来历
子群最有价值的副产品是陪集。给定 H≤G 和 g∈G,左陪集 gH 就是所有 gh 的集合。这个定义本身很朴素,但它背后是一个等价关系:定义 a~b 当且仅当 a⁻¹b∈H,直接可以验证这满足自反、对称、传递。
等价关系立刻带来三个结论,这三个结论是整个子群理论的骨架。第一,任意两个左陪集要么完全相同要么完全不相交,因为它们就是等价类,等价类天然是划分。第二,所有左陪集的并集是整个 G,因为每个元素都属于自己的陪集。第三,每个陪集的元素个数都等于 H 的元素个数,因为映射 h↦gh 是双射,它的逆是 x↦g⁻¹x。
三条合起来就是陪集计数结论:|G| 等于 |H| 乘以陪集个数。这个结论最强的地方在于它是纯计数的,不依赖于群是否交换、元素是什么。手算的时候它是一把好用的尺子:如果你算出某个群的一个子群阶数是 3,而群阶数是 10,那不用往下算,这个子群一定不存在,因为 3 不整除 10。反过来,子群的阶一定要整除群的阶,这是最快的第一道筛选。
同样要提醒的是,这个结论反过来不成立:阶整除不保证子群存在。四元交错群是阶 12 的群,但它没有 6 阶子群,虽然 6 整除 12。所以"整除"只是必要条件,不是充分条件,做题时它能帮你排除,不能帮你确认。
3.4 生成子群的手算流程
实际题目里,子群很少直接给你,多数是给你几个元素,让你求它们生成的子群。这时需要一套稳定的手算流程,否则很容易漏元素。
第一步,从单位元开始,把生成元放进去,把它们的逆也放进去。第二步,对集合里已有的元素两两做乘法,把新得到的元素加进来。第三步,重复第二步,直到集合不再增长。因为生成子群是包含这些元素的最小子群,而最小的意思就是"包含这些元素且对所有运算封闭",所以这个闭包过程一定会终止在正确的答案上。
手算时的加速技巧是优先用生成元的幂。如果只有一个生成元 a,那么 就是 {e, a, a², ...},一直乘到回到 e 为止,元素个数就是 a 的阶。两个生成元时,可以先把各自的循环群写出来,再轮流左乘右乘,用表格记录,避免漏。三元置换群里,<(1 2), (1 2 3)> 生成整个群,这个过程可以完整手推一遍作为练习,推完之后对"生成"这个词的理解会完全不同。
一个实用的检查手段是阶数核对:生成子群的阶必须整除群的阶,而且必须被每个生成元的阶整除。如果你算出的集合大小违反这两条,说明算错了,回去查是不是漏了逆元或者重复计数。
4. 商群:正规性不是审美要求,是乘法能不能落地的问题
4.1 商群想干的事:把一组元素压缩成一个点
商群的动机值得反复咀嚼。给一个群 G 和一个子群 H,我们想把所有左陪集当成新的"元素",在这个新集合上定义一个乘法,让原来的群运算"降"下来。如果成功,得到的新群就是 G 对 H 的商群,记作 G/H。
这个想法非常自然,因为它就是把"平移一个 H"当成一个整体。比如在模 12 的加法群里,取 H={0,4,8},那么每个陪集就是"模 4 同余类"的概念,商群自然是模 4 的加法群。在几何上,如果把整数格点看作可平移的单元,商就是把整个平面按格子压缩成一个环面。压缩之后,原本相距一个格点的两个点变成了同一个点。
但"想压缩"和"真的能压缩"是两回事。压缩要求新集合上定义的那个乘法是良定义的:如果你从陪集 A 里挑 a₁,从陪集 B 里挑 b₁,算出 a₁b₁ 落在某个陪集;换一对代表元 a₂、b₂,得到的结果必须落在同一个陪集。如果不同代表元给出不同的结果,那这个"乘法"根本没有定义好,商群就无从谈起。
4.2 三元置换群上的良定义崩塌现场
最好的例子是最小的非交换群,也就是三个元素上的全体置换构成的群,记作 S₃,它有 6 个元素:恒等、三个对换、两个三轮换。取 H 为由对换 (1 2) 生成的二阶子群,也就是 {恒等, (1 2)}。
先算左陪集。(1 3) 乘 H 得到 {(1 3), (1 3)(1 2)},按从右往左复合算出 (1 3)(1 2)=(1 2 3),所以这个陪集是 {(1 3), (1 2 3)}。再用 (2 3) 乘以 H,得 {(2 3), (2 3)(1 2)} = {(2 3), (1 3 2)}。再加上 H 本身,三个左陪集把整个群分完了,数量是 6/2=3,符合计数。
现在试试陪集乘法。取两个都等于 {(1 3), (1 2 3)} 的陪集,按"代表元相乘"来算。第一对代表元取 (1 3) 和 (1 3),乘积是恒等,落在 H 这个陪集里。第二对代表元取 (1 3) 和 (1 2 3),乘积 (1 3)(1 2 3) 算出来是 (2 3),落在 {(2 3), (1 3 2)} 这个陪集里。同一个陪集乘自己,两种算法给出两个不同的结果,乘法彻底崩溃。
崩溃的根源在于 H 不是正规子群。左陪集和右陪集不一致,具体到 (1 3) 这个元素,它的左陪集是 {(1 3), (1 2 3)},右陪集 H(1 3) = {(1 3), (1 3 2)},两者不同。这意味着"从左边平移一个 H"和"从右边平移一个 H"看到的划分是两套不同的划分,你无法保证 a₁b₁ 和 a₂b₂ 落在同一块。
4.3 正规子群的五种等价说法怎么互相推
正规子群的定义是:对任意 g∈G 和 n∈N,都有 gng⁻¹∈N。这个"n 被 g 共轭之后还在 N 里"的条件,看起来只是一条技术性要求,实际上它有五种互相等价的表达方式,分别对应不同的使用场景。
第一种就是上面的共轭形式。第二种是把包含换成相等:gNg⁻¹=N,因为 g 和 g⁻¹ 对称,包含一个方向自动给出另一个方向。第三种是陪集交换:gN=Ng 对任意 g 成立,这条在算题时最好用,因为它直接告诉你左陪集就是右陪集。第四种是 N 等于某个同态的核,这条在构造商群时最好用。第五种是 N 对共轭类闭合,也就是 N 是若干整个共轭类的并集,这条在判断时最好用——只要发现 N 里有某个元素,但它的共轭类里有个元素不在 N 里,立刻可以判定不正规。
五条之间的推导其实都不长,但方向要清楚。从共轭包含推陪集交换:取 gn,则 gng⁻¹∈N,所以 gn=(gng⁻¹)g∈Ng,一个方向成立,反向同理。从陪集交换推核:如果 N 是某个同态 φ 的核,那么 φ(gng⁻¹)=φ(g)φ(n)φ(g)⁻¹=φ(g)eφ(g)⁻¹=e,所以 gng⁻¹ 也在核里。从共轭类闭推共轭包含是直接的。把这五条在纸上互相推一遍,比背五句话有用得多。
阿贝尔群是最省事的情况:因为所有元素可交换,gng⁻¹=n,所以每个子群都正规,每个子群都能作商群。这也是为什么初学者容易产生"正规性自动成立"的错觉——入门例子全是交换群。等第一次撞上非交换群,问题才暴露。
4.4 核为什么天然正规
同态的核自动是正规子群,这件事在结构上非常漂亮,而且它解释了商群真正的来源。
设 φ: G→G' 是同态,核 K 是所有被映到单位元的元素。取 k∈K,则 φ(gkg⁻¹)=φ(g)φ(k)φ(g)⁻¹=φ(g)e'φ(g)⁻¹=e',所以 gkg⁻¹∈K,正规性直接成立。整个推导只用了同态保持运算这一条性质,没有任何额外假设。
这带来一个重要的视角转换:商群不是"随便找个正规子群作除法",而是"把同态看不见的信息扔掉"。核就是被吞掉的部分,商群 G/K 就是同态的像的结构复制品,这个对应关系通常被概括为同态基本定理。理解了这个,很多构造就变得自然:想知道某个同态到底"丢了多少信息",看核多大;想知道商群长什么样,看像长什么样。
实际计算时,这条定理是一把万能钥匙。手上有群同态,先算核,核一出来商群的结构基本就确定了,比自己硬凑陪集乘法表快得多。模 12 加法群到模 3 加法群的映射,核是 {0,3,6,9},像就是模 3,所以商群是模 3 群,全程不需要枚举陪集。
5. 半群没有正规子群这个概念,但它有同余关系
5.1 同余关系:半群的"商"的正确入口
第一次意识到半群上没有"正规子群"这个说法时,我困惑了很久:既然商群这么有用,半群为什么不能照抄?答案藏在良定义的条件里。
群的陪集乘法要良定义,需要 a₁=a n₁、b₁=b n₂ 这样的代表元换算,而换算过程中出现了"把 n₁ 从中间挪到后面"的动作,这依赖共轭,也就是依赖逆元。半群没有逆元,这套换算做不了,所以"用子半群作商"这条路走不通。
半群的正确入口是等价关系而非子集。定义一个等价关系 ~,如果它满足"a~b 且 c~d 蕴含着 ac~bd",就叫它同余关系。这个条件正是良定义所需要的:等价类的乘法 (a 的类)·(c 的类) 定义为 ac 的类,只要换代表元不影响结果,商半群 S/~ 就成立。
用自然数加法半群举例,按"模 5 同余"做等价关系,任意两组同余的元素相加之后仍然同余,商半群就是五个元素的循环结构。用字符串连接半群举例,按"长度相同"做等价关系,连接两个同长度串的长度等于长度之和,商半群同构于自然数加法半群。这些例子说明,同余关系是半群理论里最自然、最通用的商构造方式。
5.2 为什么群可以退化成"一个子群说了算"
那为什么群里不用等价关系这套说法,反而绕道去讲正规子群?原因是群里的同余关系有一个非常强的性质:它完全由单位元所在的等价类决定。
在群里,如果 ~ 是同余关系,设 N 是单位元 e 所在的等价类。那么 a~b 当且仅当 ab⁻¹~e,也就是 ab⁻¹∈N。所以整个等价关系被 N 一个集合完全刻画了。再结合同余条件,可以推出 N 必须是正规子群。反过来,每个正规子群也诱导一个同余关系。
这就解释了两套语言的关系:群用"正规子群"讲商,是因为同余关系在群里没有额外自由度,一个子集就够描述全部;半群用"同余关系"讲商,是因为半群里 e 可能不存在,等价类也没法用"乘一个固定元素"的方式还原出来,所以只能直接讲关系。
我个人的理解是:正规子群是群的特权,同余关系才是普适的语言。学群的时候用陪集,效率高;学半群的时候用同余,不出错。两者不是矛盾的,是同一件事在不同结构强度下的表现。
5.3 两类商的对照表
把两套商构造并排放在一起看,差异会非常清楚。
| 对比项 | 群对正规子群的商 | 半群对同余关系的商 |
|---|---|---|
| 商的对象 | 正规子群 N | 同余关系 ~ |
| 元素形式 | 陪集 gN | 等价类 [a] |
| 良定义依赖 | 共轭稳定 gNg⁻¹=N | 同余条件 a~b,c~d⇒ac~bd |
| 单位元的角色 | 决定整个等价关系 | 可能不存在 |
| 典型例子 | 模 12 群对 {0,4,8} 作商 | 字符串半群按长度分类 |
| 首选验证手段 | 检查共轭类是否闭合 | 检查关系是否与运算相容 |
这张表我建议贴在笔记最前面。它能挡住两类经典错误:一是拿半群去硬套群的正规子群定义,二是拿群去做商却忘了验证正规性。两种错误的表现形式不同,但本质上都是把"商"当成了一个不需要条件的动作。
6. 一条完整的推演链和一份错误对照清单
6.1 从模 12 加法群一路推到商群
把前面所有概念串起来,最省事的载体是模 12 的加法群,记作 Z₁₂,元素是 0 到 11,运算是模 12 相加。它是交换群,所以每个子群都正规,省去了正规性验证的麻烦,正好用来练推演流程。
第一步,找一个子群。取 4 生成的子群,也就是 {0,4,8},记作 H。验证过程:非空显然,0 在里面;对加法封闭,4+4=8,8+4=0,都在里面;对取逆封闭,因为每个元素的逆就是 12 减去自身模 12,4 的逆是 8,8 的逆是 4,0 的逆是 0,都在里面。三条验完,H 是子群,阶为 3。
第二步,算陪集。0+H={0,4,8},1+H={1,5,9},2+H={2,6,10},3+H={3,7,11},四个陪集把 12 个元素正好分完。用计数结论核对,12/3=4,一致。
第三步,验证陪集乘法能不能落地。取代表元 1 和 2,乘积是 3,落在 3+H;换一对代表元 5 和 6,乘积是 11,也在 3+H 里。因为 Z₁₂ 是交换群,H 自动正规,这一步在理论上必然通过,但手算一两个例子能加深印象。
第四步,写出商群。四个陪集分别是 0+H、1+H、2+H、3+H,做一个自然的命名映射,把 i+H 对应到 i,商群就是模 4 的加法群,阶为 4。
第五步,用同态交叉验证。定义 φ: Z₁₂→Z₄,把 x 映到 x mod 4。验证它是同态,φ(a+b)=(a+b) mod 4=(a mod 4 + b mod 4) mod 4。它的核是所有被映到 0 的元素,也就是 {0,4,8},正好是 H。根据同态基本定理,Z₁₂/H 同构于像,像就是整个 Z₄,结论一致。
整个流程走下来,五个步骤各自对应一个概念:找子群用判定定理,算陪集用等价类划分,验乘法用正规性,写商群用陪集集合,交叉验证用同态基本定理。这就是把三个概念串成一条线的样子。我建议每个人都至少手推三个不同规模的例子,一个交换群、一个非交换群、一个非正规子群的反例,推完这三遍,理论框架就稳了。
在非交换的情况下,推演要更小心。以三阶对称群为例,取它的三轮换构成的子群,阶为 3,指数为 2。先验正规性,因为指数为 2 的子群必正规,这个结论也很好用:指数为 2 意味着只有两个陪集,左陪集和右陪集数量都等于 2,而左陪集划分和右陪集划分必然重合。再算陪集,得到两块,商群阶为 2,同构于二阶循环群。反过来取对换生成的二阶子群,在前面已经演示过陪集乘法会崩,所以它不能作商。两个例子放在一起,正反两面都齐了。
6.2 六种高频错误
下面这份清单是我自己踩过、也在别人作业里反复见到的,几乎覆盖了这章百分之九十的失分点。
| 错误表现 | 出错原因 | 正确做法 |
|---|---|---|
| 验证子群时跳过非空 | 认为"显然有元素" | 先证至少有一个元素,通常找单位元 |
| 在无限群里用"封闭即子群" | 把有限群的捷径当通例 | 必须额外验逆元,或直接验 ab⁻¹ |
| 用阶整除判定子群存在 | 把必要条件当充分条件 | 整除只能排除,不能确认 |
| 证明商群时假定子群正规 | 入门例子都是交换群 | 非交换群必须单独验共轭稳定 |
| 陪集乘法取代表元随意 | 没意识到良定义需要证明 | 换代表元必须验证结果同陪集 |
| 半群里套用正规子群 | 混淆两种商的语言 | 半群用同余关系,检查运算相容 |
第六行值得展开一句。半群里讨论"正规子半群"这个词本身没有统一意义,因为半群没有共轭这个动作(没有逆元就没法做 gng⁻¹)。所以看到半群题目里出现"作商",第一反应应该是找等价关系,而不是找特殊的子集。
6.3 手算训练的顺序建议
最后说训练方法。这门课光看不练完全不行,但练也要讲顺序,否则容易在细节上反复卡壳。
第一个阶段只练判定,不练构造。给你一堆集合和运算,只回答"是不是半群、幺半群、群",每个都写出验证过程,特别是反例要写清楚违反的是哪一条。这个阶段的目标是把条件记忆变成条件反射,看到"逆元"就想起来要检查。
第二个阶段练子群。给几个具体的有限群,比如模 n 加法群、三阶对称群、四阶对称群,把所有子群列全。列全的标准是阶数从 1 开始逐个检查,用整除先筛掉不可能存在的阶,再用生成元构造。这个过程很枯燥,但做完之后对群的结构会有肌肉记忆。
第三个阶段练商群。在第二阶段列出的子群里,挑出正规的那些,算出商群的结构,再用同态去交叉验证。非交换群的例子一定要做,三阶对称群的正规子群只有三个:平凡子群、整个