A Prolog program transformation system