In addition to homework assignments, you'll work on projects that let you integrate what you've learned in this course with something (else) that you're interested in.
The project report should have three parts:
Most projects will be papers or programs, or a combination. But if you want to do something else like build hardware or make a video, that's fine too!
Natural Language Processing (CP1 or CP2). Survey applications of finite-state methods,* context-free grammars, or other formalisms to natural language processing.
Mathematical Linguistics (CP2). What class of languages do human languages belong to (finite, regular, context-free, or something else)? Survey the history of this debate. Take a position and argue for it.
Computational Biology (CP1 or CP2). Survey applications of finite-state methods,* context-free grammars, or other formalisms to the analysis of biological sequences (DNA, RNA, or proteins).
Computer Music (CP1 or CP2). Survey applications of finite-state methods* or context-free grammars to analysis or generation of music.
Computer Graphics (CP2 or CP3). Survey formalisms related to those learned in class that have been used for generating computer graphics, like L-systems or Wang tiles.
Programming Languages (CP2 or CP3). Survey uses of finite automata and context-free grammars in programming language compilation, or Turing-equivalent formalisms like the lambda calculus in programming language design, or decidable and undecidable problems in program analysis and verification.
The First Computer (CP3). What was the first computer? Choose an early computer and argue that it was the first true computer and the ones before it were not. Use Turing-equivalence as the definition of a computer – but even under this definition, there's more than one defensible answer to the question.
Super-Turing Computation (CP3). Choose one of the following things that have been claimed to be more powerful than Turing machines.
Advanced Topics There are many topics covered in the book or its exercises that we didn't have time for in class. Write a "for dummies" tutorial on one of these.
*Finite-state methods go by many different names, including finite-state transducers, hidden Markov models, and conditional random fields.
Applications and Advanced Topics. Many of the topics listed above under "Papers" would also make interesting programming projects; just be sure to choose something manageable. For example:
Tock Extensions. Implement something we learned in class that is not already in Tock. For example:
Puzzles. In the first lecture, we played with three puzzles that were equivalent to recognition of a regular language, an NP-complete problem, and an undecidable problem. Write an interactive implementation of one of these puzzles, or design a new puzzle.
Here are some web-based projects that students have done in the past. (There have been lots of other great projects, but the web-based ones are easiest to include here.)