How can I teach Mathematica a specific f[x]==g[x]?

Specifically, I know that JacobiCN[EllipticF[I x, 2], 2]==Cosh[x] for complex x (e.g., check with series expansion in x about x=0), but FullSimplify will neither confirm the identity nor simplify the left side to the right side.

How can I "teach" MMA to simplify the above to Cosh[x]? There are a number of other Jacobi Elliptic function identities that I would like to "teach" MMA in order to make life easy.

CLARIFICATION: I would like the following to yield Cosh[x]

FullSimplify[JacobiCN[EllipticF[I x], 2], 2]


I would like it to do so for any argument, not just x, since I don't know in advance what the argument will be. For example,

FullSimplify[JacobiCN[EllipticF[I y], 2], 2]==Cosh[y]

FullSimplify[JacobiCN[EllipticF[I Sin[a]^b, 2], 2]==Cosh[Sin[a]^b]


should both yield True. x,y,a,b, etc. are generally complex numbers.

• It would be useful you post the code you have tried. In a hurry, I would use in FullSimplify the option Assumptions->JacobiCN[EllipticF[I x, 2], 2]==Cosh[x] or in your expression to be simplified the rule /. JacobiCN[EllipticF[I x, 2], 2]->Cosh[x] – José Antonio Díaz Navas Dec 14 '17 at 18:20

you may want to play with TransformationFunctions

Clear[t]
t[JacobiCN[EllipticF[I x_, 2], 2]] := Cosh[x]
FullSimplify[JacobiCN[EllipticF[I y, 2], 2],
TransformationFunctions -> {Automatic, t}]


Cosh[y]

FullSimplify[JacobiCN[EllipticF[I Sin[a]^b, 2], 2],
TransformationFunctions -> {Automatic, t}]


Cosh[Sin[a]^b]

note it seems you could do this as well (cleaner):

t[JacobiCN[EllipticF[x_, 2], 2]] := Cosh[-I x]


you should verify correctness though.

For instance:

JacobiCN[EllipticF[I Sin[a x + Sqrt], 2], 2] /.
JacobiCN[EllipticF[I x_, 2], 2] ->  Cosh[x]


which returns

Cosh[Sin[Sqrt + a x]]


However, I am puzzled as MMA does not recognised the equality between the terms you are trying to make equal:

JacobiCN[EllipticF[I y, 2], 2] === Cosh[y]

(* False *)


If so, maybe this could be the reason why FullSimplify does not work.

• There's some serious whackiness here: xne = FindInstance[JacobiCN[EllipticF[I x, 2], 2] != Cosh[x], x][] (* {x -> 899/10 + (578 I)/5} *) But, in fact, they agree to 50 places: N[Cosh[x] /. xne, 50] (* -4.4321692141504986119689214681396443885366308222468*10^38 + 3.2925662127511753354382365101127987767774575518821*10^38 I *) N[JacobiCN[EllipticF[I x, 2], 2] /. xne, 50] (* -4.4321692141504986119689214681396443885366308222468*10^38 + 3.2925662127511753354382365101127987767774575518821*10^38 I *) – John Doty Dec 14 '17 at 20:00
• Notably, machine precision introduces an error of approximately $10^{38}$ in the absolute value of the difference, so it might be that the comparison operators are being careless with error management when converting to real numbers to determine < and ==. Perhaps a bug? Using that x value, and calling LHS-RHS v, Re[v]<0 and Im[v]>0, according to Mathematica. – eyorble Dec 14 '17 at 21:37
• I'm not sure this is relevant, but when JacobiXX[u,m] should return a real result, it returns that real plus a very small (choppable) imaginary part, so Chop[JacobiXX[u,m]] is the more accurate estimate of XX[u,m]. – Paul R. Dec 19 '17 at 15:28