Buck Golemon <buck.2019 <at> gmail.com> writes:
> (%i12) solve(erf(x) = erf(y), x);
>
> (%o12) ? ? ? ? ? ? ? ? ? ? [x = inverse_erf(erf(y))]
>
> Is this a lack of knowlege on maxima's part?
>
> Is this something that should be changed?
> Where would I add a failing unit test?
Well, it seems reasonable that Maxima should know about that.
You can submit a bug report if you like. Luckily it's not
too hard to tell Maxima about it, via tellsimpafter (user-
defined simplification).
(%i1) matchdeclare (xx, lambda ([e], featurep (e, real)));
(%o1) done
(%i2) tellsimpafter (inverse_erf (erf (xx)), xx);
(%o2) [inverse_erfrule1, simp-inverse-erf]
(%i3) matchdeclare (yy, lambda ([e], -1 < e and e < 1));
(%o3) done
(%i4) tellsimpafter (erf (inverse_erf (yy)), yy);
(%o4) [erfrule1, simp-erf]
(%i5) declare ([u, v], real);
(%o5) done
(%i6) solve (erf (u) = erf (v), u);
(%o6) [u = v]
(%i7) solve (inverse_erf (u) = inverse_erf (v), u);
(%o7) [u = erf(inverse_erf(v))]
(%i8) assume (v > -1, v < 1);
(%o8) [v > - 1, v < 1]
(%i9) ''%o7;
(%o9) [u = v]
I wouldn't be surprised if it doesn't always succeed --
e.g. maybe Maxima can't figure out if something is real,
or its value is between -1 and 1, or other stuff like that.
best
Robert Dodier