1. To demonstrate to students how mathematics can be applied to solve nontrivial real-life problems
2. To gain more experience with mathematical thinking, arguments and proof techniques, which are essential in reasoning about computation
3. To learn about a number of different discrete structures (e.g., sets, relations, graphs, trees, etc.) that provide the mathematical formalizations for many computational problems
4. To hope that students will not only learn some powerful mathematical tools but also develop their ability to perceive, to formulate, and to solve mathematical problems
5. To provide a gateway to more advanced courses in any computer science courses, including data structures, algorithm, database automata theory, computer security, etc.