Logic for Computer Science: Foundations of Automatic Theorem Proving, Second Edition