
Begin["System`"]
Unprotect[InverseFunction]

Begin["`Private`"]

Format[InverseFunction[f_]] := SequenceForm[f^"(-1)"]
Format[InverseFunction[f_,1]] := SequenceForm[f^"(-1)"]
Format[InverseFunction[f_,1,1]] := SequenceForm[f^"(-1)"]

InverseFunction[Sin]=ArcSin
InverseFunction[Cos]=ArcCos
InverseFunction[Tan]=ArcTan
InverseFunction[Csc]=ArcCsc
InverseFunction[Sec]=ArcSec
InverseFunction[Cot]=ArcCot
InverseFunction[ArcSin]=Sin
InverseFunction[ArcCos]=Cos
InverseFunction[ArcTan]=Tan
InverseFunction[ArcCsc]=Csc
InverseFunction[ArcSec]=Sec
InverseFunction[ArcCot]=Cot
InverseFunction[Sinh]=ArcSinh
InverseFunction[Cosh]=ArcCosh
InverseFunction[Tanh]=ArcTanh
InverseFunction[Csch]=ArcCsch
InverseFunction[Sech]=ArcSech
InverseFunction[Coth]=ArcCoth
InverseFunction[ArcSinh]=Sinh
InverseFunction[ArcCosh]=Cosh
InverseFunction[ArcTanh]=Tanh
InverseFunction[ArcCsch]=Csch
InverseFunction[ArcSech]=Sech
InverseFunction[ArcCoth]=Coth
InverseFunction[Log]=Exp
InverseFunction[Exp]=Log
InverseFunction[Power,1,2]=(#1^(1/#2))&
InverseFunction[Power,2,2]=Log

InverseFunction[JacobiSN,1,2]=InverseJacobiSN
InverseFunction[JacobiSD,1,2]=InverseJacobiSD
InverseFunction[JacobiSC,1,2]=InverseJacobiSC
InverseFunction[JacobiCS,1,2]=InverseJacobiCS
InverseFunction[JacobiCN,1,2]=InverseJacobiCN
InverseFunction[JacobiCD,1,2]=InverseJacobiCD
InverseFunction[JacobiNS,1,2]=InverseJacobiNS
InverseFunction[JacobiNC,1,2]=InverseJacobiNC
InverseFunction[JacobiDS,1,2]=InverseJacobiDS
InverseFunction[JacobiDC,1,2]=InverseJacobiDC

InverseFunction[Identity]=Identity
f_[InverseFunction[f_][x___]] ^= x
InverseFunction[f_][f_[x___]] := x
f_[InverseFunction[f_,1,1][x___]] ^= x
InverseFunction[f_,1,1][f_[x___]] := x
Literal[InverseFunction[Composition[f___]]] := Composition@@
					(InverseFunction/@Reverse[{f}])

Protect[InverseFunction]

End[]
End[]

Null
