CS 560: Reasoning About Programs
|
about
Instructor:
bendy at purdue.edu
Office Hours: Mondays 2:30-4:00p in LWSN 2116M
Teaching Assistant:
dicker18 at purdue.edu
Office Hours: Wednesday 2:00p-3:00p in HAAS 143
Course Description:
This is a graduate course on the logical
foundations and algorithmic techniques used to
ensure that programs do what they are supposed
to do. We will focus on two key aspect of
automated reasoning:
-
Specification:
logics to define the expected
behavior of a program in a
machine-readable form,
-
Verification:
methods to automatically check if a program
meets its specification.
The course will be an exploration of both the
theory and practice of automated
computer-aided reasoning, and its application
to reasoning about program behavior. Our
exploration will cover a breadth of reasoning
techniques and tools currently in use,
e.g. SAT/SMT solvers, examining them from the
both an implementation and user perspective.
|
logistics
Lectures:
Lectures will be Mondays, Wednesdays, and
Fridays in LWSN 1106, which students are
expected to attend. If you are sick or
otherwise unable to attend a lecture, please
let the instructor know as soon as
possible. All lecture materials, including
slides and related readings, will be made
available on brightpsace after class.
Office Hours:
Each Monday, the instructor will have office
hours from 2:30-4:-0p in LWSN 2116M, and the TA
will hold office hours in HAAS 143 every
Wednesday from 2:00-3:00. In the event that
students cannot attend scheduled office hours,
they should contact the instructor via email to
schedule a time to meet individually.
Homeworks:
Homeworks will be posted (roughly) every
three weeks, according to the course schedule.
Homeworks are to be submitted via Brightspace by
6PM on their assigned due date. Make sure that
any programs compile without errors
(and ideally without any warnings). If they do
not, they will not be graded. Everyone
will receive three courtesy late days for the
semester. Once all these days have been used,
students will need to notify the instructor or
the TA ahead of time with an explanation and
plan for completion. These requests will be
accepted at my discretion and may include a
point penalty of 5% per day late. Asking for an
extension does not guarantee it will be granted.
Course Project:
The course project has teams of 2-3 students
toimplement a project of their choosing. As
these projects are less structured than the
homeworks, there will be three milestones to
help keep everyone on track. A list of project
ideas and a timeline will be posted on
Brightspace.
|
success
How to Succeed in this Course
In order to be successful, students should be familiar with:
- Programming in an imperative language,
e.g. Java / C / Python, etc.
- Basic logic and proofs techniques found
in an undergraduate discrete math course like
CS182: sets, relations, functions, proof by
induction, proof by case analysis; recursion;
and propositional logic.
- The sorts of basic data structures and
algorithms encountered in an undergraduate
course like CS 251, e.g. lists, trees, heaps,
graphs, sorting, graph traversals, and
search.
We'll briefly review important concepts as
needed, but this will be a refresher and not an
introduction.
|
resources
Course Texts:
The main textbook for the course will be:
-
Bradley, Aaron R., and Zohar. Manna. The
Calculus of Computation: Decision Procedures with Applications to
Verification. 1st ed. 2007.
Online access from Purdue libraries
This will be supplemented with a variety of
sources, including:
-
Nielson, Flemming, Hanne Riis Nielson, and
Chris Hankin. Principles of Program Analysis. 1st ed. 1999.
Online access from Purdue libraries
-
Biere, Armin. Handbook of
Satisfiability. 2009.
Online access from Purdue libraries
-
Clarke, Edmund M. et al. Handbook of Model
Checking. Ed. Edmund M. Clarke et al. 1st
ed. 2018.
Online access from Purdue libraries
-
Cousot, Patrick. Principles of Abstract
Interpretation. 2nd ed. 2021.
Online access from Purdue libraries
In addition, a (dynamically updated) list of
supplementary readings will be available on
Brightspace.
Discussion Forum:
The
course Ed
Discussion site will serve as the
discussion board; all course announcements
will also be posted there. In lieu of emailing
the instructor or the TA with any general
questions about using Haskell / Rust or
assignments, please post them to the
discussion board so that any other students
with the same question can see the answer.
|
policies
Grading:
Final grades will be assigned according to the following breakdown:
Homework Assignments |
40% |
Course Project |
50% |
Participation |
10% |
|
(tentative) schedule
Date |
Topic |
Notes |
Homework |
W1 (08/21) |
Course Introduction
Propositional Logic: Theory,
Implementation, and Applications
|
|
|
W2 (08/28) |
Propositional Logic: Theory,
Implementation, and Applications
|
|
|
W3 (09/04) |
First-Order Logic: Theory,
Implementation, and Applications
|
|
|
W4 (09/11) |
First-Order Logic: Theory,
Implementation, and Applications
|
|
|
W5 (09/18) |
First-Order Theories
|
|
|
W6 (09/25) |
Satisfiability Modulo Theories |
|
|
W7 (10/02) |
Transition Systems |
|
|
W8 (10/09) |
Model Checking |
|
|
W9 (10/16) |
Model Checking in Theory |
|
|
W10 (10/23) |
Model Checking in Practice |
|
|
W11 (10/30) |
Model Checking Applications |
|
|
W12 (11/06) |
Abstract Interpretation
|
|
|
W13 (11/13) |
Applications of Abstract Interpretation
|
|
|
W14 (11/20) |
Program Synthesis |
|
|
W15 (11/27) |
Program Synthesis |
|
|
W16 (12/04) |
Project Presentations + Course Wrap up
|
|
|
|
|
|