群÷群は群になるか?
1.同値類
このワークシートはMath by Codeの一部です。
<分割>
たとえば、整数Zの集合は3の倍数3Zで類別すると、
Z/3Z={0,1,2}
と3で割った余りによって分割することができた。
これを言い換えてみよう。
集合Zは3で割った余りが等しい[≡(mod3)]という関係で類別できる。
反射:a≡a(mod3)
対称:a≡b(mod3)ならb≡a(mod3)
推移:a≡b(mod3),b≡c(mod3),a≡c(mod3)
この3つの性質があるので、≡(mod3)という関係は同値関係だね。
この関係を簡単に~とかくことにする。
Z/~={[0],[1],[2]}
[0]={0,±3, ±6, ±9 ,......}, [1]={......,-8,-5,-2, 1, 4, 7, ......}, [2]={.....,-7,-4,-1, 2, 5, 8, ......}
これは集合の中に集合が入っていることになりますから、
集合を分割しているということです。この類別された集まりを同値類(equivalence clas)という。
今のは無限集合でした。
有限集合でやっても同じです。
Z6={0,1,2,3,4,5}
H={0,3}
Z6/~={{0,3}, {1,4},{{2,5}}です。
個数に着目しましょう。
|Z6|=6
|H|=2
|Z6/~|=3=6/2
まるで、全体を3の倍数の集合で割ったような個数関係になりますね。
だから、分割したあとの集合を剰余類(コセットcoset)という。
3つの剰余類のサイズは#(H=[0])=#[1]=#[2]=2で一定になる。
剰余類3個をパックにした、剰余類の集合を商集合(quotient set)、商空間(quotient space)と呼び、
Z6/Hとかくこともあります。
「~」が3で割り算したときの余りが等しいという関係でした。
ところがあみだくじに通常の割り算はありません。
そこで、あえてつながりをつける書き方をさぐりましょう。
G={0,1,2,3,4,5}
r+3Z={x| x= r +3n , n∈Z}とかくことにすると、
H=[0]=0+3Z, [1]=1+3Z,[2]=2+3Zとかけますね。
G/H=G/~={[0],[1],[2]}={a+H| a∈G }
これだと、要素の関係を集合の関係としてまとめて表現しただけという感じですね。
そこで、演算と同値をつなげるルールを決めましょう
<左剰余類>
HがGの部分群で、Gの要素x,yについて同値関係x~yはx*H=y*Hとし、gの同値類[g]はg*Hとする。
x*Hは各z∈Hに対してx+zを3で割った余りの集合としよう。
H={0,3}に対して、
1+H=4+Hだから、1~4。
2+H=5+Hだから、2~5。
G/H=G/~={{0],[1],[2]}={a+H|a∈G}
あみだくじについても部分群Hで全体G=S3を割りきれるかどうかをやってみよう。
H={e, b}
e*H={e*e, e*b}={e, b}=H
b*H={b*e,b*b}= {b, e}=H
s*H={s*e, s*b}={s, (1 2 3)(1 2)}={s, c}
c*H={c*e, c*b}={c, (1 3)(1 2)}={c,s}
r*H={r*e,r*b}={r, (1 3 2)(1 2)}={r, a}
a*H={a*e, a*b}={a, (2 3)(1 2)}={a, r}
これから、e~b, s~c, r~aが言える。
ということは、あみだは上下を入れ替えると同じものにならないので、可換ではないが、
同値類の考え方を使うと
たとえばs*H=c*H, r*H=a*Hということは、交換法則の代わりに、要素入れ替えができることになるね。
これは左側同値類と呼ばれている。
これが、右側についても言えるとしたらどうだろう。
<右剰余類>
HがGの部分群で、Gの要素x,yについて同値関係x~yはH*x=H*yとし、gの同値類[g]はH*gとする。
H*xは各z∈Hに対してx+zを3で割った余りの集合としよう。
H={0,3}に対して、
H+1=H+4だから、1~4。
H+1=H+5だから、2~5。
G\H=G\~={{0],[1],[2]}
あみだくじについても部分群Hで全体G=S3を割りきれるかどうかをやってみよう。
H={e, b}
H*e={e*e, b*e}={e, b}=H
H*b={b*e,b*b}= {b, e}=H
H*s={e*s, b*s}={s, (1 2)(1 2 3)}={s, a}
H*a={e*a, b*a}={a, (1 2)(2 3)}={a, s}
H*r={e*r, b*r}={r, (1 2)(1 3 2)}={r, c}
H*c={e*c, b*c}={a, (1 2)(1 3)}={c, r}
これから、e~b, s~a, r~cが言える。
2.左剰余と右剰余の一致するH
上では左剰余類と右剰余類という2種類の分割をやってみた。
商集合のサイズは同じサイズ2のHで割ったから3クラスで共通だけど、
まあ、適当にHをH={e, b}としたことが原因で、
左剰余類と右剰余類が別々になってしまった!
残念。
次はこれが一致できるといいね。
そこで気を取り直して実験を続けよう。
Hは部分群だったことがPOINTだ。
そもそもGの部分群を振り返ると、
3次の置換群の部分群
・自明な部分群 G={e,r,s,a,b,c}、E={e}
・自明でない部分群 巡回群{e, a}, {e, b},{e, c},{e, r, s}
同値類の分割はまさに、部分群による割り算と同じで、個数の関係が割り算になっていた。
ラグランジュの定理(|G/H|=|G|/|H|)を知らなくても、同値類の作り方からわかるでしょう。
すると、6/6のG/G, 6/1のG/Eをしても分割にならないので、
残る可能性はG/{e,r,s}だね。
{e,a},{e,b},{e,c}はあみだくじの上では対等でないけど、置換群として
互換と隣接互換を区別しなければ対等になるからね。
<部分群H={e,r,s}で左右の同値類を作ろう>
H={e,r,s}は巡回群で閉じているので、H2=Hとなる。
だから、x∈Hのx*H=H, H*x=Hはあきらかなので、x*H=H*x=Hは成り立つ。つまり、
e*H=H*e
r*H=H*r
s*H=H*s
T={a,b,c}として、
y∈Tのとき、
a*H=a*{e,r,s}={a*e, a*r, a*s}
={a,(2 3)(1 3 2), (2 3)(1 2 3)}={a,b,c}=T
b*H=b*{e,r,s}={b*e, b*r, b*s}
={b ,(1 2)(1 3 2), (1 2)(1 2 3)}={b, c, a}=T
c*H=c*{e,r,s}={c*e, c*r, c*s}
={c,(1 3)( 1 3 2), (1 3)(1 2 3)}={c,a,b}=T
どれもTに属する要素になった。
H*a={e,r,s}*a={e*a, r*a, s*a}
={a,(1 3 2)(2 3),(1 2 3)(2 3)}={a,c,b}=T
H*b={e,r,s}*b={ e*b, r*b, s*b}
={b, (1 3 2)(1 2), (1 2 3)(1 2)}={b,a,c}=T
H*c={e,r,s}*c={e*c, r*c, s*c}
={c,( 1 3 2)(1 3), (1 2 3)(1 3)}={c,b, a}=T
y∈{a,b,c}のとき、
y*H=H*y=Tとなるね。
a*H=H*a
b*H=H*b
c*H=H*c
a*r=b, r*a=cだから、a*r ≠ r*aで交換法則は成り立たない。
でも、r∈Hなので、rに限定せずにrの仲間Hの要素e,r,sに取り替えてよいとすると、
a*r = s*a= b
a*H = H*aが成り立つ。
つまり、特別な部分群をうまく選ぶと、
要素ではなく特別部分群に対しては、
交換法則が成り立つ。
この特別部分群が正規部分群(Normal subgroup)だ。
すばらしい!
※しかし、要素単位の交換法則ではないために、a*H=H*aという書き方をせざるをえない。

3.剰余類を要素とする群(剰余群)
つまり、正規部分群を使い、群を剰余類にわけることで、
要素間の交換法則が成り立たなくても、剰余類というグループ単位での交換ができるようになる。
そこで、剰余類という集合を要素として群の可能性を確認しよう。
群Gを正規部分群H={e,r,s}で,HとT={a,b,c}の2つの剰余類に分割した。
類Hをe*Hと、類Tをa*Hと、代表元を使って表せる。
この2つをあわせた商集合G/Hに演算*を考える。
くわしくかくと、
群Gの要素x,yについて、(x*H)*(y*H)=(x*y)*H ときめると、演算*について、(G/H, *)は群になるはず。
(x*H)*(y*H)=(x*y)*HはHかTになるから閉じている。
(e*H)*(y*H)=(e*y)*H=(y*H)だから、e*Hつまり、Hが単位元Eになる。
(x*H)*(y*H)=E となるようなxにたいする、y=x'(要素の逆元)はGが群だから存在する。
だから、剰余類どうしの演算を代表元を使っても群となることがわかるね。
これを剰余群(remainder group)とか商群(quotient group)という。
群(G,*)と正規部分群N◁Gから
新しい剰余群(G/N, *)が作れたということだ。
つまり、正規部分群Nで群Gを割ると、
Gが正規部分群というかたまり、その他の類のかたまりに均等にわかれる。
正規部分群のかたまりが、単位元の働きをして、他のかたまりが単位元以外の働きをする。
そのように、Gのかたまりにして色分けできる。
つまり、マクロ的イメージで語ると、正規部分群はかたまりとして単位元的に働くものだと。
また、数学的用語で語ると、正規部分群は上記のように左側同値類と右側同値類が一致し、類どうしの演算が代表元の選び方に依存しないwell-definedなものにするものだと。
質問:群Gを3本あみだ(巡回群)の部分群N={e,s=(1,2,3),r=(1,3,2)]で剰余群(G/N,★)が作られることをコードで確かめるにはどうしたらよいでしょうか。
偶置換の要素の部分群E=[e,s,r]とし、残りの要素をa=(2,3),b=(1,2),c=(1,3)、T=[a,b,c]としよう。
類E,Tを剰余類とする。
同値類の演算をaH関数とHa関数の比較でする。
aE=Ea, bE=Eb,cE=Ec
aT=Ta,bT=Tb,cT=Tc
eE=Ee,rE=Er,sE=Es
となることを演算の結果リストで確認しよう。
[IN]Python
#============================================================
#質問:G/E同値類が群をなすことを確認する。
def ami2dic(ami):
return dict(zip(ami , ami[1:] + [ami[0]]))
def amis2dics(amis):
return [dict(zip(ami , ami[1:] + [ami[0]])) for ami in amis]
# kの辞書dic_aによる行先を返す。辞書にないなら行先はk。
def ami_go(k,dic_a):
return dic_a[k] if k in dic_a.keys() else k
#あみだの辞書a,bの連結をする。
def conL(a,b):#a,bの順に演算する。
keys = list(set(list(a.keys()) + list(b.keys())))
dic ={key:ami_go(ami_go(key,a),b) for key in keys if key !=ami_go(ami_go(key,a),b)}
if len(dic)==0:
dic={1:1}
return dic
def conR(a,b):#b,aの順に演算する。
return conL(b,a)
#アミダを、(辞書,名)のタプルのリストにする。
def rotdic(S,SN):
dic=[ami2dic(x) for x in S]
return list(zip(dic,SN))
# あみだ辞書dic_aを名で返す。
def name(dic_a):
global Nlist
return [item[1] for item in Nlist if item[0]==dic_a][0]
# あみだ辞書集dicsを名のリストで返す。
def names(dics):
global Nlist
return [item[1] for item in Nlist for b in dics if item[0]==b]
# あみだ辞書の集合Hと辞書aを演算した結果リストを返す。
def Ha(H,a):
global Nlist
res=[]
for b in H:
res +=[item[1] for item in Nlist if item[0]==conR(b,a)]
return res
def aH(a,H):
global Nlist
res=[]
for b in H:
res +=[item[1] for item in Nlist if item[0]==conR(a,b)]
return res
#==================================以上が基本関数====================
#辞書リストS,名リストSNから(辞書、名)のタプルのリストにする。
def Ndic(S,SN):
return list(zip(S,SN))
e={1:1}
s=ami2dic([1,2,3])
r=ami2dic([1,3,2])
b=ami2dic([1,2])
c=ami2dic([1,3])
a=ami2dic([2,3])
S=[e,r,s,a,b,c]
E=[e,r,s]
T=[a,b,c]
SN=["e","r","s","a","b","c"]
Nlist=Ndic(S,SN)
print(f"E={names(E)}")
print(f"T={names(T)}")
print("TE=ET=T")
for t in T:
elem=name(t)
print(f"{elem}E={aH(t,E)}, E{elem}={Ha(E,t)}")
print("TT=TT=E")
for t in T:
elem=name(t)
print(f"{elem}T={aH(t,T)}, T{elem}={Ha(T,t)}")
print("EE=E")
for t in E:
elem=name(t)
print(f"{elem}E={aH(t,E)}, E{elem}={Ha(E,t)}")
#=====================================================
[OUT]
E=['e', 'r', 's']
T=['a', 'b', 'c']
TE=ET=T
aE=['a', 'b', 'c'], Ea=['a', 'c', 'b']
bE=['b', 'c', 'a'], Eb=['b', 'a', 'c']
cE=['c', 'a', 'b'], Ec=['c', 'b', 'a']
TT=TT=E
aT=['e', 'r', 's'], Ta=['e', 's', 'r']
bT=['s', 'e', 'r'], Tb=['r', 'e', 's']
cT=['r', 's', 'e'], Tc=['s', 'r', 'e']
EE=E
eE=['e', 'r', 's'], Ee=['e', 'r', 's']
rE=['r', 's', 'e'], Er=['r', 's', 'e']
sE=['s', 'e', 'r'], Es=['s', 'e', 'r']
要素単位での演算では動きがあるが、同値類E,Tでの演算としてとらえると、
位数2の群になっている。これが剰余群だね。
質問:部分群のうち、{e,r,s}が正規部分群になるイメージを位数の関係性で視覚化するにはどうしたらよいですか。
描画用のパッケージgraphvizと順列組み合わせパッケージitertoolsをimportしよう。
そして、ハッセズを描く関数を作って、そこに
部分群を投げて、その関係性を2つの部分群の位数の商を求め
それが素数になるものだけを矢印で表示するようにしてみよう。
[IN]Python
#====================================================
import graphviz
from itertools import permutations
def hasseG(items):
G = graphviz.Digraph()
for k, v in items.items():
G.node(name = k, label =v )
nodes = items.keys()
#Pはitemsの位数以下の素数
M = list(range(2,len(items)))
divCount = lambda n:len(list(filter(lambda m:n % m==0, list(range(1,n+1)))))
P = [x for x in M if divCount(x)==2]
for pm in permutations(nodes,2):
x,y = pm
div = len(x)//len(y)
if len(x) % len(y) ==0 and (div in P):
G.edge(x,y,str(div))
return G
items={
"1":"{e}","1a":"{e,a}","1b":"{e,b}","1c":"{e,c}","1rs":"{e,r,s}", "1abcrs":"{e,a,b,c,r,s}"
}
G = hasseG(items)
G
#=============================================================
3本あみだの部分群どうしの関係性
