Mathematica's pattern replacement is relatively brute force. Some call that "structural pattern matching" which means that if the expression that you want to replace is even slightly different in any small or large way from the pattern you show, no matter how obvious it is to you that the expression is equivalent to what you want to replace, then it will not match and it won't replace anything.
Here is a strategy that I use which seems more often successful. Use InputForm or sometimes even FullForm on the expression to see all the details. For example this:
Solve[\[Sigma]^3+3 r \[Sigma]+s==0,\[Sigma]]//InputForm
shows me this
{{\[Sigma] -> -((2^(1/3)*r)/(-s + Sqrt[4*r^3 + s^2])^(1/3)) +
(-s + Sqrt[4*r^3 + s^2])^(1/3)/2^(1/3)},
{\[Sigma] -> ((1 + I*Sqrt[3])*r)/(2^(2/3)*(-s + Sqrt[4*r^3 + s^2])^(1/3)) -
((1 - I*Sqrt[3])*(-s + Sqrt[4*r^3 + s^2])^(1/3))/(2*2^(1/3))},
{\[Sigma] -> ((1 - I*Sqrt[3])*r)/(2^(2/3)*(-s + Sqrt[4*r^3 + s^2])^(1/3)) -
((1 + I*Sqrt[3])*(-s + Sqrt[4*r^3 + s^2])^(1/3))/(2*2^(1/3))}}
and when I look in that for literally exactly 1/2*(s - Sqrt[s^2 + 4 r^3]) to replace with Jminus I don't see it.
But I do see (-s + Sqrt[4*r^3 + s^2])^(1/3)/2^(1/3) in there and if I do a bit of algebraic manipulation in my head I think I imagine that might be (-Jminus)^(1/3) in your notation. So I scrape-n-paste the literal pattern from the InputForm or FullForm that I want to match into the replacement process and then this
Solve[\[Sigma]^3+3 r \[Sigma]+s==0,\[Sigma]]/.(-s+Sqrt[4*r^3+s^2])^(1/3)/2^(1/3)->(-Jminus)^(1/3)
shows me this
{{\[Sigma] -> (-Jminus)^(1/3) - (2^(1/3)*r)/(-s + Sqrt[4*r^3 + s^2])^(1/3)},
{\[Sigma] -> -((1 - I*Sqrt[3])*(-Jminus)^(1/3))/2 + ((1 + I*Sqrt[3])*r)/
(2^(2/3)*(-s + Sqrt[4*r^3 + s^2])^(1/3))},
{\[Sigma] -> -((1 + I*Sqrt[3])*(-Jminus)^(1/3))/2 + ((1 - I*Sqrt[3])*r)/
(2^(2/3)*(-s + Sqrt[4*r^3 + s^2])^(1/3))}}
which did make three substitutions in the result.
Notice that there are still three (2^(1/3)*r)/(-s + Sqrt[4*r^3 + s^2])^(1/3) in that result which were not replaced. That is because they were in a slightly different form than the replacement pattern I used and thus they were ignored.
See if you can use this technique to successfully make the two substitutions that you desire in your result.
TransformationFunctionsis so insufficient only one example involvingReduce. What role does theAutomaticplay inTransformationFunctions? – Enter Jun 11 '19 at 03:54TransformationFunctionswe must use pure functions to specify all the parts that need to be substituted, likeFunction[X, X /.replacement]whose body is a replacement rule? – Enter Jun 11 '19 at 04:07TransformationFunctionsis very sparse.Automaticmeans to include the built-in transformations as well. The additional functions are, as you say, pure functions that do something with the expression. – Roman Jun 11 '19 at 11:15