15-122 Principles of Imperative Computation

This course is intended for students with a basic understanding of programming (variables, expressions, loops, arrays, functions). It teaches imperative programming and methods for ensuring the correctness of programs. Students will learn the process and concepts needed to go from high-level descriptions of algorithms to correct imperative implementations, with specific application to basic data structures and algorithms. Much of the course will be conducted in a subset of C amenable to verification, with a transition to full C near the end. 21-127 Concepts of Mathematics is a co-requisite (must be taken before or in the same semester). This course is a pre-requisite for 15-213 Computer Systems and 15-210 Parallel and Sequential Data Structures and Algorithms.

This page describes the course in general. For more information, please consult the individual course instances.


Course Instances

C0 Language

Much of the course uses, C0, a small safe subsect of C augmented with a layer of contracts. A tutorial, language reference, and downloads are available at the C0 language home page.

Frank Pfenning