Abstract:
When considering the correctness of programs, the only absolute demonstration of quality is mathematical proof. Yet the complexity of these proofs makes them all but impossible both to construct and read, and the correctness of the proofs themselves come into question. We take an approach to the creation of these proofs based on specifying an axiomatic semantics for the programming language, and using that semantics to automatically create a Verification Condition Generator, a program that takes a general program written in the language and creates the proof of that program, modulo a set of verification conditions, to be proven by hand. This automates much of the detailed work of creating the proof. Yet even this VCG technique depends on the soundness of the axiomatic semantics, and in fact, many proposed axiomatic semantics have suffered from unsoundness. We take the difficult but secure approach of foundationally defining an operational semantics of the programming language, including concurrency, and then proving the axioms and rules of inference of the axiomatic semantics from the operational semantics as theorems. Once this is done, the correctness of the VCG function itself can be proven, so the proofs of concurrent programs as constructed by the VCG in a way that is known to be sound, modulo the truth of the
Citations
|
1345
|
The Temporal Logic of Reactive and Concurrent Systems: Specification
– Manna, Pnueli
- 1992
|
|
952
|
An Axiomatic Basis for Computer Programming
– Hoare
- 1969
|
|
694
|
Parallel Program Design: A Foundation
– Chandy, Misra
- 1988
|
|
402
|
Assigning meanings to programs
– FLOYD
- 1967
|
|
257
|
An Axiomatic Proof Technique for Parallel Programs I
– Owicki, Gries
- 1976
|
|
220
|
An Introduction to Mathematical Logic and Type Theory: To Truth Through Proof
– Andrews
- 1986
|
|
162
|
The Formal Semantics of Programming Languages: An Introduction
– Winskel
- 1993
|
|
83
|
Verifying properties of parallel programs: An axiomatic approach
– Owicki, Gries
- 1976
|
|
60
|
Mechanizing programming logics in higher order logic
– Gordon
|
|
43
|
An operational semantics for CSP
– Plotkin
- 1982
|
|
35
|
Assignment and procedure call proof rules
– Gales, Levin
- 1980
|
|
32
|
The Semantics of Programming Languages
– Hennessy
- 1990
|
|
28
|
and Ernst-Rudiger Olderog. Verification of Sequential and Concurrent Programs
– Apt
- 1991
|
|
22
|
A Verification Condition Generator for FORTRAN
– Boyer, Moore
- 1981
|
|
12
|
Proving total correctness of recursive procedures. Information and Computation
– America, Boer
- 1990
|
|
11
|
A structural approach to operational semantics. Lecture notes
– Plotkin
- 1981
|
|
8
|
A Verified Program Verifier
– Ragland
- 1973
|
|
8
|
A Survey of Verification Techniques for Parallel Programs
– Barringer
- 1985
|
|
6
|
Substitution Revisited, Theoretical Computer Science 59
– Stoughton
- 1988
|
|
6
|
Ten years of hoare logic: A survey---part 1
– Apt
- 1981
|
|
5
|
Total correctness for procedures
– Sokolowski
- 1977
|
|
5
|
A structure-directed total correctness proof rule for recursive procedure calls
– Pandya, Joseph
- 1986
|
|
3
|
Automatic Construction of Verification Condition Generators from Hoare Logics
– Moriconi, Schwartz
- 1980
|
|
1
|
This paragraph is essentially taken from Egidio Astesiano, Inductive and Operational Semantics, in Formal Description of Programming Concepts
– Neuhold, Paul
- 1991
|
|
1
|
The Logic of
– Cartwright, Oppen
- 1981
|
|
1
|
Inductive and Operational Semantics, in Formal Description of Programming Concepts
– Astesiano
- 1991
|