2

I get lots of conditions like this:

a (b c - (-1 + a) d (c + f g)) h > (-1 + a) i (b + a  j ) g

I have following assumptions all variables are real and greater 0, a is also smaller 1, in Mathematica:

$Assumptions = {a, b, c, d, f, g, h, i, j} \[Element] 
   Reals && {a, b, c, d, f, g, h, i, j} > 0 && 0 < a < 1

Despite a few simple cases Reduce produces following output:

A very large output was generated. Here is a sample of it: (a | b | c | d | f | i) [Element] Reals && ((j < 0 && (<<1>>)) || (j == 0 && (<<1>>)) || (j > 0 && (<<1>>)))

I wonder how would I need to input it to evaluate to true or false.


Manually in this case it must be true:

  • rewrite -1+a to -(1-a)

    a (b c + (1 - a) d (c + f g)) h > -(1 - a) i (b + a j ) g

  • all to left side:

    a (b c + (1 - a) d (c + f g)) h+ (1 - a) i (b + a j ) g > 0

  • since (1-a)>0 and all other variables >0 the left side is the sum of products of variables that are all >0. So this must hold. Why I can't make Mathematica to confirm this?

4

1 回答 1

2

部分帮助:

这个假设

{a, b, c, d, f, g, h, i, j} > 0

不单独适用于每个元素,试试这个:

$Assumptions = Flatten[ { # > 0 & /@ {a, b,c,d,e,f,g,h,i,j} , 0 < a < 1 } ]

还指定 > 0 意味着实数,因此您不需要该明确的假设。

编辑,你的问题的第 2 部分是 Reduce 甚至不使用 $Assumptions,所以你需要在 reduce 之后 Simplify[] .. 但是即使那样你仍然没有得到你的答案。考虑这个稍微简化的例子:

$Assumptions = Flatten[{# > 0 & /@ {a, b, c, f, g}, 0 < a < 1}]
res = Reduce[ (-1 + a)  (f + g) >= b c , {a, b, c, f, g}, Reals]  
(* huge output*)
Simplify[res ]
(* b c <= (-1 + a) (f + g) *)

使用提供的假设,这应该很容易证明是 False 。事实上这有效..

Simplify[Reduce[ (-1 + a)  >= b c/(f + g) , {a, b, c, d, e, f, g},   Reals]  ]
(* False *)

建议你在https://mathematica.stackexchange.com/上询问,或者一些版主应该迁移这个..

编辑3 - 我明白了..

$Assumptions =  And @@ Flatten[{# > 0 & /@ {a, b, c, d, e, f, g, h, i, j},
                           0 < a < 1}] ;
Simplify[Reduce[ a (b c - (-1 + a) d (c + f g)) h > (-1 + a) i (b +  a j) g 
          && $Assumptions, {a, b, c, d,e,f, g, h, i, j}, Reals]]

(*True*)
于 2013-06-10T14:56:26.923 回答