The problem: How to convince programmers and computer science students that the proving of correctness of their programs is a way of program verification, which is feasible to anybody who has some experience with systematic thinking and reasoning (represented by some mathematical or engineering training)? The question: Why even good programmers and good computer science students hesitate to learn and to use correctness proving? An answer: One of the reasons may be the fact that in last years much more frequently formal (formalized) proofs of correctness are studied from pure logical point of view, based on Hoare's proof rules and notation [Hoar69] (e.g., a tutorial [Haki76], or [OwGr76], or a textbook [Bakk80], or [ApFR80], etc.), rather than informal (usual mathematical) proo[s based on original Floyd's approach [Floy67] elaborated, in more details, in another textbook [Mann74] concerning program scheme theory. As a consequence there is a perception by programmers that each program correctness proving must be formal with a lot of special notation making it incomprehensible. A solution: Frequently to present informal program correctness proofs of programs, which assume deep knowledge of the problem solved, in a very similar way as there are collected proofs of mathematical theorems, and to stress that, essentially, proving program correctness is as easy or difficult as is actual informal, mathematical proving theorems. It seems to be much more inportant to train programmers in informal mathematical proving than in formal logical proving.(in accordance with [Aust 79] but contrary to [Srie 80]). 1. Formalisation~ formal versus informal proofs in mathematics In the development of mathematics (computer science)~first a conjectured theorem is discovered (an algorithm or program is designed), and only later one tries to prove, somehow, the conjecture (the correctness of the program). A formal proof was not designed either to discover new theorems or to pro~e them. The original Hilbert's formalization was a method how to eliminate any meaning from reasoning to ensure that only pure logical forms are used. Obviously, an informal reasoning was assumed. The concept of formal proof within a logical system has been around for a very long time, but since its introduction mathematicans did prove thousands and millions [MiLP79]of theorems independently ofanyldea of formal proof. In addition, all ambitious attempts of automatic proving theorems in AI failed totally. How anybody can expect a different fate with formal correctness proving of programs?. Floyd versus Hoare I or Fortran versus Algol Floyd's original …
[1]
Willem P. de Roever,et al.
A Proof System for Communicating Sequential Processes
,
1980,
ACM Trans. Program. Lang. Syst..
[2]
J. W. de Bakker,et al.
Mathematical theory of program correctness
,
1980,
Prentice-Hall international series in computer science.
[3]
Richard J. Lipton,et al.
Social processes and proofs of theorems and programs
,
1977,
POPL.
[4]
C. A. R. HOARE,et al.
An axiomatic basis for computer programming
,
1969,
CACM.
[5]
Karel Culík.
An advanced programming language definition and domain correctness of programs
,
1982,
SIGP.
[6]
C. A. R. Hoare,et al.
An axiomatic basis for computer programming
,
1969,
CACM.
[7]
SIDNEY L. HANTLER,et al.
An Introduction to Proving the Correctness of Programs
,
1976,
CSUR.
[8]
Zohar Manna,et al.
Introduction to mathematical theory of computation
,
1972
.
[9]
Richard H. Austing,et al.
Curriculum '78: recommendations for the undergraduate program in computer science— a report of the ACM curriculum committee on computer science
,
1979,
CACM.
[10]
Anthony Ralston,et al.
Computer Science, Mathematics, and the Undergraduate Curricula in Both.
,
1981
.
[11]
David Gries.
Educating the Programmer: Notation, Proofs and the Development of Programs
,
1980,
IFIP Congress.