In Maxima 5.33.0 with GCL 2.6.10, after loading abs_simplify, the following incorrectly returns cosh(x):
trigsimp(integrate(sqrt(4 - cosh(x)^2),x));
(The integral is returned unevaluated without abs_simplify, and the correct answer involves an elliptic integral.)
As far as I can see, something goes wrong in ratsubst. After adding the following debugging code to trgsmp.mac:
:::diff
--- a/share/trigonometry/trgsmp.mac
+++ b/share/trigonometry/trgsmp.mac
@@ -119,10 +119,15 @@ improve(expn,subsofar,listoftrigsq):=
for alt in first(listoftrigsq) do
subsofar:
improve(subsofar,
- ratsubst(get(inpart(alt,0),'unitcof)
- +get(piece,'complement_cof)
- *get(piece,'complement_function)(first(alt))^2,
- alt^2,subsofar),
+ block([a, b, c, r],
+ a: get(inpart(alt,0),'unitcof)
+ +get(piece,'complement_cof)
+ *get(piece,'complement_function)(first(alt))^2,
+ b: alt^2,
+ c: subsofar,
+ r: ratsubst(a, b, c),
+ print("ratsubst(", a, ",", b, ",", c, ") ->", r),
+ r),
rest(listoftrigsq)),
subsofar)$
one gets (after loading abs_integrate)
(%i11) trigsimp(integrate(sqrt(4 - cosh(x)^2),x));
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sqrt(3 - sinh (x))
2 2 2
ratsubst( sinh (x) + 1 , cosh (x) , sqrt(4 - cosh (x)) ) -> sinh(x)
(%o11) cosh(x)
Note that the 10th call to ratsubst suddenly gives a wrong result (which is then integrated to produce the answer cosh(x) for the original integral).
This was originally reported at http://ask.sagemath.org/question/2577/integrate-with-elliptic-integral-special-function; there is a corresponding ticket in the Sage bug tracker at http://trac.sagemath.org/ticket/14591.
Spent some hours today debugging this.
ratsimpcan trigger this error and lead to the wrong result a bit sooner.trace(ratsubst,trigsimp);will show us that withoutabs_integratewe don't have a call toratsubstcaused byratsimp, but with that package loaded we callratsimpand obtain thesinh(x)result from that. It seems to me as if thevarlistplays a major part in all of this. When comparing a verbatimratsubstcall to the one triggered byratsimp, I find that(newvar c)in the correctly working example puts the full input expression in that list, while the broken version puts only cosh(x) there. That's the earliest difference I could find, at least for today.