Introduction To Discrete Mathematics For Software Engineering by Tim Denvir