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?

max

Posted 2012-03-26T22:42:11.120

Reputation: 1 515

1

Related discussion: http://mathematica.stackexchange.com/questions/601/why-does-mathematica-claim-there-is-no-even-prime

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

Answers

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, Assumptions`APositive[x - 0]]
(*
==> True
*)

Simon

Posted 2012-03-26T22:42:11.120

Reputation: 9 867

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