anchor.diff:      negate (x + y**2) // (-1)*(x + y^2)
   
       Algebraic.separateFactors x (b*cos(x)*ln(d)*x) // (b*ln(d), x*cos(x))
  +    Algebraic.separateFactors x (c*x*sin(x)/2) // ((1/2)*c, x*sin(x))
   
       Calculus.differentiate x (a*x) // a
       Calculus.differentiate x (sin(x)) // cos(x)
  
positive.code: 
          else failwith "only general polynomial expressions supported for now"
  
      // 2+3*x = 0  -->  x = -2/3
      solve x (2+3*x)
  
      // sin(a)+x*cos(b)+c = 0  -->  x = (-1)*(c + sin(a))*cos(b)^(-1)
      solve x (sin(a)+x*cos(b)+c)
  
      // (x^2-1)/(x+1) = 0  -->  x = 1
      solve x ((x**2-1)/(x+1))
  
negative.code: 
      let solve x expr =
  
          let expr' = Rational.rationalSimplify x expr |> Algebraic.expand
  
          if Polynomial.isPolynomial x expr' then
              match Polynomial.coefficients x expr' with
  