|   | 1 |  initial version  | 
Let us take as a comparison the results for some sample limits.
Sage shows for limit(sin(1/x), x=0) an indefinite (but bounded) result.  
For limit(1/sin(1/x), x=0) we get indeed und.
For the given limit computation of $1/x$ for $x\to 0$ we may compare:
sage: limit(1/x, x=0)
Infinity
sage: limit(1/x, x=0, dir=None)    # default value for dir
Infinity
sage: limit(1/x, x=0, dir='+')
+Infinity
sage: limit(1/x, x=0, dir='-')
-Infinity
sage: limit(1/x, x=0, dir='-', algorithm='maxima')
-Infinity
sage: limit(1/x, x=0, dir='+', algorithm='maxima')
+Infinity
sage: limit(1/x, x=0, algorithm='maxima')
Infinity
sage: limit(1/x, x=0, algorithm='fricas')
und
sage: limit(1/x, x=0, dir='+', algorithm='fricas')
+Infinity
sage: limit(1/x, x=0, dir='-', algorithm='fricas')
-Infinity
sage: limit(1/x, x=0, algorithm='sympy')
+Infinity
sage: limit(1/x, x=0, dir='+', algorithm='sympy')
+Infinity
sage: limit(1/x, x=0, dir='-', algorithm='sympy')
-Infinity
The differences are minimal, but they are there. First of all, fricas delivers (through sage) the wanted value und.
Then sage delivers three "differently printed" results, Infinity, +Infinity, and -Infinity for the direction respectively None (default), from the right (positive side), and from the left (negative side). For a closer look, let us compare:
sage: L  = limit(1/x, x=0)
sage: L1 = limit(1/x, x=0, dir='+')
sage: L2 = limit(1/x, x=0, dir='-')
sage: bool(L == L1)
False
sage: bool(L == L2)
False
sage: bool(L1 == L2)
False
sage: sign(L1)
1
sage: sign(L2)
-1
sage: sign(L)
sgn(Infinity)
sage: L == Infinity
Infinity == +Infinity
sage: bool(L == Infinity)
False
unsigned_infinity
sage: L == unsigned_infinity
Infinity == Infinity
sage: bool(L == unsigned_infinity)
True
sage: L.is_positive()
False
sage: L.is_positive_infinity()
False
sage: L.is_infinity()
True
sage: L1.is_positive()
True
sage: L1.is_positive_infinity()
True
sage: L1.is_infinity()
True
sage: L2.is_negative()
True
sage: L2.is_negative_infinity()
True
So we have three different "limits", L, L1, and L2.
For the second limit we have a similar situation:
sage: limit(tan(x), x = pi/2)
Infinity
sage: limit(tan(x), x = pi/2, dir='-')
+Infinity
sage: limit(tan(x), x = pi/2, dir='+')
-Infinity
For the simplification, we have for instance:
sage: arcsinh(sinh(0))
0
sage: arcsinh(sinh(2*pi*i))
0
So there is some reason for keeping things as they are. (One may assume $x$ to be real, and then the story begins, somebody has to implement this simplification.)
For the final simplification we maybe also need an implementer.
 Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.
 
                
                Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.