@halirutan @Nasser Your remarks above suggest the WIki page on testing needs to clearly distinguish between
To receive a grade of A, a candidate does not have to equal, or be of the same form, as the optimal antiderivative. Rather it just has to be no more than twice the leafcount size of the optimal, and not involve higher level functions than the optimal. The function levels are ordered as elementary < special < hypergeometric.
For details on grading see Nasser's website. With his permission, perhaps some of the documentation there could be incorporated into the Wiki page on testing, along with my discussion above on verification methods.
@halirutan I think your question
Am I mistaken here when I say that the correct way for e.g. Maple would be to integrate the expression, but import the result back to Mathematica to make the advanced comparison?
refers to validity testing rather than quality grading. Assuming so, it could be argued that validity testing should include the ability of a CAS to differentiate its own antiderivatives back to the integrand.
Also there is a Tower of Babel problem since Maple and Mathematica define some functions (e.g. the elliptic integral functions) differently. So differentiating a Maple antiderivative in Mathematica would not equal the integrand; however differentiating the Maple antiderivative in Maple would equal the integrand.
@nasser1 You wrote
How could candidate and optimal difference not be free of integration variable, yet difference differentiates to zero? ... Could you please give an example of the above case? Thanks
Here's an example: For the optimal antiderivative of 1/(1+x^2) the test suite gives ArcTan[x]. However, some CAS might give - ArcCot[x] which is also a perfectly valid antiderivative, as differentiation shows. The difference of these two antiderivatives is ArcTan[x]+ArcCot[x] which is not free of x; however, it differentiates to 0. As plotting ArcTan[x]+ArcCot[x] shows, it is not a constant; however, it is a piecewise constant; so its derivative equals 0 and therefore -ArcCot[x] is a valid antiderivative of 1/(1+x^2).
@halirutan You wrote on June 24th:
The "Home" page needs a bit more content, but I would like to announce everything this week, as I'm on vacation a week later.
Simultaneously with your announcement, I would like to announce the availability of Rubi on GitHub on sci.math.symbolic, email several power users of Rubi about it, and provide a link to the GitHub site on Rubi's current homepage. Therefore, please let me know before you announce, and what user groups you plan to send it to. Also, I would appreciate your sending me a copy of the text so we can coordinate our descriptions of GitHub Rubi, including its proper name.
i
that is increased with each code cell that I write to the .m files. At the moment of processing, I know which notebook I'm processing and which code-cell I'm processing and I have the global counter i
. It is very easy to have a mapping function
reference[i_] := {notebook, codecell}
i
in the definition of the current rule without breaking anything. But let's assume we have this solved, then I can extract i
from each rule and with the help of reference
I know instantly where it is defined. I know the exact cell inside the notebook.
Steps[Int[expr, var]]
a button, that automatically opens the right notebook and cell where this rule is defined.
Get
all comments are ignored and you can never access them again.
@halirutan Forget assuming anything about DownValues. I propose:
Obviously this is a long term project, I am not suggesting you do now.