2.2 群的定義與凱萊(1854)的抽象化#
學習目標#
- 熟練群的四條公理,能檢驗一個具體結構是否為群。
- 理解凱萊 1854 年的抽象化:置換、四元數、幾何變換如何共同催生「運算律先行」的觀點。
- 掌握凱萊定理:每個有限群都同構於一個置換群。
- 會用 SymPy 檢驗群公理、建立群的運算表(凱萊表)。
歷史背景#
從「具體運算」到「公理」#
19 世紀上半葉,三條互不相干的線索同時指向「超越數與多項式的運算系統」:
- 置換:拉格朗日(1771)與柯西(1812、1844–1845,他引入了「置換的乘積」「循環記號」與 permutation 一詞)在方程論中的工作,見 2.1 節。
- 數系擴張:複數 \(\mathbb{C}\) 被接受後(1800 年前後),數學家試圖構造「三維複數」皆失敗;哈密頓(William Rowan Hamilton, 1805–1865)在 1843 年 10 月 16 日於都柏林運河橋上刻下四元數公式 \(i^2 = j^2 = k^2 = ijk = -1\) ——犧牲了交換律 \(ij = -ji\) 。這是數學史上第一次有人刻意保留結合律而放棄交換律。
- 幾何變換:射影幾何(彭賽列,1822)與莫比烏斯(1827)把「變換的複合」當作基本對象;格拉斯曼 1844 年的《延量論》研究一般的「延量運算」。
凱萊(Arthur Cayley, 1821–1895)在 1854 年發表《論映射理論》(*On the theory of groups, as depending on the symbolic equation \(\theta^n = 1\) *),首次給出抽象的群定義:一個符號集合,帶有一個滿足封閉性、結合律、有單位元、每個元素有逆的運算。他明確說明這個概念「同時涵蓋置換、以及四元數等乘法系統」。換言之,四元數迫使數學家把「結合但不交換」視為合法,置換提供了最重要的大例子,幾何變換則提供了「複合」這個統一運算——抽象群論是這三股技術需求的交匯點。
有趣的是,凱萊的抽象化當時反響不大(「群」仍被默認為置換群),直到 1880 年代,若爾當《代換論》(1870)與李(Sophus Lie, 1874 起)的連續群工作使「抽象」變得必要——因為連續群的元素根本不是置換。1883 年凱萊本人再發短文重申抽象觀點,此時才被接受。
理論#
定義 2.2.1(群)#
一個群 \((G, \cdot)\) 是集合 \(G\) 與運算 \(\cdot : G \times G \to G\) ,滿足:
- 封閉性: \(a \cdot b \in G\) (由運算定義已含);
- 結合律: \((a \cdot b) \cdot c = a \cdot (b \cdot c)\) ;
- 單位元:存在 \(e \in G\) 使 \(e \cdot a = a \cdot e = a\) ;
- 逆元:每個 \(a \in G\) 存在 \(a^{-1}\) 使 \(a \cdot a^{-1} = a^{-1} \cdot a = e\) 。
若另滿足 \(a \cdot b = b \cdot a\) (交換律),稱為阿貝爾群(紀念阿貝爾,見 2.5 節)。
命題 2.2.2(基本性質)#
- 單位元唯一;
- 逆元唯一;
- 消去律成立: \(ab = ac \Rightarrow b = c\) ;
- \((ab)^{-1} = b^{-1}a^{-1}\) 。
證明(單位元唯一性):設 \(e, e'\) 皆為單位元,則 \(e = e \cdot e' = e'\) 。其餘留作習題 1。 \(\blacksquare\)
凱萊定理#
定理 2.2.3(凱萊,1854)#
每個群 \(G\) (特別是每個有限群)都同構於某個置換群。具體地,對 \(g \in G\) 定義左乘映射 \(\lambda_g : G \to G\) , \(\lambda_g(h) = gh\) ;則 \(g \mapsto \lambda_g\) 是 \(G\) 到對稱群 \(S_G\) 的單射同態。
證明: \(\lambda_g\) 是雙射(逆為 \(\lambda_{g^{-1}}\) )。複合滿足 \(\lambda_g \circ \lambda_h = \lambda_{gh}\) (結合律保證),故是同態; \(\lambda_g = \mathrm{id}\) 時取 \(h = e\) 得 \(g = e\) ,故單射。 \(\blacksquare\)
凱萊定理的意義:抽象群再「玄」,本質上都是置換——這保證了用 SymPy 的 Permutation(2.6 節)可以機械化處理任何有限群。
凱萊表#
有限群的乘法可用運算表(凱萊表)呈現。表是拉丁方:每行每列中每個元素恰出現一次(由消去律)。例如 4 階循環群 \(\mathbb{Z}/4\) 與 Klein 四元群 \(V_4\) :
Z/4: V_4:
0 1 2 3 e a b c
0 0 1 2 3 e e a b c
1 1 2 3 0 a a e c b
2 2 3 0 1 b b c e a
3 3 0 1 2 c c b a e
兩者都由「對角線結構」區分: \(\mathbb{Z}/4\) 有 4 階元, \(V_4\) 的非單位元全是 2 階。同構的群有不同的表現形式,但凱萊表(適當重排行列後)相同——這是 1854 年抽象觀點的計算化身。
群的階與元素的階#
- 群 \(G\) 的階 \(|G|\) 是其元素個數(有限群)。
- 元素 \(g\) 的階是最小正整數 \(n\) 使 \(g^n = e\) ;凱萊原文的標題符號方程 \(\theta^n = 1\) 正是此概念。
SymPy 實作#
範例 1:檢驗群公理——四元數乘法群 \(\{\pm 1, \pm i, \pm j, \pm k\}\)#
import sympy as sp
from itertools import product
# 用符號表示八個四元數單位
E, NI = 1, -1 # 1 與 -1
I, J, K = 1j, 1j, 1j # 先以複數表示再自訂乘法較繁瑣,改用字典乘法表
# 直接以整數編碼 8 個元素:0..7 表示 {1,-1,i,-i,j,-j,k,-k}
names = ['1', '-1', 'i', '-i', 'j', '-j', 'k', '-k']
# 建立乘法表:i^2=j^2=k^2=ijk=-1
table = {}
def mul(a, b):
"""a, b 為索引;回傳乘積索引"""
x, y = names[a], names[b]
sx, sy = (1 if not x.startswith('-') else -1), (1 if not y.startswith('-') else -1)
bx, by = x.lstrip('-'), y.lstrip('-')
if bx == '1': px, sign = by, sx * sy
elif by == '1': px, sign = bx, sx * sy
elif bx == by: px, sign = '1', -sx * sy # i*i = -1 等
else:
# (i,j,k) 的循環乘法:ij=k, jk=i, ki=j;逆序得一負號
cyc = {('i','j'):'k', ('j','k'):'i', ('k','i'):'j'}
if (bx, by) in cyc:
px, sign = cyc[(bx, by)], sx * sy
else:
px, sign = cyc[(by, bx)], -sx * sy
result = px if sign == 1 else '-' + px
return names.index(result)
# 檢驗群公理
G = list(range(8))
# 封閉性:mul 的定義保證;結合律:
assoc_ok = all(mul(mul(a, b), c) == mul(a, mul(b, c))
for a, b, c in product(G, repeat=3))
# 單位元
unit_ok = all(mul(0, a) == a and mul(a, 0) == a for a in G)
# 逆元
inv_ok = all(any(mul(a, b) == 0 and mul(b, a) == 0 for b in G) for a in G)
commut = all(mul(a, b) == mul(b, a) for a, b in product(G, repeat=2))
print("結合律:", assoc_ok)
print("有單位元 1:", unit_ok)
print("每個元素有逆:", inv_ok)
print("是阿貝爾群嗎:", commut) # False!四元數犧牲交換律
print("i*j =", names[mul(2, 4)], ", j*i =", names[mul(4, 2)])
輸出說明:結合律、單位元、逆元皆成立,但 commut 為 False—— \(ij = k\) 而 \(ji = -k\) 。這正是 1843 年哈密頓的突破:一個「合法的乘法系統」可以不交換,但只要滿足凱萊四公理就是群。四元數群 \(Q_8\) 從此成為教科書標準反例。
範例 2:凱萊定理的具體實現——把 \(Q_8\) 實現為置換群#
from sympy.combinatorics import Permutation, PermutationGroup
from itertools import product
names = ['1', '-1', 'i', '-i', 'j', '-j', 'k', '-k']
def mul(a, b):
x, y = names[a], names[b]
sx = 1 if not x.startswith('-') else -1
sy = 1 if not y.startswith('-') else -1
bx, by = x.lstrip('-'), y.lstrip('-')
if bx == '1': px, sign = by, sx * sy
elif by == '1': px, sign = bx, sx * sy
elif bx == by: px, sign = '1', -sx * sy
else:
cyc = {('i','j'):'k', ('j','k'):'i', ('k','i'):'j'}
if (bx, by) in cyc:
px, sign = cyc[(bx, by)], sx * sy
else:
px, sign = cyc[(by, bx)], -sx * sy
result = px if sign == 1 else '-' + px
return names.index(result)
# 凱萊定理:g -> 左乘置換 lambda_g
perms = []
for g in range(8):
images = [mul(g, h) for h in range(8)]
perms.append(Permutation(*images))
G8 = PermutationGroup(*perms)
print("左正則置換群階數 =", G8.order()) # 應為 8
print("生成元:", perms[2], perms[4]) # i 與 j 的左乘
print("lambda_i * lambda_j =", perms[2] * perms[4])
print("lambda_{ij} =", perms[mul(2, 4)])
print("兩者相同(同態驗證) =", perms[2] * perms[4] == perms[mul(2, 4)])
輸出說明: \(Q_8\) 的 8 個左乘映射實現為 \(\{0,\dots,7\}\) 上的置換,所成群階為 8,且 \(\lambda_i\lambda_j = \lambda_{ij}\) 精確成立——凱萊定理的可執行版本。讀者可改驗右乘 \(\rho_g(h) = hg\) ,並比較左右正則表示的差異(習題 4)。
範例 3:檢查某結構不是群——正整數在減法下#
import sympy as sp
def is_group(G, op, identity=None):
if identity is None:
identity = next((e for e in G if all(op(e, a) == a and op(a, e) == a for a in G)), None)
if identity is None:
return False, "無單位元"
if not all(any(op(a, b) == identity and op(b, a) == identity for b in G) for a in G):
return False, "有元素無逆"
return True, "是群"
N = list(range(1, 8)) # 正整數 1..7
ok, why = is_group(N, lambda a, b: abs(a - b))
print(ok, why) # False 有元素無逆
Z4 = [0, 1, 2, 3]
ok, why = is_group(Z4, lambda a, b: (a + b) % 4)
print(ok, why) # True 是群
輸出說明:正整數在減法下無單位元也無逆( \(3 - 3 = 0 \notin\) 集合),檢驗器正確報出失敗原因; \(\mathbb{Z}/4\) 在加法下通過全部檢驗。把公理檢驗寫成函數,是本章之後反覆使用的工具。
凱萊之後:抽象化的完成#
timeline
title 抽象群論的確立
1770 : 拉格朗日 : 置換的計數(無「群」之名)
1815 : 柯西 : 置換的乘積與循環記號
1843 : 哈密頓 : 四元數(非交換結合系統)
1844 : 格拉斯曼 : 一般延量運算
1854 : 凱萊 : 抽象群公理、凱萊定理
1870 : 若爾當《代換論》 : 置換群的系統理論
1883 : 凱萊重申抽象觀點
1893 : 韋伯《代數教科書》 : 群公理進入教科書凱萊 1854 年超前時代約 25 年。理論超前並非無代價:直到連續變換群(李)、射影幾何群(克萊因 1872 年《愛爾蘭根綱領》)出現,數學家才被迫接受「群是一般運算系統」;克萊因的幾何綱領把幾何定義為「群作用下的不變量理論」,是抽象群論的第一個重大應用(與 2.7 節的群作用思想一脈相承)。
SymPy 要點回顧#
- 群公理可用
itertools.product枚舉檢驗:結合律 \(O(n^3)\) 、單位元與逆 \(O(n^2)\) 。 Permutation(*images):由像的串列構造置換;PermutationGroup(*perms)由生成元建群。- 凱萊定理的實作模式:
images = [op(g, h) for h in range(n)],對左乘、右乘皆可用。 - 凱萊表可用巢狀串列印出,拉丁方性質是消去律的視覺化。
習題#
- 證明命題 2.2.2 的其餘三條:逆元唯一、消去律、 \((ab)^{-1} = b^{-1}a^{-1}\) 。
- 修改範例 1 的
mul,改驗證 \(\mathbb{Z}/12\) (整數模 12 加法)與模 12 乘法單位群 \(\{1,5,7,11\}\) ;後者是 4 階群,判斷它與 \(\mathbb{Z}/4\) 還是 \(V_4\) 同構。 - 寫一個函數
isomorphic_tables(T1, T2),判斷兩張 \(n \times n\) 凱萊表是否可透過重排行列變成相同(即判斷兩群是否同構的暴力法)。 - 實作右正則表示 \(\rho_g(h) = hg\) ,驗證 \(\rho_g \circ \rho_h = \rho_{hg}\) (注意順序反轉!),並解釋這與反同構的關係。
- 用凱萊定理把 \(\mathbb{Z}/5\) 實現為 \(\{0,1,2,3,4\}\) 上的置換群,印出 5 個置換的循環記號,觀察它們都是 5-循環(加恆等置換)。
- (挑戰)凱萊表中每行每列是原集合的重排(拉丁方性質)。證明:此性質等價於消去律;並用程式對 \(Q_8\) 的表驗證。