首页 > 解决方案 > 使用 sage 计算环商

问题描述

令 =ℚ(√2) 和 =() 其中 ^2++1=0 是单位的三次根之一。令 a 为 L 的原始元素,O_K 为代数整数环。然后我如何计算像 O_K/Z[a] 这样的商?我试过了:

K.<sqrt2> = NumberField(x^2-2)
L.<w> = K.extension(x^2+x+1)
a = L.primitive_element()
print L.ring_of_integers().quotient(ZZ[a])

但是,我总是收到如下错误:“无法通过定义多项式 x^2 + (2*sqrt2 + 1)*x + sqrt2 + 3 在其基字段上将 w0 中数字字段中的相对顺序转换为 w0 中定义多项式的数字字段x^2 + x + 1 在其基域上”。

这里的正确语法是什么?

标签: sage

解决方案


正如您所指出的,问题在于我们有w而且w0他们似乎并不同意。在这个文档链接中,我们有一个有趣的例子。

sage: K.<a> = NumberField(x^3 - 2)
sage: ZZ[a]
Order in Number Field in a0 with defining polynomial x^3 - 2 with a0 = a

这导致我尝试

sage: K.<a> = NumberField(x^3 - 2)
sage: Za = ZZ[a]
sage: OK = K.maximal_order()
sage: Za.is_suborder(OK)
False
sage: OK.is_suborder(Za)
False
sage: OK
Maximal Order in Number Field in a with defining polynomial x^3 - 2
sage: Za
Order in Number Field in a0 with defining polynomial x^3 - 2 with a0 = a
sage: OK.number_field()
Number Field in a with defining polynomial x^3 - 2
sage: Za.number_field()
Number Field in a0 with defining polynomial x^3 - 2 with a0 = a
sage: OK.number_field() == Za.number_field()
False

正如我们所看到的,即使a0=a显然没有办法直接比较基础数字字段。我根本不是这部分代码的专家,但我认为它至少值得一张澄清的票。我已经打开了Trac 28706


与此同时,如果你能找到一种方法来使用订单的常用语法来获得你想要的订单,我会这样做。对于我从文档中制作的示例,我认为Za并且OK是相同的,但是对于您的我尝试了这个。

sage: Za.gens()
(1, w0, (-2*sqrt2 - 1)*w0 - sqrt2 - 3, (3*sqrt2 + 6)*w0 + 7*sqrt2 + 7)
sage: O1 = L.order([1,w,(-2*sqrt2 - 1)*w - sqrt2 - 3, (3*sqrt2 + 6)*w + 7*sqrt2 + 7])
sage: O1.is_suborder(OK)
True

这当然是一种改进。唉,

sage: OK.quotient(O1)
TypeError: unable to convert Maximal Relative Order in Number Field in w with defining polynomial x^2 + x + 1 over its base field to Number Field in w with defining polynomial x^2 + x + 1 over its base field

所以现在我已经超出了我的深度。这样的商本身是否允许?您可能必须创建一个理想来执行此操作。祝你好运!


推荐阅读