Logged In: YES

user_id=588346

Hmm. Further experimentation shows that with assume(a*b):

asksign(a*b*c) asks the sign of a*b*c, not just c

asksign(a^2*b) asks the sign of a^2*b

and most surprisingly

asksign atan(a*b) asks the sign of atan(a*b), not just a*b.

This one is actually easy to fix: in sign-oddinc, use sign1

rather than sign.

The first two cases can be explained by assuming that it

doesn't check the sign of the a*b subexpression, since it

doesn't "notice" it as a subexpression. It's not clear how

you'd fix that: do you really want sign-mtimes to check all

2^n-n-2 subproducts of a length-n product to see if they're

in the database? This will rarely be useful and is expensive.

Perhaps the database needs to keep a list of "terms included

in products"....

There are similar issues with sums. Consider assume

(m>n,n>0); sign(m-n)=>pos, but sign(m-n+1)=>pnz.

The original problem can probably be solved by re-checking

the sign of the product of the odds before returning from

sign1, but you have to be careful to avoid an infinite

recursion here.