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 sage-support@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-support URLs: http://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/ -~----------~----~----~----~------~----~------~--~---