ProMiX: a Prolog partial evaluation system