Course Description: This course introduces important mathematical and theoretical tools for computer science, including topics from logic, number theory, set theory, combinatorics, and probability theory. The course then proceeds to automata theory, the Turing Machine model of computation, and notions of computational complexity. The course will emphasize formal reasoning and proof techniques. Upon successful completion of this course, each student:
* is able to formulate mathematical proofs using logic
* is able to apply mathematical tools such as induction and recursion
* can recall key definitions from set theory
* is able to formulate combinatorial arguments
* is able to distinguish between various computational models
* is able to think critically on the difficulties of key questions in foundations of computer science
* can recall key facts regarding finite automata and Turing machines.

Prerequisites: Data Structures (CSCI 1200) and Introduction to Calculus (MATH 1010 or MATH 1500); MATH 1020 is strongly recommended.

Required text: Kenneth Rosen, Discrete Mathematics and Its Applications, 7th ed., McGraw Hill, 2012. There are four textbook options:

Non-required texts that provide useful perspectives:
(1) Malik Magdon-Ismail, Discrete Mathematics and Computing. This text discusses all topics covered in FOCS and can be purchased in the main office of the CS Department for about $50.
(2) Michael Sipser, Introduction to the Theory of Computation. This text is a good supplement for the last quarter of FOCS, that cover models of computation.