The Design of Well-Structured and Correct Programs

1 Introducing Top-down Design.- 1.1 The Idea of Top-down Design.- 1.2 An Example: The Greatest Common divisor.- 1.3 Programming Language and Machine Language.- 2 Basic Compositions of Actions and Their Proof Rules.- 2.1 Relations for Program Correctness.- 2.2 Logical Formulas and Pascal Expressions.- 2.3 Proof Rules for Simple Statements.- 2.4 Compound and Conditional Statements.- 2.5 Repetitive Statements.- 2.6 Summary of Basic Proof Rules.- 2.7 Using the Basic Proof Rules.- 2.8 Correct Termination of Algorithms.- Exercises.- 3 Data Types.- 3.1 Introduction.- 3.2 A Primer on Set Theory.- 3.3 Scalar Types and Simple Types.- 3.4 Arrays, Records, and Files.- 3.5 Processing Arrays.- 3.6 Processing Files and Records.- 3.7 Set Manipulation in Pascal.- Exercises.- 4 Developing Programs with Proofs of Correctness.- 4.1 Introduction.- 4.2 Squares and Palindromes.- 4.3 Sorting Arrays and Files.- 4.4 Manipulating Sets.- Exercises.- 5 Procedures and Functions.- 5.1 Procedures and Functions.- 5.3 Functions and Their Proof of Correctness.- 5.4 Proofs of Correctness of Procedures.- Exercises.- 6 Recursion.- 6.1 Introduction.- 6.2 Design and Correctness of Recursive Procedures.- 6.3 Recursive Data Types.- 6.4 Recursive Algorithms and Recursive Data Structures.- Exercises.- 7 Programming with and without Gotos.- 7.1 Goto Statements.- 7.2 Proof Rules for Gotos.- 7.3 Return Exits and the Algorithm Find.- 7.4 Failure Exits and the Algorithm Lookup.- 7.5 Loops with Exits in the Middle.- Exercises.- References.- Appendixes.- Index of Algorithms.- Author Index.

[1]  C. A. R. Hoare,et al.  Proof of a Recursive Program: Quicksort , 1971, Comput. J..

[2]  Corrado Böhm,et al.  Flow diagrams, turing machines and languages with only two formation rules , 1966, CACM.

[3]  David Gries,et al.  Compiler Construction for Digital Computers , 1971 .

[4]  David Gries,et al.  An introduction to programming: A structured approach using PL/1 and PL/C , 1973 .

[5]  C. A. R. Hoare,et al.  A contribution to the development of ALGOL , 1966, CACM.

[6]  永田 守男,et al.  Verifying Properties of Parallel Programs : An Axiomatic Approach , 1976 .

[7]  John McCarthy,et al.  Recursive functions of symbolic expressions and their computation by machine, Part I , 1959, Commun. ACM.

[8]  Alfred V. Aho,et al.  The design and analysis of algorithms , 1974 .

[9]  Donald E. Knuth,et al.  The remaining trouble spots in ALGOL 60 , 1967, Commun. ACM.

[10]  T. Hoare Remarks on “Program Proving: Jumps and Functions” , 1976 .

[11]  John F. Wakerly,et al.  The programming language PASCAL , 1979, Microprocessors and microsystems.

[12]  Suad Alagic,et al.  Structured extension of COBOL for handling data bases , 1976, Inf. Syst..

[13]  J. B. Ward Principles of programming , 1956, Electrical Engineering.

[14]  Donald E. Knuth,et al.  The Art of Computer Programming, Vol. 3: Sorting and Searching , 1974 .

[15]  C. A. R. Hoare,et al.  An Axiomatic Definition of the Programming Language PASCAL , 1973, Acta Informatica.

[16]  Kristen Nygaard,et al.  SIMULA: an ALGOL-based simulation language , 1966, CACM.

[17]  Edouard Marmier Automatic verification of Pascal programs , 1975 .