あみだくじたちは「群」になれるのか?

あみだくじを作ろう!
あみだくじをつないでも、あみだくじ。
123はどう動く?
[b]このワークシートは[url=https://www.geogebra.org/m/twxxx3yq]Math by Code[/url]の一部です。[br][/b][br][br][b][size=150]<たて線3本アミダ>[br][/size][/b][color=#0000ff][b]「群」group[/b][/color]というのは、ただの群れとか集まりというものではなく、ルールに適合する群れだ。[br]2項演算(2つのoperandに対する演算operator)を集まりに対して定めたとき、[br]・2項演算がそのグループの要素にとどまる。はみ出さない調和のとれた動き。閉じている。[b]closure[/b][br]・結合法則が成り立つ。abc=a(bc)=(ab)c。みんな仲良くくっつける。[b]associative[br][/b]・1つの単位元・零元(何もしない元[b]identity[/b])がある。停止も運動の1種。[br]・どの要素にも逆元・反元(演算をもどす元)がペアで存在する[b]inversible[/b]。逆の動きも仲間だ。[br]これらがOKならば、何でも「群」と言える。[br][br]アミダは群になるだどうか?[br]まず、たて線が3本で調べてみよう。
1.3本アミダ
あみだくじのように線をひいて、位置を変えることを[b]置換[/b]という。[br]番号を入れ替える操作をしているとも言えるね。[br]タテ線に乗っかって下にきた場所に上の番号がかいてある。[br]だから、下の番号だけ書き出すと、123,231,312,132,213,321となり[br]123の3つの番号の順列数3!=6通りの入れ替えがすべてできていることがわかるね。[br][b][size=150][br]<1段目の3つの置換>[br][/size][/b](1段目の左図)[br]この置換はヨコ線が0本だから、何もしない。だから、これが単位元、0元だね。何もしないのも置換。[br]あみだくじでヨコ線を1本ひくと、隣接要素の交換を表す。2要素の交換のことを[b]互換[/b]という。[br]1段目の3本アミダはヨコ線が0か2本なので互換数が偶数。偶数の互換なので[b]偶置換[/b]とよぼう。[br]2段目の3つはヨコ線が1か3本なので[b]奇置換[/b]とよぼう。[br]1と2をつなぐヨコ線は互換を引き起こす。これを、(12)とかこう。[br]2と3をつなぐヨコ線は(23)とかこう。3と1をつなぐヨコ線は(31)とかこう。[br][b][size=150][color=#0000ff]合成関数g*f(x)がxに対してfが先で、gを次にすることを表した。[br][/color][/size][/b](1段目の中図)[br]このアミダは、上に(12)、下に(23)なので、この合成は右先左後の表記で、(23)*(12)となる。[br]1→2の終点2が、2→3の始点2とつながり、1→2→3の移動がおきて1→3となる。[br]左から1番は左から3番の位置にたどりつき、2→1、3→2の行き先変更は合成されない。[br] [math]\left(\begin{matrix}1,2,3\\\downarrow,\downarrow,\downarrow\\3,1,2\end{matrix}\right)[/math] とかくと、番号の動きが見やすいね。途中の↓を省略してよい。 [math]\left(\begin{matrix}1,2,3\\3,1,2\end{matrix}\right)[/math] [br](1段目の右図)[br]このアミダは、上に(23)、下に(12)、なので、この合成操作の表記は(12)*(23)となる。[br]3→2の終点2が、2→1の始点2とつながり、3→2→1の移動がおきて3→1となる。[br]1→2、2→3の行き先変更は合成されない。[br] [math]\left(\begin{matrix}1,2,3\\\downarrow,\downarrow,\downarrow\\2,3,1\end{matrix}\right)[/math] だから、 [math]\left(\begin{matrix}1,2,3\\2,3,1\end{matrix}\right)[/math]
2.あみだくじは互換か巡回置換であらわせる
1段目の右図の置換[br]これは、おもしろいね。[br]1→2, 2→3, 3→1の順繰りにサイクリックに1つずつずらしているように見える。[br]だから、これを1サイクルを順に(1,2,3)とかき、[b][color=#0000ff]巡回置換[cyclic permutation][br][/color][/b]という名前がついている。直訳しただけの日本語ですなあ。[br]まあ、[color=#0000ff][b]順ぐり置き換え、くるっと回す[/b][/color]でもいいのだけれど、世間の常識の言葉を使っておこう。[br][br]1段目の中図は、さっき見た巡回置換に直せないだろうか?[br]1→3, 3→2, 2→1 と数字の大小はきれいではないが巡回しているね。(1,3,2)とかけるね。[br][br][b][size=150]<2段目の左、中、右の図>[/size][/b][br]では2段目を左からみよう。[br]1個目は(23)の互換だ。[br]2個目は(12)の互換だ。[br]3個目はヨコ線は上から順に(12)、(23)、(12)だ。合成互換の書き方では(12)*(23)*(12)。[br]1は(12)で1→2となり、次の(23)で2→3となるから、2でつなぐと、1→3。[br]2は(12)で2→1となり、最後の(12)で1→2となるから、1をつなぐと、2→2でもとにもどる。[br]3は(23)で3→2となり、最後の(12)で2→1となるから、2をつなぐと、3→1。[br]だから、2は変わらず、互換(13)と同じになるね。[br]
3.アミダをつなぐ
[b][size=150]<たてにつなぐのが演算>[br]アミダを区別しやすくするために、名前をつけよう。[/size][/b][br]1段目は偶置換で、左からe =( ), r=(1,3,2), s= (1,2,3) 。[br]2段目は奇置換で、左からa=(23),b=(12),c=(13)。[br][br]ではこの6要素を九九の表のようにたてとよこにならべよう。[br]6つ要素どうしの演算結果をかいて表をうめることをイメージしてみよう。[br][br]よこに、x={e, r, s, a, b, c}と並べたとき、たてに、y={e, r, s, a, b, c}と並べてうめてみる。[br]1行目は e*x=x={e, r, s, a, b, c}とそのまま並べるだけ。[br]2行目はr*x = {r*e, r*r, r*a, r*b,r*c}となるね。[br][br]たとえば、r*aはa=(23)の下にr=(1,3,2)をつなぐことになるね。
一番下の番号が321の順になったので、あみだくじでは2段目の最後、つまりcと同じになる。[br]aで2→3、rで3→2となるから、3をつなぐと2→2となるなどして、(13)になることがわかるね。[br]だから、r*a=cだ。[br]群の九九表のようなものを群表を呼んだりするけど、群表をかかなくても、[br][b][color=#0000ff]2つのあみだくじをたてにつなげば、1,2,3の番号が入れ替わるだけなので、その演算結果は[br]6つの要素のどれかと同じになるしかない[/color][/b]。[br]つまり、閉じていることと結合法則は明白なので、これは調べなくても大丈夫だね。[br][br]・単位元、つまり、なにもしない置換、ヨコ線のないのが、[color=#0000ff][b]eであり、1つしかない[/b][/color]からOK.[br]・では逆元をしらべよう。[br]同じ互換を繰り返すともとに戻るから a*a=e, b*b=e, c*c=eとなるね。[br]3要素の巡回置換は3回くりかえすともとにもどるから、r*r*r=e, s*s*s=eだ。[br]rを2回するとsになり、r*r=s。同じようにして、s*s=r。[br]xの逆元(反元)をx[sup]-1[/sup]とかくと、[b][size=150][color=#0000ff]a[sup]-1[/sup]=a, b[sup]-1[/sup]=b, c[sup]-1[/sup]=c, r[sup]-1[/sup]=s, s[sup]-1[/sup]=r, [/color][/size][/b]e[sup]-1[/sup]=eとなるね。[br][color=#0000ff][b]6つの置換にすべて逆が1つずつある[/b][/color]ので、逆元もクリアした。[br][br]3本アミダを上下につなぐことをあみだくじの演算とすると、[br]この演算で、アミダは群になっていることがわかったね。[br][br]群のコトバでは、[b][color=#0000ff]3本アミダをS3={e, s, r, a, b, c}を、[/color][/b][color=#0000ff][b]たてにつなぐことを演算*[/b][/color]とすると、[br]3本アミダ[b]群は<S3, * >[/b]とかくことができるね。
[color=#9900ff][u][b][size=150]質問:3本アミダ群<S3、*>の群表をコードで作成するにはどうしたらよいでしょう。[br][/size][/b][/u][/color][br]・巡回置換は(a b c ... z)は働きとしては、辞書{a:b, b:c, ...., z:a}になる。これが[b][color=#0000ff]ami2dic関数[/color][/b]。[br] あみだのリストごと、辞書のリストにして返す[b][color=#0000ff]amis2dics[/color][/b]関数もあると便利だね。[br]・あみだaの行先を出す[b][color=#0000ff]ami_go関数[/color][/b]は、aにないキーkの行先はkのままにする。[br]・あみだの連結は[color=#0000ff][b]conL(a,b)[/b][/color]関数で、aの行先をキーにしてbの行先にいく連結辞書を作ります。[br] conR(a,b)関数はbの行先をキーにしてaの行先にいく連結辞書を作ります。[br][br]辞書がそのまま返されても視認性が悪いので、巡回置換に名前をつけて識別しやすくしよう。[br]すべての置換Sと名前をタプルにして返す[color=#0000ff][b]rotdic(S)[/b][/color]関数によって、[br]要素の名前、集合に含まれる要素の名前、演算結果の要素の名前を返すために、[br]関数、[color=#0000ff][b]name(a)、[/b][/color][color=#0000ff][b]names(H)、aH[/b][/color][b][color=#0000ff](a,H)、Ha(H,a)を作ります。[/color][/b][br][br]これだけ、準備しておけば、群表を作ることはできます。[br]タイトルをつけるために、[b]naming(S)をprintします。[br][/b]そのあと、上につけるアミダをitemとして、name(item)、amiSetR(S,item)をprintすると、[br]右にかける要素ごとに、Sがどうなるかをリスト表示できます。[br]このitemをSの要素から順に選んで実行すれば、群表ができますね。[br][color=#0000ff]#[IN]Python==================================================[br][/color][b]#巡回リストamiを辞書にする。(例)a=[1,2,3] → dic={1:2,2:3,3:1}[br]def ami2dic(ami):[br][/b] return dict(zip(ami , ami[1:] + [ami[0]]))[br][b]def amis2dics(amis):[br][/b] return [dict(zip(ami , ami[1:] + [ami[0]])) for ami in amis][br][b]# kの辞書dic_aによる行先を返す。辞書にないなら行先はk。[br]def ami_go(k,dic_a):[br][/b] return dic_a[k] if k in dic_a.keys() else k[br][b]#あみだの辞書a,bの連結をする。[br]def conL(a,b):#a,bの順に演算する。[br][/b] keys = list(set(list(a.keys()) + list(b.keys())))[br] dic ={key:ami_go(ami_go(key,a),b) for key in keys if key !=ami_go(ami_go(key,a),b)}[br] if len(dic)==0:[br] dic={1:1}[br] return dic[br][b]def conR(a,b):#b,aの順に演算する。[br][/b] return conL(b,a)[br][b]#アミダを、(辞書,名)のタプルのリストにする。[br]def rotdic(S,SN):[br][/b] dic=[ami2dic(x) for x in S][br] return list(zip(dic,SN))[br][b]# あみだ辞書dic_aを名で返す。[br]def name(dic_a):[br][/b] global Nlist[br] return [item[1] for item in Nlist if item[0]==dic_a][0][br][b]# あみだ辞書集dicsを名のリストで返す。[br]def names(dics):[br][/b] global Nlist[br] return [item[1] for item in Nlist for b in dics if item[0]==b][br][b]# あみだ辞書の集合Hと辞書aを演算した結果リストを返す。[br]def Ha(H,a):[br][/b] global Nlist[br] res=[][br] for b in H:[br] res +=[item[1] for item in Nlist if item[0]==conR(b,a)][br] return res[br][b]def aH(a,H):[br][/b] global Nlist[br] res=[][br] for b in H:[br] res +=[item[1] for item in Nlist if item[0]==conR(a,b)][br] return res[br][b]#==================================以上が基本関数====================[br]#群表を作ろう。[br]def maketable():[br][/b] global Nlist[br] G = [x[0] for x in Nlist][br] print("*",names(G))[br] for item in G:[br] print(name(item),aH(item,G))[br] return True[br][b]e=[1][br]s=[1,2,3][br]r=[1,3,2][br]b=[1,2][br]c=[1,3][br]a=[2,3][br]S=[e,r,s,a,b,c][br]SN=["e","r","s","a","b","c"][br]Nlist=rotdic(S,SN)[br]#=================================以上が今回の前準備==================[br]maketable()[br]#================================================================[br][/b][OUT][br][color=#0000ff][b]* ['e', 'r', 's', 'a', 'b', 'c'][br]e ['e', 'r', 's', 'a', 'b', 'c'][br]r ['r', 's', 'e', 'c', 'a', 'b'][br]s ['s', 'e', 'r', 'b', 'c', 'a'][br]a ['a', 'b', 'c', 'e', 'r', 's'][br]b ['b', 'c', 'a', 's', 'e', 'r'][br]c ['c', 'a', 'b', 'r', 's', 'e'][/b][/color][br]
++記号の演習
[size=150][b]<数学の抽象化は概念化と切り離せない>[br][/b][/size][br]数学の抽象化は概念化、[br]つまり「用語と記号」の「約束」の世界だ。[br]群の「約束記号と用語」になれるために、[color=#0000ff][b]群の例[/b][/color]を記号・用語で確認する演習をしたい人はどうぞ。[br][b][size=150]<2項演算*>[/size][/b][br]2要素x,y∈Sに対する2項演算の結果を中置型でx*yとかくことが多い。四則演算+,-,×,÷なども[br]もちろん2項演算だ。群は集合の要素に対する2項演算について条件を満たすものにつけたラベルだ。[br]集合S上の2項演算はxとyの対に対して値zを返す写像fとみることができる。[br][b][color=#0000ff]x,yの順序対は(x,y)[/color]とかき、これを要素とするのは[color=#0000ff]直積[Direct Product]集合S×S[/color]だ。[br][/b]だから、2項演算*のことを[br][b][color=#0000ff]f:S×S→S ; (x,y)→f(x,y)[/color]と表記すると、f(x,y)=x*yということになるね。[br][size=150]<群のようなものと群>[br][/size][/b]「[color=#0000ff]集合[/color]」は、入る要素が内包的か外延的な定義などにより決まるもので、空集合∅も集合。[br]「[color=#0000ff]亜群[/color]」は、2項演算で閉じている集合。[br]「[color=#0000ff]半群[/color]」([color=#0000ff]semigroup[/color])は、閉じているのと[b]結合[associative[[/b]法則が言える集合。[br]「[color=#0000ff]単位的半群,モノイド[/color]」([color=#0000ff]monoid[/color])は、閉じていて結合法則が言えて、[b]単位元eが1つだけ[/b]ある集合。[br]「[b]群」(group[/b])は閉じていて、結合法則が言えて、単位元が唯一あり、[br] さらに、xの逆元inverse xが1つずつある集合。単位元しかない群、単位群{e}も群だね。e*e=e。[br][color=#0000ff]「アーベル群、可換群」[/color]は、群Gの任意の要素についてxy=yxが成り立つもの。[br]「群の位数」は、群Gの要素数で、#Gとか|G|とかく。[br]「要素の位数」は、群Gの要素gがg*n=eとなる最小のnをgの位数という。ord(g)=nとかく。[br][br]N10={1,2,3,4,5,6,7,8,9,10}とするとき、次の集合はどれか?[br]([color=#9900ff]例[/color])a*b=最大公約数(a,b)を求める演算*とすると、(N10,*)は[b]半群[/b]。[br] なぜなら、最大公約数はどれをさきに結合しても同じになるので、結合法則は成り立つ。[br]しかし、a*e=aとなる単位元eがあるとしたらすべての数の最小公倍数だから、そんなものはない。[br]([color=#9900ff]例[/color])a*b=min(a,b)とすると、(N10,*)は[b]モノイド[/b]。[br] なぜなら、minはどのからさきに調べても最後は同じ1つが返るから、結合法則は成り立つ。[br]また、min(x,10)=x,  min(10,10)=10となる。だから10が単位元だからモノイド。どのxについてもmin(x,y)=10となるyは存在するとは限らないから、必ずしも逆元はないので群になれない。[br]([color=#9900ff]例[/color])G={X |X=[math]\left(\begin{matrix}a,b\\-b,a\\\end{matrix}\right)[/math] , a[sup]2[/sup]+b[sup]2[/sup]>0, a,b∈R} で(G,・)は群といえる。・は行列の積。[br] 行列の積は一般に交換法則は成り立つとは限らないが、結合法則は成り立つから、半群。[br] X・E=XとなるEはa=1,b=0とすると、E∈Gだから、単位元は1つだけあり、単位的半群。[br] X・Y=EとなるYがどんなXにも1つずつあるか?det(X)=k=a[sup]2[/sup]+b[sup]2[/sup]>0だから、逆行列が決まる。[br] [math]X^{-1}=\frac{1}{a^2+b^2}\left(\begin{matrix}a,-b\\b,a\\\end{matrix}\right)[/math] [br]位数について[br](例)#S3=3!=6。|S3|=6。[br](例)あみだくじの演算*はつなぐことだった。[br] a*a=e, b*b=e, c*c=e、つまり、a[sup]2[/sup]=b[sup]2[/sup]=c[sup]2[/sup]=eだから、a,b,cの位数は2。[br]  r*r*r=e, s*s*s=e、つまり、r[sup]3[/sup]=s[sup]3[/sup]=eだから、r,sの位数は3。

Information: あみだくじたちは「群」になれるのか?