SageMath でマシュー群 M23 の共役類を調べる

# 初めに

使用する SageMath バージョンは `10.1` です。

```
[ec2-user@ip-172-31-34-73 ~]$ docker run -it sagemath/sagemath:10.1 /bin/bash
sage@f03aaf5b10c4:~$ sage
  ***   Warning: not enough memory, new PARI stack 536870912
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
| SageMath version 10.1, Release Date: 2023-08-20               |
| Using Python 3.11.1. Type "help()" for help.                  | 
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
sage:
```

ここでは以下の Docker イメージ使用しています。

https://hub.docker.com/r/sagemath/sagemath

---

# M23を定義する

```
sage: G = MathieuGroup(23)
sage: G
Mathieu group of degree 23 and order 10200960 as a permutation group
```

https://doc.sagemath.org/html/en/reference/groups/sage/groups/perm_gps/permgroup_named.html#sage.groups.perm_gps.permgroup_named.MathieuGroup

---

# 共役類の代表元を表示する

```
sage: G.conjugacy_classes_representatives()
[(),
 (1,7,19,4,18)(2,10,3,5,15)(6,13,14,16,20)(9,17,11,21,23),
 (1,5,13)(2,16,19)(3,6,18)(4,10,20)(7,15,14)(8,22,12),
 (1,14,2,4,6,5,7,16,10,18,13,15,19,20,3)(8,12,22)(9,17,11,21,23),
 (1,15,16,4,3,13,7,2,20,18,5,14,19,10,6)(8,22,12)(9,17,11,21,23),
 (1,10)(2,16)(4,15)(5,14)(6,23)(7,9)(17,18)(19,22),
 (1,9,10,7)(2,15,16,4)(5,6,14,23)(11,20)(12,21)(17,19,18,22),
 (1,15,9,16,10,4,7,2)(3,13)(5,18,6,22,14,17,23,19)(11,12,20,21),
 (1,23,5,6,10,9,7)(2,12,3,8,18,4,20)(11,13,17,21,16,15,22),
 (1,7,9,10,6,5,23)(2,20,4,18,8,3,12)(11,22,15,16,21,17,13),
 (1,3,5,18,10,20,7,12,23,8,6,4,9,2)(11,13,17,21,16,15,22)(14,19),
 (1,18,7,8,9,3,10,12,6,2,5,20,23,4)(11,21,22,17,15,13,16)(14,19),
 (1,10,9,21,15,11)(2,20,4,19,8,3)(6,7,13)(12,18)(14,22)(16,23,17),
 (1,21,17,14,9,11,23,6,10,8,2)(3,20,4,13,18,19,15,22,12,7,5),
 (1,2,8,10,6,23,11,9,14,17,21)(3,5,7,12,22,15,19,18,13,4,20),
 (1,2,13,23,5,16,20,6,9,21,15,3,12,10,22,8,7,4,19,17,14,11,18),
 (1,18,11,14,17,19,4,7,8,22,10,12,3,15,21,9,6,20,16,5,23,13,2)]
```

https://doc.sagemath.org/html/en/constructions/groups.html#conjugacy-classes

---

# 代表元のサイクルタイプを調べる

```
sage: [r.cycle_type() for r in G.conjugacy_classes_representatives()]
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [5, 5, 5, 5, 1, 1, 1],
 [3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1],
 [15, 5, 3],
 [15, 5, 3],
 [2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1],
 [4, 4, 4, 4, 2, 2, 1, 1, 1],
 [8, 8, 4, 2, 1],
 [7, 7, 7, 1, 1],
 [7, 7, 7, 1, 1],
 [14, 7, 2],
 [14, 7, 2],
 [6, 6, 3, 3, 2, 2, 1],
 [11, 11, 1],
 [11, 11, 1],
 [23],
 [23]]
```

https://doc.sagemath.org/html/en/reference/groups/sage/groups/perm_gps/permgroup_element.html#sage.groups.perm_gps.permgroup_element.PermutationGroupElement.cycle_type

---

# 共役類の位数を調べる

```
sage: [conj.cardinality() for conj in G.conjugacy_classes()]
[1,
 680064,
 56672,
 680064,
 680064,
 3795,
 318780,
 1275120,
 728640,
 728640,
 728640,
 728640,
 850080,
 927360,
 927360,
 443520,
 443520]
```

https://doc.sagemath.org/html/en/reference/groups/sage/groups/conjugacy_classes.html#sage.groups.conjugacy_classes.ConjugacyClassGAP.cardinality

---

# 代表元とサイクルタイプと共役類の位数を表示する

```
sage: conj_dict = [
....:     {
....:         'representative': conj.representative(),
....:         'cycleType': conj.representative().cycle_type(),
....:         'order': conj.cardinality()
....:     }
....:     for conj in G.conjugacy_classes()
....: ]
sage: for conj in conj_dict:
....:     print(conj)
....:
{'representative': (), 'cycleType': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'order': 1}
{'representative': (1,7,19,4,18)(2,10,3,5,15)(6,13,14,16,20)(9,17,11,21,23), 'cycleType': [5, 5, 5, 5, 1, 1, 1], 'order': 680064}
{'representative': (1,5,13)(2,16,19)(3,6,18)(4,10,20)(7,15,14)(8,22,12), 'cycleType': [3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1], 'order': 56672}
{'representative': (1,14,2,4,6,5,7,16,10,18,13,15,19,20,3)(8,12,22)(9,17,11,21,23), 'cycleType': [15, 5, 3], 'order': 680064}
{'representative': (1,15,16,4,3,13,7,2,20,18,5,14,19,10,6)(8,22,12)(9,17,11,21,23), 'cycleType': [15, 5, 3], 'order': 680064}
{'representative': (1,10)(2,16)(4,15)(5,14)(6,23)(7,9)(17,18)(19,22), 'cycleType': [2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1], 'order': 3795}
{'representative': (1,9,10,7)(2,15,16,4)(5,6,14,23)(11,20)(12,21)(17,19,18,22), 'cycleType': [4, 4, 4, 4, 2, 2, 1, 1, 1], 'order': 318780}
{'representative': (1,15,9,16,10,4,7,2)(3,13)(5,18,6,22,14,17,23,19)(11,12,20,21), 'cycleType': [8, 8, 4, 2, 1], 'order': 1275120}
{'representative': (1,23,5,6,10,9,7)(2,12,3,8,18,4,20)(11,13,17,21,16,15,22), 'cycleType': [7, 7, 7, 1, 1], 'order': 728640}
{'representative': (1,7,9,10,6,5,23)(2,20,4,18,8,3,12)(11,22,15,16,21,17,13), 'cycleType': [7, 7, 7, 1, 1], 'order': 728640}
{'representative': (1,3,5,18,10,20,7,12,23,8,6,4,9,2)(11,13,17,21,16,15,22)(14,19), 'cycleType': [14, 7, 2], 'order': 728640}
{'representative': (1,18,7,8,9,3,10,12,6,2,5,20,23,4)(11,21,22,17,15,13,16)(14,19), 'cycleType': [14, 7, 2], 'order': 728640}
{'representative': (1,10,9,21,15,11)(2,20,4,19,8,3)(6,7,13)(12,18)(14,22)(16,23,17), 'cycleType': [6, 6, 3, 3, 2, 2, 1], 'order': 850080}
{'representative': (1,21,17,14,9,11,23,6,10,8,2)(3,20,4,13,18,19,15,22,12,7,5), 'cycleType': [11, 11, 1], 'order': 927360}
{'representative': (1,2,8,10,6,23,11,9,14,17,21)(3,5,7,12,22,15,19,18,13,4,20), 'cycleType': [11, 11, 1], 'order': 927360}
{'representative': (1,2,13,23,5,16,20,6,9,21,15,3,12,10,22,8,7,4,19,17,14,11,18), 'cycleType': [23], 'order': 443520}
{'representative': (1,18,11,14,17,19,4,7,8,22,10,12,3,15,21,9,6,20,16,5,23,13,2), 'cycleType': [23], 'order': 443520}
```