This is a webpage of the course "CS520 Theory of Programming Languages", which is offered at the KAIST CS department in the fall of 2018. The webpage will contain links to course-related materials and announcements.
CS520 is an advanced graduate-level course on the theories of programming languages. Its goal is to expose students to rigorous mathematical foundations for programming languages and systems, and mathematical techniques for formally reasoning about programs written in those languages. The course will largely follow Reynolds's textbook "Theories of Programming Languages", which provides good mathematical treatment of a wide range of programming constructs through axiomatic, denotational and operational semantics.
The prerequisite of the course is CS320, the undergraduate-level programming-language course offered at KAIST, or a similar course. The course will be heavy in math, and we expect students to be comfortable with doing and reading rigorous mathematical proofs.
[1 December] Homework 5 is out.
You don't need to submit this homework. In fact, the problem sheet comes with Hongseok's answers. We posted this problem sheet with its answers because they may help you to prepare for the final exam.
[18 November] Homework 4 is out.
The due date is 2:00pm on 4 December 2018 (Tuesday). Submit your solutions in the CS520 homework submission box in the third floor of the E3-1 building. You can also email them to Mr Hyoungjin Lim (email: lmkmkr@kaist.ac.kr).
[6 November] Homework 3 is out.
The due date is 2:00pm on 21 November 2018 (Wednesday). Submit your solutions in the CS520 homework submission box in the third floor of the E3-1 building. You can also email them to Mr Hyoungjin Lim (email: lmkmkr@kaist.ac.kr).
The due date for the first critical review is the midnight on 26 October 2018 (Friday). Your review should be three pages or less. Make sure that you submit something even if your write-up is not as good as you want. As usual, you can submit your review in the CS520 homework submission box in the third floor of the E3-1 building, or email it to Mr Hyoungjin Lim (email: lmkmkr@kaist.ac.kr).
[14 October] Homework 2 is out.
The due date is 2:00pm on 31 October 2018 (Wednesday). Submit your solutions in the CS520 homework submission box in the third floor of the E3-1 building. You can also email them to Mr Hyoungjin Lim (email: lmkmkr@kaist.ac.kr).
Hongseok will be away on 4 October. He will attend ProbProg18 held in Boston.
[30 September] Homework 1 is out.
The due date is 2:00pm on 12 October 2018 (Friday). Submit your solutions in the CS520 homework submission box in the third floor of the E3-1 building. You can also email them to Mr Hyoungjin Lim (email: lmkmkr@kaist.ac.kr).
Because of Hongseok's business trips, there will be no lectures on the following days.
- 09/06 - NO LECTURE. SETTA'18.
- 10/04 - NO LECTURE. PROBPROG'18.
- 12/04, 12/06 - NO LECTURES. NIPS'18.
This is in addition to the cancelling of lectures due to national holidays and KAIST undergraduate admission.
To cover cancelled lectures, we schedule two additional lectures:
- 10/18 (Thu) - LECTURE FROM 9:30 TO 11:30. Recursively-Defined Domains (Tennent Ch10).
- 11/30 (Fri) - LECTURE FROM 4 TO 6. The Simple Type System (Ch15).
Note that the 18th of October is in the period of the mid-term exam. The university allocated the 9:00-11:45 slot on 10/18 for the mid-term exam of this course. Instead of having a mid-term exam, we will have a 2-hour lecture on that day.
- Final exam (40%). Homework (30%). Two critical reviews (30%).
- Lecturer: Prof Hongseok Yang (email: hongseok00@gmail.com, office hour: 6:00pm - 7:00pm on Tuesday at the room 3403 in the E3-1 building)
- TA: Hyoungjin Lim (email: lmkmkr@kaist.ac.kr)
- TA: Hangyeol Yu (email: yhk1344@kaist.ac.kr)
- Office hour by TA: 6:00pm - 7:00pm on Thursday at the room 3415 in the E3-1 building
- Place: room 111 in the N1 building
- Time: 10:30am - 11:45am on Tuesday and Thursday from 28 August 2018 until 13 December 2018.
- Final exam: 9:00am - 11:00am on 13 December 2018 (Thursday) at the room 111 in the N1 building.
- We will use KLMS.
Submit your solutions by putting them in the homework submission box in the third floor of the E3-1 building.
- 08/28 - Introduction (slides). Predicate Logic (Ch1) (note1, note2, note3, note4).
- 08/30 - Predicate Logic (Ch1) (note5, note6, note7, note8).
- 09/04 - Predicate Logic (Ch1).
- 09/06 - NO LECTURE. SETTA'18.
- 09/11 - The Simple Imperative Language (Ch2) (note1, note2, note3, note4, note5, note6).
- 09/13 - The Simple Imperative Language (Ch2).
- 09/18 - The Simple Imperative Language (Ch2).
- 09/20 - Program Specification and Their Proofs (Ch3) (note1, note2, note3, note4)
- 09/25 - NO LECTURE. Chuseok.
- 09/27 - Program Specification and Their Proofs (Ch3).
- 10/02 - Program Specification and Their Proofs (Ch3).
- 10/04 - NO LECTURE. PROBPROG'18.
- 10/09 - NO LECTURE. Hangle Proclamation Day.
- 10/11 - Failure, Input-Output, and Continuation (Ch5) (note1, note2, note3, note4, note5, note6, note7)
- 10/16 - NO LECTURE. Midterm Exam.
- 10/18 - LECTURE FROM 9:30 TO 11:30. Failure, Input-Output, and Continuation (Ch5)
- 10/23 - Transition Semantics (Ch6). (note1, note2, note3, note4, note5)
- 10/25 - An Introduction to Category Theory (Tennent Ch8). (note1, note2, note3, note4, note5)
- 10/30 - An Introduction to Category Theory (Tennent Ch8).
- 11/01 - Recursively-Defined Domains (Tennent Ch10). (note1, note2, note3, note4, note5)
- 11/06 - Recursively-Defined Domains (Tennent Ch10). (note6, note7, note8, note9)
- 11/08 - The Lambda Calculus (Ch10). (note1, note2, note3, note4, note5, note6, note7, note8)
- 11/13 - The Lambda Calculus (Ch10).
- 11/15 - The Lambda Calculus (Ch10).
- 11/20 - An Eager Functional Language (Ch11). (note1, note2, note3, note4, note5, note6, note7)
- 11/22 - An Eager Functional Language (Ch11).
- 11/27 - Continuation in a Functional Language (Ch12). (note1, note2, note3, note4, note5, note6, note7, note8, note9, note10, note11, note12)
- 11/29 - NO LECTURE. KAIST Undergraduate Admission.
- 11/30 - LECTURE FROM 4 TO 6. Continuation in a Functional Language (Ch12).
- 12/04, 12/06 - NO LECTURES. NIPS'18.
- 12/11, 12/13 - NO LECTURES. Final Exam.
We will mainly follow Reynolds's book, but study the materials appearing in Chapters 8 and 9 of Tennent's book.
- Main Textbook 1 : Theories of Programming Languages, John C Reynolds, Cambridge University Press, 1998.
- Main Textbook 2 : Semantics of Programming Languages, Robert D. Tennent, Prentice Hall, 1991. Chapters 8 and 10 only.
In addition to the two books above, the following books will have further information about the topics covered in the course. In particular, Gunter's book goes deep into the domain theory, and Pierce's book into the type theory.
- Auxiliary Textbook 1 : Semantics of Programming Languages: Structures and Techniques, Carl A. Gunter, MIT Press, 1992.
- Auxiliary Textbook 2 : Types and Programming Languages, Benjamin C. Pierce, MIT Press, 2002.
- Auxiliary Textbook 3 : Formal Semantics of Programming Languages: an Introduction, Glynn Winskel, MIT Press, 1993.
The following classic papers or their recent reprints contain deep insight into some of topics that we study throughout the course.
- John C. Reynolds, Definitional Interpreters for Higher-Order Programming Languages, Higher-Order and Symbolic Computation, 1998.
- Luis Damas and Robin Milner, Principal Type-Schemes for Functional Programs, POPL 1982.
One important part of this course is to study assigned reading materials and write reviews about them. It accounts for the 30% of the total marks of this course. In order to get full marks, a student has to show in his or her write-up that she or he has thought hard about the materials and gone beyond the simple understanding of them. Here are the details of this assignments.
- There are two assignments for this critical review.
- First assignment.
- Deadline: midnight of the 26th of October in 2018 (Friday).
- Material: Chapter 7 of Reynolds's ''Theories of Programming Languagues.'' This chapter is about nondeterminism and guarded commands.
- Second assignment.
- Deadline: midnight of the 3rd of December in 2018 (Monday).
- Material: Wadler's Monads for Functional Programming (Advanced Functional Programming 1995), and Moggi's Computational Lambda-Calculus and Monads (LICS 1989).
- A review should have three pages or less.