This course introduces elements of logic,
mathematics, and philosophy that allow reasoning about computational structures and processes. The areas of discrete structures, proof techniques, and computational models are generally covered.
Other topics covered include prepositional and predicate logic, sets, relations, functions, and graphs, as well as induction, reduction, and proof by contradiction. Computational models such as finite-state machines and regular languages, context-free languages, and Turing machines are
discussed.