Mathematica fails to do anything with
Reduce[Abs[x-3]<4, Reals]
(* Reduce[Abs[x-3]<4, Reals] *)
This answer contends that explicitly naming the variables to be reduced will solve the problem, and indeed
Reduce[Abs[x-3]<4, x, Reals]
(* -1 < x < 7 *)
But why is this the case? If either the absolute value is removed, or the <
is changed to =
, it is not necessary to provide the variable name.
Answer
After some back and forth with WRI, here is the answer: the domain restriction in Reduce[]
applies to the specified variables and functions involving those variables. Since no variables are specified in my first example, the domain restriction effectively does nothing. That also explains why using {}
does not solve the problem.
EDIT: After reading @Michael's comment below, I had more interactions with Wolfram support, and I am still somewhat confused. From WRI:
From Reduce documentation:
"Algebraic variables in expr free of the Subscript[x, i] and of each other are treated as independent parameters."
Since no Subscript[x, i] are specified, Reduce solves for the algebraic-level variables that are free of other algebraic-level variables.
In[1]:= Reduce`FreeVariables[x^2<4, "Algebraic"]
Out[1]= {x}
In[2]:= Reduce`FreeVariables[Abs[x-3]<4 && x\[Element]Reals, "Algebraic"]
Out[2]= {x}
In[3]:= Reduce`FreeVariables[Abs[x-3]<4, "Algebraic"]
Out[3]= {Abs[-3 + x]}
In[4]:= Reduce`FreeVariables[Re[x] > 0, "Algebraic"]
Out[4]= {Re[x]}
I guess the point is that x
appears "algebraically" only in the first example; in the other examples it is the Abs
or Re
expression that is the "algebraic-level" variable.
This is still pretty unclear to me at a conceptual level (although I now know how to get the results I want), but I'm not sure what further questions to ask to clarify the situation. BTW, Reduce``FreeVariables
is not documented.
Comments
Post a Comment