I have this inequality:
Reduce[(4000-1000k)/(k-4) < 0]
and the answer is
k ∈ Reals
I would expect k != 4.
I have this inequality:
Reduce[(4000-1000k)/(k-4) < 0]
and the answer is
k ∈ Reals
I would expect k != 4.
The following is a kind of remedy for the problem at hand:
Reduce[# < 0 && Denominator[#] != 0]&[ (4000 - 1000 k)/(k - 4)]
k < 4 || k > 4
Even though the issues in the OP could be easily resolved nonetheless they are not mathematically correct and for this reason one could consider them as bugs, this is a similar problem
( 4 ∈ Complexes as well as 4 ∈ Reals but 0/0 is Indeterminate thus
TrueQ[Indeterminate ∈ Reals] yields False):
Reduce[(4000 - 1000 k)/(k - 4) ∈ Reals, k]
True
while this one is correct:
Reduce[(4000 - 1000 k)/(k - 4) ∈ Reals, k, Reals]
k < 4 || k > 4
Similar issue one can find here: Issue with NSolve.
Therefore we can conclude
Reduce[(4000 - 1000 k)/(k - 4) < 0, k]
Reduce[(4000 - 1000 k)/(k - 4) < 0, k, Reals]
Reduce[(4000 - 1000 k)/(k - 4) < 0, k, Complexes]
k ∈ Reals True True
yield results which appear to be incorrect in special cases, they are only generically correct. All of these above work as with a simplification technique:
Simplify[(4000 - 1000 k)/(k - 4)]
-1000
but from strictly mathematical point of view they shouldn't. Nevermind what the documentation says (genericity et consortes) this is of course a bug:
Reduce[(4000 - 1000 k)/(k - 4) < 0 && 3 < k < 5, k, Integers]
k == 4
ConditionalExpression[-1000, k != 4] would be a better (more useful/usable) return value for that Simplify. The function FunctionDomain is coming, which is a sort of practical solution to this problem.
– Szabolcs
Mar 22 '14 at 16:06
Integers and the condition 3 < k < 5 selects only k == 4 but for such a number (4000 - 1000 k)/(k - 4) < 0 cannot be satisfied.
– Artes
Mar 22 '14 at 21:02
Please see this tutorial on the results given by symbolic functions. In short, the results returned by them are generically correct:
http://reference.wolfram.com/mathematica/tutorial/GenericAndNonGenericCases.html
In version 10, one could use this workaround:
Reduce[FunctionDomain[(4000 - 1000 k)/(k - 4), k] && (4000 - 1000 k)/(k - 4) < 0]
FunctionDomain alone returns k < 4 || k > 4 and can be used to restrict the domain of k within Reduce ...