University of Oxford Logo University of OxfordDepartment of Computer Science - Home

Formal Program Design:  2011-2012

Information

Lecturer

Degrees

Schedule AComputer Science

Schedule B1Computer Science

Schedule B1Mathematics and Computer Science

Term

Overview

The aim is to show how procedural programs can be developed rigorously from their mathematical specifications.

In the first part, the emphasis is primarily on how to derive loops and recursive procedures from invariants; this activity is called algorithm refinement. The second part of the course deals with specification and data refinement; it shows how modules and systems can be specified abstractly, how algorithms can be developed using abstract datatypes, and how such abstract datatypes can be implemented using concrete datatypes, and that implementation formally justified.

Learning outcomes

At the end of the course students are expected to:

Synopsis

Syllabus

The language of guarded commands for expressing programs. Assertions, invariants, and variant functions. Strategies for finding invariants; head and tail invariants. General programming techniques for developing efficient programs. Examples from sorting and searching problems. Procedures and parameter passing. Recursion in procedural programs. Modules and encapsulation. Data refinement. Example refinements, including use of hashing and tree structures. Pointer algorithms and their development. Specification using modules, abstract data types and their operations.

Reading list