06.3 有限群的不可約表示與特徵標表#
學習目標#
- 建立類函數空間的內積結構,證明第一與第二正交關係。
- 證明不可約特徵標個數 = 共軛類個數,掌握 \(\sum d_i^2 = |G|\) 。
- 學會用行正交關係與冪等元從零構造特徵標表的演算法。
- 用純 Python 實作特徵標表計算器,並用 SymPy 的
PermutationGroup對多個群驗證。
歷史背景#
特徵標表是純數學史上最優雅的「資料庫」之一:一個群的全部不可約表示,被壓縮成一張 \(r \times r\) 的數字表。
- 1896–1897:Frobenius 發明特徵標後,隨即發展正交關係(初期的「第二主定理」形式),並與學生 Schur 一起計算了對稱群、交錯群、線性群 \(PSL(2,q)\) 等大量特徵標表。
- 1898:Frobenius 證明「正則表示中每個不可約表示出現 \(d_i\) 次」,此結果今天稱為 Frobenius 分解。
- Burnside(1900s):William Burnside 把表示論寫進教科書(Theory of Groups of Finite Order, 1911 二版),使它進入主流。著名的 Burnside \(p^a q^b\) 定理(1904)——階為 \(p^a q^b\) 的群必可解——就是特徵標理論的第一個重大「外溢」應用:一個關於群結構的定理,證明完全依賴特徵標。這讓群論學家不得不正視表示論。
- Brauer(1930s–40s):Richard Brauer 開創模表示論,處理特徵 \(p\) 情形,特徵標表成為有限單群分類工程(見 9.1 節)的核心工具。
- 計算時代:1970 年代起 Conway 等人在 Cambridge 用算表(及後來的電腦)計算怪獸群的特徵標表(1979, Atlas of Finite Groups, 1985 出版)。特徵標表的計算需求直接推動了代數計算系統與群論資料庫(GAP, 1986)的誕生——本書的 SymPy 範例正是這條「理論 → 計算」路線的微縮版。
timeline
title 特徵標表理論與計算
1896-98 : Frobenius 正交關係與正則表示分解
1904 : Burnside p^a q^b 定理 (特徵標證明群結構)
1911 : Burnside 教科書推廣表示論
1930s : Brauer 模表示論
1985 : Atlas of Finite Groups
1986 : GAP 問世類函數空間與正交關係#
定義。 類函數 \(\alpha : G \to \mathbb{C}\) 滿足 \(\alpha(hgh^{-1}) = \alpha(g)\) 。全體類函數構成向量空間 \(\mathcal{C}(G)\) ,維數 = 共軛類個數 \(r\) 。定義內積
其中 \(C_k\) 是共軛類、 \(g_k\) 是代表元。
定理 6.3.1(第一正交關係)。 不可約特徵標 \(\chi_1, \dots, \chi_s\) 滿足 \(\langle \chi_i, \chi_j \rangle = \delta_{ij}\) 。
證明思路。 由 Maschke 定理(6.2 節定理 6.2.1),任何表示完全可約;由 Schur 引理,對交織算子 \(A_{ij} = \sum_g \rho_i(g^{-1}) A \rho_j(g)\) 有 \(A_{ij} = c_A I\) 或 \(0\) 。取 \(A\) 為單一矩陣元素 \(E_{kl}\) 計算 \(c_A = \frac{|G|}{d_i}\delta_{ij}\delta_{kl}\) ,再取跡:
取共軛整理即得 \(\langle \chi_i, \chi_j \rangle = \delta_{ij}\) 。 \(\blacksquare\)
定理 6.3.2(完備性)。 不可約特徵標是 \(\mathcal{C}(G)\) 的正交基,故 \(s = r\) (不可約特徵個數 = 共軛類個數),且特徵標決定表示(兩表示同構 \(\iff\) 特徵標相等)。
證明思路。 若 \(\alpha\) 與所有 \(\chi_i\) 正交,對任意表示 \(\rho\) , \(\sum_g \alpha(g)\rho(g)\) 是交織算子,由 Schur 引理在不可約分支上為純量 \(\lambda_V I\) ,而 \(\operatorname{tr} = \sum_g \alpha(g)\chi_V(g) = 0\) 與 \(\lambda_V \dim V = 0\) 矛盾(除非 \(\lambda_V = 0\) )。於是所有交織算子為零, \(\rho\) 的每個分量「平均為零」迫使其特徵標係數全零,故 \(\rho\) 是平凡表示……嚴格論證需用正則表示:正則特徵標 \(\chi_{\text{reg}}(1) = |G|\) 、 \(\chi_{\text{reg}}(g) = 0\ (g \neq 1)\) ,與分解 \(\chi_{\text{reg}} = \sum_i d_i \chi_i\) 對 \(g \ne 1\) 比較,用第一正交關係即可得 \(\alpha = 0\) 。 \(\blacksquare\)
定理 6.3.3(次數平方和)。 \(\chi_{\text{reg}} = \sum_i d_i \chi_i\) (正則表示中 \(V_i\) 出現 \(d_i\) 次),在 \(g=1\) 取值:
定理 6.3.4(第二正交關係,行/列對偶)。 特徵標表的「列」滿足:對共軛類 \(C_k, C_l\) ,
這是第一正交關係(對「行」= 特徵標)的轉置版本:特徵標表的矩陣(適當縮放後)是酉矩陣。
推論 6.3.5。 \(g \sim h \iff\) 所有不可約特徵標在 \(g, h\) 上取值相同。共軛類 = 特徵標無法分辨的極限。
從數據構造特徵標表:演算法#
給定群 \(G\) (共軛類 \(C_1,\dots,C_r\) , \(C_1 = \{1\}\) ),特徵標表 \(X = (\chi_i(g_k))\) 滿足的條件:
- 正交: \(\langle \chi_i, \chi_j \rangle = \delta_{ij}\) 。
- 第一行: \(\chi_1 \equiv 1\) (平凡特徵標)。
- 第一列: \(\chi_i(1) = d_i\) ,且 \(\sum d_i^2 = |G|\) 。
- 環性質:特徵標值是代數整數;若 \(g\) 階為 \(m\) ,則 \(\chi_i(g)\) 是 \(m\) 次單位根的和。
- 乘法結構: \(\chi_i(g)\chi_j(g)\) 展開成不可約特徵標的(類函數層面)非負整線性組合。
實用策略(適合電腦):枚舉每行為「單位根之和且滿足行正交」的候選向量,或(對小群)直接枚舉正規化酉矩陣的候選再驗證封閉性。本節用代數整數條件 + 正交關係做約束搜索;6.5 節則用對稱函數對 \(S_n\) 給出封閉公式。
例子: \(D_4\) (8 階二面體群)的特徵標表#
\(D_4 = \langle r, s \mid r^4 = s^2 = 1,\ srs = r^{-1} \rangle\) 有 5 個共軛類:
由 \(\sum d_i^2 = 8\) 且 \(r = 5\) ,必有四個一次特徵標與一個二次特徵標。一次特徵標由 \(r \mapsto \pm 1, s \mapsto \pm 1\) 給出;二維特徵標由幾何(旋轉矩陣)給出:
| 類大小 \(\to\) | 1 | 1 | 2 | 2 | 2 |
|---|---|---|---|---|---|
| 代表元 \(\to\) | \(1\) | \(r^2\) | \(r\) | \(s\) | \(rs\) |
| \(\chi_1\) | 1 | 1 | 1 | 1 | 1 |
| \(\chi_2\) | 1 | 1 | 1 | \(-1\) | \(-1\) |
| \(\chi_3\) | 1 | 1 | \(-1\) | 1 | \(-1\) |
| \(\chi_4\) | 1 | 1 | \(-1\) | \(-1\) | 1 |
| \(\chi_5\) | 2 | \(-2\) | 0 | 0 | 0 |
驗證 \(\sum_i \chi_i(r)\overline{\chi_i(r)} = 1+1+1+1+0 = 4 = |G|/|C_3| = 8/2\) (第二正交關係成立)。
SymPy 實作#
範例 1:通用特徵標表計算器(約束搜索版)#
import sympy as sp
from math import isqrt
def conjugacy_classes(G):
"""回傳 [(代表元, 共軛類集合), ...],用 SymPy 內建 conjugacy_classes()"""
reps = []
for c in G.conjugacy_classes():
reps.append((sorted(c, key=lambda p: p.array_form)[0], set(c)))
return reps
def character_table(G):
reps = conjugacy_classes(G)
reps.sort(key=lambda t: len(t[1])) # 讓單位元類排最前(大小1)
classes = [c for _, c in reps]
centers = [g for g, _ in reps]
n = G.order()
r = len(classes)
sizes = [len(c) for c in classes]
# 類函數的內積: <u, v> = (1/|G|) sum_C |C| u(C) v(C)
def inner(u, v):
return sum(sp.Rational(s, n) * u[i] * v[i] for i, s in enumerate(sizes))
rows = [[1] * r] # 第一行: 平凡特徵標
# 約束搜索: 固定次數 d = chi(1), 枚舉各共軛類上的整數特徵標值
# (a) |chi(g)| <= d (特徵標值的絕對值不超過次數)
# (b) sum_C |C| chi(C) = 0 (與平凡特徵標正交)
# (c) sum_C |C| chi(C)^2 = |G| (範數 = 1)
# (d) 與已選的各行正交 (第一正交關係)
def search(d, k, current):
if k == r:
if inner(current, rows[0]) != 0: # (b)
return
if sum(sizes[i] * current[i] ** 2 for i in range(r)) != n: # (c)
return
if all(inner(current, prev) == 0 for prev in rows): # (d)
rows.append(current[:])
return
rest = sum(sizes[k:]) # 剩餘類的總大小
wsum = sum(sizes[i] * current[i] for i in range(k))
wsq = sum(sizes[i] * current[i] ** 2 for i in range(k))
for v in range(-d, d + 1):
if k == 0 and v != d: # 第 0 類(單位元)上的值就是次數 d
continue
ns = wsum + sizes[k] * v
nq = wsq + sizes[k] * v * v
if abs(ns) > d * rest: # 剩餘類無法把加權和補成 0
continue
if nq > n or n - nq > d * d * rest: # 剩餘類無法把平方和補成 |G|
continue
search(d, k + 1, current + [v])
for d in range(1, isqrt(n) + 1): # 第一列: d_i, 且 sum d_i^2 = n
if d * d > n:
break
search(d, 0, [])
return centers, sizes, rows
from sympy.combinatorics.named_groups import DihedralGroup, SymmetricGroup
G = DihedralGroup(4)
centers, sizes, table = character_table(G)
print("代表元:", [str(g.cyclic_form) for g in centers])
print("類大小:", sizes)
for row in table:
print(row)
print("行數 =", len(table), " 共軛類數 =", len(centers))
print("sum d_i^2 =", sum(row[0] ** 2 for row in table), "= |G| =", G.order())
代表元: ['[]', '[[0, 2], [1, 3]]', '[[0, 1, 2, 3]]', '[[0, 1], [2, 3]]', '[[1, 3]]']
類大小: [1, 1, 2, 2, 2]
[1, 1, 1, 1, 1]
[1, 1, -1, -1, 1]
[1, 1, -1, 1, -1]
[1, 1, 1, -1, -1]
[2, -2, 0, 0, 0]
行數 = 5 共軛類數 = 5
sum d_i^2 = 8 = |G| = 8
輸出說明:程式會印出與上表一致的 \(D_4\) 特徵標表(行順序可能不同)。核心邏輯是:正交關係把特徵標表變成有限約束滿足問題——這正是 1980 年代群論計算(Atlas、GAP)的樸素原型。注意此版本在整數值域內搜索,已涵蓋 \(D_4\) 、 \(S_3\) 、 \(S_4\) 、 \(Q_8\) 等;含複數值(如 \(C_3\) 、 \(A_4\) 的 \(\omega\) )的版本需把候選集換成單位根(見習題 3)。
範例 2:用 SymPy 驗證兩個正交關係(以 \(S_4\) 為例)#
\(S_4\) 有 5 個共軛類(恆等、對換、雙對換、三循環、四循環),已知特徵標表:
| 類大小 \(\to\) | 1 | 6 | 3 | 8 | 6 |
|---|---|---|---|---|---|
| 代表元 \(\to\) | \(e\) | \((12)\) | \((12)(34)\) | \((123)\) | \((1234)\) |
| \(\chi_1\) | 1 | 1 | 1 | 1 | 1 |
| \(\chi_2\) (符號) | 1 | \(-1\) | 1 | 1 | \(-1\) |
| \(\chi_3\) | 2 | 0 | 2 | \(-1\) | 0 |
| \(\chi_4\) | 3 | 1 | \(-1\) | 0 | \(-1\) |
| \(\chi_5\) | 3 | \(-1\) | \(-1\) | 0 | 1 |
import sympy as sp
sizes = [1, 6, 3, 8, 6]
n = 24
table = [
[1, 1, 1, 1, 1],
[1, -1, 1, 1, -1],
[2, 0, 2, -1, 0],
[3, 1, -1, 0, -1],
[3, -1, -1, 0, 1],
]
print("第一正交關係 (行):")
for i in range(5):
for j in range(5):
ip = sp.Rational(1, n) * sum(sizes[k] * table[i][k] * table[j][k] for k in range(5))
assert ip == (1 if i == j else 0)
print(" 全部通過")
print("第二正交關係 (列):")
for k in range(5):
for l in range(5):
s = sum(table[i][k] * table[i][l] for i in range(5))
expect = sp.Rational(n, sizes[k]) if k == l else 0
assert s == expect
print(" 全部通過")
print("sum d_i^2 =", sum(row[0]**2 for row in table), "= 24 ?")
第一正交關係 (行):
全部通過
第二正交關係 (列):
全部通過
sum d_i^2 = 24 = 24 ?
輸出說明:三項檢查全部通過——第一正交關係(特徵標為正交單位向量)、第二正交關係( \(\sum_i \chi_i(g_k)\overline{\chi_i(g_l)} = \frac{|G|}{|C_k|}\delta_{kl}\) )、以及次數平方和。特徵標表的兩個正交性互為轉置,這是類函數空間與共軛類空間之間完美的對偶。
範例 3:Burnside \(p^a q^b\) 定理的精神——用特徵標證明群可解#
Burnside 定理的關鍵引理:若共軛類 \(C\) 的大小是素數冪 \(p^k\) ,則 \(G\) 不是單群。證明用「特徵標值是代數整數 + 整除性」:
import sympy as sp
from sympy.combinatorics.named_groups import SymmetricGroup
G = SymmetricGroup(4)
cls_list = [(sorted(c, key=lambda p: p.rank())[0], len(c)) for c in G.conjugacy_classes()]
for g, size in sorted(cls_list, key=lambda t: t[1]):
print(f"代表元 {str(g.cyclic_form):<14} 類大小 = {size}")
代表元 [] 類大小 = 1
代表元 [[0, 1], [2, 3]] 類大小 = 3
代表元 [[0, 1, 2, 3]] 類大小 = 6
代表元 [[2, 3]] 類大小 = 6
代表元 [[1, 2, 3]] 類大小 = 8
輸出說明: \(S_4\) 的類大小為 \(1, 3, 6, 8, 6\) 。Burnside 引理說:若某非中心類大小為素數冪(此處 \(3\) 與 \(8=2^3\) ),則 \(G\) 有非平凡正規子群( \(S_4\) 的 \(A_4\) 與 Klein 四元群)。證明核心: \(\frac{|G|\chi(g)}{d\,|C_G(g)|}\) 是代數整數,搭配 \(|C| = p^k\) 可推出某特徵標在 \(g\) 上取值 \(0\) ,進而 \(\sum_g |\chi(g)|^2\) 的算術迫出正规子群的存在。這是「特徵標反哺群結構理論」的經典範例。
SymPy 要點回顧#
PermutationGroup.conjugacy_classes()給出共軛類;特徵標表的列 = 共軛類。- 正交關係中用
sp.Rational(size, n)而非浮點除法,保證精確性。 - 特徵標表計算 = 約束滿足:正交關係(第一/第二)+ 次數平方和 + 代數整數條件。
- 第二正交關係可由第一正交關係線性代數地導出:把表乘上 \(\sqrt{|C_k|/|G|}\) 後是酉矩陣,行酉 \(\iff\) 列酉。
習題#
- 用範例 1 的計算器算 \(Q_8\) (四元數群)的特徵標表,與 \(D_4\) 比較——兩者特徵標表相同,但群不同。這說明特徵標表的什麼局限性?
- 對 \(A_4\) 手工構造特徵標表(提示:類為 \(\{1\}, \{\) 雙對換 \(\}, \{\) 兩個 \(3\) -循環類 \(\}\) ;有三個一次特徵標,源自 \(V_4 \triangleleft A_4\) 的商 \(\cong C_3\) )。
- 把範例 1 的候選集改成複數單位根(用
sp.exp(sp.I*sp.pi*k/m)或sympy.CRootOf),計算 \(C_3\) 與 \(C_4\) 的特徵標表。 - 證明第二正交關係(從第一正交關係 + 完備性)。
- 證明 Frobenius 分解:正則特徵標 \(\chi_{\text{reg}}(g) = \sum_i d_i \chi_i(g)\) (對 \(g \neq 1\) 為 \(0\) ,這如何推出每個 \(V_i\) 在正則表示中出現 \(d_i\) 次?)。
- (挑戰)寫程式驗證:對 \(S_4\) , \(\chi_4 \otimes \chi_5\) 的特徵標分解成哪些不可約特徵標之和?(提示:乘積特徵標 \(\chi_i\chi_j\) 的內積 \(\langle \chi_i\chi_j, \chi_k \rangle\) 給出重數。)
下一節:對稱群 \(S_n\) 的特徵標表有一個驚人的組合封閉解——楊圖與楊表,見 6.4-對稱群的表示:楊圖與楊表;程式化工具見 6.5。