• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:GAP 使いの方、交換子群例の確認計算をお願いしま)

GAP使いの方、交換子群例の確認計算をお願いします

このQ&Aのポイント
  • GAP 使いの方、交換子群例の確認計算をお願いします。
  • PythonSfという数学ソフトで交換子群も実装できますが、CGTのアルゴリズムはありません。しかし、インスタンス生成時には実用的です。
  • 96の位数を持つ群の例を示すURLには、GAPで求めたとする交換子の集合が群になっていないことが示されています。

質問者が選んだベストアンサー

  • ベストアンサー
  • muturajcp
  • ベストアンサー率78% (505/644)
回答No.1

b=(1,17)(2,18)… c=(1,9)(2,10)… d=(1,5,2,6)… e=(1,3,2,4)… のPythonSf入力が誤りです b=(1,17,7,23)… c=(1,9,5,13)… d=(1,5)(2,6)… e=(1,3)(2,4)… に訂正してPythonSfで確認願います。 a=(3,8,6)(4,7,5)(9,27,17)(10,28,18)(11,30,22)(12,29,21)(13,26,23)(14,25,24)(15,31,20)(16,32,19) B=(1,17,7,23)(2,18,8,24)(3,19,5,21)(4,20,6,22)(9,26,15,32)(10,25,16,31)(11,28,13,30)(12,27,14,29) C=(1,9,5,13)(2,10,6,14)(3,11,7,15)(4,12,8,16)(17,25,21,29)(18,26,22,30)(19,27,23,31)(20,28,24,32) D=(1,5)(2,6)(3,7)(4,8)(9,13)(10,14)(11,15)(12,16)(17,21)(18,22)(19,23)(20,24)(25,29)(26,30)(27,31)(28,32) E=(1,3)(2,4)(5,7)(6,8)(9,11)(10,12)(13,15)(14,16)(17,19)(18,20)(21,23)(22,24)(25,27)(26,28)(29,31)(30,32) f=(1,2)(3,4)(5,6)(7,8)(9,10)(11,12)(13,14)(15,16)(17,18)(19,20)(21,22)(23,24)(25,26)(27,28)(29,30)(31,32) , A=(3,7,5)(4,8,6)(9,25,17)(10,26,18)(11,31,21)(12,32,22)(13,27,23)(14,28,24)(15,29,19)(16,30,20) b=(1,17)(2,18)(3,19)(4,20)(5,21)(6,22)(7,23)(8,24)(9,25)(10,26)(11,27)(12,28)(13,29)(14,30)(15,31)(16,32) c=(1,9)(2,10)(3,11)(4,12)(5,13)(6,14)(7,15)(8,16)(17,25)(18,26)(19,27)(20,28)(21,29)(22,30)(23,31)(24,32) d=(1,5,2,6)(3,8,4,7)(9,13,10,14)(11,16,12,15)(17,21,18,22)(19,24,20,23)(25,29,26,30)(27,32,28,31) e=(1,3,2,4)(5,7,6,8) (9,11,10,12)(13,15,14,16)(17,19,18,20)(21,23,22,24)(25,27,26,28)(29,31,30,32) とすると GAPで求めた2つの例 (a,B,C,D,E,f)は位数96の群を生成します。 (A,b,c,d,e,f)は位数96の群を生成します。 PythonSfで確認とされる (a,b,c,d,e,f)が生成する群の位数は96よりもずっと大きくなるので、 (a,b,c,d,e,f)ではなく (a,B,C,D,E,f) または (A,b,c,d,e,f) のどちらか一方で確認願います。

loboskobay
質問者

お礼

muturajcp さん、誤りの指摘 ありがとうございました。また御礼が遅れて申し訳ありませんでした。 おかげで、a,b,c,d,e,f 置換が作る位数 96 の群の交換子の集合が群にならず、それを 群にすると d が新たに含まれることを確認できました。また a,b,c,d,e か形作る、こ の位数 96 の群の構造を調べることもできました。 そのための計算は、以下のワン・ライナーで行えました。ワン・ライナーは、その行だけ で完結しています。何時でも何処でも単独で再実行できるので便利に使えます。。ワ ン・ライナーだといっても GAP より可読性が勝っていると思います。素人実装の群計算 モジュールでも GAP を補完する 働きをさせられると言えそうです。 ● {a,b,c,d,e,f} より生成される群の交換子積の集合は群ではない。交換子積の集合か ら群を生成した段階で d が含まれる。 ○ S96, S96_cmmtr: a,b,c,d,e,f より生成され る位数96 の群、その交換子積の集合を   ファイル変数 S96 と S96_cmmtr にします =:a,b,c,d,e,f;S96:=group([a,b,c,d,e,f]); S96_cmmtr:=kfs(x y x^-1 y^-1 for x,y in mitr(S96,S96)) ○ a, d が S96_cmmtr に属しません =:a,b,c,d,e,f,S96,S96_cmmtr; {a,d}.issubset(S96_cmmtr) =============================== False =:a,b,c,d,e,f,S96,S96_cmmtr; {b,c,e,f}.issubset(S96_cmmtr) =============================== True ○ d が S96_cmmtr 交換子積の集合にに属しません =:a,b,c,d,e,f,S96,S96_cmmtr; d in (S96_cmmtr) =============================== False ○ d が S96_cmmtr から生成される群に属します =:a,b,c,d,e,f,S96,S96_cmmtr; d in group(S96_cmmtr) =============================== True ○ S96 の位数は 96 == 2^5 * 3^1 == 32*3 =:a,b,c,d,e,f,S96,S96_cmmtr; ts(); ts.factorint(len(S96)) =============================== {2: 5, 3: 1} ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 何が交換子積の集合が群にならない性質をもたらすのか知りたくて、a,b,c,d,e,f 置換 から生成される群の構造について調べてみました。 ● a,b,c,d,e,f の位数は 3,4,4,2,2,2 であり、S96 は下の様に分解されることが分かりました。            group(S96_cmmtr) ≡ {f^0,f} X| {b,c,e} 商群             || S96==group([a,c]) |> group(S96_cmmtr) == group([b,c])    || S96==group([a,c]) ≡ {a^0,a^1,a^3} X| group(S96_cmmtr) これ位の構造を入れ込んでやらないと「交換子積の集合が群にならないという隙間が得 られない」ということのようです。その隙間を作るためには、最低でも位数 96 が必要な のも納得できる気がします。それだけ群構造では、要素が互いに強固に関連しあってい るのだと思います。 この構造を自由群の関係子で表現できれば良いと思うのですが、私の能力ではできません。 ○ a,b,c,d,e,f の位数は 3,4,4,2,2,2 であることの証明 =:a,b,c,d,e,f; [len(kfs([x^0,x^1,x^2,x^3,x^4])) for x in (a,b,c,d,e,f)] =============================== [3, 4, 4, 2, 2, 2] ○ S96 == group([a,c]) の証明 =:a,b,c,d,e,f,S96,S96_cmmtr; S96 == group([a,c]) =============================== True ○ group(S96_cmmtr) == group([b,c]) の証明 =:a,b,c,d,e,f,S96,S96_cmmtr; group(S96_cmmtr) == group([b,c]) =============================== True ○ group(S96_cmmtr) ≡ {f^0,f} X| {b,c,e} 商群の実験的検証 # group(S96_cmmtr) の交換子積 == {f^0,f} =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); kfs([x y x^-1 y^-1 for x,y in mitr(S,S)]) == {f^0,f} =============================== True # {b,c,e} ⊂ group(S96_cmmtr)/{f^0,f} の証明 =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); {b,c,e}.issubset(S/{f^0,f}) =============================== True # {b,c} だけでは商群を作れないが {b,c,e} で商群の generator になる。 gp(); =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); SN=kfs([f^0,f]);Sd=S/SN; ls=[b,c ]; len(kfs([product(v,Sb(0)) SN for v in mitr(*[ls]*6)])) =============================== 4 gp(); =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); SN=kfs([f^0,f]);Sd=S/SN; ls=[b,c ]; len(kfs([product(v,Sb(0)) SN for v in mitr(*[ls]*7)])) =============================== 4 gp(); =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); SN=kfs([f^0,f]);Sd=S/SN; ls=[b,c,e ]; len(kfs([product(v,Sb(0)) SN for v in mitr(*[ls]*5)])) =============================== 15 gp(); =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); SN=kfs([f^0,f]);Sd=S/SN; ls=[b,c,e ]; len(kfs([product(v,Sb(0)) SN for v in mitr(*[ls]*6)])) =============================== 16 gp(); =:a,b,c,d,e,f,S96,S96_cmmtr; S=group(S96_cmmtr); SN=kfs([f^0,f]);Sd=S/SN; ls=[b,c,e ]; len(kfs([product(v,Sb(0)) SN for v in mitr(*[ls]*7)])) =============================== 16

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 3点円弧の中心座標の求め方

    いつも、お世話になります。 チョット、ジャンルは違うんですが、どこに聞けばよいか分からなくて、 3点を、通る円弧の中心座標と、半径の求め方 点X、Y,Zを通る円弧の中心点をC、半径をrとするとき (Xx-Cx)^2 + (Xy-Cy)^2 = r^2 (Yx-Cx)^2 + (Yy-Cy)^2 = r^2 (Zx-Cx)^2 + (Zy-Cy)^2 = r^2 ^2は2乗 のような関係式が成り立ちそうなんですが ここから Cx= Cy= の式に要約できずに悩んでおります。 どなたか、上記に限らず、3点円弧の中心座標の求め方をご教授ください。 CADで書けば、すぐわかるんですが、そうじゃなくて計算で求める方法 みなさま、ご回答いただきありがとうございました。 結果報告させていただきます。 質問には書いていませんでしたが、コンピュータでの計算を前提としておりましたので 数学的な解にはなりませんでした。 2番、4番のご回答を参考にさせていただきました。 3点を(a,b)(c,d)(e,f)、(a,b)(c,d)を直線1、(c,d)(e,f)を直線2 各中点を(p1x,p1y)(p2x,p2y)として 直線1に直行する直線3の傾き f1=(c-a)/(b-d) 直線2に直行する直線4の傾き f2=(e-c)/(d-f) 中点1は p1x=(a+c)/2  p1y=(b+d)/2 中点2は p2x=(c+e)/2  p2y=(d+f)/2 直線3をy=f1x+A1で表した時の A1=p1y-f1p1x 直線4は A2=p2y-f2p2x 交点は y=f1x+A1 y=f2x+A2 なので f1x-f2x+A1-A2=0 x=(A2-A1)/(f1-f2) それぞれを、変数として計算すると解決できました。 ご指導ありがとうございました。

  • VBA For Eachの使い方

    For Each x In Range("A1:G1") このようなコードにおいて、A1からG1の全てに対して処理を行うのではなく、A1とC1とE1とG1に対して処理を行い、B1とD1とF1は飛ばして処理をしないようにするにはどうすれば良いですか?

  • 傾いた楕円の方程式から中心と長軸短軸を出す

    今、 Ax^2 + 2Bxy + Cy^2 + 2Dx + 2Ey + F = 0 という式から、 中心 x0, y0 長軸、短軸 a b 傾き θ を求めたいのですが、どうすればよいでしょうか? A、B、C、D、E、Fは定数です

  • a,b,c,d,e,fを定数とするx、yの恒等式

    a,b,c,d,e,fを定数とするとき、次の等式がどのようなx、yについても成り立つ、すなわちx、yについての恒等式であるとする。 ax^2+bxy+cy^2+dx+ey+f=0 等式の左辺をxについて整理すると ax^2+(by+d)x+(cy^2+ey+f)=0 この等式はxについての恒等式であるから a=0,by+=0,cy^2+ey+f=0 これらの等式は、yについても恒等式であるから b=0、d=0、c=0、e=0,f=0 したがって、a=b=c=d=e=f=0が得られる。との解説があったのですが最初の与えられた式をみてもabcdefが0なら恒等式でわざわざこのような解説が不要のような気がするのですがなぜ必要なのでしょうか(中3)

  • エクセルに以下のような複雑な計算をさせたいです。

    エクセルに以下のような条件の計算をさせたいです。 「2a , 3b , 5c , 6d , 8e , 10f」 a+b+c+d+e+fが上のどれよりも小さくなる場合の、 a,b,c,d,e,fの数字の組みわせで最も小さいものを求めたいです。 2a ≧ a+b+c+d+e+f 3b ≧ a+b+c+d+e+f 5c ≧ a+b+c+d+e+f 6d ≧ a+b+c+d+e+f 8e ≧ a+b+c+d+e+f 10f ≧ a+b+c+d+e+f (ただし、a,b,c,d,e,fは正の数) ※分かりやすいように、これらの数字は適当に入れたので、答えが無いかと思います。 実際は別の数字に置き換えます。 ※また、コンピュータが無限に計算し続けることを防ぐために上限を決めてもいいです 関数かマクロで計算させる方法を教えて下さい。 わかりやすくなるようにシンプルに説明しましたが、 実際は最大13組まで計算することになり、 自力でも計算してみましたが、とてつもなく時間がかかりました。 出来ればコンピューターに計算させたいと思い質問しました。

  • 円周率を求めるC言語のプログラム

    int a=10000,b,c=8400,d,e,f[8401],g;main(){for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); というのが本(「π魅惑の数」)に載っていたので #include <stdio.h> int main(void){ int a=10000,b,c=8400,d,e,f[8401],g; for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); return 0; } としたのですが 円周率を表示してくれません。 (b=0にすると一応は出てくるのですが微妙に間違ってます(よく分からないですけどそのくらいの誤差のあるプログラムなのでしょうか?))

  • C言語の配列の使い方について質問です。

    以下のプログラムを配列を使って見やすくしたいのですが、どのように作ったら良いでしょうか? 宜しくお願いします。 #include<stdio.h> int main(void) { int a, b, c, d, e, f, g, h, i, j, k, l, m ,n, o; /*5段目の処理*/ for(a = 1; a <= 15; a++) { for(b = 1; b <= 15; b++) { if(a == b) continue; for(c = 1; c <= 15; c++) { if(a == c || b == c) continue; for(d = 1; d <= 15; d++) { if(a == d || b == d || c == d) continue; for(e = 1; e <= 15; e++) { if(a == e || b == e || c == e || d == e) continue; // printf("%d %d %d %d %d\n", a, b, c, d, e); ////4段目//// if(a>b){ f=a-b; } else if(a<b){ f=b-a; } if(b>c){ g=b-c; } else if(b<c){ g=c-b; } if(c>d){ h=c-d; } else if(c<d){ h=d-c; } if(d>e){ i=d-e; } else if(e<d){ i=e-d; } // printf(" %d %d %d %d \n", f, g, h, i); /////3段目//// if(f>g){ j=f-g; } else if(f<g){ j=g-f; } if(g>h){ k=g-h; } else if(g<h){ k=h-g; } if(h>i){ l=h-i; } else if(h<i){ l=i-h; } // printf(" %d %d %d \n", j, k, l); /////2段目//// if(j>k){ m=j-k; } else if(j<k){ m=k-j; } if(k>l){ n=k-l; } else if(k<l){ n=l-k; } // printf(" %d %d \n", m, n); /////三段目///// if(m>n){ o=m-n; } else if(m<n){ o=n-m; } // printf(" %d \n", o); if(a != b != c != d != e != f != g != h != i != j != k != l != m != n != o){ printf("%d %d %d %d %d\n", a, b, c, d, e); printf(" %d %d %d %d \n", f, g, h, i); printf(" %d %d %d \n", j, k, l); printf(" %d %d \n", m, n); printf(" %d \n", o); } } } } } } }

  • python ですが下記のプログラムがエラーになり

    python ですが下記のプログラムがエラーになります。どうしてでしょうか。よろしくお願い致します。 def revers(data): for index in range(len (data)-1,-1,-1): yield data[index] some_list = [‘a’, ‘b’, ‘c’, ‘d’] for e in revers(some_list): print(e) 実行結果をd      c      b      a にしたいのですがエラーがでます。

  • 無限等比級数の計算

    あるパチンコ機の特賞継続回数を計算していたら以下のような無限等比級数になったのですが、この計算の仕方がわかりません。 1回目:(C*E+D*F)/(E+F) 2回目:(A*C*E+B*D*F)/(A*E+B*F) 3回目:(A^2*C*E+B^2*D*F)/(A^2*E+B^2*F) 4回目:(A^3*C*E+B^3*D*F)/(A^3*E+B^3*F)  ・  ・  ・ よろしくお願いします。

  • エクセルでの座標計算の質問

    基準座標座標X-300 Y-300 の点を X0Y0を中心に回した計算式です E2に回転したい角度を入れて計算します A1= X 基準座標 A2= -300 B1= Y 基準座標 B2= -300 C1= 基準角度 C2= 45       C2式 =ATAN(A2/B2)/(PI()/180) D1= 中心からの距離 D2= 424.2640687   C2式 =SQRT(A2*A2+B2*B2) E1= 回転角度 E2= 0 F1= 合計角度 F2= 45 C2式=C2+E2 G1= X 答え G2= 300 C2式=COS(F2*PI()/180)*D2 H1= Y 答え H2= 300 C2式=SIN(F2*PI()/180)*D2 このとき回転角度E2の値を換えて計算をしたいのですが 45とか135を入れると合計角度が 90度180度になり XかYの答えが0になるのですが 2.59893E-14 このような答えになります この文字列は何でしょうか? 答えを0にはできませんか (注意)   まだ未完成です正と負の使い分けが出来ていません   X-300Y-300で角度を振ってないのに答えは180度   振った答えになっています (これも未解決) EXCEL2000 WINXP