首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Sage详细程度输出中提取值

从Sage详细程度输出中提取值
EN

Stack Overflow用户
提问于 2021-01-14 05:13:55
回答 2查看 39关注 0票数 1

我是一个数学家,在使用Sage时需要一些帮助。我使用下面的代码,通过2同源下降,找到不同椭圆曲线的秩的上界。

下面是一个例子:

代码语言:javascript
复制
 from sage.schemes.elliptic_curves.descent_two_isogeny import two_descent_by_two_isogeny
 E = EllipticCurve([0, 0, 0, 17, 0])
 S = two_descent_by_two_isogeny(E, verbosity =1)

以下哪项输出:

代码语言:javascript
复制
2-isogeny

Results:
2 <= #E(Q)/phi'(E'(Q)) <= 2
2 <= #E'(Q)/phi(E(Q)) <= 8
#Sel^(phi')(E'/Q) = 2
#Sel^(phi)(E/Q) = 8
1 <= #Sha(E'/Q)[phi'] <= 1
1 <= #Sha(E/Q)[phi] <= 4
1 <= #Sha(E/Q)[2], #Sha(E'/Q)[2] <= 4
0 <= rank of E(Q) = rank of E'(Q) <= 2

现在我感兴趣的是最后的数字,'2‘,它是排名的上界。

我想要做的是找到一种方法来从输出中提取这个数字,这样我就可以在许多不同的椭圆曲线上运行代码,每次只收到一个秩的上界的值,而不是大的文本输出。

这个是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-14 08:15:48

有吗?

代码语言:javascript
复制
E.rank_bounds()

给你想要的答案?它输出(0, 2),文档说:“使用”simon_two_descent()“返回上下界。”(我是一名数学家,但这不是我的专业领域,所以我不知道simon_two_descent是否给出了与two_descent_by_two_isogeny相同的排名信息。我建议您输入E.<TAB>并浏览这些选项,看看是否有合适的选项。)

票数 2
EN

Stack Overflow用户

发布于 2021-01-14 20:47:15

要获得快速答复,请跳至此邮件的末尾。

最终简短答案的详细信息:

two_descent_by_two_isogeny内部的代码,在ipython解释器中检查,例如通过...

代码语言:javascript
复制
sage: two_descent_by_two_isogeny??

说明在(给定椭圆曲线的参数a1a2a3a4a6的)准备之后,“工作”被委托给two_descent_by_two_isogeny_work……

代码语言:javascript
复制
if a1==0 and a3==0:
    s2=a2; s4=a4; s6=a6
else:
    s2=a1*a1+4*a2; s4=8*(a1*a3+2*a4); s6=16*(a3*a3+4*a6)
f = ((x_ZZ + s2)*x_ZZ + s4)*x_ZZ + s6
x_list = f.roots() # over ZZ -- use FLINT directly?
x0 = x_list[0][0]
c = 3*x0+s2;  d = (c+s2)*x0+s4
return two_descent_by_two_isogeny_work(c, d,
    global_limit_small, global_limit_large, verbosity, selmer_only, proof)

后一个函数的返回值也可以检查...

代码语言:javascript
复制
sage: from sage.schemes.elliptic_curves.descent_two_isogeny import  \
....:      two_descent_by_two_isogeny
sage: two_descent_by_two_isogeny_work??

(或者直接打开导入的py-file,它是开源的!)最后几行,包括return行,是:

代码语言:javascript
复制
if verbosity > 0:
    print("\nResults:")
    print(n1, "<= #E(Q)/phi'(E'(Q)) <=", n2)
    print(n1_prime, "<= #E'(Q)/phi(E(Q)) <=", n2_prime)
    print("#Sel^(phi')(E'/Q) =", n2)
    print("#Sel^(phi)(E/Q) =", n2_prime)
    print("1 <= #Sha(E'/Q)[phi'] <=", n2/n1)
    print("1 <= #Sha(E/Q)[phi] <=", n2_prime/n1_prime)
    print("1 <= #Sha(E/Q)[2], #Sha(E'/Q)[2] <=", (n2_prime/n1_prime)*(n2/n1))
    a = Integer(n1*n1_prime).log(Integer(2))
    e = Integer(n2*n2_prime).log(Integer(2))
    print(a - 2, "<= rank of E(Q) = rank of E'(Q) <=", e - 2)

return n1, n2, n1_prime, n2_prime

现在回到OP中的示例代码,让我们也打印4元组S

代码语言:javascript
复制
sage: from sage.schemes.elliptic_curves.descent_two_isogeny import \
....:      two_descent_by_two_isogeny
....: E = EllipticCurve([0, 0, 0, 17, 0])
....: S = two_descent_by_two_isogeny(E, verbosity =1)
....: S

2-isogeny

Results:
2 <= #E(Q)/phi'(E'(Q)) <= 2
2 <= #E'(Q)/phi(E(Q)) <= 8
#Sel^(phi')(E'/Q) = 2
#Sel^(phi)(E/Q) = 8
1 <= #Sha(E'/Q)[phi'] <= 1
1 <= #Sha(E/Q)[phi] <= 4
1 <= #Sha(E/Q)[2], #Sha(E'/Q)[2] <= 4
0 <= rank of E(Q) = rank of E'(Q) <= 2
(2, 2, 2, 8)

返回的元组对应于值return n1, n2, n1_prime, n2_prime,打印中的“最终2”是从print命令获得的:

代码语言:javascript
复制
    e = Integer(n2*n2_prime).log(Integer(2))
    print(a - 2, "<= rank of E(Q) = rank of E'(Q) <=", e - 2)

所以你想要那个e - 2

长话短说:

使用:

代码语言:javascript
复制
sage: from sage.schemes.elliptic_curves.descent_two_isogeny import \
....:      two_descent_by_two_isogeny
....: E = EllipticCurve([0, 0, 0, 17, 0])
....: S = two_descent_by_two_isogeny(E)
....: n1, n2, n1_prime, n2_prime = S
....: e = Integer(n2*n2_prime).log(Integer(2))
....: print(f"e = {e} so the needed upper bound for rank E'(Q) is e - 2 = {e-2}")
e = 4 so the needed upper bound for rank E'(Q) is e - 2 = 2

注意:也请考虑John Palmieri的回答!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65709875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档