代数整数环的表示

19

我正在尝试表示该环:

enter image description here

其中theta是具有整数系数的首一不可约多项式f的根,f的次数为d。

此环是代数整数的子环,而代数整数本身是该域的子环:

enter image description here

我可以使用sympy的AlgebraicField类来表示这个域

Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)

有没有一种类似的方式来表示上述整数子环?

2个回答

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']

或者

ZZ[t]
通过测试,可以轻松得知这确实给出了整数上的多项式环。
其次,代数数(例如虚数i,它们是整数值多项式的根)可以通过取多项式环模和由它的唯一首一多项式生成的理想来获得。
因此,如果θ是虚数i,它具有唯一的首一多项式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

此外,尝试以下操作:
>>> 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

查看文档

然而,有用的功能仅实现在域上的多项式环中,以及各种本地化和商环。

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

然而,通过创建类并使用 Python 的魔术方法来覆盖 +* 的常规行为,可以实现以这种方式表示环,这本质上就是我们需要研究环的内容。

以下是上面提到的高斯整数的示例。该代码可以轻松重新定制,以给出您想要的任何其他整数上的代数数,例如 $\sqrt{2}$。


2

我是一名物理学家:我理解了其中的一些词,但也许我可以帮忙 :-D

你尝试过使用SymPyIntegerRing吗?

class sympy.polys.domains.SymPyIntegerRing

    Integer ring based on SymPy’s Integer type.

1
虽然我认为IntegerRing是正确的词...但你怎么使用它呢? - Andy Hayden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接