[GiNaC-list] Bug Report
jens.vollinga at googlemail.com
Fri Jul 22 22:54:15 CEST 2011
On 22.07.2011 01:09, Jon Graves wrote:
> works, while the second doesn't. The second one is the most general
> one, useful for any situation ... if it worked. Is this a bug?
no, not really.
It is documented behaviour, but maybe counterintuitive.
In your code
int n = 2;
ex test = power(power(x,n),power(n,-1));
cout << test.subs(power(power(wild(1),wild(2)),power(n,-1))==wild(1))
test.subs(power(power(wild(1),wild(2)),power(wild(2),-1))==wild(1)) << endl;
the term power(n,-1) is simplified/evaluated to a numeric 1/2. Therefore
the first pattern matches since in its LHS the same simplification takes
If you want you can look at the data structures with something like
cout << tree << test << dflt;
The second matching fails because wild(2) is always treated like a
symbol and a power with a symbol as a base is not simplified. You try to
match a numeric 1/2 with a power(symbol,-1) which doesn't work, because
subs() performs purely syntactic substitutions.
More information about the GiNaC-list