On Jan 15, 2008, at 4:08 AM, John Cremona wrote:

> I think this computation (in the quotient ring) makes sense even if
> the ideal is not prime.  I had already tried to do it that way, but
> failed.
>
> However I am not quite convinced that verifying P1+(P1+P3)==(P1+P2)+P3
>  is genuinely proving anything!  Since in the implementation of
> elliptic curve addition, it may well be that commutativity and/or
> associativity are implicitly assumed.

Ah yes. I agree this is a problem for verifying commutativity. For  
associativity, what if you did the following. First compute P1 + P2  
in generic coordinates using the EllipticCurve class, i.e. you get  
the coordinates of P1 + P2 as a function of x1, y1, x2, y2 in the  
appropriate quotient ring. Then introduce x3, y3, relabel variables,  
and make the appropriate substitutions to verify that the "formula"  
for the coordinates of (P1 + P2) + P3 is the same as the formula for  
P1 + (P2 + P3). Would this constitute a correct verification of  
associativity (perhaps modulo problems caused by the point at infinity)?

> I tried doing this in Magma some time ago, using something like David
> Harvey's code.  I longed for a function GenericPoint() for a curve, so
> that for example
> (x1,y1)=E.GenericPoint()
> would return a point where x1,y1 live in the function field k(x1,y1)
> of the curve.  In fact I did manage to do that in Magma, but had
> problems then trying to define a second *independednt* generic point,
> since in Magma there is only ever *one* univariate polynomial ring
> over any given field.  To get a second generic point I had to make a
> base change of the curve from k (the proginal ground field) to the
> function field k(x1,y1), and then define a second point (x2,y2) such
> that k(x1,y1){x2,y2) is the function field of the curve over k(x1,y1).
>   I think I was then able to verify commutativity....but chickened out
> before going up another level to get a third point.
>
> There may be a better way of doing all that in Magma than I was doing,
> and I'm not sure that I care now.  But I think it would be really
> useful if in Sage we could define a GenericPoint for a curve, in such
> a way that subsequent calls to it returned independent generic points.
>  Does anyone think that might be possible?

That would be very nice.

The problem is.... once you've called (x1, y1) = E.generic_point()  
and (x2, y2) = E.generic_point(), suppose Sage was able to construct  
two different function fields (which I think it can). When you try to  
add the points, at some stage it has to decide what field (or ring)  
the sum is defined over, since it has to be a point on *some*  
elliptic curve. But that should never work, for the same reason that  
this can't work:

sage: R.<x> = ZZ[]
sage: S.<y> = ZZ[]
sage: x + y
[boom]

I can't remember exactly all the things that are supposed to be wrong  
with the above example, but I remember discussing this ad nauseum  
with a few people at various Sage Days (what's the plural of Sage  
Days?), and we definitely agreed it would be bad for this to work. I  
think perhaps the problem is that perhaps there are relations between  
x and y, and Sage has no way of knowing that without you explicitly  
telling it. I don't think this was the whole story though. Perhaps  
someone else remembers.

BUT I think it would be totally reasonable to support a syntax more like

E2, P = E.generic_point()

which returns a new elliptic curve over the function field (as you  
suggested), and a point P = (x, y) on that curve, and then you could  
subsequently do

E3, Q = E2.generic_point()

to get another point. But then you have the problem that adding  
points in different orders give you fields that Sage would almost  
certainly not recognise as being the same field. In fact it  
*shouldn't*, for exactly the same reason that x + y doesn't work in  
the above example, so I don't think this solves anything.

Hmmm...... the more I think about it, the more this is exactly like  
the example I suggested above. Perhaps the analogy is clearer if I  
write:

sage: E1.<P> = E[]
sage: E2.<Q> = E[]
sage: P + Q

!!!!!!!!!!!!!!!!

david


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to