通过数值积分的模块化符号

我们在这里描述了计算模块符号的方法通过模形式积分的数值逼近尖头之间的路径。

更准确地说,让\(E)是一条椭圆曲线\(f)新形式与同系类有关\(E).如果

\[\lambda(r\to r')=2\pi i\int_{r}^{r'}f(\tau)d\tau\]

然后是模块化符号\([r]^{+}\)定义为的真实部分\(\lambda(\infty\to r)\)以最不积极的现实的周期\(E)类似地,对于负模符号,它是上述虚数部分与最小正数的商虚轴上周期的虚部。

Manin-Drinfeld定理表明,模符号是分母较小的有理数。它们用于特殊值的计算\(L)-的功能\(E)被扭曲了Dirichlet字符和用于计算\(p\)-adic的复数\(L)-功能。

算法:

模块化符号在eclib和sage中的直接实现使用克雷莫纳书中描述的算法【Cre1997】和Stein的【标准2007】首先是所有空间计算给定级别的模符号,然后计算空间与给定的新形式相对应。即使这些首字母步骤可能需要一段时间,之后的评估是即时的。全部计算是用有理数进行的,因此是精确的。

相反,此处使用的方法(请参见【2018年5月】详细信息)是通过计算上述积分\(\lambda(r\到r')\)通过数值近似。因为我们知道精确在分母的边界上,我们可以对确保结果被证明是正确合理的错误数字。

我们整合的路径被分割,Atkin-Lehner算符用于计算积分的严重收敛部分通过在其他尖点使用傅里叶展开\(\infty\).

注释

这些计算的正确性有一个假设:Manin常数\(X_0\)-最佳曲线应为\(1\)如果曲线位于克雷莫纳桌子外面。这是已知的克雷莫纳表,但仅对一般曲线进行推测。

示例:

代码最可能的用法是通过函数模块_符号实现设置为“num”并通过模块_符号_数字:

圣人: E类 = 椭圆曲线(“5077a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M)(0)
0
圣人: M(M)(1/123)
4
圣人:  = E类.模块_符号_数字(签名=-1, 前c=30)
圣人: (/123)       #abs tol 1e-11防抱死制动系统
3.00000000000018
>>>  sage.all公司 进口 *
>>> E类 = 椭圆曲线(“5077a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M)(整数(0))
0
>>> M(M)(整数(1)/整数(123))
4
>>>  = E类.模块_符号_数字(签名=-整数(1), 前c=整数(30))
>>> (整数()/整数(123))       #abs tol 1e-11防抱死制动系统
3.00000000000018

更多细节。数字模符号M(M)是从选定椭圆曲线签名(尽管另一个标志也将是也可访问):

圣人: E类 = 椭圆曲线([101,103])
圣人: E类.导体()
35261176
圣人: M(M) = E类.模块_符号(实施=“num”, 签名=-1)
圣人: M(M)
附加到的数字模块符号
有理域上由y^2=x^3+101*x+103定义的椭圆曲线
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线([整数(101),整数(103)])
>>> E类.导体()
35261176
>>> M(M) = E类.模块_符号(实施=“num”, 签名=-整数(1))
>>> M(M)
附加到的数字模块符号
有理域上由y^2=x^3+101*x+103定义的椭圆曲线

然后我们可以计算这个值\([13/17]^{-}\)\([1/17]^{+}\)通过呼叫函数M(M)。的值\([0]^{+}=0\)告诉我们该曲线为正:

圣人: M(M)(13/17)
-1/2
鼠尾草: M(M)(1/17,签名=+1)
-3
圣人: M(M)(0, 签名=+1)
0
>>>  圣人所有 进口 *
>>> M(M)(整数(13)/整数(17))
-1/2
>>> M(M)(整数(1)/整数(17),签名=+整数(1))
-3
>>> M(M)(整数(0), 签名=+整数(1))
0

人们可以计算出这些有理数的数值近似值达到任何经验证的二进制精度:

圣人: M(M).近似值(13/17, 前c=2) #abs tol 1e-4防抱死制动系统
-0.500003172770455
圣人: M(M).近似值(13/17, 预充电=4) #abs tol 1e-6防抱死制动系统
-0.500000296037388
圣人: M(M).近似值(0, 签名=+1, 前c=6) #abs tol 1e-8防抱死制动系统
0
>>>  圣人所有 进口 *
>>> M(M).近似值(整数(13)/整数(17), 前c=整数(2)) #abs tol 1e-4防抱死制动系统
-0.500003172770455
>>> M(M).近似值(整数(13)/整数(17), 前c=整数(4)) #abs tol 1e-6防抱死制动系统
-0.500000296037388
>>> M(M).近似值(整数(0), 签名=+整数(1), 前c=整数(6)) #abs tol 1e-8防抱死制动系统
0

还有其他一些事情可以做M(M).马尼人符号\(M(c:d)\)就这点而言\((c:d)\)在投影线中可以是计算。:

圣人: M(M).manin_符号(1,5)
-1
>>>  圣人所有 进口 *
>>> M(M).manin_符号(整数(1),整数(5))
-1

在某些有用的情况下,有一个函数可以返回\([a/m]^{+}\)对于固定分母\(米\).这对小的来说比较快\(米\)单独计算它们:

圣人: M(M).一个提名人的所有值(7)
{1/7: 0, 2/7: 3/2, 3/7: 3/2, 4/7: -3/2, 5/7: -3/2, 6/7: 0}
>>>  圣人所有 进口 *
>>> M(M).一个提名人的所有值(整数(7))
{1/7: 0, 2/7: 3/2, 3/7: 3/2, 4/7: -3/2, 5/7: -3/2, 6/7: 0}

最后是一句警告。当涉及尖点时,该算法速度很快是统一的。如果曲线是半稳定的,则所有尖点都是酉的。但是带素数的有理数\(p\)分母除以一次,但指挥不止一次,都很难。例如上述例如,一个看似无害的命令,如M(1/2)将需要非常返回值的时间很长。然而,可以计算它们对于较小的导线:

圣人: E类 = 椭圆曲线(“664a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M)(1/2)
0
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“664a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M)(整数(1)/整数(2))
0

当一个可以扭曲为半稳定曲线,如本例所示:

圣人: C类 = 椭圆曲线(“11a1”)
圣人: E类 = C类.方形扭曲(101)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M)(1/101)
41
>>>  圣人所有 进口 *
>>> C类 = 椭圆曲线(“11a1”)
>>> E类 = C类.方形扭曲(整数(101))
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M)(整数(1)/整数(101))
41

作者:

  • 克里斯·伍特里奇(2013-16)

sage.schemes.elliptic_curves.mod_sym_num。模块符号数字[来源]

基础:对象

这个类赋值给上的椭圆曲线\(\QQ\)模块化符号。与其他实现不同,此类不预计算这个空间的基础。相反,在每次调用时,它都会计算积分使用数值近似。所有边界都非常严格实现并且输出是一个正确的经证明的有理数。

输入:

  • E类–有理数上的椭圆曲线

  • 签名–-1或+1(默认)。这将设置默认值的值签名贯穿全班。两者都可以访问。

OUTPUT:模块化符号

示例:

圣人: E类 = 椭圆曲线(“5077a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M)(0)
0
鼠尾草: M(M)(77/57)
-1
圣人: M(M)(33/37, -1)
2
圣人: M(M) = E类.模块_符号(签名=-1, 实施=“num”)
圣人: M(M)(2/7)
2

圣人:  sage.schemes.elliptic_curves.mod符号num\....: 进口 模块符号数字
圣人: M(M) = 模块符号数字(椭圆曲线(“11a1”))
圣人: M(M)(1/, -1)
1/2
圣人: M(M)(1/2)
-4/5
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“5077a1”)
>>> M(M) = E类.模块_符号(实施=“数量”)
>>> M(M)(整数(0))
0
>>> M(M)(整数(77)/整数(57))
-1
>>> M(M)(整数(33)/整数(37), -整数(1))
2
>>> M(M) = E类.模块_符号(签名=-整数(1), 实施=“num”)
>>> M(M)(整数(2)/整数(7))
2

>>>  sage.schemes.elliptic_curves.mod符号num 进口 模块符号数字
>>> M(M) = 模块符号数字(椭圆曲线(“11a1”))
>>> M(M)(整数(1)/整数(), -整数(1))
1/2
>>> M(M)(整数(1)/整数(2))
-4/5
一个提名人的所有值(,签名=0)[来源]

给定一个整数和a签名,这将返回模数符号\([年/月]\)为所有人\(a)互质\(米\)使用部分和。这比逐个计算要快得多。

这只有在以下情况下才有效\(米\)相对较小如果尖头\(a/m\)都是单一的。

输入:

  • –自然数

  • 签名–+1或-1或0(默认),在这种情况下,传递给类的标志被接受

OUTPUT:分母分数字典\(米\)给出有理数。

示例:

鼠尾草: E类 = 椭圆曲线(“5077a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).一个提名人的所有值(7)
{1/7: 3, 2/7: 0, 3/7: -3, 4/7: -3, 5/7: 0, 6/7: 3}
圣人: [M(M)(/7) 对于  在里面 [1..6]]
[3, 0, -3, -3, 0, 3]
圣人: M(M).一个提名人的所有值(,-1)
{1/3: 4, 2/3: -4}

鼠尾草: E类 = 椭圆曲线(“11a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).一个提名人的所有值(12)
{1/12: 1/5, 5/12: -23/10, 7/12: -23/10, 11/12: 1/5}
圣人: M(M).一个提名人的所有值(12, -1)
{1/12: 0, 5/12: 1/2, 7/12: -1/2, 11/12: 0}

圣人: E类 = 椭圆曲线(“20a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).一个提名人的所有值(4)
{1/4: 0, 3/4: 0}
圣人: M(M).所有值都用于提名人(8)
{1/8: 1/2, 3/8: -1/2, 5/8: -1/2, 7/8: 1/2}
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“5077a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).一个提名人的所有值(整数(7))
{1/7: 3, 2/7: 0, 3/7: -3, 4/7: -3, 5/7: 0, 6/7: 3}
>>> [M(M)(/整数(7)) 对于  在里面 (省略号_范围(整数(1),省略号,整数(6)))]
[3, 0, -3, -3, 0, 3]
>>> M(M).一个提名人的所有值(整数(),-整数(1))
{1/3: 4, 2/3: -4}

>>> E类 = 椭圆曲线(“11a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).一个提名人的所有值(整数(12))
{1/12: 1/5, 5/12: -23/10, 7/12: -23/10, 11/12: 1/5}
>>> M(M).一个提名人的所有值(整数(12), -整数(1))
{1/12: 0, 5/12: 1/2, 7/12: -1/2, 11/12: 0}

>>> E类 = 椭圆曲线(“20a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).一个提名人的所有值(整数(4))
{1/4: 0, 3/4: 0}
>>> M(M).一个提名人的所有值(整数(8))
{1/8: 1/2, 3/8: -1/2, 5/8: -1/2, 7/8: 1/2}
近似值(第页,签名=0,前c=20,使用扭曲(_T)=真的)[来源]

以有理数计算的数字模块符号。

它返回一个应该相等的实数将有理数转换为给定二进制数精度前c.实际上,精度为通常要高得多。请参阅以下示例。

输入:

  • 第页–有理数(或整数)

  • 签名–+1或-1或0(默认),在这种情况下,传递给类的标志被接受

  • 前c–整数(默认值:20)

  • 使用扭曲(_T)真的(默认)允许使用降低导线的曲线的二次扭曲

输出:实数

示例:

圣人: E类 = 椭圆曲线(“5077a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).近似值(123/567)  #abs tol 1e-11防抱死制动系统
-4.00000000000845
圣人: M(M).近似值(123/567,前c=2) #abs tol 1e-9
-4.00002815242902

圣人: E类 = 椭圆曲线([11,88])
圣人: E类.导体()
1715296
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).近似值(0,前c=2)   #abs tol 1e-11防抱死制动系统
-0.0000176374317982166
圣人: M(M).近似值(1/7,前c=2)  #abs tol 1e-11型
0.999981178147778
圣人: M(M).近似值(1/7,前c=10) #abs tol 1e-11防抱死制动系统
0.999999972802649
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“5077a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).近似值(整数(123)/整数(567))  #abs tol 1e-11防抱死制动系统
-4.00000000000845
>>> M(M).近似值(整数(123)/整数(567),前c=整数(2)) #abs tol 1e-9
-4.00002815242902

>>> E类 = 椭圆曲线([整数(11),整数(88)])
>>> E类.导体()
1715296
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).近似值(整数(0),前c=整数(2))   #abs tol 1e-11防抱死制动系统
-0.0000176374317982166
>>> M(M).近似值(整数(1)/整数(7),前c=整数(2))  #abs tol 1e-11防抱死制动系统
0.999981178147778
>>> M(M).近似值(整数(1)/整数(7),前c=整数(10)) #abs tol 1e-11型
0.999999972802649
清除缓存(_C)()[来源]

清除此类所有方法中的缓存值。

示例:

圣人: E类 = 椭圆曲线(“11a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M)(0)
1/5
圣人: M(M).清除缓存(_C)()
圣人: M(M)(0)
1/5
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“11a1”)
>>> M(M) = E类.模符号(实施=“num”)
>>> M(M)(整数(0))
1/5
>>> M(M).清除缓存(_C)()
>>> M(M)(整数(0))
1/5
椭圆曲线()[来源]

返回此模块符号的椭圆曲线。

示例:

圣人: E类 = 椭圆曲线(“15a4”)
圣人: M(M) = E类.模块_符号(实施=“数量”)
圣人: M(M).椭圆曲线()
有理域上由y^2+x*y+y=x^3+x^2+35*x-28定义的椭圆曲线
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“15a4”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).椭圆曲线()
有理域上由y^2+x*y+y=x^3+x^2+35*x-28定义的椭圆曲线
manin_符号(u个,v(v),签名=0)[来源]

给一对\((u,v)\)提出观点\(\mathbb{P}^1(\mat血红蛋白{Z}/N\mathbb{Z})\)因此是陪集\(\伽马_0(N)\),这将计算Manin的值符号\(M(u:v)\).

输入:

  • u个–整数

  • v(v)–整数,以便\((u:v)\)是投影点\(否)

  • 签名–+1或-1或0(默认),在这种情况下,传递给类的标志被接受

示例:

圣人: E类 = 椭圆曲线(“11a1”)
圣人: M(M) = E类.模符号(实施=“num”)
圣人: M(M).manin_符号(1,)
-1/2
圣人: M(M).manin_符号(1,, 签名=-1)
-1/2
圣人: M(M).manin_符号(1,5)
1
圣人: M(M).manin_符号(1,5)
1

圣人: E类 = 椭圆曲线(“14a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).manin_符号(1,2)
-1/2
鼠尾草: M(M).manin_符号(17,6)
-1/2
圣人: M(M).manin_符号(-1,12)
-1/2
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“11a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).manin_符号(整数(1),整数())
-1/2
>>> M(M).manin_符号(整数(1),整数(), 签名=-整数(1))
-1/2
>>> M(M).manin_符号(整数(1),整数(5))
1
>>> M(M).manin_符号(整数(1),整数(5))
1

>>> E类 = 椭圆曲线(“14a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).manin_符号(整数(1),整数(2))
-1/2
>>> M(M).manin_符号(整数(17),整数(6))
-1/2
>>> M(M).manin_符号(-整数(1),整数(12))
-1/2
可运输符号(第页,rr(无线电频率),签名=0)[来源]

返回符号\([r']^+-[r]^+\)哪里\(r’=γ(r))对一些人来说\(\gamma\in\gamma_0(N)\)。这些符号可以通过传输进入上半平面靠近一个酉尖点的路径。在这里,我们实施它只是为了接近\(输入)\(0\).

输入:

  • 第页,rr(无线电频率)–两个有理数

  • 签名–+1或-1或0(默认),在这种情况下,传递给类的标志被接受

OUTPUT:有理数

示例:

圣人: E类 = 椭圆曲线(“11a1”)
鼠尾草: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).可运输符号(0/1,-2/7)
-1/2

圣人: E类 = 椭圆曲线(“37a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
圣人: M(M).可运输符号(0/1,-1/19)
0
圣人: M(M).可运输符号(0/1,-1/19,-1)
0

圣人: E类 = 椭圆曲线(“5077a1”)
圣人: M(M) = E类.模块_符号(实施=“num”)
鼠尾草: M(M).可运输符号(0/1,-35/144)
-3
圣人: M(M).可运输符号(0/1,-35/144,-1)
0
圣人: M(M).可运输符号(0/1, -7/31798)
0
圣人: M(M).可运输符号(0/1, -7/31798, -1)
-5
>>>  圣人所有 进口 *
>>> E类 = 椭圆曲线(“11a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).可运输符号(整数(0)/整数(1),-整数(2)/整数(7))
-1/2

>>> E类 = 椭圆曲线(“37a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).可运输符号(整数(0)/整数(1),-整数(1)/整数(19))
0
>>> M(M).可运输符号(整数(0)/整数(1),-整数(1)/整数(19),-整数(1))
0

>>> E类 = 椭圆曲线(“5077a1”)
>>> M(M) = E类.模块_符号(实施=“num”)
>>> M(M).可运输符号(整数(0)/整数(1),-整数(35)/整数(144))
-3
>>> M(M).可运输符号(整数(0)/整数(1),-整数(35)/整数(144),-整数(1))
0
>>> M(M).可运输符号(整数(0)/整数(1), -整数(7)/整数(31798))
0
>>> M(M).可运输符号(整数(0)/整数(1), -整数(7)/整数(31798), -整数(1))
-5