有限域上的超椭圆曲线#

示例:

圣人:K(K)<> = GF公司(9, “a”)
圣人:x个 = 一夫多妻制(K(K))
圣人:C类 = 超椭圆曲线(x个^7 - x个^5 - 2, x个^2 + )
圣人:C类._点_fast_sqrt()
[(0:1:0),(a+1:a:1),(a+1:a+1:1),(2:a+1:1),
(2*a:2*a+2:1),(2*a:2*a:1)(1:a+1:1)]

作者:

  • David Kohel(2006)

  • 罗伯特·布拉德肖(2007)

  • Alyson Deines,Marina Gresham,Gagan Sekhon,(2010)

  • 丹尼尔·克伦(2011)

  • Jean-Pierre Flori,Jan Tuitman(2013)

  • Kiran Kedlaya(2016)

  • Dean Bisogno(2017):固定Hasse-Witt计算

sage.schemes.hyperelliptic_curves.hyperelliptic_inite_field。超椭圆Curve_finite_field(聚丙烯,(f),小时=,姓名=,=)#

基础:超椭圆曲线_generic,投影平面Curve_finite_field

卡提尔矩阵()#

输入:

  • E类:形式的超椭圆曲线\(y^2=f(x)\)在有限域上,\(\GF{q}\)

输出:

  • M(M):矩阵\(M=(c_{pi-j})\),其中\(c_i\)是的系数\(f(x)^{(p-1)/2}=\sum c_i x ^i\)

参考文献:

  1. 是的。特征域上超椭圆曲线的Jacobian簇\(p>2).

示例:

圣人:K(K)<x个> = GF公司(9,“x”)[]
圣人:C类 = 超椭圆曲线(x个^7 - 1, 0)
圣人:C类.卡提尔矩阵()
[0 0 2]
[0 0 0]
[0 1 0]

圣人:K(K)<x个> = GF公司(49, “x”)[]
圣人:C类 = 超椭圆曲线(x个^5 + 1, 0)
圣人:C类.卡提尔矩阵()
[0 3]
[0 0]

圣人:<x个> = GF公司(9, “a”)[]
圣人:E类 = 超椭圆曲线(x个^29 + 1, 0)
圣人:E类.卡提尔矩阵()
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[1 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 1 0]
哈塞·威特()#

输入:

  • E类:形式的超椭圆曲线\(y^2=f(x)\)在有限域上,\(\GF{q}\)

输出:

  • N个:矩阵\(N=M M^p\点M^{p^{g-1}}\)哪里\(M=c_{pi-j}\)、和\(f(x)^{(p-1)/2}=\sum c_i x ^i\)

参考编号:Yui。特征域上超椭圆曲线的Jacobian簇\(p>2).

示例:

圣人:K(K)<x个> = GF公司(9, “x”)[]
圣人:C类 = 超椭圆曲线(x个^7 - 1, 0)
圣人:C类.哈塞·威特()
[0 0 0]
[0 0 0]
[0 0 0]

圣人:K(K)<x个> = GF公司(49, “x”)[]
圣人:C类 = 超椭圆曲线(x个^5 + 1, 0)
圣人:C类.哈塞·威特()
[0 0]
[0 0]

圣人:<x个> = GF公司(9, “a”)[]
圣人:E类 = 超椭圆曲线(x个^29 + 1, 0)
圣人:E类.哈塞·威特()
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
a_数字()#

输入:

  • E类:形式的超椭圆曲线\(y^2=f(x)\)在有限域上,\(\GF{q}\)

输出:

  • :a数字

示例:

圣人:K(K)<x个> = GF公司(49, “x”)[]
圣人:C类 = 超椭圆曲线(x个^5 + 1, 0)
圣人:C类.a_数字()
1

圣人:K(K)<x个> = GF公司(9, “x”)[]
圣人:C类 = 超椭圆曲线(x个^7 - 1, 0)
圣人:C类.a_数字()
1

圣人:<x个> = GF公司(9, “a”)[]
圣人:E类 = 超椭圆曲线(x个^29 + 1, 0)
圣人:E类.a_数字()
5
基数(扩展_同意=1)#

计算基础字段的单个扩展上的点数。

示例:

圣人:K(K) = GF公司(101)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + *t吨^5 + 5)
圣人:H(H).基数()
106
圣人:H(H).基数(15)
1160968955369992567076405831000
圣人:H(H).基数(100)
270481382942152609326719471080753083367793838278100277689020104911710151430673927943945601434674459120495370826289654897190781715493352266982697064575800553229661690000887425442240414673923744999504000

圣人:K(K) = GF公司(37)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + *t吨^5 + 5)
圣人:H(H).基数()
40
圣人:H(H).基数(2)
1408
圣人:H(H).基数()
50116

以下示例显示github问题#20391已解决:

圣人:F类=GF公司(23)
圣人:x个=一夫多妻制(F类)
圣人:C类=超椭圆曲线(x个^8+1)
圣人:C类.基数()
24
基数_穷尽(扩展_同意=1,算法=)#

基本字段的单个扩展上的计数点通过枚举x并求解结果的二次方y的方程式。

示例:

圣人:K(K)<> = GF公司(9, “a”)
圣人:x个 = 一夫多妻制(K(K))
圣人:C类 = 超椭圆曲线(x个^7 - 1, x个^2 + )
圣人:C类.基数_穷尽()
7

圣人:K(K) = GF公司(下一个前缀(1<<10))
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^7 + *t吨^5 + 5)
圣人:H(H).基数_穷尽()
1025

圣人:<x个> = 多项式环(GF公司(9,“a”))
圣人:H(H) = 超椭圆曲线(x个^5+x个^2+1)
圣人:H(H).计数点(5)
[18, 78, 738, 6366, 60018]

圣人:F类<> = GF公司(4); <x个> = F类[]
圣人:H(H) = 超椭圆曲线(x个^5+*x个^2+1, x个++1)
圣人:H(H).count_points(计数点)(6)
[2, 24, 74, 256, 1082, 4272]
基数_hypellfrob(扩展_同意=1,算法=)#

基本字段的单个扩展上的计数点使用菌丝体程序。

示例:

圣人:K(K) = GF公司(下一个前缀(1<<10))
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^7 + *t吨^5 + 5)
圣人:H(H).基数_hypellfrob()
1025

圣人:K(K) = GF公司(49999)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^7 + *t吨^5 + 5)
圣人:H(H).基数_hypellfrob()
50162
圣人:H(H).基数_hypellfrob()
124992471088310
count_points(计数点)(n个=1)#

计算有限字段上的点数。

输入:

  • n个–整数。

输出:

一个整数。超过的点数\(\GF{q},\ldot,\GF{q^n}\)有限域上的超椭圆曲线\(\GF{q}\).

警告

这是目前使用的超椭圆曲线的穷举搜索在非犯罪领域,这可能是非常缓慢的。

示例:

圣人:<x个> = 多项式环(GF公司())
圣人:C类 = 超椭圆曲线(x个^+x个^2+1)
圣人:C类.count_points(计数点)(4)
[6, 12, 18, 96]
圣人:C类.基本扩展(_E)(GF公司(9,“a”)).count_points(计数点)(2)
[12, 96]

圣人:K(K) = GF公司(2**31-1)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + *t吨 + 5)
圣人:H(H).count_points(计数点)() #Corei7长时间2.4秒
【2147464821】
圣人:H(H).count_points(计数点)(n个=2) #很长时间,在Corei7上30秒
[2147464821, 4611686018988310237]

圣人:K(K) = GF公司(2**7-1)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^13 + *t吨^5 + 5)
圣人:H(H).count_points(计数点)(n个=6)
[11216360、2045356、260199160、33038302802、4195868633548]

圣人:<x个> = 多项式环(GF公司())
圣人:H(H) = 超椭圆曲线(x个^+x个^2+1)
圣人:C1类 = H(H).count_points(计数点)(4); C1类
[6, 12, 18, 96]
圣人:指挥与控制 = 圣人.计划.通用的.方案.方案.count_points(计数点)(H(H),4); 指挥与控制 #长时间,Corei7上2秒
[6, 12, 18, 96]
圣人:C1类 == 指挥与控制 #很长时间,因为我们需要定义C2
真的

圣人:<x个> = 多项式环(GF公司(9,“a”))
圣人:H(H) = 超椭圆曲线(x个^5+x个^2+1)
圣人:H(H).count_points(计数点)(5)
[18, 78, 738, 6366, 60018]

圣人:F类<> = GF公司(4); <x个> = F类[]
圣人:H(H) = 超椭圆曲线(x个^5+*x个^2+1, x个++1)
圣人:H(H).count_points(计数点)(6)
[2, 24, 74, 256, 1082, 4272]

这个例子表明github问题#20391已解决:

圣人:x个 = 一夫多妻制(GF公司(4099))
圣人:H(H) = 超椭圆曲线(x个^6 + x个 + 1)
圣人:H(H).count_points(计数点)(1)
[4106]
count_points_external(计数点_详尽)(n个=1,天真=False(错误))#

计算第一条曲线上的点数\(n\)扩展如果\(n\)如果小于\(克\),曲线的亏格,并通过计算frobenius多项式在对第一个\(克\)扩展,如果\(n>g)(除非天真 == 真的).

示例:

圣人:K(K) = GF公司(5)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨^ + 1)
圣人:H(H).count_points_external(计数点_详尽)(n个=5)
[9, 27, 108, 675, 3069]

什么时候?\(n>g \),frobenius多项式由以下数字计算得出第一条曲线上的点\(克\)扩展,以便计算度扩张的点数\(n>g \)不多了比…贵\(n==g):

圣人:H(H).count_points_external(计数点_详尽)(n个=15)
[9,
27,
108,
675,
3069,
16302,
78633,
389475,
1954044,
9768627,
48814533,
244072650,
1220693769,
6103414827,
30517927308]

可以通过传递naive=真:

圣人:H(H).count_points_external(计数点_详尽)(n个=6, 天真=真的) #长时间,在Corei7上7秒
[9, 27, 108, 675, 3069, 16302]
count_points_frobenius_多项式(n个=1,(f)=)#

计算第一条曲线上的点数\(n\)扩展通过计算frobenius多项式来计算基场。

示例:

圣人:K(K) = GF公司(49999)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^19 + t吨 + 1)

以下计算需要很长时间才能完成计算frobenius的特征多项式:

圣人:H(H).计数点frobenius多项式() #长时间,Corei7上20秒(当然是在以下测试之前计算的)
[49491, 2500024375, 124992509154249]

当多项式被缓存时,进一步计算点数速度非常快:

圣人:H(H).计数点frobenius多项式(19) #很长时间,因为之前的测试
[49491,
2500024375,
124992509154249,
6249500007135192947,
312468751250758776051811,
15623125093747382662737313867,
781140631562281338861289572576257,
39056250437482500417107992413002794587,
1952773465623687539373429411200893147181079,
97636720507718753281169963459063147221761552935,
4881738388665429945305281187129778704058864736771824,
244082037694882831835318764490138139735446240036293092851,
12203857802706446708934102903106811520015567632046432103159713,
610180686277519628999996211052002771035439565767719719151141201339,
30508424133189703930370810556389262704405225546438978173388673620145499,
1525390698235352006814610157008906752699329454643826047826098161898351623931,
76268009521069364988723693240288328729528917832735078791261015331201838856825193,
3813324208043947180071195938321176148147244128062172555558715783649006587868272993991,
190662397077989315056379725720120486231213267083935859751911720230901597698389839098903847]
count_points_hypellfrob计数点(n个=1,N个=,算法=)#

计算第一条曲线上的点数\(n\)扩展使用菌丝体程序。

这只支持具有足够大特征的素数字段。

示例:

圣人:K(K) = GF公司(49999)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^21 + *t吨^5 + 5)
圣人:H(H).count_points_hypellfrob计数点()
[49804]
圣人:H(H).count_points_hypellfrob计数点(2)
[49804, 2499799038]

圣人:K(K) = GF公司(2**7-1)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^11 + *t吨^5 + 5)
圣人:H(H).count_points_hypellfrob计数点()
[127]
圣人:H(H).count_points_hypellfrob计数点(n个=5)
[127, 16335, 2045701, 260134299, 33038098487]

圣人:K(K) = GF公司(2**7-1)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^13 + *t吨^5 + 5)
圣人:H(H).count_points(计数点)(n个=6)
[112, 16360, 2045356, 260199160, 33038302802, 4195868633548]

基本字段应该是素数:

圣人:K(K)<z(z)> = GF公司(19**10)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + (z(z)+1)*t吨^5 + 1)
圣人:H(H).count_points_hypellfrob计数点()
回溯(最近一次调用):
...
ValueError:hypellfrob不支持非prime字段

特征应足够大:

圣人:K(K) = GF公司(7)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨^ + 1)
圣人:H(H).count_points_hypellfrob计数点()
回溯(最近一次调用):
...
数值错误:p=7应大于(2*g+1)(2*N-1)=27
计数点矩阵跟踪(n个=1,M(M)=,N个=)#

计算第一条曲线上的点数\(n\)扩展通过计算frobenius幂的迹来计算基场矩阵。这需要更少\(p\)-adic精度比charpoly计算精度高\(n<g)哪里\(克\)是曲线的属。

示例:

圣人:K(K) = GF公司(49999)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^19 + t吨 + 1)
圣人:H(H).计数点矩阵跟踪()
[49491, 2500024375, 124992509154249]
frobenius_矩阵(N个=,算法=“hypellfrob”)#

计算\(p\)-精确的adic frobenius矩阵\(p^N\).如果\(N \)未提供,则选择默认值,即明确回收煤焦所需的最小值。

注意

目前仅使用实现菌丝体,这意味着它只在质数域上起作用\(GF(p)\),并且需要\(p>(2g+1)(2N-1)\).

示例:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).frobenius矩阵()
[1258+O(37^2)925+O(37 ^2)132+O(370^2)587+O(37.2)]
[1147+O(37^2)814+O(37 ^2)241+O(37.2)1011+O
[1258+O(37^2)1184+O(37 ^2)1105+O(370^2)482+O(37.^2)]
[1073+O(37^2)999+O(37*2)772+O(37.*2)929+O(37*2)]

这个海绵体程序不支持非主字段:

圣人:K(K)<z(z)> = GF公司(37**)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + z(z)*t吨^ + 1)
圣人:H(H).frobenius_矩阵(算法=“hypellfrob”)
回溯(最近一次调用):
...
未实现错误:仅实现了Frobenius矩阵的计算
定义在素域上的超椭圆曲线。

也不能太小:

圣人:K(K) = GF公司(7)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨^ + 1)
圣人:H(H).frobenius_矩阵(算法=“hypellfrob”)
回溯(最近一次调用):
...
ValueError:在当前实现中,p必须大于(2g+1)(2N-1)=81
frobenius_矩阵_hypellfrob(N个=)#

计算\(p\)-精确的adic frobenius矩阵\(p^N\).如果\(否)未提供,则选择默认值,即明确回收煤焦所需的最小值。

注意

使用实现菌丝体,这意味着它只起作用在素域上\(GF(p)\)、和需要\(p>(2g+1)(2N-1)\).

示例:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).蛙类()
[1258+O(37^2)925+O(37 ^2)132+O(370^2)587+O(37.2)]
[1147+O(37^2)814+O(37 ^2)241+O(37.2)1011+O
[1258+O(37^2)1184+O(37 ^2)1105+O(37.^2)482+O(370^2)]
[1073+O(37^2)999+O(37*2)772+O(37.*2)929+O(37*2)]

这个菌丝体程序不支持非主字段:

圣人:K(K)<z(z)> = GF公司(37**)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + z(z)*t吨^ + 1)
圣人:H(H).frobenius_矩阵_hypellfrob()
回溯(最近一次调用):
...
未实现错误:仅实现了Frobenius矩阵的计算
对于在素域上定义的超椭圆曲线。

也不能太小:

圣人:K(K) = GF公司(7)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨^ + 1)
圣人:H(H).frobenius_矩阵_hypellfrob()
回溯(最近一次调用):
...
ValueError:在当前实现中,p必须大于(2g+1)(2N-1)=81
frobenius多项式()#

计算frobenius的charpoly,作为\(\ZZ[x]\).

示例:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).frobenius多项式()
x^4+x^3-52*x^2+37*x+1369

二次扭转:

圣人:H(H) = 超椭圆曲线(2*t吨^5 + 2*t吨 + 4)
圣人:H(H).frobenius多项式()
x^4-x^3-52*x^2-37*x+1369

稍大的示例:

圣人:K(K) = GF公司(2003)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^7 + 487*t吨^5 + 9*t吨 + 1)
圣人:H(H).frobenius多项式()
x ^6-14*x ^5+1512*x ^4-66290*x ^3+3028536*x ^2-56168126*x+8036054027

在具有奇数特征的非素数场上定义的曲线,或者一个与属相比太小的奇素域,通过PARI支持:

圣人:K(K)<z(z)> = GF公司(23**)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^ + z(z)*t吨 + 4)
圣人:H(H).frobenius多项式()
x ^2-15*x+12167

圣人:K(K)<z(z)> = GF公司(**)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + z(z)*t吨 + z(z)**)
圣人:H(H).frobenius多项式()
x^4-3*x^3+10*x^2-81*x+729

在奇数特征的素数域上,\(小时)可能为非零:

圣人:K(K) = GF公司(101)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + 27*t吨 + , t吨)
圣人:H(H).frobenius多项式()
x^4+2*x^3-58*x^2+202*x+10201

在奇数特征的素数域上,\(f)可能具有均匀度:

圣人:H(H) = 超椭圆曲线(t吨^6 + 27*t吨 + )
圣人:H(H).弗罗贝尼乌斯多项式()
x^4+25*x^3+322*x^2+2525*x+10201

在均匀特性中,朴素算法可以覆盖所有情况因为我们可以很容易地检查商环的平方有限域上的多项式环不支持迭代:

圣人:K(K)<z(z)> = GF公司(2**5)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + z(z)*t吨 + z(z)**, t吨)
圣人:H(H).frobenius多项式()
x^4-x^3+16*x^2-32*x+1024
frobenius多项式基数(=)#

计算frobenius的charpoly,作为\(\ZZ[x]\),通过计算曲线上的点数\(克\)扩展基本字段的\(克\)是曲线的属。

警告

当基场或曲线很大。

示例:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).frobenius多项式基数()
x^4+x^3-52*x^2+37*x+1369

二次扭转:

圣人:H(H) = 超椭圆曲线(2*t吨^5 + 2*t吨 + 4)
圣人:H(H).frobenius多项式基数()
x^4-x^3-52*x^2-37*x+1369

非原质场地上的曲线:

圣人:K(K)<z(z)> = GF公司(7**2)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + z(z)*t吨 + z(z)^2)
圣人:H(H).frobenius多项式基数()
x^4+8*x^3+70*x^2+392*x+2401

菌丝体不工作:

圣人:K(K) = GF公司(7)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨^ + 1)
圣人:H(H).frobenius多项式矩阵(算法=“hypellfrob”)
回溯(最近一次调用):
...
ValueError:在当前实现中,p必须大于(2g+1)(2N-1)=81
圣人:H(H).frobenius多项式基数()
x^8-5*x^7+7*x^6+36*x^5-180*x^4+252*x^3+343*x^2-1715*x+2401
frobenius多项式矩阵(M(M)=,算法=“hypellfrob”)#

计算frobenius的charpoly,作为\(\ZZ[x]\),通过计算frobenius矩阵的charpoly。

当前仅当基字段为prime时才支持此功能并且足够大,使用菌丝体库。

示例:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).frobenius多项式矩阵()
x^4+x^3-52*x^2+37*x+1369

二次扭转:

圣人:H(H) = 超椭圆曲线(2*t吨^5 + 2*t吨 + 4)
圣人:H(H).frobenius多项式矩阵()
x^4-x^3-52*x^2-37*x+1369

在较大素数域上定义的曲线:

圣人:K(K) = GF公司(49999)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨^5 + 1)
圣人:H(H).frobenius多项式矩阵()
x^8+281*x^7+55939*x^6+14144175*x^5+3156455369*x^4+707194605825*x^3
+139841906155939*x^2+35122892542149719*x+62495001499980001
圣人:H(H) = 超椭圆曲线(t吨^15 + t吨^5 + 1)
圣人:H(H).frobenius多项式矩阵()  #很长时间,Corei7上8秒
x^14-76*x^13+220846*x^12-12984372*x^11+24374326657*x^10-1203243210304*x^9
+1770558798515792*x^8-74401511415210496*x^7+88526136991084208*x^6
-3007987702642212810304*x^5+3046608028331197124223343*x^4
-81145833008762983138584372*x^3+69007473838551978905211279154*x^2
-1187357507124810002849977200076*传真+78114063156228125437497500349999

这个菌丝体程序不支持非主字段:

圣人:K(K)<z(z)> = GF公司(37**)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^9 + z(z)*t吨^ + 1)
圣人:H(H).frobenius多项式矩阵(算法=“hypellfrob”)
回溯(最近一次调用):
...
未实现错误:仅实现了Frobenius矩阵的计算
定义在素域上的超椭圆曲线。
frobenius_多项式_pari()#

计算frobenius的charpoly,作为\(\ZZ[x]\),通过调用PARI函数超纤维素聚合物.

示例:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).frobenius_多项式_pari()
x^4+x^3-52*x^2+37*x+1369

二次扭转:

圣人:H(H) = 超椭圆曲线(2*t吨^5 + 2*t吨 + 4)
圣人:H(H).frobenius_多项式_pari()
x^4-x^3-52*x^2-37*x+1369

稍大的示例:

圣人:K(K) = GF公司(2003)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^7 + 487*t吨^5 + 9*t吨 + 1)
圣人:H(H).frobenius_多项式_pari()
x ^6-14*x ^5+1512*x ^4-66290*x ^3+3028536*x ^2-56168126*x+8036054027

也支持在非素域上定义的曲线:

圣人:K(K)<> = GF公司(7^2)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + *t吨 + 1)
圣人:H(H).frobenius_多项式_pari()
x^4+4*x^3+84*x^2+196*x+2401

圣人:K(K)<z(z)> = GF公司(23**)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^ + z(z)*t吨 + 4)
圣人:H(H).frobenius_多项式_pari()
x ^2-15*x+12167

在奇数特征的素数域上,\(小时)可能为非零:

圣人:K(K) = GF公司(101)
圣人:R(右)<t吨> = 多项式环(K(K))
圣人:H(H) = 超椭圆曲线(t吨^5 + 27*t吨 + , t吨)
圣人:H(H).frobenius_多项式_pari()
x^4+2*x^3-58*x^2+202*x+10201
_等级()#

输入:

  • E类:形式的超椭圆曲线\(y^2=f(x)\)在有限域上,\(\GF{q}\)

输出:

  • 公共关系:p秩

示例:

圣人:K(K)<x个> = GF公司(49, “x”)[]
圣人:C类 = 超椭圆曲线(x个^5 + 1, 0)
圣人:C类.p_等级()
0

圣人:K(K)<x个> = GF公司(9, “x”)[]
圣人:C类 = 超椭圆曲线(x个^7 - 1, 0)
圣人:C类.p_等级()
0

圣人:<x个> = GF公司(9, “a”)[]
圣人:E类 = 超椭圆曲线(x个^29 + 1, 0)
圣人:E类.p_等级()
0
()#

这个超椭圆曲线上的所有点。

示例:

圣人:x个 = 一夫多妻制(GF公司(7))
圣人:C类 = 超椭圆曲线(x个^7 - x个^2 - 1)
圣人:C类.()
[(0 : 1 : 0), (2 : 5 : 1), (2 : 2 : 1), (3 : 0 : 1), (4 : 6 : 1),
(4 : 1 : 1), (5 : 0 : 1), (6 : 5 : 1), (6 : 2 : 1)]
圣人:x个 = 一夫多妻制(GF公司(121, “a”))
圣人:C类 = 超椭圆曲线(x个^5 + x个 - 1, x个^2 + 2)
圣人:伦恩(C类.())
122

允许圆锥曲线(问题报告于github问题#11800已解决):

圣人:R(右)<x个> = GF公司(7)[]
圣人:H(H) = 超椭圆曲线(*x个^2 + 5*x个 + 1)
圣人:H(H).()
[(0 : 6 : 1), (0 : 1 : 1), (1 : 4 : 1), (1 : 3 : 1), (2 : 4 : 1),
(2 : 3 : 1), (3 : 6 : 1), (3 : 1 : 1)]

该方法目前列出了平面投影模型上的点,即闭包在吗\(\mathbb{P}^2\)由定义的曲线\(y^2+hy=f\).这意味着有一点\((0:1:0)\)如果曲线度数至少为4且\(度(f)>度(h)+1).这一点是平面模型的奇点。以后的实施可能考虑一个平滑的模型,因为它更相关对象。那么,对于唯一奇异点位于\((0:1:0)\),的无穷远处的点将被一系列有理点所取代平滑模型。我们用一个属2的例子来说明这一点超椭圆曲线:

圣人:R(右)<x个>=GF公司(11)[]
圣人:H(H) = 超椭圆曲线(x个*(x个+1)*(x个+2)*(x个+)*(x个+4)*(x个+5))
圣人:H(H).()
[(0 : 1 : 0), (0 : 0 : 1), (1 : 7 : 1), (1 : 4 : 1), (5 : 7 : 1), (5 : 4 : 1),
(6 : 0 : 1), (7 : 0 : 1), (8 : 0 : 1), (9 : 0 : 1), (10 : 0 : 1)]

上例中亏格2超椭圆曲线的平面模型曲线是\(\mathbb{P}^2\)由定义\(y^2z^4=g(x,z)\)哪里\(g(x,z)=x(x+z)(x+2z)(x+3z)(x+4z)(x+5z)。\)此模型有一个点位于无穷\((0:1:0)\)这也是平面的唯一奇点模型。相反,超椭圆曲线是光滑的,并通过方程式\(y^2=g(x,z)\)到加权投影空间\(\mathbb{P}(1,3,1)\)后一个模型在无穷远处有两个点:\((1:1:0)\)\((1:-1:0)\).

齐塔函数()#

计算超椭圆曲线的zeta函数。

示例:

圣人:F类 = GF公司(2); R(右)<t吨> = F类[]
圣人:H(H) = 超椭圆曲线(t吨^9 + t吨, t吨^4)
圣人:H(H).齐塔函数()
(16*x^8+8*x^7+8*x^6+4*x^5+6*x^4+2*x^3+2*x^2+x+1)/(2*x*2-3*x+1)

圣人:F类<> = GF公司(4); R(右)<t吨> = F类[]
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨^ + t吨^2 + t吨 + 1, t吨^2 + t吨 + 1)
圣人:H(H).ζ函数()
(16*x^4+8*x^3+x^2+2*x+1)/(4*x^2-5*x+1)

圣人:F类<> = GF公司(9); R(右)<t吨> = F类[]
圣人:H(H) = 超椭圆曲线(t吨^5 + *t吨)
圣人:H(H).齐塔函数()
(81*x^4+72*x^3+32*x^2+8*x+1)/(9*x^2-10*x+1)

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(t吨^5 + t吨 + 2)
圣人:H(H).齐塔函数()
(1369*x^4+37*x^3-52*x^2+x+1)/(37*x^2-38*x+1)

二次扭转:

圣人:R(右)<t吨> = 多项式环(GF公司(37))
圣人:H(H) = 超椭圆曲线(2*t吨^5 + 2*t吨 + 4)
圣人:H(H).齐塔函数()
(1369*x^4-37*x^3-52*x^2-x+1)/(37*x*2-38*x+1)