On May 14, 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.

Ok the issue is in ell_generic.__call__() that calls _reduce_point with characteristic p=4 which is not a prime. This function in turn creates the curve
E' = E.change_ring(GF(4))
instead of your
E4 = E.change_ring(Integers(4))

And then returns the point E'(P) which indeed is the identity.

R

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 [11]sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit [12]https://groups.google.com/d/msgid/
sage-devel/f2900af4-6aad-4450-9e12-6f1ec95596f8%40googlegroups.com.

References:

[11] mailto:sage-devel+unsubscr...@googlegroups.com
[12] 
https://groups.google.com/d/msgid/sage-devel/f2900af4-6aad-4450-9e12-6f1ec95596f8%40googlegroups.com?utm_medium=email&utm_source=footer


--
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/20200514151740.GA53041%40vertex.

Attachment: signature.asc
Description: PGP signature

Reply via email to