组¶
置换群¶
置换群是某些对称群的子群 \(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\) 以某种固定的方式),您可以使用gapsage接口,如下所示。
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) 也实现了有限和无限(但有限生成)交换群。
共轭类¶
您可以使用“本机”计算有限群的共轭类:
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的界面来GAP::
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()
[ Group( [ f1, f2 ] ), Group( [ f2 ] ), Group( <identity> of ... ) ]
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), (1,2)(3,4) ]),
Group(()) ]
中心¶
在Sage中如何计算群的中心?
虽然Sage调用GAP来计算群中心, center
是“wrapped”(即Sage有一个类置换组和相关的类方法“center”),因此用户不需要使用 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.O'Brien、B.Eick和H.U.Besche的小组类库,这是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份的施工指导书¶
作者:
戴维斯·舒伯特
每一个阶数小于32的群在Sage中被实现为一个置换群。它们都可以很容易地被创造出来。我们将首先演示如何构建直接积和半直积,然后给出构建所有这些小组所需的命令。
让 G1
, G2
… Gn
是已在Sage中初始化的置换组。下面的命令可以用来获取它们的直接积(当然,这里省略号只是作为一种符号使用,实际上您必须在所需的乘积中显式地输入每个因子)。
sage: G = direct_product_permgroups([G1, G2, ..., Gn])
半直积运算可以看作是直积运算的推广。给两组人, H 和 K ,它们的半直积, H ltimes_{{phi}} K ,(其中 phi : H rightarrow Aut(K) 是一个群,其基本集是 H 和 K ,但在手术中:
输出不是操作定义中明确描述的组,而是同构的置换组。在下面的例行程序中,假设 H
和 K
已经在Sage中定义和初始化。也, phi
是一个包含两个子列表的列表,它们通过给出 H
. 对于下表中的每个半直接产品,我们将向您展示如何构建 phi
,然后假设你已经读过这篇文章,并且理解如何从那里开始。
sage: G = H.semidirect_product(K, phi)
为了避免不必要的重复,我们现在将给出可以用来创建顺序循环组的命令 n , C_n ,二面体群 n 信件, D_n . 为了确保读者理解命令,我们将再给出一个例子,然后它将被保留。
sage: G = CyclicPermutationGroup(n)
sage: G = DihedralGroup(n)
注意,指数表示法将用于直接乘积运算。例如, {{C_2}}^2 = C_2 times C_2 . 这张桌子是在 分组表格 ,作者:AD Thomas和GV Wood(1980年,湿婆出版社)。
秩序 |
组描述 |
命令 |
间隙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 |
四元数群(Q) |
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] |
Kevin Halasz的表格
每一个有限列示的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])
如果 G
和 H
是有限表示的群,我们可以使用下面的代码来创建 G
和 H
, G times H .
sage: D = G.direct_product(H)
假设存在一个同态 phi 从一个团体 G 群的自同构群 H . 半直积 G 具有 H 通过 phi ,作为 G 和 H ,进行手术 (g_1, h_1)(g_2, h_2) = (g_1 g_2, phi_{{h_1}}(g_2) h_2) 在哪里? phi_h = phi(h) . 要在Sage中为两个有限呈现群构造这个积,我们必须定义 phi 手动使用一对列表。第一个列表由组的生成器组成 G ,而第二个列表包含第一个列表中相应生成器的图像。这些自同构被定义为一对列表,其中一个是生成器,另一个是图像。作为一个例子,我们构造了16阶二面体群作为循环群的半直积。:
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创建的前一个表建模的。
秩序 |
组描述 |
命令 |
间隙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 |
四元数群(Q) |
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] |