p=3700001
Fp=GF(p)
E=EllipticCurve([Fp(3),Fp(5)])
j=E.j_invariant()
l=13#Atkin prime
n=((l-1)/2).round()
r=2# Phi_13 factorize in factors of degree 2
s=12#Psi_13 factorize in factors of degree 12
#repsq(a,n) computes a^n
def repsq(a,n):
B = Integer(n).binary()
C=list(B)
k=len(B)-1
bk=a
i=1
while i <= k:
if C[i]=="1":
bk=(bk^2)*a
else:
bk=bk^2
i=i+1
return bk
d=E.division_polynomial(13)
Fps=GF(repsq(p,s),'a')
a=Fps.gen()
Fpr=GF(repsq(p,r),'b')
b=Fpr.gen()
FFps=PolynomialRing(Fps)
Fl=GF(l)
c=GF(2)
rts=d.roots(Fps,multiplicities=False)
Px=rts[0]
Py2=Px^3+3*Px+5
c=Fl.multiplicative_generator()
def produx(n,Qx):
if is_odd(n):
pro=Qx-(E.division_polynomial(n-1,(Qx,1),two_torsion_multiplicity=1)*E.division_polynomial(n+1,(Qx,1),two_torsion_multiplicity=1)*
(Qx^3+3*Qx+5))/((E.division_polynomial(n,(Qx,1),two_torsion_multiplicity=1)^2))
else:
pro=Qx-(E.division_polynomial(n-1,(Qx,1),two_torsion_multiplicity=1)*E.division_polynomial(n+1,(Qx,1),two_torsion_multiplicity=1))/((Qx^3+3*Qx+5)*E.division_polynomial(n,(Qx,1),two_torsion_multiplicity=1)^2)
return pro
Ep=(X-produx(2,Px))*(X-produx(4,Px))*(X-produx(8,Px))*(X-produx(3,Px))*(X-produx(6,Px))*(X-produx(12,Px))
bb=b.minpoly().roots(Fps)[0][0]
i=Fpr.hom([bb],Fps)
j=i.section()
PolynomialRing(Fpr,'x')([j(c) for c in Ep.coeffs()])
That was the code, and the version is 5.11. Maybe the problem is because
the version is too old, but I was using another version and I got many
problems and right now I don't have another option.
On Thursday, April 17, 2014 5:47:32 PM UTC+2, John Cremona wrote:
>
> On 17 April 2014 08:43, Irene <[email protected] <javascript:>> wrote:
> > I think that this is exactly what I need. Nevertheless I cannot use
> neither
> > i.section() nor i.inverse_image(). The second one because of the same
> reason
> > as you, and the first one when I try it is says "TypeError: 'NoneType'
> > object is not callable".
>
> You'll have to post your actual code (and say which Sage version) for
> us to help debug that!
>
> John
>
> >
> >
> > On Thursday, April 17, 2014 12:07:18 PM UTC+2, John Cremona wrote:
> >>
> >> OK, that makes sense now. It boils down to this: given an element of
> >> F12=GF(p^12) which happens to lie in F2 = GF(p^2), how to express it
> >> in terms of a generator of F2. This is not quite as easy as it should
> >> be but this works (assuming that you have defined F12 with generator a
> >> and F2 with generator b):
> >>
> >> sage: bb = b.minpoly().roots(F12)[0][0]
> >> sage: i = F2.hom([bb],F12)
> >> sage: j = i.section()
> >>
> >> Here we have defined an embedding i of F2 into F12 by find a place to
> >> map b (called bb) and set j to be an inverse to i. (I think we should
> >> be use i.inverse_image() but that gave me a NotImplementedError, which
> >> is a pity since I have used sort of construction easily in extensions
> >> of number fields).
> >>
> >> Now if f is your polynomial in F12[x] whose coefficients lie in F2 you
> can
> >> say
> >>
> >> sage: PolynomialRing(F2,'X')([j(c) for c in f.coeffs()])
> >>
> >> to get what you want, I hope!
> >>
> >> John
> >>
> >> On 17 April 2014 02:52, Irene <[email protected]> wrote:
> >> > Sorry, I didn't write it correctly. I meant GF(p^12,'a') instead of
> >> > GF(p^13,'a'). As 2 divides 12, GF(p^12,'a') is an extension of
> >> > GF(p^2,'b').
> >> > My question is the same now with the correct data.
> >> >
> >> > On Thursday, April 17, 2014 11:04:40 AM UTC+2, John Cremona wrote:
> >> >>
> >> >> On 17 April 2014 01:55, Irene <[email protected]> wrote:
> >> >> > Hello!
> >> >> >
> >> >> > I want to define a polynomial that I know lies in GF(p^2,'b')[x],
> >> >> > p=3700001.
> >> >> > The problem is that I have to define it as a product
> >> >> > E=(X-a_1)*(X-a_2)*(X-a_3)*(X-a_4)*(X-a_5)*(X-a_6), where every a_j
> is
> >> >> > in
> >> >> > GF(p^13,'a')[X].
> >> >> > I tried to do GF(p^2,'b')[x](E), but then Sage just changes the
> >> >> > generator
> >> >> > 'a' and writes the same expression with the generator 'b'.
> >> >> > Any idea about how to do this?
> >> >> > Thank you!!
> >> >>
> >> >> Did you write that correctly? GF(p^13) is not an extension of
> >> >> GF(p^2). If a1 is in GF(p^13) then a1.minpoly() will give its min
> >> >> poly, in GF(p)[x].
> >> >>
> >> >> John Cremona
> >> >>
> >> >> >
> >> >> > --
> >> >> > You received this message because you are subscribed to the Google
> >> >> > Groups
> >> >> > "sage-support" group.
> >> >> > To unsubscribe from this group and stop receiving emails from it,
> >> >> > send
> >> >> > an
> >> >> > email to [email protected].
> >> >> > To post to this group, send email to [email protected].
> >> >> > Visit this group at http://groups.google.com/group/sage-support.
> >> >> > For more options, visit https://groups.google.com/d/optout.
> >> >
> >> > --
> >> > You received this message because you are subscribed to the Google
> >> > Groups
> >> > "sage-support" group.
> >> > To unsubscribe from this group and stop receiving emails from it,
> send
> >> > an
> >> > email to [email protected].
> >> > To post to this group, send email to [email protected].
> >> > Visit this group at http://groups.google.com/group/sage-support.
> >> > For more options, visit https://groups.google.com/d/optout.
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups
> > "sage-support" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an
> > email to [email protected] <javascript:>.
> > To post to this group, send email to
> > [email protected]<javascript:>.
>
> > Visit this group at http://groups.google.com/group/sage-support.
> > For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.