2
$\begingroup$

Using Mathematica 10,Simplify[a\[Conjugate], Assumptions -> {(a + a\[Conjugate]) > 0}] returns a, i.e. treats a as real, while it is complex. Perhaps Mathematica carelessly treats everything involved in inequalities as a real number?

By the way, Re should be appropriate here, but it does not work with abstract symbolic expressions, which I discovered the hard way.

$\endgroup$
4
  • $\begingroup$ Simplify[Conjugate[a], Assumptions -> {Abs[(a + Conjugate[a])] > 0}] maybe this is what you wanted? You can't do z > 0 for complex z and expect anything meaningful - use the norm Abs $\endgroup$
    – Histograms
    Jun 8, 2015 at 15:06
  • $\begingroup$ Isn't Re[a] == (a + a\[Conjugate])/2? This does not imply that a>0! $\endgroup$
    – auxsvr
    Jun 8, 2015 at 15:08
  • 1
    $\begingroup$ For any complex number z, the sum z + Conjugate[z] is twice the real part of z, so it makes perfect sense to require that z + Conjugate[z] >0: it just says that the real part of z is positive. $\endgroup$
    – murray
    Jun 8, 2015 at 15:09
  • $\begingroup$ @auxsvr No. a + a\[Conjugate] is 2Re[a] $\endgroup$
    – Histograms
    Jun 8, 2015 at 15:09

1 Answer 1

4
$\begingroup$

I can see your surprise, but Mathematica seems to be behaving as you would expect according to the documentation.

In particular, it may seem careless to you, but it is clearly spelled out in the documentation that any variable involved in an inequality is implicitly considered a real number.

As a reference, see:

  • the Assumptions and Domains page of the documentation, under the entry for Less and Greater in "Reference": "... define inequalities, implicitly for real numbers".
  • the documentation page for Simplify also states that "Quantities that appear algebraically in inequalities are always assumed to be real."

In passing, as you mentioned yourself, using Re to specify your assumption will work as expected:

Simplify[a\[Conjugate], Assumptions -> Re[a] > 0]

(* Out: Conjugate[a] *)

Regarding Re, its documentation also states that "Re[expr] is left unevaluated if expr is not a numeric quantity" (here, under "Details"), so I suspect this to be the reason why you found it not to work. Additionally, the "Properties and Relations" section of that page suggests the use of Re in Assumption statements very similar to yours.


An update:

One can clearly see the assumption that Simplify makes as follows:

Simplify[a \[Element] Reals, Assumptions -> a + a\[Conjugate] > 0]
(* Out: True*)

In order to get around this problem, the assumption can be massaged into a form that does not involve $a$ in an inequality:

Simplify[a\[Conjugate], Assumptions -> FullSimplify[a + a\[Conjugate]] > 0]
(* Out: Conjugate[a] *)

In fact, FullSimplify understands that $a+a^*=2 Re(a)$:

FullSimplify[a + a\[Conjugate]]
(* Out: 2 Re[a] *)

Simplify, on the other hand, does not, so it returns its argument unchanged.

$\endgroup$
2
  • $\begingroup$ Thanks, I should be reading the documentation more often. Wouldn't it be better if Mathematica displayed a warning in this case? My assumptions are valid mathematical expressions and Mathematica treats them in an awkward way. $\endgroup$
    – auxsvr
    Jun 8, 2015 at 17:03
  • $\begingroup$ @auxsvr Honestly, the more I look at it, the more I agree with you that this might not be the way to go after all. Although the current behavior seems described in the documentation, the automatic domain restriction could lead to "interesting" behavior that would be very tricky to track down. $\endgroup$
    – MarcoB
    Jun 8, 2015 at 22:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.