4 votos

Encontrar curvas elípticas que alcancen los límites superior e inferior del intervalo de Hasse

Siempre he pensado que la Naturaleza del obligado es fuerte (al menos para curvas elípticas). En otras palabras, siempre he pensado que, dado un número primo $p$, me pueden encontrar dos curvas elípticas $E_1,E_2$ sobre $\mathbb F_p$ tales que $\#E_1 = \lceil 1+p-2\sqrt p \rceil$ e $\#E_2 = \lfloor 1+p+2\sqrt p\rfloor$. Pero es esto cierto? Si es así, ¿hay una manera fácil de construir estas curvas? He visto la prueba de cómo obtener estos límites, pero creo que no me da ninguna información sobre la nitidez de la envolvente.

4voto

Una curva elíptica sobre un campo finito que logra el límite superior de Hasse generalmente se denomina "máxima". Aquí hay un artículo reciente con algunas respuestas a su pregunta: https://arxiv.org/pdf/1709.01352.pdf

2voto

dan_fulea Puntos 379

Esta es sólo una respuesta parcial, sólo refleja lo que yo haría para un determinado lugar pequeño prime $p$. El carácter de la respuesta experimental. El método es la enumeración exhaustiva. Así que para un pequeño $p$ podemos usar equipo de asistencia, por debajo de la salvia, para validar o invalidar la reclamación.

Consideremos, en primer lugar $p=7$. A continuación, el siguiente código:

def orderStatisticForEC(p):
    F = GF(p)
    orders_dic = {}
    for a in F:
        for b in F:
            try:
                E = EllipticCurve(F, [a, b])
                ord = E.order()
                if ord in orders_dic:
                    orders_dic[ord].append((a, b))
                else:
                    orders_dic[ord] = [(a, b)]
            except Exception:
                pass    # singular curve
    orders = orders_dic.keys()
    orders.sort()
    h1, h2 = p - 2*sqrt(p) + 1, p + 2*sqrt(p) + 1
    z1, z2 = ZZ(h1.n().ceil()), ZZ(h2.n().floor())
    print "Hasse interval ~ [ {} , {} ]".format(h1.n(), h2.n())
    print "Hasse orders in  [ {} , {} ]".format(z1, z2)

    print "Statistic of orders:"
    for order in orders:
        print "Order {:3} for {}".format(order, orders_dic[order])

orderStatisticForEC(7)

ofrece la simétrica (w.r.t $p+1=8$) estadística:

Hasse interval ~ [ 2.70849737787082 , 13.2915026221292 ]
Hasse orders in  [ 3 , 13 ]
Statistic of orders:
Order   3 for [(0, 4)]
Order   4 for [(0, 6), (3, 6), (5, 6), (6, 6)]
Order   5 for [(1, 1), (2, 1), (4, 1)]
Order   6 for [(1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3)]
Order   7 for [(0, 5), (3, 5), (5, 5), (6, 5)]
Order   8 for [(1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0)]
Order   9 for [(0, 2), (3, 2), (5, 2), (6, 2)]
Order  10 for [(1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4)]
Order  11 for [(1, 6), (2, 6), (4, 6)]
Order  12 for [(0, 1), (3, 1), (5, 1), (6, 1)]
Order  13 for [(0, 3)]

y la pregunta que quiere de una manera para detectar las dos curvas elípticas $y^2=x^3+4$ e $y^2=x^3+3$ que alcanzan los límites.

Para $p=11$ tenemos tal vez la última imprimible caso:

sage: orderStatisticForEC(11)
Hasse interval ~ [ 5.36675041928920 , 18.6332495807108 ]
Hasse orders in  [ 6 , 18 ]
Statistic of orders:
Order   6 for [(1, 8), (3, 10), (4, 2), (5, 6), (9, 7)]
Order   7 for [(2, 7), (6, 6), (7, 2), (8, 10), (10, 8)]
Order   8 for [(1, 9), (2, 10), (3, 3), (4, 5), (5, 4), (6, 7), (7, 6), (8, 8), (9, 1), (10, 2)]
Order   9 for [(1, 4), (2, 2), (3, 5), (4, 1), (5, 3), (6, 8), (7, 10), (8, 6), (9, 9), (10, 7)]
Order  10 for [(1, 10), (2, 5), (3, 7), (4, 8), (5, 2), (6, 9), (7, 3), (8, 4), (9, 6), (10, 1)]
Order  11 for [(1, 5), (3, 9), (4, 4), (5, 1), (9, 3)]
Order  12 for [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (0, 10), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), (8, 0), (9, 0), (10, 0)]
Order  13 for [(1, 6), (3, 2), (4, 7), (5, 10), (9, 8)]
Order  14 for [(1, 1), (2, 6), (3, 4), (4, 3), (5, 9), (6, 2), (7, 8), (8, 7), (9, 5), (10, 10)]
Order  15 for [(1, 7), (2, 9), (3, 6), (4, 10), (5, 8), (6, 3), (7, 1), (8, 5), (9, 2), (10, 4)]
Order  16 for [(1, 2), (2, 1), (3, 8), (4, 6), (5, 7), (6, 4), (7, 5), (8, 3), (9, 10), (10, 9)]
Order  17 for [(2, 4), (6, 5), (7, 9), (8, 1), (10, 3)]
Order  18 for [(1, 3), (3, 1), (4, 9), (5, 5), (9, 4)]

No veo un método constructivo que golpea con precisión uno de los valores de $(a,b)$ para un mínimo de orden $6$ y/o máxima de la orden de $18$.

Tenga en cuenta que tenemos los siguientes pares de cuadrática giros:

sage: for a, b in [(1, 8), (3, 10), (4, 2), (5, 6), (9, 7)]:
....:     E = EllipticCurve(GF(11), [a, b])
....:     print E, '\n', E.quadratic_twist(), '\n'
....:     
Elliptic Curve defined by y^2 = x^3 + x + 8 over Finite Field of size 11 
Elliptic Curve defined by y^2 = x^3 + 4*x + 9 over Finite Field of size 11 

Elliptic Curve defined by y^2 = x^3 + 3*x + 10 over Finite Field of size 11 
Elliptic Curve defined by y^2 = x^3 + x + 3 over Finite Field of size 11 

Elliptic Curve defined by y^2 = x^3 + 4*x + 2 over Finite Field of size 11 
Elliptic Curve defined by y^2 = x^3 + 9*x + 4 over Finite Field of size 11 

Elliptic Curve defined by y^2 = x^3 + 5*x + 6 over Finite Field of size 11 
Elliptic Curve defined by y^2 = x^3 + 9*x + 4 over Finite Field of size 11 

Elliptic Curve defined by y^2 = x^3 + 9*x + 7 over Finite Field of size 11 
Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Finite Field of size 11 

Así que vamos a considerar sólo las curvas que dan cuenta de los "pisos de máxima Hasse obligado" para algunos pequeños números primos. Nuevo código...

sage: for p in primes(5, 100):
....:     max_order = ZZ( floor( (p + 1 + 2*sqrt(p)).n() ) )
....:     F = GF(p)
....:     ab_list = []    # so far, but we append soon 
....:     for a, b in cartesian_product( [F, F] ):
....:         try:
....:             E = EllipticCurve(F, [a,b] )
....:             if E.order() == max_order:
....:                 ab_list.append((a,b))
....:         except:
....:             pass    # singular curve
....:     print( "p = %3s :: order = %s :: %s solutions, first five are %s"
....:            % (p, max_order, len(ab_list), ab_list[:5]) )
....:     
p =   5 :: order = 10 :: 1 solutions, first five are [(3, 0)]
p =   7 :: order = 13 :: 1 solutions, first five are [(0, 3)]
p =  11 :: order = 18 :: 5 solutions, first five are [(1, 3), (3, 1), (4, 9), (5, 5), (9, 4)]
p =  13 :: order = 21 :: 2 solutions, first five are [(0, 4), (0, 9)]
p =  17 :: order = 26 :: 4 solutions, first five are [(3, 0), (5, 0), (12, 0), (14, 0)]
p =  19 :: order = 28 :: 12 solutions, first five are [(0, 8), (0, 12), (0, 18), (1, 17), (4, 16)]
p =  23 :: order = 33 :: 11 solutions, first five are [(1, 11), (2, 5), (3, 22), (4, 19), (6, 10)]
p =  29 :: order = 40 :: 21 solutions, first five are [(4, 0), (5, 0), (6, 0), (8, 2), (8, 27)]
p =  31 :: order = 43 :: 5 solutions, first five are [(0, 3), (0, 6), (0, 12), (0, 17), (0, 24)]
p =  37 :: order = 50 :: 9 solutions, first five are [(2, 0), (14, 0), (15, 0), (18, 0), (20, 0)]
p =  41 :: order = 54 :: 40 solutions, first five are [(2, 4), (2, 37), (5, 2), (5, 39), (6, 5)]
p =  43 :: order = 57 :: 7 solutions, first five are [(0, 9), (0, 13), (0, 14), (0, 15), (0, 17)]
p =  47 :: order = 61 :: 23 solutions, first five are [(1, 38), (2, 15), (3, 5), (4, 22), (6, 23)]
p =  53 :: order = 68 :: 39 solutions, first five are [(1, 0), (4, 10), (4, 43), (6, 24), (6, 29)]
p =  59 :: order = 75 :: 29 solutions, first five are [(2, 22), (6, 41), (8, 1), (10, 5), (11, 16)]
p =  61 :: order = 77 :: 30 solutions, first five are [(6, 29), (6, 32), (8, 30), (8, 31), (10, 30)]
p =  67 :: order = 84 :: 44 solutions, first five are [(0, 1), (0, 9), (0, 14), (0, 15), (0, 22)]
p =  71 :: order = 88 :: 70 solutions, first five are [(1, 9), (2, 3), (3, 25), (4, 1), (5, 16)]
p =  73 :: order = 91 :: 12 solutions, first five are [(0, 5), (0, 11), (0, 15), (0, 26), (0, 28)]
p =  79 :: order = 97 :: 52 solutions, first five are [(0, 3), (0, 24), (0, 28), (0, 30), (0, 34)]
p =  83 :: order = 102 :: 41 solutions, first five are [(2, 19), (5, 67), (6, 6), (8, 14), (13, 52)]
p =  89 :: order = 108 :: 132 solutions, first five are [(1, 8), (1, 81), (2, 44), (2, 45), (3, 34)]
p =  97 :: order = 117 :: 64 solutions, first five are [(0, 2), (0, 3), (0, 16), (0, 24), (0, 31)]

Así tenemos que en la mayoría de los casos, muchas de las soluciones. A veces podemos utilizar en $y^2=x^3+ax+b$ los valores de $a=0,\pm1$, y nos encontramos con un adecuado par. Pero para tener un "sencillo decisión"... Entonces "algo" en la estructura de las curvas elípticas debe ser predictible.


En cualquier caso, aquí viene la counterquestion: ¿Qué es exactamente la espera como una "buena respuesta", un "buen edificable solución" a la OP?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X