Para una Curva Elíptica en Campo Finito de característica $p$, estoy tratando de entender cómo la división del polinomio para la multiplicación por el campo característico de la diferencia entre una simple curva y un super-singular de la curva. Si $p$ es el campo de la característica, la multiplicación por $p$ mapa como un isogney está dada por
$$[p] = \left (\frac{\phi_p}{\psi_{p}^2}, \frac{\omega_p}{\psi_p^3}\right)$$
Para el super-singular curvas, $E[p] \cong \{0\}$, y por lo tanto $\psi_p(x)$ no debe tener ceros incluso en la clausura algebraica $\bar{F_p}$. Esto sólo es posible si $\psi_p(x) = c$ para algunas constantes $c$.
Debido a la inseparabilidad razones, en el caso de ordinario curvas, $\psi_p(x) = g(x^p)$, donde $g(t)$ es no-constante polinomio en $F_p[t]$. Además, por las mismas razones, $\phi_p(x)$ también debe ser de la forma $h(x^p)$ para algunos no constante $h(t) \in F_p[t]$.
He intentado validar mi entender, el uso de sagemath, pero ran-en algunas sorpresas: En el caso de super-singular curvas de $\psi_p(x)$ está de acuerdo con lo anterior, y en el hecho de $\psi_p(x)$ parece ser siempre igual a $p-1$. Sin embargo, en el caso de ordinario curvas, no me $\psi_p(x)$ en forma de $g(x^p)$, e $\phi_p(x)$ nunca es en forma de $h(x^p)$ para cualquiera de los super-singular ordinario o curvas.
Me pregunto ¿cómo es esto posible? Aquí está mi sagemath código. ¿Qué estoy haciendo mal?
def nMapIso(curva): fp = curva.base_ring() c = fp.característica() fpBar = fp.algebraic_closure() PR.<X> = PolynomialRing(fpBar, 'X') divP_Plus_1 = PR(curva.division_polynomial(c+1).lista()); divP_minus_1 = PR(curva.division_polynomial(c-1).lista()); divP = PR(curva.division_polynomial(c).lista()); num = X*divP*divP - divP_Plus_1*divP_minus_1 den = divP*divP retorno (num/den) def listSuperSingulars(campo): c = campo.característica() - 1 for i in [0..c]: para j en [0..c]: Dimm_4 = campo(4) _27 = campo(-27) A = campo(i) B = campo(j) si dimm_4*a*a*A == _27*B*B : continuar e = EllipticCurve(campo, [a,B]); si el correo.is_supersingular(): imprimir "========= Super Singular ========" de torsión = nMapIso(e) de impresión ([a,B],torsión) otra cosa: imprimir "============= Ordinario ===========" de torsión = nMapIso(e) de impresión ([a,B],torsión) imprimir "==================================" P=5 Fp=GF(P) listSuperSingulars(Fp)
Y aquí está el resultado
========= Super Singular ======== ([0, 4], 4*X^28 + X^25 + X^4) ================================== ============= Ordinario =========== ([1, 0], (4*X^28 + 4*X^26 + 4*X^24 + 4*X^22 + 4*X^21 + X^18 + X^16 + 4*X^14 + 4*X^12 + 4*X^11 + X^8 + X^6 + X^4 + X^2 + X)/(4*X^20 + 4*X^10 + 1)) ==================================