标题其实是假的,这只是 yhx 神仙的集训队论文的一半的学习笔记而已(所以只有群论
环和域可能在 OI 里用处就不大了(毕竟两个运算还是复杂一些
群论 (group)
群:封闭,结合,单位元,逆。
实际上群有三个定义六个性质,有兴趣的可以搜一下(
交换群:群,交换。
- ( ext{mod} m) 意义下加法构成 (m) 阶循环群 (Z_m)。
- 所有 (n!) 个 (n) 元置换构成 (n) 元对称群 (S_n)。
- 所有 (lceilfrac{n!}2 ceil) 个 (n) 元偶置换构成 (n) 元交错群 (A_n)。
- 对于正 (n) 边形,翻转/旋转置换称为 (2n) 阶二面体群 (D_{2n})。
生成子群:对于群 ((G,circ)) 和 (varnothing e Ssubseteq G),包含 (S) 的所有子群的交称为 (S) 在 (G) 中生成的子群,记做 (langle S angle)。
元素的阶:对于群 (G) 和其元素 (ain G),(|langle a angle|=|a|)。
陪集:对于群 (G) 和其子群 (Hle G),和元素 (gin G),定义(左)陪集 (gH={gcirc h|hin H}),同理可以定义右陪集。
定理 2.1.1:对于子群 (Hle G),导出的陪集完全相同或交集为空。
定理 2.1.2:对于有限群 (G) 及其子群 (Hle G),有 (|G|=|H|cdot [G:H]),其中 ([G:H]) 表示 (H) 可以导出的陪集个数。
置换群:(n) 元对称群 (S_n) 的子群。
染色:(n) 元染色指对集合 ({1,2,dots,n}) 的每个元素分配一个物品的分配方案。用 (mathbf c) 表示一个染色,(mathbf c[i]) 表示该染色中 (i) 位置的物品,(mathcal C) 表示所有染色的集合。
置换作用于染色:对于置换 (fin S_n) 和染色 (mathbf cin mathcal C),定义 ((fcdotmathbf c)[i]=c[f^{-1}(i)])。
容易看出 (ecdotmathbf c=mathbf c),((fcirc g)cdot mathbf c=fcdot(gcdotmathbf c))。
广义染色:对于群 (G) 和全集 (mathcal C),定义运算 (G imes mathcal C ightarrowmathcal C),满足
- (ecdot mathbf c=mathbf c)。
- ((fcirc g)cdotmathbf c=fcdot(gcdotmathbf c))。
则称 (mathcal C) 是广义染色集合,(mathbf cinmathcal C) 是广义染色。
轨道:(Gcdotmathbf c={gcdotmathbf cmid gin G})。
稳定子群:(G_{mathbf c}={gin Gmid gcdotmathbf c=mathbf c})。
容易发现稳定子群是子群(
定理 2.2.1 (轨道-稳定子群定理):(|Gcdotmathbf c|cdot|G_{mathbf c}|=|G|)。
proves
证明:考虑 (gin G),对于左陪集 (gG_{mathbf c}) 中的元素 (f=gcirc h_0),有 (fcdotmathbf c=gcdot(h_0cdotmathbf c)=gcdotmathbf c)。因此左陪集 (gG_{mathbf c}) 作用于 (mathbf c) 产生相同的染色。
考虑 (g_1,g_2in G),(g_1cdotmathbf c=g_2cdotmathbf cRightarrow (g_1^{-1}circ g_2)cdotmathbf c=g_1^{-1}cdot(g_2cdotmathbf c)=g_1^{-1}cdot(g_1cdotmathbf c)=mathbf c)。所以 (g_1^{-1}circ g_2in G_{mathbf c}),所以 (g_2in g_1G_{mathbf c}),根据定理 2.1.1,(g_1G_{mathbf c}=g_2G_{mathbf c})。
所以 (G_{mathbf c}) 导出的每个陪集作用于 (mathbf c) 得到不同的染色,所以陪集数量就等于 (G) 作用于 (mathbf c) 得到的染色数,所以 ([G:G_mathbf c]=|Gcdotmathbf c|),根据定理 2.1.2,Q.E.D。
不动点:(X^g={mathbf cin Xmid gcdotmathbf c=mathbf c})。
等价染色:对于群 (G) 和两个染色 (mathbf c_1,mathbf c_2),定义 (mathbf c_1) 和 (mathbf c_2) 等价当且仅当 (exist gin G,gcdotmathbf c_1=mathbf c_2)。
容易发现 (mathbf c_1) 与 (mathbf c_2) 等价当且仅当 (mathbf c_2in Gcdotmathbf c_1),或 (Gcdotmathbf c_1=Gcdotmathbf c_2)。
则等价类与轨道对应,定义 (X/G) 表示轨道集合。
定理 2.2.2 (Burnside 引理):(|G||X/G|=sum_{gin G}|X^g|)。
proves
证明:考虑 (sum_{gin G}sum_{mathbf cin X}[gcdotmathbf c=mathbf c])。
枚举置换,贡献为不动点数量,即为 (sum_{gin G}|X^g|)。
枚举染色,贡献为稳定子群大小,即为 (sum_{mathbf cin X}|G_mathbf c|=|G|cdotsum_{mathbf cin X}frac 1{|Gcdotmathbf c|})。
每个轨道内的元素贡献 1/轨道大小,所以每个轨道贡献 (1),即为 (|G||X/G|)。Q.E.D.
Polya 计数
置换的循环指标:对于 (n) 元置换 (g=(a_{11}a_{12}dots a_{1L_1})dots(a_{y1}a_{y2}dots a_{yL_y})),定义它的循环指标是 (prod t_{L_i}),其中 (t_1,t_2,dots,t_n) 为形式变元。
置换群的循环指标:对于置换群 (G),定义它的循环指标为群中所有置换的指标的平均值,记做 (Z_G(mathbf t))。
定理 2.3.1 (Polya 定理) 定义 (f(t)=sum_{wge 0}f_wt^w),其中 (f_w) 表示权值为 (w) 的颜色数量。定义染色 (mathbf c) 的权值 (omega(mathbf c)=sum_{i=1}^nomega(mathbf c[i]))。定义 (F(t)) 表示在 (G) 的作用下每种权值的染色的不同轨道数的生成函数。则
定理 2.3.2 (广义 Burnside 引理)
其中每个置换 (gin G) 有权值 (omega(g)),子群的权值 (omega(G_O)=sum_{gin G_O}omega(g))。
证明:考虑 (sum_{gin G}sum_{mathbf cin X}[gcdotmathbf c=mathbf c]omega(g))。
推论 2.3.1 (Polya 容斥) 在定理 2.3.2 中取 (omega(g)= ext{sgn}(g)) 即可得到
【ZJOI2018】树
题目描述:给定正整数 (n,k) 和质数 (p)。设 (mathcal T) 是所有以 (1) 为根的 (n) 个点的带标号树构成的集合,(E_1,E_2,dots,E_{lambda}) 是同构等价类,求 (dfrac{sum_{i=1}^{lambda}|E_i|^k}{n!^k}mod p)。
数据范围:(nle 2000,kle 10^9,10^8<p<10^9)。
solution
设有根无标号树的组合类为 (mathcal T),考虑 (alphainmathcal T),设其形成的等价类个数为 (omega(alpha))。
对于两个等价类定义笛卡尔积,容易发现 (omega(t_1 imes t_2)=omega(t_1)omega(t_2)inom{|t_1|+|t_2|}{|t_1|})。
为了用生成函数描述,设 (T(mathcal A;z)=sum_{alphainmathcal A}left(frac{omega(alpha)}{|alpha|!} ight)^kz^{|alpha|}),所求即为 ([z^n]T(mathcal A;z))。
容易发现 (T(mathcal A+mathcal B)=T(mathcal A)+T(mathcal B),T(mathcal A imesmathcal B)=T(mathcal A)T(mathcal B))。
然后看回 (mathcal T),众所周知 (mathcal T^{square}= ext{MSET}(mathcal T)),其中 (mathcal T) 为 (mathcal T^{square}) 上加一个固定标号的根,也即 ([z^n]T(mathcal T)=frac 1{n^k}[z^{n-1}]T(mathcal T^{square}))。然后就可以推柿子了:
发现这里的次数有变化,所以考虑再加一维,使次数可以变动。
乘法定义为 (z) 卷积,(u) 点积。然后就可以得到:
然后差不多乱搞搞就可以 (O(n^2)) 算了?
然后看 Polya 计数的方法,也是算同样的答案:各等价类大小的 (k) 次方之和。
设 (f_n) 表示 (n) 个点时的答案,(g_{i,s}) 表示所有树大小 (le i),总和 (=s) 的森林对应的答案,则 (f_i=g_{i-1,i-1}),初值为 (g_{1,s}=1)。
转移考虑枚举当前加入了 (d) 个大小为 (i) 的树,即为
而 (I_{i,d}) 表示所有 (d) 棵大小为 (i) 的树构成的带标号有根森林的答案......
然后一个字都看不懂啊啊啊啊啊
u1s1,想起来当时做这题的时候,Euler 变换有 Polya 的推法,也有生成函数的推法,也就是解析组合(还可以更高大上地叫做组合结构符号化)
要理解群论计数还是好烧脑子,不如多练练上面那种做法(就是不知道适用范围怎么样了
群的判定和表示
不变子群:对于群 ((G,circ)) 及子群 (Hle G),若 (gin G,hin HRightarrow gcirc hcirc g^{-1}in H),则称 (H) 是 (G) 的不变子群,记做 (Hunlhd G),此时若 (H e G) 则 (H) 是 (G) 的真不变子群,记做 (Hlhd G)。
商群:对于群 ((G,circ)) 及不变子群 (N),在 (N) 的所有陪集 (G/N) 上定义运算 (cdot) 满足
则称 ((G/N,cdot)) 为 (G) 对 (N) 的商群。
可以手算验证一下,考虑 (h_1,h_2in H,a,bin G),
后面那一大坨显然 (in N),也就是说 ((aN)circ(bN)subseteq (acirc b)N)。
同态:对于群 ((G,circ),(H,cdot)),若映射 (f:G ightarrow H) 满足
则称 (f) 是 (G) 到 (H) 的同态映射,简称同态。
当 (f) 是单射/满射/双射 时,称为单同态/满同态/同构。
核:设 (f) 是 (G) 到 (H) 的同态,(e_H) 是 (H) 的单位元,则集合
称为 (f) 的核,记做 (ker f)。
显然 (ker f) 是不变子群。
定理 3.1.1 (群同态基本定理) 设 (f) 是 ((G,circ)) 到 ((H,cdot)) 的满同态,则 (G/ker f) 与 (H) 同构。
proves
证明:设 (K=ker f),定义 (phi:G/K ightarrow H),其中 (phi(gK)=f(g))。
显然 (phi) 是映射,现在考虑证明 (phi) 是同构。
- (gK,hKin G/KRightarrow phi((gcirc h)K)=f(gcirc h)=f(g)cdot f(h)=phi(gK)cdotphi(hK))。所以 (phi) 是同态。
- 若 (phi(gK)=phi(hK)),则 (f(g)=f(h)Rightarrow f(gcirc h^{-1})=f(g)cdot f(h^{-1})=f(g)cdot f(h)^{-1}=e_H),所以 (gcirc h^{-1}in KRightarrow gK=hK),所以 (phi) 是单射。
- (forall hin H,exist gin G,f(g)=h),所以 (phi(gK)=f(g)=h),所以 (phi) 是满射。
综上,(phi) 是双同态,所以 (G/K) 与 (H) 同构。
定理 3.1.2 (群同构第三定理) 设 (N) 是 (G) 的不变子群,则
- (Nle Hle GLeftrightarrow H/Nle G/N)。
- (Nle Hunlhd GLeftrightarrow H/Nunlhd G/NRightarrow frac{G/N}{H/N}cong G/H)。
群的判定
题目描述:给定 (n imes n) 的乘法表,判断它是否是群。
封闭性、单位元、逆元都很好检验,最重要的是结合律。
引理 3.2.1 给定 (n) 阶有限群 (G),存在 (Ssubseteq G) 使得 (|S|lelfloorlog_2 n floor),且 (G=langle S angle)。
proves
证:定义子群链 ({e}=G_0le G_1ledotsle G_k=G),其中 (G_i=langle{g_1,g_2,dots,g_i} angle)。
构造方法如下:设我们已经知道 (G_0,G_1,dots,G_{i-1}),现在要知道 (G_i)。若 (G_{i-1}=G) 则完成构造,否则任取 (g_iin Gackslash G_{i-1}),令 (G_i=langle G_{i-1}cup{g_i} angle),根据消去律,(|G_i|ge 2|G_{i-1}|),所以 (nge 2^k|G_0|),即 (klelfloorlog_2 n floor)。
引理 3.2.2 设 ((G,circ)) 满足封闭、单位元、逆元,(G=langle S angle),则 (G) 满足结合律 (Leftrightarrow(sin S,g,hin GRightarrow (gcirc s)circ h=gcirc(scirc h)))。
proves
证:(Rightarrow) 显然,考虑 (Leftarrow)。
设 (A={s|forall g,hin G,(gcirc s)circ h=gcirc (scirc h)}),则 (a,bin ARightarrow (gcirc(acirc b))circ h=((gcirc a)circ b)circ h=(gcirc a)circ (bcirc h)=gcirc (acirc (bcirc h))=gcirc((acirc b)circ h)Rightarrow acirc bin A),因为 (Ssubseteq A),由该结论可得 (langle S angle=Gsubseteq A),即 (G) 满足结合律。
使用这个方法就可以在 (O(n^2log n)) 的时间复杂度内判断结合律。
对于群 (G) 及其元素 (gin G),定义映射 (lambda_g(x)=gcirc x),则 (lambda_g(x)) 是双射,且 (lambda_g(lambda_h(x))=lambda_{gcirc h}(x)),(lambda_g(x)) 与 (lambda_{g^{-1}}(x)) 互为逆映射,且 (lambda_g) 是一个 (G) 上的置换,而 ({lambda_gmid gin G}) 构成了一个置换群,即 (|G|) 元对称群的子群。
定理 3.3.1 (Cayley 定理) 每个 (n) 阶有限群都同构于一个不超过 (n) 元的置换群。
UOJ154【UR #10】列队
题目描述:给定群 (G) 和正整数 (n),求 (G) 到 (n) 元对称群 (S_n) 的单同态个数(mod 998244353)。(T) 组数据。
数据范围:(Tle 10,|G|le 30,nle 1000)。
solution
对于群 (G,H),设 (G) 到 (H) 的同态数量为 ( ext{homo}(G,H)),单同态数量为 ( ext{mono}(G,H))。
考虑一个同态 (f:G ightarrow H),设 (K=ker f),则 (G/K) 与 ( ext{im} f) 之间存在同构 (phi),则将同构 (phi) 的陪域扩展到 (H) 就得到了 (G/K) 到 (H) 的单同态。由此可得,(G) 到 (H) 的每个同态都对应到 (G/N) 到 (H) 的一个单同态,其中 (N) 是 (G) 的不变子群。
现在就可以转化为计算若干个 ( ext{homo}(G,H)) 的子问题。
考虑给定群 (G) 计算到 (S_n) 的同态个数。对于置换群 (H= ext{im} f),定义 (i) 的特征染色 (chi_i) 为 (i) 位置为黑色,其他位置为白色。则 (forall iin[1,n]),(Hcdot chi_i) 中黑色出现位置的集合,构成了 ({1,2,dots,n}) 的一个划分。
考虑其中一个集合 (A),而 (|A|=k),不妨设 (1in A),则 (|Hcdotchi_1|=k),根据轨道-稳定子群定理,(H_{chi_1}=frac{|H|}{|Hcdotchi_1|}=frac{|H|}k)。根据同态的性质,(H_{chi_1}) 的原象是 (G) 的一个 (frac{|G|}k) 阶子群。感性理解一下???
然而我们要求的是 (f) 的个数,所以要用 (G) 的结构表示 (f)。
容易发现划分的各个集合之间互不影响,只需要对应好然后给划分的元素标好号即可。
考虑 (1) 所在的划分,假设是 ({2,3,dots,k}),在 (G) 中搞一个大小为 (frac{|G|}k) 的子群 (S),令它的象为 (H_{chi_1}),那么 (S) 导出的 (k) 个左陪集作用于 (chi_1) 之后将黑色分别移动到 (1,2,dots,k)。
设这 (k) 个左陪集为 (S,g_2S,dots,g_kS),不妨设 (g_iS) 将黑色移到 (i),这里的标号有 ((k-1)!) 种。
然后发现确定好 (g_i) 之后就确定好了所有置换,具体来说,(gin G,sin SRightarrow g(j)=g((g_jcirc s)(1))=(gcirc g_jcirc s)(1)=(gcirc g_j)(1))。也就是说 (g(j)) 由 (gcirc g_j) 唯一确定,与 (s) 没有关系。
现在就可以直接计数了,每个划分的集合是带标号无序组,所以是 EGF 的 exp 形式,
#include<bits/stdc++.h>
#define PB emplace_back
#define MP make_pair
#define fi first
#define se second
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const int N = 30, M = 1003, mod = 998244353;
template<typename T>
void read(T &x){
int ch = getchar(); x = 0; bool f = false;
for(;ch < '0' || ch > '9';ch = getchar());
for(;ch >= '0' && ch <= '9';ch = getchar()) x = x * 10 + ch - '0';
if(f) x = -x;
}
template<typename T>
bool chmax(T &a, const T &b){if(a < b) return a = b, 1; return 0;}
template<typename T>
bool chmin(T &a, const T &b){if(a > b) return a = b, 1; return 0;}
void qmo(int &x){x += x >> 31 & mod;}
int T, n, m, e, A[N][N], inv[N], sta[M], siz[M], fr, re, q[N], f, r, iv[M], F[M];
set<int> S; bool reg[M];
bool regu(int x){
for(int i = 0;i < m;++ i)
for(int j = 0;j < m;++ j)
if((x >> j & 1) && !(x >> A[A[i][j]][inv[i]] & 1))
return false;
return true;
} int cnt[M], d[M];
int calc(int x){
memset(cnt, 0, sizeof cnt);
memset(d, 0, sizeof d);
for(int i = 0;i < re;++ i)
if((sta[x] & sta[i]) == sta[x]) ++ cnt[m / siz[i]];
d[0] = 1;
for(int i = 1;i <= n;++ i){
for(int j = 1;j <= m && j <= i;++ j)
d[i] = (d[i] + (LL)cnt[j] * d[i-j]) % mod;
d[i] = (LL)d[i] * iv[i] % mod;
} return d[n];
}
int dfs(int x){
if(~F[x]) return F[x];
int &ans = F[x]; ans = calc(x);
for(int i = 0;i < re;++ i)
if(x != i && reg[i] && ((sta[x] & sta[i]) == sta[x]))
qmo(ans -= dfs(i));
return ans;
}
void solve(){
read(n); read(m); e = -1; S.clear(); memset(F, -1, sizeof F);
bool ff = false;
for(int i = 0;i < m;++ i){
bool flg = true;
for(int j = 0;j < m;++ j){
read(A[i][j]); -- A[i][j];
flg &= A[i][j] == j;
} if(flg && e >= 0) ff = true;
if(flg) e = i;
} if(e == -1 || ff){puts("0"); return;}
for(int i = 0;i < m;++ i){
inv[i] = -1;
for(int j = 0;j < m;++ j)
if(A[i][j] == e){inv[i] = j; break;}
if(inv[i] == -1){puts("0"); return;}
}
for(int i = 0;i < m;++ i)
for(int j = 0;j < m;++ j)
for(int k = 0;k < m;++ k)
if(A[A[i][j]][k] != A[i][A[j][k]]){puts("0"); return;}
e = 1 << e; fr = re = 0; sta[re++] = e;
while(fr < re){
int u = sta[fr++];
for(int i = 0;i < m;++ i) if(!(u >> i & 1)){
int v = u | (1<<i); f = r = 0; q[r++] = i;
while(f < r){
int x = q[f++];
for(int j = 0;j < m;++ j) if(v >> j & 1){
if(!(v >> A[x][j] & 1)){v |= 1 << A[x][j]; q[r++] = A[x][j];}
if(!(v >> A[j][x] & 1)){v |= 1 << A[j][x]; q[r++] = A[j][x];}
}
} if(!S.count(v)){S.insert(v); sta[re++] = v;}
}
} sort(sta, sta + re); for(int i = 0;i < re;++ i){reg[i] = regu(sta[i]); siz[i] = __builtin_popcount(sta[i]);}
int ans = dfs(lower_bound(sta, sta + re, e) - sta);
for(int i = 1;i <= n;++ i) ans = (LL)ans * i % mod; printf("%d
", ans);
}
int main(){
iv[1] = 1; for(int i = 2;i < M;++ i) iv[i] = mod - (LL)mod / i * iv[mod % i] % mod;
read(T); while(T --) solve();
}
关于 (n) 阶群的子群个数有一个上界 (O(n^{log n}log n))然而看上去就超松的样子,分析方法大概就是上面的引理 3.2.1,枚举生成子群的集合。
(|G| le 30) 时 (G) 的子群个数的最大值是 (67),当 (G=_2^4) 时取到。
于是你想知道 (_2^m) 的子群个数不你不想,结果 oeis 出来好东西(
高斯二项式系数
q-number :
q-factorial :
q-binom :
容易发现 (q=1) 时这就是通常的二项式系数。
根据递推公式得到 (qinRightarrowinom nm_qin)。
性质 1 : 在所有桶为 ({c}_{i=1}^m) 的正整数序列 ({a}_{i=1}^n) 中((n=sum_{i=1}^m c_i)),已知逆序对个数所对应的方案数的生成函数是
证明:想了好久组合意义,结果发现写出递推公式就完事了???
可以用这个来出模板题(我谔谔
性质 2 : 当 (q) 为质数时,(_q^n) 的大小为 (q^m) 的(不变)子群个数,或 (mathbb F_q^n) 的 (m) 维子空间个数为 (inom nm_q)。
证明:想了好久组合意义,结果发现写出递推公式就完事了???
有 dalao 知道组合意义么...(我自闭
性质 3 (行的生成函数)
证明:不想组合意义,归纳就完事了!!!
性质 4
证明:上面那条柿子代入 (z=-1) 即可。
性质 5 (高斯二项式反演)
证明:
可是这东西有个jb用啊...
计算群论
题目描述:给定 (n) 阶置换群 (S_n) 的 (m) 个元素,求这 (m) 个元素生成的子群阶数。
数据范围:(n,mle 50)。
计算群论研究形如 (langle S angle) 构成的“群论结构”,Schreier-Sims 算法是其中最基础的算法。
考虑构造子群链 (langle S angle=G_0ge G_1gedotsge G_k={e}),则 (|G|=prod_{i=0}^{k-1}frac{|G_i|}{|G_{i+1}|}=prod_{i=0}^{k-1}[G_i:G_{i+1}])。
考虑增量构造法,逐渐向 (S) 中添加元素,对子群链中的每个子群进行维护。
初始时 (S=varnothing,G={e}),要向 (S) 中添加新元素 (g),需要判断 (g) 是否已经在 (langle S angle) 中。
定义 4.1 (截面) 对于群 (G) 及其子群 (Hle G),设 (H) 导出的左陪集集合为 (C_1,C_2,dots,C_k),其中 (k=[G:H]),则包含单位元的集合 (R={r_1,r_2,dots,r_k}),其中 (r_iin C_i),称作 (H) 的一个左截面。同理可以定义右截面。
考虑 (H=G_{chi_1}) 的一个右截面 (R={e=r_1,r_2,dots,r_k}),满足
- (forall i e j,Hr_i e Hr_j),也就是 (r_icirc r_j^{-1} otin H)。
- 考虑陪集 (Hr_i),任取其中元素 (h_0circ r_i),有 ((h_0circ r_i)^{-1}(1)=(r_i^{-1}circ h_0^{-1})(1)=r^{-1}_i(h_0^{-1}(1))=r^{-1}(1))。
- (forall gin G),根据 (g^{-1}(1)) 可以唯一确定其所在的陪集 (Hr_i),也就是 (r_i=Hgcap R),称其为 (g) 的标准置换 ( ext{norm} g)。
然后考虑元素判定,此时若 (ginlangle S angle),则存在 (r_i) 使得 ((r_icirc g)(1)=1Rightarrow r_icirc gin HRightarrow r_iin Hg^{-1}),也就是求 ( ext{norm}(g^{-1}))
关于如何求 ( ext{norm}(g)),则可以先求出 (g^{-1}(1)),找到 (1) 的原象与其相同的 (r_i) 即可。
然后就有 (gin GLeftrightarrow r_icirc gin G_{chi_1}),递归下去即可。
然后继续考虑增量构造,改变了 (S) 之后考虑截面 (R) 发生的变化。
(R) 中每个元素记录 (1) 不同的原象,只需要考虑 (1) 多了哪些原象即可。
设原先 (1) 的原象集合为 (A_1),新增置换 (g) 后,考虑置换 (r_icirc g)。也就是 (forall pin A_1),设 (r_i(p)=1),则 ((r_icirc g)^{-1}(1)=(g^{-1}circ r_i^{-1})(1)=g_i^{-1}(r_i^{-1}(1))=g_i^{-1}(p)),也就是 (g_i^{-1}(p)) 也是 (1) 的原象,枚举 (A_1) 中元素搜索即可。
然后继续考虑增量构造,改变了 (R) 之后对稳定子群 (G_{chi_1}) 生成集 (S') 的影响。
引理 4.1 (Schreier) 设群 (H) 是 (G=langle S angle) 的子群,(R) 是 (H) 的右截面,
则 (H=langle S' angle)。
证明:显然 (forall gin G,gcirc( ext{norm}(g))^{-1}in H),所以 (langle S' anglesubseteq H)。考虑证明 (Hsubseteqlangle S' angle)。
因为 (ein R),所以 (forall hin H),(h) 可以表示为 (rcirc s_1circcdotscirc s_k),其中 (rin R,s_iin S)。
考虑归纳证明上述表示的元素 (inlangle S' angle),当 (k=0) 时 (h=rin Hcap R={e}),所以 (hinlangle S' angle)。
假设 (k-1) 时此结论成立,考虑 (k) 时,有
根据归纳假设,( ext{norm}(rcirc s_1)in R,s_iin SRightarrow ext{norm}(rcirc s_1)circ s_2cdots s_kinlangle S' angle),又因为 ((rcirc s_1)circ( ext{norm}(rcirc s_1))^{-1}inlangle S' angle),所以 (hinlangle S' angle),成立,Q.E.D.