PREDICATES symb_diff(EXP,STRING,EXP); CLAUSES /* CLAUSES FOR DIFFERENTIATION */ symb_diff(num(_),_,num(0)). symb_diff(var(X),X,num(1)):-!. symb_diff(var(_),_,num(0)). symb_diff(uminus(U),X,uminus(U1)) :- symb_diff(U,X,U1). symb_diff(plus(U,V),X,plus(U1,V1)):- symb_diff(U,X,U1), symb_diff(V,X,V1). symb_diff(minus(U,V),X,minus(U1,V1)):- symb_diff(U,X,U1), symb_diff(V,X,V1). symb_diff(mult(U,V),X,plus(mult(U1,V),mult(U,V1))):- symb_diff(U,X,U1), symb_diff(V,X,V1). symb_diff(div(U,V),X,div(minus(mult(U1,V),mult(U,V1)),mult(V,V))):- symb_diff(U,X,U1), symb_diff(V,X,V1). symb_diff(ln(U),X,mult(div(num(1),U),U1)):-symb_diff(U,X,U1). symb_diff(potens(E1,num(I)),X,mult(mult(num(I),potens(E1,num(I1))),EXP)):-! I1=I-1, symb_diff(E1,X,EXP). symb_diff( potens(var("e"),U) ,X, mult(U1,potens(var("e"),U)) ):-! symb_diff(U,X,U1). symb_diff( potens(U1,U2) ,X, U ):- symb_diff( potens( var("e"),mult(ln(U1),U2) ), X, U ). symb_diff(sin(U),X,mult(cos(U),U1)) :- symb_diff(U,X,U1). symb_diff(cos(U),X,minus(num(0),mult(sin(U),U1))) :- symb_diff(U,X,U1). symb_diff(tan(U),X,mult(potens(sec(U),num(2)),U1)) :- symb_diff(U,X,U1).