course description

Error-correcting codes and related
combinatorial constructs play an important role is several recent (and old)
results in complexity theory. In most cases, such as in the Goldreich-Levin
hard-core predicate construction, the coding theory interpretation became clear
only in retrospect, but then it was essential for further improvements. This
course will be about the theory, constructions, and algorithms for error
correcting codes, about applications in complexity theory and in cryptography,
and about relations to other combinatorial constructions.

In the first part of the course we will see constructions of Reed-Solomon codes,
Reed-Muller codes and Low-weight Parity Check Codes, along with their
unique-decoding and list-decoding algorithms. Then we will see "local
decoding" and "local checking" algorithms, and their applications
to average-case complexity, cryptography, program testing, and probabilistically
checkable proofs. In the third part of the course we will explore connections
between error-correcting codes and the other three combinatorial objects
that are ubiquitous in complexity theory: hash functions, randomness
extractors and expander graphs.