08.2 有限群與 Burnside 引理:對稱性的計數工具#
0. 導言:當「相同」變成數學問題#
多少種方式可以把一條項鍊串上 6 顆珠子、只用黑白兩色?暴力答案是 \(2^6 = 64\) 。但「順時針轉 2 格」的項鍊與原來是同一條——「相同」不是相等,而是在某個變換群之下等價。把這個模糊的直覺變成可計算的公式,就是本章的任務。
歷史脈絡:Burnside 引理(burnside's lemma,正確名稱或許該叫「Cauchy–Frobenius 引理」:Cauchy 1845 年、Frobenius 1887 年均已證明,Burnside 1897 年在教科書中引用並因此得名——命名錯誤本身就是一則「前因後果」的教訓)。它是 Pólya 計數定理(1937)的核心零件,後者徹底改變了化學(異構物計數)、組合學與圖論(圖的同構類計數)。
驅動關係:Lagrange/Cauchy 的排列群(08.1 前因)→ 群作用的概念化 → orbit–stabilizer 定理 → Burnside 引理 → Pólya 定理 → 現代組合枚舉與化學資料庫。同時,07.2 證明 Fermat 小定理時「乘 \(a\) 是排列」的手法,正是群作用的第一次亮相。
1. 群作用:讓群「動起來」#
定義 1.1(群作用)#
群 \(G\) 作用在集合 \(X\) 上,是指映射 \(G \times X \to X\) , \((g, x) \mapsto g \cdot x\) ,滿足:
- \(e \cdot x = x\) (單位不動);
- \(g \cdot (h \cdot x) = (gh) \cdot x\) (相容性)。
每個 \(g\) 因此給出 \(X\) 上的一個雙射(逆映射為 \(g^{-1}\) ),故有同態 \(G \to \mathrm{Sym}(X)\) (Cayley 定理的推廣視角:每個群作用都是一個排列表示)。
定義 1.2(軌道與固定子)#
對 \(x \in X\) :
- 軌道(orbit): \(Gx = \{g \cdot x \mid g \in G\}\) ;
- 固定子(stabilizer): \(G_x = \{g \in G \mid g \cdot x = x\}\) 。
定理 1.3(軌道–固定子定理,orbit–stabilizer)#
\(G\) 有限, \(x \in X\) ,則
證明:對每個 \(y \in Gx\) ,選一個把 \(x\) 送 to \(y\) 的 \(g_y\) 。考慮陪集 \(g_y G_x\) :若 \(h \in g_y G_x\) ,則 \(h \cdot x = g_y(k \cdot x) = g_y \cdot x = y\) ,故 \(g_y G_x\) 的所有元素都送 \(x\) to \(y\) ;反過來若 \(g \cdot x = y\) ,則 \(g_y^{-1}g \in G_x\) ,即 \(g \in g_y G_x\) 。所以「把 \(x\) 送 to \(y\) 的元素全體 = 陪集 \(g_y G_x\) 」,大小 \(|G_x|\) (Lagrange)。不同 \(y\) 的陪集互不相交(否則 \(g_{y'}^{-1}g_y \in G_x\) 導致 \(y = y'\) )。因此 \(|G| = \sum_{y \in Gx} |G_x| = |Gx| \cdot |G_x|\) 。 \(\blacksquare\)
結構對照:這個證明與 Lagrange 定理(08.1 定理 2.5)同構——都是「陪集等大、互斥、覆蓋」三步曲。事實上 Lagrange 是取 \(X = G/H\) (陪集集合)的特例。同一個證明骨架,支撐兩大定理。
定理 1.4(軌道是等價類)#
關係 \(x \sim y \iff \exists g: y = g \cdot x\) 是等價關係,其等價類恰為軌道。因此 \(X\) 被軌道劃分: \(|X| = \sum_{\text{軌道 } O} |O|\) 。
# 正方形的旋轉群作用在 4 個頂點上
import itertools
def compose(p, q):
"""排列合成:先做 q 再做 p"""
return tuple(p[i] for i in q)
C4 = [((0,1,2,3), "e"), ((1,2,3,0), "r90"), ((2,3,0,1), "r180"), ((3,0,1,2), "r270")]
X = list(itertools.permutations(range(4))) # 頂點的排列
orbit_of = {}
for x in X:
orb = frozenset(p for p, _ in C4 for p in [compose(p, x)])
orbit_of.setdefault(orb, []).append(x)
print(f"頂點 {X[0]} 的軌道大小: {len(orbit_of[frozenset(compose(p, X[0]) for p, _ in C4)])}")
print(f"軌道總數: {len(orbit_of)}") # 等價類 = 軌道
2. Burnside 引理#
定理 2.1(Burnside 引理 / Cauchy–Frobenius 引理)#
有限群 \(G\) 作用在有限集 \(X\) 上,則軌道個數(即本質不同的組態數)為
其中 \(\mathrm{Fix}(g) = \{x \in X \mid g \cdot x = x\}\) 。平均來說,「被多少變換固定住」就等於「有多少種本質不同的東西」。
證明(雙重計數)。計算集合
的大小,兩個方向各算一次:
- 按 \(g\) 分組: \(|S| = \sum_{g \in G} |\mathrm{Fix}(g)|\) 。
- 按 \(x\) 分組: \(x\) 貢獻的對數為 \(|G_x|\) ,而由 orbit–stabilizer 定理 \(|G_x| = |G|/|Gx|\) 。所以 $\(|S| = \sum_{x \in X} \frac{|G|}{|Gx|} = |G| \sum_{x \in X} \frac{1}{|Gx|}.\)$ 同一軌道內每個 \(x\) 的 \(|Gx|\) 相同(都等於該軌道大小),故 \(\sum_{x \in O} \frac{1}{|O|} = 1\) ,每個軌道總共貢獻 1: $\(|S| = |G| \cdot (\text{軌道個數}).\)$
兩式相等,除以 \(|G|\) 即得。 \(\blacksquare\)
證明思想:又是「雙重計數」——07.2 證 Fermat 小定理用「乘 \(a\) 重排 \(\{1,\dots,p-1\}\) 」,08.1 證 Lagrange 用「陪集劃分」,本章用「 \((g,x)\) 配對矩陣按行按列各數一次」。交換求和順序是組合數學最強的萬用鑰匙。
範例 2.2(項鍊問題)#
6 顆珠子、2 色、旋轉群 \(C_6\) 作用在 \(X = \{黑白\}^6\) ( \(|X| = 64\) ):
| 旋轉 | \(\mathrm{Fix}(g)\) | 說明 |
|---|---|---|
| \(e\) | \(2^6 = 64\) | 全部不動 |
| 轉 1、5 格 | \(2\) | 六位循環 → 必須全同色 |
| 轉 2、4 格 | \(2^2 = 4\) | 3 週期:每 3 格同色 |
| 轉 3 格 | \(2^3 = 8\) | 2 週期 |
不經 Burnside,這個 14 很難不重不漏地數出來。
def count_bracelet(colors, n, rotations):
"""旋轉等價下的手環數(Burnside 引理)"""
total = 0
for k in range(rotations): # 旋轉 k 格
fixed = 0
for cfg in itertools.product(colors, repeat=n):
# 旋轉 k 格後仍相同 ⟺ cfg 是週期 gcd(n, k) 的重複
d = math.gcd(n, k)
if all(cfg[i] == cfg[(i + k) % n] for i in range(n)):
fixed += 1
total += fixed
return total // rotations
import math
print(count_bracelet("BW", 6, 6)) # 14 ✓
print(count_bracelet("BW", 4, 4)) # 6 (四珠手環)
3. 進階:循環指數與 Pólya 定理(概述)#
Burnside 引理逐個 \(g\) 計數 \(\mathrm{Fix}(g)\) 。Pólya(1937)把它系統化:若 \(g\) 作用在 \(n\) 個位置上分解成 \(c_1\) 個 1-循環、 \(c_2\) 個 2-循環…,則固定 \(g\) 的著色數為 \(m^{c(g)}\) ( \(m\) 色時),因為每個循環內必須同色:
項鍊例: \(c(e)=6, c(r^{\pm1})=1, c(r^{\pm2})=2, c(r^3)=3\) ,代入:
若再加上翻轉(二面體群 \(D_6\) ,12 個元素)則考慮「可翻面的手環」,答案變 13。作用群越大,等價類越少——對稱性越多,本質不同的組態越少。
範例 3.1(正方形頂點二著色, \(D_4\) 作用)#
# D4 作用在 4 個頂點的 2-著色上:16 種塗法 → 本質不同有 6 種
def cycle_count(perm):
seen, cycles = set(), 0
for i in range(len(perm)):
if i not in seen:
cycles += 1
j = i
while j not in seen:
seen.add(j); j = perm[j]
return cycles
D4 = [(0,1,2,3), (1,2,3,0), (2,3,0,1), (3,0,1,2), # 旋轉
(3,2,1,0), (1,0,3,2), (0,3,2,1), (2,1,0,3)] # 翻轉
m, n = 2, 4
N = sum(m ** cycle_count(p) for p in D4) // len(D4)
print(N) # 6
4. 應用版圖#
| 領域 | 問題 | 作用群 | 結果 |
|---|---|---|---|
| 化學 | 苯環取代物的異構物數 | \(D_6\) | Pólya 1937 的原始動機 |
| 圖論 | \(n\) 點標號圖的同構類數 | \(S_n\) 作用在邊集合 | A000088 數列 |
| 遊戲 | 魔方陣、積木、拼圖本質型態 | 對稱群 | 謎題設計 |
| 編碼 | 等價碼字分類 | 換座標群 | 碼的重量枚舉子 |
圖計數例子:3 個頂點的簡單圖有 \(2^{\binom{3}{2}} = 8\) 個標號版本,但在 \(S_3\) 作用下只有 4 個同構類(空圖、1 邊、2 邊、三角形)—— \(S_3\) 的循環指數給出 \(\frac{1}{6}(2^3 + 3 \cdot 2^2 + 2 \cdot 2^1) = 4\) 。
5. 章末小結#
| 定理 | 敘述 | 證明核心 |
|---|---|---|
| orbit–stabilizer | \(\lvert G\rvert = \lvert G_x\rvert \cdot \lvert Gx\rvert\) | 陪集分解(同 Lagrange) |
| 軌道劃分 | \(X = \bigsqcup\) 軌道 | 等價關係 |
| Burnside | $N = \frac{1}{ | G |
| Pólya | $N = \frac{1}{ | G |
核心因果鏈:排列群(Cauchy)→ 群作用 → 軌道/固定子 → orbit–stabilizer(Lagrange 的推廣)→ Burnside(雙重計數)→ Pólya(循環指數)→ 組合枚舉的工業化。
一個容易被忽略的深意:Burnside 引理把「等價類個數」這個離散整數,表達成「平均固定點數」這個可以逐元素計算的量。這種「全域量 = 局部量平均」的哲學,在指標定理、Möbius 反演、 甚至傅立葉分析中反覆出現。
6. 下一步#
到目前為止,我們的群都是有限的,計算模型是「排列、枚舉、數數」。但如果把視野拉向「一切可計算的對象」——字串、程式、語言——計數會被不可計算性取代:有些問題連「有沒有演算法」都沒有答案。這就是 08.3 的主題:從 Turing 1936 的圖靈機(可計算性的極限)、Chomsky 1956 的語言層級(語法的四種機器)、到 DFA 與 Kleene 星號、以及 Regular 語言的 Pumping lemma——我們將從「數對稱」轉向「算能力」,為全書的計算理論篇揭開序幕。