ASKSAGE: Sage Q&A Forum - RSS feedhttps://ask.sagemath.org/questions/Q&A Forum for SageenCopyright Sage, 2010. Some rights reserved under creative commons license.Thu, 13 Aug 2020 18:13:05 +0200Assumption seems to break integrate(); is this a bug?https://ask.sagemath.org/question/52382/assumption-seems-to-break-integrate-is-this-a-bug/Consider the following Sage code (tested using Sage 8.6):
var('t')
var('a')
t.integrate(t, 0, a) # \int_{0}^{a} t dt
Output (as expected):
t
a
1/2*a^2
Next:
t.integrate(t, 0, 4*a - a^2) # 4*a - a^2 could be positive, negative, non-real(?)
Output (again, no problem):
1/2*a^4 - 4*a^3 + 8*a^2
Now suppose we give Sage a little more information. The following assumptions should guarantee that we're integrating over a real interval, and that the second (or "top") endpoint is strictly greater than the first ("bottom") endpoint. (Though as we have seen, Sage does not really need this information.)
assume(a, 'real')
assume(a > 1)
assume(a < 3) # now 0 < a < 4, so 4*a - a^2 > 0
t.integrate(t, 0, 4*a - a^2) # hangs, eventually produces RuntimeError
So, `.integrate()` succeeds when nothing is known about the endpoint, but then fails when given more information.
**My Question: Is this desired/expected behavior, or would it be considered a bug?**
Personally, I found it surprising: I expected that, if a command worked with no assumptions, then it should still work after adding assumptions (consistent assumptions that only narrow the scope of the problem).
*What follows is purely my own speculation; feel free to ignore.*
I also get a similar kind of problem if I do the following:
forget()
var('t'); var('a');
assume(a, 'real')
assume(a > 1)
assume(a < 3)
bool(4*a - a^2 > 0) # hangs, RuntimeError
It seems to me that $1 < a < 3$ implies $0 < a < 4$, which implies that $-a^2 + 4a > 0$. (The graph of the quadratic is a downward-opening parabola, with roots at $0$ and $4$.) I am not surprised that Sage has trouble constructing this argument, so I am not surprised that the `bool()` command hangs. But unfortunately this also seems to break `.integrate()`, which was working otherwise.
So, I speculate that maybe the `.integrate()` method, when faced with an integral whose endpoints are known to be real, first tries to figure out which endpoint is greater? But sometimes this process hangs, so the `.integrate()` process never terminates?
In our case, I think Sage assumes by default that `a` is complex-valued(?), and then it has no problem with the integral. So it seems like it should still work when `a` is in the real interval $(1, 3)$, which after all is a subset of $\mathbb{C}$.
By the way, the following works just fine:
forget()
var('t'); var('a');
assume(4*a - a^2 > 0)
print(bool(4*a - a^2 > 0))
t.integrate(t, 0, 4*a - a^2)
Or, this also works:
t.integrate(t, 0, 2*a - a^2, algorithm='sympy')
Asked also at [Math Stackexchange](https://math.stackexchange.com/questions/3739105/assumption-seems-to-break-sages-integrate-function-is-this-a-bug), but did not receive an answer there. Apologies if this kind of cross-posting is frowned upon.mathmandanThu, 09 Jul 2020 03:26:26 +0200https://ask.sagemath.org/question/52382/Stack overflow during symbolic manipulationshttps://ask.sagemath.org/question/52986/stack-overflow-during-symbolic-manipulations/I'm trying to evaluate this cursed integral (finite for $ 0 < a < 1 $):
$$\int_0^1 \frac{x}{\log{\left(ax+(1-x)^2\right)}}{\rm d}x$$
using Sagemath 9.0 and 9.1:
sage: a = var('a')
sage: assume(a>0)
sage: assume(a<1)
sage: f = integrate(x*log(1/(a*x+(1-x)^2)), x, 0, 1)
leads to
RuntimeError: ECL says: C-STACK overflow at size 1048576. Stack can probably be resized. Proceed with caution.
Sympy gives a result even without the assumptions (which is odd by itself):
sage: f = integrate(x*log(1/(a*x+(1-x)*(1-x))), x, 0, 1, algorithm='sympy')
$$\frac{1}{4} \{\left(a^{2} + \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 2\right)} \log\left(\frac{a^{2} + \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 4}{2 {\left(a - 2\right)}} + 1\right) - \frac{1}{4} {\left(a^{2} + \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 2\right)} \log\left(\frac{a^{2} + \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 4}{2 {\left(a - 2\right)}}\right) + \frac{1}{4} \{\left(a^{2} - \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 2\right)} \log\left(\frac{a^{2} - \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 4}{2 {\left(a - 2\right)}} + 1\right) - \frac{1}{4} {\left(a^{2} - \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 2\right)} \log\left(\frac{a^{2} - \sqrt{{\left(a - 4\right)} a} {\left(a - 2\right)} - 4 a + 4}{2 {\left(a - 2\right)}}\right) - \frac{1}{2} a + \frac{1}{2} \log\left(\frac{1}{a}\right) + \frac{3}{2}$$
But then problems continue:
sage: f.simplify_full()
RuntimeError: ECL says: C-STACK overflow at size 1048576. Stack can probably be resized. Proceed with caution.
But:
sage: f.expand().simplify_full()
$$
-\frac{1}{2} {\left(2 \pi - {\left(\pi - \arctan\left(\frac{\sqrt{-a + 4}}{\sqrt{a}}\right) + \arctan\left(\frac{\sqrt{a} \sqrt{-a + 4}}{a - 2}\right)\right)} a - 2 \arctan\left(\frac{\sqrt{-a + 4}}{\sqrt{a}}\right) + 2 \arctan\left(\frac{\sqrt{a} \sqrt{-a + 4}}{a - 2}\right)\right)} \sqrt{a} \sqrt{-a + 4} + \frac{1}{4} {\left(a^{2} - 4 a\right)} \log\left(a\right) - \frac{1}{2} a + \frac{3}{2}
$$
If I want to find the limit when $a\to 0$:
sage: f.limit(a=0)
RuntimeError: ECL says: C-STACK overflow at size 1048576. Stack can probably be resized. Proceed with caution.
and once again
sage: f.limit(a=0, algorithm="sympy")
$$-i \pi + \frac{3}{2}$$
Which is only true for $a<0$.
I previously found [this strange bug](https://ask.sagemath.org/question/48058/stack-overflow-in-boolean-test/) a while ago (fixed upstream, still present in Sagemath 9.1), this makes me think the assumption `assume(a>0)` is the root of it all, unfortunately it cannot be skipped to evaluate the integral properly.
Do you know when the updated version of Maxima will be included with Sagemath?
Do you think all these issues are linked to this old ticket or should it be investigated independently?
Florentin JaffredoThu, 13 Aug 2020 18:13:05 +0200https://ask.sagemath.org/question/52986/