higher-order logic katholieke universiteit leuven logic programming memoization new university of lisbon open source programming language prolog uppsala university