simplify inverse_erf(erf(x))



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