極大部分群の抽出は一応組み込み完了…

極大部分群の抽出は一応組み込み完了しているが,かなり見当違いのことをやっている感がある.登録解除という再帰関数でノード1個を群から除去しているが,やり過ぎになっている.⇒ある程度動くようになってきたが,まだ完全ではない.S4の場合,素群が17個,合成群が11個,単位群1で合計29個の真部分群を持っているのに対し,

追加登録で配列レンジオーバーが起きる.追加登録の中でG.Nをインクリメントしているためだ.しかし,Gの台集合や乗積表は上位のG1のそれらを引き継いでいるはずなので,サイズ的にはカバーできるはずなのだが… ⇒ミスがあったので対処した.

極大部分群というのを抽出してみたい

やられてしまった!Googleにアクセスすると以下のような警告が出る.

Screenshot_20231028_135729_com.google.android.googlequicksearchbox

Googleをアンインストールしても状況は変わりない(アンインストールしても自動的に再インストールされる).「更新」を実行してみる.これでも同じならスマホではGoogleが使えないことになる.(カスペルスキーで完全スキャンを実行してみたが,ウィルスは検出できなかった.カスペルスキーで検出できないとすればもはやこのウィルスを駆除する手段はない)⇒やはり同じだ.Googleかないし,カスペルスキーに問い合わせるしかない… しかし,そんなことにかまっている時間も惜しい…

見た限り,警告が出されて,Googleを開くことができないだけなので,しばらく放置することにする.検索は他のPCで実行することもできるし,Chromeはスマホでも問題なく開ける.

Dドライブが満杯になってしまった.100GBあるのだが,プロジェクトフォルダが1個で1GB使っているのですぐに満杯になってしまう..vsが容量のほとんどを使っている.これは外に出した方がよい.Cドライブに置いてもよいのではないだろうか?あるいは,個人フォルダに置くことも考えられる.⇒.vsをCドライブに移動し,ツール→オプション→C/C++→詳細設定→IntelliSenseで「常にフォールバック一を仕様」とTrueとし,フォールバック位置をC:\.vsに変更した.ここまではよいのだが,実行しようとすると,以下のエラーになってしまう.

image

どうもよくわからない.ipchというフォルダだけ付け替えることが必要なのだろうか?とりあえず,戻してみよう.今度は起動時にC:\.vsを使うと適切だというプロンプトが出た.多分これでいけるようになるのではないかと思う.⇒ipchフォルダを削除しても大丈夫かどうか確認しておこう.ipchフォルダを削除したら,今度はBrowse.VC.dbを格納する安全な場所が見つかったという報告が出た.このファイルは53MBでそれほど大きくはないが,これも削除してみよう.⇒これでソリューションのサイズは88MBまで縮小した.

S5の部分群分解で現在の出力は,■群S5は155個の真部分群を持つ■ 位数2X25 位数3X10 位数4X35 位数5X6 位数6X30 位数8X15 位数10X6 位数12X15 位数20X6 位数24X5 位数60X1,経過時間=0:4:5.612 同一と認められた部分群=1084 Z=0 経過時間は4分まで短縮された.冗長な処理のカットがある程度効いている.新部分群数は155でこれには単位群を含み,全体群S5は含まれない.同一部分群1084というのは位数60の部分群のことで,全体ではもっとずっと大きな数(3268)になる.

現行方式ではおそらくこれくらいが限度なのではないかと思う.ここで少し方角を変えて,極大部分群というのを抽出してみたい.検定3では極小な部分群を抽出しているが,この処理ではループを1回回っているだけなので,ほとんどあっという間に終わっている.同様のことが極大部分群でも実現できれば.大きなメリットがある.実行時間には大きい位数の部分群の抽出で相当なロスタイムが出ているので,極大な部分群のセットが取り出せれば,その部分をカットすることでかなりの効率の向上を望むことができるだろう.

部分群検定3というのは現行では極小部分群の抽出に特化しているので,リネームしておくことにしよう.極小部分群の抽出とした.この関数は別の検定でも使われているので,その用法・用途に関しては後で点検することにして先に進もう.極小部分群の抽出では正規部分群は扱わないので,それに関係するような論理を削除して少し整理しておこう.⇒リリース版では4秒を切った.これなら1秒台にもリーチが掛かりそうだ.

どこか壊してしまったのだろうか?カウントが合わなくなった.⇒関数追加登録で正規部分群のフラグを見ていた.#154で位数2の素郡というのを表示した後,検定完了までに相当なブランクがある.この部分をカットできればおそらく半分の時間で完了できるだろう.

追加ゼロ検査で777件もヒットする

現行論理では素郡の合併時に不足するノードがあれば自動的に補充するようになっているが,もしかすると補充なしで充足している組み合わせが存在している可能性がある.その辺りを確認しておこう.⇒確かにそのようだ.N1+N2とG2.Nを比較するとある程度把握できる(N1とN2に元々重複が存在する場合があり得るので必ずしも正確な数字ではない).現在の検定6の仕様は大幅に改訂する必要があるような気がする.

アルゴリズムを変更して,素郡の合併だけで群が生成可能であるか否かを見ることにしたい.ただし,枝の追加は不可避と考えられるので,認めることにする.既存関数に部分群の生成というのがある.以前はこの関数では実際に部分群を生成していたのだが,現行版では検査をするだけの作りになっている.部分群検定4ではこの関数を使って検定を実施している.また,部分群複合関数の中でもこの関数が呼ばれている.部分群検定5はこの部分群複合が基本関数となっている.

検定4,検定5でも部分群分解はできたはずだが,廃止されたのは時間が掛かり過ぎるという理由からだ.(検定4ではすべての部分群を列挙できなかったかもしれない…)その意味では回収したとしても単なる手戻りになってしまう可能性がある.確かに,今のところもっとも効率的なアルゴリズムは検定6であり,そこからの後退は許されない.現行の検定6では積極的に部分群を構成しているため作業が進むところが利点だ.

部分群検定3は検定5と6の前処理として使われる.これは元のべきから部分群を生成する手続きで,重複を弾くために同一元集合検査を実施している.⇒現行論理,つまり検定6のままで部分群を実際に生成する前に部分群の元集合の検査を実施すればよいのではないか?部分群の生成という関数名は誤解され易いので,元集合の検査とリネームしておこう.どうも,どこかでミスっているのだろうか?元集合の合併を実行後,元集合の検査を通すと100%失格しているのだが,事後に追加ゼロ検査を実施すると,777件もヒットする.これはどういうことだろう?

大分整ってきたが,表示に不揃いな点がある

大分整ってきたのではないかと思う.表示でまだ不揃いな点がある.部分群のダンプでは〈(),()〉のような表記になっているが,検定時には〈3〉群〈(24)〉のように表記している行と, 群〈5,12〉のような表記が入り混じっている.⇒群で始まるときには,〈2, 5〉のような表記を標準とする.その後に,詳細として〈(14)(23)〉のような表記を置くのは任意とする.部分群のダンプでは,登録された情報からは群〈5,12〉のような数字を取り出すことができない.部分群生成元には置換の積の形式の情報しか格納されないからだ.まぁ,これは仕方ないだろう.⇒部分群のダンプと検定時出力がまったく一致しない.

これはかなりおかしい.そもそもカウントが合っていない.部分群のダンプの方が1つ少ない.部分群のダンプ:S4 N=24 素群数=24 部分群数=16 というものおかしい.素群数<部分群数のはずだ.部分群検定3の出口では部分群数=16を素群数に転記しているだけだ.素群数はこの場所以外では更新されない.プリント文にミスがあった.「カウントが合っていない」というのは,部分群のダンプは0発進,検定時出力は1発進になっているためだ.どちらかに統一する必要がある.分かり易いのはリストに単位群を追加することではないだろうか?そうすれば,インデックスを直接表示できる.

ただし,この場合一つだけ問題がある.単位群を追加するとすれば群全体も部分群として登録しないと数が合わなくなってくる.これまでは「自明の部分群を除く」と説明してきたが,「自明の部分群のうち単位群を含む」ではやや苦しい.一つの釈明として「真部分群」という言い方をしているので,これなら群全体を除外しても差し支えないと言えるかもしれない.それが最適解であるような気がする.全体群を生成する素群集合というのも知りたいのだが,その計算をしていると処理時間が無闇に長くなってしまうという弊害がある.⇒部分集合と部分群生成元の先頭に単位元を入れた.

部分群のダンプと検定時出力がまった一致しない.なぜだろう?事後に書き直しなどしていないはずなのだが… いや,勘違いしていた.検定時のダンプは部分群リスト順になっている訳ではない.実際,終盤になってから素群が現れることもある.

部分群検定6をテストする

部分群検定のアルゴリズムを書換えて部分群検定6とした.検定6では素群リストをベースにその「積」を計算し,必要なノードを補充して合成群を生成→部分群リストに追加→検定の自動延長→部分群の追加がなくなるまでこれを反復という動作になっている.A5はほぼ15秒程度で完了するが,S5では15分掛かっている.A5の十倍だ.S5の部分群でもっとも大きいのは位数60のA5だが,この素性を見ておこう.

(32)〈3,22〉群:{e,3,4,30,48,51,89,42,116,115,34,71,73,77,63,46,108,111,112,37,93,52,74,38, 41,85,100,68,67,99,45,33,64,96,90,94,60,12,8,7,11,19,23,20,15,16,78,56,55,59, 103,107,104,81,82,26,25,29,119,86,}は位数60のS5の合成群である

A5の生成元は置換#3と#22で,置換リストで見ると,

置換リスト(3) →        {1,2,4,5,3,}  →        (3 4 5)
置換リスト(22) →       {1,5,4,2,3,}  →        (2 5 3 4)

FKさんのコメントによると,A5の生成元は[[(2,4),(3,5)], [(1,2,5)]]のようになっている.この違いはどこから出てきているのだろう?

置換リスト(16) →       {1,4,5,2,3,}  →        (2 4)(3 5)
置換リスト(45) →       {2,5,3,4,1,}  →        (1 2 5)

これで見ると,〈16, 45〉でA5が生成できることになる.しかし,生成された部分群リストでは〈16〉から生成される群は以下の5つだけだ.

(96)〈16〉群{e,23,}は位数2のS5の素群である
(97)〈16,18〉群:{e,23,25,41,85,100,68,60,82,111,}は位数10のS5の合成群である
(98)〈16,19〉群:{e,23,26,45,99,107,}は位数6のS5の合成群である
(99)〈16,21〉群:{e,23,29,33,64,96,90,86,55,119,}は位数10のS5の合成群である
(100)〈16,42〉群:{e,23,56,78,94,67,}は位数6のS5の合成群である

〈3,22〉と〈16, 45〉は同型というよりは,同一と見るべきだろう.重複検査を行っているところで情報を出せるようにしてみよう.⇒結構難しい.置換に関しては置換プリントで取り出すことができるが,ループカウンタが違う.検定では部分群リストであり,そこから直接置換番号にアクセスすることはできない.部分群を生成するところで置換番号を記録できるのではないか?ないし,置換そのものを群の名称にしてしまうことも考えられる.置換群はPという置換クラスの変数を持っている.

しかし,部分群リストには部分群そのものは登録されていない.台集合が記載されているだけだ.⇒2つの部分群が一致した場合にダンプするように改変したのだが,むしろ速くなった.6分23秒で完了している.というか,これは,実際にはループの半分をカットした効果だが…

■群S5は154個の真部分群を持つ■位数2X25 位数3X10 位数4X35 位数5X6 位数6X30 位数8X15 位数10X6 位数12X15 位数20X6 位数24X5 位数60X1
経過時間=0:6:28.352

どうもどこかに整合していないところがあるような気がする.一度整理してみよう.部分群の生成では,①置換リスト,②部分集合,③部分群生成元という3つのテーブルを使っている.①は親群を生成するときに用いた置換のリストで,(1)置換番号(0発進,単位元を含む),(2)置換(全単射),(3)巡回置換の積表現の3項目からなっている.②は2次元配列で,部分群の元集合を生成順に格納したもの,③は部分群生成時の生成元のリストであり,②の部分集合の生成順に格納されている.②と③には単位群は含まれていない.

部分群は生成元を特定するために,置換リストを用いて置換を決定し,それから取り出した置換積を部分群の生成元として割り当てている.これは置換.置換プリントによって置換リストから取り出された値である.部分群が2つの素群から合成される場合には,部分群生成元から取り出された素群の生成元を連結して新たな部分群の生成元としている.いま注目している位数60のS5の部分群は,〈2,21〉なので部分群[2]と部分群[21]から合成されたものと推定される.

部分群[2]は{e, 3, 4},部分群[21]は{e, 30, 48}でそれぞれ,(45), (123)を生成元としているから,位数60の生成元は(345), (123)でなくてはならない.(345)は置換リストでは#3,(123)は#30だが,これらは元の番号であり,部分群の番号ではないことに注意する必要がある.位数60の部分群が生成されたときには停止するようにしてみた.

★群(1 2 5),(2 3)(4 5),(2 4)(3 5)と群(3 4 5),(1 2 3)は一致する.

というのが出てきた.

★群(2 4)(3 5),(1 2 3)と群(3 4 5),(1 2 3)は一致する★

というのもある.見つかった!

★群(2 4)(3 5),(1 2 5)と群(3 4 5),(1 2 3)は一致する★

これが,FK氏の言うA5の生成元集合だ.

▲おかしな行が出てきた.

(109)〈22〉()位数3のS5の素群である

()の中が空なのはなぜだろう?⇒ミスタイプで消してしまったようだ.

(109)〈22〉群(1 2 3)は位数3のS5の素群である

アルゴリズムを変更してA5の部分群生成を15秒で完了した

部分群検定の代わりに部分群検定3(生成元により素群を生成する)を使うことで位数2×9, 位数3×8,位数4×6に変化した.位数3の部分群は4個なので多分重複が発生している.これを削減するかないし抑制しなくてはならない.⇒確かに{e,3,4}と{e,4,3}など順序が異なるだけの同一集合が4組ある.しかし,重複を排除しようとすると,■群S4は16個の部分群を持つ合成群である■位数2X7 位数3X4 位数4X3 飽和=0のように今度は不足してしまう.

見たところ重複が発生するのは位数2の場合に限定されているようにも思われる.しかし,そう断定するのは難しい.やはり,重複を検査するしかないのではないだろうか?とりあえず,ソートしないで直接比較するルーチンを作ってみよう.HasSameElementsという関数を作った.⇒これで以下のように変化した.■群S4は18個の部分群を持つ合成群である■位数2X9 位数3X4 位数4X3 飽和=0 位数4は実際には7個だが,この段階では検出できない.

最終出力は■群S4は28個の部分群を持つ■位数2X9 位数3X4 位数4X7 位数6X4 位数8X3 位数12X1のようになった.⇒一つ問題がある.部分群検定3で生成される素群は必ずしも排他的ではない可能性が出てきた.部分群検定5はすべての素群が排他的(単位元を除き直和)であることを仮定しているので,不整合が発生する可能性があるのではないか?S4の場合,1を含む素群は5個ある.{e,1,},{e,1,14,15,20,21,},{e,1,6,16,17,7,22,23,},{e,1,6,7,},{e,1,2,3,4,5,}

いや,これらの中で素群となるのは{e,1,}だけだ.素群は全部で16個あるが,これらの中には元が重複するものは存在していない.多分,素群にはノードの重複はないと言えるのではないかと思う.一応そういう仮定で進めることにしよう.いや,やはり重複はある.{e,7,}と{e,17,7,22,}では7が重複している.13も{e,10,23,13,}で重複し,16は{e,9,16,18,}で重複する.改訂版の動作をA5で確認してみよう.⇒素群は31個生成されているので,多分同じ動作になるだろう.ただし,現行論理では完了までに2時間掛かる!

A5の素群にはS4の場合と異なり,元の重複は存在していない.⇒重複があったとしても追加登録関数で弾いているので,実質的な障害にはならない.素群生成時にも追加登録関数は使われているので,ノードのダブりが生じる可能性はないとしてよい.これでいよいよ部分群検定の高速化に入れるのではないか?

一番分かりやすいのは素群SとS’から合成群SxS’を生成するという方法だろう.ただし,このとき不足するノードが発生するのでそれを注入する必要が生じる.これができれば多分相当高速なアルゴリズムになると思う.生成された素群数をsとすれば,現行の検定5では2^sのケースが発生するのに対し,s^2のコストでほぼ検定が完了するのではないかと思う.この再検定で生成された合成群に関してはさらに追検定が必要になる可能性はあるが,おそらくほとんどの場合は(なんらかの理由で)不用になるのではないかと思う.

位数最大となる極大な部分群の位数が分かれば,それだけでも計算コストは劇的に削減可能となるのだが… ⇒極大な部分群の最大位数を求める公式は得られていないので,最大部分群=12に固定して検定を実施したところ,20秒以内で完了した.確かに効果はある.

■群A5は57個の真部分群を持つ■位数2X15 位数3X10 位数4X5 位数5X6 位数6X10 位数10X6 位数12X5
経過時間=0:0:14.39

「素群分解」ができなければ話にならない

A5の部分群は出せるようになったが,S4で失敗している.30個あるはずのところ,19個しか抽出できていない.素群は16個で内訳は2×7, 3×4, 4×3になっているのだが…この16には自明な群2も含まれているから,実際は14個だ.明大数学科サイトの記述によれば,S4は位数1×1, 2×9(6+3), 3×4, 4×7(3+3+1), 6×4, 8×3, 12×1, 24×1で合計30となっている.おそらく,位数2の部分群が不足しているのだろう.{e,(12)(34)}のタイプの部分群は1個しか拾い出せていないが,実際には後2つ,{e,(13)(24)}, {e,(14)(23)}が出てこなくてはならない.

https://www.isc.meiji.ac.jp/~kurano/soturon/ronbun/08kurano.pdf

これは再分解しないと取れない部分群だ.これらは位数4の部分群を分解することで生じる.しかし,現行アルゴリズムでは{e,(1234),(13)(24),(1432)}を分解して{e,(13)(24)}を取り出すことができない.処理手順が同じであるため,まったく同じ群が再生成されている.結局,現行アルゴリズムには欠陥があるということになる.これを避けるためには,すでに使用されているか否かに関わりなく個別に生成を試みるしかないように思われるのだが,そうなると,重複の問題が発生する.

位相同型を検査するという大げさなことを言わなくても,単純に台集合を比較すればよいというだけの話ではないか?だとすれば,それほどのコストが掛かるというものでもないと思われる.しかし,配列を比較するとしても,少なくともソートしてからでなくては比較にならないのではないか?それほど大きな配列ではないので,それもそれほどのコスト増にはならないかもしれないが…ともかく「素群分解」ができなければ話にならない.部分群検定から書き直すしかない.

昨日仕掛けた部分群の合成が完了していた

昨日仕掛けたA5の部分群の合成が完了していた.■群A5は26個の合成部分群を持つ■位数4X5 位数6X10 位数10X6 位数12X5と出力されている.素群の位数2×15,位数3×10,位数5×6の31個と合わせて,31+26=57,これに自明部分群の2個を追加して59個になった.動作的にはこれで完全だ.アプリケーションのタイトルを「アリアドネの糸巻き」とし,アイコンを変更した.

image

画面に出すとかなり赤っぽく見えてしまうのだが,まあ,よしとしておこう.ともかく,部分群検定5を高速化しなくてはならない.できるところからやってみよう.まず,元集合のインスタンスを1個にして使い回すようにしておこう.⇒対処した.ついで,部分集合[]を前詰めして,2^60を2^31で片付けられるようにしてみる.⇒これで1,152,921,504,606,846,976ケースから2,147,483,648まで削減できるはずなので,相当な時間短縮になると予測していたのだが,どうも思ったほどの効果が出ていない.すでに開始してから210分(3時間半)以上経過しているが,終わりそうもない.

200万ケースの中で実際の部分群になるのは60件程度だから,時間の大半は検査のために費やされていることになる.どこでそんなに時間を使っているのだろう?どうも埒が明かないので一旦打ち切ることにしよう.⇒部分群複合で元数がオーバーしていないことをチェックしてから集合の合併を実行するようにして,かなり速くなった.

これならそこそこの時間で完了するのではないか?⇒どうもまだネックがあるようだ.⇒いや,最後のところで少し時間が掛かっているが,終わった.3分は掛かっていない.⇒いや,ダメだ.■群A5は1995個の合成部分群を持つ■位数4X5 位数6X1990というデタラメな数字になっている.論理を戻してて正常動作するようになった.

部分群複合では部分群の生成で部分群を実際に生成しているが,有効な群であるか否かを見ているだけなので,群の生成は省略できる.⇒多少は軽くなったはずだが,大勢は変わらない.14分で20個くらいしか生成できていない.どこか壊してしまったのだろうか?位数12が出なくなってしまった.A4は正しい答えが出るが,S4では間違っている.そもそも素群の切り出しに失敗しているように思われる.


部分群を列挙する問題は思ったより難しい

部分群を列挙する問題は思ったより難しい.部分群検定で生成される部分群は極小な部分群であると言えると思われるが,すべての部分群がこれら極小な部分群(以下では素群と呼ぶ)から合成可能であるか否かは不明である.というか,その組み合わせを見つけるのは中々困難だ.A5の場合の素群は位数2×15,位数3×10,位数5×6の31個で,これら部分群の元集合はA5の台集合を(単位元を除いて)直和に分割している.

確かに,(2-1)x15+(3-1)x10+(5-1)x6 = 1×15+2×10+4×6 = 15+20+24=59で完全に|A5|-1=60-1と一致している.つまり,どの部分群も単位元を除いては共通元を持たない.部分群検定で生成された部分群の台集合をシードごとに保管するようにしてみよう.⇒クラス群の中にstring[][] 部分集合を追加した.こんな感じのダンプになった.

i=1 {e,1,2,}
i=2
i=3 {e,3,}
i=4 {e,4,6,}
i=5 {e,5,9,}
i=6
i=7 {e,7,10,}
i=8 {e,8,}
i=9
i=10
i=11 {e,11,}
i=12 {e,12,}
i=13 {e,13,}
i=14 {e,14,}
i=15 {e,15,24,}
i=16 {e,16,32,48,45,}
i=17 {e,17,35,36,57,}
i=18 {e,18,46,26,56,}
i=19 {e,19,37,}
i=20 {e,20,42,50,34,}
i=21 {e,21,58,25,44,}
i=22 {e,22,49,}
i=23 {e,23,54,38,31,}
i=24
i=25
i=26
i=27 {e,27,}
i=28 {e,28,39,}
i=29 {e,29,51,}
i=30 {e,30,}
i=31
i=32
i=33 {e,33,}
i=34
i=35
i=36
i=37
i=38
i=39
i=40 {e,40,52,}
i=41 {e,41,}
i=42
i=43 {e,43,}
i=44
i=45
i=46
i=47 {e,47,}
i=48
i=49
i=50
i=51
i=52
i=53 {e,53,}
i=54
i=55 {e,55,}
i=56
i=57
i=58
i=59 {e,59,}

あとはこれを組み合わせて合成群を作るだけだ.⇒いや,素群2つでは部分群は構成できない.必ず元の補充が必要になる.つまり,3つ以上の素群を合わせなければ部分群を構成することは不可能と考えられる.少なくとも位数4の部分群は3つの素群から構成できる.次の作業に入る前に,A5の部分群を素群に分解できることを確認しておいた方がよい.

A5の位数4の部分群を生成する

部分群検定3では,59+2=61個の部分群が生成されるが,そのうちのかなりの個数は同型というより,おそらく同一と思われるので重複検査を導入してこれらを弾いてみよう.⇒これで生成される部分群の個数は33個まで減少した.■群A5は33個の部分群を持つ合成群である■位数2X15 位数3X10 位数5X6 飽和=0 これは,既存の部分群検定の出力とまったく同じだ.つまり,xのべきを追加登録するという方式はもっと単純な方式とまったく等価ということになる.別の言い方をすれば,部分群検定≡部分群検定3と言ってよい.

位数2x15,位数3x10,位数5x6まではGAPの出力と一致している.出てこないのは位数4x5,位数6x10,位数10x6,位数12x5の4種だ.部分群検定2のノード対を含めるという方式では,現状■群A5は135個の部分群を持つ合成群である■位数2X16 位数3X21 位数5X25 位数6X4 位数10X3 位数12X64 飽和=58.このカウントにはシードが1個だけの場合が含まれている.A5の位数4の部分群{e,(12)(34),(13)(24),(14)(23)}を見てみよう.

#0 → {1,2,3,4,5,}  →  ()
#13 → {2,1,4,3,5,}  →  (1 2)(3 4)
#30 → {3,4,1,2,5,}  →  (1 3)(2 4)
#43 → {4,3,2,1,5,}  →  (1 4)(2 3)

なので,この群を生成してみよう.いや,置換の集合から群を直接生成するような関数はまだ作っていない.現行では置換というクラスはあるが,全,偶,奇の3つのパターンしかサポートしていない.元の集合を与えて親グループから直接生成するというのが手っ取り早いのではないか?⇒部分群の生成という関数を作ってみた.以下が出力された.

群A5-4の台集合 ={e,13,30,43,}
e→     e, 13, 30, 43,
13→    13, e, 43, 30,
30→    30, 43, e, 13,
43→    43, 30, 13, e,

これは見たところV4と同型であるように見える.つまり,13, 30, 43という3つのシードが揃わないとC4は生成できない.A5には位数2の単純群が15個ある.C4はこれらを3個合体させたものだが,位相4の部分群は5個しかない.いや,15÷3=5で数字は完全にあっている.あとは,どういう組み合わせが可能かを調べればよいだけだ.位数6,10,12も調べてみよう.位相10の場合:

<[(1,3),(4,5)], [(1,4),(2,3)]>

[(),
(1,5,4,3,2),
(1,4,2,5,3),
(1,3,5,2,4),
(1,2,3,4,5),
(2,5)(3,4),
(1,5)(2,4),
(1,4)(2,3),
(1,3)(4,5),
(1,2)(3,5)]

位数10:6

これは,{e. 11, 14, 16, 27, 32, 43, 45, 48, 59}に等しい..

群A5-10の台集合 ={e,11,14,16,27,32,43,45,48,59,}
e→     e, 11, 14, 16, 27, 32, 43, 45, 48, 59,
11→    11, e, 16, 14, 32, 27, 45, 43, 59, 48,
14→    14, 48, e, 27, 16, 43, 32, 59, 11, 45,
16→    16, 59, 11, 32, 14, 45, 27, 48, e, 43,
27→    27, 45, 48, 43, e, 59, 16, 11, 14, 32,
32→    32, 43, 59, 45, 11, 48, 14, e, 16, 27,
43→    43, 32, 45, 59, 48, 11, e, 14, 27, 16,
45→    45, 27, 43, 48, 59, e, 11, 16, 32, 14,
48→    48, 14, 27, e, 43, 16, 59, 32, 45, 11,
59→    59, 16, 32, 11, 45, 14, 48, 27, 43, e,

この中で,11, 14, 27, 43は位数2の元と思われる.#27=(13)(45),#43=(14, 23)で生成集合に入っている.#11=(25)(34),#14=(12)(35)は生成集合には含まれていない.