Logic in Computer Science: Modelling and Reasoning about Systems