Reading

Sections 1.1, 1.2, 1.3 of Theory of Computing, A Gentle Introduction.

Homework

Printout the homework and answer the questions on that paper.

Course admin

Choose section leader, pass out course policy and departmental honor policy.
Note: Class lecture notes and homework will, generally, be available after class, not before!

A little bit Extra

This is a four-hour course. The "theory of computing" part is, for the most part, going to be MWF. So what about Thursdays? We will use Thursdays to add a little bit of discrete math material that didn't fit in SI242, and the rest of it will be about exploring Python. Python is a very high-level language. It makes extensive use under the hood of a lot of sophisticated CS concepts that you have learned or will be learning this semester, and our "extra" lessons on Python will highlight those connections. Python also does some things differently from the languages you already know, like C, C++ and Java, and in doing a bit of compare and contrast, we can better understand all programming languages.

What is "theory of computing"?

Languages, alphabets, strings

Important! In class we went over a number of examples of different alphabets, strings and languages. Those examples are important!

Further importance of languages

Most fundamental computing problems can be phrased as the following kind of problem: Given a description of a language L, decide whether a given string w is in the language L. These problems are decision problems, which means they have yes or no answers. Often the decision problem version of a question is a bit easier than the original, but they're related.

For example, suppose your original problem is "Compute (3 + (2*x)) + x*4 given x". As a decision problem this , might become "Given a string x:y, where x and y are strings of digits, decide if x:y is in the language of strings for which the numbers encoded by x and y satisfy y = (3 + (2*x)) + x*4".

By restricting our attention to decision problems like this, our computational models can become much simpler, so at some points we'll just talk about decision problems. True, the decision problem is often easier that the original problem, but this is OK. What we'll show at the end of the semester, is that there's a straightforward decision problem of the type described above that can't be solved by any computer or computer program. No matter how clever you are writing your program or building your machine, there will always be some input strings that foil your program. Either it will give wrong answers, or it will run forever, never giving any answer at all! This result about the limitations of computation is one of the most important results, from a philosophical perspective, in computer science and mathematics. And by the end of the semester you will not only understand the result, but how to prove it and, indeed, how it is possible to prove that something is impossible!


Christopher W Brown