Instructor Lectures

Tue/Thu 1:00 - 2:30

Jorgensen 287
Rajeev Joshi
Teaching Assistant
Mihai Florian



Course Description

This course provides an introduction to formal reasoning about correctness of computer programs. We will cover both the theory and practice of program reasoning, focusing more on the practice.

Planned topics:

  • basics of propositional and first-order logic
  • writing logical specifications of intended program behavior
  • sequential program reasoning with Hoare logic, using preconditions, postconditions and loop invariants
  • relational and predicate-transformer semantics of programs
  • using weakest preconditions as hints in developing programs from specifications (programs that are "correct by construction")
  • theory of program refinement

Emphasis will be on working with lots of examples, since programming cannot be learned except "by doing". Students will be encouraged to apply methods taught in class by using freely available verification tools to their programs.

Grading

Grading will be based on take-home assignments and a class project. There is no assigned textbook; handouts and lecture notes will be given as needed to supplement material taught in class.

CS 116 is a companion course to
CS 118: "Logic Model Checking" (taught by Gerard Holzmann, Winter), and
CS 119: "Testing and Monitoring" (taught by Alex Groce and Klaus Havelund, Spring)

Catalog Entry
CS 116. Reasoning about Program Correctness. 9 units (3-0-6); first term. Prerequisite: CS 1 or equivalent. This course presents the use of logic and formal reasoning to prove the correctness of sequential and concurrent programs. Topics in logic include propositional logic, basics of first-order logic, and the use of logic notations for specifying programs. The course presents a programming notation and its formal semantics, Hoare logic and its use in proving program correctness, predicate transformers and weakest preconditions, and fixed-point theory and its application to proofs of programs. Instructor: Joshi.