Formal models of computation such as finite state automata, recursive functions, formal grammars and Turing machines will be studied. These models will be used to provide a mathematical basis for the study of computability. Applications to compiler design and computational undecidability will also be covered.We all have problems. Some problems are easier to solve than others; some are unsolvable. But what is a problem? And what is a solution? We'll formalize these nebulous ideas using language theory. We'll treat problems as languages and solutions as rigorous instructions for accepting or rejecting strings in those languages. The models we study are easy to describe (think flow charts for toasters and elevators), yet computationally very powerful (we can, for example, use them to find the minimal mileage route for the Williamstown snowplow fleet). The rewarding part is understanding the limitations and power of each model.
Ten homework assignments each worth 5% of your grade. I'll drop the lowest score expecting this covers all extenuating circumstances such as illness and natural disasters. Six pop quizzes (lowest score dropped), each contributing 1% to your grade; a take-home midterm worth 25% of your grade and a 24-hour, cumulative final worth another 25% of your grade.
Some points of clarification:
- 5: The solution is clear and correct. This solution would easily find a home in a research article.
- 4: The solution contains a few mistakes, but they are mostly arithmetic or of little significance to the overall argument.
- 3: The solution hits on the main points, but has at least one logical gap.
- 2: The solution contains several logical mistakes, but parts of it are salvageable.
- 1: The solution is just plain wrong.
- 0: No attempt is made at solving the problem.