How can I make Mathematica do, ArcTanh[x] + ArcTanh[y] = ArcTanh[x+y/1+xy]?

A little bit of trickery:

ArcTanh[x] + ArcTanh[y] // Tanh // TrigExpand // FullSimplify // ArcTanh

   (* ArcTanh[(x + y)/(1 + x y)] *)

Note the parentheses.


Probably, MathematicalFunctionData["ArcTanh"] knows about this.

First let's see what categories of things are known:

MathematicalFunctionData["ArcTanh", "Properties"]

ah well, let's just list them all (this will take a while to download the first time around)

all = DeleteDuplicates@Flatten[MathematicalFunctionData["ArcTanh", #] & /@ 
 MathematicalFunctionData["ArcTanh", "Properties"]];

now let's look whether that fact about ArcTanh[_] + ArcTanh[_] is in there

facts = Cases[all,
  Function[{_, _}, 
   e_ /; Not@FreeQ[e, Inactivate[ArcTanh[_] + ArcTanh[_]]]]
  ];

maybe some of these help. Let's Activate them.

activefacts = Through[facts[x, y]] // Activate  

drop some conditions

activefacts = Assuming[x \[Element] Reals && y \[Element] Reals, FullSimplify@activefacts];

Now

activefacts /. {x -> ..., y -> ...}

should be a list of True, Undefined or Indeterminate == ... for any real x and y.

(However, it seems to break here for exactly one of them being 1, the other not, activefacts /. {x -> 1, y -> 0.9} is {False, Undefined, False})


I think this is a method worth knowing in general.

For example, use

all = MathematicalFunctionData["Sinh", #] & /@ 
   MathematicalFunctionData["Sinh", "Properties"];
all = Flatten@all;
Cases[all,
 Function[{_, _}, e_ /; Not@FreeQ[e, Inactivate@Sinh[_ + _]]]
 ]

to learn everything MathematicalFunctionData knows about $\sinh(x + y)$.


This is just not true for all (x,y):

(ArcTanh[x] + ArcTanh[y] - ArcTanh[x + y/(1 - x y)]) /. x -> 0.23 /.y -> .323

-0.0916564

or

(ArcTanh[x] + ArcTanh[y] - ArcTanh[(x + y)/(1 - x y)]) /.x -> 0.23 /. y -> .323

-0.11988

Solve[ArcTanh[x] + ArcTanh[y] == ArcTanh[x + y/(1 - x)], {x, y}]

{{x -> 0}, {y -> 0}, {y -> -1 - x + x^2}}