I am creating this question and posting an answer to it as a help for those who have problems with Mathematica simplification oddities that appear in other questions on the site.
First of all, there were simplification problems like this one:
Simplify[x + y, x + y == a]
(* ==> x + y *)
Simplify[x + y, x + y == z]
(* ==> z *)
We can see that the culprit is the well known variables names problem in Mathematica simplification. One of the answers points out a simplification function developed by Adam Strzebonski that is based on a series of FullSimplify calls with permutations of the symbols names, in hope of achieving the desired result:
VOISimplify[vars_, expr_, assum_: True] := Module[{perm, ee, best},
perm = Permutations[vars];
ee = (FullSimplify @@ ({expr, assum} /. Thread[vars -> #])) & /@ perm;
best = Sort[Transpose[{LeafCount /@ ee, ee, perm}]][[1]];
best[[2]] /. Thread[best[[3]] -> vars]
]
It works:
VOISimplify[{a, x, y}, x + y, x + y == a]
(* ==> a *)
Now, testing FullSimplify and VOISimplify on another simplification problem in this question, we don't have success (the z variable is not canceled):
FullSimplify[(E^(-I x) y z + (1 + E^(I y)) (x + y) z)/z, z != 0]
(* ==> (E^(-I x) y z + (1 + E^(I y)) (x + y) z)/z *)
VOISimplify[{x, y, z}, (E^(-I x) y z + (1 + E^(I y)) (x + y) z)/z, z != 0]
(* ==> (E^(-I x) y z + (1 + E^(I y)) (x + y) z)/z *)
One of the answers to this question was to simply change the variable name from y to a:
FullSimplify[(E^(-I x) y z + (1 + E^(I y)) (x + y) z)/z /. y -> a, z != 0]
(* ==> a E^(-I x) + (1 + E^(I a)) (a + x) *)
We can see that even VOISimplify has a problem. How to deal with this case?
FullSimplify[(E^(-I x) y z + (1 + E^(I y)) (x + y) z)/z, z != 0]
in version 13.1 and there was no z variable $\endgroup$