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.