posible bug - clashing variable names in integrals




On Sat, 3 Oct 2009, Leo Butler wrote:

< 
< 
< On Sat, 3 Oct 2009, Nathaniel Virgo wrote:
< 
< < On a similar note, am I right to say the following should not return false?
< < 
< < (%i20) A: 'integrate(f(x),x,a,b);
< < (%o20) integrate(f(x),x,a,b)
< < (%i21) B: 'integrate(f(y),y,a,b);
< < (%o21) integrate(f(y),y,a,b)
< < (%i22) is(A=B);
< < (%o22) false
< < 
< < the two expressions are equivalent, the only difference being the name of a
< < bound variable.  So it should return "true" or "maybe" but not false. It
< < works with ordinary (non-integral) functions:
< < 
< < (%i24) f(x):=x^2;
< < (%o24) f(x):=x^2
< < (%i25) g(y):=y^2;
< < (%o25) g(y):=y^2
< < (%i26) is(f(z)=g(z));
< < (%o26) true
< < 
< < Nathaniel

I think this makes perfect sense. f(z) and g(z) are syntactically equal
(the short story is they both evaluate to z^2). On the other hand, Maxima does not integrate
functions, it integrates expressions. For example

f(x) := x*y;

yields two different integrals if one integrates v. x vs. v. y.
So, Maxima will return 'unknown' for the test

is(equal(A,B));

too.

Leo





< < 
< < 
< < 2009/10/3 Nathaniel Virgo <nathanielvirgo at gmail.com>
< < 
< < > Hi
< < >
< < > I just came across the following.  Should it be considered a bug?
< < >
< < >
< < > this works fine:
< < >
< < > (%i10) C:integrate(g(y),y,c,d);
< < > (%o10) integrate(g(y),y,c,d)
< < >
< < > (%i11) A: integrate(C*f(x),x,a,b);
< < > (%o11) integrate(f(x),x,a,b)*integrate(g(y),y,c,d)
< < >
< < > it has successfully taken the constant outside the integral
< < >
< < > (%i12) B: C*'integrate(f(x),x,a,b);
< < > (%o12) integrate(f(x),x,a,b)*integrate(g(y),y,c,d)
< < >
< < > so A and B are the same
< < >
< < > (%i13) is(A=B);
< < > (%o13) true
< < >
< < > however, if I do the following, which should be exactly equivalent, it
< < > fails:
< < >
< < > (%i14) C:integrate(g(x),x,c,d);
< < > (%o14) integrate(g(x),x,c,d)
< < >
< < > (%i15) A: integrate(C*f(x),x,a,b);
< < > (%o15) integrate(f(x)*integrate(g(x),x,c,d),x,a,b)
< < >
< < > it has failed to realise that the x in the subexpression is a different
< < > variable from the x in the outer integral, so it keeps the constant inside
< < > the integral
< < >
< < > (%i16) B: C*'integrate(f(x),x,a,b);
< < > (%o16) integrate(f(x),x,a,b)*integrate(g(x),x,c,d)
< < >
< < > (%i17) is(A=B);
< < > (%o17) false
< < >
< < > ...and it now thinks the two expressions A and B are provably not the same,
< < > even though they are in fact equivalent.  It would be ok (although a bit
< < > lame) if it answered "maybe" here, but it seems to me that "false" is just
< < > incorrect.
< < >
< < >
< < > Nathaniel
< < >
< < >
< < 
< 
< Nathaniel,
< You slide between equal and equivalent and are not clearly
< distinguishing between the two. Maxima does. From
< 
< ? =
< 
<  `is(<a> = <b>)' evaluates `<a> = <b>' to `true' when <a> and <b>
<      are syntactically equal (that is, identical).  Expressions can be
<      equivalent and not syntactically equal.
< 
< Try 
< 
< is(equal(A,B));
< 
< 
< Leo
< 
< -- 
< The University of Edinburgh is a charitable body, registered in
< Scotland, with registration number SC005336.
< 
< _______________________________________________
< Maxima mailing list
< Maxima at math.utexas.edu
< http://www.math.utexas.edu/mailman/listinfo/maxima
< 
< 

-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.