A4の部分群を既成ツールを使って出力する

先に進む前に,A4の部分群を既成ツールを使って出しておこうとしたのだが,例外が発生する.Printでエラーを出している.2023/09/14のログによると「A4の置換リストを保持しようとすると,479001600x12xStringのサイズを持つ配列を用意しなくてはならない… OutOfMemory例外が起きてしまう」とあり,「置換リストを使わない」というオプションを設置している.

▲C#のPermuteで配列の長さ不足エラーが発生する.

image

array.CopyTo(Form1.Homo.map.map1, 1); をインデックス1から開始しているためだ.コピー元はarrayでコピー先は常設のHomoという準同型クラスオブジェクトの写像.map1だ.写像は0発進になっていたような気もするのだが…他の部分を見ても写像は0発進となっているように思われる.仮修正として写像のコンストラクタでmap1/2を1だけ長くしてみよう.おかしい.長さが増えていない.どうも,この「置換リストを使わない」というオプションは仕掛りのまま放置になっていたように思われる.⇒仮修正の妥当性をチェックする必要がある

置換関数の中で「置換リストを使わない」という分岐中で置換リストにアクセスしているというのはかなりおかしい.いや,置換リストの最初の1項目だけは使っているのかもしれない.置換リストはクラス置換のメンバーオブジェクトだ.置換リストは,①全単射の生成,②置換の生成の2箇所で生成されている.Permuteでは「置換リストを使わない」ときは,ArrayListの先頭しか生成しないようになっているはずだ.おそらく,「置換リストを使わない」は行列同型検定のときのみ適用することを予定していたのではないだろうか?

実際,自己同型検定は現状ではN<5であるか,ないし置換リストを使わないモードでないと動作しないようになっている.置換::id[]というのは,群の台集合のようなものなのではないだろうか?いずれにしても,置換リストがないと置換群は生成不能であるようだ.行列同型判定にELSIEを使おうとしていたので,群についての興味は薄くなっていたものと思われる.何か方法はあるだろうか?

おかしい.S4の部分群検定は動作している.S4が通っって,A4が通らないというのは妙だ.parityが非ゼロのときには,IsPermutationEvenが実行される.この中で落ちている.少なくともC#に移ってからは偶置換はテストされていないようだ.ただし,VBでは実施していたはずだ.VBでは通っていたものが通らなくなっているのだろうか?⇒IsPermutationEvenに入る前に落ちている.

IsPermutationEven((string[])list[0], array, size);

C#に移行した時点では, IsPermutationEven(ArrayList list, string[] array, int n)のような構文で動いていたのを修正している.従来論理ではIsPermutationEvenの冒頭で,if (list.Count < 1) return result;としていたので,問題は発生しなかった.元の論理に戻して動作するようになった.とりあえず,A4程度なら置換リストを使っても問題なく動作している.A5を試してみよう.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA