Googleクラスルーム
GeoGebraGeoGebra Classroom

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

あみだくじを作ろう!

あみだくじをつないでも、あみだくじ。

123はどう動く?

123はどう動く?
このワークシートはMath by Codeの一部です。 <たて線3本アミダ> 「群」groupというのは、ただの群れとか集まりというものではなく、ルールに適合する群れだ。 2項演算(2つのoperandに対する演算operator)を集まりに対して定めたとき、 ・2項演算がそのグループの要素にとどまる。はみ出さない調和のとれた動き。閉じている。closure ・結合法則が成り立つ。abc=a(bc)=(ab)c。みんな仲良くくっつける。associative ・1つの単位元・零元(何もしない元identity)がある。停止も運動の1種。 ・どの要素にも逆元・反元(演算をもどす元)がペアで存在するinversible。逆の動きも仲間だ。 これらがOKならば、何でも「群」と言える。 アミダは群になるだどうか? まず、たて線が3本で調べてみよう。

1.3本アミダ

あみだくじのように線をひいて、位置を変えることを置換という。 番号を入れ替える操作をしているとも言えるね。 タテ線に乗っかって下にきた場所に上の番号がかいてある。 だから、下の番号だけ書き出すと、123,231,312,132,213,321となり 123の3つの番号の順列数3!=6通りの入れ替えがすべてできていることがわかるね。 <1段目の3つの置換> (1段目の左図) この置換はヨコ線が0本だから、何もしない。だから、これが単位元、0元だね。何もしないのも置換。 あみだくじでヨコ線を1本ひくと、隣接要素の交換を表す。2要素の交換のことを互換という。 1段目の3本アミダはヨコ線が0か2本なので互換数が偶数。偶数の互換なので偶置換とよぼう。 2段目の3つはヨコ線が1か3本なので奇置換とよぼう。 1と2をつなぐヨコ線は互換を引き起こす。これを、(12)とかこう。 2と3をつなぐヨコ線は(23)とかこう。3と1をつなぐヨコ線は(31)とかこう。 合成関数g*f(x)がxに対してfが先で、gを次にすることを表した。 (1段目の中図) このアミダは、上に(12)、下に(23)なので、この合成は右先左後の表記で、(23)*(12)となる。 1→2の終点2が、2→3の始点2とつながり、1→2→3の移動がおきて1→3となる。 左から1番は左から3番の位置にたどりつき、2→1、3→2の行き先変更は合成されない。   とかくと、番号の動きが見やすいね。途中の↓を省略してよい。  (1段目の右図) このアミダは、上に(23)、下に(12)、なので、この合成操作の表記は(12)*(23)となる。 3→2の終点2が、2→1の始点2とつながり、3→2→1の移動がおきて3→1となる。 1→2、2→3の行き先変更は合成されない。   だから、 

2.あみだくじは互換か巡回置換であらわせる

1段目の右図の置換 これは、おもしろいね。 1→2, 2→3, 3→1の順繰りにサイクリックに1つずつずらしているように見える。 だから、これを1サイクルを順に(1,2,3)とかき、巡回置換[cyclic permutation] という名前がついている。直訳しただけの日本語ですなあ。 まあ、順ぐり置き換え、くるっと回すでもいいのだけれど、世間の常識の言葉を使っておこう。 1段目の中図は、さっき見た巡回置換に直せないだろうか? 1→3, 3→2, 2→1 と数字の大小はきれいではないが巡回しているね。(1,3,2)とかけるね。 <2段目の左、中、右の図> では2段目を左からみよう。 1個目は(23)の互換だ。 2個目は(12)の互換だ。 3個目はヨコ線は上から順に(12)、(23)、(12)だ。合成互換の書き方では(12)*(23)*(12)。 1は(12)で1→2となり、次の(23)で2→3となるから、2でつなぐと、1→3。 2は(12)で2→1となり、最後の(12)で1→2となるから、1をつなぐと、2→2でもとにもどる。 3は(23)で3→2となり、最後の(12)で2→1となるから、2をつなぐと、3→1。 だから、2は変わらず、互換(13)と同じになるね。

3.アミダをつなぐ

<たてにつなぐのが演算> アミダを区別しやすくするために、名前をつけよう。 1段目は偶置換で、左からe =( ), r=(1,3,2), s= (1,2,3) 。 2段目は奇置換で、左からa=(23),b=(12),c=(13)。 ではこの6要素を九九の表のようにたてとよこにならべよう。 6つ要素どうしの演算結果をかいて表をうめることをイメージしてみよう。 よこに、x={e, r, s, a, b, c}と並べたとき、たてに、y={e, r, s, a, b, c}と並べてうめてみる。 1行目は e*x=x={e, r, s, a, b, c}とそのまま並べるだけ。 2行目はr*x = {r*e, r*r, r*a, r*b,r*c}となるね。 たとえば、r*aはa=(23)の下にr=(1,3,2)をつなぐことになるね。
Image
一番下の番号が321の順になったので、あみだくじでは2段目の最後、つまりcと同じになる。 aで2→3、rで3→2となるから、3をつなぐと2→2となるなどして、(13)になることがわかるね。 だから、r*a=cだ。 群の九九表のようなものを群表を呼んだりするけど、群表をかかなくても、 2つのあみだくじをたてにつなげば、1,2,3の番号が入れ替わるだけなので、その演算結果は 6つの要素のどれかと同じになるしかない。 つまり、閉じていることと結合法則は明白なので、これは調べなくても大丈夫だね。 ・単位元、つまり、なにもしない置換、ヨコ線のないのが、eであり、1つしかないからOK. ・では逆元をしらべよう。 同じ互換を繰り返すともとに戻るから a*a=e, b*b=e, c*c=eとなるね。 3要素の巡回置換は3回くりかえすともとにもどるから、r*r*r=e, s*s*s=eだ。 rを2回するとsになり、r*r=s。同じようにして、s*s=r。 xの逆元(反元)をx-1とかくと、a-1=a, b-1=b, c-1=c, r-1=s, s-1=r, e-1=eとなるね。 6つの置換にすべて逆が1つずつあるので、逆元もクリアした。 3本アミダを上下につなぐことをあみだくじの演算とすると、 この演算で、アミダは群になっていることがわかったね。 群のコトバでは、3本アミダをS3={e, s, r, a, b, c}を、たてにつなぐことを演算*とすると、 3本アミダ群は<S3, * >とかくことができるね。

++記号の演習

<数学の抽象化は概念化と切り離せない> 数学の抽象化は概念化、 つまり「用語と記号」の「約束」の世界だ。 群の「約束記号と用語」になれるために、群の例を記号・用語で確認する演習をしたい人はどうぞ。 <群のようなものと群> 集合」は、入る要素が内包的か外延的な定義などにより決まるもので、空集合∅も集合。 「亜群」は、2項演算で閉じている集合。 「半群」(semigroup)は、閉じているのと結合法則が言える集合。 「単位的半群」(monoid)は、閉じていて結合法則が言えて、単位元eが1つだけある集合。 「群」(group)は閉じていて、結合法則が言えて、単位元が唯一あり、 さらに、xの逆元inverse xが1つずつある集合。単位元しかない群、単位群{e}も群だね。e*e=e。 N10={1,2,3,4,5,6,7,8,9,10}とするとき、次の集合はどれか? ()a*b=最大公約数(a,b)を求める演算*とすると、(N10,*)は半群。  なぜなら、最大公約数はどれをさきに結合しても同じになるので、結合法則は成り立つ。 しかし、a*e=aとなる単位元eがあるとしたらすべての数の最小公倍数だから、そんなものはない。 ()a*b=min(a,b)とすると、(N10,*)はモノイド。  なぜなら、minはどのからさきに調べても最後は同じ1つが返るから、結合法則は成り立つ。 また、min(x,10)=x, min(10,10)=10となる。だから10が単位だが、どのxについてもmin(x,y)=10となるyは存在しないから。 ()G={X |X= , a2+b2>0, a,b∈R} で(G,・)は群。・は行列の積。  行列の積は一般に交換法則は成り立つとは限らないが、結合法則は成り立つから、半群。  X・E=XとなるEはa=1,b=0とすると、E∈Gだから、単位元は1つだけあり、単位的半群。 X・Y=EとなるYがどんなXにも1つずつあるか?det(X)=k=a2+b2>0だから、逆行列が決まる。  
質問:3本アミダ群<S3、*>の群表をコードで作成するにはどうしたらよいでしょう。 ・巡回置換は(a b c ... z)は働きとしては、辞書{a:b, b:c, ...., z:a}になる。これがami2dic関数。 あみだのリストごと、辞書のリストにして返すamis2dics関数もあると便利だね。 ・あみだaの行先を出すami_go関数は、aにないキーkの行先はkのままにする。 ・あみだの連結はconL(a,b)関数で、aの行先をキーにしてbの行先にいく連結辞書を作ります。 conR(a,b)関数はbの行先をキーにしてaの行先にいく連結辞書を作ります。 辞書がそのまま返されても視認性が悪いので、巡回置換に名前をつけて識別しやすくしよう。 すべての置換Sと名前をタプルにして返すrotdic(S)関数によって、 要素の名前、集合に含まれる要素の名前、演算結果の要素の名前を返すために、 関数、name(a)、names(H)、aH(a,H)、Ha(H,a)を作ります。 これだけ、準備しておけば、群表を作ることはできます。 タイトルをつけるために、naming(S)をprintします。 そのあと、上につけるアミダをitemとして、name(item)、amiSetR(S,item)をprintすると、 右にかける要素ごとに、Sがどうなるかをリスト表示できます。 このitemをSの要素から順に選んで実行すれば、群表ができますね。 #[IN]Python================================================== #巡回リストamiを辞書にする。(例)a=[1,2,3] → dic={1:2,2:3,3:1} 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 #==================================以上が基本関数==================== #群表を作ろう。 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 e=[1] s=[1,2,3] r=[1,3,2] b=[1,2] c=[1,3] a=[2,3] S=[e,r,s,a,b,c] SN=["e","r","s","a","b","c"] Nlist=rotdic(S,SN) #=================================以上が今回の前準備================== maketable() #================================================================ [OUT] * ['e', 'r', 's', 'a', 'b', 'c'] e ['e', 'r', 's', 'a', 'b', 'c'] r ['r', 's', 'e', 'c', 'a', 'b'] s ['s', 'e', 'r', 'b', 'c', 'a'] a ['a', 'b', 'c', 'e', 'r', 's'] b ['b', 'c', 'a', 's', 'e', 'r'] c ['c', 'a', 'b', 'r', 's', 'e']