x ** 2 -> 2 * x
x ** 3 -> 3 * x ** 2
x ** 4 -> 4 * x ** 3
a ** x -> math.log(a) * a ** x
math.sin(x) -> math.cos(x)
math.cos(x) -> -math.sin(x)
math.tan(x) -> 1 / math.cos(x) ** 2
math.exp(x) -> math.exp(x)
math.log(x) -> 1 / x
math.log10(x) -> 1 / (x * math.log(10))
math.asin(x) -> 1 / math.sqrt(1 - x ** 2)
math.acos(x) -> (-1) / math.sqrt(1 - x ** 2)
math.atan(x) -> 1 / (1 + x ** 2)
math.sqrt(x) -> 1 / (2 * math.sqrt(x))
math.sin(x) ** 2 -> math.cos(x) * 2 * math.sin(x)
math.sin(x ** 2) -> math.cos(x ** 2) * (2 * x)
math.log(math.sin(x)) -> (1 / math.sin(x)) * math.cos(x)
x ** 2 * math.sin(x) -> 2 * x * math.sin(x) + x ** 2 * math.cos(x)
math.sin(x) / x ** 2 -> (math.cos(x) * x ** 2 - math.sin(x) * (2 * x)) / x ** 2 ** 2
3 ** 2 * x -> 2 * math.log(3) * 3 ** 2 * x
math.log((x ** 2 + 1)) -> (1 / (x ** 2 + 1)) * (2 * x)
(x - 1) ** 2 * (x - 2) ** 3 / (x - 5) ** 2 -> ((2 * (x - 1) * (x - 2) ** 3 + (x - 1) ** 2 * (3 * (x - 2) ** 2)) * (x - 5) ** 2 - (x - 1) ** 2 * (x - 2) ** 3 * (2 * (x - 5))) / (x - 5) ** 2 ** 2
math.sin(2 * x - 3) -> math.cos(2 * x - 3) * 2
math.cos(x) ** 2 -> -math.sin(x) * 2 * math.cos(x)
(2 * x - 1) ** 3 -> 6 * (2 * x - 1) ** 2
math.sqrt(x ** 2 + 2 * x + 3) -> (1 / (2 * math.sqrt(x ** 2 + 2 * x + 3))) * (2 * x + 2)
1 / x -> (-1) / x ** 2
math.exp(x) + math.exp(-x) -> math.exp(x) - math.exp(-x)
math.exp(x) - math.exp(-x) -> math.exp(x) + math.exp(-x)
(math.sin(x + 2) + x + 2) * (math.sin(x + 3) + x + 3) -> (math.cos(x + 2) + 1) * (math.sin(x + 3) + x + 3) + (math.sin(x + 2) + x + 2) * (math.cos(x + 3) + 1)
math.sin(math.sin(x ** 2 / 3)) -> math.cos(math.sin(x ** 2 / 3)) * (math.cos(x ** 2 / 3) * ((2 * x * 3) / 9))
