skirpichev/sympy — pull request #16 by smichr (2014-09-12 17:29:00+00:00)
Title: finite and infinite are not antonyms, add bounded

If we assume finite == !infinite in assumptions, we
create an alias: finite=False is the same as infinite=True
and vice versa. integer and noninteger are the same:

Dummy(integer=0) is not the same thing as Dummy(noninteger=1).
a noninteger is commutative, complex, hermitian, noninteger,
nonzero, and real while integer=0 is only commutative -- nothing
else is known about it.

finite : 0 < abs(x) < oo
bounded : 0 <= abs(x) < oo
infinite : abs(x) == oo

The same is also true for zero and nonzero. If nonzero is True you
are talking about a complex number that is not zero. But if zero is
False you are only talking about a commutative object that is not
zero.

Several XFAIL tests were changed to reflect this. One that wasn't
XFAILed was Dummy(nonnegative=False).is_nonzero is True. nonzero is
complex but when we negate an attribute you know nothing about
what it *is* only what it isn't. Since it could be noncommutative
we can't say that it is nonzero.