Sage中的椭圆点

问题描述 投票:2回答:1

我想使用Sage找到同余子群Gamma(N)Gamma_1(N)等的椭圆点。我知道MAGMA(EllipticPoints(G))有简单的功能,但在Sage中找不到类似的东西。有什么建议?

function sage
1个回答
1
投票

Sage具有GammaGamma0Gamma1函数来定义模块组的同余子群。

给定这样的组,方法nu2nu3给出该组的阶数为2和阶数为3的椭圆点的数量。

sage: G = Gamma0(13)
sage: G.nu2()
2
sage: G.nu3()
2

方法ncuspsindexgenus给出了同余群的尖点,索引,属的数量。

sage: G.ncusps()
2
sage: G.index()
14
sage: G.genus()
0

您指的Magma文档可能是:https://magma.maths.usyd.edu.au/magma/handbook/text/1554

在这种情况下,您需要在上半平面中的实际椭圆点。这是获得它们的方法。

定义函数elliptic_points如下。

def elliptic_points(G):
    F = FareySymbol(G)
    P = F.pairings()
    if all(n > 0 for n in P):
        return []
    M = F.pairing_matrices()
    ell = []
    for k, n in enumerate(P):
        if n < 0:
            a, b, c, d = list(M[k])
            R.<x> = QQbar[]
            p = c*x^2 + (d-a)*x - b
            for r in p.roots(multiplicities=False):
                if r.imag() > 0:
                    ell.append(r)
    return ell

然后以下工作:

sage: G = Gamma0(13)
sage: ell = elliptic_points(G)

sage: ell
[0.2692307692307693? + 0.06661733875264913?*I,
 0.3846153846153846? + 0.07692307692307692?*I,
 0.6153846153846154? + 0.07692307692307692?*I,
 0.7307692307692308? + 0.06661733875264913?*I]

sage: for p in ell:
....:    print p.radical_expression()
....:
1/26*I*sqrt(3) + 7/26
1/13*I + 5/13
1/13*I + 8/13
1/26*I*sqrt(3) + 19/26

我在现有的Sage代码中找不到此功能。可能值得添加它。