

/* Standard analytic functions */
2 # Sin(x_IsNumber)_(Numeric) <-- MathSin(x);
4 # Sin(ArcSin(_x))           <-- x;
5 # Sin(- _x)                 <-- -Sin(x);
5 # Sin(x_IsNegativeNumber * _y)   <-- -Sin((-x)*y);
5 # Sin(_y * x_IsNegativeNumber)   <-- -Sin(y*(-x));
110 # Sin(Complex(_r,_i)) <--
    (Exp(I*Complex(r,i)) - Exp(- I*Complex(r,i))) / (I*2) ;

2 # Cos(x_IsNumber)_(Numeric) <-- MathCos(x);
4 # Cos(ArcCos(_x))           <-- x;
5 # Cos(- _x)                 <-- Cos(x);
5 # Cos(x_IsNegativeNumber * _y)   <-- Cos((-x)*y);
5 # Cos(_y * x_IsNegativeNumber)   <-- Cos(y*(-x));
110 # Cos(Complex(_r,_i)) <--
    (Exp(I*Complex(r,i)) + Exp(- I*Complex(r,i))) / (2) ;

2 # Exp(x_IsNumber)_(Numeric) <-- MathExp(x);
4 # Exp(Ln(_x))           <-- x;
110 # Exp(Complex(_r,_i)) <--  Exp(r)*(Cos(i) + I*Sin(i));

2 # Tan(x_IsNumber)_(Numeric) <-- MathTan(x);
4 # Tan(ArcTan(_x))           <-- x;
110 # Tan(Complex(_r,_i))       <-- Sin(Complex(r,i))/Cos(Complex(r,i));


2 # Ln(0)                    <-- Infinity;
3 # Ln(x_IsNumber)_(Numeric) <-- MathLn(x);
4 # Ln(Exp(_x))              <-- x;
3 # Ln(Complex(_r,_i)) <-- Complex( (r^2 + i^2)^(1/2) , ArcTan(  i / r) );

2 # ArcSin(x_IsNumber)_(Numeric) <-- MathArcSin(x);
4 # ArcSin(Sin(_x))           <-- x;
110 # ArcSin(Complex(_r,_i)) <--
    (- I) * Ln((I*Complex(r,i)) + ((1-(Complex(r,i)^2))^(1/2)));


2 # ArcCos(x_IsNumber)_(Numeric) <-- MathArcCos(x);
4 # ArcCos(Cos(_x))           <-- x;
110 # ArcCos(Complex(_r,_i)) <--
    (- I)*Ln(Complex(r,i) + (Complex(r,i)^2 - 1)^(1/2));
   /* TODO check! */

2 # ArcTan(x_IsNumber)_(Numeric) <-- MathArcTan(x);
4 # ArcTan(Tan(_x))           <-- x;
110 # ArcTan(Complex(_r,_i)) <--
     (- I*0.5)*Ln(Complex(1,Complex(r,i))/ Complex(1, - Complex(r,i)));

/* Threading of standard analytic functions */
Sin(x_IsList) <-- MapSingle("Sin",x);
Cos(x_IsList) <-- MapSingle("Cos",x);
Tan(x_IsList) <-- MapSingle("Tan",x);

ArcSin(x_IsList) <-- MapSingle("ArcSin",x);
ArcCos(x_IsList) <-- MapSingle("ArcCos",x);
ArcTan(x_IsList) <-- MapSingle("ArcTan",x);

Exp(x_IsList) <-- MapSingle("Exp",x);
Ln(x_IsList) <-- MapSingle("Ln",x);



