Schedule of topics
Automata, formal languages,
and computational complexity
CSC 341 · Spring, 2011 ·
Department of Computer Science
·
Grinnell College
How can one measure the computational abilities of a programmable machine (or, equivalently, of a family of special-purpose machines that share a general design)? How can one compare the computational abilities of two such machines? How can one model computation so as to make such measurements and comparisons precise and rigorously demonstrable?
Reading: Sipser, chapter 0 (pages 1-25).
What techniques are commonly used in reasoning about computational models? How is mathematical induction related to structural induction?
Reading: chapter 1, sections 2.2 through 2.4 and 2.7 through 2.13, and chapter 3 (pages 1--14, 19-24, and 39-82) of Tobias Oetiker et al., The (not so) short introduction to LATEX2ε.
What is the best way to produce legibly typeset versions of documents that make extensive use of mathematical notations, either on paper or as PDF files?
For reference: I've prepared a handout showing how to use LATEX to typeset almost all of the special notation in Sipser.
Leslie Lamport, the original author of LATEX, introduces the software and describes how to use it in his book LATEX: a document preparation system (Addison-Wesley Professional, 1994; ISBN 978-0-201-52983-8).
(classes cancelled)
Reading: Sipser, sections 1.1 and 1.2 (pages 31-63).
What kinds of problems can deterministic finite automata solve?
What kinds of problems can nondeterministic finite automata solve? Can nondeterministic finite automata emulate deterministic ones? Can deterministic finite automata emulate nondeterministic ones?
Reading: Sipser, section 1.3 (pages 63-76).
What kinds of formal languages can regular expressions describe? Considered as a model of computation, are regular expressions more powerful or less powerful than deterministic finite automata?
Reading: Sipser, section 1.4 (pages 77-98).
What kinds of problems can deterministic finite automata not solve? How can one prove, for a given problem, that no deterministic finite automaton can solve it?
Reading: Sipser, section 2.1 (pages 99-109).
What kinds of formal languages can context-free grammars generate?
Reading: Sipser, section 2.2 (pages 109-122).
What kinds of problems can pushdown automata solve? Can pushdown automata emulate deterministic finite automata? Can deterministic finite automata emulate pushdown automata?
Considered as a model of computation, are context-free grammars more powerful or less powerful than deterministic finite automata? Are they more powerful or less powerful than pushdown automata?
Reading: Sipser, section 2.3 (pages 123-134).
What kinds of problems can pushdown automata not solve?
Reading: Sipser, section 3.1 (pages 137-147).
What kinds of problems can deterministic Turing machines solve? What kinds of formal languages can they decide, and what kinds can they only recognize?
Can deterministic Turing machines emulate pushdown automata? Can pushdown automata emulate deterministic Turing machines?
Reading: Sipser, section 3.2 (pages 148-154).
What kinds of problems can multitape Turing machines solve? Can multitape Turing machines emulate deterministic Turing machines? Can deterministic Turing machines emulate multitape Thuring machines?
What kinds of problems can nondeterministic Turing machines solve? Can nondeterministic Turing machines emulate deterministic ones? Can deterministic Turing machines emulate nondeterministic ones?
What other variant kinds of Turing machines have been considered? Which of them are more powerful than deterministic Turing machines? Which of them are less powerful?
Reading: Sipser, section 3.3 (pages 154-163).
What is the relation between deterministic Turing machines and algorithms? If there is a problem that no deterministic Turing machine can solve, does it follow that there is no algorithm whatever for solving that problem?
Reading: Handout on semi-Thue processes.
What kinds of formal languages can general grammars (“semi-Thue processes”) generate? Considered as models of computation, are general grammars more powerful or less powerful than deterministic Turing machines?
Reading: Sipser, section 4.1 (pages 165-173).
How can one formulate problems about automata, grammars, partial recursive functions, and the like, and submit them for computational solution? Can deterministic Turing machines solve such problems?
Reading: Handout on recursive function theory, sections 1 through 6 (pages 1-17).
Starting with a very simple class of “primitive” functions taking natural numbers as arguments and yielding natural numbers as values, what other functions can be derived, using the operations of composition and recursive definition? Considered as a model of computation, is the class of functions that can be constructed in this way (the “primitive recursive” functions) more powerful or less powerful than deterministic finite automata? How do they compare with deterministic Turing machines?
Reading: Handout on recursive function theory, section 7 (pages 17-25).
How can data of other types be encoded as natural numbers? How can one formulate computational solutions to problems involving such data as partial functions?
Reading: Handout on recursive function theory, sections 8 and 9 (pages 25-31).
What other operators might one use to extend the class of primitive recursive functions? With the help of such operators, could one obtain a class of functions more powerful than deterministic Turing machines?
Reading: Handout on recursive function theory, section 10 (pages 31-33).
If we extend the notion of a function to include “partial” functions, which fail to have values for certain arguments or combinations of arguments, how might one adapt the constructive model for defining functions? What operators might one use to extend the class of primitive recursive functions in this wider universe of discourse? Considered as a model of computation, is the class of “partial recursive” functions (obtained by adding the unbounded-minimization operator) more powerful or less powerful than deterministic Turing machines?
Reading: Handout on recursive function theory, sections 11 and 12 (pages 33-48).
Can one encode partial recursive functions as natural numbers? If so, can one define partial recursive functions to solve problems about such functions?
Can one encode computations as natural numbers? If so, can one define partial recursive functions to solve problems about computations?
Reading: Handout on recursive function theory, sections 13 and 14 (pages 48-50).
Are all partial functions partial recursive? How might one find a partial function that is not partial recursive, and how would one prove that it is not partial recursive?
Reading: Sipser, section 4.2 (pages 173-186).
What does it mean to say that some infinite sets are larger than others? How does one measure the size of an infinite set?
How does the “diagonalization” proof method work? Is it sound?
What kinds of problems, if any, can deterministic Turing machines not solve? How can one prove, for a given problem, that no deterministic Turing machine can solve it?
What's the relationship between the halting problem for Turing machines and the predicate defined? in recursive function theory?
Reading: Sipser, section 5.1 (pages 187-198).
How does the “reducibility” proof method work?
Reading: Sipser, section 5.2 (pages 199-205).
Can a Turing machine solve the Post correspondence problem?
Is the Post correspondence problem a model of computation? If so, is it more powerful or less powerful than the other models of computation that we have studied?
Reading: Sipser, section 5.3 (pages 206-215).
What is “mapping reducibility”? How does one establish that one language is mapping reducible to another? What does this relation imply about the decidability of the languages?
Reading: Handout on recursive function theory, sections 15 through 19 (pages 50-66).
In recursive function theory, what corresponds to the distinction between Turing-recognizable and Turing-decidable languages? How can one apply recursive function theory to study and learn about such languages?
Reading: Handout on recursive function theory, sections 20 and 21 (pages 66-72).
What kinds of transformations on partial recursive functions can themselves be expressed as partial recursive functions? How far can one take the idea of encoding?
Reading: Sipser, section 6.1 (pages 217-224).
Is it possible for a deterministic Turing machine to recover and use information about its own internal structure when performing a computation? If so, what are the implications of this idea, and how far can one take them?
Reading: Sipser, section 6.2 (pages 224-231).
Can a deterministic Turing machine solve the problem of determining whether a mathematical proposition, expressed as a statement in a logical theory, is true? Does the choice of a logical theory make any difference?
Reading: Sipser, section 6.3 (pages 232-233).
Suppose that we devise some kind of automaton or computational model that is more powerful than the Turing-machine model. If we hook up this new automaton to a Turing machine, and allow the Turing machine to invoke it as a subroutine, what previously insoluble problems would such “oracle” Turing machines be able to solve? Would it be possible to solve every problem with such a machine?
Reading: Sipser, section 6.4 (pages 233-244).
How can one measure the complexity of a problem, or of the automaton that solves it? Can such measures be computed by deterministic Turing machines? How can one measure the complexity of a single computation?
Given a Turing-decidable language, is it possible to find the simplest Turing machine that decides it? Could there be an algorithm for finding the simplest Turing machine to solve a given problem? Could there be an algorithm that takes a description of a Turing machine as input and outputs either a shorter description of a Turing machine that recognizes the same language, or (if no such Turing machine exists) the input description unchanged?
Sipser, sections 7.1 and 7.2 (pages 247-263).
Does the complexity of a problem depend on the nature of the model of computation in which it is solved? If so, how? How might one classify both problems and models of computation so as to explain their relationships concisely?
Can one measure the complexity of a problem by the number of steps it takes a Turing machine to solve it? What are some of the pitfalls in defining using such a measure?
Reading: Sipser, section 7.3 (pages 264-270) and section 7.4, through subsection “Definition of NP-completeness” (pages 271-276).
What kinds of problems can deterministic Turing machines solve in a number of steps that is bounded by some polynomial function of the size of the input? For what kinds of problems can such machines verify proposed solutions, under the same limitation on the number of steps? Are these two classes of problems the same, or is the first a proper subclass of the second?
Reading: Sipser, section 7.4, subsection “The Cook-Levin theorem,” and section 7.5 (pages 276-283).
How can a Boolean formula model the sequence of configurations of a Turing machine?
Reading: Sipser, section 7.5 (pages 283-301).
What are some of the least tractable problems to which a Turing machine can verify a solution in polynomial time?
Reading: Sipser, sections 8.1 and 8.2 (pages 303-309).
What kinds of problems can deterministic Turing machines solve, using a number of tape cells that is bounded by some polynomial function of the size of the input? What are some of the least tractable problems in this class?
Reading: Sipser, sections 8.4 and 8.5 (pages 320-333).
What kinds of problems can deterministic Turing machines solve, using a number of tape cells that is bounded by some logarithmic function of the size of the input?
Review; course evaluations.
Final examination (2 p.m. to 5 p.m.).
·
· 
This work is licensed under a Creative Commons
Attribution-ShareAlike 3.0 United States License.
This text is available on the World Wide Web as
http://www.cs.grinnell.edu/~stone/courses/automata/syllabus.html
created January 8, 2004 · last revised
May 4, 2011