On Thu, May 22, 2008 at 7:03 AM, Simon King <[EMAIL PROTECTED]> wrote: > > Dear Marc, > > let me try some explanations. > > On May 22, 1:43 pm, Marc Roeder <[EMAIL PROTECTED]> wrote: >> sage: QX=MPolynomialRing(QQ,2,'xy') >> sage: x in QX # no variables assinged to indeterminates yet... >> False > > If you start Sage, x is already defined: > sage: type(x) > <class 'sage.calculus.calculus.SymbolicVariable'> > > The apparent reason is that 'x' is a typical name for a symbolic > variable. However, when one isn't aware that x is pre-defined, strange > things may happen. > > Now, defining > sage: QX=MPolynomialRing(QQ,2,'xy') > does *not* change x! > > Sage makes a clear distinction between the default symbolic variable > with identifier 'x' and the ring variable with the name 'x'. The ring > variable can be accessed with > sage: QX.gen(0) > x > sage: x is QX.gen(0) > False > >> sage: indets=QX.objgens()[1];indets >> (x, y) >> sage: x in indets >> True >> But x and indets[0] have different types. > > You are right: > sage: type(QX.objgens()[1][0]) > <type > 'sage.rings.polynomial.multi_polynomial_libsingular.MPolynomial_libsingular'> > sage: type(x) > <class 'sage.calculus.calculus.SymbolicVariable'> > sage: x in QX.objgens()[1] > True > > I think this is a confusing behaviour that probably has the following > reason: > sage: x==QX.gen(0) > x == x > > This is a symbolic equation (since x is symbolic) that evaluates to > True, and consequently you get the wrong answer that the symbolic > variable x belongs to indets.
NO. That is not what is going on. The explanation is that there is a canonical map from QX to the symbolic ring. The in command doesn't get confused by x == QX.gen(0) being a symbolic equality, since it calls bool on that. > > In x==QX.gen(0) apparently the two *different* objects with coinciding > names got mixed up. Do the more experienced Sage users agree with me > that this is not nice (or a bug)? I definitely do not agree with you. > >> 2. indeterminates are sometimes shared between rings: >> sage: R.<x,y>=QQ[];R > > By the way, if you use that syntax, the symbolic variable x is > overwritten, and now x is known to Sage as a ring generator: > sage: R.<x,y>=QQ[] > sage: type(x) > <type > 'sage.rings.polynomial.multi_polynomial_libsingular.MPolynomial_libsingular'> > >> sage: R2=MPolynomialRing(QQ,2,'xy') >> sage: R==R2 >> True > > Yes, they are the same, in the sense that they have the same base ring > and the same variable names in the same *order*. > Compare > sage: R3=MPolynomialRing(QQ,2,'yx') > sage: R==R3 > False > > Even more, R and R2 are not only the same but *identical*: > sage: R is R2 > True > > Therefore, x (which is now defined as a generator of R) is also > generator of R2 (since R2 is identical with R2), but it is not a > generator of R3: > sage: x in R3 > False > >> sage: R2=MPolynomialRing(QQ,1,'x') >> sage: x in R2 >> False > > Yes, in this example R2 is not identical with R, and by consequence x > does not belong to R2. > > In conclusion, i believe that > 1) pre-defining x may be confusing, but this is Sage tradition It makes a lot of things much more concise. Sage is to be *used*, not to be some hard-to-use abstract formal system. > 2) sage: bool(var('x')=='x') > True > is a bug, IMO. I disagree. There is a canonical coercion to the symbolic ring. > 3) your observations concerning generators of R,R2 can be explained by > the distinction between "the same" and "identical". Yes. > > > > -- William Stein Associate Professor of Mathematics University of Washington http://wstein.org --~--~---------~--~----~------------~-------~--~----~ 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://www.sagemath.org -~----------~----~----~----~------~----~------~--~---