Dear Daniel

indeed elliptic curves over rings (what should be called technically 
Weierstrass equations with non-zero discriminant, instead of unit 
discriminant) are rather useless in Sage.
I would recommend to work with 2-adics in your case and to reduce modulo 4 
in the end. You could work over Qp(p,k) if you want modulo p^k.

I hope that this may help with what you do. Of course, one should implement 
this properly one day.

Chris

On Thursday, 14 May 2020 11:41:04 UTC+1, Daniel Loughran wrote:
>
> Hello. I think that I may have found a bug involving elliptic curves 
> modulo powers of primes. I have attached the working jupyter notebook, but 
> my code and results are also below.
>
> In my code I have an elliptic curve E over Q with good reduction at 2 and 
> the point P = (2:-3:8) (homogeneous coordinates).
>
> It is clear that the reduction modulo 4 of this point in projective space 
> is (2:1:0).
>
> However, sage is telling me that when I reduce the curve modulo 4 then ask 
> what point P reduces to, I get the identity element (0:1:0).
>
> My guess is that sage does something like put this point into the form 
> (1/4:-3/8:1), then notices that 4 divides the denominator of the 
> x-coordinate so just kills it. But really it should be clearing 
> denominators before it tries to reduce modulo 4. 
>
> There is another related bug: if I try to instead reduce this point modulo 
> 16, then I just get the error "inverse of Mod(4, 16) does not exist". I 
> guess this is a similar problem to the above.
>
>
>
> ------------------------------------------------------------------------------------------------------------------------------
>
> E=EllipticCurve([0, 0, 1, -1, 0]); E
>
> Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field
>
> P=E(2,-3,8); P
>
> (1/4 : -3/8 : 1)
>
> E4=E.change_ring(Integers(4)); E4
>
> Elliptic Curve defined by y^2 + y = x^3 + 3*x over Ring of integers modulo 4
>
> E4(P)
>
> (0 : 1 : 0)
>
> P2.<X,Y,Z> = ProjectiveSpace(Integers(4),2); P2
>
> Projective Space of dimension 2 over Ring of integers modulo 4
>
> P2(2,-3,8)
>
> (2 : 1 : 0)
>
> P2(0,1,0)
>
> (0 : 1 : 0)
>
> P2(2,-3,8)==P2(0,1,0)
>
> False
>
> E16=E.change_ring(Integers(16)); E16
>
> Elliptic Curve defined by y^2 + y = x^3 + 15*x over Ring of integers modulo 16
>
> E16(P)
> ZeroDivisionError: inverse of Mod(4, 16) does not exist
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/cda39b98-71be-462d-aa41-7d1195a0383e%40googlegroups.com.

Reply via email to