Great ideas in theoretical computer science

Bachelor's degree

In Maynard (USA)

Price on request

Description

  • Type

    Bachelor's degree

  • Location

    Maynard (USA)

  • Start date

    Different dates available

This course provides a challenging introduction to some of the central ideas of theoretical computer science. It attempts to present a vision of "computer science beyond computers": that is, CS as a set of mathematical tools for understanding complex systems such as universes and minds. Beginning in antiquity—with Euclid's algorithm and other ancient examples of computational thinking—the course will progress rapidly through propositional logic, Turing machines and computability, finite automata, Gödel's theorems, efficient algorithms and reducibility, NP-completeness, the P versus NP problem, decision trees and other concrete computational models, the power of randomness, cryptography and one-way functions, computational theories of learning, interactive proofs, and quantum computing and the physical limits of computation. Class participation is essential, as the class will include discussion and debate about the implications of many of these ideas.

Facilities

Location

Start date

Maynard (USA)
See map
02139

Start date

Different dates availableEnrolment now open

Questions & Answers

Add your question

Our advisors and other users will be able to reply to you

Who would you like to address this question to?

Fill in your details to get a reply

We will only publish your name and question

Reviews

Subjects

  • Computational
  • Systems
  • CS
  • Logic
  • Algorithms
  • Computing

Course programme

Lectures: 2 sessions / week, 1.5 hours / session


This course provides a challenging introduction to some of the central ideas of theoretical computer science. It attempts to present a vision of "computer science beyond computers": that is, CS as a set of mathematical tools for understanding complex systems such as universes and minds. Beginning in antiquity—with Euclid's algorithm and other ancient examples of computational thinking—the course will progress rapidly through propositional logic, Turing machines and computability, finite automata, Gödel's theorems, efficient algorithms and reducibility, NP-completeness, the P versus NP problem, decision trees and other concrete computational models, the power of randomness, cryptography and one-way functions, computational theories of learning, interactive proofs, and quantum computing and the physical limits of computation. Class participation is essential, as the class will include discussion and debate about the implications of many of these ideas.


Professor Aaronson's teaching statement: (PDF)


Students taking 6.080 will be graded on the following basis:



Students taking 6.089 will be graded on the following basis:



The only differences are that 6.089 includes a scribe notes requirement whereas 6.080 does not, and that 6.089 is 12-unit whereas 6.080 is 9-unit. Students should be aware that scribe notes are a nontrivial responsibility (basically a small project), requiring maturity and strong command of the material. Thus, the "default recommendation" is for underclassmen to take 6.080 and for upperclassmen to take 6.089.


While the course will not closely follow any textbook, we will sometimes use Complexity Theory: A Modern Approach by Sanjeev Arora and Boaz Barak. A draft of this new book is available for free on the Web, and a printed version will be distributed in class. In addition, the following is highly recommended, though not required:


Sipser, Michael. Introduction to the Theory of Computation. 2nd ed. Boston, MA: Course Technology, 2005. ISBN: 9780534950972.


Each student taking 6.089 is expected to prepare two scribe notes. A draft of the scribe notes will be due at midnight, one week after the class is given. Notes must be done in LaTeX; a template will be made available. Please email your draft to the TA, and set up a meeting to discuss them. A polished draft, on which you will be graded, is expected by the end of the course.


Students are welcome to collaborate on problem sets. However, if they do so, they must list the names of collaborators. Collaboration policy for scribe notes will depend on class enrollment.


This course is designed for undergraduates (both under- and upperclassmen) in computer science and related areas of science and engineering. Others are welcome to take the course but might wish to discuss with the instructor. There are no formal prerequisites. The only prerequisite is some facility with mathematical reasoning: that is, the ability to construct valid mathematical arguments (including proofs by contradiction, induction, etc.) and to recognize errors in invalid ones. Such facility might be gained, for example, by taking 6.042. Programming experience is helpful but not essential; the course has no programming assignments.


There is significant overlap between 6.080 and 6.045 (Automata, Computability, and Complexity). The main difference is that 6.080 is an experimental course, which presents many ideas normally postponed until graduate courses, whereas 6.045 provides a more traditional introduction to computability, formal languages, and complexity theory. Students who seek a solid grounding in formal languages, suitable for further work in compilers and other areas, are advised to take 6.045, whereas those wishing to learn about recent insights in theoretical computer science might prefer 6.080. There is also significant overlap between 6.080 and 6.840 (Theory of Computation). However, as a graduate course, 6.840 is able to cover topics in much more mathematical depth. It is hoped that many students taking 6.080 will go on to take 6.840. The overlap between 6.080 and 6.006 (Introduction to Algorithms), or between 6.080 and 6.046 (Design and Analysis of Algorithms), is smaller.


The course will consist of three units, lasting approximately one month each. These are:


At the end of the first unit, there will be a quiz focusing on that unit only, and similarly at the end of the second unit. At the end of the third unit there will be a cumulative final exam.


Ancient computational thinking (Euclid et al.)
Propositional and first-order logic
Finite automata
Turing machines and the halting problem
Oracles and computability
Basic set theory
Gödel's completeness and incompleteness theorems
Philosophical considerations (Penrose and "strong AI")


Polynomial time and its justification
Nontrivial examples of polynomial-time algorithms
The concept of a reduction
P, NP, and NP-completeness; the Cook-Levin Theorem
The P versus NP problem and why it's hard
Decision trees and circuits


The power of probabilistic algorithms
Private-key cryptography and one-way functions
Public-key cryptography and trapdoor functions
Pseudorandom number generators
Does randomness really help? The P versus BPP question
Interactive proofs
Zero-knowledge proofs
Computational learning theory
Quantum computing
The ultimate physical limits of computation


Don't show me this again


This is one of over 2,200 courses on OCW. Find materials for this course in the pages linked along the left.


MIT OpenCourseWare is a free & open publication of material from thousands of MIT courses, covering the entire MIT curriculum.


No enrollment or registration. Freely browse and use OCW materials at your own pace. There's no signup, and no start or end dates.


Knowledge is your reward. Use OCW to guide your own life-long learning, or to teach others. We don't offer credit or certification for using OCW.


Made for sharing. Download files for later. Send to friends and colleagues. Modify, remix, and reuse (just remember to cite OCW as the source.)


Learn more at Get Started with MIT OpenCourseWare


Great ideas in theoretical computer science

Price on request