找回密码
 立即注册
首页 业界区 业界 有限Abel群的结构(2)

有限Abel群的结构(2)

怒鼓踊 2025-9-24 18:43:56
  1.   版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址
  2.    https://www.cnblogs.com/Colin-Cai/p/18791060.html
  3.   作者:窗户
  4.   QQ/微信:6679072
  5.   E-mail:6679072@qq.com
复制代码
本节在上一节的基础上,解释循环群,Abel群,群同构,直积等概念,最终推导出给定阶数的所有Abel群结构。
 
循环群
循环群是最简单的群,$n$阶循环群为$\{0,1,2...n-1\}$,符号记作$Z_n$,在此基础上定义乘法:
$a \cdot b = (a+b) \mod n$
这个是不是看上去很像加法?嗯,叫加法还是叫乘法还是叫其他什么都不重要,性质才重要。
此处的这个运算是可以交换的,也就是
$a \cdot b = b \cdot a$
在不引起误解的情况下,我们习惯上把这个称之为加法。
符号上,既然叫了加法,我们用$\oplus$来代替$\cdot$。
循环群就是$1$生成的群,
$1 \oplus 1 = 2$
$2 \oplus 1 = 3$
$...$
$(n-1) \oplus 1 = 0$
在符号不会发生混乱的情况下,我们就用$a+b$来表示加法。
加了一圈,得到了循环群里所有的元素,总共$n$个$1$相加得到$0$,显然$0$是幺元。
对于一个群里的元素$a$,如果$n$个$a$相乘(或相加)得到幺元,且$n$是满足这一点的最小正整数,则称$n$是$a$的周期
注意,周期这个术语是对于所有的群,并非只对于循环群。
此处,$n$是$1$的周期。
其实,循环群的定义就是可以由一个元(也就是$1$)生成的群。
对于有限循环群,那么就是存在某个元的周期等于阶数的群。
无限循环群则不是,$Z$覆盖了所有整数,其群加法就是整数加法,幺元为$0$,生成元为$1$。
对于这个生成元,或许有人会有疑问,无论多少个$1$加在一起也不会是负数啊,怎么可能所有的整数都由$1$生成呢。
在此,我要声明一下,逆元可以直接生成,所以$-1$可以由$1$生成,从而所有整数也都能生成了,此规则记住即可。
容易证明,对于$Z_n$,任何小于$n$的正整数$m$,在该循环群里的周期为$[m,n]/m$,此处$[m,n]$为最小公倍数。
所以,所有与n互质且小于n的正整数都可以是$Z_n$的生成元。
 
Abel群
Abel群即交换群,也就是满足乘法交换律的群。
也就是$$是Abel群是指
$\forall a,b \in G, a \cdot b = b \cdot a$
前面提到的循环群就是一种Abel群,那么,有不是循环群的Abel群吗?
我们来看2阶循环群$Z_2$
然后建立一个有4个元素的群
$\{(0,0),(0,1),(1,0),(1,1)\}$
其中乘法如下定义
$(a,b) \cdot (c,d) = (a \cdot c, b \cdot d)$
可以得知,$(0,0)$是该群的幺元,
$(a,b) \cdot (0,0) = (a \cdot 0, b \cdot 0) = (a,b) = (0 \cdot a, 0 \cdot b) = (0,0) \cdot (a, b)$
每个元的逆元是自身(源于$Z_2$的每个元逆元为自身),实际上
$(a,b) \cdot (a,b) = (a \cdot a, b \cdot b) = (0,0)$
很显然也满足乘法交换律
$(a,b) \cdot (c,d) = (a \cdot c, b \cdot d) = (c \cdot a, d \cdot b) = (c,d) \cdot (a,b)$
所以这是一个Abel群。
然而,4阶循环群$Z_4$里的$1$的周期为4,而这个群里除幺元外所有的元素周期都为2,显然不是循环群。
那么,有非交换群吗?
有的,我们给出以下6元群。
$\{e,y,y^2,x,xy,xy^2\}$
其中,
$x^2=y^3=e$
$yx=xy^2$
生成乘法表如下
\begin{matrix}
\cdot& e & y & y^2 & x & xy & xy^2 \\
e    & e & y & y^2 & x & xy & xy^2 \\
y    & y & y^2 & e & xy^2 & x & xy\\
y^2  & y^2 & e & y & xy & xy^2 & x\\
x    & x & xy & xy^2 & e & y & y^2\\
xy   & xy & xy^2 & x & y^2  & e & y\\
xy^2 & xy^2 & x & xy & y & y^2 & e\\
\end{matrix}
可以验证,上面是一个群,
另外,这个乘法表的方阵并不是对称方阵,也就是,它并不是Abel群。
其实,这个群是阶数最小的非交换群,它是一个二面体群,记作$D_3$,所谓$D_n$,是正$n$边形的所有对称映射构成的群,$D_3$就是正三角形的对称映射群。
对称映射群,这个名字一下子不好理解,那就换个名字,就叫全等群
正n边形和自身有多少种不同的全等?
顺时针方向:
$S_{A_1,A_2,...A_n} \cong S_{A_1,A_2,...A_n}$
$S_{A_1,A_2,...A_n} \cong S_{A_2,A_3,...A_n,A_1}$
$...$
$S_{A_1,A_2,...A_n} \cong S_{A_n,A_1,...A_{n-1}}$
逆时针方向:
$S_{A_1,A_2,...A_n} \cong S_{A_1,A_n,...A_2}$
$S_{A_1,A_2,...A_n} \cong S_{A_2,A_1,A_n...A_3}$
$...$
$S_{A_1,A_2,...A_n} \cong S_{A_n,A_{n-1},...A_1}$
总共$2n$个全等。
另外,
$D_3 \cong S_3$
$S_3$是3阶对称群,也就是3个元素所有的置换组成的群。
 
群同构
一般群论教材里会先讲群同态,再把群同构当成群同态的一种,其中可以引入同态定理,但那是一本正经的讲法。
我这里只是讲个大致,所以同态我直接滤过了。
其实同构才是拍下脑袋就能明白的东西,因为它实在太自然了。
同构同构,顾名思义,就是同样的结构。研究一个群,代表所有与之同构的群的性质。
先看看数学符号,群$a$和群$b$同构记作$a \cong b$
即便没学过高等数学的中学生,也会知道这个符号在平面几何、立体几何里指图形的全等,也就是性质完全一模一样。
我们以数学的直觉,来想想什么样的两个群称为同构呢。
群有两个东西,一个是里面的元素集合,一个是构建在元素集合上的二元运算。
我们甚至可以超越群的限制,想象一下什么叫$ \cong $,
其中,$f_1$是集合$G_1$上的二元运算,$f_2$是集合$G_2$上的二元运算,
不一定需要构成群。
那么,应该是在一一对应下两者的所有表现一模一样。那么应该是:
对于一一对应$f:G_1\rightarrow G_2$
$\forall a, b \in G_1:f(a\cdot _{1}b)=f(a)\cdot _{2} f(b)$
上一章里,求出的群有很多同构,那么我们如何让同构的群只出一个即可呢?
最简单的方法,就是构造一个过滤条件,每当新出一个群,就看看是否和之前出过的群同构,
还是用方阵(array下用一维来模拟二维)来代表二元运算,以下函数用来判断同构,op1/op2则是代表二元运算的方阵。
  1. import array
  2. import itertools as it
  3. def is_isomp(s, op1, op2):
  4.     n = len(s)
  5.     make_mul = lambda op : lambda a, b : op[a * n + b]
  6.     #将矩阵op1和op2转化成真正的函数
  7.     mul_op1 = make_mul(op1)
  8.     mul_op2 = make_mul(op2)
  9.     #将排列转换成一一对应
  10.     f = lambda n : s[n]
  11.     #遍历所有的乘法
  12.     for a, b in it.product(range(n), range(n)):
  13.         #如果发现不满足,当然不是同构
  14.         if f(mul_op1(a, b)) != mul_op2(f(a), f(b)):
  15.             return False
  16.     #如果发现当前一一对应满足同构,那么就返回构成同构
  17.     return True
  18. def isomp(n, op1, op2):
  19.     #遍历所有的一一对应,所有的一一对应其实和所有的n全排序一一对应
  20.     for s in it.permutations(range(n)):
  21.         if is_isomp(s, op1, op2):
  22.             return True
  23.     return False
复制代码
我们看看之前$D_3$在上一节里表示乘法的array该是什么
首先,我们让$e,y,y^2,x,xy,xy^2$分别对应$0,1,2,3,4,5$,那么乘法表矩阵应该是
\begin{matrix}
0 & 1 & 2 & 3 & 4 & 5 \\
1 & 2 & 0 & 5 & 3 & 4\\
2 & 0 & 1 & 4 & 5 & 3\\
3 & 4 & 5 & 0 & 1 & 2\\
4 & 5 & 3 & 2 & 0 & 1\\
5 & 3 & 4 & 1 & 2 & 0\\
\end{matrix}
显然任何一个群,在恒等映射下一定是同构的,这种同构是平凡的,也就是没啥大的意义。
我们用程序搜一下:
  1. op = array.array('i', [0, 1, 2, 3, 4, 5,
  2.                        1, 2, 0, 5, 3, 4,
  3.                        2, 0, 1, 4, 5, 3,
  4.                        3, 4, 5, 0, 1, 2,
  5.                        4, 5, 3, 2, 0, 1,
  6.                        5, 3, 4, 1, 2, 0])
  7. for s in it.permutations(range(6)):
  8.     if is_isomp(s, op, op):
  9.         print(s)
复制代码
得到所有构成同构的一一对应:
(0, 1, 2, 3, 4, 5)
(0, 1, 2, 4, 5, 3)
(0, 1, 2, 5, 3, 4)
(0, 2, 1, 3, 5, 4)
(0, 2, 1, 4, 3, 5)
(0, 2, 1, 5, 4, 3)
这种同构是一个群自己到自己的映射,称为自同构。
一个群所有的自同构其实也构成一个群,称为自同构群。
$D_3$和$D_3$的自同构群(可记作$Aut(D_3)$)恰好同构:
  1. op = array.array('i', [0, 1, 2, 3, 4, 5,
  2.                        1, 2, 0, 5, 3, 4,
  3.                        2, 0, 1, 4, 5, 3,
  4.                        3, 4, 5, 0, 1, 2,
  5.                        4, 5, 3, 2, 0, 1,
  6.                        5, 3, 4, 1, 2, 0])
  7. #ss装下所有的D3上的自同构置换
  8. ss = []
  9. for s in it.permutations(range(6)):
  10.     if is_isomp(s, op, op):
  11.         ss.append(list(s))
  12. #两个置换的乘积
  13. def mul(a, b):
  14.     r = [0] * len(a)
  15.     for i in range(len(b)):
  16.         r[i] = a[b[i]]
  17.     return r
  18. #op_aut是D3自同构群的乘法表
  19. op_aut = array.array('i', [0] * 36)
  20. for i, a in enumerate(ss):
  21.     for j, b in enumerate(ss):
  22.         c = mul(a, b)
  23.         for k, s in enumerate(ss):
  24.             if c == s:
  25.                 op_aut[i * 6 + j] = k
  26.                 break
  27. #以下判断D3和D3自同构群两者同构与否
  28. print(isomp(6, op, op_aut))
复制代码
不过关于自同构群属于题外话,不深入讲了。
 
子群
如果一个群内部的一部分元素在该群的乘法下也构成一个群,那么这个群则叫子群(subgroup)。
很明显,子群中必然包含原群的幺元作为幺元。
比如之前的二面体群$D_3$中,
$\{e,x\}$
$\{e,y,y^2\}$
$\{e,xy\}$
$\{e,xy^2\}$
在原乘法下,都是$D_3$的子群,注意,这些群都是循环群。
另外,$\{e\}$和$\{e,y,y^2,x,xy,xy^2\}$也是$D_3$的子群,只是这是每个群都有的,也就是平凡的,没什么特殊意义。
对于$n$阶循环群,如果$m$是$n$的正约数,则该循环群有$m$阶子群,
实际上,$n/m$生成的群,就是$n$阶循环群的$m$阶子群,当然子群也是循环群。
 
直积
这是一种用群构建群的方式。
如果$$和$$都是群,
那么集合$G=\{(a,b)|a \in G_1,b \in G_2\}$
配合以下乘法
$(a_1,b_1) \cdot (a_2,b_2)=(a_{1}\cdot_{1} a_2,b_{1}\cdot_{2}b_2)$
我们来看一下它为什么是一个群。
首先,对于任意$G$下$(a,b),(c,d),(e,f)$,
$(a,b)\cdot(c,d) \cdot (e,f)$
$=(a\cdot_{1}c,b\cdot_{2}d)\cdot(e,f)$
$=(a\cdot_{1}c\cdot_{1}e,b\cdot_{2}d\cdot_{2}f)$
$=(a\cdot_{1}(c\cdot_{1}e),b\cdot_{2}(d\cdot_{2}f))$
$=(a,b)\cdot(c\cdot_{1}e,d\cdot_{2}f)$
$=(a,b)\cdot((c,d)\cdot(e,f))$
满足结合律,
对于任意$G$下$(a,b)$,
假设$e_1$和$e_2$是原群的幺元,
$(a,b)\cdot (e_1,e_2) = (a,b) = (e_1,e_2)\cdot (a,b)$
所以$(e_1,e_2)$是幺元,
$(a,b)\cdot (a^{-1},b^{-1}) = (e_1,e_2) = (a^{-1},b^{-1}) \cdot (a,b)$
所以$(a^{-1},b^{-1})$是逆元,
根据群的定义,这个新的代数结构的确是群,称为两个群的外直积
为了研究群的内部结构,我们引入内直积,这样直积前的两个群都是最终得到的群的子集。
如果$$和$$都是群,
且$G_1 \cap G_2 = \{e\}$那么,集合$G=\{a\cdot b|a \in G_1,b\in G_2\}$满足
$a_{1},a_{2} \in G_{1} \land b_{1},b_{2} \in G_{2} \land a_{1} \cdot b_{1} = a_{2} \cdot b_{2} \Rightarrow a_{1} = a_{2} \land b_{1} = b_{2}$
再加上相应的乘法就是内直积得到的群,
对于乘法,原$G_1$里的元和原$G_2$里的元两者乘法可交换,
那么,对于$a,c \in G_1, b,d \in G_2$,
$(a\cdot b) \cdot (c\cdot d)$
$=a\cdot b \cdot c \cdot d$
$=a\cdot (b \cdot c) \cdot d$
$=a\cdot (c \cdot b) \cdot d$
$=a\cdot c \cdot b \cdot d$
$=(a\cdot c) \cdot (b \cdot d)$
外直积和内直积得到的结果实际上是同构的,所以从研究的角度来说,是可以替代的。
我们再回头看看$D_3$,它也有$\{e,x\}$和$\{e,y,y^2\}$两个子群,
但它并不是这两个子群的直积,因为第一个群的$x$和第二个群的$y$乘法不可交换。
另外,两个Abel群的直积依然是Abel群,这个很容易证明,这一条与本系列所要讨论的Abel群的结构有直接关系。
还是给直积一个符号以便后面叙述吧,记群$G_1$和群$G_2$的直积为$G_1\otimes G_2$
 
循环群内直积的条件我们现在考虑有限Abel群的生成元
如果从群$G$中取$n$个元可以生成$G$,
暂时记作$G=$
因为Abel群满足乘法交换律,那么$G$中任意的元$g$都可以写成以下的形式:
$g = k_1*a_1+k_2*a_2+...k_n*a_n$
其中,$k*a$中$k$是小于$a$周期的自然数,
意思为$k$个$a$相乘(加)的结果。再重申一次,对于Abel群(也就是可交换群),我们可以把里面的乘法叫加法,所以这里使用加号。
其中,如果存在一组$k_1,k_2...k_n$
使得$k_1*a_1+k_2*a_2+...k_n*a_n = 0$
那么$k_1*a_1,k_2*a_2,...kn*an$必然全为$0$
在这种情况下,对于任意$k_1*a_1+k_2*a2+...k_n*a_n$和$j_1*a_1+j_2*a2+...j_n*a_n$
两者相减为$(k_1 - j_1)*a_1+(k_2-j_2)*a_2+...(k_n-j_n)*a_n$
相减为$0$则意味着$(k_1 - j_1)*a_1=0\land (k_2 - j_2)*a_2=0 \land (k_n - j_n)*a_n=0$
根据上面条件,我们发现两者相等只有在各项相等的情况下。
并且本身就是Abel群,两者当然也是乘法可交换的。
从而,$G$是$,,...$这些循环群的内直积
也就是$G=\otimes\otimes ...$
 
另外,对于Abel群$G=$
如果存在$k_1*a_1,k_2*a_2,...k_n*a_n$不全为$0$使得$k_1*a_1+k_2*a_2+...k_n*a_n = 0$
那么$a_1,a_2,...a_n$中必然存在一个元可以被其他元线性表出,这其实是线性代数的基本功,回忆一下无关线性向量组相关的知识,再加上联系到此处各个元的周期有限,应该不难证明,此处省略证明留给读者。
于是可以找到少一个元生成整个群。
如此不断剔除多余的生成元下去,最终总可以找到满足开始的条件,也就是无论如何,有限Abel群都可以表示为循环群直积的形式。
 
循环群直积的标准化
现在我们再来考虑一个例子,
假如一个6元的Abel群我们发现同构于$Z_2 \otimes Z_3$
我们用外直积可能更容易理解,
它的六个元分别是
$(e,e),(e,b),(e,b^2),(a,e),(a,b),(a,b^2)$
其中$a$周期为$2$,$b$周期为$3$
结果发现里面有一个周期为6的元素$(a,b)$,结果其实它同构于$Z_6$
我们当然更喜欢直接到位用$Z_6$就能很清楚的明白它的结构了。
这就意味着我们虽然可以有办法把Abel群表示为循环群的直积,但仍需要进一步化简。
 
我们考虑$Z_m \otimes Z_n$
为了明白起见,我们还是用外直积来理解。
考虑它有两个生成元$(a,e)$和$(e,b)$
其中$a$周期为$m$,$b$周期为$n$
显然,$(a,b)$的周期是$m$和$n$最小公倍数,记作$lcm(m,n)$。
另,$m$和$n$最大公约数,记作$gcd(m,n)$。
我们有
$lcm(m*n) = m/gcd(m,n)*n = n/gcd(m,n)*m$
其中,$m/gcd(m,n)$和$n/gcd(m,n)$都是正整数,
又显然,对于其他任何元$(k_1*a,k_2*b)$
$lcm(m*n)*(k_1*a,k_2*b)$
$=((lcm(m*n)*k_1)*a,(lcm(m*n)*k_2)*b)$
$=((n/gcd(m,n)*m*k_1)*a,(m/gcd(m,n)*n*k_2)*b)$
$=(n/gcd(m,n)*k_1*(m*a),m/gcd(m,n)*k_2*(n*b))$
$=(e,e)$
 这意味着$(a,b)$有着整个群里最大的周期。
不难得出,
$(m/gcd(m,n)*a,n/gcd(m,n)*b)$和$(a,b)$可以作为整个群的生成元
具体证明读者自行去证,提示一下,需要用到以下命题:
对于任意正整数$m$,$n$,存在整数$p$和$q$,使得
$mp+nq=gcd(m,n)$
 
$(a,b)$周期为$lcm(m,n)$,
$(m/gcd(m,n)*a,n/gcd(m,n)*b)$周期为$gcd(m,n)$
所以$Z_m \otimes Z_n \cong Z_{gcd(m,n)} \otimes Z_{lcm(m,n)}$
注意,$lcm(m,n)$是整个群最大的周期,并且$gcd(m,n)$是$lcm(m,n)$的约数。
另外,对于平凡的直积
$Z_1 \otimes Z_n \cong Z_n$
可以去掉$Z_1$项
又因为直积满足交换之后依然同构,
于是对于$Z_{k_1} \otimes Z_{k_2} \otimes ... Z_{k_n}$的化简,可以如下这样两层循环进行,可以使得最终为一组循环群的直积,满足左边循环群的阶数是右边循环群阶数的约数。
  1. #最大公约数
  2. def gcd(m, n):
  3.     while True:
  4.         if n == 0:
  5.             return m
  6.         m %= n
  7.         if m == 0:
  8.             return n
  9.         n %= m
  10. #最小公倍数
  11. def lcm(m, n):
  12.     return m * n // gcd(m, n)
  13. #标准化
  14. def trans(k):
  15.     #复制k数组
  16.     a = [n for n in k]
  17.     length = len(a)
  18.     #两轮循环化简
  19.     for n in range(length - 1):
  20.         for m in range(n + 1, length):
  21.             a[n], a[m] = gcd(a[n], a[m]), lcm(a[n], a[m])
  22.     #剔除掉1
  23.     for i in range(length):
  24.         if a[i] != 1:
  25.             return a[i:]
  26.     return a
复制代码
比如我们想要标准化$Z_{6} \otimes Z_{10} \otimes Z_{15} \otimes Z_{20}$
trans([6,10,15, 20]) => [10, 30, 60]
也就是$Z_{10} \otimes Z_{30} \otimes Z_{60}$
以上的结果可以看出,运算到最后,前面的数字是后面数字的约数,并且不存在1,这个表示对于这个群是唯一的。
于是我们就根据此得到给定阶数的Abel群所有的同构。
以72阶Abel群为例,我们分解72为大于1的整数乘积,满足左边是右边的约数,可以穷举出72阶Abel群所有的同构如下:
$Z_{72}$
$Z_2 \otimes Z_{36}$
$Z_3 \otimes Z_{24}$
$Z_6 \otimes Z_{12}$
$Z_2 \otimes Z_2 \otimes Z_{18}$
$Z_2 \otimes Z_6 \otimes Z_6$
 
下一节我们设计程序来穷举给定阶数Abel群的所有同构。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册