simplifing inverse functions

*To*: mathgroup at christensen.cybernetics.net*Subject*: simplifing inverse functions*From*: Jack Goldberg <Jack.Goldberg at math.lsa.umich.edu>*Date*: Wed, 19 Oct 1994 12:26:20 -0400 (EDT)

I was stimulated by my previous note to see if I could generalized PowerExpand to cover cases such as ArcCos[Cos[x]]. I have come up with a modest first step which I offer specifically to see how much better others might do. Here is my function: simplifyInverse[expr_,f_] := Module[ {inv}, inv = InverseFunction[f]; expr //. inv[f[x_]] -> x ] This command does work fairly well. For example it will simplify 1+1/(1+ArcCos[Cos[x^2]]) to 1+1/(1+x^2) It works with ArcTrig[Trig[x]] where Trig is Tan,Cos,Sin. (I have not tested it with other trig functions yet.) It works with Log (as does PowerExpand). It also works for user defined functions, at least as far as I could check. However: (1) It does not simplify Sqrt[x^2] and seems to fail for all cases x^(1/integer). Since I am somewhat of a beginner with programming Mma, I am having a good deal of trouble figuring out what went wrong. I might add that if I define square[x_] := x^2 and newroot[x_] := InverseFunction[square[x]] it does work! (2) Ideally, f_ should not be an argument to this function. I can imagine a module which would search expr until if finds f[g]; tests whether g[f[x] = x and if so, replaces f[g[x]] with x. I have no idea how to do this. (3) It does seem that such an extension to PowerExpand is useful, and I believe important. Does anyone agree?