Procedures for integration in: ------------------------------ 1) C[x] intPol := proc(f,x) ... 2) C(x) intRat := proc(f,x) ... 3) C(x)[ln(..)] intPolLog := proc(f,x,theta) where theta=ln(..) intPolLog calls intRat for integration in C(x), or when intRat is not available then it uses int. 4) C(x,ln(..)) intRatLog := proc(f,x,theta). Uses intPolLog/intRat or uses int when those are not available. 5) C(x)[exp(..),1/exp(..)] intLaurentPolExp:=proc(f,x,theta) where theta=exp(..) Uses ratsols from DEtools package. 6) C(x, exp(..)) intRatExp:=proc(f,x,theta). Uses intLaurentPolExp. 7) C(x, ln(x), ln(ln(x)+x^2)) intNestedLog(f,x,theta1,theta2) 8) C(x, exp(x), ln(exp(x)+x)) intNestedExpLog(f,x,..) 9) Write one "intAll" procedure that determines the kind of input, figures out what the theta(s) are (if any) and calls the appropriate procedure. For example, start with something like. if not has(f,exp) and not has(f,log) then RETURN( intRat(f,x) ) fi; Note: You can already start with this procedure even when the other ones are not yet ready (just do intRat:=int and do similar steps for procedures that are not yet written).