I have the following code for simplifying an inequality:
glbcond =
{0 < d1 < 1, d1 ∈ Reals, 0 < d2 < 1, d2 ∈ Reals,
0 < d3 < 1, d3 ∈ Reals, 0 < e1 < 1, e1 ∈ Reals,
0 < e2 < 1, e2 ∈ Reals, 0 < e3 < 1, e3 ∈ Reals,
0 < Hd < 1, Hd ∈ Reals, 0 < Hu < 1, Hu ∈ Reals,
0 < L1 < 1, L1 ∈ Reals, 0 < L2 < 1, L2 ∈ Reals,
0 < L3 < 1, L3 ∈ Reals, 0 < Q1 < 1, Q1 ∈ Reals,
0 < Q2 < 1, Q2 ∈ Reals, 0 < Q3 < 1, Q3 ∈ Reals,
0 < u1 < 1, u1 ∈ Reals, 0 < u2 < 1, u2 ∈ Reals,
0 < u3 < 1, u3 ∈ Reals};
z2cond =
Hd < Hu < L1 < L2 < L3 < Q1 < Q2 < Q3 < u1 < u2 < u3 < d1 < d2 < d3;
Simplify[Abs @ (Q1 u1)/(d2 Q3) < 1, (And @@ glbcond) && z2cond]
Q1 u1 < d2 Q3
However, if I turn up the SystemOptions
as suggested by this related post here as
SetSystemOptions[
"SimplificationOptions" -> "AssumptionsMaxNonlinearVariables" -> 14]
I get
Simplify[Abs[(Q1 u1)/(d2 Q3)] < 1, glbcond && z2cond]
True
So my question is, how exactly are the numbers of non-linear variables calculated? As far as I can see from my example, all the inequalities inside the argument for assumption are linear. Or does the calculation of number of non-linear variables involve both of the two arguments sitting inside Simplify
?
This my first post on Mathematica.SE. I hope my post meets the site's posting conventions :)
z2cond
. Thus{Abs[(Q1 u1)/(d2 Q3)] < 1, z2cond}
form a nonlinear system, which has 14 variables. (The whole withglbcond
has 17 variables, but thee1
,e2
,e3
components can be factored out as a direct product and treated as linear....But I don't know for sure that's how Mathematica approaches it.) $\endgroup$In[43]:= SetSystemOptions["SimplificationOptions"->"AssumptionsMaxNonlinearVariables"->9]; ClearSystemCache[]; Simplify[Abs@((Hd Hu)/Q1)<1,glbcond&&z2cond] Out[45]= True
, which now only requires"AssumptionsMaxNonlinearVariables"->9
$\endgroup$