# Reducing an inequality with a complicated Log term?

I am trying to symbolically Reduce the following (admittedly complicated) inequality:

x = (b1 -
b2) (1 - b1 +
b2)^2 ((b1 - b2) ((b1 - b2)^2 + (2 - 3 b1 + 3 b2) bMax) +
2 (1 - b1 + b2)^2 bMax Log[1 - b1 + b2]);

FullSimplify[Reduce[x > 0 && 0 < b1 < b2 < bMax && bMax > 0]]


When I run this code, I am told "This system cannot be solved with the methods available to reduce."

The workaround described in this post is not working for me, as I still ultimately receive the same error when evaluating an inequality involving the Log term. Is there any other way reduce the inequality symbolically (i.e., analytically)?

• There appears to be an extra "> 0" at the end of your definition of $x$. Sep 24, 2022 at 23:22
• @LouisB Whoops, sorry, I fixed it! Sep 24, 2022 at 23:32

## 1 Answer

I do not know if a single Reduce call will do it, but I can help OP with analyzing this problem.

A simple observation is that OPs expression only depends on the difference b2-b1. Therefore, let us replace this by a new symbol that I will call u. The assumptions that OP has given imply 0<u<bMax that we will use below.

Replace b2-b1 with u as follows:

x2=x/.{b2->b1+u}//Simplify
(* u (1+u)^2 (u^3+bMax u (2+3 u)-2 bMax (1+u)^2 Log[1+u]) *)


Note that the expression does not contain b1 and does not contain b2. The first factor is positive, u>0. The second factor is positive, (1+u)^2>0. Therefore the inequality x2>0 is equivalent to the third factor being positive. Let me use Reduce for just that problem:

reduce[bMax_] := Reduce[u^3+bMax u (2+3 u)-2 bMax (1+u)^2 Log[1+u]>0 && 0<u<bMax];


The idea is that if we provide a number for bMax, then there us only one variable left, namely u, and then Reduce is much more likely to produce something useful. Here are two examples

reduce[3/2]
(* 0 < u < 3/2 *)

reduce[2163/1000]
(* False *)


In the first example, all u are allowed, meaning all u that satisfy the obvious inequality 0<u<bMax. In the second example, no u is allowed. By experimenting a little bit, the following picture emerges:

• If 0 < bMax <= 3/2, then all u that satisfy 0<u<bMax are allowed.
• If bMax >= threshold, then no u is allowed. The threshold is near 2.16258..., a symbolic expression is given below.
• If 3/2 < bMax < threshold, then the variable u must lie in an interval of the form lower[bMax] < u < bMax. The function lower[bMax] is defined below.

Here is an example from the third case:

reduce[2]
(* 1.57...<u<2 *)


The lower bound is some Root object.

Code to produce the lower bound directly would be

lower[bMax_]:=u/.First[Solve[{u^3+bMax u (2+3 u)-2 bMax (1+u)^2 Log[1+u]==0,u>0},u]];


The threshold mentioned above is that value bMax where lower[threshold] becomes equal to threshold. Explicit code for this is

threshold=u/.First[Solve[{With[{bMax=u},
u^3+bMax u (2+3 u)-2 bMax (1+u)^2 Log[1+u]]==0,u>0}]]
(* 2.16... given as a Root object*)


Note. I did not provide a proof of each step, especially when I wrote down the three cases above. Some more work would be required to prove these things in detail. OP may also want to try to run reduce[bMax] with bMax symbolic, maybe it will return something useful.

Plot. Here is a plot for 3/2 < bMax < threshold:

The yellow curve is not linear but it is approximately linear:

(* a linear approximation to lower[bMax] *)
lowerApproximate[bMax_]:=threshold*(bMax-3/2)/(threshold-3/2);


This was generated using

With[{aux=u^3/(-u (2+3 u)+2 (1+u)^2 Log[1+u])},ParametricPlot[{{aux,aux},{aux,u}},{u,0,threshold},AspectRatio->1,AxesLabel->{"bMax"},PlotLegends->{"bMax","lower[bMax]"}]]

• Thank you so much!! This was extremely helpful Sep 25, 2022 at 16:16