Dear David, one can construct the apropriate quotient P=QQ['a,b,x1,x2,x3'] K.<a,b,x1,x2,x3>=FractionField(P) R.<y1,y2,y3>=K['y1,y2,y3'] I = R.ideal(y1^2 - x1^3 - a*x1 - b, y2^2 - x2^3 - a*x2 - b, y3^2 - x3^3 - a*x3 - b) S=quotient(R,I)
sage: S Quotient of Multivariate Polynomial Ring in y1, y2, y3 over Fraction Field of Multivariate Polynomial Ring in a, b, x1, x2, x3 over Rational Field by the ideal (y1^2 - x1^3 - a*x1 - b, y2^2 - x2^3 - a*x2 - b, y3^2 - x3^3 - a*x3 - b) but E = EllipticCurve(S, [a,b]) does not work (in the present implementation) Andrzej On 15 Sty, 08:35, achrzesz <[EMAIL PROTECTED]> wrote: > Dear Carl, > I like your code; it is elegant and realy quick > but it seems that finishing your code > with Paul Zimmermann's approach > > I2 = singular(I).groebner() > #print I.reduce(n12); > print singular.reduce((n12), I2) > > (althout less elegant) > is a little bit faster > (0.06 -> 0.05 on my comp. :) > > I want also add a question to David Harvey questions > > In experimenting with Lenstra factorization method one needs > multiplication on ell.curv over the Ring Z_(p*q). GP-Pari allows > for that so I'm doing it using gp interface. Is it difficult to > implement > a similar functionality in Sage? > > Andrzej Chrzeszczyk > > On 15 Sty, 03:28, David Harvey <[EMAIL PROTECTED]> wrote: > > > 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/ -~----------~----~----~----~------~----~------~--~---