On Wed, 29 Sep 2010 07:38:59 -0700 (PDT) Jean-Pierre Flori <jpfl...@gmail.com> wrote:
> Sage has the following behavior inherited from GiNaC (http:// > www.ginac.de/tutorial/Pattern-matching-and-advanced-substitutions.html) > : > > ---------------------------------------------------------------------- > | Sage Version 4.5.3, Release Date: 2010-09-04 | > | Type notebook() for the GUI, and license() for information. | > ---------------------------------------------------------------------- > sage: x,y,z = var('x,y,z') > sage: P = x+y > sage: P.subs({x+y:z}) > z > sage: P = x+y+z > sage: P.subs({x+y:z}) > x + y + z > sage: w0 = SR.wild(0) > sage: P.subs({x+y+w0:z+w0}) > 2*z > sage: P = x+y > sage: P.subs({x+y+w0:z+w0}) > z > sage: > > Of course the same thing is happening with mul objects. > I think this is somewhat misleading and should at least be explained > in the documentation. > The above url is already give in the documentation of the match > function but not in the one of subs. > Maybe this explains the warning in the documentation of the subs_expr > function. The function substitute_expression() is one of the relics remaining from the old symbolics code. IMHO, we should merge it with the substitute() function and deprecate it. > However that warning refers to Maxima whereas : > > sage: get_systems('P.subs_expr({x+y+w0:z+w0})') > ['ginac'] > > The weird example can also be solved using a wildcard : > > sage: t = var('t') > sage: f(x,y,t) = cos(x) + sin(y) + x^2 + y^2 + t > sage: f > (x, y, t) |--> x^2 + y^2 + t + sin(y) + cos(x) > sage: f.subs_expr(x^2 + y^2 == t) > (x, y, t) |--> x^2 + y^2 + t + sin(y) + cos(x) > sage: f.subs_expr(x^2 + y^2 + w0 == t + w0) > (x, y, t) |--> 2*t + sin(y) + cos(x) > > I don't know if such a trick should be implemented in Sage, pynac, or > even in GiNaC. You can definitely suggest it to the ginac developers. I'm curious to see what they think. Note that this might not be so straight forward, especially if the expression we're supposed to replace contains wildcards in the first place. We can add some logic to our interface to ginac and add the wildcard to the expression if none exists. Though I'm afraid this might increase the confusion if someone is trying to debug substitutions in a complex expression. One other point against doing this by default is that substituting with wildcards is slower. Even if we decide to do this, there should be an option not to. Cheers, Burcin -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org