4

Consider:

Expre10 = (B^2/C + 2 B + B^2/D + (B C)/D + (B D)/C) + 
   1 (C + D) - (A \[Beta] \[Sigma])/(B C D) (C + D);
Assuming[{A > 0, B > 0, C > 0, 
  D > 0, \[Beta] > 0, \[Sigma] > 0, (A \[Beta] \[Sigma])/(B C D) <=  
   1}, Simplify[Expre10 > 0]]

Returns the inequality:

B (B + C) (B + D) > A [Beta] [Sigma]

But we clearly see if (A \[Beta] \[Sigma])/(B C D) <= 1 holds then our inequality will always be true, so why am I getting the wrong output?

Math
  • 407
  • 2
  • 13
  • 1
    Aren't $C$ and $D$ reserved Mathematica commands? I wouldn't recommend using capital letters as variable names for this very reason. – Moo Sep 23 '21 at 12:50
  • @Moo I didn't know, however I still get the same results with different letters – Math Sep 23 '21 at 12:55
  • Look closer. The result you got is structured like (X > Y) > 0. To see why this is wrong, imagine doing (2 > 1) > 0 which returns True > 0 - this is incorrect. Your Expre10 already contains a > sign and your Simplify is adding on this extra > 0 at the end. – flinty Sep 23 '21 at 12:59
  • I made a typo! Its still not resulting true. – Math Sep 23 '21 at 13:03
  • 2
    C and D are protected system symbols. Best practice is to avoid single capital letters for your own variables. Recommended practice is to avoid starting your variable/function names with a captial. See https://mathematica.stackexchange.com/a/18395/4999, point 4. – Michael E2 Sep 23 '21 at 13:37
  • This problem persists even with {A, B, C, D} replaced by lower-case letters. Nonetheless, this is not a suitable question, because it asks (in effect), why isn't Mathematica capable of doing what I think it should, which cannot be answered except by Wolfram staff. – bbgodfrey Sep 23 '21 at 14:31
  • @bbgodfrey My question was answered hence it was a suitable question so I don't see a problem here. Please look below at the answer. – Math Sep 23 '21 at 15:13

1 Answers1

8

Simplify is at root an expression tree minimizer, equipped with some algebraic and logical transformations. As such, it may have the transformations needed to reach your goal, but its main goal is to apply transformations that result in smaller expression trees. It is also possible that it may not try the transformation needed to get to your goal. Functions whose purpose is to solve algebraic systems, such as Reduce, are generally more robust. They tend not to mind if all the cases to consider get quite complicated. Whereas Simplify is like a first-year university student who feels it's time to give up when things get complicated, Reduce is like a graduate student determined to impress their professor.

Expre10 = (B^2/C + 2 B + B^2/D + (B C)/D + (B D)/C) + 
     1 (C + D) - (A β σ)/(B C D) (C + D) /. C -> c /. 
   D -> d;
Assuming[{A > 0, B > 0, c > 0, 
   d > 0, β > 0, σ > 0,
   (A β σ)/(B c d) <= 1}, 
 Reduce[$Assumptions \[Implies] Expre10 > 0, {}, Reals]]

(* True *)

Specifying the domain Reals is key here, too.

Michael E2
  • 235,386
  • 17
  • 334
  • 747