Reduce and FullSimplify are being lazy

The following is a curiosity I just observed. Consider the following Reduce command:

Reduce[
Exp[r + I f] == Exp[R + I F]
&& Exp[r - I f] == Exp[R - I F]
&& r > 0 && R > 0 && 0 < f < 2 \[Pi] && 0 < F < 2 \[Pi]
, {r, f}] // FullSimplify


0 < F < 2 \[Pi] && R > 0 && r == R && f == F + I (r - R)

In the above, even though r==R is clearly stated in the result, f is still given in terms of

f == F + I (r - R)

instead of just f == F. And that despite FullSimplify having been applied.

In this trivial case this is of course not a huge issue. However, does this mean that we should in general expect Reduce with FullSimplify to overlook obvious simplifications in more complicated systems as well, so that a seemingly complicated output likely might still be hugely reducible?

By the way, I am on Windows 10 and

$VersionNumber  11.1 1 Answer Use Assuming and the Backsubstitution option for Reduce $Version

(* "11.3.0 for Mac OS X x86 (64-bit) (March 7, 2018)" *)

constraints = r > 0 && R > 0 && 0 < f < 2 π && 0 < F < 2 π;

Assuming[constraints,
Reduce[Exp[r + I f] == Exp[R + I F] && Exp[r - I f] == Exp[R - I F] &&
constraints, {r, f}, Backsubstitution -> True] // FullSimplify]

(* r == R && f == F *)


Or,

Reduce[Exp[r + I f] == Exp[R + I F] && Exp[r - I f] == Exp[R - I F] &&
constraints, {r, f}, Backsubstitution -> True] //
FullSimplify[#, constraints] &

(* r == R && f == F *)

• +1 Wow that looks handy, cool! – Mehrdad May 25 '18 at 6:01