Most current approaches to mechanical program verification transform a program and its specifications into first-order formulas and try to prove these formulas valid. Since the first-order predicate calculus is not decidable, such approaches are inherently limited. This paper proposes an alternative approach to program verification: correctness proofs are constructively established by proof justifications written in an algorithmic notation. These proof justifications are written as part of the program, along with the executable code and correctness specifications. A notation is presented in which code, specifications, and justifications are interwoven. For example, if a program contains a specification 3x P(x), the program also contains a justification that exhibits the particulat value of x that makes P true. Analogously, justifications may be used to state how universally quantified formulas are to be instantiated when they are used as hypotheses. Programs so justifiled may be verified by proving quantifier-free formulas. Additional classes of justifications serve related ends. Formally, justifications reduce correctness to a decidable theory. Informally, justifications establish the connection between the executable code and correctness specifications, documenting the reasoning on which the correctness is based.
[1]
E. Marmier.
A Program Verifier for Pascal
,
1974,
IFIP Congress.
[2]
L. Peter Deutsch.
An interactive program verifier
,
1973
.
[3]
Norihisa Suzuki,et al.
Verifying programs by algebraic and logical reduction
,
1975,
Reliable Software.
[4]
ZOHAR MANNA,et al.
The Correctness of Programs
,
1969,
J. Comput. Syst. Sci..
[5]
C. A. R. Hoare,et al.
Procedures and parameters: An axiomatic approach
,
1971,
Symposium on Semantics of Algorithmic Languages.
[6]
Donald I. Good,et al.
An interactive program verification system
,
1975
.
[7]
David C. Luckham,et al.
A methodology for verifying programs
,
1975
.
[8]
James C. King,et al.
A Program Verifier
,
1971,
IFIP Congress.
[9]
James H. Morris,et al.
Subgoal induction
,
1977,
CACM.
[10]
Rodney W. Topor,et al.
Interactive program verification using virtual programs
,
1975
.
[11]
Ben Wegbreit,et al.
The synthesis of loop predicates
,
1974,
CACM.