The case of the purely transcendental functions (which do not involve roots of polynomials) is relatively easy and was implemented early in most computer algebra systems.
The case of purely algebraic functions was solved and implemented in Reduce by James H. Davenport [REF].