>For me the hardest part of calc 1 was learning all the trigonometric and hyperbolic derivatives, including the inverse of each.
It's just a few lines of code.
diff(X,X,1):-!.
diff(-A,B,X):-!,diff(A,B,-X),!.
diff(A,-B,X):-!,diff(A,B,-X),!.
diff(X,sin(X),cos(X)):-!.
diff(X,cos(X),-sin(X)):-!.
diff(X,sinh(X),cosh(X)):-!.
diff(X,cosh(X),sinh(X)):-!.
diff(X,sin(U),cos(U)*DU):-!,diff(X,U,DU),!.
diff(X,cos(U),-sin(U)*DU):-!,diff(X,U,DU),!.
diff(X,sinh(U),cosh(U)*DU):-!,diff(X,U,DU),!.
diff(X,cosh(U),sinh(U)*DU):-!,diff(X,U,DU),!.
diff(X,tan(U),sec(U)*sec(U)*DU):-!,diff(X,U,DU),!.
diff(X,cot(U),-csc(U)*csc(U)*DU):-!,diff(X,U,DU),!.
diff(X,tanh(U),sech(U)*sech(U)*DU):-!,diff(X,U,DU),!.
diff(X,coth(U),csch(U)*csch(U)*DU):-!,diff(X,U,DU),!.
diff(X,asin(U),DU/sqrt(1-u*u)):-!,diff(X,U,DU),!.
diff(X,acos(U),-DU/sqrt(1-u*u)):-!,diff(X,U,DU),!.
diff(X,atan(U),DU/sqrt(1+u*u)):-!,diff(X,U,DU),!.
diff(X,sqrt(U),DU/(2*sqrt(u))):-!,diff(X,U,DU),!.
diff(X,exp(U),DU*exp(U)):-!,diff(X,U,DU),!.
diff(X,U+V,DU+DV):-!,diff(X,V,DV),diff(X,U,DU),!.
diff(X,U-V,DU-DV):-!,diff(X,V,DV),diff(X,U,DU),!.
diff(X,U*V,DU*V+U*DV):-!,diff(X,V,DV),diff(X,U,DU),!.
diff(X,U/V,(DU*V-U*DV)/(V*V)):-!,diff(X,V,DV),diff(X,U,DU),!.
diff(X,ln(U),DU/U):-!,diff(X,U,DU),!.
diff(X,-U,-DU):-!,diff(X,U,DU),!.
diff(X,U+V,DV+DU):-!,diff(X,V,DV),diff(X,U,DU),!.
diff(X,U*V,DV*U+V*DU):-!,diff(X,V,DV),diff(X,U,DU),!.
diff(X,sin(U),DU*cos(U)):-!,diff(X,U,DU),!.
diff(X,cos(U),-DU*sin(U)):-!,diff(X,U,DU),!.
diff(_,_,0).