Foundations of Discrete Mathematics