I think I have found a way to implement the simplification of
infinities, which will work well with the testsuite.
At this time I have implemented some general rules for the operators
"+", "*", and "^" to simplify expressions with infinities.
These are some of the implemented rules for inf and infinity:
0*inf = und
x*inf = infinity
a*inf = inf for a>0
b*inf = minf for b<0
inf/inf = und
inf + inf = inf
inf-inf = und
inf^0 = und
1^inf = und
0*infinity = und
x*infinity = infinity
infinity/infinity = und
infinity+infinity = und
infinity-infinity = und
infinity^0 = und
1^infinity = und
infinity^inf = infinity
inf*infinity = infinity
At first what we will get for the examples of the bug reports Bug ID:
820188 "Simplifying inf and minf" and Bug ID: 1562671 "Handling of
infinities":
(%i1) inf-inf;
(%o1) und
(%i2) -inf;
(%o2) minf
(%i3) -minf;
(%o3) inf
(%i4) inf/inf;
(%o4) und
(%i5) inf*0;
(%o5) und
(%i6) inf*inf;
(%o6) inf
(%i7) inf+inf;
(%o7) inf
(%i8) 4*inf;
(%o8) inf
(%i9) -inf;
(%o9) minf
(%i10) -minf;
(%o10) inf
(%i11) inf+minf;
(%o11) und
All examples of the bug reports work as expected.
The following three examples of the testsuite will give the expected
results:
********************** Problem 135 ***************
Input:
is(compare(inf, - minf) = =)
Result:
true
... Which was correct, but was expected to be
wrong due to a known bug in Maxima.
********************** Problem 136 ***************
Input:
is(compare(inf, 7 + inf) = =)
Result:
true
... Which was correct, but was expected to be
wrong due to a known bug in Maxima.
********************** Problem 123 ***************
Input:
1
taylor(--, x, - inf, 2)
2
x
Result:
1 2
(- -) + . . .
x
... Which was correct, but was expected to be
wrong due to a known bug in Maxima.
The following example simplifies to a correct value:
********************** Problem 257 ***************
Input:
- 1 inf
limit(1 - (---) )
2
Result:
1
This differed from the expected result:
inf
(- 1)
1 - --------
inf
2
There is one problem in the testsuite. I have to look again at the
simplification of the power function:
********************** Problem 195 ***************
Input:
is(notequal(exp(minf), 0))
Result:
sign: sign of und is undefined.
error-catch
This differed from the expected result:
false
There is one change which causes problems with the fresnel functions. We
have implemented the specific values for some directed infinities like %
i*inf. This no longer works, because %i*inf simplifies immediately to
infinity.
There is one big problem with the code of simplify_sum. It no longer
works. This is the example from the documentation:
(%i1) load("simplify_sum")$
(%i9) 'sum(binom(n+k,k)/2^k,k,0,n)+'sum(binom(2*n,2*k),k,0,n);
(%o9) 'sum(binom(n+k,k)/2^k,k,0,n)+'sum(binom(2*n,2*k),k,0,n)
(%i10) simplify_sum(%);
(%o10) 'sum(binom(n+k,k)/2^k,k,0,n)+'sum(binom(2*n,2*k),k,0,n)
Most example of the file rtest_simplify_sum will generated an error,
that the sign of 'und is not defined. The code of the function
simplify_sum seems to expected unsimplified sums of infinities like
"minf+inf".
Dieter Kaiser