:- object(log(_),
	implements(symdiffp)).


	:- info([
		authors is 'Paulo Moura',
		version is 1.0,
		date is 1999/12/29,
		parnames is ['Expression'],
		comment is 'Symbolic differentiation and simplification of log/1 expressions.',
		source is 'Example based on the Clocksin and Mellish Prolog book.']).


	diff(Diff) :-
		this(log(X)),
		once(diff(X, Diff)).


	diff(I, 0) :-
		integer(I).

	diff(X, DX * X ** -1) :-
		X::diff(DX).


	simplify(S) :-
		this(log(X)),
		once(simplify(X, S)).


	simplify(1, 0).

	simplify(I, Log) :-
		integer(I),
		Log is log(I).

	simplify(X, X).


:- end_object.