## Why does Assuming[x > 0, TrueQ[x > 0]] return False?

12

4

Assuming[x>0,TrueQ[x>0]]


should, as I understand it, test TrueQ[x>0] after assuming x>0. Could someone explain the output False to me, please?

1

– Leonid Shifrin – 2012-03-26T23:31:32.900

17

Because the assumption system is not called during the standard evaluation sequence, it is only called when Simplify, FullSimplify, Sum, Integrate etc... are used.
Thus, x>0 remains unevaluated:

Assuming[x > 0, x > 0]
(*
==> x > 0
*)


and TrueQ then returns False:

Assuming[x > 0, TrueQ[x > 0]]
(*
==> False
*)


If, however, you run Simplify before TrueQ, you get the expected result

Assuming[x > 0, TrueQ[Simplify[x > 0]]]
(*
==> True
*)


As an aside, there is some "hidden" functionality in the Assumptions context that lets you perform various checks and calculations within the assumption system. Run ?Assumptions* to see what's available. You code, in particular, could be written as

Assuming[x > 0, AssumptionsAPositive[x - 0]]
(*
==> True
*)


Thanks for pointing out the Assumptions context. – telefunkenvf14 – 2012-08-21T23:14:19.420

1

I should probably emphasis that TrueQ is a syntactic test that "yields True if its argument is True, and yields False` otherwise."

– Simon – 2012-03-26T23:05:16.897