On Jan 14, 2008, at 10:09 PM, Carl Witty wrote:
> Here is a more idiomatic way to do this computation in Sage. We work
> in the fraction field of a multivariate polynomial ring; this means
> that our polynomial arithmetic is handled by libSingular instead of by
> maxima, and that we can get the numerator directly with "numerator",
> since fraction field elements are always normalized. Also, we use
> Sage's wrapper of ideals and Groebner bases (which I believe is
> implemented with libSingular), rather than calling Singular.
> (Avoiding the call to "factor(s1-s2)" means that this version is much
> faster.)
>
> sage: R.<x1,y1,x2,y2,x3,y3,a,b> = QQ[]
> sage: eq1 = y1^2 -(x1^3+a*x1+b)
> sage: eq2 = y2^2 -(x2^3+a*x2+b)
> sage: eq3 = y3^2 -(x3^3+a*x3+b)
> sage: lambda12 = (y1 - y2)/(x1 - x2)
> sage: x4 = (lambda12*lambda12 - x1 - x2)
> sage: nu12 = (y1 - lambda12*x1)
> sage: y4 = (-lambda12*x4 - nu12)
> sage: lambda23 = ((y2 - y3)/(x2 - x3))
> sage: x5 = (lambda23*lambda23 - x2 - x3)
> sage: nu23 = (y2 - lambda23*x2)
> sage: y5 = (-lambda23*x5 - nu23)
> sage: s1 =(x1 - x5)*(x1 - x5)*((y3 - y4)*(y3-y4) - (x3+x4)*(x3-x4)*
> (x3-
> x4))
> sage: s2 =(x3 - x4)*(x3 - x4)*((y1 - y5)*(y1-y5) - (x1+x5)*(x1-x5)*
> (x1-
> x5))
> sage: n12 = numerator(s1-s2)
> sage: I = ideal([eq1,eq2,eq3])
> sage: I.reduce(n12)
> 0
What would be *really* nice is if we could work directly in the
fraction field of the quotient of R.<x1,y1,x2,y2,x3,y3,a,b> by the
appropriate ideal. (Does that even make sense? Is the ideal prime?) I
tried to do this but Sage gave up pretty quickly on me. A nice encore
would be to do this using Sage's elliptic curve class to do the
actual arithmetic. After all EllipticCurves can be defined over any
field....
Here's my dream session:
sage: R.<x1,y1,x2,y2,x3,y3,a,b> = QQ[]
sage: I = R.ideal(y1^2 - x1^3 - a*x1 - b, y2^2 - x2^3 - a*x2 - b,
y3^2 - x3^3 - a*x3 - b)
sage: S = FractionField(R.quotient(I)) # currently barfs
sage: E = EllipticCurve(S, [a, b])
sage: P1 = E(x1, y1)
sage: P2 = E(x2, y2)
sage: P3 = E(x3, y3)
sage: (P1 + P2) + P3 == P1 + (P2 + P3)
True
Here's the traceback in the FractionField line:
/Users/david/sage-2.9/local/lib/python2.5/site-packages/sage/rings/
fraction_field.py in FractionField(R, names)
104 if not ring.is_Ring(R):
105 raise TypeError, "R must be a ring"
--> 106 if not R.is_integral_domain():
107 raise TypeError, "R must be an integral domain."
108 return R.fraction_field()
/Users/david/sage-2.9/local/lib/python2.5/site-packages/sage/rings/
quotient_ring.py in is_integral_domain(self)
226
227 """
--> 228 return self.defining_ideal().is_prime()
229
230 def cover_ring(self):
/Users/david/sage-2.9/local/lib/python2.5/site-packages/sage/rings/
ideal.py in is_prime(self)
275
276 def is_prime(self):
--> 277 raise NotImplementedError
278
279 def is_principal(self):
This suggests maybe the only barrier here is checking primality of
the ideal? After that, the fraction field magic should just work
right? But surely there is code somewhere to check primality, isn't
this in singular or something? I don't know anything about the
implementation of multivariate polynomial rings, maybe someone else
can help out here.
david
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/
-~----------~----~----~----~------~----~------~--~---