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.
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.
At least, it should be documented.

Best regards,

-- 
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

Reply via email to