椭圆曲线的复数乘法#

此模块实现功能

  • 希尔伯特类多项式

  • 是_HCP

  • cm_j_变量

  • 命令(_O)

  • discriminants_with_bounded_class_number

  • cm_j变量和订单

  • 带有类别编号的最大基本光盘

  • is_cm_j_变量

作者:

  • 罗伯特·布拉德肖

  • 约翰·克雷莫纳

  • 威廉·斯坦

sage.schemes.elliptic_curves.cm。订单类别编号(D0(数字0),小时0,(f))#

返回类编号h(f**2*D0),给定h(D0)=h0。

输入:

  • D0(数字0)(integer)–负基本判别式

  • 小时0(integer)–(最大)虚二阶鉴别器的类数D0(数字0)

  • (f)(integer)–正整数

输出:

(integer)虚二阶鉴别器的类数D0*f**2号

算法:

我们使用该公式计算订单的类号\(\mathcal{O}(O)_{D} \)根据

最大阶\(\mathcal{O}_{D_0}\); 看见[考克斯1989年]定理7.24:

\[h(D)=\压裂{h(D_0)f}{[\mathcal{O}(O)_{D_0}^\次数:\mathcal{O}(O)_{D} ^\时间]}\prod_{p\,|\,f}\左(1-\左(\frac{D_0}{p}\右)\frac}{1}{p{right)\]

示例:

圣人:#需要sage.libs.pari
圣人: sage.schemes.elliptic_curves.cm软件 进口 订单类别编号
圣人:D0(数字0) = -4
圣人:小时 = D0(数字0).类_编号()
圣人:[订单类别编号(D0(数字0),小时,(f)) 对于 (f) 在里面 srange(范围)(1,20)]
[1, 1, 2, 2, 2, 4, 4, 4, 6, 4, 6, 8, 6, 8, 8, 8, 8, 12, 10]
圣人:全部的([订单类别编号(D0,小时,(f)) == (D0(数字0)*(f)**2).类_编号() 对于 (f) 在里面 srange(范围)(1,20)])
真的
sage.schemes.elliptic_curves.cm。cm_j_变量(证明=)#

返回所有CM的列表\(j)-字段中的不变量\(K\).

输入:

  • K–数字字段

  • 证明–(默认值:proof.number_field())

输出:

(列表)–CM列表\(j)-字段中的不变量\(K\).

示例:

圣人:cm_j_变量(QQ(QQ))
[-262537412640768000, -147197952000, -884736000, -12288000, -884736,
-32768, -3375, 0, 1728, 8000, 54000, 287496, 16581375]

在虚二次域上,没有超过\(QQ\):

圣人:cm_j_变量(象限域(-1, “我”))                                  #需要sage.rings.number_field
[-262537412640768000, -147197952000, -884736000, -12288000, -884736,
-32768, -3375, 0, 1728, 8000, 54000, 287496, 16581375]

在实际的二次型字段上,可能会有更多,例如:

圣人:伦恩(cm_j_变量(象限域(5, “a”)))                              #需要sage.rings.number_field
31

在许多更高阶的数字字段K上,这也适用:

圣人:#需要sage.rings.number_field
圣人:x个 = 一夫多妻制(ZZ公司, “x”)
圣人:K.<> = 数字字段(x个^ - 2)
圣人:cm_j_变量(K)
[-262537412640768000, -147197952000, -884736000, -884736, -32768,
8000, -3375, 16581375, 1728, 287496, 0, 54000, -12288000,
31710790944000*a^2+39953093016000*a+50337742902000]
圣人:K.<> = 数字字段(x个^4 - 2)
圣人:伦恩(cm_j_变量(K))
23
sage.schemes.elliptic_curves.cm。cm_j变量和订单(证明=)#

返回所有CM的列表\(j)-字段中的不变量\(K\)以及相关订单。

输入:

  • K–数字字段

  • 证明–(默认值:proof.number_field())

输出:

(list)三元组列表\((D,f,j)\)哪里\(j)是CM\(j)-中的不变量\(K\)用二次基本判别式\(D\)和导体\(f).

示例:

圣人:cm_j变量和订单(QQ(QQ))
[(-3, 3, -12288000), (-3, 2, 54000), (-3, 1, 0), (-4, 2, 287496), (-4, 1, 1728),
(-7, 2, 16581375), (-7, 1, -3375), (-8, 1, 8000), (-11, 1, -32768),
(-19, 1, -884736), (-43, 1, -884736000), (-67, 1, -147197952000),
(-163, 1, -262537412640768000)]

在一个假想的二次场上没有超过\(QQ\):

圣人:cm_j变量和订单(象限域(-1, “我”))                       #需要sage.rings.number_field
[(-163, 1, -262537412640768000), (-67, 1, -147197952000),
(-43, 1, -884736000), (-19, 1, -884736), (-11, 1, -32768),
(-8, 1, 8000), (-7, 1, -3375), (-7, 2, 16581375), (-4, 1, 1728),
(-4,2287496),(-3,1,0),(-3,254000),(-3,3-1228800)]

在实际的二次域上,可能会有更多:

圣人:v(v) = cm_j变量和订单(象限域(5,“a”)); 伦恩(v(v))             #需要sage.rings.number_field
31
圣人:[(D类, (f)) 对于 D类, (f), j个 在里面 v(v) 如果 j个  在里面 QQ(QQ)]                                  #需要sage.rings.number_field
[(-235, 1), (-235, 1), (-115, 1), (-115, 1), (-40, 1), (-40, 1),
(-35, 1), (-35, 1), (-20, 1), (-20, 1), (-15, 1), (-15, 1), (-15, 2),
(-15, 2), (-4, 5), (-4, 5), (-3, 5), (-3, 5)]

在许多更高阶的数字字段K上,这也适用:

圣人:x个 = 一夫多妻制(ZZ公司, “x”)
圣人:K.<> = 数字字段(x个^ - 2)                                              #需要sage.rings.number_field
圣人:cm_j变量和订单(K)                                             #需要sage.rings.number_field
[(-163, 1, -262537412640768000), (-67, 1, -147197952000),
(-43, 1, -884736000), (-19, 1, -884736), (-11, 1, -32768),
(-8, 1, 8000), (-7, 1, -3375), (-7, 2, 16581375), (-4, 1, 1728),
(-4, 2, 287496), (-3, 1, 0), (-3, 2, 54000), (-3, 3, -12288000),
(-3,63170790944000*a^2+39953093016000*a+50337742902000)]
sage.schemes.elliptic_curves.cm。命令(_O)(证明=)#

返回所有对的列表\((D,f)\)其中有CM订单鉴别的\(D f ^2)等级号为h\(D\)基础区别。

输入:

  • \(小时)–正整数

  • 证明–(默认值:proof.number_field())

输出:

  • 2元组列表\((D,f)\)按字典顺序排序\((|D|,f)\)

示例:

圣人:命令(_O)(0)
[]
圣人:v(v) = 命令(_O)(1); v(v)
[(-3, 1), (-3, 2), (-3, 3), (-4, 1), (-4, 2), (-7, 1), (-7, 2), (-8, 1),
(-11, 1), (-19, 1), (-43, 1), (-67, 1), (-163, 1)]
圣人:类型(v(v)[0][0]), 类型(v(v)[0][1])
(<…'sage.rings.integrate.integer“>,<…'shage.rings.integer.integer”>)
圣人:#需要sage.libs.pari
圣人:v(v) = 命令(_O)(2); v(v)
[(-3, 4), (-3, 5), (-3, 7), (-4, 3), (-4, 4), (-4, 5), (-7, 4), (-8, 2),
(-8,3)、(-11,3)、(-15,1)、(-15,2)、(-20,1)、(-24,1)、(-35,1),
(-40, 1), (-51, 1), (-52, 1), (-88, 1), (-91, 1), (-115, 1), (-123, 1),
(-148, 1), (-187, 1), (-232, 1), (-235, 1), (-267, 1), (-403, 1), (-427, 1)]
圣人:伦恩(v(v))
29
圣人:设置([希尔伯特类多项式(D类*(f)^2).() 对于 D类,(f) 在里面 v(v)])
{2}

可实现最高100度的任何程度,但速度可能较慢:

圣人:#需要sage.libs.pari
圣人:命令(_O)()
[(-3, 6), (-3, 9), (-11, 2), (-19, 2), (-23, 1), (-23, 2), (-31, 1), (-31, 2),
(-43, 2), (-59, 1), (-67, 2), (-83, 1), (-107, 1), (-139, 1), (-163, 2),
(-211, 1), (-283, 1), (-307, 1), (-331, 1), (-379, 1), (-499, 1), (-547, 1),
(-643, 1), (-883, 1), (-907, 1)]
圣人:伦恩(命令(_O)(4))
84
sage.schemes.elliptic_curves.cm。discriminants_with_bounded_class_number(hmax公司,B类=,证明=)#

返回带有关键字类号的字典\(h\le hmax\)并重视所有配对的列表\((D_0,f)\),使用\(D_0<0)一个基本的判别词那个\(D=D_0f^2\)具有类编号\(小时).如果可选绑定\(B\)给出了,只返回那些带有\(|D|\le B\).

输入:

  • hmax公司–整数

  • \(B\)–integer或None;如果无,则返回所有对

  • 证明–此代码调用PARI函数pari:qfb类号,所以它可能会给出错误的答案证明``==``假(尽管仅适用于判别式大于\(2\cdot10^{10}\)). 默认值为的当前值证明编号字段().

输出:

  • 词典

注意

万一\(B\)没有给出,那么hmax公司必须不超过100;我们使用中的表格[沃特金斯2004年]【Klaise 2012】计算\(B\)它囊括了所有\(小时)高达\(hmax\).

示例:

圣人:#需要sage.libs.pari
圣人: sage.schemes.elliptic_curves.cm公司 进口 带边界类编号的判别符
圣人:v(v) = discriminants_with_bounded_class_number()
圣人:已排序(v(v))
[1, 2, 3]
圣人:v(v)[1]
[(-3, 1), (-3, 2), (-3, 3), (-4, 1), (-4, 2), (-7, 1), (-7, 2), (-8, 1),
(-11, 1), (-19, 1), (-43, 1), (-67, 1), (-163, 1)]
圣人:v(v)[2]
[(-3, 4), (-3, 5), (-3, 7), (-4, 3), (-4, 4), (-4, 5), (-7, 4), (-8, 2),
(-8, 3), (-11, 3), (-15, 1), (-15, 2), (-20, 1), (-24, 1), (-35, 1), (-40, 1),
(-51, 1), (-52, 1), (-88, 1), (-91, 1), (-115, 1), (-123, 1), (-148, 1),
(-187, 1), (-232, 1), (-235, 1), (-267, 1), (-403, 1), (-427, 1)]
圣人:v(v)[]
[(-3, 6), (-3, 9), (-11, 2), (-19, 2), (-23, 1), (-23, 2), (-31, 1), (-31, 2),
(-43, 2), (-59, 1), (-67, 2), (-83, 1), (-107, 1), (-139, 1), (-163, 2),
(-211, 1), (-283, 1), (-307, 1), (-331, 1), (-379, 1), (-499, 1), (-547, 1),
(-643, 1), (-883, 1), (-907, 1)]
圣人:v(v) = discriminants_with_bounded_class_number(8, 证明=False(错误))
圣人:已排序(伦恩(v(v)[小时]) 对于 小时 在里面 v(v))
[13, 25, 29, 29, 38, 84, 101, 208]

查找最多50个判别式的所有类号:

圣人:圣人.计划.椭圆曲线.厘米.discriminants_with_bounded_class_number(hmax公司=5, B类=50)
{1: [(-3, 1), (-3, 2), (-3, 3), (-4, 1), (-4, 2), (-7, 1), (-7, 2), (-8, 1), (-11, 1), (-19, 1), (-43, 1)], 2: [(-3, 4), (-4, 3), (-8, 2), (-15, 1), (-20, 1), (-24, 1), (-35, 1), (-40, 1)], 3: [(-11, 2), (-23, 1), (-31, 1)], 4: [(-39, 1)], 5: [(-47, 1)]}
sage.schemes.elliptic_curves.cm。希尔伯特类多项式(算法=)#

返回判别式的Hilbert类多项式\(D\).

输入:

  • D类(int)–模4为0或1的负整数。

  • 算法(字符串,默认为“无”)。

输出:

(整数多项式)的Hilbert类多项式鉴别的\(D\).

算法:

  • 如果算法=“arb”(默认):使用arb的实现,它使用复杂的区间算术。

  • 如果算法=“sage”:对根使用复杂近似。

  • 如果算法=“magma”:调用适当的magma函数(如果可用)。

作者:

  • Sage最初由Eduardo Ocampo Alvarez和安德烈·蒂莫菲耶夫

  • John Cremona修正的Sage实现(使用Andreas Enge修正的精度界限)

  • David Kohel实施岩浆

示例:

圣人:#需要sage.libs.flint
圣人:希尔伯特类多项式(-4)
x-1728年
圣人:希尔伯特类多项式(-7)
电话+3375
圣人:希尔伯特类多项式(-23)
x^3+3491750*x^2-5151296875*x+12771880859375
圣人:希尔伯特类多项式(-37*4)
x ^2-39660183801072000*x-7898242515936467904000000
圣人:希尔伯特类多项式(-37*4, 算法=“岩浆”) #可选-岩浆
x ^2-39660183801072000*x-7898242515936467904000000
圣人:希尔伯特类多项式(-163)
传真:+262537412640768000
圣人:希尔伯特类多项式(-163, 算法=“圣人”)
传真:+262537412640768000
圣人:希尔伯特类多项式(-163, 算法=“岩浆”) #可选-岩浆
传真:+262537412640768000
sage.schemes.elliptic_curves.cm。是_HCP((f),可简化的支票=真的)#

确定多项式是否为希尔伯特类多项式。

输入:

  • (f)–中的多项式\(\ZZ[X]\).

  • 可简化的支票(布尔值,默认值真的)–如果真的,检查一下(f)是一个monic的不可约整数多项式的。

输出:

(整数)–两者之一\(D\)如果(f)是希尔伯特多项式\(H_D\)用于判别\(D\),或\(0\)如果不是HCP。

算法:

克雷莫纳和萨瑟兰:算法2【CreSuth2023】.

示例:

即使在很大程度上,这也很快。我们测试了最大的类别编号100的判别式,HCP具有其系数具有数千位数字:

圣人: sage.schemes.elliptic_curves.cm软件 进口 是_HCP
圣人:D类 = -1856563
圣人:D类.类_编号()                                                          #需要sage.libs.pari
100

圣人:#需要sage.libs.flint
圣人:H(H) = 希尔伯特类多项式(D类)
圣人:H(H).()
100
圣人:最大值(H(H)).非吉特()
2774
圣人:是_HCP(H(H))
-1856563

测试非HCP的多项式速度更快:

圣人:是_HCP(H(H)+1)                                                               #需要sage.libs.flint
0
sage.schemes.elliptic_curves.cm。is_cm_j_变量(算法=“克雷莫纳·萨瑟兰”,方法=)#

返回是否为CM\(j)-不变量和CM鉴别符(如果是)。

输入:

  • j个–数字字段的元素\(K\)

  • 算法(字符串,默认为“CremonaSutherland”)–算法使用了“CremonaSutherland”(默认,速度快得多除非常小的程度外,所有)、“详尽”或“减少”

  • 方法(字符串)–已弃用的名称算法

输出:

一对(bool,(d,f)),如果\(j)不是CM j变量或(真,(d,f)),如果\(j)\(j)-的不变量判别式的虚二次阶\(D=df^2)哪里\(d\)相关的基本判别式和\(f)索引。

算法:

使用的默认算法是测试最小值多项式j个是Hilbert CLass Polynomail,使用is_HCP()实现的算法2【CreSuth2023】通过克雷莫纳和萨瑟兰。

有两种较旧的算法可用,这两种算法都要慢得多除了非常小的度数。

“穷尽”方法利用了类数最多为100的所有订单,因此将引发错误,如果\(j)是大于次的代数整数这个。

方法“reduction”在数字上构造一条椭圆曲线领域\(\QQ(j)\)并在几个一阶素数。

示例:

圣人: sage.schemes.elliptic_curves.cm软件 进口 is_cm_j_变量
圣人:is_cm_j_变量(0)
(正确,(-3,1))
圣人:is_cm_j_变量(8000)
(正确,(-8,1))

圣人:#需要sage.rings.number_field
圣人:K.<> = 象限域(5)
圣人:is_cm_j_变量(282880* + 632000)
(正确,(-20,1))
圣人:x个 = 一夫多妻制(ZZ公司, “x”)
圣人:K.<> = 数字字段(x个^ - 2)
圣人:is_cm_j_变量(31710790944000*^2 + 39953093016000* + 50337742902000)
(正确,(-3,6))

一个很大程度上的例子。这只能使用默认算法:

圣人: sage.schemes.elliptic_curves.cm软件 进口 is_cm_j_变量
圣人:D类 = -1856563
圣人:H(H) = 希尔伯特类多项式(D类)                                           #需要sage.libs.flint
圣人:H(H).()                                                                #需要sage.libs.flint
100
圣人:K.<j个> = 数字字段(H(H))                                                    #需要sage.libs.flint sage.rings.number_field
圣人:is_cm_j_变量(j个)                                                      #需要sage.libs.flint sage.rings.number_field
(正确,(-1856563,1))
sage.schemes.elliptic_curves.cm。带有类编号的最大光盘(小时)#

使用返回任何负判别式的最大绝对值类别编号\(小时),和基本负数使用该类编号进行判别。这是众所周知的(无条件)\(小时)Mark Watkins的工作[沃特金斯2004年]对于基本判别法,扩展到所有类数判别式\(小时100)作者:Klaise【Klaise 2012】.

注意

负判别式的类数\(D\)与唯一虚二阶的类数相同判别式的\(D\),因此此函数给出此类每个类别编号的顺序\(h\le100\).易于扩展这是以GRH为条件的较大类数,但很多很难拒绝无条件的结果。

输入:

  • \(小时)–整数

示例:

圣人: sage.schemes.elliptic_curves.cm软件 进口 带有类编号的最大光盘
圣人:带有类编号的最大光盘(0)
(0, 0)
圣人:带有类编号的最大光盘(1)
(163, 13)
圣人:带有类编号的最大光盘(2)
(427,29)
圣人:最大_类别_数量(10)
(13843, 123)
圣人:带有类编号的最大光盘(100)
(1856563, 2311)
圣人:带有类编号的最大光盘(101)
追踪(最近一次通话):
...
NotImplementedError:类号101的最大鉴别符不可用

对于大多数人\(h\le100\),最大的基本判别式类别编号\(小时)也是最大的判别词,但这不是一些人的情况\(小时):

圣人: sage.schemes.elliptic_curves.cm软件 进口 带有类编号的最大光盘, 带有类别编号的最大基本光盘
圣人:[小时 对于 小时 在里面 范围(1,101) 如果 带有类编号的最大光盘(小时)[0] != 带有类别编号的最大基本光盘(小时)[0]]
[6, 8, 12, 16, 20, 30, 40, 42, 52, 70]
圣人:带有类别编号的最大基本光盘(6)
(3763, 51)
圣人:带有类编号的最大光盘(6)
(4075, 101)
sage.schemes.elliptic_curves.cm。带有类别编号的最大基本光盘(小时)#

返回任何基本负判别式的最大绝对值类别编号\(小时),和基本否定判别数那个班级号码。这是已知的(无条件的)\(小时)高达100,马克·沃特金斯的作品([沃特金斯2004年]).

注意

基本否定判别式的类数\(D\)与虚二次域的类数相同\(\QQ(\sqrt{D})\),因此此函数给出此类每个类编号的字段\(小时100).易于扩展这是以GRH为条件的较大类数,但很多很难获得无条件的结果。

输入:

  • \(小时)–整数

示例:

圣人: sage.schemes.elliptic_curves.cm软件 进口 带有类别编号的最大基本光盘
圣人:带有类别编号的最大基本光盘(0)
(0, 0)
圣人:带有类别编号的最大基本光盘(1)
(163, 9)
圣人:带有类别编号的最大基本光盘(2)
(427, 18)
圣人:带有类别编号的最大基本光盘(10)
(13843, 87)
圣人:带有类别编号的最大基本光盘(100)
(1856563, 1736)
圣人:最大_基础_disc_with_class_number(101)
追踪(最近一次通话):
...
NotImplementedError:类号101的最大基本鉴别符不可用