Table of Contents
Fetching ...

Development of parallel programs on shared data-structures -- Revised version

Ketil Stølen

TL;DR

A syntax-directed formal system for the development of totally correct programs with respect to an unfair shared-state parallel while-language is proposed and is proved sound and relatively complete with respect to an operational semantics and employed to develop three nontrivial algorithms.

Abstract

A syntax-directed formal system for the development of totally correct programs with respect to an unfair shared-state parallel while-language is proposed. The system can be understood as a compositional reformulation of the Owicki/Gries method for verification of parallel programs. Auxiliary variables are used both as a specification tool to eliminate undesirable implementations, and as a verification tool to make it possible to prove that an already finished program satisfies a particular specification. Auxiliary variables may be of any sort, and it is up to the user to define the auxiliary structure he prefers. Moreover, the auxiliary structure is only a part of the logic. This means that auxiliary variables do not have to be implemented as if they were ordinary programming variables. The system is proved sound and relatively complete with respect to an operational semantics and employed to develop three nontrivial algorithms: the Dining-Philosophers, the Bubble-Lattice-Sort and the Set-Partition algorithms. Finally, a related method for the development of (possibly nonterminating) programs with respect to four properties is described. This approach is then used to develop Dekker's algorithm.

Development of parallel programs on shared data-structures -- Revised version

TL;DR

A syntax-directed formal system for the development of totally correct programs with respect to an unfair shared-state parallel while-language is proposed and is proved sound and relatively complete with respect to an operational semantics and employed to develop three nontrivial algorithms.

Abstract

A syntax-directed formal system for the development of totally correct programs with respect to an unfair shared-state parallel while-language is proposed. The system can be understood as a compositional reformulation of the Owicki/Gries method for verification of parallel programs. Auxiliary variables are used both as a specification tool to eliminate undesirable implementations, and as a verification tool to make it possible to prove that an already finished program satisfies a particular specification. Auxiliary variables may be of any sort, and it is up to the user to define the auxiliary structure he prefers. Moreover, the auxiliary structure is only a part of the logic. This means that auxiliary variables do not have to be implemented as if they were ordinary programming variables. The system is proved sound and relatively complete with respect to an operational semantics and employed to develop three nontrivial algorithms: the Dining-Philosophers, the Bubble-Lattice-Sort and the Set-Partition algorithms. Finally, a related method for the development of (possibly nonterminating) programs with respect to four properties is described. This approach is then used to develop Dekker's algorithm.
Paper Structure (314 sections, 15 theorems, 20 equations)

This paper contains 314 sections, 15 theorems, 20 equations.

Key Result

Proposition 1

Given a computation $\sigma'$ of $z_1$ and a computation $\sigma"$ of $z_2$, such that $\sigma'\bullet\sigma"$, then there is a computation $\sigma$ of $\{ z_1\parallel z_2\}$ such that $\sigma'\bullet\sigma"\leftarrow\sigma$.

Theorems & Definitions (47)

  • Definition 1
  • Definition 2
  • Definition 3
  • Definition 4
  • Definition 5
  • Definition 6
  • Definition 7
  • Definition 8
  • Proposition 1
  • Proposition 2
  • ...and 37 more