抽象代数的SAGE快速入门

Sage 快速入门教程是为MAA预备研讨会“SAGE:在本科生中使用开源数学软件”开发的(由美国国家科学基金会提供,截止日期0817071)。它是在知识共享署名-Share Alike 3.0许可证下授权的 (CC BY-SA )。

由于计算机是离散的和有限的,任何具有离散的、有限的生成器集的东西都很自然地实现和探索。

群论

许多公共群是预定义的,通常是置换群:也就是说,明确地描述为对称群的子群。

  • 阶数小于或等于15的每个基团都可作为置换基团使用。

  • 不过,有时它们也会以特殊的名字出售。

sage: G = QuaternionGroup()
sage: G
Quaternion group of order 8 as a permutation group
sage: H = AlternatingGroup(5)
sage: H
Alternating group of order 5!/2 as a permutation group
sage: H.is_simple()
True
sage: D = DihedralGroup(8)
sage: D
Dihedral group of order 16 as a permutation group

我们可以访问许多关于组的信息,例如:

  • 直到结合的子群的列表,

  • 或者是稳定器,

  • 或者下面展示的其他东西。

sage: for K in D.conjugacy_classes_subgroups():
....:     print(K)
Subgroup generated by [()] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(2,8)(3,7)(4,6)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,2)(3,8)(4,7)(5,6)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (1,3,5,7)(2,4,6,8)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (2,8)(3,7)(4,6)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (1,2)(3,8)(4,7)(5,6)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (1,3,5,7)(2,4,6,8), (2,8)(3,7)(4,6)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (1,3,5,7)(2,4,6,8), (1,2,3,4,5,6,7,8)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (1,3,5,7)(2,4,6,8), (1,2)(3,8)(4,7)(5,6)] of (Dihedral group of order 16 as a permutation group)
Subgroup generated by [(1,5)(2,6)(3,7)(4,8), (1,3,5,7)(2,4,6,8), (2,8)(3,7)(4,6), (1,2,3,4,5,6,7,8)] of (Dihedral group of order 16 as a permutation group)

在前面的单元格中,我们再次对一组对象而不仅仅是一组数字执行了for循环。这可能会非常强大。

sage: D.stabilizer(3)
Subgroup generated by [(1,5)(2,4)(6,8)] of (Dihedral group of order 16 as a permutation group)
sage: len(D.normal_subgroups())
7
sage: for K in sorted(D.normal_subgroups()):
....:     print(K)
Subgroup generated by [()] of (Dihedral group of order 16 as a permutation group)
...
Subgroup generated by [(1,2,3,4,5,6,7,8), (1,8)(2,7)(3,6)(4,5)] of (Dihedral group of order 16 as a permutation group)

如果我们知道生成元是一个置换群,我们就可以访问特定的子群。

sage: L = D.subgroup(["(1,3,5,7)(2,4,6,8)"])
sage: L.is_normal(D)
True
sage: Q=D.quotient(L)
sage: Q
Permutation Group with generators [(1,2)(3,4), (1,3)(2,4)]
sage: Q.is_isomorphic(KleinFourGroup())
True

还有一些矩阵群,既有有限的,也有无限的。

sage: S = SL(2, GF(3))
sage: S
Special Linear Group of degree 2 over Finite Field of size 3

我们可以打印出来 all 这群人的组成元素。

sage: for a in S:
....:     print(a)
[1 0]
[0 1]
...
[2 2]
[2 1]
sage: SS = SL(2, ZZ)

当然,你必须小心你想要做的事情!

sage: SS.list()
Traceback (most recent call last):
...
NotImplementedError: group must be finite
sage: for a in SS.gens():
....:     print(a)
[ 0  1]
[-1  0]
...

Sage有许多预定义的环可供试验。以下是用户访问 \(\ZZ/12\ZZ\) 例如,。

sage: twelve = Integers(12)
sage: twelve
Ring of integers modulo 12
sage: twelve.is_field()
False
sage: twelve.is_integral_domain()
False

四元数和泛化

我们可以定义广义四元数代数,其中 \(i^2=a\)\(j^2=b\) ,以及 \(k=i\cdot j\) ,到处都是 \(\QQ\) **

sage: quat = QuaternionAlgebra(-1, -1)
sage: quat
Quaternion Algebra (-1, -1) with base ring Rational Field
sage: quat.is_field()
False
sage: quat.is_commutative()
False
sage: quat.is_division_algebra()
True
sage: quat2 = QuaternionAlgebra(5, -7)
sage: quat2.is_division_algebra()
True
sage: quat2.is_field()
False

多项式环

多项式运算在Sage中是一个非常重要的工具。

第一个单元格将我们带回符号世界。这是 not the same thing 作为多项式!

sage: reset('x') # This returns x to being a variable
sage: (x^4 + 2*x).parent()
Symbolic Ring

现在我们要转身 \(x\) 转化为多项式环的生成元。语法有点不寻常,但您会经常看到它。

sage: R.<x> = QQ[]
sage: R
Univariate Polynomial Ring in x over Rational Field
sage: R.random_element() # random
-5/2*x^2 - 1/4*x - 1
sage: R.is_integral_domain()
True
sage: (x^4 + 2*x).parent()
Univariate Polynomial Ring in x over Rational Field
sage: (x^2+x+1).is_irreducible()
True
sage: F = GF(5)
sage: P.<y> = F[]
sage: P.random_element() # random
2*y
sage: I = P.ideal(y^3+2*y)
sage: I
Principal ideal (y^3 + 2*y) of Univariate Polynomial Ring in y over Finite Field of size 5
sage: Q = P.quotient(I)
sage: Q
Univariate Quotient Polynomial Ring in ybar over Finite Field of size 5 with modulus y^3 + 2*y

Sage对有限域和有理数的扩展有很好的支持。

有限域

sage: F.<a> = GF(3^4)
sage: F
Finite Field in a of size 3^4

默认情况下,生成器满足Conway多项式,也可以指定该多项式。

sage: F.polynomial()
a^4 + 2*a^3 + 2
sage: F.list()
[0, a, a^2, a^3, a^3 + 1, a^3 + a + 1, a^3 + a^2 + a + 1, 2*a^3 + a^2 + a + 1, a^2 + a + 2, a^3 + a^2 + 2*a, 2*a^3 + 2*a^2 + 1, a^3 + a + 2, a^3 + a^2 + 2*a + 1, 2*a^3 + 2*a^2 + a + 1, a^3 + a^2 + a + 2, 2*a^3 + a^2 + 2*a + 1, 2*a^2 + a + 2, 2*a^3 + a^2 + 2*a, 2*a^2 + 2, 2*a^3 + 2*a, 2*a^3 + 2*a^2 + 2, a^3 + 2*a + 2, a^3 + 2*a^2 + 2*a + 1, 2*a^2 + a + 1, 2*a^3 + a^2 + a, a^2 + 2, a^3 + 2*a, a^3 + 2*a^2 + 1, a + 1, a^2 + a, a^3 + a^2, 2*a^3 + 1, 2*a^3 + a + 2, 2*a^3 + a^2 + 2*a + 2, 2*a^2 + 2*a + 2, 2*a^3 + 2*a^2 + 2*a, a^3 + 2*a^2 + 2, 2*a + 1, 2*a^2 + a, 2*a^3 + a^2, 2, 2*a, 2*a^2, 2*a^3, 2*a^3 + 2, 2*a^3 + 2*a + 2, 2*a^3 + 2*a^2 + 2*a + 2, a^3 + 2*a^2 + 2*a + 2, 2*a^2 + 2*a + 1, 2*a^3 + 2*a^2 + a, a^3 + a^2 + 2, 2*a^3 + 2*a + 1, 2*a^3 + 2*a^2 + a + 2, a^3 + a^2 + 2*a + 2, 2*a^3 + 2*a^2 + 2*a + 1, a^3 + 2*a^2 + a + 2, a^2 + 2*a + 1, a^3 + 2*a^2 + a, a^2 + 1, a^3 + a, a^3 + a^2 + 1, 2*a^3 + a + 1, 2*a^3 + a^2 + a + 2, a^2 + 2*a + 2, a^3 + 2*a^2 + 2*a, 2*a^2 + 1, 2*a^3 + a, 2*a^3 + a^2 + 2, 2*a + 2, 2*a^2 + 2*a, 2*a^3 + 2*a^2, a^3 + 2, a^3 + 2*a + 1, a^3 + 2*a^2 + a + 1, a^2 + a + 1, a^3 + a^2 + a, 2*a^3 + a^2 + 1, a + 2, a^2 + 2*a, a^3 + 2*a^2, 1]
sage: (a^3 + 2*a^2 + 2)*(2*a^3 + 2*a + 1)
2*a^3 + a^2 + a + 1

\(F\) 应为多项式的分裂域 \(x^{81}-x\) ,所以我们没有从下面的单元格得到输出是非常好的,它结合了一个循环和一个条件语句。

sage: for a in F:
....:     if not (a^81 - a == 0):
....:         print("Oops!")

字段扩展,数字字段

你在本科生代数课堂上需要的大部分东西都已经在Sage中了。

sage: N = QQ[sqrt(2)]
sage: N
Number Field in sqrt2 with defining polynomial x^2 - 2 with sqrt2 = 1.414213562373095?
sage: var('z')
z
sage: M.<a>=NumberField(z^2-2)
sage: M
Number Field in a with defining polynomial z^2 - 2
sage: M.degree()
2
sage: M.is_galois()
True
sage: M.is_isomorphic(N)
True