What are the mathematical foundations of computer science? How does mathematical formalism relate to the pragmatics of computer science? In this course, we study *discrete mathematics*, broadly the branches of mathematics that study discrete objects, and their applications towards computer science.

By understanding discrete mathematics deeply, we, in turn, gain an understanding of how mathematics informs our studies as computer scientists, namely:

- We solve problems in computer science by modeling domains of problems, a process that is, at its core, mathematical.
- The interpretation of the syntax and semantics of mathematics is identical to the interpretation of a programming language, so we can leverage our understanding of programming to rapidly learn mathematics.
- There exists a spectrum of reasoning between absolute mathematical formalism and informal reasoning, a spectrum that must be able to move across at will as competent programmers.

Finally, by studying discrete mathematics in depth and relating it to our experiences as computer programmers, we also gain expertise in comfort in the study of mathematics itself as a discipline of modeling and problem solving.