Course Instructor: Dr. Saeed Ul Hassan Semester: Fall 2016 Course Description: This course covers four broad areas: Automata Theory, Language Theory, Computability Theory, and Complexity Theory. Automata Theory and Language Theory are ideas that have stood the test of time. They are essential tools for compilers. But more importantly, they are used in many systems that require input that is less general than a full programming language yet more complex than "push this button". Computability Theory deals primarily with the question of the extent to which a problem is solvable on a computer. Complexity Theory considers not only whether a problem can be solved at all on a computer, but also how efficiently the problem can be solved. Class participation is important, as the class will include discussion and debate about many of these topics. Topics (1) Automata Theory (2) Formal Languages (3) Turing Machines (4) Computability Theory and Reducibility (5) Computational Complexity (6) Determinism, Non-Determinism (7) Time Hierarchy & Space Hierarchy (8) Theory of Intractability (9) Selected advance topics as time permits Text Books/Reference Books: (1) John Hopcroft, Rajeev Motwani, and Jeffrey Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd edition, 2007, Addison-Wesley. (2) Michael Sipser, Introduction to the Theory of Computation, 2nd edition, 2005, Cengage Learning. (3) Cormen, et al., Introduction to Algorithms, 1990, MIT Press and McGraw-Hill Book Co. (4) Peter Linz, An Introduction to Formal Languages and Automata, 2001, Jones and Bartlett Publisher, Inc. Lectures: 32 sessions, 2 sessions / week, 1.5 hours / session Office Hours: Tuesday and Wednesday Problem Sets & Class Quizzes: There will be six problem sets and four class quizzes. The problem sets will generally be due a week and a half after being assigned. Grading: Problem Sets 15% Class Quizzes 15% Midterm 30% Final 40%