GAP 使いの方、交換子群例の確認計算をお願いしま
PythonSf と名づけた数学ソフトを開発しています。そこで置換群も実装しています。素人実装であり CGT でのアルゴリズムまでは入れていません。でも膨大なインスタンスを生成しないときは結構実用的に使えます。
一方で下の URL で GAP で求めたとする交換子の集合が群にならない位数 96 の群の例を示しています。
http://math.stackexchange.com/questions/7811/derived-subgroups-and-commutators
(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),
(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),
(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),
(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),
(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),
(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)
これが本当か、PythonSf の能力テストも兼ねて計算してみました。PythonSf の計算では、この群の位数は 96 よりも ずっと大きくなり、「URL の計算は誤りだと」の結論になりました。
PythonSfの計算と URL にある GAP 計算のどちらが誤っているか、GAP 使いのどなたか確認計算してもらえますでしょうか。
------------ 確認した計算 -----------
PythonSf では、下のような計算をしてみました。(PythonSf を知らなくても、Cy が巡回置換、Sb が置換、kfs が frozeset、mitr(..) が多重イタレータであることと Python を知っていれば下の計算の意味は解ると思います。)
● URL にある巡回置換の周期を求めました。 3,2,2,4,4,2 です。
a:=Cy(3,8,6)Cy(4,7,5)Cy(9,27,17)Cy(10,28,18)Cy(11,30,22)Cy(12,29,21)Cy(13,26,23)Cy(14,25,24)Cy(15,31,20)Cy(16,32,19); [k for k in range(20) if a^k == Sb(range(33))]
===============================
[0, 3, 6, 9, 12, 15, 18]
b:=Cy(1,17)Cy(2,18)Cy(3,19)Cy(4,20)Cy(5,21)Cy(6,22)Cy(7,23)Cy(8,24)Cy(9,25)Cy(10,26)Cy(11,27)Cy(12,28)Cy(13,29)Cy(14,30)Cy(15,31)Cy(16,32); [k for k in range(20) if b^k == Sb(range(33))]
===============================
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
c:=Cy(1,9)Cy(2,10)Cy(3,11)Cy(4,12)Cy(5,13)Cy(6,14)Cy(7,15)Cy(8,16)Cy(17,25)Cy(18,26)Cy(19,27)Cy(20,28)Cy(21,29)Cy(22,30)Cy(23,31)Cy(24,32); [k for k in range(20) if c^k == Sb(range(33))]
===============================
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
d:=Cy(1,5,2,6)Cy(3,8,4,7)Cy(9,13,10,14)Cy(11,16,12,15)Cy(17,21,18,22)Cy(19,24,20,23)Cy(25,29,26,30)Cy(27,32,28,31); [k for k in range(20) if d^k == Sb(range(33))]
===============================
[0, 4, 8, 12, 16]
e:=Cy(1,3,2,4)Cy(5,7,6,8)Cy(9,11,10,12)Cy(13,15,14,16)Cy(17,19,18,20)Cy(21,23,22,24)Cy(25,27,26,28)Cy(29,31,30,32); [k for k in range(20) if e^k == Sb(range(33))]
===============================
[0, 4, 8, 12, 16]
f:=Cy(1,2)Cy(3,4)Cy(5,6)Cy(7,8)Cy(9,10)Cy(11,12)Cy(13,14)Cy(15,16)Cy(17,18)Cy(19,20)Cy(21,22)Cy(23,24)Cy(25,26)Cy(27,28)Cy(29,30)Cy(31,32); [k for k in range(20) if f^k == Sb(range(33))]
===============================
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
● 上での計算で a,b,c,d,e,f 置換インスタンスをファイル変数にもしておいたので、それらを利用して a,b,c,d,e,f の組合せで作られる集合のサイズを計算してみます。
# 3,2,2,4,4,2 の巡回群を一回ずつだけ掛け算してでできる置換インスタンスの集合の濃度は 96 です。
=:a,b,c,d,e,f; len({u v w x y z for u,v,w,x,y,z in mitr([a^0,a,a^2],[b^0,b],[c^0,c],[d^0,d,d^2,d^3],[e^0,e,e^2,e^3],[f^0,f])})
===============================
96
# でも上でできた集合は群演算で閉じていません。交換子の集合を作ってみると、その濃度は 459 になってしまいました。
=:a,b,c,d,e,f; kfsG=kfs({u v w x y z for u,v,w,x,y,z in mitr([a^0,a,a^2],[b^0,b],[c^0,c],[d^0,d,d^2,d^3],[e^0,e,e^2,e^3],[f^0,f])}); kfsC=kfs({x y x^-1 y^-1 for x,y in mitr(kfsG, kfsG)}); len(kfsC)
===============================
459
お礼
どうもありがとうございます。 とりあえず、これを参考に考えて見ます。