I think this has to do with the fact that when you call `point_exact`, Sage 
is mapping sending all the conjugates to the same point in the Hilbert 
class field.

# As expected, only one conjugate is equal to the original.
[Q == P for Q in P_cong]
# Output: [True, False, False, False]

# Annoyingly, these are all equal.
[Q.point_exact() == P.point_exact() for Q in P_cong] 
# Output: [True, True, True, True]

We can get around this by working numerically.

P_cong_lambda = [Q.map_to_complex_numbers() for Q in P_cong]
P_trace_lambda = sum(P_cong_lambda)
P_trace_E_CC = E.period_lattice().elliptic_exponential(P_trace_lambda)
X, Y, Z = P_trace_E_CC; P_trace_E_CC
# Output: (3.35714285714284 + 2.94598962112462e-14*I : -0.500000000000106 - 
2.65352233041626*I : 1.00000000000000)

Now we can use `algdep` to get a point on in an imaginary quadratic field.

fX = algdep(X ,2); fX
# Output: 14*x - 47 
fY = algdep(Y, 2); fY.disc().squarefree_part()
# Output: (2744*x^2 + 2744*x + 20007, -14)
-14 is also the squarefree part of -56 so that's a good sign! Now put this 
point on an elliptic curve.

L.<b> = NumberField(fY)
E_L = E.change_ring(L)
E_L([47/14, b, 1])

No errors so I think that's an actual point on E. I think there's a smart 
way to identify Y as a point on K=QQ(sqrt(-56)) but it's late and I'm 
blanking on it so I just left it in L.






On Friday, February 14, 2020 at 10:37:16 PM UTC-8, Ahmed Matar wrote:
>
> Sage has the ability to compute the Heegner points over ring class fields. 
> I would like to compute the trace of the Heegner point defined over the 
> Hilbert class field down to K. Apparently this is not implemented in sage, 
> but coding it should be easy. However I'm having an issue with the code 
> below
>
> E=EllipticCurve('75a1')
> P=E.heegner_point(-56) 
> # Note that K=Q(sqrt(-56)) has class number 4
> P_conj=P.conjugates_over_K()  #These are the 4 conjugates of the Heegner 
> point P
>
> P_trace=P_conj[0].point_exact()+P_conj[1].point_exact()+P_conj[2].point_exact()+P_conj[3].point_exact()
>
> P_trace should be the desired trace of P down to K. When one prints 
> P_trace we see that it is a point in projective space whose 3rd coordinate 
> is 1 so the 1st and second coordinates should be in K. However if we try 
> P_trace[0].minpoly('x'), we get a polynomial of degree 4. What am I doing 
> wrong?
>
> Ahmed
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-nt" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-nt/1b5b304d-c6a3-4e31-a3fc-162ff912a5ed%40googlegroups.com.

Reply via email to