# Formal Group Law on Elliptic Curves It is very likely I am misunderstanding something, in which case I apologize in advance. Here's my question.

Start with an elliptic curve $E/\mathbb Z_p$ and $M=(p)$ the maximal ideal of $\mathbb Z_p$.

I am considering $\hat E$ the formal group and say $F$ its group law.

I am trying to take two points in $M$ and add them using the group law, something that should be possible and converge (see Silverman AEC pg 119).

On Sage, this is easy to set up:

E=EllipticCurve('61a1')
Ep=E.change_ring(Qp(5))
Ef=Ep.formal_group()
F=Ef.group_law(16)
a=Qp(5, prec=16)(5+3*5^2)
b=Qp(5, prec=16)(5^2-2*5^3)
X=Ef.x(16)
Y=Ef.y(16)
I=Ef.inverse(16)


Now the command F(a,b) pops an error saying that a,b need to have positive valuation. The issue is that it is working over the ring $\mathbb Z_p[[t]]$ over which, indeed a,b have valuation 0. But, unless I am misunderstanding something, since a and b have positive valuation in $\mathbb Z_p$, we should be allowed to add them, right?

The same issue does not exist with the other functions, like X(a), Y(a), I(a) etc.

I have found a way to get around this issue by taking exp(log(a)+log(b)) where exp and log are the formal group logarithmic and exponential functions, but surely this is not a nice way.

So is this indeed a bug or am I misunderstanding something? And if it is a bug, is there an easy/good way to fix/get around it?

edit retag close merge delete

Sort by » oldest newest most voted

The following worked for me, regarding the computation of $F(a, b)$.

E  = EllipticCurve('61a1')
Ep = E.change_ring(Qp(5))
Ef = Ep.formal_group()
F  = Ef.group_law(16)

# t1, t2 = F.parent().gens()

a  = Qp(5, prec=16)(5+3*5^2)
b  = Qp(5, prec=16)(5^2-2*5^3)

print( F.polynomial()(a, b) )


which delivers

5 + 4*5^2 + 2*5^3 + 3*5^4 + 3*5^7 + 3*5^8 + 3*5^9 + 4*5^10 + 3*5^11 + 5^12 + 3*5^13 + 2*5^14 + 5^15 + 3*5^16 + O(5^17)


Here, we may go wrong with the "last $p$-adic digits", when precisions do not match in the sense of the (default) precision used inside F.parent().

Note: Unfortunately the base ring

sage: R = Qp(5)
sage: R
5-adic Field with capped relative precision 20
sage: R.is_exact()
False


is not an exact field. So sage lets the programmer arrange for controlling precision in the performed operations.

more