Our EXP functions are made in the following way:
- Any constant $ \in \Bbb R$ is a EXP
- $X \in \Bbb R$ is a EXP
- $sin( g(x))$, $cos( g(x))$ are in EXP if $g(x)$ is a EXP
- $tan( g(x))$ is a EXP if $g(x)$ is a EXP and $g(x) \neq \frac\pi 2 + k\pi, k \in \Bbb Z $
- $sqrt( g(x))$ is a EXP if $g(x)$ is a EXP and $g(x) \gt 0$
- $exp(g(x))$ is a EXP if $g(x)$ is a EXP
- $ln(f(x))$ is a EXP if $f(x)$ is a EXP and $f(x) \gt 0$
- $f(x)+g(x)$ is a EXP if $g(x),f(x)$ are EXP
- $f(x)-g(x)$ is a EXP if $g(x),f(x)$ are EXP
- $f(x)*g(x)$ is a EXP if $g(x),f(x)$ are EXP
- $f(x)/g(x)$ is a EXP if $g(x),f(x)$ are EXP and $g(x) \neq 0$
- if $g(x)$ is a EXP then $g'(x)$ is a EXP (derivative)
What I want to know, is if there's an algorithm that, given $f(x) \in EXP$ can say:
- Yes: iff there exist a $g(x)$ such that $g'(x) = f(x)$ and $g(x) \in EXP$
- No: otherwise
- Always halt
Of course since we have derivates, also the following derivation rules still applies:
- if $f(x) = c$ where $c \in \Bbb R$, then $f'(x) = 0$
- if $f(x) = x$ where $x \in \Bbb R$, then $f'(x) = 1$
- if $f(x) = sin(g(x))$ then $f'(x) = cos(f(x))*g'(x)$
- if $f(x) = cos(g(x))$ then $f'(x) = -sin(f(x))*g'(x)$
- if $f(x) = tan(g(x))$ then $f'(x) = \frac{g'(x)}{cos^2(g(x))}$
- if $f(x) = sqrt(g(x))$ then $f'(x) = (1/2)*pow(g(x), -1/2)*g'(x)$
- if $f(x) = exp(g(x))$ then $f'(x) = exp(g(x))*g'(x)$
- if $f(x) = ln(g(x))$ then $f'(x) = \frac{g'(x)}{g(x)}$
- if $f(x) = g(x)+h(x)$ then $f'(x) = g'(x)+h'(x)$
- if $f(x) = g(x)-h(x)$ then $f'(x) = g'(x)-h'(x)$
- if $f(x) = g(x)*h(x)$ then $f'(x) = g'(x)*h(x) +g(x)*h'(x)$
- if $f(x) = g(x)/h(x)$ then $f'(x) = \frac{g'(x)*h(x) -g(x)*h'(x)}{h(x)^2}$
P.S. I did not repeated that denominator of a fraction should be different by zero because that is already covered by the first set of rules.