代表代数整数的环

Kev*_*son 19 python sympy

我试图代表戒指;

在此输入图像描述

其中theta是具有度数d的整数系数的monic不可约多项式f的根.

这个环是代数整数的子环,它本身就是该领域的一个子环;

在此输入图像描述

我可以用sympy的AlgebraicField课程代表这个领域

Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)
Run Code Online (Sandbox Code Playgroud)

有没有办法以类似的方式表示上面的整数子环?

ksl*_*te1 7

我怀疑这可能不是一个功能sympy因为这些原因:

首先,如果theta 不是整数的代数,那么将theta连接到整数上的多项式环是同构的.

例如,pi不是整数的代数,因为没有整数系数与pi和pi的幂相结合将等于零.

为了证明这些,实际上是同构的,只需要在pi处评估每个多项式的评估环同态.

这可能不是一个现成的功能,因为计算一个数字是否在任何环上不是代数是非平凡的.例如,确定是否e + pi是代数仍然是一个悬而未决的问题.

这可以实现sympy通过

from sympy.polys.domains import ZZ, QQ, RR, FF, EX

x, y, z, t = symbols('x y z t')
ZZ['theta']
Run Code Online (Sandbox Code Playgroud)

要么

ZZ[t]
Run Code Online (Sandbox Code Playgroud)

人们可以很容易地测试这一点,事实上,它确实为你提供了整数上的多项式环.

其次,代数的数字(数字像虚数i,它是整数值多项式的根)可以通过取多项式环模和由它的唯一的monic多项式生成的想法来获得.

因此,如果theta是虚数i,它具有唯一的monic多项式x^2+1

>>> QQ.old_poly_ring(x).ideal(x**2+1)
<x**2 + 1>
>>> ZZ.old_poly_ring(x).ideal(x**2+1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py",               line 91, in ideal
   return ModuleImplementedIdeal(self, self.free_module(1).submodule(
   File "/usr/local/lib/python2.7/dist-            packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module
    return FreeModulePolyRing(self, rank)
    File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__
     + 'got %s' % ring.dom)
NotImplementedError: Ground domain must be a field, got ZZ
Run Code Online (Sandbox Code Playgroud)

另外,尝试这个:

>>> QQ.old_poly_ring(x).quotient_ring([x**2])
QQ[x]/<x**2>
>>> ZZ.old_poly_ring(x).quotient_ring([x**2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py",     line 115, in quotient_ring
  e = self.ideal(*e)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal
  return ModuleImplementedIdeal(self, self.free_module(1).submodule(
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module
  return FreeModulePolyRing(self, rank)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py",     line 455, in __init__
         + 'got %s' % ring.dom)
NotImplementedError: Ground domain must be a field, got ZZ
Run Code Online (Sandbox Code Playgroud)

看文档:

然而,有用的功能仅针对字段上的多项式环以及其各种定位和商来实现.

简而言之,除非theta在整数上是非代数的,否则在sympy框架内这可能是不可能的.

然而,以这种方式代表环可以通过使类和使用Python的魔术方法重写的常规行为来实现+*,这基本上就是我们要研究环.

这是上面提到的高斯整数的一个例子.这个代码可以很容易地重新用于给你,例如,2的平方根,或整数上的任何其他代数数.