:- module(_,_).

% 'Higher-Order' structure inspection examples
% Extending derivative: 

deriv(sin(X), X, cos(X)). 
deriv(cos(X), X, -sin(X)). 
% Chain rule: 
deriv(FG_X,   X, DF_G * DG_X):-
    FG_X =.. [_, G_X],
    deriv(FG_X, G_X, DF_G),
    deriv(G_X, X, DG_X).

% Try:
% ?- deriv(sin(cos(x)),x,D).
