Logic Programming And Automated Reasoning by Frank Pfenning