higher order dependently typed logic programing