Handlers for predicates related to set membership: integer, rational, etc.
Handler for Q.antihermitian Test that an expression belongs to the field of anti-Hermitian operators, that is, operators in the form x*I, where x is Hermitian
Antihermitian + Antihermitian -> Antihermitian Antihermitian + !Antihermitian -> !Antihermitian
Handler for Q.complex Test that an expression belongs to the field of complex numbers
Handler for Q.extended_real Test that an expression belongs to the field of extended real numbers, that is real numbers union {Infinity, -Infinity}
Handler for Q.hermitian Test that an expression belongs to the field of Hermitian operators
Hermitian + Hermitian -> Hermitian Hermitian + !Hermitian -> !Hermitian
Handler for Q.imaginary Test that an expression belongs to the field of imaginary numbers, that is, numbers in the form x*I, where x is real
Imaginary + Imaginary -> Imaginary Imaginary + Complex -> ? Imaginary + Real -> !Imaginary
Imaginary**Odd -> Imaginary Imaginary**Even -> Real b**Imaginary -> !Imaginary if exponent is an integer multiple of I*pi/log(b) Imaginary**Real -> ? Positive**Real -> Real Negative**Integer -> Real Negative**(Integer/2) -> Imaginary Negative**Real -> not Imaginary if exponent is not Rational
Handler for Q.integer Test that an expression belongs to the field of integer numbers
Integer + Integer -> Integer Integer + !Integer -> !Integer !Integer + !Integer -> ?
Integer*Integer -> Integer Integer*Irrational -> !Integer Odd/Even -> !Integer Integer*Rational -> ?
Integer + Integer -> Integer Integer + !Integer -> !Integer !Integer + !Integer -> ?
Handler for Q.rational Test that an expression belongs to the field of rational numbers
Rational + Rational -> Rational Rational + !Rational -> !Rational !Rational + !Rational -> ?
Rational + Rational -> Rational Rational + !Rational -> !Rational !Rational + !Rational -> ?
Handler for Q.real Test that an expression belongs to the field of real numbers
Real*Real -> Real Real*Imaginary -> !Real Imaginary*Imaginary -> Real
Real**Integer -> Real Positive**Real -> Real Real**(Integer/Even) -> Real if base is nonnegative Real**(Integer/Odd) -> Real Imaginary**(Integer/Even) -> Real Imaginary**(Integer/Odd) -> not Real Imaginary**Real -> ? since Real could be 0 (giving real) or 1 (giving imaginary) b**Imaginary -> Real if log(b) is imaginary and b != 0 and exponent != integer multiple of I*pi/log(b) Real**Real -> ? e.g. sqrt(-1) is imaginary and sqrt(2) is not