群の入れ子
1.群の中にも群がある?
このワークシートはMath by Codeの一部です。
3本あみだくじは1,2,3の3個の要素の番号の入れ替え(置換)です。
あみだくじの集合は、置換の集まりで連結という2項演算について群の性質をもっています。
このようなn個すべての置換の集合の群を対称群Symmetryといい、
Snとかき、要素はn!個です。
<群になる部分をさぐってみよう>
3本あみだくじ群はS3で、要素は6個です。
部分集合は要素とはちがいますから、部分集合は6個ではないです。
S3={e, r, s , a, b, c}
#S3=6, |S3|=6, n(S3)=6。
部分集合は要素を集めて作った集合です。
6個の要素を入れる入れないの問に対してY/Nの回答をすると
2×2×2×2×2×2=26=64通りの回答ができるでしょう。
だから、全部Yにした全体と同じ集合と全部Nにした空の集合も入ってます。
視点を変えると部分集合の要素数ごとにカウントすると、組み合わせの数で求められますね。
6C0=1
6C1=6
6C2=15
6C3=20
6C4=15
6C5=6
6C0=1
よく考えてみると、部分集合が64個あるからといって、
それらが群になれる保証はない。
というか、ほとんど群にはなれないでしょう。
S3={e, r, s , a, b, c}
でeが入るものに限定して探そう。
eがないものは不要だから、
64/2=32個の部分集合が候補になる。
また、全体集合{e, r, s , a, b, c}
が群なのは当たり前だし、
恒等置換だけの集合{e}でもeの逆元がeだから、e単独でも、群と言える。
こういうつまらない当たり前の部分集合は取り除く。
すると、32-2=30個が候補になる。
<試行錯誤で群になる部分集合、つまり、部分群をさぐろう>
では、範囲をせばめながら群を手探りでさがしてみよう。
でも、30個といっても多すぎる。
たとえば、巡回置換のs=(1 2 3)があれば、s3=eだから、s2=s-1=rとなり、sとrをバラバラにできない。
そう考えると、r, s があるものつまり、e,r,sの3個以上もつかeだけでr,sは持たないかのどちらかになる。
つまり、e,r,sの3要素に関しては
{e}か{e, r, s}かの2択になるということだね。
これに{a,b,c}をまぜなくても群ができることは明らかだね。
当たり前でない群は、今のところ{e,r,s}だけだ。
・次は{e}と{a,b,c}をからめるものを考えよう。
もちろんa*a=e, b*b=e, c*c=eだから、自分自身が逆元になれる。
{e, a},{e, b},{e, c}という3つの部分群ができるね。
a*b=(2 3)(1 2)=(1 3 2)
b*a=(1 2)(2 3)=(1 2 3)
a*c=(2 3)(1 3)=(1 2 3)
c*a=(1 3)(2 3)=(1 3 2)
b*c=(1 2)(1 3)=(1 3 2)
c*b=(1 3)(1 2)=(1 2 3)
だから、a,b,cの2つが入ってしまうと、r,sのどちらかになるため、r,sをセットにして入れることになる。
なので、{e}と{a,b,c}をからめると、a,b,cのどれか1つだけを入れる以外にない。
・最後に、{e, r, s}に対して、{a, b, c}にからめる場合を考える。
2つの互換b=(1 2)と巡回置換s=(1 2 3)の積で全体の6要素を表せることは、前回の演習で確認した。
s3=e, b2=eだから、eができる。
言い換えると、s-1=s2, b-1=b
s-1=(1 3 2)
b s-1=(1 2)(1 3 2)=(1 3)
s b s-1=(1 2 3)(1 3)=(2 3)
これで、3つの互換と2つ巡回置換と恒等置換eが表現できた。
ぜんぶで6個の置換を表すことがでできた。
ということは、
{e,r,s}に{b}をまぜただけで、全体と同じになる。
だから、これ以上自明でない部分群はできないことになるね。
<3次の対称群S3の部分群のまとめ>
もともと、対称群は置換群ですから、その部分群は置換の群、置換群です。
・自明な部分群
全体群{e,r,s,a,b,c}
恒等群{e}
・自明でない部分群
巡回群でもある置換群{e, a}, {e, b},{e, c},{e, r, s}

2.群のタイプ
<巡回群>
たとえば、
巡回群{e,a}の場合、aが元になり、a, a2,a3,a4,a5,....とa倍を繰り返すと、群の全要素a,eを生成できる。
巡回群{e,r,s}の場合、sが元になり、s, s2,s3,s4,s5,....とs倍を繰り返すと、群の全要素s,r,eを生成できる。
群の要素数が2、3だと、巡回群しかないかもしれません。
そもそも3次の置換群は集合としては3要素の番号の順列としての6要素をもっていました。
だから、群の要素数は6です。
群の要素数が増えると、さまざまなパターンの群が登場するようです。
さきの巡回群の要素数は2と3で素数でした。
これが3次の置換群の要素数6のように、合成数になると、
さまざまな関係性が生まれそうです。
群の中に群が入っているということは、群と群の関係を
試行錯誤ではなく、もっと互いの構造や機能のつながりからさぐる必要がありそうだね。
++記号の演習
<数学の抽象化は概念化と切り離せない>
数学の抽象化は概念化、
つまり「用語と記号」の「約束」の世界だ。
群の「約束記号と用語」になれるために、群の性質を記号・用語で確認する演習をしたい人はどうぞ。
「群表」群の要素どうしの演算結果を九九表のように行列表にしたもの
群表から群の特徴をさぐろう
(位数1の群)
単位元eだけの集合にe*e=eという演算が定義されている。
表を作るまでもない。
(位数2の群)
G={e,a}
e*e=e, e*a=aは確定。
a*a=aかa*a=eのどっちかな?
a*a=aなら、aは単位元になってしまうから。a*a=eとなる。だから、Gは位数2の巡回群しかないね。
(位数3の群)
G={e,a,b}
e*e=e, e*a=a,e*b=bは確定。
a*a=eか、a*a=bのどっちかな?
a*(e,a,b)=a,e,bとなり、aが単位元になるからだめ。a*(e,a,b)=a,b,e。
だから,aが生成元とすると、b=a*a, bが生成元とするとa=b*bとなり、Gは位数3の巡回群しかないね。
(位数4の群)
G={e,a,b,c}
e*e=e,e*a=a,e*b=b,e*c=cは確定。
逆元がa*a=b*b=c*c=eと自己逆元にするか、a*a=b,b*b=e,c*c=bとするかで別のしくみになる。
どの元も自己逆元だから位数が2となり、巡回群にはならないね。これが何者かは後で考えよう。
自己逆元にならないaを使うと、a*a=bだから、a4=b*b=eで、aが生成元になる巡回群になるね。
この例だけではわかりませんが、
位数が素数だと巡回群になりそう。
位数が合成数だと、群の位数だけかけなくても単位元になるときの自由度が増えるので、
巡回群以外の群が生まれそうだね。
質問:巡回群の群表を作るにはどうしたらよいでしょうか。
基本になる関数をそのまま使います。
巡回群の要素を辞書で作りまますが、辞書リストをSとし、
辞書の名前をSN=["g0","g1",....,"g5"]となします。
辞書と名前をセットにする関数Ndicを新しく作り、その戻り値をNlistにしておけば、
maketableを実行するだけで作れるね。
#[IN]Python
#=========================================================
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))
def pow(G,n):
return polymultiR([ G for x in range(1,n+1)]) if n>0 else {1:1}
#群表を作る
def maketable():
global Nlist
G = [x[0] for x in Nlist]
print("* ",names(G))
for item in G:
print(name(item),aH(item,G))
return True
#=================================以上が今回の前準備==================
g=[1,2,3,4,5,6]
S=[pow(ami2dic(g),index) for index in range(6)]
SN=["g" + str(x) for x in range(6)]
Nlist=Ndic(S,SN)
maketable()
#==================================================================
[OUT]
* ['g0', 'g1', 'g2', 'g3', 'g4', 'g5']
g0 ['g0', 'g1', 'g2', 'g3', 'g4', 'g5']
g1 ['g1', 'g2', 'g3', 'g4', 'g5', 'g0']
g2 ['g2', 'g3', 'g4', 'g5', 'g0', 'g1']
g3 ['g3', 'g4', 'g5', 'g0', 'g1', 'g2']
g4 ['g4', 'g5', 'g0', 'g1', 'g2', 'g3']
g5 ['g5', 'g0', 'g1', 'g2', 'g3', 'g4']