The following function performs the transformation I've suggested in the comments:
Options[PMReduce] = {"SynchronizePM" -> False};
PMReduce[eqns_, vars_, dom_: Complexes, OptionsPattern[]] := Module[
{
pEqns,
params,
i = 0,
step = Boole[! OptionValue@"SynchronizePM"]
}, {pEqns, params} = Reap[
Flatten@{eqns} //. {
(a_ ± b_) :> (a + Sow[C[i += step]] b),
(a_ ∓ b_) :> (a - Sow[C[i += step]] b)
}
];
Reduce[
Append[
pEqns,
And @@ (# == 1 || # == -1 & /@ First@params)
],
vars,
dom
]
]
The "SynchronizePM" option controls whether the ± should be changed synchronously (i.e. a±b±c to a+b+c||a-b-c)
Examples:
PMReduce[Abs[x ± 2] ± 3 == 0, x, Reals]
(* (C[1] == -1 && C[2] == -1 && x == -1)
|| (C[1] == -1 && C[2] == -1 && x == 5)
|| (C[1] == -1 && C[2] == 1 && x == -5)
|| (C[1] == -1 && C[2] == 1 && x == 1) *)
PMReduce[Abs[x ± 2] ± 3 == 0, x, Reals, "SynchronizePM" -> True]
(* (C[0] == -1 && x == -1)
|| (C[0] == -1 && x == 5) *)
Solve[x \[PlusMinus] 2 + Exp[ \[PlusMinus] 2] == 0, x]denote two cases, four cases, or simply be disallowed? – Michael E2 Jul 02 '18 at 17:42
– kjosborne Jul 02 '18 at 18:23Solve[2 - Abs[x] == 0, x, Reals]gives{{x -> -2}, {x -> 2}}.Solve[Abs[x \[PlusMinus] 2] \[PlusMinus] 3 == 0, x]. – David G. Stork Jul 02 '18 at 18:38LogicalExpand@Reduce[{Abs[x + f 2] + f2 3 == 0, Abs@f == 1, Abs@f2 == 1, (f | f2) \[Element] Reals}, x]? - Essentially this replacesa ± bwitha + f b && (f==1 || f==-1)– Lukas Lang Jul 02 '18 at 19:40Im[x](fixed withx \[Element] Reals). Better would be a "wrapper" function that did the analysis automatically... but even there, it is a bit kludgy. – David G. Stork Jul 02 '18 at 19:44Plotto plot all combinations of signs, the functions need to be in aList; butSolve[{eqplus, eqminus} == 0,...]andSolve[{eqplus == 0, eqminus == 0},...]implicitly join the equations withAndand notOr. So the built-in syntax ofPlotvs.Solve/Reduceleads to some incompatibility that needs to be overcome. – Michael E2 Jul 03 '18 at 17:12