Discrete Mathematics for Computer Science: An Example-Based Introduction