A Weaker Precondition for Loops

In his book, A Discipline of Programming, Dijkstra presents the skeleton for a programming language and defines its semantics axiomatically using predicate transformers. HIS language involves only bounded nondeterminism. He shows that unbounded nondeterminism is incompatible with his axioms and his continuity principle, and he argues that this is no drawback because unboundedly nondeterministic machines cannot be built. This paper considers the question of unbounded nondeterminism. A new predicate transformer is derived to handle this. A proof is given that the new transformer corresponds to operational semantics, and an informal argument is given that unbounded nondeterminism can be a useful programming concept even in the absence of nondeterministic machines.