群组

置换群

置换群是某个对称群的子群 \(S_n\) 。Sage有一个Python类 PermutationGroup ,因此您可以直接与这样的组合作:

sage: G = PermutationGroup(['(1,2,3)(4,5)'])
sage: G
Permutation Group with generators [(1,2,3)(4,5)]
sage: g = G.gens()[0]; g
(1,2,3)(4,5)
sage: g*g
(1,3,2)
sage: G = PermutationGroup(['(1,2,3)'])
sage: g = G.gens()[0]; g
(1,2,3)
sage: g.order()
3

以魔方群为例(一个排列子群 \(S_{48}\) ,其中标记了魔方的非中心面 \(1,2,...,48\) 以某种固定方式),您可以使用GAP-Sage接口,如下所示。

sage: cube = "cubegp := Group(
( 1, 3, 8, 6)( 2, 5, 7, 4)( 9,33,25,17)(10,34,26,18)(11,35,27,19),
( 9,11,16,14)(10,13,15,12)( 1,17,41,40)( 4,20,44,37)( 6,22,46,35),
(17,19,24,22)(18,21,23,20)( 6,25,43,16)( 7,28,42,13)( 8,30,41,11),
(25,27,32,30)(26,29,31,28)( 3,38,43,19)( 5,36,45,21)( 8,33,48,24),
(33,35,40,38)(34,37,39,36)( 3, 9,46,32)( 2,12,47,29)( 1,14,48,27),
(41,43,48,46)(42,45,47,44)(14,22,30,38)(15,23,31,39)(16,24,32,40) )"
sage: gap(cube)
'permutation group with 6 generators'
sage: gap("Size(cubegp)")
43252003274489856000'

您可以选择另一种方式来完成此操作:

  • 创建文件 cubegroup.py 包含以下行::

    cube = "cubegp := Group(
    ( 1, 3, 8, 6)( 2, 5, 7, 4)( 9,33,25,17)(10,34,26,18)(11,35,27,19),
    ( 9,11,16,14)(10,13,15,12)( 1,17,41,40)( 4,20,44,37)( 6,22,46,35),
    (17,19,24,22)(18,21,23,20)( 6,25,43,16)( 7,28,42,13)( 8,30,41,11),
    (25,27,32,30)(26,29,31,28)( 3,38,43,19)( 5,36,45,21)( 8,33,48,24),
    (33,35,40,38)(34,37,39,36)( 3, 9,46,32)( 2,12,47,29)( 1,14,48,27),
    (41,43,48,46)(42,45,47,44)(14,22,30,38)(15,23,31,39)(16,24,32,40) )"
    

    然后将该文件放在子目录中 $SAGE_ROOT/local/lib/python2.4/site-packages/sage 您的Sage主目录的。最后,读取(即, import )它变成了Sage:

    sage: import sage.cubegroup
    sage: sage.cubegroup.cube
    'cubegp := Group(( 1, 3, 8, 6)( 2, 5, 7, 4)( 9,33,25,17)(10,34,26,18)
    (11,35,27,19),( 9,11,16,14)(10,13,15,12)( 1,17,41,40)( 4,20,44,37)
    ( 6,22,46,35),(17,19,24,22)(18,21,23,20)( 6,25,43,16)( 7,28,42,13)
    ( 8,30,41,11),(25,27,32,30)(26,29,31,28)( 3,38,43,19)( 5,36,45,21)
    ( 8,33,48,24),(33,35,40,38)(34,37,39,36)( 3, 9,46,32)( 2,12,47,29)
    ( 1,14,48,27),(41,43,48,46)(42,45,47,44)(14,22,30,38)(15,23,31,39)
    (16,24,32,40) )'
    sage: gap(sage.cubegroup.cube)
    'permutation group with 6 generators'
    sage: gap("Size(cubegp)")
    '43252003274489856000'
    

    (您将在Sage输出中使用换行符,而不是上面的回车。)

  • 使用 CubeGroup 班级:

    sage: rubik = CubeGroup()
    sage: rubik
    The Rubik's cube group with generators R,L,F,B,U,D in SymmetricGroup(48).
    sage: rubik.order()
    43252003274489856000
    

    (1)已实施经典小组(如 \(GU(3,\GF{5})\) )和具有用户定义生成元的有限域上的矩阵群。

    (2)还实现了有限和无限(但有限生成)的交换群。

共轭类课程

您可以使用“Native”计算有限群的共轭类:

sage: G = PermutationGroup(['(1,2,3)', '(1,2)(3,4)', '(1,7)'])
sage: CG = G.conjugacy_classes_representatives()
sage: gamma = CG[2]
sage: CG; gamma
[(), (4,7), (3,4,7), (2,3)(4,7), (2,3,4,7), (1,2)(3,4,7), (1,2,3,4,7)]
(3,4,7)

您可以使用SAGE-GAP界面::

sage: gap.eval("G := Group((1,2)(3,4),(1,2,3))")
'Group([ (1,2)(3,4), (1,2,3) ])'
sage: gap.eval("CG := ConjugacyClasses(G)")
'[ ()^G, (2,3,4)^G, (2,4,3)^G, (1,2)(3,4)^G ]'
sage: gap.eval("gamma := CG[3]")
'(2,4,3)^G'
sage: gap.eval("g := Representative(gamma)")
'(2,4,3)'

或者,这里有另一种(更“ Python ”式的)方法来完成这种类型的计算:

sage: G = gap.Group('[(1,2,3), (1,2)(3,4), (1,7)]')
sage: CG = G.ConjugacyClasses()
sage: gamma = CG[2]
sage: g = gamma.Representative()
sage: CG; gamma; g
[ ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), () ),
  ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (4,7) ),
  ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (3,4,7) ),
  ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (2,3)(4,7) ),
  ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (2,3,4,7) ),
  ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (1,2)(3,4,7) ),
  ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (1,2,3,4,7) ) ]
ConjugacyClass( SymmetricGroup( [ 1, 2, 3, 4, 7 ] ), (4,7) )
(4,7)

正规子群

如果你想找出一个置换群的所有正规子群 \(G\) (直到结合),您可以使用Sage的接口来隔离::

sage: G = AlternatingGroup( 5 )
sage: gap(G).NormalSubgroups()
[ AlternatingGroup( [ 1 .. 5 ] ), Group( () ) ]

sage: G = gap("AlternatingGroup( 5 )")
sage: G.NormalSubgroups()
[ AlternatingGroup( [ 1 .. 5 ] ), Group( () ) ]

这是另一种方式,更直接地使用GAP::

sage: print(gap.eval("G := AlternatingGroup( 5 )"))
Alt( [ 1 .. 5 ] )
sage: print(gap.eval("normal := NormalSubgroups( G )"))
[ Alt( [ 1 .. 5 ] ), Group(()) ]
sage: G = gap.new("DihedralGroup( 10 )")
sage: G.NormalSubgroups().SortedList()
[ Group( <identity> of ... ), Group( [ f2 ] ), Group( [ f1, f2 ] ) ]
sage: print(gap.eval("G := SymmetricGroup( 4 )"))
Sym( [ 1 .. 4 ] )
sage: print(gap.eval("normal := NormalSubgroups( G );"))
[ Sym( [ 1 .. 4 ] ), Alt( [ 1 .. 4 ] ), Group([ (1,4)(2,3),  ... ]),
      Group(()) ]

中心

在Sage中,如何计算群的中心?

虽然Sage调用GAP进行群中心的计算, center 是“包装的”(即,Sage有一个具有关联类方法“Center”的类PermuationGroup),因此用户不需要使用 gap 指挥部。以下是一个示例:

sage: G = PermutationGroup(['(1,2,3)(4,5)', '(3,4)'])
sage: G.center()
Subgroup generated by [()] of (Permutation Group with generators [(3,4), (1,2,3)(4,5)])

矩阵组的类似语法也适用::

sage: G = SL(2, GF(5) )
sage: G.center()
Subgroup with 1 generators (
[4 0]
[0 4]
) of Special Linear Group of degree 2 over Finite Field of size 5
sage: G = PSL(2, 5 )
sage: G.center()
Subgroup generated by [()] of (The projective special linear group of degree 2 over Finite Field of size 5)

备注

center 在Gap中可以以任何一种方式拼写,在Sage中则不是这样。

组ID数据库

该功能 group_id 使用E·A·奥布莱恩、B·艾克和H·U·贝什的小组类库,这是GAP的一部分。

sage: G = PermutationGroup(['(1,2,3)(4,5)', '(3,4)'])
sage: G.order()
120
sage: G.group_id()
[120, 34]

使用小组数据库的另一个示例: group_id

sage: gap_console()
┌───────┐   GAP 4.10.0 of 01-Nov-2018
│  GAP  │   https://www.gap-system.org
└───────┘   Architecture: x86_64-pc-linux-gnu-default64
Configuration:  gmp 6.0.0, readline
Loading the library and packages ...
Packages:   GAPDoc 1.6.2, PrimGrp 3.3.2, SmallGrp 1.3, TransGrp 2.0.4
Try '??help' for help. See also '?copyright', '?cite' and '?authors'
gap> G:=Group((4,6,5)(7,8,9),(1,7,2,4,6,9,5,3));
Group([ (4,6,5)(7,8,9), (1,7,2,4,6,9,5,3) ])
gap> StructureDescription(G);
"(C3 x C3) : GL(2,3)"

每组少于32级的建造指示

作者:

  • 戴维斯·舒尔伯特

在Sage中,每个阶数小于32的群都被实现为置换群。它们都可以很容易地创建。我们将首先展示如何构建直积和半直积,然后给出构建所有这些小群所需的命令。

让我们 G1G2 、. Gn BE置换组已在Sage中初始化。下面的命令可以用来取它们的直积(当然,在这里,省略号只是用作记号,实际上您必须显式地输入所需乘积中的每个因数)。

sage: G = direct_product_permgroups([G1, G2, ..., Gn])

The semidirect product operation can be thought of as a generalization of the direct product operation. Given two groups, H and K, their semidirect product, H ltimes_{phi} K, (where phi : H rightarrow Aut(K) is a homomorphism) is a group whose underlying set is the cartersian product of H and K, but with the operation:

\[(h_1,k_1)(h_2,k_2)=(h_1h_2,k_1^{\phi(H_2)}k_2)。\]

输出不是运算定义中明确描述的群,而是置换的同构群。在下面的例程中,假设 HK 已经在Sage中定义和初始化。另外, phi 是包含两个子列表的列表,这两个子列表通过给出 H 。对于下表中的每个半直接产品,我们将向您展示如何构建 phi ,然后假设你已经读过这篇文章,并理解如何从那里开始。

sage: G = H.semidirect_product(K, phi)

为了避免不必要的重复,我们现在将给出一些命令,人们可以使用这些命令来创建阶循环群 nC_n ,和上的二面体群 n 信件, D_n 。我们将提供每个命令的另一个示例,以确保读者理解该命令,然后该命令将被扣留。

sage: G = CyclicPermutationGroup(n)

sage: G = DihedralGroup(n)

请注意,指数表示法将用于直接乘积运算。例如, {C_2}^2 = C_2 times C_2 。这张桌子是在 Group Tables ,AD Thomas和GV Wood(1980年,湿婆出版社)。

订单

组描述

司令部(S)

GAP ID

1

微不足道的一群

sage: G = SymmetricGroup(1)

[1,1]

2

C_2

sage: G = SymmetricGroup(2)

[2,1]

3

C_3

sage: G = CyclicPermutationGroup(3)

[3,1]

4

C_4

[4,1]

4

C_2 times C_2

sage: G = KleinFourGroup()

[4,2]

5

C_5

[5,1]

6

C_6

[6,2]

6

S_3 (由3个字母组成的对称组)

sage: G = SymmetricGroup(3)

[6,1]

7

C_7

[7,1]

8

C_8

[8,1]

8

C_4 times C_2

[8,2]

8

C_2times C_2times C_2

[8,5]

8

D_4

sage: G = DihedralGroup(4)

[8,3]

8

四元数群(Quaternion Group)

sage: G = QuaternionGroup()

[8,4]

9

C_9

[9,1]

9

C_3 times C_3

[9,2]

10

C_{10}

[10,2]

10

D_5

[10,1]

11

C_{11}

[11,1]

12

C_{12}

[12,2]

12

C_6 times C_2

[12,5]

12

D_6

[12,4]

12

A_4 (4个字母组成的交替组)

sage: G = AlternatingGroup(4)

[12,3]

12

Q_6 (12阶双循环群)

sage: G = DiCyclicGroup(3)

[12,1]

13

C_{13}

[13,1]

14

C_{14}

[14,2]

14

D_{7}

[14,1]

15

C_{15}

[15,1]

16

C_{16}

[16,1]

16

C_8 times C_2

[16,5]

16

C_4 times C_4

[16,2]

16

C_4times C_2times C_2

[16,10]

16

{C_2}^4

[16,14]

16

D_4 times C_2

[16,11]

16

Q times C_2

[16,12]

16

D_8

[16,7]

16

Q_{8} (16阶双循环群)

sage: G = DiCyclicGroup(4)

[16,9]

16

半面体阶群 2^4

sage: G = SemidihedralGroup(4)

[16,8]

16

阶次分裂亚循环群 2^4

sage: G = SplitMetacyclicGroup(2,4)

[16,6]

16

(C_4 times C_2) rtimes_{phi} C_2

sage: C2 = SymmetricGroup(2); C4 = CyclicPermutationGroup(4)
sage: A = direct_product_permgroups([C2,C4])
sage: alpha = PermutationGroupMorphism(A,A,[A.gens()[0],A.gens()[0]^2*A.gens()[1]])
sage: phi = [[(1,2)],[alpha]]

[16,13]

16

(C_4 times C_2) rtimes_{phi} C_2

sage: C2 = SymmetricGroup(2); C4 = CyclicPermutationGroup(4)
sage: A = direct_product_permgroups([C2,C4])
sage: alpha = PermutationGroupMorphism(A,A,[A.gens()[0]^3*A.gens()[1],A.gens()[1]])
sage: phi = [[(1,2)],[alpha]]

[16,3]

16

C_4 rtimes_{phi} C_4

sage: C4 = CyclicPermutationGroup(4)
sage: alpha = PermutationGroupMorphism(C4,C4,[C4.gen().inverse()])
sage: phi = [[(1,2,3,4)],[alpha]]

[16,4]

17

C_{17}

[17,1]

18

C_{18}

[18,2]

18

C_6 times C_3

[18,5]

18

D_9

[18,1]

18

S_3 times C_3

[18,3]

18

Dih(C_3 times C_3)

sage: G = GeneralDihedralGroup([3,3])

[18,4]

19

C_{19}

[19,1]

20

C_{20}

[20,2]

20

C_{10} times C_2

[20,5]

20

D_{10}

[20,4]

20

Q_{10} (阶数为20的双环群)

[20,1]

20

Hol(C_5)

sage: C5 = CyclicPermutationGroup(5)
sage: G = C5.holomorph()

[20,3]

21

C_{21}

[21,2]

21

C_7 rtimes_{phi} C_3

sage: C7 = CyclicPermutationGroup(7)
sage: alpha = PermutationGroupMorphism(C7,C7,[C7.gen()**4])
sage: phi = [[(1,2,3)],[alpha]]

[21,1]

22

C_{22}

[22,2]

22

D_{11}

[22,1]

23

C_{23}

[23,1]

24

C_{24}

[24,2]

24

D_{12}

[24,6]

24

Q_{12} (24阶双环群)

[24,4]

24

C_{12} times C_2

[24,9]

24

C_6 times C_2 times C_2

[24,15]

24

S_4 (对称组,4个字母)

sage: G = SymmetricGroup(4)

[24,12]

24

S_3 times C_4

[24,5]

24

S_3 times C_2 times C_2

[24,14]

24

D_4 times C_3

[24,10]

24

Q times C_3

[24,11]

24

A_4 times C_2

[24,13]

24

Q_6 times C_2

[24,7]

24

Q rtimes_{phi} C_3

sage: Q = QuaternionGroup()
sage: alpha = PermutationGroupMorphism(Q,Q,[Q.gens()[0]*Q.gens()[1],Q.gens()[0].inverse()])
sage: phi = [[(1,2,3)],[alpha]]

[24,3]

24

C_3 rtimes_{phi} C_8

sage: C3 = CyclicPermutationGroup(3)
sage: alpha = PermutationGroupMorphism(C3,C3,[C3.gen().inverse()])
sage: phi = [[(1,2,3,4,5,6,7,8)],[alpha]]

[24,1]

24

C_3 rtimes_{phi} D_4

sage: C3 = CyclicPermutationGroup(3)
sage: alpha1 = PermutationGroupMorphism(C3,C3,[C3.gen().inverse()])
sage: alpha2 = PermutationGroupMorphism(C3,C3,[C3.gen()])
sage: phi = [[(1,2,3,4),(1,3)],[alpha1,alpha2]]

[24,8]

25

C_{25}

[25,1]

25

C_5 times C_5

[25,2]

26

C_{26}

[26,2]

26

D_{13}

[26,1]

27

C_{27}

[27,1]

27

C_9 times C_3

[27,2]

27

C_3 times C_3 times C_3

[27,5]

27

阶次分裂亚循环群 3^3

sage: G = SplitMetacyclicGroup(3,3)

[27,4]

27

(C_3 times C_3) rtimes_{phi} C_3

sage: C3 = CyclicPermutationGroup(3)
sage: A = direct_product_permgroups([C3,C3])
sage: alpha = PermutationGroupMorphism(A,A,[A.gens()[0]*A.gens()[1].inverse(),A.gens()[1]])
sage: phi = [[(1,2,3)],[alpha]]

[27,3]

28

C_{28}

[28,2]

28

C_{14} times C_2

[28,4]

28

D_{14}

[28,3]

28

Q_{14} (28阶双环群)

[28,1]

29

C_{29}

[29,1]

30

C_{30}

[30,4]

30

D_{15}

[30,3]

30

D_5 times C_3

[30,2]

30

D_3 times C_5

[30,1]

31

C_{31}

[31,1]

凯文·哈拉斯兹的桌子

阶数为15或更少的有限群的构造说明

Sage能够很容易地将每个阶数为15或更少的群构造为有限表示群。我们将从创建有限生成的交换群以及有限表示群的直积和半直积开始讨论。

所有有限生成的阿贝尔群都可以使用 groups.presentation.FGAbelian(ls) 命令,其中 ls 是一个非负整数列表,它被简化为定义要返回的组的不变量。例如,要构建 C_4 times C_2 times C_2 times C_2 我们只需使用::

sage: A = groups.presentation.FGAbelian([4,2,2,2])

无论输入的整数列表如何,给定组的输出都是相同的。下面的例子给出了阶数为30的循环群的相同表示。**

sage: A = groups.presentation.FGAbelian([2,3,5])
sage: B = groups.presentation.FGAbelian([30])

如果 GH 是有限表示的群,我们可以使用以下代码来创建 GHG times H

sage: D = G.direct_product(H)

Suppose there exists a homomorphism phi from a group G to the automorphism group of a group H. Define the semidirect product of G with H via phi, as the Cartesian product of G and H, with the operation (g_1, h_1)(g_2, h_2) = (g_1 g_2, phi_{h_1}(g_2) h_2) where phi_h = phi(h). To construct this product in Sage for two finitely presented groups, we must define phi manually using a pair of lists. The first list consists of generators of the group G, while the second list consists of images of the corresponding generators in the first list. These automorphisms are similarly defined as a pair of lists, generators in one and images in the other. As an example, we construct the dihedral group of order 16 as a semidirect product of cyclic groups.

sage: C2 = groups.presentation.Cyclic(2)
sage: C8 = groups.presentation.Cyclic(8)
sage: hom = (C2.gens(), [ ([C8([1])], [C8([-1])]) ])
sage: D = C2.semidirect_product(C8, hom)

下表显示了阶数为15或更少的组,以及如何在Sage中构造它们。重复的命令已被省略,但改为由以下示例描述。

阶循环群 n 可以用一条命令创建:

sage: C = groups.presentation.Cyclic(n)

同样,阶二面体群也是如此 2n

sage: D = groups.presentation.Dihedral(n)

此表仿照Kevin Halasz创建的前一个表。

订单

组描述

司令部(S)

GAP ID

1

微不足道的一群

sage: G = groups.presentation.Symmetric(1)

[1,1]

2

C_2

sage: G = groups.presentation.Symmetric(2)

[2,1]

3

C_3

sage: G = groups.presentation.Cyclic(3)

[3,1]

4

C_4

[4,1]

4

C_2 times C_2

sage: G = groups.presentation.Klein()

[4,2]

5

C_5

[5,1]

6

C_6

[6,2]

6

S_3 (由3个字母组成的对称组)

sage: G = groups.presentation.Symmetric(3)

[6,1]

7

C_7

[7,1]

8

C_8

[8,1]

8

C_4 times C_2

sage: G = groups.presentation.FGAbelian([4,2])

[8,2]

8

C_2times C_2times C_2

sage: G = groups.presentation.FGAbelian([2,2,2])

[8,5]

8

D_4

sage: G = groups.presentation.Dihedral(4)

[8,3]

8

四元数群(Quaternion Group)

sage: G = groups.presentation.Quaternion()

[8,4]

9

C_9

[9,1]

9

C_3 times C_3

[9,2]

10

C_{10}

[10,2]

10

D_5

[10,1]

11

C_{11}

[11,1]

12

C_{12}

[12,2]

12

C_6 times C_2

[12,5]

12

D_6

[12,4]

12

A_4 (4个字母组成的交替组)

sage: G = groups.presentation.Alternating(4)

[12,3]

12

Q_6 (12阶双循环群)

sage: G = groups.presentation.DiCyclic(3)

[12,1]

13

C_{13}

[13,1]

14

C_{14}

[14,2]

14

D_{7}

[14,1]

15

C_{15}

[15,1]