This thesis is concerned with ways of proving the
correctness of computer programs. The first part of the
thesis presents a new method for doing this. The method,
called continuation induction, is based on the ideas of
symbolic execution, the description of a given program by a
virtual program, and the demonstration that these two
programs are equivalent whenever the given program
terminates. The main advantage of continuation induction
over other methods is that it enables programs using a wide
variety of programming constructs such as recursion,
iteration, non-determinism, procedures with side-effects and
jumps out of blocks to be handled in a natural and uniform
way. In the second part of the thesis a program verifier
which uses both this method and Floyd's inductive assertion
method is described. The significance of this verifier is
that it is designed to be extensible, and to this end the
user can declare new functions and predicates to be used in
giving a natural description of the program's intention.
Rules describing these new functions can then be used when
verifying the program. To actually prove the verification
conditions, the system employs automatic simplification, a
relatively clever matcher, a simple natural deduction system
and, most importantly, the user's advice. A large number of
commands are provided for the user in guiding the system to a proof of the program's correctness. The system has been
used to verify various programs including two sorting
programs and a program to invert a permutation 'in place' the proofs of the sorting programs included a proof of the fact that
the final array was a permutation of the original one.
Finally, some observations and suggestions are made
concerning the continued development of such interactive
verification systems