版權申明:本文為博主窗戶(Colin Cai)原創,歡迎轉帖。如要轉貼,必須注明原文網址 http://www.rzrgm.cn/Colin-Cai/p/18791060.html 作者:窗戶 QQ/微信:6679072 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群即交換群,也就是滿足乘法交換律的群。
也就是$<G,\cdot>$是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$
即便沒學過高等數學的中學生,也會知道這個符號在平面幾何、立體幾何里指圖形的全等,也就是性質完全一模一樣。
我們以數學的直覺,來想想什么樣的兩個群稱為同構呢。
群有兩個東西,一個是里面的元素集合,一個是構建在元素集合上的二元運算。
我們甚至可以超越群的限制,想象一下什么叫$<G_1,f_1> \cong <G_2,f_2>$,
其中,$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則是代表二元運算的方陣。
import array import itertools as it def is_isomp(s, op1, op2): n = len(s) make_mul = lambda op : lambda a, b : op[a * n + b] #將矩陣op1和op2轉化成真正的函數 mul_op1 = make_mul(op1) mul_op2 = make_mul(op2) #將排列轉換成一一對應 f = lambda n : s[n] #遍歷所有的乘法 for a, b in it.product(range(n), range(n)): #如果發現不滿足,當然不是同構 if f(mul_op1(a, b)) != mul_op2(f(a), f(b)): return False #如果發現當前一一對應滿足同構,那么就返回構成同構 return True def isomp(n, op1, op2): #遍歷所有的一一對應,所有的一一對應其實和所有的n全排序一一對應 for s in it.permutations(range(n)): if is_isomp(s, op1, op2): return True 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}
顯然任何一個群,在恒等映射下一定是同構的,這種同構是平凡的,也就是沒啥大的意義。
我們用程序搜一下:
op = array.array('i', [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]) for s in it.permutations(range(6)): if is_isomp(s, op, op): 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)$)恰好同構:
op = array.array('i', [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]) #ss裝下所有的D3上的自同構置換 ss = [] for s in it.permutations(range(6)): if is_isomp(s, op, op): ss.append(list(s)) #兩個置換的乘積 def mul(a, b): r = [0] * len(a) for i in range(len(b)): r[i] = a[b[i]] return r #op_aut是D3自同構群的乘法表 op_aut = array.array('i', [0] * 36) for i, a in enumerate(ss): for j, b in enumerate(ss): c = mul(a, b) for k, s in enumerate(ss): if c == s: op_aut[i * 6 + j] = k break #以下判斷D3和D3自同構群兩者同構與否 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_1,\cdot_1>$和$<G_2,\cdot_2>$都是群,
那么集合$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,\cdot_1>$和$<G_2,\cdot_2>$都是群,
那么,集合$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=<a_1,a_2,...a_n>$
因為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$是$<a_1>,<a_2>,...<a_n>$這些循環群的內直積
也就是$G=<a_1>\otimes<a_2>\otimes ...<a_n>$
另外,對于Abel群$G=<a_1,a_2,...a_n>$
如果存在$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}$的化簡,可以如下這樣兩層循環進行,可以使得最終為一組循環群的直積,滿足左邊循環群的階數是右邊循環群階數的約數。
#最大公約數 def gcd(m, n): while True: if n == 0: return m m %= n if m == 0: return n n %= m #最小公倍數 def lcm(m, n): return m * n // gcd(m, n) #標準化 def trans(k): #復制k數組 a = [n for n in k] length = len(a) #兩輪循環化簡 for n in range(length - 1): for m in range(n + 1, length): a[n], a[m] = gcd(a[n], a[m]), lcm(a[n], a[m]) #剔除掉1 for i in range(length): if a[i] != 1: return a[i:] 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群的所有同構。
浙公網安備 33010602011771號