一般环上的椭圆曲线#

Sage定义了环上的椭圆曲线\(R)作为一个Weierstrass模型具有五个系数\([a1,a2,a3,a4,a6]\)在里面\(R)由提供

\[y^2+a_1xy+a_3y=x^3+a_2 x^2+a_4x+a_6

注意,椭圆曲线的(通常)模式理论定义\(R)需要判别式是\(R); Sage只规定discriminant为非零。还要注意,在岩浆中,“Weierstrass模型”指到具有的模型\(a_1=a_2=a_3=0),称为Short Weierstrass模型在里面圣人;这些并不总是存在于特征2和3中。

示例:

我们在一个复杂的基环上构造了一条椭圆曲线:

圣人:第页, , b条 = 97, 1, 
圣人:R(右).<u个> = GF公司(第页)[]
圣人:S公司.<v(v)> = R(右)[]
圣人:T型 = S公司.fraction_field(分数字段)()
圣人:E类 = 椭圆曲线(T型, [, b条]); E类
单变量分数域上由y^2=x^3+x+3定义的椭圆曲线
大小为97的有限域上u中的一元多项式环上的v中的多项式环
圣人:乳胶(E类)
y^2=x^{3}+x+3

作者:

  • William Stein(2005):初始版本

  • Robert Bradshaw等人…。

  • 约翰·克雷莫纳(2008-01):所有特征中的同构、自同构和扭曲

  • Julian Rueth(2014-04-11):改进缓存

  • Lorenz Panny(2022-04-14):新增蒙哥马利模型()

sage.schemes.elliptic_curves.ell_generic。椭圆曲线_通用(K(K),阿尼夫斯,类别=)#

基础:使用EqualityById,投影平面曲线

一般基环上的椭圆曲线。

示例:

圣人:E类 = 椭圆曲线([1,2,/4,7,19]); E类
有理域上由y^2+x*y+3/4*y=x^3+2*x^2+7*x+19定义的椭圆曲线
鼠尾草:荷载(E类.转储()) == E类
真的
圣人:E类 = 椭圆曲线([1,])
圣人: = E类([-1,1,1])
圣人:-5*
(179051/80089 : -91814227/22665187 : 1)
a1级()#

返回\(a_1\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,6])
圣人:E类.a1级()
1
a2类()#

返回\(a_2)这个椭圆曲线的不变量。

示例:

鼠尾草:E类 = 椭圆曲线([1,2,,4,6])
圣人:E类.a2类()
2
a3类()#

返回\(a_3\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,6])
圣人:E类.a3类()

a4类()#

返回\(a4\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,6])
圣人:E类.a4类()
4
a6类()#

返回\(a_6\)这个椭圆曲线的不变量。

示例:

鼠尾草:E类 = 椭圆曲线([1,2,,4,6])
圣人:E类.a6类()
6
a_变体()#

这个\(a)-椭圆曲线的不变量,如元组。

输出:

(tuple)-的5元组\(a)-这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.a_变体()
(1, 2, 3, 4, 5)

圣人:E类 = 椭圆曲线([0,1]); E类
有理域上由y^2=x^3+1定义的椭圆曲线
圣人:E类.a_变体()
(0, 0, 0, 0, 1)

鼠尾草:E类 = 椭圆曲线([GF公司(7)(),5])
圣人:E类.a_变体()
(0, 0, 0, 3, 5)
阿尼夫斯()#

这个\(a)-椭圆曲线的不变量,如元组。

输出:

(tuple)-的5元组\(a)-这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.a_变体()
(1, 2, 3, 4, 5)

圣人:E类 = 椭圆曲线([0,1]); E类
有理域上由y^2=x^3+1定义的椭圆曲线
圣人:E类.a_变体()
(0, 0, 0, 0, 1)

圣人:E类 = 椭圆曲线([GF公司(7)(),5])
鼠尾草:E类.a_变体()
(0,0,0,3,5)
自同构(领域=)#

从返回同构集自己(作为列表)。

保证出现同一和否定语态作为返回列表的第一项和第二项。

输入:

  • 领域(默认值)–一个字段,其中曲线的系数可以强制(默认情况下,使用曲线的基础场)。

输出:

(list)列表魏尔斯特拉斯同构对象由曲线的所有同构组成自己自身定义超过领域.

示例:

圣人:E类 = 椭圆曲线_from_j(QQ(QQ)(0))  #QQ上j=0的曲线
圣人:E类.自同构()
[由y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
在有理字段上
通过:(u,r,s,t)=(1,0,0,O),
y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
在有理字段上
通过:(u,r,s,t)=(-1,0,0,-1)]

我们还可以找到在扩展字段上定义的自同构:

圣人:x个 = 一夫多妻制(ZZ公司, “x”)
圣人:K(K).<> = 数字字段(x个^2 + )  #统一的邻接根#needs sage.rings.number_field
圣人:E类.自同构(K(K))                                                    #需要sage.rings.number_field
由y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
定义多项式x^2+3的中的数字字段
通过:(u,r,s,t)=(1,0,0,O),
y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
定义多项式x^2+3的中的数字字段
通过:(u,r,s,t)=(-1,0,0,-1),
y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
定义多项式x^2+3的中的数字字段
通过:(u,r,s,t)=(-1/2*a-1/2,0,0,O),
y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
定义多项式x^2+3的中的数字字段
通过:(u,r,s,t)=(1/2*a+1/2,0,0,-1),
由y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
定义多项式x^2+3的中的数字字段
通过:(u,r,s,t)=(1/2*a-1/2,0,0,O),
y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
定义多项式x^2+3的中的数字字段
通过:(u,r,s,t)=(-1/2*a+1/2,0,0,-1)]
圣人:[伦恩(椭圆曲线_from_j(GF公司(q个,“a”)(0)).自同构())              #需要sage.rings.finite_ring
....: 对于 q个 在里面 [2,4,,9,5,25,7,49]]
[2, 24, 2, 12, 2, 6, 6, 6]
b2型()#

返回\(b2\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.b2型()
9
b4号机组()#

返回\(b_4\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.b4号机组()
11
b6号机组()#

返回\(b_6\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.b6号机组()
29
b8号机组()#

返回\(b_8\)这个椭圆曲线的不变量。

示例:

鼠尾草:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.b8号机组()
35
b不变量()#

返回\(b)-椭圆曲线的不变量,如元组。

输出:

(tuple)-的4元组\(b)-这个椭圆曲线的不变量。

缓存此方法。

示例:

圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
圣人:E类.b不变量()
(-4, -20, -79, -21)

圣人:E类 = 椭圆曲线([-4,0])
鼠尾草:E类.b不变量()
(0, -8, 0, -16)

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.b不变量()
(9, 11, 29, 35)
圣人:E类.b2型()
9
圣人:E类.b4号机组()
11
圣人:E类.b6号机组()
29
圣人:E类.b8号机组()
35

算法:

这些是\(a)-不变量。

作者:

  • 威廉·斯坦因(2005-04-25)

基本扩展(_E)(R(右))#

返回的基本扩展自己\(R).

输入:

  • R(右)–一个环,其中\(a)-的不变量自己可以转换,也可以是适用于他们。

输出:

新环上的椭圆曲线\(a)-不变量是的图像\(a)-的不变量自己.

示例:

圣人:E类 = 椭圆曲线(GF公司(5), [1,1]); E类
大小为5的有限域上由y^2=x^3+x+1定义的椭圆曲线
圣人:E1级 = E类.基本扩展(_E)(GF公司(125,“a”)); E1级                                   #需要sage.rings.finite_ring
在大小为5^3的有限域上由y^2=x^3+x+1定义的椭圆曲线
底座(_R)()#

返回椭圆曲线的基环。

示例:

圣人:E类 = 椭圆曲线(GF公司(49, “a”), [,5])                                 #需要sage.rings.finite_ring
圣人:E类.底座(_R)()                                                         #需要sage.rings.finite_ring
大小为7^2的中的有限字段
圣人:E类 = 椭圆曲线([1,1])
圣人:E类.底座(_R)()
有理字段
圣人:E类 = 椭圆曲线(ZZ公司, [,5])
圣人:E类.底座(_R)()
整数环
补体第四成份()#

返回\(c_4\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
圣人:E类.补体第四成份()
496
c6号机组()#

返回\(c_6\)这个椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
圣人:E类.c6号机组()
20008
c不变量()#

返回\(c)-椭圆曲线的不变量,如元组。

缓存此方法。

输出:

(tuple)-的2元组\(c)-椭圆曲线的不变量。

示例:

圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
鼠尾草:E类.c不变量()
(496, 20008)

圣人:E类 = 椭圆曲线([-4,0])
圣人:E类.c不变量()
(192, 0)

算法:

这些是\(a)-不变量。

作者:

  • 威廉·斯坦因(2005-04-25)

更改(_R)(R(右))#

返回的基本更改自己\(R).

这与自.base_extend(R).

示例:

圣人:#需要sage.rings.finite_ring
圣人:地上二层 = GF公司(5^2,“a”);  = 地上二层.消息()
鼠尾草:四层 = GF公司(5^4,“b”); b条 = 四层.消息()
鼠尾草: = .夏普利().(戒指=四层, 多重性=False(错误))
圣人:小时 = 地上二层.高阶模([[0]], 四层)
圣人:E类 = 椭圆曲线(地上二层, [1,]); E类
y^2=x^3+x+a定义的椭圆曲线
大小为5^2的有限域上
圣人:E类.更改(_R)(小时)
由y^2=x^3+x+(4*b^3+4*b*2+4*b+3)定义的椭圆曲线
大小为5^4的b中的有限域
更改weierstrass_模型(*爆发)#

返回新的Weierstrass模型自己标准转换下\((u,r,s,t)\)

\[(x,y)\mapsto(x',y')=(u^2x+r,u^3y+su^2x+t)。\]

示例:

圣人:E类 = 椭圆曲线(“15a”)
圣人:F1 = E类.更改weierstrass_模型([1/2,0,0,0]); F1
由y^2+2*x*y+8*y=x^3+4*x^2-160*x-640定义的椭圆曲线
在有理字段上
圣人:地上二层 = E类.更改weierstrass_模型([7,2,1/,5]); 地上二层
椭圆曲线由定义
y^2+5/21*x*y+13/343*y=x^3+59/441*x ^2-10/7203*x-58/117649
在有理字段上
圣人:F1.是同构的(地上二层)
真的
鉴别的()#

返回此椭圆曲线的判别式。

缓存此方法。

示例:

圣人:E类 = 椭圆曲线([0,0,1,-1,0])
圣人:E类.鉴别的()
37

鼠尾草:E类 = 椭圆曲线([0, -1, 1, -10, -20])
圣人:E类.鉴别的()
-161051

圣人:E类 = 椭圆曲线([GF公司(7)(2),1])
圣人:E类.鉴别的()
1
除法多项式(,x个=,双扭转多重性=2,强制评估(_E)=)#

返回\(m^{th}\)这个椭圆的除法多项式曲线求值于\(x \).

如果满足以下条件,则缓存除法多项式\(x \).

输入:

  • –正整数。

  • x个–可选的环形元件,用作\(x \)变量。如果\(x \)(省略),则新的多项式环将为在椭圆曲线的基环上构造,及其发电机将用作\(x \)。请注意\(x \)不需要是多项式环的生成器;任何环形元件都起作用。这个允许快速计算扭转多项式评价的环的任何元素。

  • 双扭转多重性–0、1或2

    如果0:偶数\(米\)什么时候\(x \),一个单变量多项式在曲线的基环上返回,其中省略了因子它们的根是\(x \)-的坐标\(2\)-扭转点。何时\(x \)不是,这样一个多项式的求值\(x \)返回。

    如果2:偶数\(米\)什么时候\(x \),一元多项式返回曲线的基环上,其中包括根为\(x \)-的坐标\(2\)-扭转点。类似地,当\(x \)不是,对这样一个多项式\(x \)返回。

    如果1:偶数\(米\)什么时候\(x \),一个二元多项式返回曲线的基环上,其中包括因素\(2y+a_1x+a_3\)\(2\)-扭转点。何时\(x \)不是,它应该是长度为2的元组,并且这样一个多项式的求值\(x \)返回。

  • 强制评估(_E)(可选)–0、1或2

    默认情况下,此方法使用以前缓存的泛型除法多项式,以计算多项式的值给定的元素\(x \)只要这样做似乎有益。显式设置此标志将覆盖默认行为。

    请注意,评估通用划分的复杂性多项式的尺度比计算值的尺度差得多直接(使用递归公式),因此设置此标志可能会影响性能。

    如果为0:不要使用缓存的泛型除法多项式。

    如果1:如果此的泛型除法多项式\(米\)已经是之前缓存过,在\(x \)计算结果。

    如果2:计算值为\(x \)通过评估通用除法多项式。如果通用\(米\)-除法多项式尚未缓存,请先计算并缓存它。

示例:

圣人:E类 = 椭圆曲线([0,0,1,-1,0])
圣人:E类.除法多项式(1)
1
圣人:E类.除法多项式(2, 双扭转多重性=0)
1
圣人:E类.除法多项式(2, 双扭转多重性=1)
2*y+1
圣人:E类.除法多项式(2, 双扭转多重性=2)
4*x^3-4*x+1
鼠尾草:E类.除法多项式(2)
4*x^3-4*x+1
圣人:[E类.除法多项式(, 双扭转多重性=) 对于  在里面 范围()]
[3*x^4-6*x^2+3*x-1,3*x ^4-6*x ^2+3*x-1,3*x ^ 4-6*x ^2+3*x-1]
圣人:[类型(E类.除法多项式(, 双扭转多重性=)) 对于  在里面 范围()]
[<…'sage.rings.polymentary.polymonial_rational_flint.Polymonial_ rational_frint'>,
<... 'sage.rings.多项式.多重多项式_libsingular。MPolynomial_libsingular'>,
<... 'sage.rings.polynomial.polynologial_rational_flint。多项式_rational_flint'>]
圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
鼠尾草:R(右).<z(z)> = 多项式环(QQ(QQ))
圣人:E类.除法多项式(4, z(z), 0)
2*z^6-4*z^5-100*z^4-790*z^3-210*z^2-1496*z^-5821
圣人:E类.除法多项式(4, z(z))
8*z^9-24*z^8-464*z^7-2758*z^6+6636*z^5+34356*z^4
+53510*z^3+99714*z^2+351024*z+459859

这不起作用,因为当two_torsion_multiplicity为1时,我们计算一个二元多项式,并且必须在长度2:

圣人:E类.除法多项式(4,z(z),1)
回溯(最近一次调用):
...
ValueError:x应为长度为2(或无)的元组
当two_torsion_multiplicity为1时
圣人:R(右).<z(z),> = 多项式环(QQ(QQ), 2)
圣人:E类.除法多项式(4, (z(z),), 1).因素()
(2*w+1)*(2*z^6-4*z^5-100*z^4-790*z^3-210*z^2-1496*z-5821)

我们还可以在以下某个点上计算此二元多项式:

鼠尾草: = E类(5,5)
鼠尾草:E类.除法多项式(4,,双扭转多重性=1)
-1771561
除法多项式0(n个,x个=)#

返回\(n^{th}\)扭转(除法)多项式,无2-扭转系数,如果\(n\)是偶数,作为中的多项式\(x \).

这些是多项式\(g_n\)定义于【MT1991】,但有标牌翻了个平手\(n\),所以领先系数为总是积极的。

注意

此功能用于内部使用;用户应使用除法多项式().

另请参见

输入:

  • n个–正整数或特殊值-1-2这意味着\(B_6=(2y+a_1x+a_3)^2\)\(B_6^2\)分别(英寸符号【MT1991】); 或整数列表。

  • x个–用作“x”变量的环元素或(默认值:). 如果,则新的多项式环将被构造在椭圆曲线的基环上,并且其发电机将用作x个。请注意x个不需要是多项式环的生成器;任何环形元件都可以。这个允许快速计算扭转多项式评价的环的任何元素。

算法:

中描述的递归【MT1991】.递归计算公式\(O(\log ^2 n)\)次。

作者:

  • David Harvey(2006-09-24):初始版本

  • 约翰·克雷莫纳(2008-08-26):统一除法多项式代码

示例:

鼠尾草:E类 = 椭圆曲线(“37a”)
圣人:E类.除法多项式0(1)
1
圣人:E类.除法多项式0(2)
1
圣人:E类.除法多项式0()
3*x^4-6*x^2+3*x-1
圣人:E类.除法多项式0(4)
2*x^6-10*x^4+10*x^3-10*x^2+2*x+1
圣人:E类.除法多项式0(5)
5*x^12-62*x^10+95*x^9-105*x^8-60*x^7+285*x^6-174*x^5-5*x*^4-5*x^3+35*x^2-15*x+2
圣人:E类.除法多项式0(6)
3*x^16-72*x^14+168*x^13-364*x^12+1120*x^10-1144*x^9+300*x^8-540*x^7+1120*x^6-588*x^5-133*x^4+252*x^3-114*x^2+22*x-1
圣人:E类.除法_多项式_0(7)
7*x^24-308*x^22+986*x^21-2954*x^20+28*x^19+17171*x^18-23142*x^17+511*x^16-5012*x^15+43804*x^14-7140*x^13-96950*x^12+111356*x^11-19516*x^10-49707*x^9+40054*x^8-124*x^7-18382*x^6+13342*x^5-4816*x^4+1099*x^3-210*x^2+35*x-3
圣人:E类.除法多项式0(8)
4*x^30-292*x^28+1252*x^27-5436*x^26+2340*x^25+39834*x^24-79560*x^23+51432*x^22-142896*x^21+451596*x*^20-212040*x^19-1005316*x^18+1726416*x*x^17-671160*x^16-954924*x^15+1119552*x^14+313308*x^13-1502818*x^12+118908*x^11-160152*x ^10-399176*x ^9+386142*x ^8-220128*x ^7+99558*x ^6-33528*x ^5+6042*x ^4+310*x ^3-406*x^2+78*x-5
圣人:E类.除法多项式0(18) % E类.除法多项式0(6) == 0
真的

举例说明与扭转点的关系:

圣人:F类 = GF公司(11)
圣人:E类 = 椭圆曲线(F类, [0, 2]); E类
大小为11的有限域上由y^2=x^3+2定义的椭圆曲线
圣人:(f) = E类.除法多项式0(5); (f)
5*x^12+x^9+8*x^6+4*x^3+7
圣人:(f).因素()
(5) *(x^2+5)*(x^2+2*x+5)*(x^2+5*x+7)
*(x^2+7*x+7)*(x^2+9*x+5)*(x ^2+10*x+七)

这表明\(x \)-所有5个扭转点的坐标\(E)在中\(\GF{11^2}\),因此\(年\)-坐标在\(\GF{11^4}\):

圣人:#需要sage.rings.finite_ring
圣人:K(K) = GF公司(11^4, “a”)
圣人:X(X) = E类.更改(_R)(K(K))
圣人:(f) = X(X).除法多项式0(5)
圣人:x_字 = (f).(多重性=False(错误)); x_字
[10*a^3+4*a^2+5*a+6,
9*a^3+8*a^2+10*a+8,
8*a^3+a^2+4*a+10,
8*a^3+a^2+4*a+8,
8*a^3+a^2+4*a+4,
6*a^3+9*a^2+3*a+4,
5*a^3+2*a^2+8*a+7,
3*a^3+10*a^2+7*a+8,
3*a^3+10*a^2+7*a+3,
3*a^3+10*a^2+7*a+1,
2*a^3+3*a^2+a+7,
a^3+7*a^2+6*a]

现在,我们检查这些确实是\(x \)-的坐标5-扭转点\(E):

圣人:对于 x个 在里面 x坐标:                                                    #需要sage.rings.finite_ring
....:    断言 X(X).提升_x(x个).秩序() == 5

多项式的根是\(x \)-点的坐标\(P\)这样的话\(mP=0)但是\(2P\不=0\):

圣人:E类 = 椭圆曲线(“14a1”)
圣人:T型 = E类.扭转_子组()
圣人:[n个*T型.0 对于 n个 在里面 范围(6)]
[(0 : 1 : 0),
(9 : 23 : 1),
(2 : 2 : 1),
(1 : -1 : 1),
(2 : -5 : 1),
(9 : -33 : 1)]
圣人:波尔 = E类.除法_多项式_0(6)
鼠尾草:xlist公司 = 波尔.(多重性=False(错误)); xlist公司
[9, 2, -1/3, -5]
圣人:[E类.提升_x(x个, 全部的=真的) 对于 x个 在里面 xlist公司]
[[(9 : -33 : 1), (9 : 23 : 1)], [(2 : -5 : 1), (2 : 2 : 1)], [], []]

注意

第2阶点和身份没有出现。具有的点\(x=-1/3\)\(x=-5\)都是不合理的。

正式的()#

返回与此椭圆曲线关联的形式组。

此方法已缓存。

示例:

圣人:E类 = 椭圆曲线(“37a”)
圣人:E类.formal_group(格式组)()
椭圆曲线的形式群
由有理字段上的y^2+y=x^3-x定义
formal_group(格式组)()#

返回与此椭圆曲线关联的形式组。

缓存此方法。

示例:

圣人:E类 = 椭圆曲线(“37a”)
圣人:E类.formal_group(格式组)()
椭圆曲线的形式群
由有理域上的y^2+y=x^3-x定义
弗罗贝尼乌斯·伊索根尼(n个=1)#

返回\(n\)-从这条曲线到它的伽罗瓦共轭。

弗罗贝尼乌斯内幕态射是其中的特例\(n\)可被曲线基环的度数整除。

示例:

圣人:#需要sage.rings.finite_ring
圣人:z3(零3), = GF公司(13^).氏族()
圣人:E类 = 椭圆曲线([z3(零3), z3(零3)^2])
圣人:E类.弗罗贝尼乌斯·伊索根尼()
13度弗罗贝尼乌斯等值线:
自:y^2=x^3+z3*x+z3 ^2定义的椭圆曲线
在大小为13^3的z3中的有限域上
To:由y^2=x^3+(5*z3^2+7*z3+11)*x+(5*z3^2+12*z3+1)定义的椭圆曲线
在大小为13^3的z3中的有限域上
圣人:E类.frobenius_同源()
2197度的Frobenius自同态=13^3:
自:y^2=x^3+z3*x+z3 ^2定义的椭圆曲线
在大小为13^3的z3中的有限域上
收件人:y^2=x^3+z3*x+z3^2定义的椭圆曲线
在大小为13^3的z3中的有限域上
消息()#

函数返回此椭圆曲线的第i个生成器。

注意

依赖于正在实现的gens()。

示例:

圣人:R(右).<a1级,a2类,a3类,a4类,a6类> = QQ(QQ)[]
圣人:E类 = 椭圆曲线([a1级,a2类,a3类,a4类,a6类])
鼠尾草:E类.消息(0)
回溯(最近一次调用):
...
NotImplementedError:未实现。
氏族()#

用于返回椭圆曲线生成器的占位符函数。

注意

此功能在特定派生类,例如EllipticCurve_rational_field。

示例:

圣人:R(右).<a1级,a2类,a3类,a4类,a6类> = QQ(QQ)[]
圣人:E类 = 椭圆曲线([a1级,a2类,a3类,a4类,a6类])
圣人:E类.氏族()
回溯(最近一次调用):
...
NotImplementedError:未实现。
圣人:E类 = 椭圆曲线(QQ(QQ), [1,1])
圣人:E类.氏族()
[(0:1:1)]
超椭圆多项式()#

返回一对多项式\(克(x)\),\(h(x)\)这样,这个椭圆曲线可以由标准超椭圆方程定义

\[y^2+h(x)y=g(x).\]

示例:

圣人:R(右).<a1级,a2类,a3类,a4类,a6类>=QQ(QQ)[]
圣人:E类 = 椭圆曲线([a1级,a2类,a3类,a4类,a6类])
圣人:E类.超椭圆多项式()
(x^3+a2*x^2+a4*x+a6,a1*x+a3)
恒等同态()#

返回此椭圆曲线的恒等式自同态作为椭圆曲线Hom对象。

示例:

圣人:E类 = 椭圆曲线(j个=42)
鼠尾草:E类.恒等同态()
有理域上由y^2=x^3+5901*x+1105544定义的椭圆曲线的椭圆曲线自同态
通过:(u,r,s,t)=(1,0,0,O)
圣人:E类.恒等同态() == E类.scalar_复制(1)
真的
是同构的(其他,领域=)#

无论是否返回自己与同构其他.

输入:

  • 其他–另一条椭圆曲线。

  • 领域(默认为“无”)–一个字段曲线的系数可以强制(默认情况下,使用曲线的基础字段)。

输出:

(bool)如果曲线存在同构,则为True自己曲线其他定义超过领域.

示例:

圣人:E类 = 椭圆曲线('389a')
圣人:F类 = E类.更改weierstrass_模型([2,,4,5]); F类
由y^2+4*x*y+11/8*y=x^3-3/2*x^2-13/16*x定义的椭圆曲线
在有理字段上
圣人:E类.是同构的(F类)
真的
圣人:E类.是同构的(F类.更改(_R)(立方厘米))
False(错误)
曲线上的is_on(x个,)#

如果返回True\((x,y)\)是此曲线上的仿射点。

输入:

  • x个,–曲线基环的元素。

示例:

圣人:E类 = 椭圆曲线(QQ(QQ),[1,1])
圣人:E类.曲线上的is_on(0,1)
真的
圣人:E类.is_on_曲线(1,1)
False(错误)
is_x_字(x个)#

如果返回Truex个\(x \)-曲线上一点的坐标。

注意

另请参见lift_x()用给定的\(x \)-坐标。在以下情况下,此功能可能很有用测试基场元素是否为正方形比求平方根还要快。

示例:

圣人:E类 = 椭圆曲线(“37a”); E类
有理域上由y^2+y=x^3-x定义的椭圆曲线
圣人:E类.is_x_字(1)
真的
圣人:E类.is_x_字(2)
真的

没有具有x坐标3的有理点:

圣人:E类.is_x_字()
False(错误)

然而,在\(E(\RR)\):

圣人:E类.更改(_R)(右后).is_x_字()
真的

当然,它总是在\(E(\CC)\):

圣人:E类.更改(_R)(右后).is_x_字(-)
False(错误)
鼠尾草:E类.更改(_R)(立方厘米).is_x_字(-)
真的

作者:

  • 约翰·克雷莫纳(2008-08-07):改编自lift_x()

同构(u个,,=0,t吨=0,is_域=0)#

给定四个值\(u,r,s,t\)在该曲线的基环中,返回这个魏尔斯特拉斯同构由定义\(u,r,s,t\)用这个曲线作为其密码子。(值\(u\)必须是一个单位;价值观\(r,s,t\)默认为零。)

(可选)如果关键字参数is_域设置为真的,返回由定义的同构\(u,r,s,t\)以该曲线为其有限公司域。

示例:

圣人:E类 = 椭圆曲线([1, 2, , 4, 5])
圣人:国际标准化组织 = E类.同构(6); 国际标准化组织
椭圆曲线形态:
自:有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
收件人:有理域上由y^2+1/6*x*y+1/72*y=x^3+1/18*x^2+1/324*x+5/46656定义的椭圆曲线
通过:(u,r,s,t)=(6,0,0,O)
圣人:国际标准化组织.领域() == E类
真的
圣人:国际标准化组织.密码子() == E类.缩放曲线(1 / 6)
真的

圣人:国际标准化组织 = E类.同构(1, 7, 8, 9); 国际标准化组织
椭圆曲线形态:
自:有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
至:有理域上由y^2+17*x*y+28*y=x^3-49*x^2-54*x+303定义的椭圆曲线
通过:(u,r,s,t)=(1,7,8,9)
圣人:国际标准化组织.领域() == E类
真的
圣人:国际标准化组织.密码子() == E类.rst_transform(第一次转换)(7, 8, 9)
真的

圣人:国际标准化组织 = E类.同构(6, 7, 8, 9); 国际标准化组织
椭圆曲线形态:
自:有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
收件人:有理域上由y^2+17/6*x*y+7/54*y=x^3-49/36*x^2-1/24*x+101/15552定义的椭圆曲线
通过:(u,r,s,t)=(6,7,8,9)
圣人:国际标准化组织.领域() == E类
真的
圣人:国际标准化组织.密码子() == E类.rst_transform(第一次转换)(7, 8, 9).缩放曲线(1 / 6)
真的

这个is_域参数颠倒了结构域和密码域的作用:

鼠尾草:E类 = 椭圆曲线([1, 2, , 4, 5])
圣人:国际标准化组织 = E类.同构(6, is_域=真的); 国际标准化组织
椭圆曲线形态:
自:有理域上由y^2+6*x*y+648*y=x^3+72*x^2+5184*x+233280定义的椭圆曲线
收件人:有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
通过:(u,r,s,t)=(6,0,0,O)
圣人:国际标准化组织.领域() == E类.缩放曲线(6)
真的
圣人:国际标准化组织.密码子() == E类
真的

圣人:国际标准化组织 = E类.同构(1, 7, 8, 9, is_域=真的); 国际标准化组织
椭圆曲线形态:
自:有理域上由y^2-15*x*y+90*y=x^3-75*x^2+796*x-2289定义的椭圆曲线
收件人:有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
通过:(u,r,s,t)=(1,7,8,9)
圣人:国际标准化组织.领域().rst_transform(第一次转换)(7, 8, 9) == E类
真的
圣人:国际标准化组织.密码子() == E类
真的

圣人:国际标准化组织 = E类.同构(6, 7, 8, 9, is_域=真的); 国际标准化组织
椭圆曲线形态:
自:有理域上由y^2-10*x*y+700*y=x^3+35*x^2+9641*x+169486定义的椭圆曲线
收件人:有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
通过:(u,r,s,t)=(6,7,8,9)
圣人:国际标准化组织.领域().rst_transform(第一次转换)(7, 8, 9) == E类.缩放曲线(6)
真的
圣人:国际标准化组织.密码子() == E类
真的
同构to(其他)#

给出另一个weierstrass模型其他属于自己,返回一个同构自己其他.

输入:

  • 其他–椭圆曲线同构于自己.

输出:

(Weierstrassmorphism)来自自己其他.

注意

如果所讨论的曲线不是同构的值错误已引发。

示例:

圣人:E类 = 椭圆曲线(“37a”)
圣人:F类 = E类.short_weierstrass_模型()
圣人: = E类.同构to(F类); 
椭圆曲线形态:
自:有理域上由y^2+y=x^3-x定义的椭圆曲线
To:有理域上由y^2=x^3-16*x+16定义的椭圆曲线
通过:(u,r,s,t)=(1/2,0,0,-1/2)
圣人: = E类(0,-1,1)
圣人:()
(0 : -4 : 1)
圣人:(5*)
(1 : 1 : 1)
圣人:5*()
(1 : 1 : 1)
圣人:120*() == (120*)
真的

我们还可以处理不同基环的注入:

圣人:x个 = 一夫多妻制(ZZ公司, “x”)
圣人:K(K).<> = 数字字段(x个^ - 7)                                          #需要sage.rings.number_field
圣人:E类.同构to(E类.更改(_R)(K(K)))                                    #需要sage.rings.number_field
椭圆曲线形态:
自:有理域上由y^2+y=x^3-x定义的椭圆曲线
收件人:由y^2+y=x^3+(-1)*x定义的椭圆曲线
定义多项式x^3-7的中的数字字段
通过:(u,r,s,t)=(1,0,0,O)
同构(其他,领域=)#

从返回同构集自己其他(作为列表)。

输入:

  • 其他–另一条椭圆曲线。

  • 领域(默认值)–一个字段,其中曲线的系数可以强制(默认情况下,使用曲线的基础字段)。

输出:

(list)列表魏尔斯特拉斯同构对象包含所有曲线的同构自己到曲线其他定义超过领域.

示例:

圣人:E类 = 椭圆曲线_from_j(QQ(QQ)(0)) #QQ上j=0的曲线
圣人:F类 = 椭圆曲线(“27a3”) #应该是同一个
鼠尾草:E类.同构(F类)
由y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
在有理字段上
通过:(u,r,s,t)=(1,0,0,O),
y^2+y=x^3定义的椭圆曲线的椭圆曲线自同态
在有理字段上
通过:(u,r,s,t)=(-1,0,0,-1)]

我们还可以找到在扩展字段上定义的同构:

圣人:#需要sage.rings.finite_ring
圣人:E类 = 椭圆曲线(GF公司(7), [0,0,0,1,1])
圣人:F类 = 椭圆曲线(GF公司(7), [0,0,0,1,-1])
圣人:E类.同构(F类)
[]
圣人:E类.同构(F类, GF公司(49,“a”))
[椭圆曲线形态:
自:y^2=x^3+x+1定义的椭圆曲线
大小为7^2的有限域上
收件人:由y^2=x^3+x+6定义的椭圆曲线
在大小为7^2的a中的有限域上
通过:(u,r,s,t)=(a+3,0,0,0),
椭圆曲线形态:
自:y^2=x^3+x+1定义的椭圆曲线
大小为7^2的有限域上
收件人:由y^2=x^3+x+6定义的椭圆曲线
大小为7^2的有限域上
通过:(u,r,s,t)=(6*a+4,0,0,O)]
j_变量()#

返回\(j)-这个椭圆曲线的不变量。

缓存此方法。

示例:

圣人:E类 = 椭圆曲线([0,0,1,-1,0])
圣人:E类.j_变量()
110592/37

圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
鼠尾草:E类.j_变量()
-122023936/161051

圣人:E类 = 椭圆曲线([-4,0])
圣人:E类.j_变量()
1728

圣人:E类 = 椭圆曲线([GF公司(7)(2),1])
圣人:E类.j_变量()
1
提升_x(x个,全部的=False(错误),延伸=False(错误))#

返回给定的一个或所有点\(x \)-坐标。

此方法是确定性的:它每次返回相同的数据再次调用相同的时间\(x \).

输入:

  • x个–曲线基环或延伸的元素。

  • 全部的(bool,默认为False)–如果为True,则返回a(可能空)所有点的列表;如果为False,则只返回一个点,或提出值错误如果没有。

  • 延伸(bool,默认为False)–

    • 如果False(错误),如有必要和可能,将底座延伸至包括\(x \),并且仅在此基础上定义了返回点振铃,或在没有此错误时引发错误\(x \)-坐标;

    • 如果真的,如有必要,将延长基环包含\(年\)-此点的坐标\(x \)-坐标,除了可能的基础更改包括\(x \).

输出:

此曲线上最多包含2个点的点或列表,或将此曲线的基变换为更大的环。

另请参见

is_x_coord()

示例:

圣人:E类 = 椭圆曲线(“37a”); E类
有理域上由y^2+y=x^3-x定义的椭圆曲线
鼠尾草:E类.提升_x(1)
(1 : -1 : 1)
圣人:E类.提升_x(2)
(2 : -3 : 1)
圣人:E类.提升_x(1/4, 全部的=真的)
[(1/4 : -5/8 : 1), (1/4 : -3/8 : 1)]

没有理性的观点\(x \)-坐标3:

圣人:E类.提升_x()
回溯(最近一次调用):
...
ValueError:没有x坐标为3的点
有理域上y^2+y=x^3-x定义的椭圆曲线

我们可以使用延伸参数以进行必要的二次扩展。请注意,在这种情况下,返回的点是新曲线对象上的点,更改的结果基环到的父级\(x \):

圣人: = E类.提升_x(, 延伸=真的);                                        #需要sage.rings.number_field
(3:-y-1:1)
圣人:.曲线()                                                             #需要sage.rings.number_field
椭圆曲线由y^2+y=x^3+(-1)*x定义
在y中定义多项式y^2+y-24的数域上

或者我们可以扩展标量。有两个这样的点\(E(\RR)\):

圣人:E类.更改(_R)(右后).提升_x(, 全部的=真的)
[(3.00000000000000 : -5.42442890089805 : 1.00000000000000),
(3.00000000000000 : 4.42442890089805 : 1.00000000000000)]

当然,它总是在\(E(\CC)\):

圣人:E类.更改(_R)(右后).提升_x(.5, 全部的=真的)
[]
圣人:E类.更改(_R)(立方厘米).提升_x(.5)
(0.5000000000000:-0.5000000000000000-0.353553390593274*I:10000000000000)

在这个例子中,我们从定义在\(\QQ\)没有理性点\(x=0),但使用延伸 = 真的我们可以在二次曲线上构造这样一个点字段:

圣人:E类 = 椭圆曲线([0,0,0,0,2]); E类
有理域上由y^2=x^3+2定义的椭圆曲线
圣人: = E类.提升_x(0, 延伸=真的);                                        #需要sage.rings.number_field
(0:-y:1)
圣人:.曲线()                                                             #需要sage.rings.number_field
由y^2=x^3+2定义的椭圆曲线
定义多项式y^2-2的y中的数字域

我们也可以在有限域上执行这些操作:

圣人:E类 = 椭圆曲线(“37a”).更改(_R)(GF公司(17)); E类
大小为17的有限域上由y^2+y=x^3+16*x定义的椭圆曲线
圣人:E类.提升_x(7)
(7 : 5 : 1)
圣人:E类.提升_x()
回溯(最近一次调用):
...
ValueError:没有x坐标为3的点
大小为17的有限域上由y^2+y=x^3+16*x定义的椭圆曲线

请注意,只有一个升降机\(x \)-坐标10英寸\(E(\GF{17})\):

鼠尾草:E类.提升_x(10, 全部的=真的)
[(10:8:1)]

我们也可以举起更多奇异的戒指。如果提供的x值是基的扩展,请注意返回值位于基本延伸曲线上:

圣人:E类 = 椭圆曲线(“37a”)
圣人: = E类.提升_x(pAdic字段(17, 5)(6));                                  #需要sage.rings.padics
(6+O(17^5):14+O(17%):1+O(17 ^5))
圣人:.曲线()                                                             #需要sage.rings.padics
椭圆曲线由定义
y^2+(1+O(17^5))*y=x^3+
在17-adic字段上,具有上限相对精度5
圣人:K(K).<t吨> = PowerSeriesRing系列(QQ(QQ), “t”, 5)
圣人: = E类.提升_x(1 + t吨); 
(1+t:-1-2*t+t^2-5*t^3+21*t^4+O(t^5):1)
圣人:K(K).<> = GF公司(16)                                                        #需要sage.rings.finite_ring
圣人: = E类.更改(_R)(K(K)).提升_x(^);                                    #需要sage.rings.finite_ring
(a^3:a^3+a:1)
圣人:.曲线()                                                             #需要sage.rings.finite_ring
大小为2^4的有限域上由y^2+y=x^3+x定义的椭圆曲线

我们可以扩展基本字段以包含关联的\(年\)值:

圣人:E类 = 椭圆曲线([0,0,0,0,2]); E类
有理域上由y^2=x^3+2定义的椭圆曲线
圣人:x个 = 一夫多妻制(QQ(QQ))
圣人: = E类.提升_x(x个, 延伸=真的); 
(x:-y:1)

这一点是E:

圣人:.曲线()
由y^2=x^3+2定义的椭圆曲线
y中的一元商多项式环
有理域上x中一元多项式环的分数域
模量为y^2-x^3-2
鼠尾草:-
(x:y:1)
圣人:2*
((1/4*x^4-4*x)/(x^3+2):((-1/8*x^6-5*x^3+4)/(x^6+4*x^3+4))*y:1)

检查一下github问题#30297已修复:

圣人:K(K) = Qp(质量计划)(5)                                                             #需要sage.rings.padics
圣人:E类 = 椭圆曲线([K(K)(0), K(K)(1)])                                       #需要sage.rings.padics
圣人:E类.提升_x(1, 延伸=真的)                                              #需要sage.rings.padics
(1+O(5^20):y+O(5 ^20):1+O(五^20))

作者:

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

  • 约翰·克雷莫纳(2017-11-10)

蒙哥马利模型(扭曲的=False(错误),同构=False(错误))#

为此返回一个(扭曲或非扭曲)蒙哥马利模型椭圆曲线,如果可能的话。

Montgomery曲线是形式为

\[按^2=X^3+AX^2+X。\]

蒙哥马利曲线被称为无捻的如果\(B=1).

输入:

  • 扭曲的–布尔值(默认值:False(错误)); 允许\(第1项)

  • 同构–布尔值(默认值:False(错误)); 也返回一个从该曲线到计算的蒙哥马利模型的同构

输出:

如果扭曲的False(错误)(默认)椭圆曲线_通用对象封装未扭曲的蒙哥马利曲线。否则,a投影平面曲线封装(可能扭曲的)蒙哥马利曲线的对象。

如果同构真的,此方法返回由以下内容组成的元组这样的曲线与合适类型的同构(或者魏尔斯特拉斯同构带反转的Weierstrass变换)从这条曲线到蒙哥马利模型。

示例:

圣人:E类 = 椭圆曲线(QQbar(QQbar), “11a1”)                                      #需要sage.rings.number_field
圣人:E类.蒙哥马利模型()                                                  #需要sage.rings.number_field
椭圆曲线由y^2=x^3+(-1.953522420987248?)*x^2+x定义
代数域上
圣人:E类 = 椭圆曲线(GF公司(431^2), [7,7])                                   #需要sage.rings.finite_ring
圣人:E类.蒙哥马利模型()                                                  #需要sage.rings.finite_ring
由y^2=x^3+(51*z2+190)*x^2+x定义的椭圆曲线
在大小为431^2的z2中的有限域上

蒙哥马利和维尔斯特拉斯形式之间的同构可以使用同构参数:

圣人:E类.蒙哥马利模型(同构=真的)                                     #需要sage.rings.finite_ring
(由y^2=x^3+(51*z2+190)*x^2+x定义的椭圆曲线
z2中431^2大小的有限域上,
椭圆曲线形态:
自:y^2=x^3+7*x+7定义的椭圆曲线
z2中431^2大小的有限域
收件人:由y^2=x^3+(51*z2+190)*x^2+x定义的椭圆曲线
z2中431^2大小的有限域
通过:(u,r,s,t)=(64*z2+407159,0,0))

并不是所有的椭圆曲线都有蒙哥马利模型定义:

圣人:E类 = 椭圆曲线(GF公司(257), [1,1])
圣人:E类.蒙哥马利模型()
回溯(最近一次调用):
...
ValueError:由y^2=x^3+x+1定义的椭圆曲线
257大小的有限域上没有Montgomery模型
圣人:E类 = 椭圆曲线(GF公司(257), [10,10])
圣人:E类.蒙哥马利模型()
回溯(最近一次调用):
...
数值错误:椭圆曲线由y^2=x^3+10*x+10定义
257大小的有限域上没有无扭曲的Montgomery模型

然而,正如错误消息所暗示的那样,后一条曲线确实如此承认扭曲的蒙哥马利模型,可通过经过twisted=真:

圣人:E类.蒙哥马利模型(扭曲的=真的)
257大小有限域上的投影平面曲线
定义为-x^3+8*x^2*z-127*y^2*z-x*z^2

因为Sage内部将椭圆曲线表示为(长)Weierstrass没有蒙哥马利特色的曲线\(B\)系数在这种情况下返回的曲线仅仅是投影平面曲线而不是像往常一样椭圆曲线_通用.

此类型曲线上的算法未在本地实现,但可以通过来回映射到相应的Weierstrass曲线:

圣人:C类, (f) = E类.蒙哥马利模型(扭曲的=真的, 同构=真的)
圣人:(f)
方案形态:
自:y^2=x^3+10*x+10定义的椭圆曲线
在257大小的有限字段上
To:257大小的有限域上的投影平面曲线
定义为-x^3+8*x^2*z-127*y^2*z-x*z^2
Defn:通过发送(x:y:z)到在坐标上定义
(x+116*z:-y:-85*z)
圣人: = (f).反向(); 
方案变形:
From:尺寸为257的有限域上的投影平面曲线
定义为-x^3+8*x^2*z-127*y^2*z-x*z^2
收件人:由y^2=x^3+10*x+10定义的椭圆曲线
在257大小的有限字段上
Defn:通过发送(x:y:z)到在坐标上定义
(-85*x-116*z:85*y:z)
圣人: = C类(70, 8)
圣人: = C类(17, 17)
圣人: +              #这行不通。。。
回溯(最近一次调用):
...
TypeError:不支持+:的操作数父级。。。
圣人:(f)(() + ())    # ...但这是真的
(107 : 168 : 1)

使用Weil配对满足的事实\(e(psi(P),psi(Q))=e(P,Q)^{\deg\psi}\),甚至可以通过这种方式模拟配对(注意同构具有程度\(1\)):

圣人:#需要sage.rings.finite_ring
圣人:F类.<z2型> = GF公司(257^2)
圣人:C类_ = C类.更改(_R)(F类)
圣人:克_ = .更改(_R)(F类)
圣人:克_().秩序()
12
圣人:T型 = C类_(-7 * z2型 - 57, 31 * z2型 - 52, 1)
圣人:克_(T型).秩序()
12
圣人:克_().weil配对(克_(T型), 12)
15*z2+204

另一种选择是简单地将基本场扩展到足够大对于具有未扭曲的Montgomery模型的曲线:

圣人:C类_ = E类.更改(_R)(F类).蒙哥马利模型(); C类_                          #需要sage.rings.finite_ring
由y^2=x^3+249*x^2+x定义的椭圆曲线
z2中257^2大小的有限域
圣人:小时 = C类.定义_多项式().更改(_R)(F类); 小时                         #需要sage.rings.finite_ring
-x^3+8*x^2*z-127*y^2*z-x*z^2
圣人:C类_.是同构的(椭圆曲线_from_cubic(小时).密码子())              #需要sage.rings.finite_ring
真的

另请参见

逆转换-计算Weierstrass模型给定的蒙哥马利曲线-可以使用椭圆曲线_from_cubic().

算法:【CS2018】, §2.4

参考文献:

乘法_by_m(,仅限x(_O)=False(错误))#

返回乘法-\(米\)映射自自己自己

结果是两个变量中的一对有理函数\(x \),\(年\)(或一个变量中的有理函数\(x \)如果仅x真的).

输入:

  • –非零整数

  • 仅限x(_O)–布尔值(默认值:False(错误))如果真的,返回只有\(x \)-地图坐标(作为有理函数在一个变量中)。

输出:

  • 一双\(f(x),g(x,y)),其中\(f)\(克\)是理性的度为的函数\(年\)在里面\(g(x,y)\)精确到1,

  • 或者只是\(f(x)\)如果仅限x(_O)真的

注意

  • 结果不会被缓存。

  • 允许为负数(但不允许为0)。

示例:

圣人:E类 = 椭圆曲线([-1,])

我们验证了乘1就是恒等式:

圣人:E类.乘法_by_m(1)
(x,y)

2的乘法更复杂:

圣人:(f) = E类.乘法_by_m(2)
圣人:(f)
((x^4+2*x^2-24*x+1)/(4*x^3-4*x+12),
(8*x^6*y-40*x^4*y+480*x^3*y-40*x^2*y+96*x*y-568*y)/(64*x^6-128*x^4+384*x^3+64*x^2-384*x+576)

仅抓取x坐标(工作量较小):

圣人:mx(百万倍) = E类.乘法_by_m(2, 仅限x(_O)=真的); mx(百万倍)
(1/4*x^4+1/2*x^2-6*x+1/4)/(x^3-x+3)
圣人:mx(百万倍).父母()
有理域上x中一元多项式环的分数域

我们检查它是否适用于以下点:

鼠尾草: = E类([2,])
鼠尾草:评估 = λ (f),: [fi(菲涅耳)([0],[1]) 对于 fi(菲涅耳) 在里面 (f)]
圣人:断言 E类(评估((f),)) == 2*

我们也这样做,但用3乘法:

圣人:(f) = E类.乘法_by_m()
圣人:断言 E类(评估((f),)) == *

与乘以4相同:

圣人:(f) = E类.乘法_by_m(4)
圣人:断言 E类(评估((f),)) == 4*

与-1、-2、-3、-4的乘法相同:

圣人:对于  在里面 [-1,-2,-,-4]:
....:    (f) = E类.乘法_by_m()
....:    断言 E类(评估((f),)) == *
乘法by_m等代()#

返回椭圆曲线均匀性与关联的对象乘法-\(米)这条椭圆曲线上的映射。

由此产生的同源性将具有相关的rational映射(即乘法_by_m())已计算。

注意:此函数当前为许多的的结果自乘_by_m(),因为构建一个等代基因会预先计算出大量数据信息。请参见github问题#7368github问题#8014对于改善这种状况的现状。

输入:

  • –非零整数

输出:

  • 椭圆曲线均匀性与关联的对象乘法-\(米\)这条椭圆曲线上的映射。

示例:

圣人:E类 = 椭圆曲线(“11a1”)
圣人:E类.乘法by_m等代(7)
doctest:警告。。。折旧警告:。。。
49度等位性
从y^2+y=x^3-x^2-10*x-20定义的椭圆曲线
在有理字段上
到由y^2+y=x^3-x^2-10*x-20定义的椭圆曲线
在有理字段上
平行曲线(_C)()#

返回与此椭圆曲线对应的PARI曲线。

结果被缓存。

示例:

圣人:#需要sage.libs.pari
圣人:E类 = 椭圆曲线([右后(0), 右后(0), 右后(1), 右后(-1), 右后(0)])
圣人:电子 = E类.平行曲线(_C)()
圣人:类型(电子)
<... '塞浦路斯2.gen.gen'>
鼠尾草:电子.类型()
“t_VEC”
圣人:电子.圆盘()
37

在有限域上:

圣人:椭圆曲线(GF公司(41), [2,5]).平行曲线(_C)()                             #需要sage.libs.pari
[修改(0,41),修改(0,11),修改,
修改(0,41),修改(4,41),
Mod(26,41)、Mod(4,41)和Mod(11,41),
Vecsmall([3]),
[41, [9, 31, [6, 0, 0, 0]]], [0, 0, 0, 0]]

超过\(p\)-adic字段:

圣人:#需要sage.libs.pari sage.rings.padics
圣人:Qp(质量计划) = pAdic字段(5, 前c=)
鼠尾草:E类 = 椭圆曲线(Qp(质量计划), [, 4])
圣人:E类.平行曲线(_C)()
[0, 0, 0, 3, 4, 0, 6, 16, -9, -144, -3456, -8640, 1728/5,
Vecsmall([2]),[O(5^3)],[0,0]]
圣人:E类.j_变量()
3*5^-1+O(5)

在数字字段上:

圣人:K(K).<> = 象限域(2)                                             #需要sage.libs.pari sage.rings.number_field
圣人:E类 = 椭圆曲线([1,])                                              #需要sage.libs.pari sage.rings.number_field
圣人:E类.平行曲线(_C)()                                                        #需要sage.libs.pari sage.rings.number_field
[0,0,0,修改(1,y^2-2),
Mod(y,y^2-2),0,Mod(2,y^2-2),Mod(4*y,y^2-2),
型号(-1,y^2-2),型号(-48,y^2-2),型号,
Mod(-928,y^2-2),Mod(3456/29,y^2-2),
Vecsmall([5]),
[y^2-2,[2,0],8,1,[[1,-1.41421356237310;1,1.414213562370],
[1, -1.41421356237310; 1, 1.41421356237310],
[16, -23; 16, 23], [2, 0; 0, 4], [4, 0; 0, 2], [2, 0; 0, 1],
[2, [0, 2; 1, 0]], [2]], [-1.41421356237310, 1.41421356237310],
[1,y],[1,0;0,1],[1,0,0,2;0,1,1,0]],[0,0,0

PARI不再要求\(j)-不变量有负数\(p\)-adic估价:

圣人:E类 = 椭圆曲线(Qp(质量计划),[1, 1])                                          #需要sage.libs.pari sage.rings.padics
圣人:E类.j_变量()  #j变量是一个p-adic整数#需要sage.libs.pari sage.rings.padics
2+4*5^2+O(5^3)
鼠尾草:E类.平行曲线(_C)()                                                        #需要sage.libs.pari sage.rings.padics
[0, 0, 0, 1, 1, 0, 2, 4, -1, -48, -864, -496, 6912/31,
Vecsmall([2]),[O(5^3)],[0,0]]
情节(克敏=,x最大值=,组件=“两者”,**参数)#

画一个椭圆曲线图。

plot方法仅在存在自然强制的情况下实现自己右后在这种情况下,自己绘制得好像它被定义在右后.

输入:

  • 克敏, x最大值–(可选)点将在至少在这个范围内,但可能更远。

  • 组件–字符串,以下之一:

    • 二者都–(默认),缩放以使有界和显示无边界零部件

    • 有界的–缩放绘图以显示边界组件。如果只有一个实数,则引发错误组件。

    • 无界的–缩放绘图以显示无界组件,包括两个灵活点。

  • 绘图点–传递给sage.plot.generate_plot_points()

  • 自适应容差–传递给sage.plot.generate_plot_points()

  • 自适应_递归–传递给sage.plot.generate_plot_points()

  • 随机化–传递给sage.plot.generate_plot点()

  • **参数–所有其他选项都传递给sage.plot.line。线路

示例:

圣人:E类 = 椭圆曲线([0, -1])
圣人:情节(E类, rgb颜色=色调(0.7))                                            #需要sage.plot
包含1个图形基元的图形对象
圣人:E类 = 椭圆曲线(“37a”)
圣人:情节(E类)                                                               #需要sage.plot
由2个图形基元组成的图形对象
圣人:情节(E类, 克敏=25, x最大值=26)                                             #需要sage.plot
由2个图形图元组成的图形对象

使用github发行号12766我们添加了components关键字:

圣人:E类.real_components(真实组件)()
2
圣人:E类.情节(组件=“有界”)                                          #需要sage.plot
包含1个图形基元的图形对象
圣人:E类.情节(组件=“无边界”)                                        #需要sage.plot
包含1个图形基元的图形对象

如果只有一个组件,则指定components='bounded'引发ValueError:

圣人:E类 = 椭圆曲线(“9990be2”)
圣人:E类.情节(组件=“有界”)                                          #需要sage.plot
回溯(最近一次调用):
...
ValueError:此曲线没有边界组件

无法绘制在复数域上定义的椭圆曲线:

圣人:E类 = 椭圆曲线(立方厘米, [0,0,1,-1,0])
圣人:E类.情节()                                                              #需要sage.plot
回溯(最近一次调用):
...
未实现错误:绘制复杂场上的曲线
53位精度尚未实现
rst_transform(第一次转换)(,,t吨)#

通过返回曲线的变换\((r,s,t)\)(带有\(u=1)).

输入:

  • ,,t吨–基环的三个元件。

输出:

椭圆曲线由自己按照标准魏尔斯特拉斯变换\((u,r,s,t)\)具有\(u=1).

注意

这只是一个特殊情况更改weierstrass_model(),使用\(u=1).

示例:

圣人:R(右).<,,t吨> = QQ(QQ)[]
圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.rst_transform(第一次转换)(, , t吨)
由y^2+(2*s+1)*x*y+(r+2*t+3)*y定义的椭圆曲线
=x^3+(-s^2+3*r-s+2)*x^2+(3*r^2-r*s-2*s*t+4*r-3*s-t+4)*x
+(r^3+2*r^2-r*t-t^2+4*r-3*t+5)
有理域上r,s,t中的多元多项式环
标量乘法()#

返回scalar-multiplication映射\([m]\)关于这个椭圆曲线作为sage.schemes.elliptic_curves.hom_scalar。椭圆曲线Hom_scalar对象。

示例:

圣人:E类 = 椭圆曲线(“77a1”)
圣人: = E类.scalar_复制(-7); 
标量乘法自同态[-7]
有理域上由y^2+y=x^3+2*x定义的椭圆曲线
圣人:.()
49
圣人: = E类(2,)
圣人:()
(-26/225 : -2132/3375 : 1)
鼠尾草:.理性地图() == E类.乘法_by_m(-7)
真的
缩放曲线(u个)#

按比例因子返回曲线的变换\(u\).

输入:

  • u个–基环的可逆元件。

输出:

椭圆曲线由自己按照标准魏尔斯特拉斯变换\((u,r,s,t)\)具有\(r=s=t=0).

注意

这只是一个特殊情况更改weierstrass_model(),使用\(r=s=t=0).

示例:

圣人:K(K) = 压裂(多项式环(QQ(QQ), “u”))
鼠尾草:u个 = K(K).消息()
圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类.缩放曲线(u个)
椭圆曲线由定义
y^2+u*x*y+3*u^3*y=x^3+2*u^2*x^2+4*u^4*x+5*u^6
有理域上u中一元多项式环的分数域
short_weierstrass_模型(完整多维数据集=真的)#

返回一个简短的Weierstrass模型。

输入:

  • 完整多维数据集–布尔值(默认值:True);对于含义,见下文。

输出:

椭圆曲线。

如果complete_cube=真:返回表单的模型\(y^2=x^3+a*x+b\)对于这条曲线。特点不得为2;在特征3中,只有当\(b2=0).

如果complete_cube=假:返回表单的模型\(y^2=x^3+ax^2+bx+c\)对于这条曲线。这个特征不能为2。

示例:

圣人:E类 = 椭圆曲线([1,2,,4,5])
圣人:E类
有理域上由y^2+x*y+3*y=x^3+2*x^2+4*x+5定义的椭圆曲线
圣人:F类 = E类.short_weierstrass_模型()
圣人:F类
有理域上由y^2=x^3+4941*x+185166定义的椭圆曲线
鼠尾草:E类.是同构的(F类)
真的
圣人:F类 = E类.short_weierstrass_模型(完整多维数据集=False(错误))
圣人:F类
有理域上由y^2=x^3+9*x^2+88*x+464定义的椭圆曲线
圣人:E类.是同构的(F类)
真的
圣人:E类 = 椭圆曲线(GF公司(), [1,2,,4,5])
圣人:E类.short_weierstrass_模型(完整多维数据集=False(错误))
尺寸为3的有限域上由y^2=x^3+x+2定义的椭圆曲线

这以前是不同的github问题#3973:

圣人:E类.short_weierstrass_模型()
尺寸为3的有限域上由y^2=x^3+x+2定义的椭圆曲线

特征3中的更多测试:

鼠尾草:E类 = 椭圆曲线(GF公司(), [0,2,1,2,1])
圣人:E类.short_weierstrass_模型()
回溯(最近一次调用):
...
值错误:short_weierstrass_model():没有椭圆曲线的短模型
由大小为3的有限域上的y^2+y=x^3+2*x^2+2*x+1定义
(特征为3)
圣人:E类.short_weierstrass_模型(完整多维数据集=False(错误))
由y^2=x^3+2*x^2+2*x+2定义的椭圆曲线
在大小为3的有限域上
圣人:E类.short_weierstrass_模型(完整多维数据集=False(错误)).是同构的(E类)
真的
扭转多项式(,x个=,双扭转多重性=2,强制评估(_E)=)#

返回\(m^{th}\)这个椭圆的除法多项式曲线求值于\(x\).

如果\(x \).

输入:

  • –正整数。

  • x个–可选的环形元件,用作\(x \)变量。如果\(x \)(省略),则新的多项式环将为在椭圆曲线的基环上构造,及其发电机将用作\(x \)。请注意\(x \)不需要是多项式环的生成器;任何环形元件都起作用。这个允许快速计算扭转多项式评价的环的任何元素。

  • 双扭转多重性–0、1或2

    如果0:偶数\(米\)什么时候\(x \),一元多项式返回曲线的基环上,其中省略了因子它们的根是\(x \)-的坐标\(2\)-扭转点。何时\(x \)不是,这样一个多项式的求值\(x \)返回。

    如果2:偶数\(米\)什么时候\(x \),一元多项式返回曲线的基环上,其中包括根为\(x\)-的坐标\(2\)-扭转点。类似地,当\(x \)不是,对这样一个多项式\(x \)返回。

    如果1:偶数\(米\)什么时候\(x \),一个二元多项式返回曲线的基环上,其中包括因素\(2y+a_1x+a_3\)\(2\)-扭转点。何时\(x \)不是,它应该是长度为2的元组,并且这样一个多项式的求值\(x \)返回。

  • 强制评估(_E)(可选)–0、1或2

    默认情况下,此方法使用以前缓存的泛型用于计算多项式值的除法多项式给定元素\(x \)只要这样做似乎有益。显式设置此标志将覆盖默认行为。

    请注意,评估通用划分的复杂性多项式的尺度比计算值的尺度差得多直接(使用递归公式),因此设置此标志可能会影响性能。

    如果为0:不要使用缓存的泛型除法多项式。

    如果1:如果此的泛型除法多项式\(米\)已经是之前缓存过,在\(x \)以计算结果。

    如果2:计算\(x \)通过评估通用除法多项式。如果通用\(米\)-除法多项式尚未缓存,请先计算并缓存它。

示例:

圣人:E类 = 椭圆曲线([0,0,1,-1,0])
圣人:E类.除法多项式(1)
1
圣人:E类.除法多项式(2, 双扭转多重性=0)
1
圣人:E类.除法多项式(2, 双扭转多重性=1)
2*y+1
圣人:E类.除法多项式(2, 双扭转多重性=2)
4*x^3-4*x+1
圣人:E类.除法多项式(2)
4*x^3-4*x+1
圣人:[E类.除法多项式(, 双扭转多重性=) 对于  在里面 范围()]
[3*x^4-6*x^2+3*x-1,3*x ^4-6*x ^2+3*x-1,3*x ^ 4-6*x ^2+3*x-1]
圣人:[类型(E类.除法多项式(, 双扭转多重性=)) 对于  在里面 范围()]
[<…'sage.rings.polymentary.polymonial_rational_flint.Polymonial_ rational_frint'>,
<... 'sage.rings.多项式.多重多项式_libsingular。MPolynomial_libsingular'>,
<... '萨吉·林。多项式。多项式理性。燧石。多项式_rational_flint'>]
圣人:E类 = 椭圆曲线([0, -1, 1, -10, -20])
圣人:R(右).<z(z)> = 多项式环(QQ(QQ))
圣人:E类.除法多项式(4, z(z), 0)
2*z^6-4*z^5-100*z^4-790*z^3-210*z^2-1496*z^-5821
圣人:E类.除法多项式(4, z(z))
8*z^9-24*z^8-464*z^7-2758*z^6+6636*z^5+34356*z^4
+53510*z^3+99714*z^2+351024*z+459859

这不起作用,因为当two_torsion_multiplicity为1时,我们计算一个二元多项式,并且必须在长度2:

圣人:E类.除法多项式(4,z(z),1)
回溯(最近一次调用):
...
ValueError:x应为长度为2(或无)的元组
当two_torsionmultiplicity为1时
圣人:R(右).<z(z),> = 多项式环(QQ(QQ), 2)
圣人:E类.除法多项式(4, (z(z),), 1).因素()
(2*w+1)*(2*z^6-4*z^5-100*z^4-790*z^3-210*z^2-1496*z-5821)

我们还可以在以下某个点上计算此二元多项式:

圣人: = E类(5,5)
圣人:E类.除法多项式(4,,双扭转多重性=1)
-1771561
二分多项式(x个=)#

返回此椭圆曲线的2分多项式x个.

输入:

  • x个–可选的环形元件,用作\(x\)变量。如果x个,则新的多项式环将为在椭圆曲线的基环上构造,以及其发电机将用作x个。请注意x个不需要是多项式环的生成器;任何戒指元素是可接受的。这允许快速计算扭转多项式评价的在环的任何元素上。

示例:

圣人:E类 = 椭圆曲线(“5077a1”)
圣人:E类.二分多项式()
4*x^3-28*x+25
圣人:E类 = 椭圆曲线(GF公司(^2,“a”), [1,1,1,1,1])                           #需要sage.rings.finite_ring
圣人:E类.二分多项式()                                           #需要sage.rings.finite_ring
x^3+2*x^2+2
圣人:E类.二分多项式().()                                   #需要sage.rings.finite_ring
[(2,1),(2*a,1)(a+2,1)]
sage.schemes.elliptic_curves.ell_generic。是椭圆曲线(_E)(x个)#

测试条件的实用函数x个是椭圆曲线类的实例。

示例:

圣人: sage.schemes.elliptic_curves.ell_通用 进口 是椭圆曲线(_E)
圣人:E类 = 椭圆曲线([1,2,/4,7,19])
圣人:是椭圆曲线(_E)(E类)
真的
圣人:是椭圆曲线(_E)(0)
False(错误)