This course is intended to provide a solid theoretical foundation for computer science, in answering the fundamental questions that what a "computer" can do and can't do. After going through some basic mathematical concepts, we will characterize the nature of a computer by studaying various theoretical models of computers, such as finite state automata, push-down automata, and Turing machines, in terms of their corresponding formal languages, particularly regular languages, regular expressions and context-free languages. We will then explore their capabilities and restrictions, particularly, in terms of their computability and the general decicability.
Students are strongly advised to attend every class. For those who have to miss some classes or have some class notes to make up, I have included, within this WEB based syllabus, an extended abstract of my teaching notes, which might not be the same as what I eventually deliver in the class.
Although you should not hand in any homework unless and until you are reasonably sure about their correctness; all the homework must be handed in by the end of the first business day in the following week, once a chapter is completed. There will be no exception.
Anything and everything handed in for this course has to be accurately spelled out, which can be done, e.g., with a word processor.
Anything and everything handed in for this course has to be done by the signed individual. If enough evidence shows that someone is involved with ``cheating'', the case(s) will be immediately reported to the Chair of the Computer Science and Technology Department. For a more detailed and specific description of University's policy on Academic Integrity, please refer to the relevant section(s) in the most recent version of the Academic Catalog.
The instructor will try his utmost to be fair in grading students' work. On the other hand, if a student believes that s/he is not given a fair grade, s/he should follow the procedure as specified in the University Fairgrading Policy to appeal the grade.
Introduce the subjects. Review and preview various mathematical notions and terminology, and introduce various ways of providing mathematical proof.
Define, analyze and design finite automata(FA), the class of simplest computers. Prove the equivalence between deterministic finite automata(DFA) and non-deterministic finite automata(NFA), as well as that between FA and regular expressions. Demonstrate various closure properties enjoyed by the languages accepted by FA, and the existence of strictly stronger automata via pumping lemma.
Define, analyze and design Push-down automata(PDA) and its corresponding formal language(CFL) generated by the Context-free grammars. Prove the equivalency between NPDA and CFL. Discuss the closure properties enjoyed by the CFL, and the existence of strictly stronger languages, context-sensitive languages and beyond, via another pumping lemma. Application of CFL in programming languages.
Define, analyze and design Turing Machines(TM) and its variants. Discussion of the equivalency with respect to various computational models. Define general algorithms via Church-Turing Thesis.
Discuss the general computability issue in terms of various decidable prblems, particularly, the Halting problems, and other undecidable problems.
Introduction of the reduction technique in proving more undecidable problems such as the Post Correspondence Problem.
Discuss more advanced topics, including the idea of self-producibility of machines and its applications in proving decidability and constructing computer worms; together with more complexity theory related ideas, and their application in compiler construction. To show the incapability of a computation process, we also discuss the undecidability of certain logical theory.